//v.1.0 build 80512

/*
Copyright DHTMLX LTD. http://www.dhtmlx.com
You allowed to use this component or parts of it under GPL terms
To use it on other terms or get Professional edition of the component please contact us at sales@dhtmlx.com
*/


function dhtmlxDblCalendarObject(contId, isAutoDraw, options){
    this.scriptName = 'dhtmlxcalendar.js';
    this.entObj = document.createElement("DIV");
    this.winHeader = null;
    this.style = "dhtmlxdblcalendar";
    this.winTitle = 'dhtmlxDblCalendarObject';
    this.uid = 'sc&dblCal'+Math.round(1000000*Math.random());
    this.numLoaded = 2;
    this.options = {
        isWinHeader: false,
        headerButtons: '', 
         isWinDrag: false,
         msgClose: "Close",
         msgTitle: "Click and Drag",
         msgMinimize: "Minimize",
         msgToday: "Today",
         msgClear: "Clear"
    };
    if (options)
        for (x in options)
            this.options[x] = options[x];
            
    this.entBox = document.createElement("TABLE");
    this.entBox.cellPadding = "0px";
    this.entBox.cellSpacing = "0px";
    this.entBox.className = this.style;
    this.entObj.appendChild(this.entBox);
    var entRow = this.entBox.insertRow(0);
    var calLeft = entRow.insertCell(0);
    calLeft.style.paddingRight = '2px';
    var calRight = entRow.insertCell(1);
    this.leftCalendar = new dhtmlxCalendarObject(calLeft, isAutoDraw, this.options);
    this.leftCalendar._dblC = this;
    this.leftCalendar.setOnClickHandler(this.doOnCLeftClick);
    this.rightCalendar = new dhtmlxCalendarObject(calRight, isAutoDraw, this.options);
    this.rightCalendar._dblC = this;
    this.rightCalendar.setOnClickHandler(this.doOnCRightClick);
    this.doOnClick = null;
    this.onLanguageLoaded = null;
    this.getPosition = this.leftCalendar.getPosition;
    this.startDrag = this.leftCalendar.startDrag;
    this.stopDrag = this.leftCalendar.stopDrag;
    this.onDrag = this.leftCalendar.onDrag;
    this.drawHeader = this.leftCalendar.drawHeader;
    if (typeof(contId)!= 'string') 
        this.con = contId;
    else 
        this.con = document.getElementById(contId);
    var self = this
};

dhtmlxDblCalendarObject.prototype.setHeader = function(isVisible, isDrag, btnsOpt){
    this.leftCalendar.options.isWinHeader = this.options.isWinHeader = isVisible;
    this.leftCalendar.options.isWinDrag = this.options.isWinDrag = isDrag;
    if (btnsOpt)
        this.options.headerButtons = this.leftCalendar.options.headerButtons = btnsOpt;
    if (this.isAutoDraw)
        this.drawHeader()
};

dhtmlxDblCalendarObject.prototype.setYearsRange = function(minYear, maxYear){
    var cs = [this.leftCalendar, this.rightCalendar];
    for (var ind=0;ind < cs.length;ind++){
        cs[ind].options.yearsRange = [parseInt(minYear), parseInt(maxYear)];
        cs[ind].allYears = [];
        for (var i=minYear;i <= maxYear;i++)
            cs[ind].allYears.push(i)
    }
};

dhtmlxDblCalendarObject.prototype.show = function(){
    this.parent.style.display = 'block'
};

dhtmlxDblCalendarObject.prototype.hide = function(){
    this.parent.style.display = 'none'
};

dhtmlxDblCalendarObject.prototype.createStructure = function(){
    if (this.options.isWinHeader){
        var headerRow = this.entBox.insertRow(0).insertCell(0);
        headerRow.colSpan = 2;
        headerRow.align = 'right';
        this.winHeader = document.createElement('DIV');
        headerRow.appendChild(this.winHeader)
    };
    this.setParent(this.con)
};

dhtmlxDblCalendarObject.prototype.draw = function(options){
    if (!this.parent)
        this.createStructure();
    this.drawHeader();
    this.leftCalendar.draw(options);
    this.rightCalendar.draw(options);
    this.isAutoDraw = true
};

dhtmlxDblCalendarObject.prototype.loadUserLanguage = function(lang, userCBfunction){
    this.numLoaded = 0;
    if (userCBfunction)
        this.onLanguageLoaded = userCBfunction;
    this.leftCalendar.loadUserLanguage(lang, this.languageLoaded);
    this.rightCalendar.loadUserLanguage(lang, this.languageLoaded)
};

dhtmlxDblCalendarObject.prototype.languageLoaded = function(status){
    var self = this._dblC;
    self.numLoaded ++;
    if (self.numLoaded == 2){
        for (param in this.options)
            self.options[param] = this.options[param];
        if (this.isAutoDraw)
            self.drawHeader();
        if (self.onLanguageLoaded)
            self.onLanguageLoaded(status)
    }
};

dhtmlxDblCalendarObject.prototype.setParent = function(newParent){
    if (newParent){
        this.parent = newParent;
        this.parent.style.display = 'block';
        this.parent.appendChild(this.entObj)
    }
};
    
dhtmlxDblCalendarObject.prototype.setOnClickHandler = function(func){
    this.doOnClick = func
};

dhtmlxDblCalendarObject.prototype.doOnCLeftClick = function(date){
    this._dblC.rightCalendar.setSensitive(date, null);
    if (this._dblC.doOnClick)
        this._dblC.doOnClick(date, this, "left");
    return true
};

dhtmlxDblCalendarObject.prototype.doOnCRightClick = function(date){
    this._dblC.leftCalendar.setSensitive(null, date);
    if (this._dblC.doOnClick)
        this._dblC.doOnClick(date, this, "right");
        return true
};

dhtmlxDblCalendarObject.prototype.setSensitive = function(){
    this.rightCalendar.setSensitive(null, this.leftCalendar.date);
    this.leftCalendar.setSensitive(this.rightCalendar.date, null)
};
    
dhtmlxDblCalendarObject.prototype.minimize = function(){
    if (!this.winHeader)
        return;
    var tr = this.winHeader.parentNode.parentNode.nextSibling;
    tr.parentNode.parentNode.style.width = parseInt(tr.parentNode.parentNode.offsetWidth) + 'px';
    if (tr)
        tr.style.display = (tr.style.display == 'none')? 'block': 'none'
};

dhtmlxDblCalendarObject.prototype.setDate = function(dateFrom,dateTo){
    this.leftCalendar.setDate(dateFrom);
    this.rightCalendar.setDate(dateTo);
    this.leftCalendar.setSensitive(null, this.rightCalendar.date);
    this.rightCalendar.setSensitive(this.leftCalendar.date, null)
};

dhtmlxDblCalendarObject.prototype.setDateFormat = function(format){
    this.leftCalendar.setDateFormat(format);
    this.rightCalendar.setDateFormat(format)
};

dhtmlxDblCalendarObject.prototype.isVisible = function(){
    return (this.parent.style.display == 'block'?true:false)
};

dhtmlxDblCalendarObject.prototype.setHolidays = function(dates){
    this.leftCalendar.setHolidays(dates);
    this.rightCalendar.setHolidays(dates)
};

function dhtmlxCalendarObject(contId, isAutoDraw, options){
    this.isAutoDraw = isAutoDraw;
    this.contId = contId;
    this.scriptName = 'dhtmlxcalendar.js';
    this.date = this.cutTime(new Date());
    this.selDate = this.cutTime(new Date());
    this.curDate = this.cutTime(new Date());
    this.entObj = document.createElement("DIV");
    this.monthPan = document.createElement("TABLE");
    this.dlabelPan = document.createElement("TABLE");
    this.daysPan = document.createElement("TABLE");
    this.parent = null;
    this.style = "dhtmlxcalendar";
    this.skinName = "";
    this.doOnClick = null;
    this.sensitiveFrom = null;
    this.sensitiveTo = null;
    this.activeCell = null;
    this.hotCell = null;
    this.winHeader = null;
    this.onLanguageLoaded = null;
    this.dragging = false;
    this.minimized = false;
    this.winTitle = 'Calendar header';
    this.uid = 'sc&Cal'+Math.round(1000000*Math.random());
    this.holidays = new Array();
    this.dhx_Event();
    this.options = {btnPrev: "&laquo;",
                    btnBgPrev: null,
                    btnNext: "&raquo;",
                    btnBgNext: null,
                    yearsRange: [1900, 2100], 
                    isMonthEditable: false,
                    isYearEditable: false, 
                    isWinHeader: false,
                    headerButtons: 'TMX', 
                    isWinDrag: true
                    };
    defLeng = { langname: 'en-us',
                dateformat: '%Y-%m-%d',
                monthesFNames: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
                monthesSNames: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
                daysFNames: ["Sunday", "Monday", "Tuesday", "Wednday", "Thursday", "Friday", "Saturday"],
                daysSNames: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
                weekend: [0, 6],
                weekstart: 0,
                msgClose: "Close",
                msgTitle: "Click and Drag",
                msgMinimize: "Minimize",
                msgToday: "Today",
                msgClear: "Clear"
                };
    if (!window.dhtmlxCalendarLangModules)
        window.dhtmlxCalendarLangModules = {};
    window.dhtmlxCalendarLangModules['en-us'] = defLeng;
    if (window.dhtmlxCalendarObjects)
        window.dhtmlxCalendarObjects[window.dhtmlxCalendarObjects.length] = this;
    else 
        window.dhtmlxCalendarObjects = [this];
        
    for (lg in defLeng)
        this.options[lg] = defLeng[lg];
    if (options)
        for (param in options)
            this.options[param] = options[param];
    this.loadUserLanguage();
    if (options)
        for (param in options)
            this.options[param] = options[param];
    this.allYears = Array();
    with (this.options)
        for (var i=yearsRange[0];i <= yearsRange[1];i++)
            this.allYears.push(i);
            
    if(isAutoDraw !== false)
        this.draw(options);
        
    return this
};

dhtmlxCalendarObject.prototype.setHeader = function(isVisible, isDrag, btnsOpt, titleText) {
    with (this.options) {
        isWinHeader = isVisible;
        isWinDrag = isDrag;
        if (btnsOpt.length > 1) {            
            this.options.headerButtons = btnsOpt
        }    
        this.winTitle = titleText;
    }
};

dhtmlxCalendarObject.prototype.setYearsRange = function(minYear, maxYear){
    this.options.yearsRange = [parseInt(minYear), parseInt(maxYear)];
    this.allYears = [];
    for (var i=minYear;i <= maxYear;i++)
        this.allYears.push(i)
};

dhtmlxCalendarObject.prototype.createStructure = function(){
    var self = this;
    this.entObj.className = this.style;
    if (this.options.isWinHeader){
        this.winHeader = document.createElement('DIV');
        this.entObj.appendChild(this.winHeader)
    };
    this.entBox = document.createElement("TABLE");
    this.entBox.className = "entbox";
    with (this.entBox) {
        cellPadding = "0px";
        cellSpacing = "0px";
        width = '100%'
    };
    this.entObj.appendChild(this.entBox);
    var monthBox = this.entBox.insertRow(0).insertCell(0);
    with (this.monthPan) {
        cellPadding = "1px";
        cellSpacing = "0px";
        width = '100%';
        align = 'center'
    };
    this.monthPan.className = "dxcalmonth";
    monthBox.appendChild(this.monthPan);
    var dlabelBox = this.entBox.insertRow(1).insertCell(0);
    dlabelBox.appendChild(this.dlabelPan);
    with (this.dlabelPan) {
        cellPadding = "0px";
        cellSpacing = "0px";
        width = '100%';
        align = 'center'
    };
    
    this.dlabelPan.className = "dxcaldlabel";
    var daysBox = this.entBox.insertRow(2).insertCell(0);
    daysBox.appendChild(this.daysPan);
    with (this.daysPan) {
        cellPadding = "1px";
        cellSpacing = "0px";
        width = '100%';
        align = 'center'
    };
    
    if(_isIE || _isKHTML)
        this.daysPan.className = "dxcaldays_ie";
    else
        this.daysPan.className = "dxcaldays";
        
    this.daysPan.onmousemove = function (e) {
        self.doHotKeys(e)
    };
    this.daysPan.onmouseout = function () {
        self.endHotKeys()
    };
    if (typeof(this.contId)!= 'string') 
        this.con = this.contId;
    else 
        this.con = document.getElementById(this.contId);
    if (this.con.nodeName == 'INPUT'){
        var div = document.createElement('DIV');
        var aleft = getAbsoluteLeft(this.con);
        var atop = getAbsoluteTop(this.con);
        with (div.style) {
            position = 'absolute';
            display = 'none';
            marginLeft = this.con.offsetWidth+'px';
            top = atop;
            left = aleft;
            zIndex = "99"
        };
        this.setParent(div);
        document.body.appendChild(div);
        this.con.onclick = function () {
            if (self.isVisible())
                self.hide()
            else
                self.show()
        };
        this.con._c = this.parent;
        this.doOnClick = function (date) {
            self.con.value = self.getFormatedDate(self.options.dateformat, date);
            self.hide();
            self.con.focus();
            return true
        };
        this.con.onkeydown = function(e){
            if((e||window.event).keyCode==27)
                self.hide();
            else if((e||window.event).keyCode==13)
                self.show()
        }
    }else 
        this.setParent(this.con)
};
                
dhtmlxCalendarObject.prototype.drawHeader = function(){
    if (this._dblC)
        return;
    if (!this.options.isWinHeader)
        return;
    var self = this;
    
    if (!this.winHeader)
        return false;
    while (this.winHeader.hasChildNodes())
        this.winHeader.removeChild(this.winHeader.firstChild);
    this.winHeader.className = 'dhtmlxcalendarHeader';
    this.winHeader.onselectstart=function(){
        return false
    };
    var label = document.createElement('SPAN');
    label.className = 'winTitle';
    label.appendChild(document.createTextNode(this.winTitle));
    label.setAttribute('title', this.options.msgTitle);
    this.winHeader.appendChild(label);
    if (this.options.isWinDrag){
        this.winHeader.onmousedown = function(e) {
            self.startDrag(e);
        }
    };
    /*if (this.con.nodeName != 'INPUT')
        if (this.options.headerButtons.indexOf('M')>=0)
            this.options.headerButtons = "M";
        else
            this.options.headerButtons = "";*/
    
    if (this.options.headerButtons.indexOf("X")>=0) {        
        var btnClose = document.createElement('DIV');
        btnClose.className = 'btn_close';
        btnClose.setAttribute('title', this.options.msgClose);
        btnClose.onmousedown = function (e) {
            e = e||event;
            self.hide();
            if (e.stopPropagation)
                e.stopPropagation();
            else 
                e.cancelBubble = true
        };
        this.winHeader.appendChild(btnClose)
    };
    if (this.options.headerButtons.indexOf('M')>=0) {
        var btnMin = document.createElement('DIV');
        btnMin.className = 'btn_mini';
        btnMin.setAttribute('title', this.options.msgMinimize);
        btnMin.onmousedown = function(e) {
            e = e||event;
            self.minimize();
            if (e.stopPropagation)
                e.stopPropagation();
            else 
                e.cancelBubble = true
        };
        this.winHeader.appendChild(btnMin)
    };
    if (this.options.headerButtons.indexOf('C')>=0) {var btnClear = document.createElement('DIV');btnClear.className = 'btn_clr';btnClear.setAttribute('title', this.options.msgClear);btnClear.onmousedown = function(e) {e = e||event;if (e.stopPropagation)e.stopPropagation();else e.cancelBubble = true;self.con.value = "";self.hide()};this.winHeader.appendChild(btnClear)};if (this.options.headerButtons.indexOf('T')>=0) {var btnToday = document.createElement('DIV');btnToday.className = 'btn_today';btnToday.setAttribute('title', this.options.msgToday);btnToday.onmousedown = function(e) {e = e||event;if (e.stopPropagation)e.stopPropagation();else e.cancelBubble = true;self.setDate(new Date());if (self.doOnClick)self.doOnClick(new Date())};this.winHeader.appendChild(btnToday)}};
    
dhtmlxCalendarObject.prototype.drawMonth = function(){
    var self = this;
    if(this.monthPan.childNodes.length>0)
        this.monthPan.removeChild(this.monthPan.childNodes[0]);
        
    var row = this.monthPan.insertRow(0);
    var cArLeft = row.insertCell(0);
    var cContent = row.insertCell(1);
    var cArRight = row.insertCell(2);
    cArLeft.align = "left";
    cArLeft.className = 'month_btn_left';
    var btnLabel = document.createElement("SPAN");
    btnLabel.innerHTML = this.options.btnPrev;
    cArLeft.appendChild(btnLabel);
    cArLeft.onclick = function(){
        self.prevMonth() 
    };
    cArRight.align = "right";
    cArRight.className = 'month_btn_right';
    var btnLabel = document.createElement("SPAN");
    btnLabel.innerHTML = this.options.btnNext;
    cArRight.appendChild(btnLabel);
    cArRight.onclick = function(){
        self.nextMonth() 
    };
    cContent.align = 'center';
    
    var mHeader = document.createElement("TABLE");
    with (mHeader) {
        cellPadding = "0px";
        cellSpacing = "0px";
        align = "center";
    };
    var mRow = mHeader.insertRow(0);
    var cMonth = mRow.insertCell(0);
    //var cComma = mRow.insertCell(1);
    var cYear = mRow.insertCell(1);
    cContent.appendChild(mHeader);
    
    var cArDown = document.createElement('SPAN');
    cArDown.className = 'month_btn_down';
    var btnLabel = document.createElement("SPAN");
    btnLabel.innerHTML = '&nbsp;&nbsp;&nbsp;';
    cArDown.appendChild(btnLabel);
    
    this.planeMonth = document.createElement('DIV');
    this.planeMonth._c = this;
    this.planeMonth.appendChild(document.createTextNode(this.options.monthesFNames[this.date.getMonth()] + ' '));
    this.planeMonth.appendChild(cArDown);
    this.planeMonth.className = 'planeMonth';
    cMonth.appendChild(this.planeMonth);
    
    if (this.options.isMonthEditable){
        this.planeMonth.setAttribute('title', 'Click to edit');
        this.planeMonth.style.cursor = 'pointer';
        this.editorMonth = new dhtmlxRichSelector({
            nodeBefore: this.planeMonth,
            valueList: [0,1,2,3,4,5,6,7,8,9,10,11],
            titleList: this.options.monthesFNames,
            activeValue: this.options.monthesFNames[this.date.getMonth()],
            onSelect: this.onMonthSelect
        });
        this.editorMonth._c = this
    };
    //cComma.appendChild(document.createTextNode(","));
    //cComma.className = 'comma';
    
    var cArDown = document.createElement('SPAN');
    cArDown.className = 'month_btn_down';
    var btnLabel = document.createElement("SPAN");
    btnLabel.innerHTML = '&nbsp;&nbsp;&nbsp;';
    cArDown.appendChild(btnLabel);
    
    this.planeYear = document.createElement('DIV');    
    this.planeYear._c = this;
    this.planeYear.appendChild(document.createTextNode(this.date.getFullYear() + ' '));
    this.planeYear.appendChild(cArDown);
    this.planeYear.className = 'planeYear';
    cYear.appendChild(this.planeYear);
    if (this.options.isYearEditable){
        this.planeYear.setAttribute('title', 'Click to edit');
        this.planeYear.style.cursor = 'pointer';
        this.editorYear = new dhtmlxRichSelector({nodeBefore: this.planeYear,
 valueList: this.allYears,
 titleList: this.allYears,
 activeValue: this.date.getFullYear(),
 onSelect: this.onYearSelect,
 isOrderedList: true,
 isNumbersList: true,
 isAllowUserValue: true
 });this.editorYear._c = this}};
 
 dhtmlxCalendarObject.prototype.drawDayLabels = function() {
    var self = this;
    if(this.dlabelPan.childNodes.length>0)
        this.dlabelPan.removeChild(this.dlabelPan.childNodes[0]);
        
    var row = this.dlabelPan.insertRow(-1);
    row.className = "daynames";
    for(var i=0;i<7;i++){
        var cDay = row.insertCell(i);
        cDay.appendChild(document.createTextNode(this.getDayName(i)))
    }
};

dhtmlxCalendarObject.prototype.drawDays = function() {
    var self = this;
    if(this.daysPan.childNodes.length>0)
        this.daysPan.removeChild(this.daysPan.childNodes[0]);
        
    var row = {}, cell = {};
    var tempDate = new Date(this.date);
    tempDate.setDate(1);
    var day1 = (tempDate.getDay() - this.options.weekstart) % 7;
    if (day1 < 0)
        day1 += 7;
    tempDate.setDate(- day1);
    tempDate.setDate(tempDate.getDate() + 1);
    if (tempDate.getDate()< tempDate.getDay()) 
        tempDate.setMonth(tempDate.getMonth() - 1);
        
    for (var weekNumber=0;weekNumber<6;weekNumber++){
        row = this.daysPan.insertRow(-1);
        for (var i=0;i<7;i++){
            cell = row.insertCell(-1);
            cell.setAttribute('id', this.uid+tempDate.getFullYear()+tempDate.getMonth()+tempDate.getDate());
            cell.appendChild(document.createTextNode(tempDate.getDate()));
            cell.thisdate = tempDate.toString();
            cell.className = "thismonth";
            if(tempDate.getMonth()!=this.date.getMonth())
                cell.className = "othermonth";
            if (this.sensitiveFrom && (tempDate.valueOf()< this.sensitiveFrom.valueOf())) {
                cell.className = cell.className + " insensitive";
                tempDate.setDate(tempDate.getDate() + 1);
                continue
            };
            if (this.sensitiveTo && (tempDate.valueOf()> this.sensitiveTo.valueOf())) {
                cell.className = cell.className + " insensitive";
                tempDate.setDate(tempDate.getDate() + 1);
                continue
            };
            if (this.isWeekend(i)&& tempDate.getMonth()==this.date.getMonth()) 
                cell.className = "weekend";
            if (tempDate.toDateString()== this.curDate.toDateString())
                cell.className = "current";
            if (tempDate.toDateString()== this.selDate.toDateString()) {
                this.activeCell = cell;
                this.addClass(cell, "selected")};
                if (this.holidays.length>0)
                    for (var h=0;h<this.holidays.length;h++){
                        var dateAr = (this.holidays[h].indexOf(".")!=-1?this.holidays[h].toString().split("."):this.holidays[h].toString().split("-"));
                        if (dateAr.length==2){
                            if (dateAr[0].substr(0,1)=='0')
                                dateAr[0] = dateAr[0].substr(1,1);
                            if (dateAr[1].substr(0,1)=='0')
                                dateAr[1] = dateAr[1].substr(1,1);
                            if (dateAr[1]==tempDate.getDate()&&dateAr[0]==(tempDate.getMonth()+1))
                                cell.className = cell.className + ' holiday'}
                            else if (dateAr.length==3){
                                if (dateAr[2].substr(0,1)=='0')
                                    dateAr[2] = dateAr[2].substr(1,1);
                                if (dateAr[1].substr(0,1)=='0')
                                    dateAr[1] = dateAr[1].substr(1,1);
                                if (dateAr[2]==tempDate.getDate()&&dateAr[1]==(tempDate.getMonth()+1)&&dateAr[0]==tempDate.getFullYear())
 cell.className = cell.className + ' holiday'}};
 cell.onclick = function(){
 if(!self.doOnClick || self.doOnClick(this.thisdate)){
 self.setDate(this.thisdate);
 self.callEvent("onClick",[this.thisdate])}};
 tempDate.setDate(tempDate.getDate() + 1)}}};
 
 dhtmlxCalendarObject.prototype.draw = function(options){
    var self = this;
    if (this.loadingLanguage){
        setTimeout(function() {self.draw(options);return}, 20);
        return
    }
    else
        if (!this.parent)
            this.createStructure(options); 
    this.drawHeader();
    this.drawMonth();
    this.drawDayLabels();
    this.drawDays();
    this.isAutoDraw = true
};

dhtmlxCalendarObject.prototype.startDrag = function(e) {e = e||event;if ((e.button === 0)|| (e.button === 1)) {if (this.dragging){this.stopDrag(e)};this.drag_mx = e.clientX;this.drag_my = e.clientY;this.drag_spos = this.getPosition(this.parent);document.body.appendChild(this.parent);with (this.parent.style) {left = this.drag_spos[0] + 'px';top = this.drag_spos[1] + 'px';margin = '0px';position = 'absolute'};this.bu_onmousemove = document.body.onmousemove;var self = this;document.body.onmousemove = function (e) {self.onDrag(e)};this.bu_onmouseup = document.body.onmouseup;document.body.onmouseup = function (e) {self.stopDrag(e)};this.dragging = true}};dhtmlxCalendarObject.prototype.onDrag = function(e) {e = e||event;if ((e.button === 0)|| (e.button === 1)) {var delta_x = this.drag_mx - e.clientX;var delta_y = this.drag_my - e.clientY;this.parent.style.left = this.drag_spos[0] - delta_x + 'px';this.parent.style.top = this.drag_spos[1] - delta_y + 'px';if(_
 ){this.ifr.style.left = this.parent.style.left;this.ifr.style.top = this.parent.style.top}}else {this.stopDrag(e)}};dhtmlxCalendarObject.prototype.stopDrag = function(e) {e = e||event;document.body.onmouseup = (this.bu_onmouseup === window.undefined)? null: this.bu_onmouseup;document.body.onmousemove = (this.bu_onmousemove === window.undefined)? null: this.bu_onmousemove;this.dragging = false};dhtmlxCalendarObject.prototype.doHotKeys = function(e){e = e||event;var cell = ((e.target) ? e.target : e.srcElement);if (cell.className.toString().indexOf('insensitive') >=0 ) {this.endHotKeys()}else {if (this.hotCell)this.resetHotClass(this.hotCell);this.addClass(cell, 'hover');this.hotCell = cell}};dhtmlxCalendarObject.prototype.endHotKeys = function(){if (this.hotCell){this.resetHotClass(this.hotCell);this.hotCell = null}};dhtmlxCalendarObject.prototype.minimize = function(){if (!this.winHeader)return;this.entBox.style.display = (this.entBox.style.display == 'none')? 'block': 'none';if (!this.minimized)this.entObj.className = (this.skinName!=""?this.style+"_"+this.skinName+" "+this.style+"_"+this.skinName:this.style+" "+this.style)+"_minimized";else
 this.entObj.className = (this.skinName!=""?this.style+"_"+this.skinName:this.style);
if(_isIE){
    this.ifr.style.width = this.entObj.offsetWidth;
    this.ifr.style.height = this.entObj.offsetHeight
};

this.minimized = !this.minimized};dhtmlxCalendarObject.prototype.loadUserLanguage = function(language, userCBfunction){if (userCBfunction)this.onLanguageLoaded = userCBfunction;if (!language){language="en-us"};this.loadingLanguage = language;if (!language){this.loadUserLanguageCallback(false);return};if (language == this.options.langname){this.loadUserLanguageCallback(true);return};var __lm = window.dhtmlxCalendarLangModules;if (__lm[language]){for (lg in __lm[language])this.options[lg] = __lm[language][lg];this.loadUserLanguageCallback(true);return};var src, path = null;var scripts = document.getElementsByTagName('SCRIPT');for (var i=0;i<scripts.length;i++)if(src = scripts[i].getAttribute('src'))
 if (src.indexOf(this.scriptName)>= 0) {path = src.substr(0, src.indexOf(this.scriptName));break};if (path === null){this.loadUserLanguageCallback(false);return};this.options.langname = language;var langPath = path + 'lang/' + language + '.js';for (var i=0;i<scripts.length;i++)if(src = scripts[i].getAttribute('src'))
 if (src == langPath)return;var script = document.createElement('SCRIPT');script.setAttribute('language', "Java-Script");script.setAttribute('type', "text/javascript");script.setAttribute('src', langPath);document.body.appendChild(script)};dhtmlxCalendarObject.prototype.loadUserLanguageCallback = function(status) {this.loadingLanguage = null;if (this.isAutoDraw !== false)this.draw();if (this.onLanguageLoaded && (typeof(this.onLanguageLoaded)== 'function'))
 this.onLanguageLoaded(status)};function loadLanguageModule(langModule) {var __c = window.dhtmlxCalendarObjects;for (var i=0;i<__c.length;i++){if (__c[i].loadingLanguage == langModule.langname){for (lg in langModule)__c[i].options[lg] = langModule[lg];__c[i].loadUserLanguageCallback(true)}};window.dhtmlxCalendarLangModules[langModule.langname] = langModule};dhtmlxCalendarObject.prototype.show = function(){this.parent.style.display = '';
 if(_isIE){
    this.parent.style.width = "0px";
    this.parent.style.height = "0px";
    if(this.parent.style.zIndex==0){
        this.parent.style.zIndex = 10
    };
    if(this.parent.style.position == "absolute" && this.ifr==undefined){
        /*this.ifr = document.createElement("IFRAME");
        this.ifr.style.position = "absolute";
        this.ifr.style.zIndex = "0";
        this.ifr.frameBorder = "no";
        this.ifr.src = window.dhx_globalImgPath+"/blank.html"
        this.ifr.style.top = this.entObj.style.top;
        this.ifr.style.left = this.entObj.style.left;
        this.ifr.className = this.style + "_ifr";
        this.ifr.style.className = this.style;
        this.parent.appendChild(this.ifr)*/
    }}};dhtmlxCalendarObject.prototype.hide = function(){this.parent.style.display = 'none';if(this.ifr!=undefined){this.ifr.parentNode.removeChild(this.ifr);this.ifr = undefined}};dhtmlxCalendarObject.prototype.setDateFormat = function(format){this.options.dateformat = format};dhtmlxCalendarObject.prototype.isWeekend = function(k){var q = k + this.options.weekstart;if (q > 6)q -= 7;for (var i=0;i<this.options.weekend.length;i++)if (this.options.weekend[i] == q)return true;return false};dhtmlxCalendarObject.prototype.getDayName = function(k){var q = k + this.options.weekstart;if (q > 6)q = q - 7;return this.options.daysSNames[q]};dhtmlxCalendarObject.prototype.cutTime = function(date) {date = new Date(date);var ndate = new Date(date.getFullYear(), date.getMonth(), date.getDate());return ndate};
    dhtmlxCalendarObject.prototype.onYearSelect = function(value) {
    this._c.date = new Date(this._c.date);
    if (!isNaN(value))
        this._c.date = new Date(this._c.date.setFullYear(value));
    this._c.draw();
    return (!isNaN(value))};
    
 dhtmlxCalendarObject.prototype.onMonthSelect = function(value) {
 this._c.date = new Date(this._c.date.setMonth(value));
 this._c.draw();
 return true};
 
 dhtmlxCalendarObject.prototype.setParent = function(newParent){if (newParent){this.parent = newParent;this.parent.appendChild(this.entObj)}};dhtmlxCalendarObject.prototype.setDate = function(date){dateTmp = this.setFormatedDate(this.options.dateformat,date);this.draw();if(isNaN(dateTmp)|| dateTmp==null)
 date = new Date(date);else
 date = dateTmp;if ((date.getFullYear()== this.date.getFullYear()) && (date.getMonth() == this.date.getMonth())) {this.date = new Date(this.cutTime(date));this.selDate = new Date(this.cutTime(date));var cell = document.getElementById(this.uid+date.getFullYear()+date.getMonth()+date.getDate());if (cell){this.resetClass(this.activeCell);this.addClass(cell, "selected");this.activeCell = cell}}else {this.date = new Date(this.cutTime(date));this.selDate = new Date(this.cutTime(date));if (this.isAutoDraw)this.draw()}};dhtmlxCalendarObject.prototype.addClass = function(obj, styleName) {obj.className += ' ' + styleName};dhtmlxCalendarObject.prototype.resetClass = function(obj) {obj.className = obj.className.toString().split(' ')[0]};dhtmlxCalendarObject.prototype.resetHotClass = function(obj) {obj.className = obj.className.toString().replace(/hover/, '')};dhtmlxCalendarObject.prototype.setSkin = function(newSkin) {this.entObj.className = this.style;this.skinName = newSkin;this.addClass(this.entObj, this.style + (newSkin?'_':"") + newSkin + (this.minimized?" " + this.style + (newSkin?'_' + newSkin:"") + "_minimized":""));if(_isIE&&this.ifr!=undefined){this.ifr.className = this.style + (newSkin?'_':"") + newSkin + "_ifr"}};dhtmlxCalendarObject.prototype.getDate = function(){return this.selDate.toString()};dhtmlxCalendarObject.prototype.nextMonth = function(){this.date = new Date(this.date);this.date = new Date(this.date.setMonth(this.date.getMonth()+1));if (this.isAutoDraw)this.draw()};dhtmlxCalendarObject.prototype.prevMonth = function(){this.date = new Date(this.date)
 this.date = new Date(this.date.setMonth(this.date.getMonth()-1));if (this.isAutoDraw)this.draw()};dhtmlxCalendarObject.prototype.setOnClickHandler = function(func){this.doOnClick = func};dhtmlxCalendarObject.prototype.setPosition = function(argA,argB,argC){if(typeof(argA)=='object'){var posAr = this.getPosition(argA)
 var left = posAr[0]+argA.offsetWidth+(argC||0);var top = posAr[1]+(argB||0)};this.entObj.style.position = "absolute";this.entObj.style.top = (top||argA)+"px";this.entObj.style.left = (left||argB)+"px"};dhtmlxCalendarObject.prototype.close = function(func){this.entObj.parentNode.removeChild(true)};dhtmlxCalendarObject.prototype.getPosition = function(oNode,pNode) {if(!pNode)var pNode = document.body
 var oCurrentNode=oNode;var iLeft=0;var iTop=0;while ((oCurrentNode)&&(oCurrentNode!=pNode)){iLeft+=oCurrentNode.offsetLeft-oCurrentNode.scrollLeft;iTop+=oCurrentNode.offsetTop-oCurrentNode.scrollTop;oCurrentNode=oCurrentNode.offsetParent};if (pNode == document.body ){if (_isIE){if (document.documentElement.scrollTop)iTop+=document.documentElement.scrollTop;if (document.documentElement.scrollLeft)iLeft+=document.documentElement.scrollLeft}else
 if (!_isFF){iLeft+=document.body.offsetLeft;iTop+=document.body.offsetTop}};return new Array(iLeft,iTop)};dhtmlxCalendarObject.prototype.getFormatedDate = function (dateformat, date) {if(!dateformat)dateformat = this.options.dateformat
 if(!date)date = this.selDate;date = new Date(date);var out = '';var plain = true;for (var i=0;i<dateformat.length;i++){var replStr = dateformat.substr(i, 1);if (plain){if (replStr == '%'){plain = false;continue};out += replStr}else {switch (replStr) {case 'e':
 replStr = date.getDate();break;case 'd':
 replStr = date.getDate();if (replStr.toString().length == 1)
 replStr='0'+replStr;break;case 'j':
 var x = new Date(date.getFullYear(), 0, 0, 0, 0, 0, 0);replStr = Math.ceil((date.valueOf() - x.valueOf())/1000/60/60/24 - 1);while (replStr.toString().length < 3)
 replStr = '0' + replStr;break;case 'a':
 replStr = this.options.daysSNames[date.getDay()];break;case 'W':
 replStr = this.options.daysFNames[date.getDay()];break;case 'c':
 replStr = 1 + date.getMonth();break;case 'm':
 replStr = 1 + date.getMonth();if (replStr.toString().length == 1)
 replStr = '0' + replStr;break;case 'b':
 replStr = this.options.monthesSNames[date.getMonth()];break;case 'M':
 replStr = this.options.monthesFNames[date.getMonth()];break;case 'y':
 replStr = date.getFullYear();replStr = replStr.toString().substr(2);break;case 'Y':
 replStr = date.getFullYear()};out += replStr;plain = true}};return out};dhtmlxCalendarObject.prototype.setFormatedDate = function(dateformatarg, date){if (!date)return false;if(!dateformatarg)dateformatarg = this.options.dateformat;date = date.toString();function parseMonth(val){var tmpAr = new Array(this.options.monthesSNames,this.options.monthesFNames);for(var j=0;j<tmpAr.length;j++){for (var i=0;i<tmpAr[j].length;i++)if (tmpAr[j][i].indexOf(val)== 0)
 return i};return -1};var outputDate = new Date(2008, 0, 1);var j=0;for(var i=0;i<dateformatarg.length;i++){var _char = dateformatarg.substr(i,1);if(_char=="%"){var _cd = dateformatarg.substr(i+1,1);var _nextpc = dateformatarg.indexOf("%",i+1);var _nextDelim = dateformatarg.substr(i+2,_nextpc-i-1-1);var _nDelimInDatePos = date.indexOf(_nextDelim,j);if(_nextDelim=="")_nDelimInDatePos = date.length
 if(_nDelimInDatePos==-1)return null;var value = date.substr(j, _nDelimInDatePos-j);j=_nDelimInDatePos+_nextDelim.length
 switch (_cd) {case 'd':
 case 'e':
 outputDate.setDate(parseFloat(value));break;case "c":
 case "m":
 outputDate.setMonth(parseFloat(value) - 1);break;case "M":
 var val = parseMonth.call(this,value);if(val!=-1)outputDate.setMonth(parseFloat(val));else 
 return null;break;case "b":
 var val = parseMonth.call(this,value);if(val!=-1)outputDate.setMonth(parseFloat(val));else 
 return null;break;case 'Y':
 outputDate.setFullYear(parseFloat(value));break;case 'y':
 var year=parseFloat(value);outputDate.setFullYear(((year>20)?1900:2000) + year);break}}};this.date = outputDate;this.selDate = outputDate;return this.selDate};dhtmlxCalendarObject.prototype.setSensitive = function(fromDate,toDate){if (fromDate)this.sensitiveFrom = this.cutTime(fromDate);if (toDate)this.sensitiveTo = this.cutTime(toDate);if (this.isAutoDraw)this.draw()};
 
 function dhtmlxRichSelector(parametres) {
    for (x in parametres)
        this[x] = parametres[x];
    this.initValue = this.activeValue;
    if (!this.selectorSize)
        this.selectorSize = 7;
    var self = this;
    this.blurTimer = null;
    this.nodeBefore.onclick = function() {
                                self.show()};
                                this.editor = document.createElement('TEXTAREA');
                                this.editor.value = this.activeValue;
                                this.editor._s = this;
                                this.editor.className = 'dhtmlxRichSelector';
                                this.editor.onfocus = this.onFocus;
                                //this.editor.onblur = this.onBlur;
                                this.editor.onkeydown = this.onKeyDown;
                                this.editor.onkeyup = this.onKeyUp;
                                this.selector = document.createElement('SELECT');
                                this.selector.size = this.selectorSize;
                                this.selector.className = 'dhtmlxRichSelector';
                                if (this.valueList)
                                    for (var i = 0;i < this.valueList.length;i++)
                                        this.selector.options[i] = new Option(this.titleList[i], this.valueList[i], false, false);
                                this.selector._s = this;
                                this.selector.onfocus = this.onFocus;
                                //this.selector.onblur = this.onBlur;
                                this.selector.onclick = function () {
                                                            self.onSelect(self.selector.value)
                                                        };
                                this.selector.getIndexByValue = function (Value, isFull) {
                                                                    var Select = this;
                                                                    Value = Value.toString().toUpperCase();
                                                                    if (!isFull)
                                                                        isFull=false;
                                                                    for (var i=0;i<Select.length;i++){
                                                                        var i_value = Select[i].text.toUpperCase();
                                                                        if (isFull){
                                                                            if(i_value == Value)
                                                                                return i
                                                                        }else {
                                                                            if (i_value.indexOf(Value)== 0) 
                                                                                return i
                                                                        }
                                                                    };
                                                                    if (Select._s.isOrderedList){
                                                                        if (Select._s.isNumbersList)
                                                                            if (isNaN(Value)) 
                                                                                return -1;
                                                                        i_value = Select[0].text.substring(0, Value.length).toUpperCase();
                                                                        if (i_value > Value)
                                                                            return 0;
                                                                        i_value = Select[Select.length-1].text.substring(0, Value.length);
                                                                        if (i_value < Value)
                                                                            return Select.length-1
                                                                    };
                                                                    return -1
                                                                };
                                this.con = document.createElement('DIV')
                                this.con.className = 'dhtmlxRichSelector';
                                with (this.con.style) {
                                    width = 'auto';
                                    display = 'none'
                                };
                                this.con.appendChild(this.editor);
                                this.con.appendChild(this.selector);
                                this.nodeBefore.parentNode.insertBefore(this.con, this.nodeBefore);
                                return this
                            };
    dhtmlxRichSelector.prototype.show = function() {
                                            this.con.style.display = 'block';
                                            with (this.selector.style) {
                                                marginTop = parseInt(this.nodeBefore.offsetHeight)+'px';
                                                width = 'auto'
                                            };
                                            with (this.editor.style) {
                                                width = parseInt(this.nodeBefore.offsetWidth)+15+'px';
                                                height = parseInt(this.nodeBefore.offsetHeight)+'px'};
                                                this.selector.selectedIndex = this.selector.getIndexByValue(this.activeValue);
                                                this.editor.focus()
                                            };
    dhtmlxRichSelector.prototype.hide = function() {
                                            this.con.style.display = 'none'
                                        };
    /*dhtmlxRichSelector.prototype.onBlur = function() {
    var self = this._s;
    self.blurTimer = setTimeout(function(){if (self.isAllowUserValue){if (self.onSelect(self.editor.value))
 self.activeValue = self.editor.value}else {if (self.onSelect(self.selector.value))
 self.activeValue = self.selector.value}}, 10)};*/
 
 dhtmlxRichSelector.prototype.onFocus = function() {var self = this._s;if(self.blurTimer){clearTimeout(self.blurTimer);self.blurTimer = null};if (this === this._s.selector)self.editor.focus()};dhtmlxRichSelector.prototype.onKeyDown = function(e) {var self = this._s;var e = e || event;var isCase = true;switch (e.keyCode) {case 33: 
 if (self.selector.selectedIndex < self.selector.size)self.selector.selectedIndex = 0;else self.selector.selectedIndex -= parseInt(self.selector.size)-1;break;case 34: 
 if (self.selector.length-self.selector.selectedIndex < self.selector.size)self.selector.selectedIndex = self.selector.length-1;else self.selector.selectedIndex += parseInt(self.selector.size)-1;break;case 35: 
 if (e.ctrlKey)self.selector.selectedIndex = self.selector.length-1;break;case 36: 
 if (e.ctrlKey)self.selector.selectedIndex = 0;break;case 38: 
 if (self.selector.selectedIndex == 0);else self.selector.selectedIndex -= 1;break;case 40: 
 if (self.selector.selectedIndex == self.selector.length-1);else self.selector.selectedIndex += 1;break;default:
 isCase = false};if (isCase){self.editor.value = self.selector.options[self.selector.selectedIndex].text;self.editor.focus()}};dhtmlxRichSelector.prototype.onKeyUp = function(e) {var self = this._s;var e = e || event;switch (e.keyCode) {case 13: 
 self.editor.blur();break;case 27: 
 self.editor.value = self.initValue;self.selector.selectedIndex = self.selector.getIndexByValue(self.initValue, true);self.editor.blur();break;default:
 var selectedIndex = self.selector.getIndexByValue(self.editor.value);if (selectedIndex >= 0)self.selector.selectedIndex = selectedIndex}};dhtmlxCalendarObject.prototype.dhx_Event=function()
{this.dhx_SeverCatcherPath="";this.attachEvent = function(original, catcher, CallObj)
 {CallObj = CallObj||this;original = 'ev_'+original;if ( ( !this[original] )|| ( !this[original].addEvent ) ) {var z = new this.eventCatcher(CallObj);z.addEvent( this[original] );this[original] = z};return ( original + ':' + this[original].addEvent(catcher) )};this.callEvent=function(name,arg0){if (this["ev_"+name])return this["ev_"+name].apply(this,arg0);return true};this.checkEvent=function(name){if (this["ev_"+name])return true;return false};this.eventCatcher = function(obj)
 {var dhx_catch = new Array();var m_obj = obj;var func_server = function(catcher,rpc)
 {catcher = catcher.split(":");var postVar="";var postVar2="";var target=catcher[1];if (catcher[1]=="rpc"){postVar='<?xml version="1.0"?><methodCall><methodName>'+catcher[2]+'</methodName><params>';postVar2="</params></methodCall>";target=rpc};var z = function() {};return z};var z = function()
 {if (dhx_catch)var res=true;for (var i=0;i<dhx_catch.length;i++){if (dhx_catch[i] != null){var zr = dhx_catch[i].apply( m_obj, arguments );res = res && zr}};return res};z.addEvent = function(ev)
 {if ( typeof(ev)!= "function" )
 if (ev && ev.indexOf && ev.indexOf("server:")== 0)
 ev = new func_server(ev,m_obj.rpcServer);else
 ev = eval(ev);if (ev)return dhx_catch.push( ev ) - 1;return false};z.removeEvent = function(id)
 {dhx_catch[id] = null};return z};this.detachEvent = function(id)
 {if (id != false){var list = id.split(':');this[ list[0] ].removeEvent( list[1] )}}};
 dhtmlxCalendarObject.prototype.isVisible = function(){return (this.parent.style.display == ''?true:false)};dhtmlxCalendarObject.prototype.setHolidays = function(dates){this.holidays = dates.toString().split(",")}
 dhtmlxCalendarObject.prototype.toggleCalendar = function() {
    if(this.isVisible()) {
        this.hide();
    }
    else {        
        this.show();
    }
}
//v.1.0 build 80512

/*
Copyright DHTMLX LTD. http://www.dhtmlx.com
You allowed to use this component or parts of it under GPL terms
To use it on other terms or get Professional edition of the component please contact us at sales@dhtmlx.com
*/