// by phil
// 2/2x/2006
// requires explorer 4 or greater or firefox
// 3/21/2006 -- added dropdown boxe support for month and year
// 5/24/2006 -- added "entire month" and "entire year"
// 6/20/2006 -- added unix timestamp functionality (defaults to EST, should be recoded using toLocaleString)
// -- added hour:minutes:seconds as well
// (thanks Jonas Raoni Soares Silva www.joninhas.ath.cx for String.prototype.pad)

// -14400 for EST
// -18000 in wintertime? dunno...
var TZ_OFFSET = -14400;

String.prototype.pad = function(l, s, t){
	return s || (s = " "), (l -= this.length) > 0 ? (s = new Array(Math.ceil(l / s.length)
		+ 1).join(s)).substr(0, t = !t ? l : t == 1 ? 0 : Math.ceil(l / 2))
		+ this + s.substr(0, l - t) : this; }

function fromunix(tbox)
	{
	var months = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");

	var temp; var i;
	var tboxel = document.getElementById(tbox);
	if (tboxel.value == '') return;

	var theDate = new Date(((tboxel.value*1) + TZ_OFFSET) * 1000);
// toLocaleString is radically different from toGMTString... yay
	var arr = theDate.toGMTString().split(" ");
	tboxel.value = arr[3];
	for (i = 0; i < months.length; ++i)
		if (arr[2] == months[i]) temp = i+1;
	if (temp < 10)
		tboxel.value += '0';
	tboxel.value += ''+temp;
	tboxel.value += arr[1].pad(2,'0');
	tboxel.value += arr[4].substr(0,2);
	tboxel.value += arr[4].substr(3,2);
	tboxel.value += arr[4].substr(6,2);
	}
function tounix(tbox)
	{
	var year,mon,day,hr,min,sec;
        var tboxel = document.getElementById(tbox);
	if (tboxel.value == '') return;

        year = tboxel.value.substr(0,4)*1;
        mon = tboxel.value.substr(4,2)*1;
        day = tboxel.value.substr(6,2)*1;
        hr = tboxel.value.substr(8,2)*1;
        min = tboxel.value.substr(10,2)*1;
        sec = tboxel.value.substr(12,2)*1;
        tboxel.value = 
          (
          new Date(Date.UTC(year,
          ((mon)-1),
          (day),
          (hr),
          (min),
          (sec)-TZ_OFFSET))
          ).getTime()/1000.0;

	stamp_humanreadable(tbox);
	}

function opencal(y, m, calbox, tbox, toggle, pair)
	{
	if (!pair) pair = 'null'
	if (document.getElementById(calbox).className == "dropdown show" && toggle == 1)
		{
		tounix(tbox);
		document.getElementById(calbox).className = "dropdown hide";
		return;
		}

	m = parseInt(m,10);
	y = parseInt(y,10);
	var todaydate=new Date();
	var getdate=new Date(y,m-1,1)
	if(getdate=='NaN' || getdate == 'Invalid Date') //Fixme: how to check if Date didn't parse?
		{
		m = todaydate.getMonth()+1;
		y = todaydate.getFullYear();
		}
	if (m<1) {m=12;--y};
	if (m>12) {m=1;++y};
	var mn=['January','February','March','April','May','June','July','August','September','October','November','December'];
	var dim=[31,0,31,30,31,30,31,31,30,31,30,31];
	var oD = new Date(y, m-1, 1); //fix date bug when current day is 31st
	oD.od=oD.getDay()+1; //fix date bug when current day is 31st

//	var scanfortoday=(y==todaydate.getFullYear() && m==todaydate.getMonth()+1)? todaydate.getDate() : 0;
// this has actually now become
// "scanforthepreviouslyselectedday"
// ... mmmm... write-only code...
	var tboxval=document.getElementById(tbox).value;
	var scanfortoday=((tboxval.substr(0,4)*1)==y 
		&& (tboxval.substr(4,2)*1)==m)? (tboxval.substr(6,2)*1) : 0;

	dim[1]=(((oD.getFullYear()%100!=0)&&(oD.getFullYear()%4==0))||(oD.getFullYear()%400==0))?29:28;
	var monsel='<select name="mn" onchange="opencal('+(y)+',this.value,\''+calbox+'\',\''+tbox+'\',0,\''+pair+'\')">';
	for (var s=0;s<12;++s)
		monsel+='<option value="'+(s+1)+'"'
			+(s == m-1?' selected="selected"':'')+'>'+mn[s]+'</option>';
	monsel+='</select>';
	var yearsel='<select name="yr" onchange="opencal(this.value,'+m+',\''+calbox+'\',\''+tbox+'\',0,\''+pair+'\')">';
	for (var s=y-10;s<=y+10;++s)
		yearsel+='<option value="'+s+'"'
			+(s == y?' selected="selected"':'')+'>'+s+'</option>';
	yearsel+='</select>';

	if (pair) if (pair != 'null')
		{
		var tbox_id = 'document.getElementById(\''+tbox+'\').value';
		var pair_id = 'document.getElementById(\''+pair+'\').value';
		var tbox_mval =  (''+y+(m<10?'0'+m:m)+'01');
		var pair_mval = (''+y+(m<10?'0'+m:m)+dim[m-1]);
		var tbox_yval =  (''+y+'0101');
		var pair_yval = (''+y+'1231');
		var closer = "this.parentNode.parentNode.parentNode.parentNode.parentNode.className='dropdown hide'";

		monsel+='<span class="button" onclick="'+tbox_id+'=\''+tbox_mval+'\';'+pair_id+'=\''+pair_mval+'\';'+closer+'">Entire month</span>';
		yearsel+='<span class="button" onclick="'+tbox_id+'=\''+tbox_yval+'\';'+pair_id+'=\''+pair_yval+'\';'+closer+'">Entire year</span>';
		}

	var t='<table style="background: white" cols="7" cellpadding="2" border="1" cellspacing="0"><tr>';
	t+='<td colspan="7" align="center"><font color="black">'
		+'hr:<input type=text id='+tbox+'_hours size=2 maxlength=2 value='+tboxval.substr(8,2)+'>'
		+'min:<input type=text id='+tbox+'_minutes size=2 maxlength=2 value='+tboxval.substr(10,2)+'>'
		+'sec:<input type=text id='+tbox+'_seconds size=2 maxlength=2 value='+tboxval.substr(12,2)+'>'
		+'</font></td></tr><tr>';
	t+='<td colspan="4" align="left">'+monsel+'</td><td colspan="3" align="right">'+yearsel+'</td></tr><tr align="center">';

	for(var s=0;s<7;++s)t+='<td style="color: black">'+"SuMoTuWeThFrSa".substr(s*2,2)+'</td>';
	t+='</tr><tr align="center">';

	for(i=1;i<=42;i++)
		{
		var x=((i-oD.od>=0)&&(i-oD.od<dim[m-1]))? i-oD.od+1 : '';
		var frmtx=(x<10?'<font color="white">0</font>'+x:x); // FIXME: ugh
		if (x==scanfortoday)
			frmtx='<span style="border: 1px solid;font-weight: bold">'+frmtx+'</span>';
//		t+='<td'+(x==''
//			?'>&nbsp;'
//			:' class="button" onclick="document.getElementById(\''+tbox+'\').value=\''+(''+y+(m<10?'0'+m:m)+(x<10?'0'+x:x))+'\';this.parentNode.parentNode.parentNode.parentNode.className=\'dropdown hide\'">'
//			)+frmtx+'</td>';
		t+='<td'
		+	(x==''
			?'>&nbsp;'
			:' style="border: 5px solid #fff"><span class="button" onclick="document.getElementById(\''
			+tbox+'\').value=\''+(''+y+(m<10?'0'+m:m)+(x<10?'0'+x:x))+'\'+'
			+'('
			+	'document.getElementById(\''+tbox+'_hours\').value.pad(2,\'0\')'
			+	'+document.getElementById(\''+tbox+'_minutes\').value.pad(2,\'0\')'
			+	'+document.getElementById(\''+tbox+'_seconds\').value.pad(2,\'0\')'
			+')'
			+';tounix(\''+tbox+'\');'
			+'this.parentNode.parentNode.parentNode.parentNode.parentNode.className=\'dropdown hide\'">'
			+frmtx+'</td>'
			);
		+	'</td>';
		if(((i)%7==0)&&(i<36))t+='</tr><tr align="center">';
		}
	document.getElementById(calbox).innerHTML = t+'</tr><tr>'
		+'<td align="left" colspan="2"><span class="button" onclick="opencal('+(y-1)+','+m+',\''+calbox+'\',\''+tbox+'\',0,\''+pair+'\')">&lt;&lt;</span></td>'
		+'<td align="left" colspan="2"><span class="button" onclick="opencal('+(y)+','+(m-1)+',\''+calbox+'\',\''+tbox+'\',0,\''+pair+'\')">&lt;</span></td>'
		+'<td align="left" colspan="2"><span class="button" onclick="opencal('+(y)+','+(m+1)+',\''+calbox+'\',\''+tbox+'\',0,\''+pair+'\')">&gt;</span></td>'
		+'<td align="right"><span class="button" onclick="opencal('+(y+1)+','+m+',\''+calbox+'\',\''+tbox+'\',0,\''+pair+'\')">&gt;&gt;</span></td>'
		+'</tr></table></div>';
	document.getElementById(calbox).className = "dropdown show";
	}


