/***********************************
	Глобальные переменные:
	chooseYear - name элемента select для выбора года;
	choseMonth - name элемента select для выбора месяца;
	dateChooser - name формы, в которую помещаются элементы chooseYear и choseMonth;
	tableBody - id элемента tbody, в который помещаются числа;
	tableHeader - id элемента th, в который помещается заголовок календаря (выбранные месяц и год);
	calendarTable - id элемента table, в который помещается весь календарь;
	calendar - id элемента div, в который помещается весь календарь;
	field - name поля, в которое записывается выбранное значение даты
	ru - признак русского языка
	year_from - год, с которого начинается отображение
	additional_data_chooser - выпадающий список для альтернативного выбора даты (за последние 24 часа, за последнюю неделю и т.д.)
	from - name поля "дата с"
	to - name поля "дата по"
	main_selDate - выбранная дата
	url - адрес, на который ссылается каждая дата
	curr - =1 - отображается месяц и год с выбранной датой; =0 - отображается месяц и год с текущей датой
***********************************/
var chooseYear, chooseMonth, dateChooser, tableBody, tableHeader, calendarTable, calendar, ru, year_from, main_selDate, url;

// устанавливает значения, которые не меняются в течение работы данной страницы
function setValues(calendar1, calendarTable1, tableHeader1, tableBody1, dateChooser1, chooseMonth1, chooseYear1, ru1, year_from1, selDate, url1, curr){
	calendar = calendar1;
	calendarTable = calendarTable1;
	tableHeader = tableHeader1;
	tableBody = tableBody1;
	dateChooser = dateChooser1;
	chooseMonth = chooseMonth1;
	chooseYear = chooseYear1;
	if (ru1 && ru1 == "ru"){
		ru = 1;
	}else{
		ru = 0;
	}
	if (year_from1){
		year_from = year_from1;
	}else{
		var today = new Date();
		year_from = today.getFullYear();
	}
	main_selDate = new Date();
	main_selDate.setTime(selDate*1000);
	fillYears(curr);
	url = url1;
}

/*********************************
	Вспомогательные функции
*********************************/

// день недели первого месяца
function getFirstDay(theYear, theMonth){
	var firstDate = new Date(theYear, theMonth,1);
	return firstDate.getDay();
}

// число дней в месяце
function getMonthLen(theYear, theMonth){
	var nextMonth = new Date(theYear, theMonth+1, 1);
	nextMonth.setHours(nextMonth.getHours()-3);
	return nextMonth.getDate();
}

/*********************************
	Рисование содержимого календаря
*********************************/
// Очистка и повторное заполнение таблицы на основе выбора в форме
function populateTable(){
	var today = new Date();

	if (!main_selDate){
		selDate = today;
	}else{
		selDate = main_selDate;
	}

	// определяем дату, введенную в форму
	var theMonth = chooseMonth.selectedIndex;
	var theYear = parseInt(chooseYear.options[chooseYear.selectedIndex].text);

	// инициализация зависящих от даты переменных
	var firstDay = getFirstDay(theYear, theMonth);
	if (firstDay == 0 && ru){
		firstDay = 7;
	}
	var howMany = getMonthLen(theYear, theMonth);

	// заполнение заголовка таблицы, содержащего название месяца и год
	document.getElementById(tableHeader).innerHTML = chooseMonth.options[theMonth].text + " " + theYear;

	// инициализация переменных для создания таблицы
	var dayCounter = 1;
	var TBody = document.getElementById(tableBody);

	// очистка существующих строк таблицы
	while (TBody.rows.length > 0){
		TBody.deleteRow(0);
	}

	var newR, newC, dateNum;
	var done = false;
	while(!done){
		// создаем новую строку в конце таблицы
		newR = TBody.insertRow(TBody.rows.length);
		if (newR){
			for(var i=0; i<7; i++){
				// создаем новую ячейку с конце строки
				newC = newR.insertCell(newR.cells.length);
				// если русский язык, то неделя начинается с понедельника и нумерациядней уменьшается на 1
				if (TBody.rows.length == 1 && i<firstDay-ru){
					// до первого дня клетки должны быть пустыми
					newC.innerHTML = "&nbsp;";
					continue;
				}
				if (dayCounter == howMany){
					// после этой строки новых быть не должно
					done = true;
				}
				// помещаем в ячейку число и ссылку (для ячеек после последнего дня - ничего)
				if (dayCounter <= howMany){
					if (today.getFullYear() == theYear && today.getMonth() == theMonth && today.getDate() == dayCounter){
						newC.id = "today";
					}
					if (today.getFullYear() > theYear || (today.getFullYear() == theYear && today.getMonth() > theMonth) || (today.getFullYear() == theYear && today.getMonth() == theMonth && today.getDate() >= dayCounter)){
						var currDate = new Date(theYear, theMonth, dayCounter);
						if (i == 2 || i == 5) {
							newC.innerHTML = "<a href='"+url+"&amp;date="+currDate.getTime()/1000+"' style='color:#0066B3'>" + dayCounter + "</a>";
						}
						else {							newC.innerHTML = "<a href='"+url+"&amp;date="+currDate.getTime()/1000+"'>" + dayCounter + "</a>";
						}
					}else{
						newC.innerHTML = dayCounter;
					}
					if (theYear == selDate.getFullYear() && theMonth == selDate.getMonth() && dayCounter == selDate.getDate()){
						if (newC.id){
							newC.id = "stoday";
						}else{
							newC.id = "selected";
						}
					}
					dayCounter++;
				}else{
					newC.innerHTML = "&nbsp;";
				}
		}
		}else{
			done = true;
		}
	}
}

/**************************************
	Инициализация
**************************************/
// Формирование динамического списка для выбора года
function fillYears(curr){
	var today = new Date();
	if (!main_selDate || !curr){
		selDate = today;
	}else{
		selDate = main_selDate;
	}
	var thisYear = today.getFullYear();
	while (chooseYear.options.length > 0){
		chooseYear.options.remove(0);
	}
	for (i = year_from; i<thisYear + 1; i++){
		chooseYear.options[chooseYear.options.length] = new Option(i,i);
	}
	setCurrMonth(selDate);
	setCurrYear(selDate);
}

// делаем текущий месяц выранным
function setCurrMonth(today){
	chooseMonth.selectedIndex = today.getMonth();
}

// делаем текущий год выранным
function setCurrYear(today){
	var yearChooser = chooseYear;
	for (i = 0; i < yearChooser.options.length &&  yearChooser.options[i].text != today.getFullYear(); i++ ){
	}
	yearChooser.selectedIndex = i;
}


/**************************************
	Обработка выбора
**************************************/
// возвращает дату в поле field
function SelectedDate(str){
	var ar = str.split(".");
	var d = new Date(ar[2],ar[1]-1,ar[0]);
	return d;
}

