JSCore.DatePicker.ID = "JSCore_DatePicker";

JSCore.DatePicker.monthNames = new Array("Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь");
JSCore.DatePicker.dayNames = new Array("Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс");

JSCore.DatePicker.selDay;
JSCore.DatePicker.selMonth;
JSCore.DatePicker.selYear;
JSCore.DatePicker.curDay;
JSCore.DatePicker.curMonth;
JSCore.DatePicker.curYear;

JSCore.DatePicker._MINUTE = 60 * 1000;
JSCore.DatePicker._HOUR = 60 * JSCore.DatePicker._MINUTE;
JSCore.DatePicker._DAY = 24 * JSCore.DatePicker._HOUR;

JSCore.DatePicker.divElem; // DIV, содержащий календарь
JSCore.DatePicker.curObj;

if(document.getElementById) // JSCore_DatePicker_CaptionCss
{

    document.write ("<div id='" + JSCore.DatePicker.ID + "' class='calenddiv' style='border: #222222 1px solid; display: none; z-index: 10000; visibility: visible; position: absolute; padding: 0; margin-top: 4px;'>\n");


//if (obratno)  document.write ("111");
    document.write ("<table width='462' cellspacing='0px' cellpadding'0px' style='background-color: #ffffff;'>\n");

    document.write ("  <tr height='20'><td align='center' style='background-color: " + JSCore.DatePicker.Settings.CAPTION_COLOR + "; border-bottom: solid 1px #666666'>");
    document.write ("    <span id='" + JSCore.DatePicker.ID + "_Caption1' style='font-family: tahoma; font-size: 11px; font-weight: bold; color: #ffffff'></span></td>");
    document.write ("  <td align='center' style='background-color: " + JSCore.DatePicker.Settings.CAPTION_COLOR + "; border-bottom: solid 1px #666666'>");
    document.write ("    <span id='" + JSCore.DatePicker.ID + "_Caption2' style='font-family: tahoma; font-size: 11px; font-weight: bold; color: #ffffff'></span></td>");
    document.write ("  <td align='center' style='background-color: " + JSCore.DatePicker.Settings.CAPTION_COLOR + "; border-bottom: solid 1px #666666'>");
    document.write ("    <span id='" + JSCore.DatePicker.ID + "_Caption3' style='font-family: tahoma; font-size: 11px; font-weight: bold; color: #ffffff'></span></td></tr>");

    document.write ("  <tr height='4'><td colspan='3' valign='top'>");
    document.write ("  </td></tr>");

    document.write ("  <tr><td width='160' valign='top'>");
    document.write ("    <span id='" + JSCore.DatePicker.ID + "_Content1'></span>");
    document.write ("  </td>");
    document.write ("  <td width='160' valign='top' style='border-left: solid 1px #c2c2c2'>");
    document.write ("    <span id='" + JSCore.DatePicker.ID + "_Content2'></span>");
    document.write ("  </td>");
    document.write ("  <td width='160' valign='top' style='border-left: solid 1px #c2c2c2'>");
    document.write ("    <span id='" + JSCore.DatePicker.ID + "_Content3'></span>");
    document.write ("  </td></tr>");

    document.write ("  <tr height='4'><td colspan='3' valign='top'>");
    document.write ("  </td></tr>");

    document.write ("</table>\n")

    document.write ("</div>");
}


//
// Объект Calendar
//
JSCore.DatePicker.TheObject = function(inputElem, btnElem, intBefor, intAfter, changeDateCallback)
{
    this.inputElem = inputElem;
    this.btnElem = btnElem;
    this.intBefor = intBefor;
    this.intAfter = intAfter;
    this.changeDateCallback = changeDateCallback;

    return this;
}

JSCore.DatePicker.IsVisible = function()
{
    if(!JSCore.DatePicker.divElem)
    {
        return false;
    }
    if(JSCore.DatePicker.divElem.style.display == "none")
    {
        return false;
    }
    return true;
}

JSCore.DatePicker.ProcessEvent = function(evt)
{
    if(!JSCore.DatePicker.divElem)
    {
        return;
    }
    if(evt.target == JSCore.DatePicker.curObj.btnElem)
    {
        return;
    }
    if(!JSCore.IsElemContains(JSCore.DatePicker.divElem, evt.target))
    {
        JSCore.DatePicker.divElem.style.display = "none";
    }
}

JSCore.DatePicker.Drop = function(inputElem, btnElem, intBefor, intAfter, dateString, changeDateCallback)
{


   //this.intBefor

   if((!JSCore.DatePicker.IsVisible()) || (JSCore.DatePicker.curObj.inputElem != inputElem))
    {
        var nowDate = new Date();
        dateParts = dateString.split(".");
        JSCore.DatePicker.selDay = parseInt(dateParts[0], 10);
        JSCore.DatePicker.selMonth = parseInt(dateParts[1], 10);
        JSCore.DatePicker.selYear = parseInt(dateParts[2], 10);
        JSCore.DatePicker.curMonth = nowDate.getMonth() + 1;
        JSCore.DatePicker.curYear = nowDate.getFullYear();

        if(isNaN(JSCore.DatePicker.selMonth) || JSCore.DatePicker.selMonth < 1 || JSCore.DatePicker.selMonth > 12)
        {
            JSCore.DatePicker.curMonth = nowDate.getMonth() + 1;
        }
        if(isNaN(JSCore.DatePicker.selYear))
        {
            JSCore.DatePicker.curYear = nowDate.getFullYear();
        }

        JSCore.DatePicker.curObj = new JSCore.DatePicker.TheObject(inputElem, btnElem, intBefor, intAfter, changeDateCallback);
        JSCore.DatePicker.divElem = document.getElementById(JSCore.DatePicker.ID);

        var point = JSCore.GetElemLeftTopPoint(inputElem);
        JSCore.DatePicker.divElem.style.left = point.x + 'px';
        JSCore.DatePicker.divElem.style.top = point.y + inputElem.offsetHeight + 'px';
//        JSCore.DatePicker.divElem.style.top = point.y + 100 + 'px';
        JSCore.DatePicker.Update();
        JSCore.DatePicker.divElem.style.display = "";
    }
    else
    {
        JSCore.DatePicker.divElem.style.display = "none";
    }
}

JSCore.DatePicker.DropSimple = function(inputElem, btnElem)
{
    JSCore.DatePicker.Drop(inputElem, btnElem, 0, 1, inputElem.value,
                           function(inputElem, dateString)
                           {
                               inputElem.value = dateString;
                           });
}

JSCore.DatePicker.SetNextMonth = function()
{
    JSCore.DatePicker.curMonth ++;
    if(JSCore.DatePicker.curMonth > 12)
    {
        JSCore.DatePicker.curMonth = 1;
        JSCore.DatePicker.curYear++;
    }
    JSCore.DatePicker.Update();
}

JSCore.DatePicker.SetPrevMonth = function()
{
    JSCore.DatePicker.curMonth --;
    if(JSCore.DatePicker.curMonth < 1)
    {
        JSCore.DatePicker.curMonth = 12;
        JSCore.DatePicker.curYear--;
    }
    JSCore.DatePicker.Update();
}

JSCore.DatePicker.UpdateCol = function(colNum)
{

    var _curYear = JSCore.DatePicker.curYear;
    var _curMonth = JSCore.DatePicker.curMonth + colNum - 1;

    if(_curMonth > 12)
    {
        _curMonth -= 12;
        _curYear++;
    }


    var nowDate = new Date();
    var startDate = new Date(_curYear, _curMonth - 1, 1);
    var dayPosition = startDate.getDay() - 1;
    var endDate = new Date(_curMonth, _curMonth, 1);
    endDate = new Date(endDate - JSCore.DatePicker._DAY);
    var daysQuantInMonth = endDate.getDate();
    if(_curMonth == 2) daysQuantInMonth = 29;

    if(dayPosition < 0)
    {
        dayPosition = 6;
    }

    document.getElementById(JSCore.DatePicker.ID + "_Caption" + colNum).innerHTML = JSCore.DatePicker.monthNames[_curMonth - 1] + " " + _curYear;
    var content = "<tr><td><table cellspacing='0' cellpadding='2px' style='background-color: #ffffff; border-left: white 1px solid; border-right: white 1px solid; border-bottom: white 1px solid'>\n";
    content += "<tr>\n";
    for(var j = 0; j < 7; j ++)
    {
        content += "<td align='center' width='22'>\n";
        content += "  <span style='color: #000000; font-family: tahoma; font-size: 10px; font-weight: bold'>" + JSCore.DatePicker.dayNames[j] + "</span></td>\n";
    }
    content += "</tr>";

    content += "<tr>";
    for(var i = 1; i <= dayPosition; i++)
    {
        content += "<td align=\"center\">\n";
        content += "  <span style=\"font-size: 11px; font-weight: bold;\">&nbsp</span></td>\n";
    }

    for(var dayNum = 1; dayNum <= daysQuantInMonth; dayNum ++)
    {

		dayPosition ++;
        dayDisabled = JSCore.DatePicker.IsDayDisabled(_curYear, _curMonth, dayNum, JSCore.DatePicker.curObj.intBefor, JSCore.DatePicker.curObj.intAfter);
        var style = "font-family: verdana; font-size: 10px; font-weight: bold";

        // Подчеркиваем текущий день
        if((dayNum == nowDate.getDate()) && (_curMonth == nowDate.getMonth() + 1) && (_curYear == nowDate.getFullYear()))
        {
            style += "; text-decoration: underline";
        }
        // Устанавливаем цвет для поля даты
        if(dayDisabled)
        {
		    style += "; color: #c0c0c0";
	    }
	    else if(((dayPosition + 1) % 7 == 0) || ((dayPosition + 1) % 7 == 1))
        {

            if((JSCore.DatePicker.curObj.intBefor == -1 || JSCore.DatePicker.curObj.intBefor == 0) && ((dayPosition + 1) % 7 == 1)) {

				style += "; color: #c0c0c0";
				dayDisabled = true;
				}
			else
				style += "; color: #a10000";
        }
        else
        {
            style += "; color: #222222";
        }

        // Устанавливаем курсор для поля даты
        if(!dayDisabled)
        {
		    style += "; cursor: pointer";
	    }
	    else
	    {
		    style += "; cursor: default";
	    }

        var onClick = "";

        if(!dayDisabled)
        {
		    onClick += "JSCore.DatePicker.curDay=" + dayNum + "; JSCore.DatePicker.curMonth = " + _curMonth + "; JSCore.DatePicker.curYear = " + _curYear + "; JSCore.DatePicker.CloseCalendar()";
	    }

        content += "<td height=\"22px\" align=\"center\"";
        if((dayNum == JSCore.DatePicker.selDay) && (_curMonth == JSCore.DatePicker.selMonth) && (_curYear == JSCore.DatePicker.selYear))
        {
            content += " style=\"border: #808080 1px solid; background-color: #eeeeee\"";
        }
        content += ">";
        content += "<span onclick=\"" + onClick + "\" style=\"" + style + "\">" + dayNum + "</span></td>";
        if((dayPosition + 1) % 7 == 1)
        {
            content += "</tr><tr>";
        }
    }
    content += "</tr></table>\n";
    document.getElementById(JSCore.DatePicker.ID + "_Content" + colNum).innerHTML = content;
}

JSCore.DatePicker.Update = function()
{
    JSCore.DatePicker.UpdateCol(1);
    JSCore.DatePicker.UpdateCol(2);
    JSCore.DatePicker.UpdateCol(3);
}

JSCore.DatePicker.CloseCalendar = function()
{
    var dateString = "";
    if(JSCore.DatePicker.curDay < 10)
    {
        dateString += "0";
    }
    dateString += JSCore.DatePicker.curDay + ".";
    if(JSCore.DatePicker.curMonth < 10)
    {
        dateString += "0";
    }
    dateString += JSCore.DatePicker.curMonth + ".";
    dateString += JSCore.DatePicker.curYear;

    //document.getElementById('ddate').value = dateString;
    JSCore.DatePicker.curObj.changeDateCallback(JSCore.DatePicker.curObj.inputElem, dateString);
    JSCore.DatePicker.divElem.style.display = "none";
}

JSCore.DatePicker.IsDayDisabled = function(year, month, day, intBefor, intAfter)
{
	var nowDate = new Date();
    var date = new Date(year, month - 1, day);

    if (nowDate.getYear() == year && nowDate.getMonth() == month && nowDate.getDay() == day)
    {
        return true;
    }
	return (intAfter > 0 && ((date.getTime() - nowDate.getTime()) / JSCore.DatePicker._DAY) > intAfter - 1)
	    || (intBefor >= -1 && ((nowDate.getTime() - date.getTime()) / JSCore.DatePicker._DAY) >= intBefor);
}
