﻿/**********************************************************************
OpenSource Calendar
Created by Tomasz L.
Modified by Andrzej K.
Voyager.com '2005
***********************************************************************/
DT_MONTHS=['Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec',
	'Lipiec','Sierpień','Wrzesień','Październik','Listopad','Grudzień'];
DT_DAYS=['Pn','Wt','Śr','Cz','Pt','Sb','Nd'];
DT_PICKERS=[];

var colourMouseOver = "#C5DFF2";
var colourMouseOutday = "White";
var colourMouseOutcurr = "White";
var colourMouseOuth = "#FFFFCC"; 
var colourMouseOutnext = "#F5F5F5";
var grafl='<IMG src="Img/kal_l.gif" border=0>';
var grafr='<IMG src="Img/kal_p.gif" border=0>';
var grafbg='background="Img/kal_c.gif"';
var textshow='Zamknij';
document.write('<div class=dtpicker id=dtp></div>');
	
function DatePicker(valueField,layoutElem,formatInverted,datemin,valueFieldP) {
	this.valueField=valueField;
	this.valueFieldP=valueFieldP;
	this.layoutElem=layoutElem;
	this.value=new Date();
	this.id=DT_PICKERS.length;
	DT_PICKERS[this.id]=this;
	this.minimumDate=new Date(dtParse(datemin));
	if (this.value<this.minimumDate) this.value=this.minimumDate;
	
	this.Show=dtShow;
	this.Pick=dtPick;
	this.Hide=dtHide;
	this.Parse=dtParse;
	this.FormatInverted=formatInverted;
}

function dtParse(s) {
	var a=s.split('-');
	if(a.length!=3) return new Date(this.value);
	var dt=new Date(0);
	a[0]=parseInt(a[0]);
	if(this.FormatInverted){
		var t=a[2];
		a[2]=a[0];
		a[0]=t;
	}
	if(a[0]<30) a[0]+=2000;
	else if(a[0]<100) a[0]+=1900;
	dt.setYear(a[0]); dt.setMonth(a[1]-1); dt.setDate(a[2]);
	return isNaN(dt)?new Date():dt;
}
function dtPick(dtValue) {
	var dt=new Date(dtValue);
	this.value=dt;
	var y=dt.getYear();
	var m=dt.getMonth()+1;
	var d=dt.getDate();
	var v;
	if(this.FormatInverted)
		v=(d<10?'0'+d:d)+'-'+(m<10?'0'+m:m)+'-'+(y<1900?y+1900:y);
	else
		v=(y<1900?y+1900:y)+'-'+(m<10?'0'+m:m)+'-'+(d<10?'0'+d:d);
	this.valueField.value=v;
	
	if((this.valueFieldP!=null)&&(this.valueFieldP)) 
	{
		var dp = new Date(dtParse(this.valueFieldP.value));
		if (dt.valueOf() > dp.valueOf()) this.valueFieldP.value=v;
	}
	this.Hide();
}
function dtHide() {
  this.layoutElem.style.visibility='hidden';
}
function dtShow(dtValue) {
  // first day of month
	var dt;
  if(dtValue)
		dt=new Date(dtValue);
  else
  	dt=this.Parse(this.valueField.value); 
  dt.setHours(0); dt.setMinutes(0); dt.setSeconds(0); dt.setMilliseconds(0);
  var dtFirstDay=new Date(dt);
  dtFirstDay.setDate(1);
  var dtBegin=new Date(dtFirstDay.getDay()==0
  	?dtFirstDay.valueOf()-86400000*6:dtFirstDay.valueOf()-86400000*(dtFirstDay.getDay()-1));
		  
	var html='<html><body><table class=dtpicker cellspacing=0 cellpadding=0 style="border: 1px solid #000000;"><tr class=head><td colspan=7 valign=top>'

//*********************************************** 
var arrl,arrp; 
var monthback = dt.getMonth() - 1; 	
var monthnext = dt.getMonth() + 1; 	
var dtMonthBack = new Date(dt); dtMonthBack.setDate(1);
var dtMonthNext = new Date(dt); dtMonthNext.setDate(1);
if (monthback==12) {dtMonthBack.setMonth(0); dtMonthBack.setYear(dtMonthBack.getYear() - 1)} else dtMonthBack.setMonth(monthback);
if (monthnext==-1) {dtMonthNext.setMonth(11); dtMonthNext.setYear(dtMonthNext.getYear() + 1);} else dtMonthNext.setMonth(monthnext);

	arrl = grafl;
	html+='<TR><TD colspan=7><TABLE class=dtpicker cellpadding=0 cellspacing=0 border=0 width="100%">';
	if (!(dt.getMonth()==this.minimumDate.getMonth() && dt.getYear()==this.minimumDate.getYear()))
		arrl='<A href="javascript:DT_PICKERS['+this.id+'].Show('+parseInt(dtMonthBack.valueOf())+');">'+arrl+'</A>';
	arrp='<A href="javascript:DT_PICKERS['+this.id+'].Show('+parseInt(dtMonthNext.valueOf())+');">'+grafr+'</A>';
	html+="<TR><TD>"+arrl+"</TD>";
	html+='<TD width=100% '+grafbg+' align=center class=days>' + DT_MONTHS[dt.getMonth()]+' ' + (dt.getYear()<1900?1900+dt.getYear():dt.getYear()) + '</TD>';
	html+="<TD align=right>"+arrp+"</TD></TR>";
	html+="</TABLE></TD></TR>";
//***********************************************  	
	var bgr="";
	var klasa;
  
  html+='<tr class=days>';
  for(var n=0;n<7;n++) html+='<td'+(n>5?' class=holy':'')+' align="center">'+DT_DAYS[n]+'</td>';
  html+='</tr>';

  var dtCnt=new Date(dtBegin);
  while(dtCnt.getYear()*12+dtCnt.getMonth()<=dt.getYear()*12+dt.getMonth()) {
		html+='<tr>';
    for(n=0;n<7;n++) {	

		if (dtCnt.valueOf()<=this.minimumDate.valueOf()) {klasa = "out"; }
		else
		if (dtCnt.getMonth()!=dt.getMonth()) {klasa = "next"; bgr = colourMouseOutnext;}
		else
		if (dtCnt.valueOf()==dt.valueOf()) {klasa = "curr"; bgr = colourMouseOutcurr;}
		else
		if (n>5) {klasa = "h"; bgr = colourMouseOuth;}
		else
		{klasa = "day"; bgr = colourMouseOutday ;}
    
		html+='<td align="center" class="'+ klasa + '" ';
		if (bgr!="") {
			html+='onMouseOver="this.style.backgroundColor=\''+colourMouseOver+'\'" ';
			html+='onMouseOut="this.style.backgroundColor=\''+bgr+'\'" ';
			html+='onMouseUp="DT_PICKERS['+this.id+'].Pick('+dtCnt.valueOf()+')" ';
		}
		html+='>'+dtCnt.getDate()+'</td>';
		dtCnt.setTime(dtCnt.valueOf()+90000000);
		dtCnt.setHours(0);
    }
    html+='</tr>';
  }
  html+='<TR><TD style="cursor:hand; cursor:pointer;" colspan=7 align="right" onClick="DT_PICKERS['+this.id+'].Hide();">'+textshow+'&nbsp;</TD></TR>'
  html+='</table>';
  html+='</body></html>';

  this.layoutElem.innerHTML=html;
  this.layoutElem.style.visibility='visible';
}
function CreatePicker(valueField,holder,formatInverted,datemin,posleft,postop,valueFieldP) {
	var layoutElem=document.getElementById('dtp');
 	var dt=new DatePicker(valueField,layoutElem,formatInverted?true:false,datemin,valueFieldP);
	if(posleft==0) layoutElem.style.left=getRealLeft(holder)+'px'
	  else layoutElem.style.left=parseInt(posleft+getRealLeft(holder))+'px';
  if(postop==0) layoutElem.style.top=getRealTop(holder)+'px'
		else layoutElem.style.top=parseInt(postop+getRealTop(holder))+'px';
	dt.Show();
}
function getRealLeft(o) {
var xPos=o.offsetLeft;
var tempEl=o.offsetParent;
	while(tempEl!=null) {
		xPos+=tempEl.offsetLeft;
		tempEl=tempEl.offsetParent;
	}
return xPos;
}
function getRealTop(o) {
	var yPos=o.offsetTop;
	var tempEl=o.offsetParent;
	while(tempEl!=null) {
		yPos+=tempEl.offsetTop;
		tempEl=tempEl.offsetParent;
	}
	return yPos;
}
function checkDate(d,formatInverted) {
	var ok=true;
	if(!formatInverted&&!d.match(/^[0-9]{4}-[01]*[0-9]-[0-3]*[0-9]$/)
	|| formatInverted&&!d.match(/^[0-3]*[0-9]-[01]*[0-9]-[0-9]{4}$/)) ok=false;
	var dt = new Date();
	var a=d.split('-');
	if(formatInverted){
		var t=a[2];
		a[2]=a[0];
		a[0]=t;
	}
	dt.setFullYear(parseFloat(a[0]));
	dt.setMonth(parseFloat(a[1])-1);
	dt.setDate(parseFloat(a[2]));
	if(dt.getFullYear()!=parseFloat(a[0]) || dt.getMonth()!=parseFloat(a[1])-1 || dt.getDate()!=parseFloat(a[2])) ok=false;
	if(!ok) alert('Nieprawidłowa data (powinno być '+(formatInverted?'DD-MM-RRRR':'RRRR-MM-DD')+')');
	return ok;
}
