﻿var popupExtenderId;
var popupExtenders=new Array();
var allNiceLists=new Array();
var allTabViews=new Array();
var allScrollingPaginators=new Array();
var allModalUpdatingAreas=new Array();
var allSelectAll=new Array();
var allDatePickers=new Array();
var conv_shadow;
var imbar_holder;
String.prototype.trim=function() {
    return this.replace(/^\s+|\s+$/g,"");
}
function trim(string) {
    return string.replace(/^\s+|\s+$/g,"");
}
function test() {
    alert('test');
}
AddAjaxPageLoaded=function(handler){Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(handler);}
AddAjaxBeginRequest=function(handler){Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(handler);}
AddAjaxEndRequest=function(handler){Sys.WebForms.PageRequestManager.getInstance().add_endRequest(handler);}
/////////////////////////////// Modal background in profile /////////////////////////////////////////////
//fix of one specific bug in profile
//collapsible areas with css overflow set to hidden are above the modal background
FixModalBackgroundInProfile=function() {
    var c=Sys.Application.getComponents();
    //var all = '';
    for(var i=0;i<c.length;i++) {
        //all += '\n' + Object.getType(c[i]).getName() + '\n' + 'c[i].get_events(): ' + c[i].get_events();
        if(Object.getType(c[i]).getName()=='AjaxControlToolkit.ModalPopupBehavior'||
	    (Object.getType(c[i]).getName()=='AjaxControlToolkit.PopupBehavior'&&!window.all)) {
            //alert('attaching events');
            c[i].get_events().removeHandler('showing',PopupShowingProfile);
            c[i].get_events().addHandler('showing',PopupShowingProfile);
            c[i].get_events().removeHandler('hidden',PopupHiddenProfile);
            c[i].get_events().addHandler('hidden',PopupHiddenProfile);
        }
    }
    //alert(all);
}
PopupShowingProfile=function(event) {
    //alert('PopupShowing')
    SetOverflows("visible");
}
PopupHiddenProfile=function(event) {
    //alert('PopupHidden')
    SetOverflows("hidden");
}
SetOverflows = function(value) {
    var collapsibles = $('div.Collapsible').get();
    for (var i = 0; i < collapsibles.length; i++) {
        collapsibles[i].style.overflow = value;
        collapsibles[i].style.overflowY = value;
        collapsibles[i].style.overflowX = value;
    }
}
//don't need any more, but references to this function can still exist in live release
RegisterPopupEvents=function(extenderId) { }
//don't need any more, but references to this function can still exist in live release
AddPopupBugfix=function(extenderId) { }
if((window.document.location.href.toLowerCase().indexOf('profile.aspx')> -1)||
(window.document.location.href.toLowerCase().indexOf('profileother.aspx')> -1))
    AddAjaxPageLoaded(FixModalBackgroundInProfile);
/////////////////////// Modal background in timeline //////////////////////////
//fix of one specific bug in timeline
//right section in timeline event details with friends invited to event is above modal background
//issue in IE
FixModalBackgroundInTimeline=function() {
    var c=Sys.Application.getComponents();
    var all;
    for(var i=0;i<c.length;i++) {
        // all += 'Object.getType(c[i]).getName(): ' + Object.getType(c[i]).getName() + '\n';
        if(Object.getType(c[i]).getName()=='AjaxControlToolkit.ModalPopupBehavior'||
        Object.getType(c[i]).getName()=='Happy.AddFriendBehavior') {
            //all += '\n' + Object.getType(c[i]).getName() + '\n' + 'c[i].get_events(): ' + c[i].get_events() + '\n\n';
            //alert('attaching events');
            c[i].get_events().removeHandler('showing',PopupShowingTimeline);
            c[i].get_events().addHandler('showing',PopupShowingTimeline);
            c[i].get_events().removeHandler('hidden',PopupHiddenTimeline);
            c[i].get_events().addHandler('hidden',PopupHiddenTimeline);
        }
    }
    //alert(all);
}
PopupShowingTimeline=function(element) {
    var rightColumn = $('div.column2', $('#event_container')).get();
    if(rightColumn&&rightColumn.length==1) {
        if(element.get_id().indexOf('mpbDelete')> -1) rightColumn[0].style.zIndex=0;
        else rightColumn[0].style.zIndex= -1;
    }
}
PopupHiddenTimeline=function(element) {
    var rightColumn = $('div.column2', $('#event_container')).get();
    if(rightColumn&&rightColumn.length==1) rightColumn[0].style.zIndex='';
}
//if(Sys.Browser.name=='Microsoft Internet Explorer'&&
//window.document.location.href.toLowerCase().indexOf('timeline.aspx')> -1)
//    AddAjaxPageLoaded(FixModalBackgroundInTimeline);



/////////////////// Timeline popup bugfix ////////////////////
//Moving popup nodes in very naughty way! don't try this at home
//var backParent;
//var foreParent;
MovePopupNodes = function(event){
    //var test;
    var c = Sys.Application.getComponents();
    for(var i = 0; i < c.length; i++) {
        if(Object.getType(c[i]).getName() == 'AjaxControlToolkit.ModalPopupBehavior' &&
        (c[i].get_id().indexOf('_mpbDelete') != -1) || (c[i].get_id().indexOf('_DeleteModalPopupExtender') != -1)){
            if(c[i]._foregroundElement.parentNode && c[i]._backgroundElement.parentNode){
                var foreground = c[i]._foregroundElement;
                var background = c[i]._backgroundElement;
                c[i]._foregroundElement.parentNode.removeChild(c[i]._foregroundElement);
                c[i]._backgroundElement.parentNode.removeChild(c[i]._backgroundElement);
                c[i]._foregroundElement = foreground;
                c[i]._backgroundElement = background;
                document.body.appendChild(foreground);
                document.body.appendChild(background);                
                //test += c[i].get_id() + '\n' + c[i]._foregroundElement.id + '\n' + c[i]._backgroundElement.id + '\n';
                //test += c[i]._foregroundElement.parentNode + '\n' + c[i]._backgroundElement.parentNode + '\n\n';
            }
        }
    }       
    //alert(test);
}
_MovePopupNodes = function(element){
    foreParent = element._foregroundElement.parentNode;
    backParent = element._backgroundElement.parentNode;
    var foreground = element._foregroundElement;
    var background = element._backgroundElement;
    element._foregroundElement.parentNode.removeChild(element._foregroundElement);
    element._backgroundElement.parentNode.removeChild(element._backgroundElement);
    element._foregroundElement = foreground;
    element._backgroundElement = background;
    document.body.appendChild(foreground);
    document.body.appendChild(background);
}
_MovePopupNodesBack = function(element){
    var foreground = element._foregroundElement;
    var background = element._backgroundElement;
    element._foregroundElement.parentNode.removeChild(element._foregroundElement);
    element._backgroundElement.parentNode.removeChild(element._backgroundElement);
    element._foregroundElement = foreground;
    element._backgroundElement = background;
    foreParent.appendChild(foreground);
    backParent.appendChild(background);
}
if(Sys.Browser.name=='Microsoft Internet Explorer' && window.document.location.href.toLowerCase().indexOf('timeline.aspx')> -1){
   AddAjaxPageLoaded(MovePopupNodes);   
}




////////////////////////////////////// Modal background across the website  //////////////////////////////////
//cross website bugfix - top menu with position set to relative is above background, changing to 'static' when popup is visible
var activeTime;
var now;
FixModalBackground=function() {
    //alert('FixModalBackground');
    PopupHidden();
    var c=Sys.Application.getComponents();
    //var all = 'FixModalBackground\n\nc.length: ' + c.length + '\n\n';
    for(var i=0;i<c.length;i++) {
        //all += 'Object.getType(c[i]).getName(): ' + Object.getType(c[i]).getName() + '\n';
        //alert('\nc[i].get_id(): ' + c[i].get_id()) + '\n\n';
        if(Object.getType(c[i]).getName()=='AjaxControlToolkit.ModalPopupBehavior'||
        Object.getType(c[i]).getName()=='Happy.AddFriendBehavior') {
            //all += '\n' + Object.getType(c[i]).getName() + '\n' + 'c[i].get_events(): ' + c[i].get_events() + '\n\n';
            //alert('attaching events');
            c[i].get_events().removeHandler('showing',PopupShowing);
            c[i].get_events().addHandler('showing',PopupShowing);
            c[i].get_events().removeHandler('hidden',PopupHidden);
            c[i].get_events().addHandler('hidden',PopupHidden);
        }
    }
    //alert(all);
}
PopupShowing=function() {
    //alert('PopupShowing\n\nObject.getType(element).getName(): ' + Object.getType(element).getName() + '\n\nelement._backgroundElement.style.display: ' + element._backgroundElement.style.display + '\n\nelement._backgroundElement.style.visibility: ' + element._backgroundElement.style.visibility)
    //var backVisible = (element._backgroundElement.style.display == 'none');
    AdsTidyup();
    if($get('topnav')) {
        var topnav=$get('topnav');
        var lis=topnav.getElementsByTagName('li');
        for(var i=0;i<lis.length;i++) if(lis[i].id) lis[i].style.position='static';
    }
    //alert('PopupShowing\n\nconv_shadow: '+conv_shadow+'\n\nconv_shadow.style: '+conv_shadow.style+'\n\nconv_shadow.style.zIndex: '+conv_shadow.style.zIndex)
    //if(conv_shadow) conv_shadow.style.zIndex='498';
    //if(imbar_holder) imbar_holder.style.zIndex='499';       
}
PopupHidden = function() {
    //alert('PopupHidden\n\nObject.getType(element).getName(): ' + Object.getType(element).getName() + '\n\nelement._backgroundElement.style.display: ' + element._backgroundElement.style.display + '\n\nelement._backgroundElement.style.visibility: ' + element._backgroundElement.style.visibility)
    //var doRedo = (element._backgroundElement.style.display == 'none');
    if ($get('topnav')) {
        var topnav = $get('topnav');
        var lis = topnav.getElementsByTagName('li');
        for (var i = 0; i < lis.length; i++) if (lis[i].id) lis[i].style.position = 'relative';
    }
    //if(conv_shadow) conv_shadow.style.zIndex='1000';
    //if(imbar_holder) imbar_holder.style.zIndex='1001';
}
AdsTidyup = function() {
    var elements = [];
    if ($get('bannerad')) elements.push($get('bannerad'));
    if ($get('contentbottom')) elements.push($get('contentbottom'));
    var tmpElements = getElementsByClassName('sky', 'div', window.document);
    if (tmpElements.length > 0) { elements = elements.concat(tmpElements) };
    tmpElements = getElementsByClassName('mpu', 'div', window.document);
    if (tmpElements.length > 0) { elements = elements.concat(tmpElements) };
    tmpElements = getElementsByClassName('footer', 'div', window.document);
    if (tmpElements.length > 0) { elements = elements.concat(tmpElements) }
    for (var i = 0; i < elements.length; i++) {
        elements[i].style.overflow = 'hidden';
        //elements[i].style.position = 'relative';
        FixAdZindex(elements[i]);
        //FixAdPosition(elements[i]);
    }
}
//reseting css z-index of all childnodes in ad markup
FixAdZindex = function(element){
    if(element.nodeType == 1){
        if(element.style.zIndex) element.style.zIndex='';        
        for(var i = 0; i < element.childNodes.length; i++)
            FixAdZindex(element.childNodes[i]);
    }
}
//adding div.clear inside ad container
FixAdPosition = function(element){
    if(element.nodeType == 1){
        var hasClear = false;
        for(var i = 0; i < element.childNodes.length; i++){
            if(element.childNodes[i].nodeType == 1 && element.childNodes[i].className == 'clear') hasClear = true;
        }
        if(!hasClear){
            var clear = document.createElement('div');
            clear.className = 'clear';
            element.appendChild(clear);
        }
    }
}
/*if(window.document.location.href.toLowerCase().indexOf('timeline.aspx') > -1 || 
window.document.location.href.toLowerCase().indexOf('photos.aspx') > -1 ||
window.document.location.href.toLowerCase().indexOf('profile.aspx') > -1 ||
window.document.location.href.toLowerCase().indexOf('profileother.aspx') > -1 ||
window.document.location.href.toLowerCase().indexOf('messageview.aspx'))*/
//FixModalBackground();
function pageLoad() { FixModalBackground(); }
//Sys.Application.add_init(FixModalBackground);
//AddAjaxPageLoaded(FixModalBackground);
/////////////////////////////// More ads impressions ///////////////////////////////////////
ImpressionsSetup=function() {
    //var all = '';
    //Reload adverts on closing popups and selecting items in accordion panels
    //alert('ImpressionsSetup')
    var c=Sys.Application.getComponents();
    for(var i=0;i<c.length;i++) {
        //all += Object.getType(c[i]).getName() + '\n';
        //alert('c[i].get_id(): ' + c[i].get_id());
        if((Object.getType(c[i]).getName()=='AjaxControlToolkit.ModalPopupBehavior')||
        (Object.getType(c[i]).getName()=='AjaxControlToolkit.ModalPopupExtender')||
        (Object.getType(c[i]).getName()=='Happy.AddFriendBehavior')) {
            //all += Object.getType(c[i]).getName() + '\n' + 'c[i].get_events(): ' + c[i].get_events() + '\n\n';
            if((c[i].get_id().indexOf('JoinLinkModalPopupExtender')> -1)||
            (c[i].get_id().indexOf('modal')> -1)) {
                c[i].get_events().removeHandler('hiding',ReloadAds);
                c[i].get_events().addHandler('hiding',ReloadAds);
            }
        }
        if((window.document.location.href.toLowerCase().indexOf('groupsearch.aspx')> -1)&&
        (Object.getType(c[i]).getName()=='AjaxControlToolkit.AccordionBehavior')) {
            c[i].remove_selectedIndexChanging(ReloadAds);
            c[i].add_selectedIndexChanging(ReloadAds);
        }
    }
    //alert(all)
}
ReloadAds=function(event) {
    //alert('ReloadAds\nevent: ' + event + '\nObject.getType(event).getName(): ' + Object.getType(event).getName() + '\nevent.target: ' + event.target + '\nevent.srcElement: ' + event.srcElement + '\nthis: ' + this + '\nevent._backgroundElement.style.display: ' + event._backgroundElement.style.display + '\nevent._foregroundElement.style.display: ' + event._foregroundElement.style.display);
    //alert('ReloadAds\nevent: ' + event + '\nObject.getType(event).getName(): ' + Object.getType(event).getName() + '\nevent.target: ' + event.target + '\nevent.srcElement: ' + event.srcElement + '\nthis: ' + this);
    if((event._backgroundElement)&&(event._backgroundElement.style.display!='none')) {
        FR.onLoad.loadAds();
    }
    if(Object.getType(event).getName()=='AjaxControlToolkit.AccordionBehavior') {
        FR.onLoad.loadAds();
    }
}
//addLoadEvent(ImpressionsSetup);
Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(ImpressionsSetup);
//////////////// NiceList /////////////////////
NiceList=function(divWithAllListsId) {
    this.containerId=divWithAllListsId;
    this.checkboxIds=new Array();
    this.event=null;
    this.activeId=null;
    this.allULLists=null;
    this.allOLLists=null;
    this.Initalize();
    //this.event;
    //this.parentLi;
}
NiceList.prototype.Initalize=function() {
    if($get(this.containerId)) {
        var allListsContainer=$get(this.containerId);
        //alert('AttachEvents\n\nallListsContainer: ' + allListsContainer + '\n\nallListsContainer.tagName: ' + allListsContainer.tagName);
        if(allListsContainer.tagName.toLowerCase()=='ul') {
            this.allULLists=new Array(allListsContainer);
            this.AttachEvents(this.allULLists);
            this.RefreshLayout(this.allULLists);
        } else if(allListsContainer.tagName.toLowerCase()=='ol') {
            this.allOLLists=new Array(allListsContainer);
            this.AttachEvents(this.allOLLists);
            this.RefreshLayout(this.allOLLists);
        } else {
            this.allULLists=allListsContainer.getElementsByTagName('ul');
            this.AttachEvents(this.allULLists);
            this.RefreshLayout(this.allULLists);
            this.allOLLists=allListsContainer.getElementsByTagName('ol');
            this.AttachEvents(this.allOLLists);
            this.RefreshLayout(this.allOLLists);
        }
    }
}
NiceList.prototype.AttachEvents=function(allLists) {
    var selected=null;
    var singleList=null;
    for(var i=0;i<allLists.length;i++) {
        singleList=allLists[i].getElementsByTagName('li');
        for(var j=0;j<singleList.length;j++) {
            //getting all spans (when name attribute is set in checkbox control, ASP puts it inside span with this name)
            selected=this.CheckBoxFromLi(singleList[j])
            if(selected&&selected.id) this.checkboxIds.push(selected.id);
            $addHandler(singleList[j],'mouseover',this.ItemOver.bind(this));
            if(Sys.Browser.name=='Microsoft Internet Explorer') $addHandler(singleList[j],'mouseleave',this.ItemOut.bind(this));
            else $addHandler(singleList[j],'mouseout',this.ItemOut.bind(this));
            $addHandler(singleList[j],'click',this.ItemClick.bind(this));
            if(this.CheckBoxFromLi(singleList[j])) $addHandler(this.CheckBoxFromLi(singleList[j]),'click',this.ItemClick.bind(this));
        }
    }
}
NiceList.prototype.RefreshLayout=function(allLists) {
    if(!allLists) return null;
    var selected=null;
    var singleList=null;
    for(var i=0;i<allLists.length;i++) {
        allLists[i].className='singleList';
        singleList=allLists[i].getElementsByTagName('li');
        for(var j=0;j<singleList.length;j++) {
            //getting all spans (when name attribute is set in checkbox control, ASP puts it inside span with this name)
            selected=this.CheckBoxFromLi(singleList[j])
            if(selected&&selected.checked&&selected.checked==true) singleList[j].className='niceItemSelected';else singleList[j].className='niceItem';
        }
    }
}
NiceList.prototype.RefreshLists=function() {
    this.RefreshLayout(this.allULLists);
    this.RefreshLayout(this.allOLLists);
}
NiceList.prototype.CheckBoxFromLi=function(liElement) {
    //alert('CheckBoxFromLi\nliElement: ' + liElement);// + '\nliElement.innerHTML: ' + liElement.innerHTML)
    if(!liElement) return null;
    var selected=liElement.getElementsByTagName('input');
    for(var k=0;k<selected.length;k++) {
        if(selected[k].getAttribute('type')=='checkbox') {
            return selected[k];
        }
    }
}
NiceList.prototype.LiFromTarget=function(target) {
    //alert('LiFromTarget\ntarget: ' + target)
    if(!target) return null;
    if(target.tagName.toLowerCase()=='li') return target;
    else if(target.tagName.toLowerCase()!='select'&&target.tagName.toLowerCase()!='option'&&
    target.parentNode&&target.parentNode.tagName.toLowerCase()!='body'&&
    target.parentNode.tagName.toLowerCase()!='select'&&target.parentNode.tagName.toLowerCase()!='option') {
        return this.LiFromTarget(target.parentNode);
    } else return null;
}
NiceList.prototype.ItemOver=function(event) {
    //alert('ItemOver\n\nevent: ' + event + '\n\nthis.LiFromTarget(event.target): ' + this.LiFromTarget(event.target));
    var li=this.LiFromTarget(event.target);
    var checkbox=this.CheckBoxFromLi(li);
    if(!li||!checkbox) return null;
    if(checkbox&&checkbox.checked==true) {
        li.className='niceItemSelectedOver';
    } else {
        li.className='niceItemOver';
    }
    //alert('ItemOver\n\nevent: ' + event + '\n\nthis.event: ' + this.event + '\n\nevent.target == this.event.target: ' + (event.target == this.event.target))
    //if(this.parentLi == li) this.event = null
}
NiceList.prototype.ItemOut=function(event) {
    //alert('ItemOut\n\nevent: ' + event + '\n\nthis.LiFromTarget(event.target): ' + this.LiFromTarget(event.target));
    var li=this.LiFromTarget(event.target);
    var checkbox=this.CheckBoxFromLi(li);
    if(!li||!checkbox) return null;
    //alert('ItemOut\n\nli: ' + li + '\n\ncheckbox: ' + checkbox)
    if(checkbox&&checkbox.checked==true) {
        li.className='niceItemSelected';
    } else {
        li.className='niceItem';
    }
}
NiceList.prototype.DoItemOut=function() {
    if(this.event) {
        //alert('ItemOut\n\nevent: ' + event + '\n\nthis.LiFromTarget(event.target): ' + this.LiFromTarget(event.target));
        var li=this.LiFromTarget(this.event.target);
        var checkbox=this.CheckBoxFromLi(li);
        //alert('ItemOut\n\nli: ' + li + '\n\ncheckbox: ' + checkbox)
        if(checkbox&&checkbox.checked==true) {
            li.className='niceItemSelected';
        } else {
            li.className='niceItem';
        }
    }
}
NiceList.prototype.ItemClick=function(event) {
    //alert('ItemClick\n\nevent: ' + event + '\n\nevent.target:' + event.target + '\n\nevent.target.innerHTML: ' + event.target.innerHTML)
    var li=this.LiFromTarget(event.target);
    var checkbox=this.CheckBoxFromLi(li);
    //alert('ItemClick\nli: ' + li + '\nli.className: ' + li.className + '\ncheckbox: ' + checkbox + '\ncheckbox.checked: ' + checkbox.checked + '\nevent.target.tagName.toLowerCase(): ' + event.target.tagName.toLowerCase())     
    if(!li||!checkbox) return null;
    if(event.target!=checkbox) checkbox.click();
    if(checkbox.checked==true) {
        li.className='niceItemSelectedOver';
    } else {
        li.className='niceItemOver';
    }
}
NiceList.prototype.SwitchItem=function(chkId) {
    var index=Array.indexOf(this.checkboxIds,chkId,0);
    if(index> -1) {
        if($get(this.checkboxIds[index])) {
            if($get(this.checkboxIds[index]).checked==true) {
                this.SetItem(false,chkId);
                return;
            }
            if($get(this.checkboxIds[index]).checked==false) this.SetItem(true,chkId);
        }
    }
}
NiceList.prototype.SelectItem=function(chkId) {
    this.SetItem(true,chkId);
}
NiceList.prototype.UnselectItem=function(chkId) {
    this.SetItem(false,chkId);
}
NiceList.prototype.SetItem=function(select,chkId) {
    var index=Array.indexOf(this.checkboxIds,chkId,0);
    //alert('SetItem\nnewState: ' + newState + '\nchkId: ' + chkId + '\nindex: ' + index + '\nthis.checkboxIds.length: ' + this.checkboxIds.length);// + '\n$get(this.checkboxIds[index])' + $get(this.checkboxIds[index]) + '\nArray.indexOf(this.checkboxIds, chkId, 0): ' + Array.indexOf(this.checkboxIds, chkId, 0))
    if(index> -1) {
        //alert('$get(this.checkboxIds[index]): ' + $get(this.checkboxIds[index]));
        if($get(this.checkboxIds[index])&&this.LiFromTarget($get(this.checkboxIds[index]))) {
            var chk=$get(this.checkboxIds[index]);
            //alert('chk: ' + chk);
            var li=this.LiFromTarget(chk);
            //alert('this.checkboxIds[index]: ' + this.checkboxIds[index] + '\nchk: ' + chk + '\nthis.LiFromTarget(chk): ' + this.LiFromTarget(chk))
            if((select==true)&&(chk.checked==false)) {
                chk.checked=true;
                li.className='niceItemSelected';
            }
            if((select==false)&&(chk.checked==true)) {
                chk.checked=false;
                li.className='niceItem';
            }
        }
    }
}
NiceList.prototype.SelectAll=function() { this.SetAll(true); }
NiceList.prototype.UnselectAll=function() { this.SetAll(false); }
NiceList.prototype.SetAll=function(selected) {
    for(var i=0;i<this.checkboxIds.length;i++) this.SetItem(selected,this.checkboxIds[i]);
}
function AddNiceList(divWithAllListsId) {
    for(var i=0;i<allNiceLists.length;i++) {
        if(allNiceLists[i].containerId==divWithAllListsId) {
            allNiceLists[i]=new NiceList(divWithAllListsId);
            return;
        }
    }
    allNiceLists.push(new NiceList(divWithAllListsId));
    //this.allNiceLists[0] = new NiceList(divWithAllListsId);
}
function MakeNiceList(divWithAllListsId) { allNiceLists.push(new NiceList(divWithAllListsId)); }
/////////////////// TabView ////////////////
TabView=function(menuListId,selectedTabId) {
    this.menuListId=menuListId;
    this.tabIds=new Array();
    this.menuItems=new Array();
    this.InitializeObject(selectedTabId);
}
TabView.prototype.InitializeObject=function(selectedTabId) {
    if($get(this.menuListId)) {
        this.menuItems=$get(this.menuListId).getElementsByTagName('li');
        for(var i=0;i<this.menuItems.length;i++) {
            this.menuItems[i].className='tabMenuItem';
            //alert('this.menuItems[i].getAttribute(\'tabId\'): ' + this.menuItems[i].getAttribute('tabId'))
            if(this.menuItems[i].getAttribute('tabId')) {
                var tabId=this.menuItems[i].getAttribute('tabId');
                if($get(tabId)) {
                    this.tabIds.push(tabId);
                    if(tabId==selectedTabId) {
                        this.menuItems[i].className='tabMenuItemSelected';
                        $get(tabId).style.display='block';
                        $get(tabId).style.visibility='visible';
                    } else {
                        $get(tabId).style.display='none';
                        $get(tabId).style.visibility='hidden';
                    }
                }
            }
            $addHandler(this.menuItems[i],'mouseover',this.MenuItemOver.bind(this));
            $addHandler(this.menuItems[i],'mouseout',this.MenuItemOut.bind(this));
            $addHandler(this.menuItems[i],'click',this.MenuItemClick.bind(this));
        }
    }
}
TabView.prototype.MenuItemOver=function(event) {
    if(event.target.className=='tabMenuItemSelected')
        event.target.className='tabMenuItemSelectedOver';
    else
        event.target.className='tabMenuItemOver';
}
TabView.prototype.MenuItemOut=function(event) {
    if(event.target.className=='tabMenuItemSelectedOver'||event.target.className=='tabMenuItemSelected')
        event.target.className='tabMenuItemSelected';
    else
        event.target.className='tabMenuItem';
}
TabView.prototype.MenuItemClick=function(event) {
    if(event.target.className=='tabMenuItemSelected'||event.target.className=='tabMenuItemSelectedOver') {
        //event.target.className = 'tabMenuItem';
    } else {
        //alert('this.tabIds.length: ' + this.tabIds.length)
        for(var i=0;i<this.menuItems.length;i++) {
            this.menuItems[i].className='tabMenuItem';
        }
        event.target.className='tabMenuItemSelected';
        var tabIdToShow=event.target.getAttribute('tabId')
        for(var i=0;i<this.tabIds.length;i++) {
            if(tabIdToShow==this.tabIds[i]) {
                $get(this.tabIds[i]).style.display='block';
                $get(this.tabIds[i]).style.visibility='visible';
            } else {
                $get(this.tabIds[i]).style.display='none';
                $get(this.tabIds[i]).style.visibility='hidden';
            }
        }
    }
}
function AddTabView(tabMenuId,selectedTabId) {
    allTabViews.push(new TabView(tabMenuId,selectedTabId));
}
///////////////// ScrollingPaginator ///////////////
ScrollingPaginator=function(holderId,itemsHolderId,selectedItemId,scrollLeftElementId,scrollRightElementId) {
    //if($get())
    this.paginator=$get(holderId);
    this.items=$get(itemsHolderId);
    this.scrollLeft=$get(scrollLeftElementId);
    this.scrollRight=$get(scrollRightElementId);
    this.selected=$get(selectedItemId);
    this.scrolled=0;
    this.singleItemWidth=0;
    this.selectedIndex=0;

    this.Initialize();
    this.AttachEvents();
    this.ScrollToSelected();
}
ScrollingPaginator.prototype.Initialize=function() {

    this.scrollLeft.style.display='block';
    this.scrollLeft.style.visibility='visible';
    this.scrollRight.style.display='block';
    this.scrollRight.style.visibility='visible';
    /*That's breaking everything - don't uncomment!
    this.paginator.style.display = 'block';
    this.paginator.style.visibility = 'visible';
    this.items.style.display = 'block';
    this.items.style.visibility = 'visible';
    */
    this.paginator.style.position='relative';
    //alert('this.paginator.style.position: ' + this.paginator.style.position)
    this.scrollLeft.style.position='absolute';
    this.scrollLeft.style.left='0px';
    this.scrollRight.style.position='absolute';
    this.scrollRight.style.right='0px';
    this.items.style.position='relative';
    this.singleItemWidth=this.items.offsetWidth/this.items.childNodes.length;
    this.selectedIndex=this.GetSelectedIndex();
    //alert('this.singleItemWidth: ' + this.singleItemWidth + '\nthis.selectedIndex: ' +  this.selectedIndex + '\nthis.items.offsetWidth: ' + this.items.offsetWidth + '\nthis.items.childNodes.length: ' + this.items.childNodes.length + '\nthis.items:innerHTML: ' + this.items.innerHTML)
}
ScrollingPaginator.prototype.AttachEvents=function() {
    $addHandler(this.scrollLeft,'mousedown',this.StartScrollLeft.bind(this));
    $addHandler(this.scrollRight,'mousedown',this.StartScrollRight.bind(this));
    $addHandler(this.scrollRight,'focus',this.StartScrollRight.bind(this));
    $addHandler(this.scrollLeft,'mouseup',this.StopScrollLeft.bind(this));
    $addHandler(this.scrollRight,'mouseup',this.StopScrollRight.bind(this));
    $addHandler(this.scrollRight,'blur',this.StopScrollRight.bind(this));
    $addHandler(this.scrollRight,'mouseout',this.StopScrollRight.bind(this));
}
ScrollingPaginator.prototype.GetSelectedIndex=function() {
    //var test = '';
    for(var i=0;i<this.items.childNodes.length;i++) {
        if((this.items.childNodes[i].getAttribute)&&(this.items.childNodes[i].getAttribute('id')=='currentyearId')) return i;
        //test += 'this.items.childNodes[i].innerHTML: ' + this.items.childNodes[i].innerHTML + '\nthis.items.childNodes[i].getAttribute: ' + this.items.childNodes[i].getAttribute + '\n\n';
    }
    //alert(test)
    return -1;
}
ScrollingPaginator.prototype.StartScrollLeft=function() {
    this.doScrollLeft=true;
    setTimeout(this.Slide.bind(this),16);
}
ScrollingPaginator.prototype.StartScrollRight=function() {
    //this.scrolled -= 111;
    //this.items.style.left = this.scrolled + 'px';
    //FR.onLoad.loadAds();
    this.doScrollRight=true;
    setTimeout(this.Slide.bind(this),16);
}
ScrollingPaginator.prototype.StopScrollLeft=function() {
    if(this.doScrollLeft==true) {
        this.doScrollLeft=false;
        setTimeout(this.Slide.bind(this),16);
        //this.ReloadAds();
    }
}
ScrollingPaginator.prototype.StopScrollRight=function() {
    if(this.doScrollRight==true) {
        this.doScrollRight=false;
        setTimeout(this.Slide.bind(this),16);
        //this.ReloadAds();
    }
}
ScrollingPaginator.prototype.ReloadAds=function() {
    //Reload ads after each scrolling end, but not more often than 3000 miliseconds
    if(this.prevReload) {
        var d=new Date();
        //alert('d.getSeconds() - this.prevReload: ' + (d.getSeconds() - this.prevReload))
        if(d.getTime()-this.prevReload>3000) {
            this.prevReload=d.getTime();
            FR.onLoad.loadAds();
        }
    } else {
        var d=new Date();
        this.prevReload=d.getTime();
        FR.onLoad.loadAds();
    }
}
ScrollingPaginator.prototype.Slide=function(event) {
    if(this.doScrollLeft==true) {
        if(this.accelerationL) { this.accelerationL+=1; } else { this.accelerationL=1; }
        var allowed=this.paginator.offsetWidth/2-this.singleItemWidth/2;
        if(this.scrolled+this.accelerationL<allowed) {
            this.scrolled+=this.accelerationL;
        } else {
            this.scrolled=allowed;
            //this.doScrollLeft = false;
            this.StopScrollLeft();
        }
        this.items.style.left=this.scrolled+'px';
        setTimeout(this.Slide.bind(this),16);
    } else this.accelerationL=0;
    if(this.doScrollRight==true) {
        if(this.accelerationR) this.accelerationR+=1;else this.accelerationR=1;
        var allowed= -this.items.offsetWidth+this.paginator.offsetWidth/2+this.singleItemWidth/2;
        if(this.scrolled-this.accelerationR>allowed) {
            //alert('ok\nthis.scrolled: ' + this.scrolled + '\nthis.accelerationR: ' + this.accelerationR + '\nallowed: ' + allowed)
            this.scrolled-=this.accelerationR;
        } else {
            //alert('not ok\nthis.scrolled: ' + this.scrolled + '\nthis.accelerationR: ' + this.accelerationR + '\nallowed: ' + allowed)
            this.scrolled=allowed;
            //this.doScrollRight = false;
            this.StopScrollRight();
        }
        this.items.style.left=this.scrolled+'px';
        setTimeout(this.Slide.bind(this),16);
    } else this.accelerationR=0;
}
ScrollingPaginator.prototype.ScrollToSelected=function() {
    if(this.selected&&this.selectedIndex> -1) {
        this.scrolled=this.paginator.offsetWidth/2-this.singleItemWidth-this.selectedIndex*this.singleItemWidth;
        if(window.all) this.scrolled-=this.singleItemWidth/2;
        this.items.style.left=this.scrolled+'px';
        //alert('this.scrolled: ' + this.scrolled + '\nthis.paginator.offsetWidth: ' + this.paginator.offsetWidth + '\nthis.singleItemWidth: ' + this.singleItemWidth + '\nthis.selectedIndex: ' + this.selectedIndex)
    }
}
AddScrollingPaginator=function(holderId,itemsHolderId,selectedItemId,scrollLeftElementId,scrollRightElementId) {
    allScrollingPaginators.push(new ScrollingPaginator(holderId,itemsHolderId,selectedItemId,scrollLeftElementId,scrollRightElementId));
}
/////////////////////////// ModalUpdatingArea ////////////////////
ModalUpdatingArea=function(updPrgrId,updatedAreaId) {
    this.active=false;
    this.updPrgrId=updPrgrId;
    this.updatedAreaId=updatedAreaId;
    this.AddHandlers();
}
ModalUpdatingArea.prototype.AddHandlers=function() {
    Sys.WebForms.PageRequestManager.getInstance().remove_beginRequest(this.StartUpdate.bind(this));
    Sys.WebForms.PageRequestManager.getInstance().remove_endRequest(this.StopUpdate.bind(this));
    Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(this.StartUpdate.bind(this));
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(this.StopUpdate.bind(this));
}
ModalUpdatingArea.prototype.StartUpdate=function() {
    this.active=true;
    this.UpdateProgress();
}
ModalUpdatingArea.prototype.StopUpdate=function() {
    this.active=false;
}
ModalUpdatingArea.prototype.UpdateProgress=function() {
    if($get(this.updPrgrId)) {
        var updPrgr=$get(this.updPrgrId);
        if($get(this.updatedAreaId)) {
            //$get('scrollingPaginator').style.position = '';
            //alert('$get(\'scrollingPaginator\').style.position: ' + $get('scrollingPaginator').style.position)            
            var list=$get(this.updatedAreaId);
            var b=Sys.UI.DomElement.getBounds(list);
            //var j = Sys.UI.DomElement.getLocation(list);
            //alert('j.x: ' + j.x + '\nj.y: ' + j.y + '\nb.height: ' + b.height + '\nb.width: ' + b.width)
            updPrgr.style.position='absolute';
            //updPrgr.style.zIndex = '10'
            updPrgr.style.top=b.y+'px';
            updPrgr.style.left=b.x+'px';
            updPrgr.style.height=b.height+'px';
            updPrgr.style.width=b.width+'px';
            //updPrgr.style.height = list.offsetHeight + 'px';
            //updPrgr.style.width = list.offsetWidth + 'px';
            updPrgr.style.background='#fff';
            updPrgr.style.filter='alpha(opacity=75)';
            updPrgr.style.opacity='0.75';
            updPrgr.style.zIndex='11';

            if(this.active) setTimeout(this.UpdateProgress.bind(this),50);
        }
    }
}
AddModalUpdatingArea=function(updPrgrId,updatedAreaId) {
    this.allModalUpdatingAreas.push(new ModalUpdatingArea(updPrgrId,updatedAreaId));
}
/////////////////// DatePicker control ////////////////////
DatePicker=function(datePickerHolderId,startDate,endDate,selectedDate) {
    //alert('DatePicker\ndatePickerHolderId: ' + datePickerHolderId + '\nstartDate: ' + startDate + '\nendDate: ' + endDate + '\nselectedDate: ' + selectedDate);
    this.dPickHolderId=datePickerHolderId;
    this.dPickHolder=$get(datePickerHolderId);
    this.monthNames=new Array(12);
    this.dayNames=new Array(7);
    if(!startDate||startDate=='') {
        this.startDate=new Date(0);
    } else {
        this.startDate=new Date(startDate);
    }
    if(!endDate||endDate=='') {
        this.endDate=new Date();
    } else {
        this.endDate=new Date(endDate);
    }
    if(!selectedDate||selectedDate=='') {
        selectedDate=null;
    } else {
        selectedDate=new Date(selectedDate);
    }
    //alert('DatePicker\ndatePickerHolderId: ' + datePickerHolderId + '\nstartDate: ' + startDate + '\nendDate: ' + endDate + '\nselectedDate: ' + selectedDate + '\nthis.dPickHolderId: ' + this.dPickHolderId + '\nthis.dPickHolder: ' + this.dPickHolder + '\nthis.startDate: ' + this.startDate + '\nthis.endDate: ' + this.endDate + '\nselectedDate: ' + selectedDate + '\nthis.startDate < this.endDate: ' + (this.startDate < this.endDate) + '\nthis.startDate < selectedDate < this.endDate: ' + (this.startDate < selectedDate < this.endDate))
    if(this.startDate>=this.endDate) {
        this.startDate=new Date(0);
        this.endDate=new Date();
        throw 'DatePicker: End date must be later than start date.';
    }
    if(selectedDate&&((selectedDate<this.startDate)||(selectedDate>this.endDate))) {
        selectedDate=new Date();
        throw 'DatePicker: Selected date must be between start and end dates.';
    }
    //alert('DatePicker\ndatePickerHolderId: ' + datePickerHolderId + '\nstartDate: ' + startDate + '\nendDate: ' + endDate + '\nselectedDate: ' + selectedDate + '\nthis.dPickHolderId: ' + this.dPickHolderId + '\nthis.dPickHolder: ' + this.dPickHolder + '\nthis.startDate: ' + this.startDate + '\nthis.endDate: ' + this.endDate + '\nselectedDate: ' + selectedDate + '\nthis.startDate < this.endDate: ' + (this.startDate < this.endDate) + '\nthis.startDate < selectedDate < this.endDate: ' + (this.startDate < selectedDate < this.endDate))
    this.RenderControl();
    //this.UpdateYears();
    this.SelectDate(selectedDate);
}
DatePicker.prototype.RenderControl=function() {
    //alert('RenderControl');    
    Sys.UI.DomElement.addCssClass(this.dPickHolder,'datePicker');
    if(this.dPickHolder.getAttribute('valuecontrolid')&&$get(this.dPickHolder.getAttribute('valuecontrolid'))) {
        this.selectedDate=$get(this.dPickHolder.getAttribute('valuecontrolid'));
    } else {
        this.dPickHolder.innerHTML='';
        this.selectedDate=document.createElement('input');
        this.selectedDate.type='hidden';
        this.selectedDate.id=this.dPickHolderId+'_selectedDate';
        this.dPickHolder.appendChild(this.selectedDate);
    }
    this.dayNames[0]="Sun";
    this.dayNames[1]="Mon";
    this.dayNames[2]="Tue";
    this.dayNames[3]="Wed";
    this.dayNames[4]="Thu";
    this.dayNames[5]="Fri";
    this.dayNames[6]="Sat";
    this.monthNames[0]="Jan";
    this.monthNames[1]="Feb";
    this.monthNames[2]="Mar";
    this.monthNames[3]="Apr";
    this.monthNames[4]="May";
    this.monthNames[5]="Jun";
    this.monthNames[6]="Jul";
    this.monthNames[7]="Aug";
    this.monthNames[8]="Sep";
    this.monthNames[9]="Oct";
    this.monthNames[10]="Nov";
    this.monthNames[11]="Dec";
    this.days=document.createElement('select');
    this.days.className='daySelect';
    this.dPickHolder.appendChild(this.days);
    this.months=document.createElement('select');
    this.months.className='monthSelect';
    this.dPickHolder.appendChild(this.months);
    this.years=document.createElement('select');
    this.years.className='yearSelect';
    this.dPickHolder.appendChild(this.years);
    this.AddPromptItem();
    $addHandler(this.years,'change',this.YearChanged.bind(this));
    $addHandler(this.months,'change',this.MonthChanged.bind(this));
    $addHandler(this.days,'change',this.DayChanged.bind(this));
    $addHandler(this.years,'keyup',this.YearChanged.bind(this));
    $addHandler(this.months,'keyup',this.MonthChanged.bind(this));
    $addHandler(this.days,'keyup',this.DayChanged.bind(this));
}
DatePicker.prototype.AddPromptItem=function() {
    var y=new Option('Year');
    y.key= -1;
    this.years.options[0]=y;
    this.years.selectedIndex=0;
    var m=new Option('Month');
    m.key= -1;
    this.months.options[0]=m;
    this.months.selectedIndex=0;
    var d=new Option('Day');
    d.key= -1;
    this.days.options[0]=d;
    this.days.selectedIndex=0;
}
DatePicker.prototype.SelectDate=function(date) {
    //alert('SelectDate\ndate: ' + date);  
    this.UpdateYears();
    if(!date) this.SelectYear(new Date());else this.SelectYear(date);
    this.UpdateMonths();
    if(!date) this.SelectMonth(new Date());else this.SelectMonth(date);
    this.UpdateDays();
    if(!date) this.SelectDay(new Date());else this.SelectDay(date);
    if(!date) { this.SelectYear(null);this.SelectMonth(null);this.SelectDay(null); }
    this.UpdateCurrentDate();
    /*
    this.SelectYear(yearKey);
    this.SelectMonth(monthKey);
    this.SelectDay(dayKey);
    */
}
DatePicker.prototype.SelectYear=function(date) {
    //alert('SelectYear\ndate: ' + date + '\ndate.getFullYear(): ' + date.getFullYear() + '\nthis.years.options: ' + this.years.options + '\nthis.years.options.length: ' + this.years.options.length);
    if(!date) { this.years.selectedIndex=0;return; }
    var yearKey=date.getFullYear();
    for(var i=0;i<this.years.options.length;i++) {
        //alert('i: ' + i + '\nthis.years.options[i].key: ' + this.years.options[i].key)
        if(this.years.options[i].key==yearKey) {
            this.years.options[i].selected=true;
            break;
        }
    }
    this.UpdateMonths();
}
DatePicker.prototype.SelectMonth=function(date) {
    //alert('SelectMonth\ndate: ' + date);
    if(!date) { this.months.selectedIndex=0;return; }
    var monthKey=date.getMonth();
    //alert('SelectMonth\nmonthKey: ' + monthKey + '\nthis.months.options.length: ' + this.months.options.length)
    for(var i=0;i<this.months.options.length;i++) {
        //alert('this.months.options[i].key: ' + this.months.options[i].key)
        if(this.months.options[i].key==monthKey) {
            this.months.options[i].selected=true;
            break;
        }
    }
    this.UpdateDays();
}
DatePicker.prototype.SelectDay=function(date) {
    if(!date) { this.days.selectedIndex=0;return; }
    //alert('SelectDay\ndate: ' + date);
    //alert('this.DaysInMonth(selectedDate.getMonth(), selectedDate.getFullYear()): ' + this.DaysInMonth(selectedDate.getMonth(), selectedDate.getFullYear()));
    var dayKey=date.getDate();
    //alert('SelectDay\nthis.days.options.length: ' + this.days.options.length)
    for(i=0;i<this.days.options.length;i++) {
        //alert('dayKey: ' + dayKey + '\nthis.days.options[i].key: ' + this.days.options[i].key)
        if(this.days.options[i].key==dayKey) {
            this.days.options[i].selected=true;
            return;
        }
    }
}
DatePicker.prototype.DaysInMonth=function(month,year) {
    return 32-new Date(year,month,32).getDate();
}
DatePicker.prototype.YearChanged=function(event) {
    //alert('YearChanged\nevent: ' + event + '\nevent.target: ' + event.target);
    //alert(this.GetDate());
    this.UpdateMonths();
    this.UpdateDays();
}
DatePicker.prototype.MonthChanged=function(event) {
    this.UpdateDays();
}
DatePicker.prototype.DayChanged=function(event) {
    //alert('DayChanged\nevent: ' + event + '\nevent.target: ' + event.target);
    this.UpdateCurrentDate();
}
DatePicker.prototype.GetDate=function() {
    var year=this.years.options[this.years.selectedIndex].key;
    var month=this.months.options[this.months.selectedIndex].key;
    var day=this.days.options[this.days.selectedIndex].key;
    //var test = 'GetDate\nthis.years.selectedIndex: ' + this.years.selectedIndex + '\nthis.years.options[this.years.selectedIndex].key: ' + this.years.options[this.years.selectedIndex].key;
    //test += '\nthis.months.selectedIndex: ' + this.months.selectedIndex + '\nthis.months.options[this.months.selectedIndex].key: ' + this.months.options[this.months.selectedIndex].key;
    //test += '\nthis.days.selectedIndex: ' + this.days.selectedIndex + '\nthis.days.options[this.days.selectedIndex].key: ' + this.days.options[this.days.selectedIndex].key;
    //test += '\nyear: ' + year + '\nmonth: ' + month + '\nday: ' + day;
    //alert(test);
    if(year> -1&&month> -1&&day> -1)
        return (new Date(year,month,day));
    else return null;
}
DatePicker.prototype.UpdateYears=function() {
    if(this.years.options.length==1) {
        for(var i=this.endDate.getFullYear();i>=this.startDate.getFullYear();i--) {
            var y=new Option(i);
            y.key=i;
            this.years.options[this.years.length]=y;
        }
    }
}
DatePicker.prototype.UpdateMonths=function() {
    if(this.years.options[this.years.selectedIndex].key== -1) return;
    if(this.months.options.length==1) {
        for(i in this.monthNames) {
            var m=new Option(this.monthNames[i]);
            m.key=parseInt(i);
            this.months.options[this.months.length]=m;
        }
    }
}
DatePicker.prototype.UpdateDays=function() {
    //alert('UpdateDays');
    if(this.years.options[this.years.selectedIndex].key== -1) { this.UpdateCurrentDate();return; }
    if(this.months.options[this.months.selectedIndex].key== -1) { this.UpdateCurrentDate();return; }
    var mIndex=this.months.selectedIndex;
    var yIndex=this.years.selectedIndex;
    var m=this.months.options[mIndex].key;
    var y=this.years.options[yIndex].key;
    var dNumber=this.DaysInMonth(m,y);
    //alert('UpdateDays\nmIndex: ' + mIndex + '\nyIndex: ' + yIndex + '\nm: ' + m + '\ny: ' + y + '\ndNumber: ' + dNumber + '\nthis.days.options.selectedIndex: ' + this.days.options.selectedIndex);
    var selKey;
    if(this.days.options.selectedIndex> -1) selKey=this.days.options[this.days.options.selectedIndex].key;

    //cutting days if more than current month has
    while(this.days.length>(dNumber+1)) {
        this.days.remove(this.days.length-1);
    }
    //adding days if less than current month has
    var length;
    while(this.days.length<(dNumber+1)) {
        length=this.days.length;
        var d=new Option(length);
        d.key=length;
        this.days.options[length]=d;
    }
    /*
    var tempDate;
    for(var i = 1; i <= dNumber; i++){
    tempDate = new Date(y, m, i);
    var d = new Option(i + ' ' + this.dayNames[tempDate.getDay()]);
    d.key = i;
    this.days.options[this.days.length] = d;
    }
    */

    //selecting the same day of month
    if(selKey> -1) {
        last=this.days.options.length-1;
        if(selKey<this.days.options[0].key) {
            this.days.selectedIndex=1;
        } else if(selKey>this.days.options[last].key) {
            this.days.selectedIndex=last;
        } else {
            for(var i=0;i<this.days.options.length;i++) {
                if(this.days.options[i].key==selKey) {
                    this.days.options[i].selected=true;
                    break;
                }
            }
        }
    } else {
        this.days.selectedIndex=0;
    }
    this.UpdateCurrentDate();
}
DatePicker.prototype.UpdateDays_with_day_names=function() {
    //alert('UpdateDays');
    if(this.years.options[this.years.selectedIndex].key== -1) { this.UpdateCurrentDate();return; }
    if(this.months.options[this.months.selectedIndex].key== -1) { this.UpdateCurrentDate();return; }
    var mIndex=this.months.selectedIndex;
    var yIndex=this.years.selectedIndex;
    var m=this.months.options[mIndex].key;
    var y=this.years.options[yIndex].key;
    var dNumber=this.DaysInMonth(m,y);
    //alert('UpdateDays\nmIndex: ' + mIndex + '\nyIndex: ' + yIndex + '\nm: ' + m + '\ny: ' + y + '\ndNumber: ' + dNumber + '\nthis.days.options.selectedIndex: ' + this.days.options.selectedIndex);
    var selKey;
    if(this.days.options.selectedIndex> -1) selKey=this.days.options[this.days.options.selectedIndex].key;
    while(this.days.options.length>1) {
        this.days.remove(this.days.length-1);
    }
    var tempDate;
    for(var i=1;i<=dNumber;i++) {
        tempDate=new Date(y,m,i);
        var d=new Option(i+' '+this.dayNames[tempDate.getDay()]);
        d.key=i;
        this.days.options[this.days.length]=d;
    }
    //selecting the same day of month
    if(selKey> -1) {
        last=this.days.options.length-1;
        if(selKey<this.days.options[0].key) {
            this.days.selectedIndex=1;
        } else if(selKey>this.days.options[last].key) {
            this.days.selectedIndex=last;
        } else {
            for(var i=0;i<this.days.options.length;i++) {
                if(this.days.options[i].key==selKey) {
                    this.days.options[i].selected=true;
                    break;
                }
            }
        }
    } else {
        this.days.selectedIndex=0;
    }
    this.UpdateCurrentDate();
}
DatePicker.prototype.UpdateCurrentDate=function() {
    if(this.GetDate()) {
        var dateString=this.GetDate().toLocaleDateString()
        this.selectedDate.value=dateString;
    } else {
        this.selectedDate.value=undefined;
    }
}
DatePicker.prototype.IsValid=function() {
    var valid=true;
    var year=this.years.options[this.years.selectedIndex].key;
    var month=this.months.options[this.months.selectedIndex].key;
    var day=this.days.options[this.days.selectedIndex].key;
    if(year== -1||month== -1||day== -1) valid=false;
    //if(year     == -1) this.years.style.color   = 'red';  else this.years.style.color  = '#333366';
    //if(month    == -1) this.months.style.color  = 'red';  else this.months.style.color  = '#333366';
    //if(day      == -1) this.days.style.color    = 'red';  else this.days.style.color    = '#333366';
    return valid;
}
AddDatePicker=function(datePickerHolderId,startDate,endDate,selectedDate) {
    allDatePickers.push(new DatePicker(datePickerHolderId,startDate,endDate,selectedDate));
}
ValidateDates=function() {
    var valid=true;
    var isValid;
    for(var i=0;i<allDatePickers.length;i++) {
        //alert('ValidateDates\nallDatePickers.length: ' + allDatePickers.length + '\nvalid: ' + valid + '\nallDatePickers[i].IsValid(): ' + allDatePickers[i].IsValid())
        isValid=allDatePickers[i].IsValid();
        if(!isValid) valid=false;
    }
    if(!valid) alert('Please select all dates.')
    return valid
}
////////////////////////// Select all ///////////////////
SelectAll=function(holderId,selectAllId,unSelectAllId) {
    //alert('SelectAll\nholderId: ' + holderId + '\nselectAllId: ' + selectAllId + '\n\nunSelectAllId: ' + unSelectAllId);
    this.holderId=holderId;
    this.selectAllId=selectAllId;
    if(unSelectAllId) {
        this.unSelectAllId=unSelectAllId;
        this.unSelectAll=$get(this.unSelectAllId);
    } else {
        this.unSelectAllId=null;
        this.unSelectAll=null;
    }
    //this.unselectAllId  = unselectAllId;
    this.holder=$get(this.holderId);
    this.selectAll=$get(this.selectAllId);
    //this.unselectAll    = $get(unselectAllId);
    this.chks=new Array();
    this.Initialize();
}
SelectAll.prototype.Initialize=function() {
    var inputs=this.holder.getElementsByTagName('input');
    for(var i=0;i<inputs.length;i++) {
        //alert('this.chks[i].getAttribute: ' + this.chks[i].getAttribute + '\nthis.chks[i].getAttribute(\'type\').toLowerCase(): ' + this.chks[i].getAttribute('type').toLowerCase());
        if(inputs[i].getAttribute&&inputs[i].getAttribute('type').toLowerCase()=='checkbox') {
            //alert('this.chks[j].checked: ' + this.chks[j].checked);
            this.chks.push(inputs[i]);
        }
    }
    //alert('Initialize\n\nthis.selectAll: ' + this.selectAll + '\n\nthis.unSelectAll: ' + this.unSelectAll)
    if(this.selectAll&&!this.unSelectAll) {
        $addHandler(this.selectAll,'click',this.SelectClick.bind(this));
    } else if(this.selectAll&&this.unSelectAll) {
        $addHandler(this.selectAll,'click',this.SelectAllClick.bind(this));
        $addHandler(this.unSelectAll,'click',this.UnSelectAllClick.bind(this));
    }
}
SelectAll.prototype.SelectAllClick=function(event) {
    this.SetAllMessages(true);
}
SelectAll.prototype.UnSelectAllClick=function(event) {
    this.SetAllMessages(false);
}
SelectAll.prototype.SelectClick=function(event) {
    var target=event.target;
    //alert('SelectClick\nevent: ' + event + '\ntarget: ' + target)
    if(target.allSelected) {
        if(target.allSelected==false) {
            this.SetAllMessages(true);
            target.allSelected=true;
            target.innerHTML='Unselect all';
        } else if(target.allSelected==true) {
            this.SetAllMessages(false);
            target.allSelected=false;
            target.innerHTML='Select all';
        }
    } else {
        target.allSelected=true;
        this.SetAllMessages(true);
        target.innerHTML='Unselect all';
    }
}
SelectAll.prototype.SetAllMessages=function(checked) {
    //alert('SetAllMessages\nchecked: ' + checked + '\nthis.chks: ' + this.chks + '\nthis.chks.length: ' + this.chks.length)
    for(var i=0;i<this.chks.length;i++) {
        //alert('this.chks[j].checked: ' + this.chks[i].checked);      
        this.chks[i].checked=checked;
    }
}
AddSelectAll=function(holderId,selectAllId,unSelectAllId) {
    allSelectAll.push(new SelectAll(holderId,selectAllId,unSelectAllId));
}
AddTableSelectAll=function(holderId,selectAllId) {
    allSelectAll.push(new SelectAll(holderId,selectAllId));
}




//Compatibility patch for WebKit
//"Missing call to Sys.Application.notifyScriptLoaded()." error in Safari (3)
Sys.Browser.WebKit={}; //Safari 3 is considered WebKit
if(navigator.userAgent.indexOf('AppleWebKit/')> -1) {
    Sys.Browser.agent=Sys.Browser.WebKit;
    Sys.Browser.version=parseFloat(navigator.userAgent.match(/WebKit\/(\d+(\.\d+)?)/)[1]);
    Sys.Browser.name='WebKit';
}
/*function Sys$CultureInfo$_getAbbrMonthIndex(value) {
if (!this._upperAbbrMonths) {
this._upperAbbrMonths = this._toUpperArray(this.dateTimeFormat.AbbreviatedMonthNames);
}
return Array.indexOf(this._upperAbbrMonths, this._toUpper(value));
}*/
