// Calendar array indexes:
var c_date    = 0;	// displayed date
var cal_date  = 1;	// current selected date (for hilite)
var min_date  = 2;	// min date
var max_date  = 3;	// max date
var sel_func  = 4;	// select function (only name)
var obj_name  = 5;  // name of calendar object
var calendar = new Array();

// Функция-конструктор
function show_calendar(ar) {
	if (!ar[cal_date]) ar[cal_date] = new Date();
	if (!ar[min_date]) ar[min_date] = new Date( 1900, 1,   1 );
	if (!ar[max_date]) {
		ar[max_date] = new Date( 2100, 12, 31 );
	}
	if (!ar[sel_func]) ar[sel_func] = 'calendar_sel';
	if (!ar[c_date])   ar[c_date]   = new Date( ar[cal_date].getFullYear(), ar[cal_date].getMonth(), ar[cal_date].getDate() );
	calendar[ ar[obj_name] ] = ar;
	draw_calendar( ar[obj_name] );
}

// Показываем календарь
function draw_calendar(div_name) {
	obj	= document.getElementById(div_name);
	obj.innerHTML = generate_calendar_html(div_name);
}

// Формируем календарь
function generate_calendar_html(div_name){
	var ar = calendar[div_name];
	var months	= new Array("Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь");
	var weeks	= new Array("Пн","Вт","Ср","Чт","Пт","Сб","Вс");
	var cYear	= ar[c_date].getFullYear();
	var cMonth	= ar[c_date].getMonth();
	var txt = '';
	txt += '<table border="0" cellpadding="0" cellspacing="0" width="200" class="calendar">';
	txt += '<tr>';
	if( cYear*12+cMonth-12 < ar[min_date].getFullYear()*12+ar[min_date].getMonth() ){
		txt += '<td width="40" align="right" id="textHidden">&nbsp;&nbsp;</td>';
	}else{
		txt += '<td width="40" align="right"><a href="javascript:redraw_calendar(-12,\''+div_name+'\');" id="linkYear">&laquo;</a></td>';
	}
	txt += '<td align="center" id="headYear">';
	txt += cYear;
	txt += '</td>';
	if( cYear*12+cMonth+12 < ar[max_date].getFullYear()*12+ar[max_date].getMonth() ){
		txt += '<td width="40" align="left"><a href="javascript:redraw_calendar(12,\''+div_name+'\');" id="linkYear">&raquo;</a></td>';
	}else{
		txt += '<td width="40" align="left" id="textHidden">&nbsp;&nbsp;</td>';
	}
	txt += '</tr>';
	txt += '<tr>';
	if( cYear*12+cMonth-1 < ar[min_date].getFullYear()*12+ar[min_date].getMonth() ){
		txt += '<td width="40" align="right" id="textHidden">&nbsp;&nbsp;</td>';
	} else {
		txt += '<td width="40" align="right" id="headMonth"><a href="javascript:redraw_calendar(-1,\''+div_name+'\');">&laquo;</a></td>';
	}
	txt += '<td align="center" id="headMonth">'+months[cMonth]+'</td>';
	if( cYear*12+cMonth+1 < ar[max_date].getFullYear()*12+ar[max_date].getMonth() ){
		txt += '<td width="40" align="left" id="headMonth"><a href="javascript:redraw_calendar(1,\''+div_name+'\');">&raquo;</a></td>';
	}else{
		txt += '<td width="40" align="left" id="textHidden">&nbsp;&nbsp;</td>';
	}
	txt += '</tr>';
	txt += '</table>';
	txt += '<table border="0" cellpadding="1" cellspacing="1" width="200" class="calendar">';
	txt += '<tr align="center">';
	for (var i = 0; i < weeks.length; i++) {
		txt += '<td id="headDay">';
		txt += weeks[i];
		txt += '</td>';
	}
	txt += '</tr>';
	var startDay = (new Date(cYear, cMonth, 0)).getDay();
	var dayOfMonth = 0;
	var layerNum = 0;
	var daysCount = getDaysInMonth(cMonth, cYear);
	var curr_date = new Date();
	for (var j = 0; j < 6; j++) {
		if (j == 0 || j == 2 || j == 4) {
			txt += '<tr align="center">';
		} else {
			txt += '<tr align="center">';
		}
		for (var k = 0; k < 7; k++) {
			if ((j == 0 && k < startDay) || (dayOfMonth == daysCount)) {
				txt += '<td id="textDay">&nbsp;';
			} else {
				if ( dayOfMonth==ar[cal_date].getDate()-1 && cMonth==ar[cal_date].getMonth() && cYear==ar[cal_date].getFullYear() ) {
					txt += '<td id="textDaySel">';
				} else if (dayOfMonth == curr_date.getDate()-1 && cMonth == curr_date.getMonth() && cYear == curr_date.getFullYear()) {
					txt += '<td id="textDayOn">';
				} else {
					txt += '<td id="textDay">';
				}
				if (dayOfMonth < (ar[min_date].getDate() - 1) && (cMonth+1) == ar[min_date].getMonth() && cYear == ar[min_date].getFullYear()) {
					txt += (++dayOfMonth);
				} else {
					if (dayOfMonth > (ar[max_date].getDate() - 1) && (cMonth+1) == ar[max_date].getMonth() && cYear == ar[max_date].getFullYear()) {
						txt += (++dayOfMonth);
					} else {
						if (dayOfMonth == (curr_date.getDate() - 1) && cMonth == curr_date.getMonth() && cYear == curr_date.getFullYear()) {
							txt += '<a id="linkDayOn"';
						} else {
							txt += '<a id="linkDay"';
						}
						txt += ' href="javascript:'+ar[sel_func]+'(\''+div_name+'\',\''+cYear + '\',\''+(cMonth + 1)+'\',\''+(dayOfMonth+1)+'\')">';
						txt += (++dayOfMonth);
						txt += '</a>';
					}
				}
				layerNum++;
			}
			txt += '</td>';
		}
		txt += '</tr>';
	}
	txt += '</table>';
	return txt;
}

function redraw_calendar(direction,div_name) {
	var ar = calendar[div_name];
	var dt = ar[c_date];
	dt.setMonth(dt.getMonth()+direction);
	ar[c_date] = dt;
	calendar[div_name] = ar;
	draw_calendar(div_name);
}

function getDaysInMonth(month, year) {
	var daysInMonthes = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	if (month == 1) {
		return year % 4 ? 28 : 29;
	}
	return daysInMonthes [month];
}

function calendar_sel (div_name,y,m,d) {
//	var ar = calendar[div_name];
	location.href="/press-service/news/index.php?year=" + y + "&month=" + m + "&day=" + d;
//	ar[cal_date]   = new Date( dt.substr(6,4), dt.substr(3,2)-1, dt.substr(0,2) );
//	show_calendar( ar );
}

function popup_calendar_sel(div_name,y,m,d) {
	var res={};
	res.y = y;
	res.m = m;
	res.d = d;
	window.returnValue = res;
	window.close();
}

function calendar_input_chg( obj ) {
	var div_name = obj.name+'_cal';
	var ar = calendar[div_name];
	var dt = obj.value;
	var dtobj  = new Date( dt.substr(6,4), dt.substr(3,2)-1, dt.substr(0,2) );
	var dtobj2 = new Date( dt.substr(6,4), dt.substr(3,2)-1, dt.substr(0,2) );
	if ( dtobj.getFullYear()>2999 || dtobj.getFullYear()<1900 ) return;
	if ( dt.substr(6,4)!=dtobj.getFullYear() || dt.substr(3,2)!=dtobj.getMonth()+1 || dt.substr(0,2)!=dtobj.getDate() ) return;
	ar[cal_date] = dtobj;
	ar[c_date] = dtobj2;
	show_calendar( ar );
}
function calendar_popup( input_name ) {
	var obj	= document.getElementById(input_name);
	var dt = obj.value;
	var dtobj = new Date( dt.substr(6,4), dt.substr(3,2)-1, dt.substr(0,2) );
	if ( dtobj.getFullYear()>2999 || dtobj.getFullYear()<1900 || dt.substr(6,4)!=dtobj.getFullYear() || dt.substr(3,2)!=dtobj.getMonth()+1 || dt.substr(0,2)!=dtobj.getDate() ) {
		var pars='';
	} else {
		var pars='?y='+dtobj.getFullYear()+'&m='+dtobj.getMonth()+'&d='+dtobj.getDate();
	}
	res = open_modal_window( 240, 240, '/calendar.php'+pars, input_name, 'no', 'no', 'no', 'no' );
	if (res!=null) {
		var ar = calendar[input_name+'_cal'];
		dt = (res.d<10?'0':'')+res.d+'.'+(res.m<10?'0':'')+res.m+'.'+res.y+obj.value.substr(10);
		obj.value = dt;
		ar[cal_date]   = new Date( dt.substr(6,4), dt.substr(3,2)-1, dt.substr(0,2) );
		show_calendar( ar );
	}
}