/*
calendar.js
part of X4A
Omikron © 2004

includes all scripts around the calendar functionality

JS optimized for Internet Explorer 6.0 and Mozilla Firefox 1.6 (core v5.0)
*/


function ShowCalendar(text, x, y) {
	var d = document.getElementById("div_calendar");
    d.style.left=x;
    d.style.top=y;
  	d.style.pixelLeft=x;
    d.style.pixelTop=y;
    d.style.visibility="visible";
    d.style.zIndex = 1010;
    d.innerHTML=(text);
}

function HideCalendar() {
	var d = document.getElementById("div_calendar");
	d.style.visibility="hidden";
}

function RefreshCalendar(day, month, year, return_value_to__arg, x, y, draw_again, on_commit_action) {
	if(month == 13) {
		month = 1;
		year++;
	}
	if(month == 0) {
		month=12;
		year--;
	}
	HideCalendar();
	
	//var strDate = 'document.' + return_value_to__arg + '.value="'
	var strDate = "";
	if(day < 10) {
		strDate += '0';
	}
	strDate += day + '.'
	if(month < 10) {
		strDate += '0';
	}
	strDate += month + '.' + year;
	

	if(draw_again == 1)
	{
		on_commit_action = on_commit_action.replace(/'/g, "\\'");
		eval("DrawCalendar(" + day + ", " + month + ", " + year + ", '" + return_value_to__arg + "', " + x + ", " + y + ", '" + on_commit_action + "');");
	}
	else
	{
		var el = document.getElementById(return_value_to__arg.substring(4,return_value_to__arg.length));
		if(el.value!=strDate)
		{
			el.value = strDate;
			if(el.onchange)
			{
				el.onchange();
			}
		}
		else
		{
			el.value = strDate;
		}
		eval(on_commit_action);
		el.focus();
	}
}

function DrawCalendar(day, month, year, return_value_to, x, y, on_commit_action) {
	on_commit_action = on_commit_action.replace(/'/g, "\\'");
//	if(navigator.appName.toLowerCase().indexOf("netscape") != -1 || navigator.appName.toLowerCase().indexOf("mozilla") != -1)
	if(year < 1900) year += 1900;
	realDate = new Date(year, month-1, day);
	month_names = new Array("Chyba!", "Január", "Február", "Marec", "Apríl", "Máj", "Jún", "Júl", "August", "September", "Október", "November", "December");
	if((year%4 == 0) && (year%1000 != 0))	{		// ide o priestupny rok
		days_in_months = new Array(-1,31,29,31,30,31,30,31,31,30,31,30,31);
	} else {
		days_in_months = new Array(-1,31,28,31,30,31,30,31,31,30,31,30,31);
	}
	
	var strPrt = "";
	
	/* ****************************************** */
	/* *** IE workaround - <select> overlying *** */
	/* ****************************************** */
	if(navigator.userAgent.toLowerCase().indexOf("msie") != -1)
	{
		strPrt += '<iframe src="about:blank" frameborder="0" style="position: absolute; z-index: 49; width: 188px; height: 196px;"></iframe>';
		strPrt += '<div style="position: absolute; z-index: 50;">';
	}
	/* ****************************************** */
	/* ****************************************** */
	/* ****************************************** */
	
	strPrt += "<table cellspacing='0' cellpadding='0' bgcolor='#f0f0f0'><tr><td>";
	strPrt += "<table cellspacing='0' cellpadding='0'>\n";
	strPrt += "<tr style=\"background-color: #cccccc;\">\n";
	strPrt += "<td colspan='4' align='center' height='24'>\n";


	// combo for months
	strPrt += "<select style=\"width: 100px; \" onchange=\"";
	strPrt += 'RefreshCalendar(1, this.value, ' + year + ', \'' + return_value_to + '\', ' + x + ', ' + y + ', 1, \'' + on_commit_action + '\');';
	strPrt += "\">";
	for(i = 1; i < month_names.length; i++) {
		strPrt += "<option value=" + i;
		if(i == month) {
			strPrt += " selected";
		}
		strPrt += ">" + month_names[i] + "</option>";
	}
	strPrt += "</select>";
	// !combo for months
	
	strPrt += "</td><td bgcolor='#cccccc' colspan='2' style=\"font-weight: bold;\"align=center>\n";
	
	// combo for years
	strPrt += "<select style=\"width: 55px; \" onchange=\"";
	strPrt += 'RefreshCalendar(1, ' + month + ', this.value, \'' + return_value_to + '\', ' + x + ', ' + y + ', 1, \'' + on_commit_action + '\');';
	strPrt += "\">";
	for(i = parseInt(year) - 10; i < parseInt(year) + 10; i++) {
		strPrt += "<option value=" + i;
		if(parseInt(year) == i) {
			strPrt += " selected";
		}
		strPrt += ">" + i + "</option>"
	}
	strPrt += "</select>"
	// !combo for years
	
	strPrt += "</td>\n";
	strPrt += "<td colspan='1' align='right'>\n<a onclick=\"eval('" + on_commit_action + "'); HideCalendar();\" title=Close style=\"cursor: pointer;\"><img src=pix/webicon_calendar_delete.gif hspace='2' border='0'></a></td>";
	strPrt += "</tr><tr style='text-align:center;color:#333333; bgcolor=#999999'>\n";
	strPrt += "<td width='25'><b>Po</b></td>\n";
	strPrt += "<td width='25'><b>Ut</b></td>\n";
	strPrt += "<td width='25'><b>St</b></td>\n";
	strPrt += "<td width='25'><b>Št</b></td>\n";
	strPrt += "<td width='25'><b>Pi</b></td>\n";
	strPrt += "<td bgcolor='#777777' width='32'><b>So</b></td>\n";
	strPrt += "<td bgcolor='#777777' width='32'><b>Ne</b></td>\n";
	strPrt += "</tr><tr>\n";
	
	begin_day_date = new Date(year, month-1, 1);
	begin_day = begin_day_date.getDay();
	if(begin_day==0) { begin_day=7; }
	
	var num_cols = 0;
	var num_rows = 1;
	
	if(begin_day != 1) {
		for(var h1 = 1; h1 < begin_day; h1++) {	// prazdne polia na zaciatku
			strPrt += "<td bgcolor=#";
			strPrt += ((h1%2==0) ? "f0f0f0" : "e0e0e0");
			strPrt += ">&nbsp;</td>\n";
			num_cols++;
		}
	}
	
	for(var days=1; days <= days_in_months[month];days++) {		// plne polia - cisla dni
		strPrt += "<td align='center' height='25' bgcolor=#";
		if(days == day) {	// ak je to den vybraty parametrom tejto funkcie
			strPrt += "ee1034 style=color:#ffffff;";
		} else {
			strPrt += ((num_cols%2+num_rows%2==1) ? "e0e0e0" : "f0f0f0");
		}
		strPrt += ' onclick="RefreshCalendar(' + days + ', ' + month + ', ' + year + ', \'' + return_value_to + '\', ' + x + ', ' + y + ', 0, \'' + on_commit_action + '\');"';
//		strPrt += ' onMouseOver="this.adsasd"';
		strPrt += ' style="cursor: pointer;'
		if(days == day) {
			strPrt += ' font-weight: bold;';
		}
		strPrt += '" ';
		strPrt += ">" + days + "</td>\n";
		num_cols++;
		if(num_cols % 7 == 0 && days < days_in_months[month]) {
			strPrt += "</tr>\n<tr>\n";
			num_rows++;
		}
	}
		
	if(num_cols%7 != 0) {
		for(; num_cols%7 != 0 ;num_cols++) {	// prazdne polia na konci
			strPrt += "<td height=20 height=20 align=center bgcolor=#";
			strPrt += ((num_cols%2+num_rows%2==1) ? "e0e0e0" : "f0f0f0");
			strPrt += ">&nbsp;</td>\n";
		}
		strPrt += "</tr>\n";
	}
	
	if(num_rows < 6) {
		strPrt += "<tr bgcolor='#e0e0e0'>\n<td height='20'></td>\n";
		strPrt += "<td bgcolor='#f0f0f0'>&nbsp;</td>\n";
		strPrt += "<td>&nbsp;</td>\n";
		strPrt += "<td bgcolor='#f0f0f0'>&nbsp;</td>\n";
		strPrt += "<td>&nbsp;</td>\n";
		strPrt += "<td bgcolor='#f0f0f0'>&nbsp;</td>\n";
		strPrt += "<td>&nbsp;</td>\n";
		strPrt += "</tr>\n";
		num_rows++;
	}
	
	if(num_rows < 6) {
		strPrt += "<tr bgcolor='#e0e0e0'>\n<td height='20'></td>\n";
		strPrt += "<td bgcolor='#f0f0f0'>&nbsp;</td>\n";
		strPrt += "<td>&nbsp;</td>\n";
		strPrt += "<td bgcolor='#f0f0f0'>&nbsp;</td>\n";
		strPrt += "<td>&nbsp;</td>\n";
		strPrt += "<td bgcolor='#f0f0f0'>&nbsp;</td>\n";
		strPrt += "<td>&nbsp;</td>\n";
		strPrt += "</tr>\n";
		num_rows++;
	}
	
	strPrt += "<tr bgcolor='#999999' style='text-align:center;'>\n";
	strPrt += '<td style="cursor: pointer;" onclick="RefreshCalendar(' + day + ', ' + (parseInt(month)-1) + ', ' + year + ', \'' + return_value_to + '\', ' + x + ', ' + y + ', 1, \'' + on_commit_action + '\');" title=\"Predchádzajúci mesiac\"> < </td>\n';
	strPrt += '<td style="cursor: pointer;" onclick="RefreshCalendar(' + day + ', ' + month + ', ' + (parseInt(year)-1) + ', \'' + return_value_to + '\', ' + x + ', ' + y + ', 1, \'' + on_commit_action + '\');" title=\"Predchádzajúci rok\"> << </td>\n';
	today = new Date();
	
	strPrt += '<td style="cursor: pointer; font-weight: bold;" colspan="3" onclick="RefreshCalendar(' + today.getDate() + ', ' + (today.getMonth()+1) + ', ' + ((today.getYear() < 1900) ? today.getYear() + 1900 : today.getYear()) + ', \'' + return_value_to + '\', ' + x + ', ' + y + ', 0, \'' + on_commit_action + '\');" title="Vybrať dnešný dátum">Dnes</td>\n';
	strPrt += '<td style="cursor: pointer;" onclick="RefreshCalendar(' + day + ', ' + month + ', ' + (parseInt(year)+1) + ', \'' + return_value_to + '\', ' + x + ', ' + y + ', 1, \'' + on_commit_action + '\');" title=\"Nasledujúci rok"> >> </td>\n';
	strPrt += '<td style="cursor: pointer;" onclick="RefreshCalendar(' + day + ', ' + (parseInt(month)+1) + ', ' + year + ', \'' + return_value_to + '\', ' + x + ', ' + y + ', 1, \'' + on_commit_action + '\');" title=\"Nasledujúci mesiac\"> > </td>\n';
	strPrt += "</tr><tr height=1><td colspan=7 bgcolor=#cccccc></td></tr>\n";
	strPrt += "</table>\n";
	strPrt += "</td></tr></table>";
	
	/* ****************************************** */
	/* *** IE workaround - <select> overlying *** */
	/* ****************************************** */
	if(navigator.userAgent.toLowerCase().indexOf("msie") != -1)
	{
		strPrt += '</div>';
	}
	/* ****************************************** */
	/* ****************************************** */
	/* ****************************************** */
	
	
	
	ShowCalendar(strPrt,x,y);
}


function checkCalendarValue(val,frominput,defaultMonth,defaultYear) {
	val=val.replace(/,/g,'.');
	if((val.indexOf('+')==0)||(val.indexOf('-')==0))
	{
		val=addDays(+val,frominput);
	}
	if(val.length < 2) {
		return "";
	}
	var firstPeriod = val.indexOf('.');
	var secondPeriod = -1;
	if (firstPeriod != -1)
	{
		secondPeriod = val.indexOf('.', firstPeriod + 1);
	}
	else
	{
		return "";
	}
	if (secondPeriod == -1)
	{	
		if(defaultMonth!=null&&(defaultMonth!=''))
		{
			val=val+defaultMonth+'.';
		}
		else
		{
			val=val+((new Date()).getMonth()+ 1) + '.';
		}
		secondPeriod = val.indexOf('.', firstPeriod + 1);
	}
	day = val.substring(0, firstPeriod);
	month = val.substring(firstPeriod + 1, secondPeriod);
	year = val.substring(secondPeriod + 1);
	
	if (year == '')
	{
		if(defaultYear!=null&&(defaultYear!=''))
		{
			year=defaultYear;
		}
		else
		{
			year = (new Date()).getFullYear();
		}
	}
		
	if(isNaN(parseInt(day, 10)) == true || isNaN(parseInt(month, 10)) || isNaN(parseInt(year, 10))) {
		return '';
	}
	day = Number(day);
	month = Number(month);
	year = Number(year);
	if(year<10)
	{
		year=year+2000;
	}
	else
	{
		if(year<100)
		{
			year=year+1900;
		}
	}
	if((year%4 == 0) && (year%1000 != 0))	{		// ide o priestupny rok
		days_in_months = new Array(-1,31,29,31,30,31,30,31,31,30,31,30,31);
	} else {
		days_in_months = new Array(-1,31,28,31,30,31,30,31,31,30,31,30,31);
	}
	
	if(month > 12 || month < 1 || day < 1 || day > days_in_months[month] || year < 1000 || year > 9999) {
		return '';
	}

	if(month < 10) {
		month = "0" + month;
	}
	if(day < 10) {
		day = "0" + day;
	}
	
	return "" + day + "." + month + "." + year + "";
}

function createDivCalendar() {
	var div_c = document.createElement('div');
	div_c.id = "div_calendar";
	div_c.style.position = "absolute";
	div_c.style.visibility = "hidden";
	div_c.style.zIndex = "90";
	//document.body.insertBefore(div_c);
	//document.body.insertAdjacentElement("beforeEnd", div_c)
	document.body.appendChild(div_c)
}

createDivCalendar();


function calendarDisable(calendarName)
{
	var inp = document.getElementById(calendarName);
	var openImg = document.getElementById(calendarName + "_openImage");
	var closeImg = document.getElementById(calendarName + "_closeImage");
	
	inp.disabled = 1;
	openImg.src = 'pix/webicon_calendar_disabled.gif';
	closeImg.src = 'pix/webicon_calendar_delete_disabled.gif';
}

function calendarEnable(calendarName)
{
	var inp = document.getElementById(calendarName);
	var openImg = document.getElementById(calendarName + "_openImage");
	var closeImg = document.getElementById(calendarName + "_closeImage");
	
	inp.disabled = 0;
	openImg.src = 'pix/webicon_calendar.gif';
	closeImg.src = 'pix/webicon_calendar_delete.gif';
}
function addDays(kolko,odkial)
{
	var ret="";
	var myDate = new Date();
	var dat=new Array();
	if(odkial!=null&&(odkial!=''))
	{
		var pom=document.getElementById(odkial).value;
		dat=pom.split(".")
		myDate.setFullYear(dat[2]);
		myDate.setMonth(dat[1]-1);
		myDate.setDate(dat[0]);
		myDate.setDate(myDate.getDate() + kolko);
		ret=myDate.getDate()+'.'+(myDate.getMonth()+1)+'.'+myDate.getFullYear();
	}
	else
	{
		myDate.setDate(myDate.getDate() + kolko);
		ret=myDate.getDate()+'.'+(myDate.getMonth()+1)+'.'+myDate.getFullYear();
	}
	return ret;
}
