var calendar_start_year = 1999;

window.onload = function(e)
{
    // calendar startup
    if (document.createElement) 
        calendar.init();
}




var calendar_table =
'<table id="calendarTable">'+
'<tr>'+
'    <th id="calendarTableHeader" colspan="7"></th>'+
'</tr>'+
'<tr><th>Пн</th><th>Вт</th><th>Ср</th><th>Чт</th>'+
'<th>Пт</th><th>Сб</th><th>Вс</th></tr>'+
'<tbody id="tableBody"></tbody>'+
'<tr>'+
'    <td colspan="7">'+
'    <form name="calendarDateChooser">'+
'        <select name="calendarChooseMonth"'+
'        onchange="calendar.populateTable(this.form)">'+
'            <option>Январь<option>Февраль'+
'            <option>Март<option>Апрель<option>Май'+
'            <option>Июнь<option>Июль<option>Август'+
'            <option>Сентябрь<option>Октябрь'+
'            <option>Ноябрь<option>Декабрь'+
'    </select>'+
'    <select name="calendarChooseYear" onchange="calendar.populateTable(this.form)">'+
'    </select>'+
'    </td>'+
'    </form>'+
'</tr>'+
'</table>';

calendar =
{
    c: document.createElement("DIV"),
    target: null,
    target_value: null,
    init: function()
    {
        calendar.c.setAttribute("id", "calendar");
        document.body.appendChild(calendar.c);

        var a = document.all ? document.all : document.getElementsByTagName("*");
        var aLength = a.length;
        for (var i = 0; i < aLength; i++)
        {
            if(a[i].getAttribute("calendar"))
            {
                calendar.listener(a[i], "click", calendar.showCalendar);
            }
        }
    },

    listener: function(o, e, a)
    {
        if (o.addEventListener) o.addEventListener(e, a, false);
        else if (o.attachEvent) o.attachEvent("on" + e, a);
        else return null;
    },


    fillYears: function(startYear)
    {
        var today = new Date( );
        var thisYear = today.getFullYear( );
        var yearChooser = document.calendarDateChooser.calendarChooseYear;
        for (i = startYear,j=0; i < thisYear + 2; i++,j++)
        {
            yearChooser.options[yearChooser.options.length] = new Option(i, i);

            if(i == calendar.target_value.getFullYear())
            {
                yearChooser.selectedIndex = j;
            }
        }
    },

    setCurrMonth: function(today)
    {
        document.calendarDateChooser.calendarChooseMonth.selectedIndex = today.getMonth();
    },

    setCurrDate: function()
    {
        var yearChooser = document.calendarDateChooser.calendarChooseYear;
        var monthChooser = document.calendarDateChooser.calendarChooseMonth;


        for (i = 0; i < yearChooser.options.length; i++)
        {
            if(yearChooser.options[i].text == calendar.target_value.getFullYear())
            {
                yearChooser.selectedIndex = i;
            }
        }

        monthChooser.selectedIndex = calendar.target_value.getMonth();

        document.getElementById("calendarTableHeader").innerHTML =
        monthChooser.options[monthChooser.selectedIndex].text + " " + yearChooser.options[yearChooser.selectedIndex].text;
    },

    getFirstDay: function(theYear, theMonth)
    {
        var firstDate = new Date(theYear,theMonth,1);
        return firstDate.getDay() == 0 ? 6:firstDate.getDay() -1;
    },

    getMonthLen: function(theYear, theMonth)
    {
        var nextMonth = new Date(theYear, theMonth + 1, 1);
        nextMonth.setHours(nextMonth.getHours( ) - 3);
        return nextMonth.getDate( );
    },

    populateTable: function(form)
    {
        // pick up date form choices
        var theMonth = form.calendarChooseMonth.selectedIndex;
        var theYear = parseInt(form.calendarChooseYear.options[form.calendarChooseYear.selectedIndex].text);

        // initialize date-dependent variables
        var firstDay = calendar.getFirstDay(theYear, theMonth);
        var howMany = calendar.getMonthLen(theYear, theMonth);
        var today = new Date( );

        // fill in month/year in table header
        document.getElementById("calendarTableHeader").innerHTML = form.calendarChooseMonth.options[theMonth].text + " " + theYear;

        // initialize vars for table creation
        var dayCounter = 1;
        var TBody = document.getElementById("tableBody");
        // clear any existing rows
        while (TBody.rows.length > 0) {
            TBody.deleteRow(0);
        }
        var newR, newC, dateNum;
        var done=false;
        while(!done)
        {
            // create new row at end
            newR = TBody.insertRow(TBody.rows.length);
            if(newR)
            {
                for(var i = 0; i < 7; i++)
                {
                    // create new cell at end of row
                    newC = newR.insertCell(newR.cells.length);
                    if(TBody.rows.length == 1 && i < firstDay)
                    {
                        // empty boxes before first day
                        newC.innerHTML = "&nbsp;";
                        continue;
                    }
                    if(dayCounter == howMany)
                    {
                        // no more rows after this one
                        done = true;
                    }
                    // plug in link/date (or empty for boxes after last day)
                    if(dayCounter <= howMany)
                    {
                        var selected_current = false, today_current = false;

                        if(calendar.target_value.getFullYear( ) == theYear &&
                            calendar.target_value.getMonth( ) == theMonth &&
                            calendar.target_value.getDate( ) == dayCounter)
                        {
                            selected_current = true;
//                          newC.id = "c_selected";
                        }

                        if(today.getFullYear( ) == theYear &&
                            today.getMonth( ) == theMonth &&
                            today.getDate( ) == dayCounter)
                        {
                            today_current = true;
//                          newC.id = "c_today";
                        }

                        newC.id = ((selected_current && today_current)?"c_today_selected":(selected_current?"c_selected":(today_current?"c_today":"")));

                        newC.innerHTML = "<a href='#'onclick='calendar.chooseDate(" +
                            dayCounter + "," + theMonth + "," + theYear +
                            "); return false;'>" + dayCounter + "</a>";
                        dayCounter++;
                    }
                    else
                    {
                        newC.innerHTML = "&nbsp;";
                    }
                }
            }
            else
            {
                done = true;
            }
        }
    },

    chooseDate: function(date, month, year)
    {
        calendar.target.value = ((date<10)?'0':'') + date + '.' + ((month+1)<10?'0':'')+(month+1) + '.' + year;
        calendar.c.style.visibility = 'hidden';
    },

    showCalendar: function(evt)
    {
        d = window.event ? window.event.srcElement : evt.currentTarget;
        if (!d.getAttribute("calendar")) return;

        calendar.target = document.getElementById(d.getAttribute("calendar"));

        if(document.getElementById("calendar").style.visibility != "visible")
        {
            oCanvas = document.getElementsByTagName((document.compatMode && document.compatMode == "CSS1Compat") ? "HTML" : "BODY")[0];

            x = window.event ? event.clientX + oCanvas.scrollLeft : evt.pageX;
            y = window.event ? event.clientY + oCanvas.scrollTop : evt.pageY;

            calendar.c.style.left = x;
            calendar.c.style.top = y;

            if(calendar.target.value.match(/^\d{1,2}\.\d{1,2}\.\d{4}$/g))
            {
                var values = calendar.target.value.split('.');

                for(i=0; i<values.length; i++)
                {
                    if(values[i].match(/^0\d$/g))
                    {
                        values[i] = values[i].replace(/0/g, '');
                    }
                }

                calendar.target_value = new Date(parseInt(values[2]), parseInt(values[1])-1, parseInt(values[0]));
            }
            else
            {
                calendar.target_value = new Date();
            }

            if(!calendar.c.firstChild)
            {
                calendar.c.appendChild(document.createTextNode(""));
                calendar.c.innerHTML = calendar_table;

                calendar.fillYears(calendar_start_year);
            }

            calendar.setCurrDate();
            calendar.populateTable(document.calendarDateChooser);

            calendar.c.style.visibility = 'visible';
        }
        else
        {
            calendar.c.style.visibility = 'hidden';
        }
    }
}

daysinmonths = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
monthnames = new Array('Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь');

function calendar (which) {
    cal = open('', 'calendar', 'height=190,width=180,scrollbars=no,resizable=yes,top=300,left=300');
    objname = which;
    curdate = new Date();
    curday = curdate.getDate();
    curmonth = curdate.getMonth() + 1;
    curyear = curdate.getYear();
    if (curyear <= 110) curyear += 1900;
    initialday = curday;
    initialmonth = curmonth;
    initialyear = curyear;
    cal_make();
    return;
}

function cal_back(months) {
    curmonth -= months;
    while (curmonth < 1) {
        --curyear;
        curmonth += 12;
    }
    cal_make();
}

function cal_forw(months) {
    curmonth -= -months;
    while (curmonth > 12) {
        ++curyear;
        curmonth -= 12;
    }
    cal_make();
}

function cal_move(init_d) {
    m = cal.document.calend_ch.mounth.selectedIndex;
    d = cal.document.calend_ch.mounth.options[m].value;
    initialmonth = d;
    if (d > init_d) cal_forw(d - init_d);
    else cal_back(init_d - d);
}

function cal_y_move(init_d) {
    m = cal.document.calend_ch.year.selectedIndex;
    d = cal.document.calend_ch.year.options[m].value;
    initialyear = d;
    if (d > init_d) cal_forw((d - init_d)*12);
    else cal_back((init_d - d)*12);
}

function cal_choose(day) {
    var daystr, monthstr;
    if (day < 10) daystr = '0'+day;
    else daystr = day;
    if (curmonth < 10) monthstr = '0'+curmonth;
    else monthstr = curmonth;
//  objname.value = daystr+"-"+monthstr+"-"+curyear;
    objname.value = curyear+"-"+monthstr+"-"+daystr;
    cal.close();
}

function cal_make() {
    var target, startdow, dow, d;
    cal.document.open();
    cal.document.writeln('<html><head>'
        +'<style type="text/css"><!--'
        +'  th {font: bold 10pt sans-serif; background: #FFDDDD; color: #004080}'
        +'  td {text-align: right; background: #F5F5F5}'
        +'  a:hover {text-decoration: underline}'
        +'  a {font: 10pt sans-serif; text-decoration: none; color: #004080}'
        +'  #red {font-weight: bold; color: #ff0000}'
//      +'  #Btn {font-family: sans-serif; font-size: 10pt}'
        +' // --></style>'
        +'<title>Календарь</title></head><body bgcolor="#D6DFEB"><form name="calend_ch" method="post">');
    sel_opt = '';
    for (d=1; d<13; d++) {
        if (d == initialmonth) sel_opt += '<option selected value="'+d+'">'+monthnames[d-1];
        else sel_opt += '<option value="'+d+'">'+monthnames[d-1];
    }
    cal.document.writeln('<select name="mounth" onChange="window.opener.cal_move('
        +initialmonth+')">'+sel_opt+'</select>');
    sel_opt = '';
    for (d=1995; d<2010; d++) {
        if (d == initialyear) sel_opt += '<option selected value="'+d+'">'+d;
        else sel_opt += '<option value="'+d+'">'+d;
    }
    cal.document.writeln('<select name="year" onChange="window.opener.cal_y_move('
        +initialyear+')">'+sel_opt+'</select>');
    cal.document.writeln('<table border="1" cellspacing="0" cellpadding="2" bordercolorlight="#ffffff">'
        +'<tr><th>Пн</th><th>Вт</th><th>Ср</th><th>Чт</th><th>Пт</th><th id="red">Сб</th><th id="red">Вс</th></tr>');
    cal.document.writeln('<tr>');
    target = new Date(curyear, curmonth-1, 1);
    startdow = target.getDay();
    for (dow=1; dow<startdow; dow++) cal.document.writeln('<td>&nbsp;</td>');
        for (d=1; d<=daysinmonths[curmonth-1]; d++) {
            if ((d==initialday) && (curmonth==initialmonth) && (curyear==initialyear))
                cal.document.writeln('<td><a href="javascript:window.opener.cal_choose('+d+')" id="red">'+d+'</a></td>');
            else
                cal.document.writeln('<td><a href="javascript:window.opener.cal_choose('+d+')">'+d+'</a></td>');
            if (++dow > 7) {
                cal.document.writeln('</tr><tr>');
                dow = 1;
            }
        }
    if (dow != 1) {
        while (dow++ <= 7) cal.document.writeln('<td>&nbsp;</td>');
    }
    cal.document.writeln('</tr></table></form></body></html>');
    cal.document.close();
    cal.focus();
}

