﻿var fc_minYear = 2000;
var fc_maxYear = 2050;
var fc_values = new Array();

/* добавляем в объекты Date нужные функции */
Date.isLeapYear = function(year){return(((year%4===0)&&(year%100!==0))||(year%400===0));};
Date.getDaysInMonth = function(year,month) { return[31,(Date.isLeapYear(year)?29:28),31,30,31,30,31,31,30,31,30,31][month]; };

Date.prototype.getMonthName = function(value) {
	return ["Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"][this.getMonth()];
};

Date.prototype.getDaysInMonth = function() { return Date.getDaysInMonth(this.getFullYear(),this.getMonth()); };

Date.prototype.addMonths = function(value) {
    var n = new Date(this.getFullYear(), this.getMonth() + value, 1);
    n.setDate(Math.min(this.getDate(), n.getDaysInMonth()));
    return n;
};

Date.prototype.addYears = function(value){return this.addMonths(value*12);};

Date.prototype.equalsTo = function(value){
    return this.getDate() == value.getDate() && this.getMonth() == value.getMonth() && this.getFullYear() == value.getFullYear();
};

Date.prototype.toServerString = function(){return this.getDate() + "." + (this.getMonth()+1) + "." + this.getFullYear();};

function flowCalendar(clientId, strDate,strToday) {
    fc_values[clientId] = new Date(strDate);
    
    fillFlowCalendar(clientId, fc_values[clientId],strToday);
}

function fillFlowCalendar(clientId, strDate, strToday) {
    var date = new Date(strDate);
    var dateToday = new Date(strToday); ;
    var index = document.URL.indexOf("/news/");

    //  var date=new Date(datemas[2]+datemas[1]+datemas[0]);
    
    var container = document.getElementById(clientId + "Container");

    if (container) {
        var html = "";

        var prevMonthName = date.addMonths(-1).getMonthName();
        var nextMonthName = date.addMonths(1).getMonthName();

        html += "<div class=\"month\">";

        if (index > 0) {
            html += "<a class=\"prev\" href=\"javascript:fillFlowCalendar('" + clientId + "', '" + date.addMonths(-1).toDateString() + "' ,'" + dateToday.toDateString() + "')\" title=\"" + prevMonthName + "\">" + prevMonthName + "</a>";

            if (date.getFullYear() < dateToday.getFullYear() || date.getFullYear() == dateToday.getFullYear() && date.getMonth() < dateToday.getMonth())
                html += "<a class=\"next\" href=\"javascript:fillFlowCalendar('" + clientId + "', '" + date.addMonths(1).toDateString() + "','" + dateToday.toDateString() + "' )\" title=\"" + nextMonthName + "\">" + nextMonthName + "</a>";
        }
        else {
            if (date.getFullYear() > dateToday.getFullYear() || date.getFullYear() == dateToday.getFullYear() && date.getMonth() > dateToday.getMonth())
                html += "<a class=\"prev\" href=\"javascript:fillFlowCalendar('" + clientId + "', '" + date.addMonths(-1).toDateString() + "' ,'" + dateToday.toDateString() + "')\" title=\"" + prevMonthName + "\">" + prevMonthName + "</a>";

            html += "<a class=\"next\" href=\"javascript:fillFlowCalendar('" + clientId + "', '" + date.addMonths(1).toDateString() + "','" + dateToday.toDateString() + "' )\" title=\"" + nextMonthName + "\">" + nextMonthName + "</a>";
        }
        
        html += "<center>" + date.getMonthName() + " " + date.getFullYear() + "</center>";
        html += "</div>";

        html += "<div class=\"days\">";

        for (i = 0; i < 7; i++)
            html += "<span class=\"" + (i < 5 ? "black" : "red") + "\">" + ["Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс"][i] + "</span>";

        var firstDayOfMonth = new Date(date.getFullYear(), date.getMonth(), 1);
        var indent = (firstDayOfMonth.getDay() + 6) % 7;

        for (i = 0; i < indent; i++)
            html += "<span></span>";

        if (index > 0) {
            if (date.getFullYear() < dateToday.getFullYear()) {
                for (i = 0; i < date.getDaysInMonth(); i++) {
                    var d = new Date(date.getFullYear(), date.getMonth(), i + 1);
                    html += "<span " + (d.equalsTo(fc_values[clientId]) ? "class=now" : "");
                    html += "><a href=\"/news/?date=";
                    html += d.toServerString() + "\" " + ((d.getDay() + 6) % 7 > 4 ? "class=red" : "") + ">" + (i + 1) + "</a></span>";
                }
            }
        }
        else {
            if (date.getFullYear() > dateToday.getFullYear()) {
                for (i = 0; i < date.getDaysInMonth(); i++) {
                    var d = new Date(date.getFullYear(), date.getMonth(), i + 1);
                    html += "<span " + (d.equalsTo(fc_values[clientId]) ? "class=now" : "");
                    html += "><a href=\"/ticketsearch/?date=";
                    html += d.toServerString() + "\" " + ((d.getDay() + 6) % 7 > 4 ? "class=red" : "") + ">" + (i + 1) + "</a></span>";
                }
            }
        
        }

        if (date.getFullYear() == dateToday.getFullYear()) {
            for (i = 0; i < date.getDaysInMonth(); i++) {
                if (index>0 && date.getMonth() < dateToday.getMonth() || index<=0 && date.getMonth() > dateToday.getMonth()) {
                    var d = new Date(date.getFullYear(), date.getMonth(), i + 1);
                    html += "<span " + (d.equalsTo(fc_values[clientId]) ? "class=now" : "");

                    if (index > 0)
                        html += "><a href=\"/news/?date=";
                    else
                        html += "><a href=\"/ticketsearch/?date=";
                    
                    html += d.toServerString() + "\" " + ((d.getDay() + 6) % 7 > 4 ? "class=red" : "") + ">" + (i + 1) + "</a></span>";
                }
                else {
                    var d = new Date(date.getFullYear(), date.getMonth(), i + 1);
                    html += "<span " + (d.equalsTo(fc_values[clientId]) ? "class=now" : "");

                    if (checkIt(i, dateToday.getDate()-1)) {
                        if (index > 0)
                            html += "><a href=\"/news/?date=";
                        else
                            html += "><a href=\"/ticketsearch/?date=";
                        html += d.toServerString() + "\" " + ((d.getDay() + 6) % 7 > 4 ? "class=red" : "") + ">" + (i + 1) + "</a></span>";
                    }
                    else html += ((d.getDay() + 6) % 7 > 4 ? "class=red" : "") + ">" + (i + 1) + "</a></span>";
                }
            }
        }
        html += "</div>";

        container.innerHTML = html;
    }
}

function checkIt(a, b){
    if (document.URL.indexOf("/news/") > 0)
        return (a<=b);
    else
        return(a>=b);
}