// ************ DATE ******************************************

function setRange(obj, sStart, sEnd)
{
  if (obj.setSelectionRange)
  {
    obj.focus();
    obj.setSelectionRange(sStart, sEnd);
  }
  else if (obj.createTextRange)
  {
    var range = obj.createTextRange();
    range.collapse(true);
    range.moveEnd('character', sEnd);
    range.moveStart('character', sStart);
    range.select();
  }
}
	
function date_click(obj)
{
	var i = 0;
	 if (obj.createTextRange)
	 {
		var r = obj.createTextRange();
		var x= window.event.offsetX;
		r.collapse(false);
		
		for(var i=9;i>=0;i--)
		{
			r.move("character",-1);
			if (i!=2 && i!=5 && r.offsetLeft<=x) break;
		}
	}
	if(i<0) i = 0;
	setRange(obj, i, i+1);
	obj.pos = i;
}

function date_focus(obj)
{
	setRange(obj, 0, 1);
	obj.pos = 0;
}

function date_keydown(obj, evt)
{
	if (obj.createTextRange)
		return date_keydownIE(obj, evt);
	else
		return date_keydownNS(obj, evt);
}


function date_keydownIE(obj, evt)
{	
	switch (evt.keyCode)
	{
		case 9:	// TAB
			break;	
				
		case 35:	// END
			obj.pos=9;
			break;
		
		case 36:	// HOME
			obj.pos=0;
			break;
			
		case 37:	// <-
			if (obj.pos<1) return false;
			obj.pos-=(obj.pos==3 || obj.pos==6)?2:1;
			break;

		case 39:	// ->
			if (obj.pos>8) return false;
			obj.pos+=(obj.pos==1 || obj.pos==4)?2:1;
			break;	

		case 46:	// DEL
			obj.value = obj.value.substring(0,obj.pos)+"_"+obj.value.substring(obj.pos+1);
			if (obj.pos<9) obj.pos+=(obj.pos==1 || obj.pos==4)?2:1;
			return false;
			break;	

		case 8:	// BACK
			obj.value = obj.value.substring(0,obj.pos)+"_"+obj.value.substring(obj.pos+1);
			if (obj.pos>0) obj.pos-=(obj.pos==3 || obj.pos==6)?2:1;		
			return false;
			break;
			
		default:
			if (!((evt.keyCode > 47 && evt.keyCode < 58) || (evt.keyCode > 95 && evt.keyCode < 106))) return false;
	}

	return true;			
}

function date_keydownNS(obj, evt)
{
	return true;			
}


function date_keypress(obj, evt)
{
	if (obj.createTextRange)
		return date_keypressIE(obj, evt);
	else
		return date_keypressNS(obj, evt);
}

function date_keypressIE(obj, evt)
{	
	if (!((evt.keyCode > 47 && evt.keyCode < 58) || (evt.keyCode > 95 && evt.keyCode < 106))) return false;
	date_keyup(obj);
	if (obj.pos<9) obj.pos+=(obj.pos==1 || obj.pos==4)?2:1;
	
	return true;
}

function date_keypressNS(obj, evt)
{
	var key = (evt.keyCode == 0)?evt.which:evt.keyCode;
	switch (key)
	{
		case 9:	// TAB
			break;
				
		case 35:	// END
			obj.pos=9;
			return true;
			break;
		
		case 36:	// HOME
			obj.pos=0;
			return true;
			break;
			
		case 37:	// <-
			if (obj.pos<1) return false;
			obj.pos-=(obj.pos==3 || obj.pos==6)?2:1;
			return true;
			break;

		case 39:	// ->
			if (obj.pos>8) return false;
			obj.pos+=(obj.pos==1 || obj.pos==4)?2:1;
			return true;
			break;	

		case 46:	// DEL
			obj.value = obj.value.substring(0,obj.pos)+"_"+obj.value.substring(obj.pos+1);
			if (obj.pos<9) obj.pos+=(obj.pos==1 || obj.pos==4)?2:1;
			return false;
			break;	

		case 8:	// BACK
			obj.value = obj.value.substring(0,obj.pos)+"_"+obj.value.substring(obj.pos+1);
			if (obj.pos>0) obj.pos-=(obj.pos==3 || obj.pos==6)?2:1;		
			return false;
			break;
			
		default:
			if (!(key>47 && key<58)) return false;
	}	
	if (obj.pos<9) obj.pos+=(obj.pos==1 || obj.pos==4)?2:1;
	return true;
}

function date_keyup(obj)
{
	setRange(obj, obj.pos, obj.pos+1);
}

function date_blur(obj)
{
	if (obj.value=="" || obj.value=="__/__/____") return true;

	var str = obj.value.replace(/_/g,"");
	if (obj.getAttribute('dformat')=="MM/dd/yyyy")
	{
		var temp = new Date(str);
	}
	else
	{
		var t = str.split("/");
		var temp = new Date(t[1]+"/"+t[0]+"/"+t[2]);
	}

	if (isNaN(temp))
	{
		obj.value="__/__/____";
		alert(obj.getAttribute('msg'));
		return false;
	}
	
	obj.value=DateToString(temp, obj.getAttribute('dformat'));
	return true;
}

function digit2(val)
{
	return (val<10)?('0'+val):val;
}

function DateToString(d, f)
{
	if(f=="MM/dd/yyyy") return digit2(d.getMonth()+1)+'/'+digit2(d.getDate())+'/'+((d.getFullYear()<1930)?d.getFullYear()+100:d.getFullYear());
	if(f=="dd/MM/yyyy") return digit2(d.getDate())+'/'+digit2(d.getMonth()+1)+'/'+((d.getFullYear()<1930)?d.getFullYear()+100:d.getFullYear());
}


// ************ TIME ******************************************

function time_click(obj)
{
	var r = obj.createTextRange();
	var x= window.event.offsetX;
	r.collapse(false);
	
	for(var i=4;i>=0;i--)
	{
		r.move("character",-1);
		if (i!=2 && r.offsetLeft<=x) break;
	}
	
	obj.pos = i;
	r.expand("character");
	r.select();	
}

function time_focus(obj)
{
	var r = obj.createTextRange();
	r.collapse(true);	
	obj.pos = 0;
	r.expand("character");
	r.select();	
}

function time_keydown(obj)
{
	switch (event.keyCode)
	{
		case 9:	// TAB
			// check time format
			var aaa = obj.value.substring(0,1);
			var bbb = obj.value.substring(1,2);
			if( aaa == 2 && bbb > 3 )
				obj.value = obj.value.substring(0,1)+"_"+obj.value.substring(2);
			// end check
			break;	
				
		case 35:	// END
			obj.pos=4;
			// check time format
			var aaa = obj.value.substring(0,1);
			var bbb = obj.value.substring(1,2);
			if( aaa == 2 && bbb > 3 )
				obj.value = obj.value.substring(0,1)+"_"+obj.value.substring(2);
			// end check
			break;
		
		case 36:	// HOME
			obj.pos=0;
			// check time format
			var aaa = obj.value.substring(0,1);
			var bbb = obj.value.substring(1,2);
			if( aaa == 2 && bbb > 3 )
				obj.value = obj.value.substring(0,1)+"_"+obj.value.substring(2);
			// end check
			break;
			
		case 37:	// <-
			if (obj.pos<1) return false;
			obj.pos-=(obj.pos==3)?2:1;			
			// check time format
			var aaa = obj.value.substring(0,1);
			var bbb = obj.value.substring(1,2);
			if( aaa == 2 && bbb > 3 )
				obj.value = obj.value.substring(0,1)+"_"+obj.value.substring(2);
			// end check
			break;

		case 39:	// ->
			if (obj.pos>3) return false;
			obj.pos+=(obj.pos==1)?2:1;
			// check time format
			var aaa = obj.value.substring(0,1);
			var bbb = obj.value.substring(1,2);
			if( aaa == 2 && bbb > 3 )
				obj.value = obj.value.substring(0,1)+"_"+obj.value.substring(2);
			// end check
			break;	

		case 46:	// DEL
			obj.value = obj.value.substring(0,obj.pos)+"_"+obj.value.substring(obj.pos+1);
			if (obj.pos<4) obj.pos+=(obj.pos==1)?2:1;
			return false;
			// check time format
			var aaa = obj.value.substring(0,1);
			var bbb = obj.value.substring(1,2);
			if( aaa == 2 && bbb > 3 )
				obj.value = obj.value.substring(0,1)+"_"+obj.value.substring(2);
			// end check
			break;	

		case 8:	// BACK
			obj.value = obj.value.substring(0,obj.pos)+"_"+obj.value.substring(obj.pos+1);
			if (obj.pos>0) obj.pos-=(obj.pos==3)?2:1;		
				return false;
			// check time format
			var aaa = obj.value.substring(0,1);
			var bbb = obj.value.substring(1,2);
			if( aaa == 2 && bbb > 3 )
				obj.value = obj.value.substring(0,1)+"_"+obj.value.substring(2);
			// end check
			break;
			
		default:
			var hour_predicate_1 = obj.value.substring(0,1);
			var hour_predicate_2 = obj.value.substring(1,2);
			if (!((event.keyCode>47 && event.keyCode<58) || (event.keyCode>95 && event.keyCode<106))) return false;
			if ( obj.pos==0 && !( (event.keyCode > 47 && event.keyCode < 51) || (event.keyCode > 95 && event.keyCode < 99)) ) 
				return false;
			else
			{
				if(event.keyCode == 50 || event.keyCode == 98)
					obj.value = obj.value.substring(0,1)+"_"+obj.value.substring(2);
			}
			if ( obj.pos==3 && !( (event.keyCode > 47 && event.keyCode < 54) || (event.keyCode > 95 && event.keyCode < 102)) ) return false;
			if ( obj.pos==1 && hour_predicate_1==2 && !( (event.keyCode > 47 && event.keyCode < 52) || (event.keyCode > 95 && event.keyCode < 100)) ) return false;
	}

	return true;			
}

function time_keypress(obj)
{

	if (!((event.keyCode>47 && event.keyCode<58) || (event.keyCode>95 && event.keyCode<106))) return false;
	time_keyup(obj);
	if (obj.pos<4) obj.pos+=(obj.pos==1)?2:1;
}

function time_keyup(obj)
{
	var r = obj.createTextRange();
	r.collapse();
	r.move("character",obj.pos);
	r.expand("character");
	r.select();
}

function time_blur(obj)
{
	if (obj.value=="" || obj.value=="__:__") return true;

	var str = obj.value.replace(/_/g,"");	
	var t = str.split(":");
	var val = parseInt(t[0],10)*60+parseInt(t[1],10);
	if (isNaN(val))
	{
		obj.value="__:__";
		alert(obj.msg);
		return false;
	}
	obj.value=MinToTime(val);
	return true;
}


function MinToTime(val)
{
	return digit2((Math.floor(val/60))%24)+':'+digit2(val%60);
}

