// начало скрипта
var mainPath = "/netcat/modules/calendar/";
var php_script= mainPath + "count.php";
var blank_image = new Image();
    blank_image.src = mainPath + "images/blank.gif";
var waiting_image = new Image();
	waiting_image.src = mainPath + "images/" + StatusImage;
var arrow_left_image = new Image();
	arrow_left_image.src = mainPath + "images/" + PrevImage;
var arrow_right_image = new Image();
	arrow_right_image.src = mainPath + "images/" + NextImage;

// маска, по-умолчанию - пустая
var mask = "0";	for(var i=0; i<30; i++) {mask += ".0"}
var antiJumper = 1;
var old_year, old_month;
var xmlHttp = false;
var wait_timeout;
var months = Array('январь', 'февраль', 'март', 'апрель', 'май', 'июнь', 'июль', 'август', 'сентябрь', 'октябрь', 'ноябрь', 'декабрь' );
var curr_date = new Date();
var curr_year = Math.floor(curr_date.getFullYear());
var curr_month = Math.floor(curr_date.getMonth()+1);
var curr_day = Math.floor(curr_date.getDate());

window.onload = function(){
	// Текстовое поле #1
	if (document.getElementById("calendar")){
		var curr_date = new Date();
	    if (day==0 && month==0 && year==0) {
		    year = Math.floor(curr_date.getFullYear());
		    month = Math.floor(curr_date.getMonth()+1);
		    day = Math.floor(curr_date.getDate());
	    }
		callServer(day, month, year);
	}
	else return false;
}

// текущая дата
function currentDate() {
	curr_date = new Date();
	day = curr_date.getDate() + "";
	month = (curr_date.getMonth() + 1) + "";
	if(day.length==1) day = "0" + day;
	if(month.length==1) month = "0" + month;
	return day + "." + month + "." + curr_date.getFullYear();
}

// кол-во дней в месяце
function days_in_month(month, year) {
	if(month!=="") {
		var months = Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 30, 31);
		var d = months[month-1];
		if(month==2 && (year%4)===0) d++;
		return d;
	}
}

function new_date() {
	var date_day_Field=document.getElementById("select_day_field");
	var date_month_Field=document.getElementById("select_month_field");
	var date_year_Field=document.getElementById("select_year_field");
	year = Math.floor(date_year_Field.value);
	month = Math.floor(date_month_Field.value);
	day = Math.floor(date_day_Field.value);
	callServer(day, month, year);
}

function select_day() {
    return "<input type='hidden' id='select_day_field' value='" + day + "'>";  
}

function select_month(preview){
    var result = "<select id='select_month_field'" + (!preview ? " onchange='new_date();'" : "") + ">";
    for(var j=0; j<12; j++) {
		result += "<option value='" + (j+1) + "' " + (month==(j+1) ? " selected" : " ") + ">" + months[j] + "</option>";
	}
    result += "</select>";
return result;
}   
   
function select_year(preview) {
    var result = "<select id='select_year_field'" + (!preview ? "onchange='new_date();'" : "") + ">";
    var limit=curr_year + 10;
    for(var j=(curr_year-10); j<=limit; j++) {
		result += "<option value='" + j + "' " + (year==j ? " selected" : " ") + ">" + j + "</option>";
	}
    result += "</select>";
return result;
}

function generateCalendar2(day2, month2, year2) {
	year = year2;
	month = month2;
	day = day2;
	callServer(day, month, year);
}

function generateCalendar(day, month, year, preview) {

	if(!document.getElementById("calendar")) return false;
	
	// задаём дату если не превью или если превью с заданной датой
	if(!preview || (preview && (day || month || year))) {
		day = Math.floor(day);
		month = Math.floor(month);
		year = Math.floor(year);
	}
	else {
		var curr_date = new Date();
	    year = Math.floor(curr_date.getFullYear());
		month = Math.floor(curr_date.getMonth()+1);
		day = Math.floor(curr_date.getDate());
	}

	var d = new Date(year, month-1, day);
	var d1 = new Date(year, month-1, 1);
	var days = "";
	var class_td = "";
	var letter = "";
	var lines = 0;
	var result = "";
	
	// шапка дней
	days += dayTemplatePrefix + dayTemplateBegin;
	
	var DaysNameArray = DaysName.split(",");
	for(var i=1; i<=7; i++) {
		letter = DaysNameArray[i-1];
		// заменяем на названия дней из массива
		if((i%7)==6) days += daySETTemplateHeader.replace("%NAME_DAY", letter);
		else if(!(i%7)) days += daySUNTemplateHeader.replace("%NAME_DAY", letter);
		else days += dayTemplateHeader.replace("%NAME_DAY", letter);
	}
	days += dayTemplateEnd;
	
	days += dayTemplateBegin;
	// вставляем пустые дни в начало
	var wd = d1.getDay();
	if(wd===0) wd=7;
	for(var i=1; i<wd; i++) {
		if((i%7)==6) days += nodaySETTemplate;
		else if(!(i%7)) days += nodaySUNTemplate;
		else  days += nodayTemplate;
	} 
	if(wd!=1) lines = lines + 1;

	for(var i=1; i<=days_in_month(month, year); i++) {
		
		var dayLinkBegin = "<a onClick='location.href=\"" + path + year + "/" + (month<10 ? "0"+month : month) + "/"  + (i<10 ? "0"+i : i) + "\"' style='cursor:pointer'>";
		var dayLinkEnd = "</a>";
		
		// конец строки с днями
		if((wd+i-1)%7==1) {
			if(lines) days += dayTemplateEnd + dayTemplateBegin;
			lines = lines + 1;
		}
		// суббота
		if((wd+i-1)%7==6 && i!=day) days += daySETTemplate.replace("%DAY", (mask[i-1]==1 ? dayLinkBegin + i + dayLinkEnd : i) ); 
		// воскресенье
		else if((wd+i-1)%7==0 && i!=day) days += daySUNTemplate.replace("%DAY", (mask[i-1]==1 ? dayLinkBegin + i + dayLinkEnd : i) );
        // текущий день
		else if(i==day) days += dayCurTemplate.replace("%DAY", i);//(mask[i-1]==1 ? dayLinkBegin + i + dayLinkEnd : i)
		// просто день
		else days += dayTemplate.replace("%DAY", (mask[i-1]==1 ? dayLinkBegin + i + dayLinkEnd : i) );

	}
	
	// вставляем пустые дни в конец
	d1 = new Date(year, month-1, days_in_month(month, year));
	var wd = d1.getDay();
	if(wd===0) wd=7;
	// система антиджампера
	var daysend = (antiJumper ? 7*(lines<6 ? 7-lines : 1) : 7);
	for(var i=wd; i<daysend; i++) {
		if((i+1)%7==1 && daysend>7) days += dayTemplateEnd + dayTemplateBegin;
		if(((i+1)%7)==6) days += nodaySETTemplate;
		else if(!((i+1)%7)) days += nodaySUNTemplate;
		else  days += nodayTemplate;
	}
	// футер дней
	days += dayTemplateEnd + dayTemplateSuffix;

	CalendarHeader = CalendarHeader.replace("%SELECT_MONTH", "<span id='SelectMonth'>" + (preview ? select_day() + select_month(preview) : "") + "</span>");
	CalendarHeader = CalendarHeader.replace("%SELECT_YEAR", "<span id='SelectYear'>" + (preview ? select_year(preview) : "") + "</span>");
	
	CalendarHeader = CalendarHeader.replace("%IMG_STATUS", "<img src='" + blank_image.src + "' id='ImgWaiting' alt='waiting' title='waiting'>");
	
	CalendarHeader = CalendarHeader.replace("%IMG_PREV_MONTH", "<img src='" + arrow_left_image.src + "' id='ImgArrowLeft'>");
	CalendarHeader = CalendarHeader.replace("%MONTH_LINK", "<span id='MonthLink'>" + (preview ? months[month-1] : "") + "</span>");
	CalendarHeader = CalendarHeader.replace("%YEAR_LINK", "<span id='YearLink'>" + (preview ? year : "") + "</span>");
	CalendarHeader = CalendarHeader.replace("%IMG_NEXT_MONTH", "<img src='" + arrow_right_image.src + "' id='ImgArrowRight'>");
	
	if(!preview)
		document.getElementById("calendar").innerHTML = CalendarPrefix + CalendarHeader + days + CalendarSuffix;
	else
		// выводим пустышку (не из романа братьев Стругацких:)
		return CalendarPrefix + CalendarHeader + days + CalendarSuffix;

	if(document.getElementById("SelectMonth")) {
		document.getElementById("SelectMonth").innerHTML = select_day() + select_month(0);
		if(document.getElementById("SelectYear")) document.getElementById("SelectYear").innerHTML = select_year(0);
	} 
	else {
		if(document.getElementById("SelectYear")) document.getElementById("SelectYear").innerHTML = select_day() + select_year(0);
	}
		
	if(document.getElementById("MonthLink")) {
		document.getElementById("MonthLink").onclick = function() {location.href = path + year + "/" + (month<10 ? "0" + month : month) + "/";}
		document.getElementById("MonthLink").innerHTML = months[month-1];
	}
	if(document.getElementById("YearLink")) {
		document.getElementById("YearLink").onclick = function() {location.href = path + year;}
		document.getElementById("YearLink").innerHTML = year;
	}
		
	if(document.getElementById("ImgArrowLeft"))
	document.getElementById("ImgArrowLeft").onclick = function() {generateCalendar2(day , (month==1 ? 12 : month-1), (month==1 ? year-1 : year));}
	if(document.getElementById("ImgArrowRight"))
	document.getElementById("ImgArrowRight").onclick = function() {generateCalendar2(day, (month==12 ? 1 : month+1), (month==12 ? year+1 : year));}

}

function create_object() {
	xmlHttp = false;
	//
	try {
	  xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
	} catch (e) {
	  try {
	    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
	  } catch (e2) {
	    xmlHttp = false;
	  }
	}
	if (!xmlHttp && typeof XMLHttpRequest != "undefined") {
		xmlHttp = new XMLHttpRequest();
	} 
}

function callServer(day, month, year) {
	
	if(!document.getElementById("calendar")) return false;

	// вставляем картинку статуса
	if (document.getElementById("ImgWaiting")) { 
		document.getElementById("ImgWaiting").src = waiting_image.src;
		wait_timeout = setTimeout("(document.getElementById('ImgWaiting') ? document.getElementById('ImgWaiting').src = waiting_image.src : '');", 400);
	}
		
	if(old_year==year && old_month==month) return;
	old_year = year;
	old_month = month;
	if(xmlHttp.readyState!=0 && xmlHttp.readyState!=4) create_object();
	
	// подключаем count.php
	var url = php_script + "?month=" + month + "&year=" + year + "&class_id=" + class_id + "&sub_class_id=" + sub_class_id + "&calendar=1";
	xmlHttp.open("GET", url, true);
	xmlHttp.onreadystatechange = updatePage;
	xmlHttp.setRequestHeader("Content-Type", "text/html; Charset=windows-1251");
	xmlHttp.setRequestHeader("Accept-Language", "ru, en");
	xmlHttp.setRequestHeader("Accept-Charset", "windows-1251;q=1");
	xmlHttp.send(null);
}

function updatePage() {

	if (xmlHttp.readyState == 4 || xmlHttp.readyState == "complete") {
		clearTimeout(wait_timeout);
		if (xmlHttp.status == 200)	{
			var response = xmlHttp.responseText;
			mask = response.split(".");
			generateCalendar(day, month, year, 0);
		}
		else {
			alert(xmlHttp.status + " - " + xmlHttp.statusText);
		}
	}
}