//	written	by Claudio Rivetti 15/01/2006
//	last updated 15/01/2006
//	email :	claudio.rivetti@unipr.it

var	fixedX = -1			// x position (-1 if to appear below control)
var	fixedY = -1			// y position (-1 if to appear below control)

var closeText = "Chiudi"

var	pickerobj, ctlNow, hourPointer, minSelected, hourSelected;

var	PageLoaded=false
var	ie=document.all
var	dom=document.getElementById
var	ns4=document.layers

var	styleBorderRegular="1px solid #ffffff"
var	styleBorderSelected="1px solid #a0a0a0"
var	styleBgRegular="#ffffff"
var	styleBgSelected="#99CCFF"

if (dom) {
	document.write ("<div id='timepicker' style='z-index:+999;position:absolute;visibility:hidden;'><table cellspacing=0 style='font-family:verdana,arial;font-size:11px;border-width:1;border-style:solid;border-color:#a0a0a0;font-family:verdana,arial; font-size:11px' bgcolor='#ffffff'><tr bgcolor='#eeeeee'><td><table width=100% border=0><tr><td align=right><a title=" + closeText + " style='border:1px solid #999999;font-size:10px;padding-left:2px;padding-right:2px;color:#000000;background-color: #cccccc;text-decoration: none;' href='javascript:hideTimePicker()'>×</a></td></tr></table></td></tr><tr><td style='padding:5px' bgcolor=#ffffff><span id='tp_content'></span></td></tr>")		
	document.write ("</table></div>");
}


/* hides <select> and <applet> objects (for IE only) */
function tp_hideElement( elmID, overDiv )
{
  if( ie )
  {
	for( i = 0; i < document.all.tags( elmID ).length; i++ )
	{
	  obj = document.all.tags( elmID )[i];
	  if( !obj || !obj.offsetParent )
	  {
		continue;
	  }
  
	  // Find the element's offsetTop and offsetLeft relative to the BODY tag.
	  objLeft   = obj.offsetLeft;
	  objTop    = obj.offsetTop;
	  objParent = obj.offsetParent;
	  
	  while( objParent.tagName.toUpperCase() != "BODY" )
	  {
		objLeft  += objParent.offsetLeft;
		objTop   += objParent.offsetTop;
		objParent = objParent.offsetParent;
	  }
  
	  objHeight = obj.offsetHeight;
	  objWidth = obj.offsetWidth;
  
	  if(( overDiv.offsetLeft + overDiv.offsetWidth ) <= objLeft );
	  else if(( overDiv.offsetTop + overDiv.offsetHeight ) <= objTop );
	  else if( overDiv.offsetTop >= ( objTop + objHeight ));
	  else if( overDiv.offsetLeft >= ( objLeft + objWidth ));
	  else
	  {
		obj.style.visibility = "hidden";
	  }
	}
  }
}
 
/*
* unhides <select> and <applet> objects (for IE only)
*/
function tp_showElement( elmID )
{
  if( ie )
  {
	for( i = 0; i < document.all.tags( elmID ).length; i++ )
	{
	  obj = document.all.tags( elmID )[i];
	  
	  if( !obj || !obj.offsetParent )
	  {
		continue;
	  }
	
	  obj.style.visibility = "";
	}
  }
}


function padwithZero(num) {
	return (num	< 10)? '0' + num : num ;
}


function hideTimePicker()	{
	pickerobj.visibility="hidden"

	tp_showElement( 'SELECT' );
	tp_showElement( 'APPLET' );
}


function setHour(hour) {  

	if (hourSelected >= hourStart && hourSelected <= hourEnd)	{
		document.getElementById("hour"+ hourSelected).style.border=styleBorderRegular;			
		document.getElementById("hour"+ hourSelected).style.background=styleBgRegular;			
	}
	hourSelected = hour;
	document.getElementById("hour"+ hourSelected).style.border=styleBorderSelected;
	document.getElementById("hour"+ hourSelected).style.background=styleBgSelected;
	if (minSelected >= 0 && minSelected < 60) {
		min = padwithZero(minSelected);
	}
	else {
		min = '00';
	}
	ctlToPlaceValue_t.value=padwithZero(hourSelected) + ':' + min;
	ctlToPlaceValue_t.select();

}

function setMinutes(min) {  

	if (minSelected >= 0 && minSelected < 60) {
		document.getElementById("min"+ minSelected).style.border=styleBorderRegular;			
		document.getElementById("min"+ minSelected).style.background=styleBgRegular;			
	}
	minSelected = min;
	document.getElementById("min"+ minSelected).style.border=styleBorderSelected;
	document.getElementById("min"+ minSelected).style.background=styleBgSelected;
	if (hourSelected >= hourStart && hourSelected <= hourEnd)	{
		hour = padwithZero(hourSelected);
	}
	else {
		hour = '00';
	}
	ctlToPlaceValue_t.value= hour + ':' + padwithZero(minSelected);
	hideTimePicker();

}


function fixTime(field, hs, he, ms) {

	var tt, hh, mm, k,TT;
	
	tt=field.value.replace(/\.|,|;|-| /, ':');
	if (tt.match(':')) {
		TT=tt.split(':');
		hh = parseInt(TT[0],10);
		mm = parseInt(TT[1],10);
	}
	else {
		hh=parseInt(tt.substring(0, 2),10);
		mm=parseInt(tt.substring(2, 4),10);
	}

	if (hh > he) {
		hh=he
	}
	else if (hh>=hs && hh<=he) {
	}
	else {
		hh=hs;
	}
	if (mm % ms) {
		k=parseInt(mm/ms,10);
		if (mm/ms - k >= 0.5) {
			k++;
		}
		mm=ms*k;
	}
	else if ((mm % ms) == 0) {
	}
	else {
		mm=0;
	}
	if (mm >=60) {mm = 60 - ms;}
	if (mm<0) {mm=0;}

	hh=padwithZero(hh);
	mm=padwithZero(mm);
	if (field.value.length)	{
		field.value= hh + ':' + mm;
	}
}


/*** timepicker ***/

function constructTimePicker () {

	hourHTML =	"<table	border=0 cellpadding=1 cellspacing=1 style='font-family:verdana;font-size:11px;'><tr>"
	count=0;
	if (minStep == 1) {
		minBreak=12;
	}
	else {
		minBreak = parseInt((60/minStep)/2);
	}
	hourBreak = parseInt(((hourEnd-hourStart+1)/2)+0.5);

	for	( hourPointer=hourStart; hourPointer<=hourEnd; hourPointer++ )
	{
		count++;
		hourHTML += "<td align=right>"
		sStyle='border:' + styleBorderRegular + ';background:' + styleBgRegular;
		if ((hourPointer==hourSelected)) {
			sStyle='border:' + styleBorderSelected + ';background:' + styleBgSelected;
		}
		hourHTML += "<span id='hour" + hourPointer + "' style='"+sStyle+"'><a style='text-decoration:none;color:black;' href='javascript:setHour(" + hourPointer  +");'>&nbsp;" + padwithZero(hourPointer) + "&nbsp;</a></span></td>";
		if (count == hourBreak && count >= minBreak) { 
			hourHTML += "</tr><tr>" 
		}
	}
	hourHTML += "</table>"

	minHTML = "<table border=0 cellpadding=1 cellspacing=1 style='font-family:verdana;font-size:11px;'><tr>"
	count=0;
	for	( minPointer=0; minPointer<60; minPointer+=minStep)
	{
		count++;
		minHTML += "<td align=right>"
		sStyle='border:' + styleBorderRegular + ';background:' + styleBgRegular;
		if ((minPointer==minSelected)) {
			sStyle='border:' + styleBorderSelected + ';background:' + styleBgSelected;
		}
		minHTML += "<span id='min" + minPointer + "' style='"+sStyle+"'><a style='text-decoration:none;color:black;' href='javascript:setMinutes(" + minPointer + ");'>&nbsp;:" + padwithZero(minPointer) + "&nbsp;</a></span></td>";

		if ((count % minBreak)==0 && count >= hourBreak) { 
			minHTML += "</tr><tr>" 
		}
	}
	minHTML += "</table>"

	document.getElementById("tp_content").innerHTML   = hourHTML + "<hr size=1 noshade>" + minHTML;
}


function popUpTimePicker(ctl, ctltime, hs, he, ms) {
	var	leftpos=0
	var	toppos=0
	var ta;

	hourStart=hs || 0;
	hourEnd=he || 23;
	minStep=ms || 5;
	minSelected=0;
	hourSelected=0;

	fixTime(ctltime, hourStart, hourEnd, minStep);
	ctltime.select();

	if (!ns4) {
		pickerobj=(dom)?document.getElementById("timepicker").style : ie? document.all.timepicker : document.timepicker
		hideTimePicker()
		PageLoaded=true
	}

	if (PageLoaded)
	{
		if ( pickerobj.visibility ==	"hidden" ) {
			ctlToPlaceValue_t	= ctltime

			ta=ctltime.value.split(':');
			hourSelected = parseInt(ta[0],10);
			minSelected = parseInt(ta[1],10);

			aTag = ctl
			do {
				aTag = aTag.offsetParent;
				leftpos	+= aTag.offsetLeft;
				toppos += aTag.offsetTop;
			} while(aTag.tagName!="BODY");

			pickerobj.left =	fixedX==-1 ? ctl.offsetLeft	+ leftpos :	fixedX
			pickerobj.top = fixedY==-1 ?	ctl.offsetTop +	toppos + ctl.offsetHeight +	2 :	fixedY
			constructTimePicker ();
			pickerobj.visibility=(dom||ie)? "visible" : "show"

			tp_hideElement( 'SELECT', document.getElementById("timepicker") );
			tp_hideElement( 'APPLET', document.getElementById("timepicker") );			

		}
		else
		{
			hideTimePicker()
			if (ctlNow!=ctl) {popUpTimePicker(ctl, ctltime, hs, he, ms)}
		}
		ctlNow = ctl
	}
}

