// 1: d.m.Y H:i:s (rus)
// 2: m/d/Y H:i:s (usa)
// 3: d-m-Y H:i:s (eur)
var NUM_CENTYEAR = 30;
var BUL_TIMECOMPONENT = false;
var BUL_YEARSCROLL = true;
var calendars = [];
var RE_NUM = /^\-?\d+$/;
for(var i=0;i<CONF_ADMIN_CALC_TYPES.length;i++) {
	eval('if(this.calendar'+CONF_ADMIN_CALC_TYPES[i]+'==null) {var calendar'+CONF_ADMIN_CALC_TYPES[i]+';this.calendar'+CONF_ADMIN_CALC_TYPES[i]+'=calendar;} else {this.calendar'+CONF_ADMIN_CALC_TYPES[i]+'=calendar'+CONF_ADMIN_CALC_TYPES[i]+';}');
	eval('if(this.cal_popup'+CONF_ADMIN_CALC_TYPES[i]+'==null) {var cal_popup'+CONF_ADMIN_CALC_TYPES[i]+';this.cal_popup'+CONF_ADMIN_CALC_TYPES[i]+'=cal_popup;} else {this.cal_popup'+CONF_ADMIN_CALC_TYPES[i]+'=cal_popup'+CONF_ADMIN_CALC_TYPES[i]+';}');
	eval('if(this.cal_gen_date'+CONF_ADMIN_CALC_TYPES[i]+'==null) {var cal_gen_date'+CONF_ADMIN_CALC_TYPES[i]+';this.cal_gen_date'+CONF_ADMIN_CALC_TYPES[i]+'=cal_gen_date;} else {this.cal_gen_date'+CONF_ADMIN_CALC_TYPES[i]+'=cal_gen_date'+CONF_ADMIN_CALC_TYPES[i]+';}');
	eval('if(this.cal_gen_time'+CONF_ADMIN_CALC_TYPES[i]+'==null) {var cal_gen_time'+CONF_ADMIN_CALC_TYPES[i]+';this.cal_gen_time'+CONF_ADMIN_CALC_TYPES[i]+'=cal_gen_time;} else {this.cal_gen_time'+CONF_ADMIN_CALC_TYPES[i]+'=cal_gen_time'+CONF_ADMIN_CALC_TYPES[i]+';}');
	eval('if(this.cal_gen_tsmp'+CONF_ADMIN_CALC_TYPES[i]+'==null) {var cal_gen_tsmp'+CONF_ADMIN_CALC_TYPES[i]+';this.cal_gen_tsmp'+CONF_ADMIN_CALC_TYPES[i]+'=cal_gen_tsmp;} else {this.cal_gen_tsmp'+CONF_ADMIN_CALC_TYPES[i]+'=cal_gen_tsmp'+CONF_ADMIN_CALC_TYPES[i]+';}');
	eval('if(this.cal_prs_date'+CONF_ADMIN_CALC_TYPES[i]+'==null) {var cal_prs_date'+CONF_ADMIN_CALC_TYPES[i]+';this.cal_prs_date'+CONF_ADMIN_CALC_TYPES[i]+'=cal_prs_date;} else {this.cal_prs_date'+CONF_ADMIN_CALC_TYPES[i]+'=cal_prs_date'+CONF_ADMIN_CALC_TYPES[i]+';}');
	eval('if(this.cal_prs_time'+CONF_ADMIN_CALC_TYPES[i]+'==null) {var cal_prs_time'+CONF_ADMIN_CALC_TYPES[i]+';this.cal_prs_time'+CONF_ADMIN_CALC_TYPES[i]+'=cal_prs_time;} else {this.cal_prs_time'+CONF_ADMIN_CALC_TYPES[i]+'=cal_prs_time'+CONF_ADMIN_CALC_TYPES[i]+';}');
	eval('if(this.cal_prs_tsmp'+CONF_ADMIN_CALC_TYPES[i]+'==null) {var cal_prs_tsmp'+CONF_ADMIN_CALC_TYPES[i]+';this.cal_prs_tsmp'+CONF_ADMIN_CALC_TYPES[i]+'=cal_prs_tsmp;} else {this.cal_prs_tsmp'+CONF_ADMIN_CALC_TYPES[i]+'=cal_prs_tsmp'+CONF_ADMIN_CALC_TYPES[i]+';}');
}
function calendar(obj_target) {
	for(var i=0;i<CONF_ADMIN_CALC_TYPES.length;i++) {	
		eval('this.gen_date=cal_gen_date'+CONF_ADMIN_CALC_TYPES[i]+';');
		eval('this.gen_time=cal_gen_time'+CONF_ADMIN_CALC_TYPES[i]+';');
		eval('this.gen_tsmp=cal_gen_tsmp'+CONF_ADMIN_CALC_TYPES[i]+';');
		eval('this.prs_date=cal_prs_date'+CONF_ADMIN_CALC_TYPES[i]+';');
		eval('this.prs_time=cal_prs_time'+CONF_ADMIN_CALC_TYPES[i]+';');
		eval('this.prs_tsmp=cal_prs_tsmp'+CONF_ADMIN_CALC_TYPES[i]+';');
		eval('this.popup=cal_popup'+CONF_ADMIN_CALC_TYPES[i]+';');
	}
	if(!obj_target) return cal_error((SITELANG=='ru')?"Ошибка вызова календаря: не указан элемент управления":"Error calling the calendar: no target control specified");
	if(obj_target.value == null) return cal_error((SITELANG=='ru')?"Ошибка вызова календаря: указанный параметр не является элементом управления":"Error calling the calendar: parameter specified is not valid target control");
	this.target = obj_target;
	this.time_comp = BUL_TIMECOMPONENT;
	this.year_scroll = BUL_YEARSCROLL;
	this.id = calendars.length;
	calendars[this.id] = this;
}
function cal_popup(str_datetime) {
	if(str_datetime) {
		this.dt_current = this.prs_tsmp(str_datetime);
	} else {
		this.dt_current = this.prs_tsmp(this.target.value);
		this.dt_selected = this.dt_current;
	}
	if(!this.dt_current) return;
	var s=URL+'/prg/calendar.php?datetime=' + this.dt_current.valueOf()+ '&id=' + this.id;
	var obj_calwindow = window.open(s,'Calendar', 'width=200,height='+(this.time_comp ? 215 : 190)+',status=no,resizable=no,top=200,left=200,dependent=yes,alwaysRaised=yes');
	obj_calwindow.opener = window;
	obj_calwindow.focus();
}
function cal_gen_tsmp(dt_datetime) {
	return this.gen_date(dt_datetime)+' '+this.gen_time(dt_datetime);
}
function cal_gen_date(dt_datetime) {
	with(dt_datetime) {
		var d = getDate();
		var m = getMonth();
		var Y = getFullYear();
	}
	switch(CONF_ADMIN_CALC_TYPE) {
		case '1': return ((d<10?'0':'')+d+"."+(m<9?'0':'')+(m+1)+"."+Y);
		case '2': return ((m<9?'0':'')+(m+1)+"/"+(d<10?'0':'')+d+"/"+Y);
		case '3': return ((d<10?'0':'')+d+"-"+(m<9?'0':'')+(m+1)+"-"+Y);
	}
}
function cal_gen_time(dt_datetime) {
	with(dt_datetime) {
		var H = getHours();
		var i = getMinutes();
		var s = getSeconds();
	}
	return ((H<10?'0':'')+H+":"+(i<10?'0':'')+i+":"+(s<10?'0':'')+s);
}
function cal_prs_tsmp(str_datetime) {
	if(!str_datetime) return (new Date());
	if(RE_NUM.exec(str_datetime)) return new Date(str_datetime);
	var arr_datetime = str_datetime.split(' ');
	return this.prs_time(arr_datetime[1], this.prs_date(arr_datetime[0]));
}
function cal_prs_date(str_date) {
	var delim='.';
	var fmt='dd.mm.yyyy';
	var dp=0;var mp=0;var yp=0;
	switch(CONF_ADMIN_CALC_TYPE) {
		case '1': delim='.';fmt='dd.mm.yyyy';dp=0;mp=1;yp=2;break;
		case '2': delim='/';fmt='mm/dd/yyyy';dp=1;mp=0;yp=2;break;
		case '3': delim='-';fmt='dd-mm-yyyy';dp=0;mp=1;yp=2;break;
	}
	var arr_date = str_date.split(delim);
	if(arr_date.length != 3) return cal_error("Invalid date format: '"+str_date+"'.\nFormat accepted is "+fmt+".");
	if(!arr_date[dp]) return cal_error("Invalid date format: '"+str_date+"'.\nNo day of month value can be found.");
	if(!RE_NUM.exec(arr_date[dp])) return cal_error("Invalid day of month value: '"+arr_date[dp]+"'.\nAllowed values are unsigned integers.");
	if(!arr_date[mp]) return cal_error("Invalid date format: '"+str_date+"'.\nNo month value can be found.");
	if(!RE_NUM.exec(arr_date[mp])) return cal_error("Invalid month value: '"+arr_date[mp]+"'.\nAllowed values are unsigned integers.");
	if(!arr_date[yp]) return cal_error("Invalid date format: '"+str_date+"'.\nNo year value can be found.");
	if(!RE_NUM.exec(arr_date[yp])) return cal_error("Invalid year value: '"+arr_date[yp]+"'.\nAllowed values are unsigned integers.");
	var dt_date = new Date();
	dt_date.setDate(1);
	if(arr_date[mp] < 1 || arr_date[mp] > 12) return cal_error("Invalid month value: '"+arr_date[mp]+"'.\nAllowed range is 01-12.");
	dt_date.setMonth(arr_date[mp]-1);
	if(arr_date[yp] < 100) arr_date[yp] = Number(arr_date[yp]) + (arr_date[yp] < NUM_CENTYEAR ? 2000 : 1900);
	dt_date.setFullYear(arr_date[yp]);
	var dt_numdays = new Date(arr_date[yp], arr_date[mp], 0);
	dt_date.setDate(arr_date[dp]);
	if(dt_date.getMonth() != (arr_date[mp]-1)) return cal_error("Invalid day of month value: '"+arr_date[dp]+"'.\nAllowed range is 01-"+dt_numdays.getDate()+".");
	return dt_date;
}
function cal_prs_time(str_time, dt_date) {
	if(!dt_date) return null;
	var arr_time = String(str_time ? str_time : '').split(':');
	if(!arr_time[0]) dt_date.setHours(0);
	else if(RE_NUM.exec(arr_time[0]))
		if(arr_time[0] < 24) dt_date.setHours(arr_time[0]);
		else return cal_error("Invalid hours value: '" + arr_time[0] + "'.\nAllowed range is 00-23.");
	else return cal_error("Invalid hours value: '" + arr_time[0] + "'.\nAllowed values are unsigned integers.");
	if(!arr_time[1]) dt_date.setMinutes(0);
	else if(RE_NUM.exec(arr_time[1]))
		if(arr_time[1] < 60) dt_date.setMinutes(arr_time[1]);
		else return cal_error("Invalid minutes value: '" + arr_time[1] + "'.\nAllowed range is 00-59.");
	else return cal_error("Invalid minutes value: '" + arr_time[1] + "'.\nAllowed values are unsigned integers.");
	if(!arr_time[2]) dt_date.setSeconds(0);
	else if(RE_NUM.exec(arr_time[2]))
		if(arr_time[2] < 60) dt_date.setSeconds(arr_time[2]);
		else return cal_error("Invalid seconds value: '" + arr_time[2] + "'.\nAllowed range is 00-59.");
	else return cal_error("Invalid seconds value: '" + arr_time[2] + "'.\nAllowed values are unsigned integers.");
	dt_date.setMilliseconds(0);
	return dt_date;
}
function cal_error(str_message) {
	alert(str_message);
	return null;
}
