﻿	var oCalendarReturnInput = null, dCalendarActualDate = null, oCalendarWindow = null;

//     function showPos(element)
//     {
//         var left = element.offsetLeft;
//         var top  = element.offsetTop;
//         while(element=element.offsetParent)
//         {
//             left += element.offsetLeft;
//             top  += element.offsetTop;
//         }
//         alert("Left:"+left+"px Top:"+top+"px");
//     }
// 
// function findPosX(obj) {
//   var curleft = 0;
//   if (obj.offsetParent) {
//     while (obj.offsetParent) {
//       curleft += obj.offsetLeft
//       obj = obj.offsetParent;
//     }
//   } else if (obj.x)
//   curleft += obj.x;
//   return curleft;
// }
// 
// function findPosY(obj) {
//   var curtop = 0;
//   if (obj.offsetParent) {
//     while (obj.offsetParent) {
//       curtop += obj.offsetTop
//       obj = obj.offsetParent;
//     }
//   } else if (obj.y)
//   curtop += obj.y;
// return curtop;
// }
	
	function fnCalendarOpenWindow(cInputID,cWindowID,cDateText){
		if(oCalendarReturnInput != null){	//nejaky kalendar je jiz otevren
			if(oCalendarReturnInput.id == cInputID)
				fnCalendarClose();	//pokud bylo kliknuto na tlacitko, ktere otevira jiy otevreny kalendar, kalendar se zavre
			return;	//koncime
		}
		oCalendarReturnInput = document.getElementById(cInputID);	//po dobu otevreni kalendare se nesmi menit hodnota v prirazenem inputu
		oCalendarReturnInput.readOnly = true;
		oCalendarWindow = document.getElementById(cWindowID);
		//urcime datum, ktere se ma v kalendari zvyraznit
		if(!cDateText)
			dCalendarActualDate = fnCalendarParseDate(oCalendarReturnInput.value);
		else
			dCalendarActualDate = fnCalendarParseDate(cDateText);
		//zjistime polohu inputu, do ktereho se bude plnit vysledek
		var nPositionTop,nPositionLeft,nInputHeight;
		if(oCalendarReturnInput.style.pixelHeight){
			nPositionTop = oCalendarReturnInput.style.top;
			nPositionLeft = oCalendarReturnInput.style.pixelLeft;
			nInputHeight = oCalendarReturnInput.style.height;
		}
    else if(oCalendarReturnInput.offsetHeight){
			nPositionTop = oCalendarReturnInput.offsetTop;
			nPositionLeft = oCalendarReturnInput.offsetLeft;
			nInputHeight = oCalendarReturnInput.style.height;
		}

//     showPos(document.getElementById(cInputID));
//     
//     nPositionTop = findPosY(document.getElementById(cInputID));
//     alert(nPositionTop );
//     nPositionLeft = findPosX(document.getElementById(cInputID));
//     alert(nPositionLeft );

		if(nPositionLeft){	//nyni z toho urcime polohu kalendare
			oCalendarWindow.style.offsetLeft = nPositionLeft + "px";
		}
		else{
			oCalendarWindow.style.left = "0px";
    }
		if(nPositionTop&&nInputHeight){	//nyni z toho urcime polohu kalendare
			oCalendarWindow.style.top = (nPositionTop+4) + "px";
		}

		//vykreslime kalendar pro mesic a rok zadaneho data
		fnCalendarDrawWindow(dCalendarActualDate.getFullYear(),dCalendarActualDate.getMonth());
    oCalendarWindow.style.display = "block";	//zobrazime okenko kalendare
	}
	
	function fnCalendarDrawWindow(nCalendarYear,nCalendarMonth){	//vykresli kalendar pro predany mesic a rok do urceneho okenka
		var dFirstDay = new Date(nCalendarYear,nCalendarMonth,1);	//prvni den mesice
		var day,nDays,lCheckDays,nSelectedDate,nSwitchMonthYear,nThisYear,nWeekCount,cHTML = "",nWeekday = dFirstDay.getDay();
		
		//prepinani mesicu
		cHTML += '<div class="month">';	//zacatek divu s prepinanim mesice a roku
		cHTML += '<img src="/images/check.gif" alt="x" title="Zavřít" width="11" height="12" onclick="javascript: fnCalendarClose();" />';
		if (nCalendarMonth > 0)
			nSwitchMonthYear = nCalendarMonth - 1;	//predchozi mesic
		else
			nSwitchMonthYear = 11;	//leden -> prosinec
		cHTML += '<a href="" onclick="javascript: fnCalendarDrawWindow(' + nCalendarYear + ',' + nSwitchMonthYear + ');return false;">&laquo;</a>&nbsp;';
		cHTML += aCalendarMonthNames[nCalendarMonth];
		if (nCalendarMonth < 11)
			nSwitchMonthYear = nCalendarMonth + 1;	//nasledujici mesic
		else
			nSwitchMonthYear = 0;	//prosinec -> leden
		cHTML += '&nbsp;<a href="" onclick="javascript: fnCalendarDrawWindow(' + nCalendarYear + ',' + nSwitchMonthYear + ');return false;">&raquo;</a>';
		
		//prepinani roku
		cHTML += '<select name="calendar_year" id="' + oCalendarWindow.id + 'Year" onchange="javascript: fnCalendarSwitchYear(' + nCalendarMonth + ',this);">';
		nThisYear = (new Date()).getFullYear();
		for(nSwitchMonthYear = nThisYear; nSwitchMonthYear <= nThisYear + 2; nSwitchMonthYear++){
			cHTML += '<option value="' + nSwitchMonthYear + '"';
			if(nSwitchMonthYear == nCalendarYear)
				cHTML += ' selected="selected"';
			cHTML += '>' + nSwitchMonthYear + '</option>';
		}
		cHTML += '</select>';
		cHTML += '</div>';	//konec divu s prepinanim mesice a roku
		
		
		//nadpisy dni
		cHTML += '<div class="dayNames"><span>Po</span><span>Út</span><span>St</span><span>Čt</span><span>Pá</span><span>So</span><span>Ne</span></div>';
		
		//vypis dni
		cHTML += "<div>";	//zacatek prvniho tydne
		nWeekCount = 1;
		if(nWeekday == 0) nWeekday = 7;
		for(day=1;day<nWeekday;day++){//vycpavka pred prvnim dnem mesice
			cHTML += "<span>&nbsp;</span>";
		}
		dFirstDay = new Date(nCalendarYear,nCalendarMonth+1,0);//posledni den mesice
		nDays = dFirstDay.getDate();	//pocet dni v mesici
		lCheckDays = (nCalendarMonth == dCalendarActualDate.getMonth() && nCalendarYear == dCalendarActualDate.getFullYear())//pokud souhlasi mesic a rok, budeme testovat den pro zvyrazneni
		nSelectedDate = dCalendarActualDate.getDate();
		for(day=1;day<=nDays;day++){
			if(nWeekday <= 7){//bezny den v tydnu
				nWeekday++;//ukazuje na pristi den
			}
			else{//pondeli, ukoncime tyden a zacneme novy
				cHTML += '<div class="clear">&nbsp;</div></div><div>';
				nWeekCount++;
				nWeekday = 2;
			}
			cHTML += '<a href="" onClick="javascript: fnCalendarSaveDate(' + day + ',' + nCalendarMonth + ',' + nCalendarYear + ');return false;"'
			if(lCheckDays && day == nSelectedDate)
				cHTML += ' class="selectedDay"'
			cHTML += '>' + day + '</a>'
		}
		for(day=nWeekday;day<=7;day++)	//vycpavka za poslednim dnem mesice
			cHTML += "<span>&nbsp;</span>";
		cHTML += '<div class="clear">&nbsp;</div></div>';
		
		//upravime velikost okna podle poctu tydnu
		fnCalendarSetWindowHeight(nWeekCount);
		
		//vypiseme kod kalendare do otevreneho okenka
		oCalendarWindow.innerHTML = cHTML;
	}
	
	function fnCalendarSetWindowHeight(nWeekCount){
		var nBaseHeight = 46,nWeekHeight = 22,nFinalHeight;
		nFinalHeight = nBaseHeight + nWeekCount * nWeekHeight;
		oCalendarWindow.style.height = nFinalHeight + "px";
//		oCalendarWindow.style.background = "rgb(" + nFinalHeight + "," + nFinalHeight + "," + nFinalHeight + ")";
	}
	
	function fnCalendarSwitchYear(nMonth,oYearCombo){//prepne rok vypisovany v kalendari
		var nYear;
		nYear = Number(oYearCombo.options[oYearCombo.selectedIndex].value);
		fnCalendarDrawWindow(nYear,nMonth);
	}
	
	function fnCalendarSaveDate(nDay,nMonth,nYear){
		oCalendarReturnInput.value = nDay + "." + (nMonth + 1) + "." + nYear;
		fnCalendarClose();
	}
	
	function fnCalendarClose(){
		oCalendarWindow.style.display = "none";	//schovame okenko kalendare
		oCalendarWindow = null;
		oCalendarReturnInput.readOnly = false;	//povolime zmenu inputu
		oCalendarReturnInput = null;	//vycistime prirazeni inputu, cimz signalizujeme, ze zadny kalendar neni otevren
	}
	
	function fnCalendarParseDate(cDateValue){
		var aDateParts = cDateValue.split("."),nDay,nMonth,nYear,dToday = new Date(),lValidDay;
		if(aDateParts.length == 3 || aDateParts.length == 2){	//datum musi mit 2 nebo 3 casti
			nDay = Number(aDateParts[0]);
			nMonth = Number(aDateParts[1]);
			if(aDateParts.length == 3 && aDateParts[2] != "")	//datum ma vsechny 3 casti
				nYear = Number(aDateParts[2]);
			else
				nYear = dToday.getFullYear();
		}
		if(!(isNaN(nDay)||isNaN(nMonth)||isNaN(nYear))){	//vsechny tri casti jsou cisla
			if(nDay > 0 && nMonth > 0 && nYear >= 0 && nMonth <= 12){	//postupne overime, zda maji vsechna cisla pripustne hodnoty
				if(nYear < 100) nYear += 2000;	//pro rok zadany jen dvema cislicemi
				if(nMonth == 1 && nMonth == 3 && nMonth == 5 && nMonth == 7 && nMonth == 8 && nMonth == 10 && nMonth == 12)
					lValidDay = (nDay <= 31);	//delsi mesice
				else{
					if(nMonth == 2){	//unor
						if(nYear % 4 != 0)	//normalni rok (neni delitelny 4)
							lValidDay = (nDay <= 28);
						else	//prestupny rok (je delitelny 4)
							lValidDay = (nDay <= 29);
					}
					else{
						lValidDay = (nDay <= 30);	//kratsi mesice
					}
				}
				if(lValidDay){	//mame platne hodnoty, sestavime z nich datum a vratime ho
					return new Date(nYear,nMonth-1,nDay);	//mesic se predava v rozsahu 0 - 11
				}
			}
		}
		return dToday;	//nepodarilo se sestavit datum, vracime defaultni hodnotu
	}
	
	function fnShowHiddenCalendarImgs(){
		var elems =	document.getElementsByTagName('img'),i;
		for(i=0;i<elems.length;i++){
			if(elems[i].className == "showByJS")
				elems[i].style.visibility = "visible";
		}
	}

