//**********************************************
// calendar.js
// written by M. Hirsch-Hoffmann, ETH Zürich
// version 30.1.2008
//**********************************************
var weekdaynames=new Array();
weekdaynames=['Mo','Tu','We','Th','Fr','Sa','Su'];

var monthnames=new Array();
monthnames['short']=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
monthnames['long']=['January','February','March','April','May','June','July','August','September','October','November','December'];

var mypopupfield;

document.write(
"<table bgcolor=#CDCDCD onclick='CalPopupCancel(event);' style='position:absolute;display:none;width:200px;top:9px;left:0px;z-index:1;'"+
" border=0 id='mypopupcal'>\n"+
"<tr bgcolor=#CDCDCD>\n<td colspan=7 align=center nowrap>\n"+
"<input type=button style='border:0px;padding:0px;' value='<' onclick='CalPopupMove(-1)'>"+
"<select id='mypopupmonth' onchange=JavaScript:CalPopupChange();>\n</select>\n"+
"<select id='mypopupyear' onchange=JavaScript:CalPopupChange();>\n</select>\n"+
"<input type=button style='border:0px;padding:0px;' value='>' onclick='CalPopupMove(1)'>"+
"</td>\n</tr>\n");
document.write(
"<tr bgcolor=#EEEEEE>\n");
for(var i=0;i<7;i++)
{
	document.write(
	"<td align=center>"+weekdaynames[i]+"</td>\n");
}

document.write(
"</tr>\n");

for(var i=0;i<6;i++)
{
	document.write(
	"<tr bgcolor=#EEEEEE id='mypopupweek"+i+"' style='display:none'>\n");
	for(var j=0;j<7;j++)
	{
		switch(j)
		{
			case 5: case 6:
				var forecolor="red";
				break;
			default:
				var forecolor="black";
				break;
		}
		document.write(
		"<td onclick='CalPopupSet(event);' style='color:"+forecolor+";' onMouseOver="+String.fromCharCode(34)+"javascript:this.className='selected'"+String.fromCharCode(34)+" onMouseOut="+String.fromCharCode(34)+"this.className='odd'"+String.fromCharCode(34)+" align=right id='mypopupday"+(j+(i*7))+"'></td>\n");
	}
	document.write(
	"</tr>\n");
}
document.write(
"<tr bgcolor=#EEEEEE>\n"+
"<td id='mypopuptoday' onMouseOver="+String.fromCharCode(34)+"javascript:this.className='selected'"+String.fromCharCode(34)+" onMouseOut="+String.fromCharCode(34)+"this.className='odd'"+String.fromCharCode(34)+" colspan=7 align=center>\n"+
"</td>\n</tr>\n");

document.write(
"</table>\n");

function CalReset(yearfield,year,monthfield,month,dayfield,day)
{
	year=parseInt(year);
	month=parseInt(month);
	day=parseInt(day);
	if(isNaN(year))
	{
		var jetzt = new Date();
		var year = jetzt.getFullYear();
		var udyear=true;
	}
	
	month=parseInt(month);
	day=parseInt(day);
	var myy = document.getElementById(yearfield);
	var mym = document.getElementById(monthfield);
	var myd = document.getElementById(dayfield);
	emptyCalSelect(myy);
	emptyCalSelect(myd);
	myy.options[0] = new Option('','0');
	myy.options[1] = new Option('<=less','less');
	fillCalSelect(myy,(year-5),(year+5));
	myy.options[myy.options.length] = new Option('more=>','more');
	
	if(!udyear)
	{
		selectedCalSelect(myy,year)
	}
	if(!isNaN(month))
	{
		selectedCalSelect(mym,month)
		fillCalDaySelect(myy,year,mym,month,myd,day);
	}
}

function CalChange(yearfield,monthfield,dayfield)
{
	var myy = document.getElementById(yearfield);
	var mym = document.getElementById(monthfield);
	var myd = document.getElementById(dayfield);
	
	if(myy.options[myy.selectedIndex].value=="less")
	{
		var maxyear=parseInt(myy.options[2].value);
		emptyCalSelect(myy);
		myy.options[0] = new Option('','0');
		myy.options[1] = new Option('<=less','less');
		fillCalSelect(myy,(maxyear-11),(maxyear-1));
		myy.options[myy.options.length] = new Option('more=>','more');
		myy.options[myy.options.length-2].selected=true;
	} 
	if(myy.options[myy.selectedIndex].value=="more")
	{
		var minyear=parseInt(myy.options[(myy.options.length-2)].value);
		emptyCalSelect(myy);
		myy.options[0] = new Option('','0');
		myy.options[1] = new Option('<=less','less');
		fillCalSelect(myy,minyear+1,(minyear+11));
		myy.options[myy.options.length] = new Option('more=>','more');
		myy.options[2].selected=true;
	}
	if(myy.options[myy.selectedIndex].value=="0")
	{
		mym.options[0].selected=true;
	}
	var cd=0;
	
	if(myd.options.length>0)
	{
		cd=parseInt(myd.options[myd.selectedIndex].value);
	}
	emptyCalSelect(myd);
	if(mym.options[mym.selectedIndex].value>0 && myy.options[myy.selectedIndex].value!='less' && myy.options[myy.selectedIndex].value!='more' && myy.options[myy.selectedIndex].value!='0')
	{
		//has month and year is set.
		var cm=parseInt(mym.options[mym.selectedIndex].value);
		var cy=parseInt(myy.options[myy.selectedIndex].value);
		fillCalDaySelect(myy,cy,mym,cm,myd,cd);
	}
}
function selectedCalSelect(myfield,myvalue)
{
	for(var i=0;i<myfield.options.length;i++)
	{
		if(myfield.options[i].value==myvalue)
		{
			myfield.options[i].selected=true;
			break;
		}
	}
}
function emptyCalSelect(myfield)
{
	while(myfield.options.length)
	{
		myfield.options[0]=null;
	}

}
function fillCalSelect(myfield,minvalue,maxvalue)
{
	for(var i=minvalue;i <=maxvalue;i++)
	{
		myfield.options[myfield.options.length]=new Option(i,i);
	}
}
function fillCalDaySelect(myy,year,mym,month,myd,day)
{
	var days = 31;
	if (month == 4 || month == 6 || month == 9 || month == 11)
    {
		--days;
	}
	if (month == 2) 
	{
		days -= 3;
	    if (year % 4 == 0)
	    {
			days++;
		}
		if (year % 100 == 0)
		{
  			days--;
		}
		if (year % 400 == 0)
		{
			days++;
		}
	}		
	myd.options[0] = new Option('','0');
	fillCalSelect(myd,1,days);
	if(!isNaN(day))
	{
		if(day>days)
		{
			myd.options[(myd.options.length-1)].selected=true;
		}else
		{
			myd.options[day].selected=true;
		}
	}
}

function CalPopup(myfield,sl)
{

	mypopupfield=myfield;

	var myf = document.getElementById(myfield);
	var mytop = parseInt(myf.offsetTop,10);
	var myleft = parseInt(myf.offsetLeft)+parseInt(myf.offsetWidth,10);
	
	do
	{
		myf=myf.offsetParent;
		mytop+=parseInt(myf.offsetTop,10);
		myleft+=parseInt(myf.offsetLeft,10);
	}
	while(myf.tagName!='BODY' && myf.tagName!='HTML');
	
	document.getElementById('mypopupcal').style.top=mytop+'px';
	document.getElementById('mypopupcal').style.left=myleft+'px';

	CalPopupReset(myfield,sl);

	CalPopupChange();

	var mytoday = new Date();
	var mytodaystring=mytoday.getFullYear()+"-"+PadDigits(mytoday.getMonth()+1,2)+"-"+PadDigits(mytoday.getDate(),2);
	document.getElementById('mypopuptoday').innerHTML = "Today: " + mytodaystring;
	document.getElementById('mypopuptoday').mydate=mytodaystring;
	
	addClickDateEvent(document.getElementById('mypopuptoday'),mytodaystring)
	
	document.getElementById('mypopupcal').style.display='';
	
	if(document.addEventListener)
	{
		document.addEventListener('click',CalPopupClose,false);
	}else
	{
		document.attachEvent('onclick',CalPopupClose);
	}
}
function CalPopupClose()
{
	document.getElementById('mypopupcal').style.display='none';

	if(document.removeEventListener)
	{
		document.removeEventListener('click',CalPopupClose,false);
	}else
	{
		document.detachEvent('onclick',CalPopupClose);
	}
}
function CalPopupChange()
{
	var myy = document.getElementById('mypopupyear');
	var mym = document.getElementById('mypopupmonth');

	if(myy.options[myy.selectedIndex].value=="less")
	{
		var maxyear=parseInt(myy.options[1].value);
		emptyCalSelect(myy);
		myy.options[0] = new Option('<=less','less');
		fillCalSelect(myy,(maxyear-11),(maxyear-1));
		myy.options[myy.options.length] = new Option('more=>','more');
		myy.options[myy.options.length-2].selected=true;
	} 
	if(myy.options[myy.selectedIndex].value=="more")
	{
		var minyear=parseInt(myy.options[(myy.options.length-2)].value);
		emptyCalSelect(myy);
		myy.options[0] = new Option('<=less','less');
		fillCalSelect(myy,minyear+1,(minyear+11));
		myy.options[myy.options.length] = new Option('more=>','more');
		myy.options[1].selected=true;
	}
	
	var myyear=parseInt(myy.options[myy.selectedIndex].value);
	var mymonth=parseInt(mym.options[mym.selectedIndex].value);
	
	var firstday = new Date(myyear,mymonth,1)
	var millifirstday=firstday.getTime();

	var firstweekday = firstday.getDay();
	
	switch(firstweekday)
	{
		case 0:
			//sunday
			millifirstday-=(6*86400000);
			break;
		default:
			for(var k=firstweekday;k>1;k--)
			{
				millifirstday-=86400000;
			}
			break;
	}
	
	
	var myshowday=new Date(millifirstday);
	
	for(var i=0;i<6;i++)
	{
		document.getElementById('mypopupweek'+i).style.display='none';

		var showweek=false;

		for(var j=0;j<7;j++)
		{
			if(myshowday.getMonth()==mymonth)
			{
				showweek=true;
			}
			document.getElementById("mypopupday"+(j+(i*7))).innerHTML = myshowday.getDate();
/*			document.getElementById("mypopupday"+(j+(i*7))).mydate = myyear+"-"+PadDigits(mymonth+1,2)+"-"+PadDigits(myshowday.getDate(),2);*/
			document.getElementById("mypopupday"+(j+(i*7))).mydate = myshowday.getFullYear()+"-"+PadDigits(myshowday.getMonth()+1,2)+"-"+PadDigits(myshowday.getDate(),2);
			if(myshowday.getMonth()==mymonth)
			{
				document.getElementById("mypopupday"+(j+(i*7))).style.fontWeight = "bold"
			}else
			{
				document.getElementById("mypopupday"+(j+(i*7))).style.fontWeight = "normal"
			}
			/* daylight saving time switch back correction */
			myprevday=myshowday;
			myshowday=new Date(millifirstday+=86400000);
			if(myshowday.getDate()==myprevday.getDate())
			{
				myshowday=new Date(millifirstday+=3600000);
			}
		}
		if(showweek==true)
		{
			document.getElementById('mypopupweek'+i).style.display='';
		}else
		{
			document.getElementById('mypopupweek'+i).style.height='0px';
		}
	}	
}
function CalPopupReset(myfield,sl)
{
	var myy = document.getElementById('mypopupyear');
	var mym = document.getElementById('mypopupmonth');

	var myf = document.getElementById(myfield);
	
	var year=parseInt(myf.value.substr(0,4));
	var month=parseInt(myf.value.substr(5,2));

	if(isNaN(year) || year==0)
	{
		var jetzt = new Date();
		var year = jetzt.getFullYear();
		var udyear=true;
	}
	if(isNaN(month) || month==0)
	{
		var jetzt = new Date();
		var month=parseInt(jetzt.getMonth()+1);
		var udmonth=true;
	}

	emptyCalSelect(myy);
	emptyCalSelect(mym);
	
	myy.options[0] = new Option('<=less','less');
	fillCalSelect(myy,(year-5),(year+5));
	myy.options[myy.options.length] = new Option('more=>','more');
	
	for(i=0;i<monthnames[sl].length;i++)
	{
		mym.options[mym.options.length] = new Option(monthnames[sl][i],i);
	}
	
	selectedCalSelect(myy,year)
	selectedCalSelect(mym,parseInt(month-1))	
}

function PadDigits(n, totalDigits) 
{ 
    n = n.toString(); 
    var pd = ''; 
    if (totalDigits > n.length) 
    { 
        for (i=0; i < (totalDigits-n.length); i++) 
        { 
            pd += '0'; 
        } 
    } 
    return pd + n.toString(); 
} 
function CalPopupMove(addmonth) 
{
	var mym = document.getElementById('mypopupmonth');
	var newmonth=parseInt(mym.options.selectedIndex+addmonth);
	
	if(newmonth==-1 || newmonth==12)
	{
		var myy = document.getElementById('mypopupyear');
		if(newmonth==-1)
		{
			mym.options[11].selected=true;
		}else
		{
			mym.options[0].selected=true;
		}
		myy.options[parseInt(myy.selectedIndex+addmonth)].selected=true;
	}else
	{
		mym.options[parseInt(mym.selectedIndex+addmonth)].selected=true;
	}
	
	CalPopupChange();

}
function CalPopupCancel(myevent)
{
	if(myevent.stopPropagation)
	{
		myevent.stopPropagation();
	}else
	{
		myevent.cancelBubble=true;
	}
}
function CalPopupSet(myeventobject)
{

	if (myeventobject.target) 
	{
		targ = myeventobject.target;
	} else if (myeventobject.srcElement)
	{
		targ = myeventobject.srcElement;
	}
	if (targ.nodeType == 3) // defeat Safari bug
	{
		targ = targ.parentNode;
	}
		
	document.getElementById(mypopupfield).value=targ.mydate;
	CalPopupClose();
}
function addClickDateEvent(myfield,mydate)
{
	if(myfield.addEventListener)
	{
		myfield.addEventListener('click',CalPopupSet,false);
	}else
	{
		myfield.attachEvent('onclick',CalPopupSet);
	}
}
