
var arrowl_img="<img src=\"/img/calendar-arr-l.gif\" width=\"24\" height=\"24\" alt=\"&lt;\" title=\"Предыдущий месяц\">";
var arrowr_img="<img src=\"/img/calendar-arr-r.gif\" width=\"24\" height=\"24\" alt=\"&gt;\" title=\"Следующий месяц\">";
//var arrowl_no_img="<img src=\"/img/calendar-arr-l-inactive.gif\" width=\"24\" height=\"24\" alt=\"&lt;\" title=\"Предыдущий месяц\">";
//var arrowr_no_img="<img src=\"/img/calendar-arr-r-inactive.gif\" width=\"24\" height=\"24\" alt=\"&gt;\" title=\"Следующий месяц\">";
var arrowl_no_img="";
var arrowr_no_img="";

function Calendar(id, begDate, endDate, curDate, selDate, url, sorting)
{
    this.id = id;
    this.begDate = begDate;
    this.endDate = endDate;
    this.curDate = curDate;
    this.selDate = selDate;
    this.url     = url;
    this.sorting = sorting;
}

function drawCalendar(cal)
{
    var i;

    document.writeln("<div class=\"bc1\"><div class=\"bc2\">");

    document.writeln("<div id=\"cal_header_" + cal.id + "\" class=\"cal_header\">");
    document.writeln("<div id=\"cal_prevm_" + cal.id + "\" class=\"cal_prevm\">" + arrowl_img + "</div>");
    document.writeln("<div id=\"cal_nextm_" + cal.id + "\" class=\"cal_nextm\">" + arrowr_img + "</div>");
    document.writeln("<div id=\"cal_title_" + cal.id + "\" class=\"cal_title\"></div>");
    document.writeln("</div>");
    document.writeln("<div id=\"cal_week_" + cal.id + "\" class=\"cal_week\"></div>");
    document.writeln("<div id=\"cal_days_" + cal.id + "\" class=\"cal_days\">");
    for (i = 1; i <= 42; i++)
        document.writeln("<div></div>");
    document.writeln("</div>");
    document.writeln("</div></div>");
    document.getElementById("cal_prevm_" + cal.id).onclick = function prev_click() { fillCalendar(cal, datePlusMonths(cal.selDate, -1)); }
    document.getElementById("cal_nextm_" + cal.id).onclick = function next_click() { fillCalendar(cal, datePlusMonths(cal.selDate, 1)); }
    fillCalendar(cal, cal.selDate);
}

function fillCalendar(cal, mdate)
{
    cal.selDate.year = mdate.year;
    cal.selDate.month = mdate.month;

    if (cal.begDate.year < mdate.year || 
        (cal.begDate.year == mdate.year && cal.begDate.month < mdate.month))
    {
        document.getElementById("cal_prevm_" + cal.id).className = "cal_prevm";
        document.getElementById("cal_prevm_" + cal.id).innerHTML = arrowl_img;
        document.getElementById("cal_prevm_" + cal.id).onclick = function prev_click() { fillCalendar(cal, datePlusMonths(cal.selDate, -1)); }
    }
    else
    {
        document.getElementById("cal_prevm_" + cal.id).className = "cal_prevm inactive";
        document.getElementById("cal_prevm_" + cal.id).innerHTML = arrowl_no_img;
        document.getElementById("cal_prevm_" + cal.id).onclick = "";
    }

    if (cal.endDate.year > mdate.year ||
        (cal.endDate.year == mdate.year && cal.endDate.month > mdate.month))
    {
        document.getElementById("cal_nextm_" + cal.id).className = "cal_nextm";
        document.getElementById("cal_nextm_" + cal.id).innerHTML = arrowr_img;
        document.getElementById("cal_nextm_" + cal.id).onclick = function next_click() { fillCalendar(cal, datePlusMonths(cal.selDate, 1)); }
    }
    else
    {
        document.getElementById("cal_nextm_" + cal.id).className = "cal_nextm inactive";
        document.getElementById("cal_nextm_" + cal.id).innerHTML = arrowr_no_img;
        document.getElementById("cal_nextm_" + cal.id).onclick = "";
    }

    document.getElementById("cal_title_" + cal.id).innerHTML = monthNames[mdate.month] + " " + mdate.year;

    var firstDay = new MDate(mdate.year, mdate.month, 1);
    var firstWeekDay = getWeekDay(firstDay);
    if (maxDayMonth(mdate.year, mdate.month) == 28 && firstWeekDay == 1)
        firstWeekDay = 8;

    var i;
    for (i = 1; i <= 42; i++)
    {
        // числа предыдущего месяца
        if (i < firstWeekDay)
        {
            document.getElementById("cal_days_" + cal.id).getElementsByTagName("div")[i-1].innerHTML = maxDayMonth(datePlusMonths(mdate, -1).year, datePlusMonths(mdate, -1).month) - firstWeekDay + i + 1;
            document.getElementById("cal_days_" + cal.id).getElementsByTagName("div")[i-1].className = "other_month";
        }
        // числа нужного месяца
        else if (i >= firstWeekDay && i <= maxDayMonth(mdate.year, mdate.month) + firstWeekDay - 1)
        {
            var thisDate = new MDate(mdate.year, mdate.month, i - firstWeekDay + 1);
            if (compareDates(cal.begDate, thisDate) <= 0 && compareDates(thisDate, cal.endDate) <= 0)
            {
                document.getElementById("cal_days_" + cal.id).getElementsByTagName("div")[i-1].innerHTML = 
                    "<a href=\"" + cal.url + pad(thisDate.year, 4) + "-" + pad(thisDate.month, 2) + "-" + pad(thisDate.day, 2) + "/day/" + cal.sorting + "\" onclick=\"cancel_bubble(event);\">" + thisDate.day + "</a>";
            }
            else
            {
                document.getElementById("cal_days_" + cal.id).getElementsByTagName("div")[i-1].innerHTML = thisDate.day;
            }

            if (compareDates(thisDate, cal.curDate) == 0)
            {
                document.getElementById("cal_days_" + cal.id).getElementsByTagName("div")[i-1].className = "current";
            }
            else
            {
                document.getElementById("cal_days_" + cal.id).getElementsByTagName("div")[i-1].className = "";
            }
        }
        // числа следующего месяца
        else 
        {
            document.getElementById("cal_days_" + cal.id).getElementsByTagName("div")[i-1].innerHTML = i - maxDayMonth(mdate.year, mdate.month) - firstWeekDay + 1;
            document.getElementById("cal_days_" + cal.id).getElementsByTagName("div")[i-1].className = "other_month";
        }
    }
}

function drawWeeks(cal)
{
    var minday = new MDate(cal.begDate.year, cal.begDate.month, cal.begDate.day);
    var minMonday = datePlusDays(minday, 1 - getWeekDay(minday));
    var maxday = new MDate(cal.endDate.year, cal.endDate.month, cal.endDate.day);
    var maxMonday = datePlusDays(maxday, 1 - getWeekDay(maxday));

    document.writeln("<div class=\"b1\"><div class=\"b2\"><div class=\"b3\"><div class=\"b4\"><div class=\"b3\">");
    
    var sanday;
    for (var i=0;;i++)
    {
       sanday = datePlusDays(minMonday, 6);

       var week = "" + minMonday.day;
       if (sanday.month != minMonday.month)
           week += " " + monthNames1[minMonday.month] + " &mdash; ";
       else
           week += " &mdash; ";
       week += sanday.day + " " + monthNames1[sanday.month];

       document.writeln("<div class=\"line" + (i==0?"1":"") + "\"><a href=\"" + cal.url + pad(minMonday.year, 4) + "-" + pad(minMonday.month, 2) + "-" + pad(minMonday.day, 2) + "/week/" + cal.sorting + "\" onclick=\"cancel_bubble(event);\">" + week + "</a></div>");

       if (compareDates(minMonday, maxMonday) == 0)
           break;
       minMonday = datePlusDays(sanday, 1);
    }

    document.writeln("</div></div></div></div></div>");
}

function drawMonths(cal)
{
    var year = cal.begDate.year;
    var month = cal.begDate.month;

    document.writeln("<div class=\"b1\"><div class=\"b2\"><div class=\"b3\"><div class=\"b4\"><div class=\"b3\">");
    
    for (var i=0;;i++)
    {
        document.writeln("<div class=\"line" + (i==0?"1":"") + "\"><a href=\"" + cal.url + pad(year, 4) + "-" + pad(month, 2) + "-" + pad(1, 2) + "/month/" + cal.sorting + "\" onclick=\"cancel_bubble(event);\">" + monthNames[month] + /*" " + year + */"</a>" + "</div>");

        if (month == cal.endDate.month && year == cal.endDate.year)
            break;
        month++;
        if (month > 12)
        {
            month = 1;
            year++;
        }
    }

    document.writeln("</div></div></div></div></div>");
}

function pad(number, length)
{
    var str = '' + number;
    while (str.length < length)
        str = '0' + str;
    return str;
}
