
//uwaga: w przypadku zmiany formatu daty nalezy zmodyfikowac funkcje: bindInput oraz printDate

var calArray = new Array();
var calArrayIndex = 0;

function isVisible() {
	return (document.getElementById(this.id).style.visibility.search("hidden")==-1)
}

function getDate() {
	return this.date;
}

function setDate(day,month,year) {
	this.date=new Date(year,month-1,day);
}

function setDay(day) {
	this.date.setDate(day);
	this.printDate();
	this.hideCalendar();
}

function setMonth(input) {
	calendarObj = this;
	setTimeout(function(){
		try {			
			var month=input.selectedIndex;
			calendarObj.date.setMonth(month);	
			calendarObj.draw();	
		} catch (err1) {}
	},100);
}


function setYear(input) {
	calendarObj = this;
	setTimeout(function(){
		try {
			var year=input.selectedIndex;
			calendarObj.date.setFullYear(year+1900);		
			calendarObj.draw();	
		} catch (err1) {}				
	},100);
}

function isNumber(val)
{
if((val==null)||(val==""))
  return false;
for(i=0;i<val.length;i++)  
  if((val.substring(i,i+1) != "0") &&
     (val.substring(i,i+1) != "1") &&
     (val.substring(i,i+1) != "2") &&
     (val.substring(i,i+1) != "3") &&
     (val.substring(i,i+1) != "4") &&
     (val.substring(i,i+1) != "5") &&
     (val.substring(i,i+1) != "6") &&
     (val.substring(i,i+1) != "7") &&
     (val.substring(i,i+1) != "8") &&
     (val.substring(i,i+1) != "9") )
       return false;
 
return true;
}

function getDateFromString(s) {
	var vDate = new Date();
	if (s != "") {
		var year = s.substring(0,4);		
		var month = s.substring(5,7);	
		var day = s.substring(8,10);
	
		if (isNumber(year) && isNumber(month) && isNumber(day)){
			vDate.setFullYear(year);	
	    	vDate.setMonth(month - 1);
	    	vDate.setDate(day);	
		}	
		return vDate;
	}
	return null;
}

function bindInput(input) {
  var s;
  this.input=input;
  s = this.input.value;
  if (s != "") {	
	var year = s.substring(6,10);		
	var month = s.substring(3,5);	
	var day = s.substring(0,2);

	if (this.format=='short') day=1;
	if (isNumber(year) && isNumber(month) && isNumber(day)){
		this.date.setFullYear(year);	
    	this.date.setMonth(month - 1);
    	this.date.setDate(day);	
	}
  }  
}

function dateToString(vDate, format) {
  	var current_day=vDate.getDate();
	var current_month=vDate.getMonth();	
  	var s;
  	
  	s="";

  	if (format!='short'){  	
	  	if (current_day>9)
	  	s+=""+current_day;
	  	else s+="0"+current_day;
	}
  	if (++current_month>9)
  	s+="."+current_month;
  	else s+=".0"+current_month;
  	
  	s+="."+vDate.getFullYear();
  	
	return s;
}

function printDate() {
  if(this.input) {
 	var s;  	
  	s="";
	s = dateToString(this.date, this.format);
  	this.input.value=s;
  	this.input.text=s;
  	if (this.input.onchange) {
  		this.input.onchange();
  	}
  }
}

var months = new Array();
var days = new Array(); 

function getMonthDesc(m) {
	
	if (m==0) return months[0];
	if (m==1) return months[1];
	if (m==2) return months[2];
	if (m==3) return months[3];
	if (m==4) return months[4];
	if (m==5) return months[5];
	if (m==6) return months[6];
	if (m==7) return months[7];
	if (m==8) return months[8];
	if (m==9) return months[9];
	if (m==10) return months[10];
	if (m==11) return months[11];
	
	return ""+m;
}
function getMonths() {
	var m=this.date.getMonth();
	var s="";

	s+="<select name=\"c_month\" onChange=\""+this.id+".setMonth(this)\">"
	for (i=0;i<12;i++) {
		if (i==m) s+="<option selected>"+getMonthDesc(i)+"</option>";
		else s+="<option>"+getMonthDesc(i)+"</option>";
	}
	s+="</select>";
	return s;
}
function getYears() {
	
	var y=this.date.getFullYear();
	var s="";
	
	s+="<select name=\"c_year\" onChange=\""+this.id+".setYear(this)\">";

	for(i=1900;i<2100;i++) {
		if (y==i) s+="<option selected>"+i+"</option>";
		else s+="<option>"+i+"</option>";
	}
	s+="</select>";
	return s;
}

function draw() {
	var current_day=this.date.getDate();
	var current_month=this.date.getMonth();
	var current_year=this.date.getYear();
	if(!document.all) current_year+=1900;
        
        var s="<div align=\"center\" style=\"z-index: 20002;\" ><table border=\"0\" cellspacing=\"0\" class=\"makroCalendar\" ><tr><td class=\"calendar\"><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" style=\"height:145px;\">";
  	s+="<tr><td align=\"center\" valign=\"top\" class=\"\"><div id=\"simpleCalendarCenter\" align=\"center\"><table border=\"0\" cellpadding=\"1\" class=\"\">";
   	
   	s+="<tr><td colspan=\"4\" >" + this.getMonths()+ "</td><td colspan=\"3\" >" + this.getYears() + "</td></tr>";
   	var week=1;
	this.date.setDate(1);
	var day_of_week=this.date.getDay();
	day_of_week--;
	if (day_of_week == -1 ) day_of_week = 6;

	var day_of_month=0;
	s+="<tr><td class=\"d\">"+days[1]+"</td><td class=\"d\">"+days[2]+"</td><td class=\"d\">"+days[3]+"</td><td class=\"d\">"+days[4]+"</td><td class=\"d\">"+days[5]+"</td><td class=\"df\">"+days[6]+"</td><td class=\"df\">"+days[7]+"</td></tr>"
	if (!document.all) {
		s+="<tr><td height='1'></td></tr>";
	}
	s+="<tr>";	
	for (i=0;i<day_of_week;i++) {
		if (i<5) s+="<td class=\"\">&nbsp;</td>"
		else s+="<td class=\"\">&nbsp;</td>"
	}
	for (i=day_of_week;i<7;i++) {
		if (i<5) s+="<td class=\"c\" ><a onFocus=\"blur();\" class=\"c\" href=\"javascript: "+this.id+".setDay('"+(++day_of_month)+"')\">"+day_of_month+"</a></td>";
		else s+="<td class=\"cf\" ><a onFocus=\"blur();\" class=\"cf\" href=\"javascript: "+this.id+".setDay('"+(++day_of_month)+"')\">"+day_of_month+"</a></td>";
		this.date.setDate(day_of_month);
	}
	s+="</tr>";

	day_of_week=0;

	while (this.date.getMonth() == current_month) {
		s+="<tr>"
		for(i=0;i<7;i++) {
			this.date.setDate(++day_of_month);
			if (this.date.getMonth() == current_month) {
				if (i<5) s+="<td class=\"c\" ><a onFocus=\"blur();\" class=\"c\" href=\"javascript: "+this.id+".setDay('"+day_of_month+"')\">"+day_of_month+"</a></td>";
				else s+="<td class=\"cf\" ><a onFocus=\"blur();\" class=\"cf\" href=\"javascript: "+this.id+".setDay('"+day_of_month+"')\">"+day_of_month+"</a></td>";
			} else {
				if (i<5) s+="<td class=\"\">&nbsp;</td>";
				else s+="<td class=\"\">&nbsp;</td>";
			}
		}
		week++;
		s+="</tr>"
	}
	if (week<6) {
	//s+="<tr>";
	//	for(i=0;i<7;i++) {s+="<td class=\"\">&nbsp;</td>";}
	//s+="</tr>";
	}
	s+="</table></div></td></tr></table></div></td></tr></table></div>";
	
	this.date.setYear(current_year);
	this.date.setDate(current_day);
	this.date.setMonth(current_month);

  	document.getElementById(this.id).innerHTML=s;  	
}

function showCalendar() {
	this.showCalendarAt(this.input.style.pixelLeft, this.input.style.pixelTop);
}

function showHideControl(vControlName, vHide) {
	if (vControlName != "") {
	 	var index = vControlName.indexOf(";");
	    if (index == -1) {
		 	document.getElementById(vControlName).style.visibility = vHide ? "hidden" : "visible";
	 	} else {
	 		var lastIndex = 0;
	 		while(index != -1) {
				var tempName = vControlName.substring(lastIndex, index);

				document.getElementById(tempName).style.visibility = vHide ? "hidden" : "visible";	

			 	lastIndex = index + 1;
				index = vControlName.indexOf(";", lastIndex);	
			}
			
			tempName = vControlName.substring(lastIndex);

			document.getElementById(tempName).style.visibility = vHide ? "hidden" : "visible";	

	 	}
	 }	
}

function showCalendarAt(x,y) {
	for(i=0; i<calArrayIndex; i++) {
		calArray[i].hideCalendar();
	}
	
	if (this.input) {
		this.bindInput(this.input);
	}
	this.draw();
	

	 if (this.flippedControl != null) {
		showHideControl(this.flippedControl, true);
	 }	

	 document.getElementById(this.id).style.position="absolute";
	 document.getElementById(this.id).style.posLeft=x-179;
	 document.getElementById(this.id).style.posTop=y-97;
	 document.getElementById(this.id).style.display="";
}

function moveCalendarTo(x, y) {

	 	document.getElementById(this.id).style.position="absolute";
	 	document.getElementById(this.id).style.posLeft=x-179;
	 	document.getElementById(this.id).style.posTop=y-97;	
}

function hideCalendar() {
	transFrame = document.getElementById("transFrame");
	if (transFrame) {
		transFrame.style.display="none";
		transFrame.parentNode.removeChild(transFrame);
	}
	//if (this.flippedControl != null) {
	//	showHideControl(this.flippedControl, false);
    //}	
    eDiv = document.getElementById(this.id);
    if (eDiv) {
		eDiv.style.display="none";
		eDiv.parentNode.removeChild(eDiv);
	}
	if (simpleCalendar != null)
		simpleCalendar=null;
}

function findPosX(obj)
{
	if (obj.style.position == "absolute") return obj.offsetLeft;
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent && obj.tagName.toLowerCase()!="div")
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj)
{
	if (obj.style.position == "absolute") return obj.offsetTop;
	var curtop = 0;
	var objekty="";
	if (obj.offsetParent)
	{
		while (obj.offsetParent && obj.tagName.toLowerCase()!="div")
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
			objekty+=obj.nodeName+" "+obj.offsetTop+"\n";
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}
function flip(checkReadonly) {

	var x = findPosX(this.input) + this.input.clientWidth;
	var y = findPosY(this.input);
	this.flipAt(x, y, checkReadonly)
}

function flipAt(x, y) {	
	flipAt(x, y, false);
}

function flipAt(x, y, checkReadonly) {

	if (document.getElementById(this.id).style.display=="none" ) {
		if ((checkReadonly) && (this.input)) {
			if (!this.input.readOnly) {				
				this.showCalendarAt(x, y);
			}
		} else {
			this.showCalendarAt(x, y);				
		}
	} else {
		this.hideCalendar();
	}

}

function setFlipControl(name) {
  this.flippedControl = name;
}

function calendar(id,format) {
  //document.write("<div id=\""+id+"\" style=\"display: none; z-index: 1;\">&nbsp;</div> ");
  
  this.date=new Date();
  this.id=id;
  this.format=format;
  this.getDate=getDate;
  this.setDate=setDate;
  this.draw=draw;
  this.showCalendar=showCalendar;
  this.showCalendarAt=showCalendarAt;
  this.hideCalendar=hideCalendar;
  this.bindInput=bindInput;
  this.printDate=printDate;
  this.setDay=setDay;
  this.setMonth=setMonth;
  this.setYear=setYear;
  this.getYears=getYears;
  this.getMonths=getMonths;
  this.isVisible=isVisible;
  this.flip=flip;
  this.flipAt=flipAt;
  this.moveCalendarTo = moveCalendarTo;
  
  this.setFlipControl = setFlipControl;
  this.flippedControl = null;
  this.flipAtDefaultPos = flipAtDefaultPos;
  calArray[calArrayIndex++] = this;
}

function hideAllCalendars() {
	var i;
	for (i=0; i<calArray.length; i++) {
		calArray[i].hideCalendar();
	}
}

function flipAtDefaultPos() {
	var x;
	var y;
	
	x = findPosX(this.input);
	y = findPosY(this.input);
	if (document.all) {
		y = y + this.input.clientHeight + 8;
	}

	this.flipAt(x, y, true);
}

var simpleCalendar;
simpleCalendar = null;

function resolveOverlappingList(pCalendarDiv) {
	var x = findPosX(pCalendarDiv);
	var width = pCalendarDiv.clientWidth;
	var y = findPosY(pCalendarDiv);	
	var height = pCalendarDiv.clientHeight;
	var vElementNames = "";
	var vElements = document.forms[0].getElementsByTagName("SELECT");
	for(i=0; i<vElements.length; i++) {
		var vElement = vElements[i];
		if (vElement.name != 'c_month' && vElement.name != 'c_year' && vElement.style.display!="none") {
			var x_ = findPosX(vElement);
			var y_ = findPosY(vElement);	
			var width_ = vElement.clientWidth;
			var height_ = vElement.clientHeight;
			
			var vOverlap;
			if (   (x_ + width_ < x)
				|| (x_ > x + width)
				|| (y_ + height_ < y)
				|| (y_ > y + height)
			) {				
				vOverlap = false;
			} else {
				vOverlap = true;
			}
				
			if (vOverlap) {
				if (vElementNames != "") {
					vElementNames = vElementNames + ";";
				}
				vElementNames = vElementNames + vElement.name;
			}
		}
	}
	
	return vElementNames;
}

function hideSimpleCalendar() {
	if (simpleCalendar != null) {
		simpleCalendar.hideCalendar();
		simpleCalendar = null;
	}
}

function drawSimpleCalendar(pInput) {
	var eDiv
	eDiv = document.getElementById('simpleCalendar');
	if (eDiv) {
		eDiv.parentNode.removeChild(eDiv);
	} 
	if (simpleCalendar != null) {
		if (simpleCalendar.input == pInput) {
			simpleCalendar.hideCalendar();
			return;
		}
		simpleCalendar.hideCalendar();
	}
	
	eDiv = document.createElement("div");
	eDiv.setAttribute("id","simpleCalendar");
	eDiv.setAttribute("style","position: absolute; posLeft: 0; posTop: 0; display: none; height: 150px;zIndex:20002;z-index:20002;");	
	eDiv.style.zIndex = '20002';
	transFrame = document.getElementById("transFrame");
	//if (is_ie6() && !transFrame) {
		transFrame=document.createElement("iframe");
		transFrame.src="javascript:'<html></html>';";
		pInput.parentNode.insertBefore(transFrame,pInput);
		transFrame.style.zIndex = '20002';
	//}
	if (document.all) {
		if(pInput.id.substring(0,6)=="select")
			pInput.parentNode.parentNode.insertBefore(eDiv, pInput.parentNode);
		else
			pInput.parentNode.insertBefore(eDiv, pInput);
			
		eDiv.style.position = "absolute";
		eDiv.style.top=eDiv.offsetTop+pInput.clientHeight-180+"px";
	} else {
		if(pInput.id.substring(0,6)=="select")
			pInput.parentNode.parentNode.insertBefore(eDiv, pInput.parentNode.nextSibling);
		else
			pInput.parentNode.insertBefore(eDiv, pInput.nextSibling);
		eDiv.style.top=document.getElementById('macroMainTable').offsetHeight+50+"px";
	}

	simpleCalendar = new calendar('simpleCalendar', null);
	simpleCalendar.bindInput(pInput);
	simpleCalendar.draw();
	
	//if (is_ie6()) {
		transFrame.setAttribute("id","transFrame");
		transFrame.style.position="absolute";
		transFrame.style.top=transFrame.offsetTop+pInput.clientHeight-180+"px";
		transFrame.style.width=eDiv.offsetWidth+"px";
		transFrame.style.height=eDiv.offsetHeight+"px";
		transFrame.style.display="block";
		transFrame.style.zIndex = '20002';
		//setDivsSize();
	//}
	eDiv.style.display="none";
	eDiv.style.display="block";
		eDiv.style.zIndex = '20002';
}

function is_ie6() {
	var agt=navigator.userAgent.toLowerCase();
	var appVer = navigator.appVersion.toLowerCase();
	var is_mac = (agt.indexOf("mac")!=-1);
	var iePos  = appVer.indexOf('msie');
	if (iePos !=-1) {
		if(is_mac) {
			var iePos = agt.indexOf('msie');
			is_minor = parseFloat(agt.substring(iePos+5,agt.indexOf(';',iePos)));
		}
		else is_minor = parseFloat(appVer.substring(iePos+5,appVer.indexOf(';',iePos)));
		is_major = parseInt(is_minor);
		var is_ie6   = (is_major == 6);
		var is_ie6up = (is_minor >= 6);
		var is_ie7   = (is_major == 7);
		var is_ie7up = (is_minor >= 7);
    }
    return (is_ie6 && !is_ie7);
}















