function validDate(date){
	var re = /^[0-9]{2}[.][0-9]{2}[.][0-9]{4}$/;
	return(re.test(date));
}

var CALENDAR=function(destElementID,pozX,pozY,startDate,selectedMonth){
	this.destElementID=destElementID;
	if(!startDate){
		this.startDate=new Date();
	}else{
		this.startDate=startDate;
	}
	if(!selectedMonth){
		this.selectedMonth=0;
	}else{
		this.selectedMonth=selectedMonth;
	}
	this.startMonth=this.startDate.getMonth();
	this.startYear=this.startDate.getYear();
	this.calendarContainerID="calendar";


	if(this.startYear<1000){
		this.startYear=1900+this.startYear;
	}

	this.months=[];
	this.monthsHTML=[];

	this.returnDate=function(elementID,date){
		document.getElementById(elementID).value=date;
	}

	this.kall=function(){
		this.closeCalendar();
		this.generateMonthList();
		this.calendarDiv=document.createElement('div');
		this.calendarDiv.className="calendar";
		this.calendarDiv.id="calendar";
		this.calendarDiv.innerHTML='xxx';
		this.calendarDiv.style.left=pozX+'px';
		this.calendarDiv.style.top=pozY+'px';
		this.calendarDiv.innerHTML=this.HTML;
		document.getElementsByTagName('body')[0].appendChild(this.calendarDiv);
		this.selectMonth(this.selectedMonth);
	}

	this.generateMonthList=function(){
		var i;
		var m;
		for(i=0;i<12;i++){
			m=this.startMonth+i;
			y=this.startYear;
			if(m>11){
				m-=12;
				y+=1;
			}
			this.months[i]=new MONTH(this.destElementID,m,y);
			this.monthsHTML[i]=this.months[i].generateTable();
		}

		this.HTML=	'<iframe frameborder="0" style="border:none;width:380px;height:180px;" src="">x</iframe>'+
					'<div style="margin-top:-180px;width:380px;height:180px;overflow:hidden;position:relative;  background:#EEDEC7 url(/system/theme/netatur/images/t.jpg);">'+
					'<div id="months" style="overflow:hidden;">'+
					'<div id="calendar_next" onclick="(new CALENDAR(\'\',\'\',\'\',\'\')).nextCalendar()" style="cursor:pointer;position:absolute;right:5px;top:3px;width:17px;height:17px;background: url(/images/n.gif)">&nbsp;</div>'+
					'<div id="calendar_previous" onclick="(new CALENDAR(\'\',\'\',\'\',\'\')).previousCalendar()" style="display:none;cursor:pointer;position:absolute;left:5px;top:3px;width:17px;height:17px;background: url(/images/p.gif)">&nbsp;</div>'+
						'<table style="text-align:center" cellspacing="0" cellpadding="0">'+
							'<tr style="color: #E8D8C1; background:#775642 url(/system/theme/netatur/images/bg_table.jpg)">';

		for(i=0;i<12;i++){
			this.HTML+='<td><div style="width:190px;height:24px;font-size:13px;color:#E8D8C1"><div style="padding-top:4px">'+this.months[i].monthName+' '+this.months[i].year+'</div></div></td>';
		}

		this.HTML+='</tr><tr>';


		for(i=0;i<12;i++){
			this.HTML+='<td style="border-right:1px solid #D4C1A5"><div style="width:190px;height:133px;">'+this.monthsHTML[i]+'</div></td>';
		}

		this.HTML+='</tr>'+
						'</table>'+
					'</div>'+
					'<div onclick="(new CALENDAR(\'\',\'\',\'\',\'\')).closeCalendar()" onmouseover="this.style.color=\'#5A3D3F\'" onmouseout="this.style.color=\'#64410F\'" style="cursor:pointer;text-align:center;border-top:1px solid #D4C1A5;padding-top:3px;width:380px;">'+
						'<b>Zamknij okno</b>'+
					'</div>'+
				'</div>';
	}


	this.closeCalendar = function(){
		var cal=document.getElementById('calendar');
		if(cal)
			cal.parentNode.removeChild(cal);
	}

	this.previousCalendar = function(){
		var marginLeft=document.getElementById('months').style.marginLeft;
		var ml=marginLeft.slice(0,marginLeft.length-2);
		ml=ml*1;
		document.getElementById('calendar_next').style.display='block';

		if(ml<0){
			document.getElementById('months').style.marginLeft=ml+382+"px";
			/* for(i=12;i<=382;i+=5){
				setTimeout("(new CALENDAR(\'\',\'\',\'\',\'\')).scrollCalendar("+(ml+i)+")",i*2);
			}*/
		}
		if(ml>=(-382)){
			document.getElementById('calendar_previous').style.display='none';
		}
	}

	this.nextCalendar = function(){
		var marginLeft=document.getElementById('months').style.marginLeft;
		var ml=marginLeft.slice(0,marginLeft.length-2);
		ml=ml*1;
		document.getElementById('calendar_previous').style.display='block';

		if(ml>(-1910)){
			/* for(i=12;i<=382;i+=5){
				setTimeout("(new CALENDAR(\'\',\'\',\'\',\'\')).scrollCalendar("+(ml-i)+")",i*2);
			}*/
			document.getElementById('months').style.marginLeft=ml-382+"px";
		}
		if(ml<=(-1528)){
			document.getElementById('calendar_next').style.display='none';
		}
	}

	this.selectMonth = function(monthNumber){
		var marginLeft=document.getElementById('months').style.marginLeft;
		var ml=marginLeft.slice(0,marginLeft.length-2);
		ml=ml*1;

		document.getElementById('calendar_previous').style.display='block';
		document.getElementById('calendar_next').style.display='block';

		if(monthNumber==0){
			document.getElementById('calendar_previous').style.display='none';
		}else if(monthNumber==11){
			document.getElementById('calendar_next').style.display='none';
		}

		document.getElementById('months').style.marginLeft=-Math.floor(monthNumber/2)*382+"px";
	}

	this.scrollCalendar = function(px){
		document.getElementById('months').style.marginLeft=px+"px";
	}


}


var MONTH=function(destElementID,month,year){
	this.destElementID=destElementID;
	this.month=month;
	this.year=year;
	var monthNames = ['Styczeń', 'Luty', 'Marzec', 'Kwiecień', 'Maj', 'Czerwiec', 'Lipiec', 'Sierpień', 'Wrzesień', 'Październik', 'Listopad', 'Grudzień'];
	this.monthName=monthNames[this.month];

	this.daysInMonths = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
	if (((this.year % 4 == 0) && (this.year % 100 != 0)) || (this.year % 400 == 0))
		this.daysInMonths[1] = 29;
	else
		this.daysInMonths[1] = 28;
	this.days=this.daysInMonths[this.month];

	this.validDate=function(day){
		var m;

		if(((this.month*1)+1)<10){
			m='0'+((this.month*1)+1);
		}else{
			m=(this.month*1)+1;
		}

		if((day*1)<10){
			day='0'+(day*1);
		}


		var date=this.year+'-'+m+'-'+day;
		return date;
	};

	this.generateTable=function(){
		this.previousMonth=this.month-1;
		this.previousYear=this.year;
		this.nextMonth=(this.month*1)+1;
		this.nextYear=this.year;
		if(this.previousMonth<0){
			this.previousMonth=11;
			this.previousYear--;
			}
		if(this.nextMonth>11){
			this.nextMonth=0;
			this.nextYear++;
			}

		this.previousMonth=new MONTH(this.destElementID,this.previousMonth,this.previousYear);
		this.nextMonth=new MONTH(this.destElementID,this.nextMonth,this.nextYear);

		var firstDay = new Date(this.year,this.month,1);
	  	var startDay = firstDay.getDay()-1 ;
	  	if (startDay < 0) startDay = 6;

	  	this.numberOfWeeks=Math.ceil((this.daysInMonths[this.month]+startDay)/7);

	  	this.output='<tr>'+
	  					'<td class="dzien">'+
	  						'Pn'+
	  					'</td>'+
	  					'<td class="dzien">'+
	  						'Wt'+
	  					'</td>'+
	  					'<td class="dzien">'+
	  						'Śr'+
	  					'</td>'+
	  					'<td class="dzien">'+
	  						'Cz'+
	  					'</td>'+
	  					'<td class="dzien">'+
	  						'Pt'+
	  					'</td>'+
	  					'<td class="dzien">'+
	  						'So'+
	  					'</td>'+
	  					'<td class="dzien">'+
	  						'Ni'+
	  					'</td>'+
	  				'</tr>';
	  	this.day=1;

	  	for(var i=1;i<=this.numberOfWeeks;i++){
			/*
			if(i%2==0)
				this.output+='<tr class="xyz">';
			else
			*/
				this.output+='<tr>';

	  		if(i==1){
	  			this.generateFirstWeek(startDay);
			}else if(i==this.numberOfWeeks){
				this.generateLastWeek();
			}else{
				this.generateWeek();
			}
			this.output+='</tr>';
		}
		return '<table class="miesiac" cellspacing="0" cellpadding="0">'+this.output+'</table>';
	}

	this.generateFirstWeek=function(startDay){
		var z;
		for(z=0;z<startDay;z++){
			if(this.month==0)
				this.output+='<td class="disabled" onclick="document.getElementById(\''+this.destElementID+'\').value=\''+this.previousMonth.validDate(this.previousMonth.days-(startDay-z)+1)+'\';(new CALENDAR(\'\',\'\',\'\',\'\')).closeCalendar()">';
			else
				this.output+='<td class="disabled" onclick="document.getElementById(\''+this.destElementID+'\').value=\''+this.previousMonth.validDate(this.previousMonth.days-(startDay-z)+1)+'\';(new CALENDAR(\'\',\'\',\'\',\'\')).closeCalendar()">';
			this.output+=this.previousMonth.days-(startDay-z)+1;
			this.output+='</td>';
		}
		for(z=1;z<=(7-startDay);z++){
			if(z==(7-startDay))
				this.output+='<td class="wolne" onclick="document.getElementById(\''+this.destElementID+'\').value=\''+this.validDate(this.day)+'\';(new CALENDAR(\'\',\'\',\'\',\'\')).closeCalendar()">';
			else
				this.output+='<td onclick="document.getElementById(\''+this.destElementID+'\').value=\''+this.validDate(this.day)+'\';(new CALENDAR(\'\',\'\',\'\',\'\')).closeCalendar()">';

			this.output+=(this.day)++;
			this.output+='</td>';
		}
	};

	this.generateLastWeek=function(){
		var z;
		var m=1;
		for(z=1;z<=7;z++){
			if(this.day<=this.daysInMonths[this.month]){
				if(z==7)
					this.output+='<td class="wolne" onclick="document.getElementById(\''+this.destElementID+'\').value=\''+this.validDate(this.day)+'\';(new CALENDAR(\'\',\'\',\'\',\'\')).closeCalendar()">';
				else
					this.output+='<td onclick="document.getElementById(\''+this.destElementID+'\').value=\''+this.validDate(this.day)+'\';(new CALENDAR(\'\',\'\',\'\',\'\')).closeCalendar()">';

				this.output+=(this.day)++;
			}else{
				if(this.month==11)
					this.output+='<td class="disabled" onclick="document.getElementById(\''+this.destElementID+'\').value=\''+this.nextMonth.validDate(m)+'\';(new CALENDAR(\'\',\'\',\'\',\'\')).closeCalendar()">';
				else
					this.output+='<td class="disabled" onclick="document.getElementById(\''+this.destElementID+'\').value=\''+this.nextMonth.validDate(m)+'\';(new CALENDAR(\'\',\'\',\'\',\'\')).closeCalendar()">';
				this.output+=m++;
			}

			this.output+='</td>';
		}
	};

	this.generateWeek=function(){
		var z;
		for(z=1;z<=7;z++){
			if(z==7)
				this.output+='<td class="wolne" onclick="document.getElementById(\''+this.destElementID+'\').value=\''+this.validDate(this.day)+'\';(new CALENDAR(\'\',\'\',\'\',\'\')).closeCalendar()">';
			else
				this.output+='<td onclick="document.getElementById(\''+this.destElementID+'\').value=\''+this.validDate(this.day)+'\';(new CALENDAR(\'\',\'\',\'\',\'\')).closeCalendar()">';

			this.output+=(this.day)++;
		}
	};
}


function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		do {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
	}
	return [curleft,curtop];
}






