﻿var gd = new Date();
var gCurMonth = [gd.getFullYear(), gd.getMonth() + 1, gd.getDate()];
var gconstCurMonth = [gd.getFullYear(), gd.getMonth() + 1, gd.getDate()];
var gsCalTitle = "gMonths[gCurMonth[1] - 1] + ' ' + gCurMonth[0]";
var dtToday = gCurMonth[2] + "." + gCurMonth[1] + "." + gCurMonth[0];
var dtSelected = undefined;

var gMonths = new Array("Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь");
var gWeekDay = new Array("в", "п", "в", "с", "ч", "п", "с");

var gBegin = [1910, 1, 1];
var gEnd = [2035, 12, 31];

var cal = [];
for (var i = 0; i < 6; i++) {
    cal[i] = [];
}

var lookForParentPosition = false;
var ghrTop = 0;
var ghrLeft = 0;

var giSat = 5;
var giSun = 6;
gWeekDay = [].concat(gWeekDay.slice(1), gWeekDay[0]);

var selectedControl = undefined;

function DrawDateSelector(objectName, lookFor, hrTop, hrLeft) {

    var divObject = getElement(objectName);

    if (lookForParentPosition != undefined) {
        lookForParentPosition = lookFor;
    }

    if (hrTop != undefined) {
        ghrTop = hrTop;
    }

    if (hrLeft != undefined) {
        ghrLeft = hrLeft;
    }

    var result = "";
    result = "<TABLE border = 0 class = dateSelectorTable>";
    var sTitle = "<SPAN id = 'calTitle'>" + eval(gsCalTitle) + "</SPAN>";

    result += "<TR align='center'><TD>";
    result += "<TABLE width = '100%' class = 'dateSelectorText'><TR><TD>Месяц:</TD>";

    var mstr = "<select id = 'MonSelect' class = 'dateSelectorText' onchange =' SetCalendar(gcbYear.value, gcbMon.value)'>";
    for (var i = 0; i < 12; i++) {
        mstr += "<option value = '" + (i + 1) + "'>" + gMonths[i] + "</option>";
    }
    mstr += "</SELECT>";

    var ystr = "<SELECT id = 'YearSelect' class = 'dateSelectorText' onchange = 'SetCalendar(gcbYear.value, gcbMon.value)'>";
    for (var i = gBegin[0]; i <= gEnd[0]; i++) {
        ystr += "<OPTION value = '" + i + "'>" + i + "</OPTION>";
    }
    ystr += "</SELECT>";

    result += "<TD>" + mstr + "</TD><TD>Год:</TD><TD>" + ystr + "</TD></TR></TABLE>";
    result += "</TD></TR><TR><TD align = 'center' class = 'dateSelectorCaption'>" + sTitle + "</TD></TR>";
    result += "<TR><TD align='center'><DIV id = 'divWithDays' name = 'divWithDays'>";
    result += "</DIV></TD></TR>";
    result += "<TR><TD align = center><INPUT value = 'закрыть' type = button onclick = 'HideDataPicker();' class = 'dateSelectorButton'></TD></TR>";  
    result += "</TABLE>";

    divObject.innerHTML = result;

    gcbMon = getElement("MonSelect");
    gcbYear = getElement("YearSelect");

    SetCalendar(gCurMonth[0], gCurMonth[1]);
}

function getElement(elementName) {
    var element = undefined;
    try {
        element = document.getElementById(elementName)
        return element;
    }
    catch (e) {
        return null;
    }
}

function DrawCalendarValues(y, m) {
    try {
        var resultText = "<TABLE width = 100% border = '0' cellspacing = '1' class = 'dateSelectorDayTable'>";
        var c = fBuildCal(y, m);

        resultText += "<tr>";
        for (var i = 0; i < 7; i++) {
            resultText += "<td align = 'center' class='dateSelectorHeader'>" + gWeekDay[i] + "</td>";
        }
        resultText += "</tr>";

        for (var week = 0; week < 6; week++) {
            resultText += "<tr>";
            for (var day = 0; day < 7; day++) {

                m = c[week][day][0];
                d = c[week][day][1];

                var currMonth = m;
                var currDay = d;
                var currYear = gCurMonth[0];

                var dayStyle = "dateSelectorSimpleDay";
                if (d < 0) {
                    dayStyle = "dateSelectorOtherDay";
                    d = -d;
                    currDay = -currDay;
                } else {
                    dayStyle = (day == giSun) ? "dateSelectorSanDay" : (day == giSat) ? "dateSelectorSatDay" : "dateSelectorSimpleDay";
                }

                if (currDay < 10) {
                    currDay = "0" + currDay;
                }

                if (currMonth == 0) {
                    currMonth = 12;
                    currYear--;
                }

                if (currMonth == 13) {
                    currMonth = 1;
                    currYear++;
                }

                if (currMonth < 10) {
                    currMonth = "0" + currMonth;
                }

                var currentValue = currDay + "." + currMonth + "." + currYear;

                if (currentValue == dtToday) {
                    dayStyle = "dateSelectorToDay";
                }

                if (currentValue == dtSelected) {
                    dayStyle = "dateSelectorSelectedDay";
                }                

                resultText += "<td style = 'cursor: hand; cursor: pointer;' onclick = \"fSetSelected(this, '" + currentValue + "');\" align = 'center' class = '" + dayStyle + "'>" + d + "</td>";
            }
            resultText += "</tr>";
        }

        resultText += '</TABLE>';

        var objWithDays = getElement("divWithDays");
        objWithDays.innerHTML = resultText;
    }
    catch (e) {
        window.alert(e);
    }
}

function SetCalendar(y, m) {
    if (!fCheckRange(y, m)) {
        y = dtToday.substr(6, 4);
        m = dtToday.substr(3, 2);
    }

    if (gcbMon) gcbMon.options[m - 1].selected = true;
    if (gcbYear) gcbYear.options[y - gBegin[0]].selected = true;

    gCurMonth = [y, m];
    
    getElement("calTitle").innerHTML = eval(gsCalTitle);
    DrawCalendarValues(y, m);
}

function fBuildCal(y, m) {
    m = parseInt(m, 10);
    var days = [31, 31, (y % 4 == 0 && y % 100 != 0 || y % 400 == 0) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
    var dCalDate = new Date(y, m - 1, 1);
    var iDayOfFirst = dCalDate.getDay();
    if (--iDayOfFirst < 0)
        iDayOfFirst = 6;        
    var iOffsetLast = days[m - 1] - iDayOfFirst + 1;
    var iDate = 1;
    var iNext = 1;
    for (var d = 0; d < 7; d++)
        cal[0][d] = (d < iDayOfFirst) ? [m - 1, -(iOffsetLast + d)] : [m, iDate++];
    for (var w = 1; w < 6; w++)
        for (var d = 0; d < 7; d++)
        cal[w][d] = (iDate <= days[m]) ? [m, iDate++] : [m + 1, -(iNext++)];
    return cal;
}

function fCheckRange(y, m) {
    if (y > gEnd[0] || y < gBegin[0] || (y == gBegin[0] && m < gBegin[1]) || (y == gEnd[0] && m > gEnd[1])) {           
        return false;
    }
    else {
        return true;
    }
}

function getTodayDate() {
    var dateNow = new Date();
    
    var day = dateNow.getDate();
    var month = dateNow.getMonth() + 1;
    var year = dateNow.getFullYear();

    var sDay = day + "";
    var sMonth = month + "";
    var sYear = year + "";
    
    if (day < 10) {
        sDay = "0" + day;
    }

    if (month < 10) {
        sMonth = "0" + month;
    }

    var curr = sDay + "." + sMonth + "." + sYear;
    return curr;
}

function ShowPicker(controlID, dateInputControlName, currentValue) {
    try {

        dtToday = getTodayDate();
        dtSelected = currentValue;

        if (dtSelected != undefined) {
            SetCalendar(dtSelected.substr(6, 4), dtSelected.substr(3, 2));
        }
        else {
            SetCalendar(dtToday.substr(6, 4), dtToday.substr(3, 2));
        }

        controlObj = getElement(controlID);
        mainObj = getElement('dateDivSelector');

        var offSetTop = controlObj.offsetTop;
        var offSetLeft = controlObj.offsetLeft;

        if (lookForParentPosition == true) {
            var parentOffSet = controlObj.offsetParent;
            if (parentOffSet != undefined) {
                offSetTop += parentOffSet.offsetTop;
                offSetLeft += parentOffSet.offsetLeft;
            }
        }

        if (ghrTop == 0) {
            offSetTop += controlObj.offsetHeight;
        }
        else {
            offSetTop += ghrTop;
        }

        offSetLeft += ghrLeft;

        mainObj.style.display = "block";
        mainObj.style.left = offSetLeft + "px";
        mainObj.style.top = (offSetTop + 2) + "px";

        /* dateDivSelectorLayer - уровень заглушающий в IE6 контролы - select, input */
        if (isIE) {
            mainObjLayer = getElement('dateDivSelectorLayer');
            if (mainObjLayer != undefined) {
                
                mainObjLayer.style.display = "block";
                mainObjLayer.style.left = offSetLeft + "px";
                mainObjLayer.style.top = (offSetTop + 2) + "px";
                mainObjLayer.style.width = mainObj.offsetWidth;
                mainObjLayer.style.height = mainObj.offsetHeight;

                try {
                    var obj = mainObjLayer.children[0];
                    obj.style.width = "100%";
                    obj.style.height = "100%";
                }
                catch (e) {
                }
            }
        }

        dateInputControl = getElement(dateInputControlName);
        selectedControl = dateInputControl;
    }
    catch (e) {
        window.alert(e);
    }
}

function openPopUpCalendar2(controlID, dateInputControlName) {

    var dtObject = getElement(dateInputControlName);
    var selData = dtObject.value;
    var tmpDate = new Date(selData.substr(6, 4), selData.substr(3, 2) - 1, selData.substr(0, 2));
    var currentValue = undefined;

    if (tmpDate.getDate() == selData.substr(0, 2) && tmpDate.getMonth() == selData.substr(3, 2) - 1 && tmpDate.getFullYear() == selData.substr(6, 4) && tmpDate.getFullYear() > 1752) {
        currentValue = selData;
    }    
    ShowPicker(controlID, dateInputControlName, currentValue);
}

function HideDataPicker() {
    try {
        mainObj = getElement('dateDivSelector');

        if (mainObj == undefined)
            return;
        
        mainObj.style.display = "none";

        mainObjLayer = getElement('dateDivSelectorLayer');
        if (mainObjLayer != undefined) {
            mainObjLayer.style.display = "none";
        }
    }
    catch (e) {
        window.alert(e);
    }
}

function fSetSelected(object, value) {
    selectedControl.value = value;
    selectedControl.focus();
    selectedControl.blur();
    HideDataPicker();
    CheckDate2(selectedControl.id);
}

function SwitchCalendarToSingle2(par, path) {

    if (path == null)
        path = './';

    HideDataPicker();

    var chbEl = getElement(par + "_1id");
    
    if (chbEl != undefined)
        chbEl.checked = true;

    var el1 = getElement(par + '_1');
    var el2 = getElement(par + '_2');

    if (el1 != undefined)
        el1.style.color = "#AAAAAA";
        
    if (el2 != undefined)
        el2.style.color = "#AAAAAA";

    var imgEl1 = getElement(par + '_c0');
    var imgEl2 = getElement(par + '_c1');
    var imgEl3 = getElement(par + '_c2');

    if (imgEl1 != undefined)
        imgEl1.src = path + "calendar.gif";

    if (imgEl2 != undefined)
        imgEl2.src = path + "calendar_disable.gif";

    if (imgEl3 != undefined)
        imgEl3.src = path + "calendar_disable.gif";

    if (el1 != undefined)
        el1.value = "дд.мм.гггг";
    if (el2 != undefined)
        el2.value = "дд.мм.гггг";
}

function SwitchCalendarToMultiply2(par, path) {

    if (path == null)
        path = './';

    HideDataPicker();

    var el1 = getElement(par + "_2id");
    var el2 = getElement(par + "_0");

    var el3 = getElement(par + "_c0");
    var el4 = getElement(par + "_c1");
    var el5 = getElement(par + "_c2");
    
    if (el1 != undefined)
        el1.checked = true;
       
    if (el2 != undefined)
        el2.style.color = "#AAAAAA";

    if (el3 != undefined)
        el3.src = path + "calendar_disable.gif";

    if (el4 != undefined)
        el4.src = path + "calendar.gif";
    if (el5 != undefined)
        el5.src = path + "calendar.gif";

    if (el2 != undefined)
        el2.value = "дд.мм.гггг";
}

function CheckDate2(par) {
    try {
        var currObject = getElement(par);

        if (currObject != undefined) {
            tmpStr = currObject.value;
            tmpDate = new Date(tmpStr.substr(6, 4), tmpStr.substr(3, 2) - 1, tmpStr.substr(0, 2));

            if (tmpDate.getDate() == tmpStr.substr(0, 2) && tmpDate.getMonth() == tmpStr.substr(3, 2) - 1 && tmpDate.getFullYear() == tmpStr.substr(6, 4) && tmpDate.getFullYear() > 1752) {
                currObject.style.color = "#000000";
            }
            else {
                currObject.style.color = "#DD0000";
            }

            if (currObject.value == "" || currObject.value == "дд.мм.гггг") {
                currObject.style.color = "#AAAAAA";
                //currObject.value = "дд.мм.гггг";                
            }
        }
    }
    catch (e) {
        window.alert('CheckDate2 ' + e);
    }
}

function ClearTitle2(par) {
    try {
        if (getElement(par).value == "дд.мм.гггг") {
            getElement(par).style.color = "#000000";
            getElement(par).value = "";
        }
    }
    catch (e) {
        window.alert('ClearTitle2 ' + e);
    }
}

function maskAddPoint2(objEvent) {
    var iKeyCode, strKey, objInput;

    if (isIE) {
        iKeyCode = objEvent.keyCode;
        objInput = objEvent.srcElement;
    } else {
        iKeyCode = objEvent.which;
        objInput = objEvent.target;
    }

    strKey = String.fromCharCode(iKeyCode);

    if (reA.test(objInput.value) && objInput.value.length == 2 && strKey != "." && !reBackspaceChar.test(strKey))
        objInput.value = objInput.value + ".";

    if (reB.test(objInput.value) && objInput.value.length == 5 && strKey != "." && !reBackspaceChar.test(strKey))
        objInput.value = objInput.value + ".";
}
