function DTGetMainPanel(o)
{
	var pan = o; while(pan.getAttribute("c_token")!="MainDatePanel")pan=pan.parentNode;
	return pan;
}

//----------------------------------------------------------- 
//... DTSelectDate
//----------------------------------------------------------- 
function DTSelectDate(o,_mode,_prefix)
{
	if (o.getAttribute("v_enabled")!="y") return;
	
	var _args = new Function();
	var pan, cText, clientID;
	if (_mode=="DatePicker")
	{
		pan = DTGetMainPanel(o);//o; while(pan.c_token!="MainDatePanel")pan=pan.parentElement;
		clientID	= pan.getAttribute("c_clientID");
		cText		= document.getElementById(clientID+"_date");
		// pan.all(clientID+"_date");
		
		var ss = "";try{ss=cText.value;}catch(e){}
		var arr = ss.split("/");
		try{_args.Month	= arr[0]; }catch(e){}
		try{_args.Day	= arr[1]; }catch(e){}
		try{_args.Year	= arr[2]; }catch(e){}
	}
	var url = location.protocol + "//" + location.host + "/Panels/SelectDate/default.aspx";
	if (window.showModalDialog( url, _args, "dialogWidth:300px; dialogHeight:300px; help:no; status:no; resizable:no; scroll:no;" ))
	{
		if (_mode=="DatePicker")
		{
			if (pan.c_formatView == "Standard")
			{
				try{ document.getElementById(clientID+"_day").value				= _args.Day;	}catch(e){}
				try{ document.getElementById(clientID+"_month").selectedIndex	= _args.Month-1;}catch(e){}
				try{ document.getElementById(clientID+"_year").value			= _args.Year;	}catch(e){}
				DTItemChanged(document.getElementById(clientID+"_month"));
			}
			else
			{
				cText.value = _args.Month + "/" + _args.Day + "/" + _args.Year;
				var cPan = document.getElementById(clientID+"_panFormatView_Textual");
				cPan.obj.Init();
			}
		}
		else (_mode=="Property")
		{
		}
		return _args;
	}
	return null;
}
//----------------------------------------------------------- 
//... DTItemChanged
//----------------------------------------------------------- 
function DTItemChanged(_o)
{
	var pan = DTGetMainPanel(_o);
	var clientID = pan.getAttribute("c_clientID");
	var _cont=pan;//_o;while(_cont.__type!="DateTime")_cont=_cont.parentElement;
	var _yearMin=_cont.getAttribute("__yearMin");if(_yearMin!=null)_yearMin=1*_yearMin;
	var _yearMax=_cont.getAttribute("__yearMax");if(_yearMax!=null)_yearMax=1*_yearMax;
	var _ok=false,_v; //,_maxYear=(new Date()).getYear()+5;
	var _type = _o.getAttribute("__type");
	
	if (_type!="Month" && isNaN(_o.value))
	{
		alert("Numeric value required for " + _type);
	}
	else if (_o.value!="")
	{
		_v=1*_o.value;
		if (_type == "Day")
		{
			if(_v<1 || _v>31)
				alert("Day should be in range 1-31");
			else
			{
				_ok=true;
			}
		}
		else if (_type == "Month")
			_ok=true;
		else if (_type == "Year")
		{
			if(_yearMin!=null && _v<_yearMin)alert("Year should be greater then " + _yearMin);
			else if(_yearMax!=null && _v>_yearMax)alert("Year should be less then " + _yearMax);
			//if(_v<1900 || _v>_maxYear)
			//	alert("Year should be in range 1900-" + _maxYear);
			else
				_ok=true;
		}
		else if (_type == "Hour")
		{
			//var _par = _o.parentNode;
			var _par=_o;while(_par.tagName!="TABLE")_par=_par.parentNode;

			//var _sel = null;try{_sel=_o.parentNode.getElementsByTagName("SELECT")[0];}catch(e){}
			var _sel = null;try{_sel=_par.getElementsByTagName("SELECT")[0];}catch(e){}
			
			if(_sel!=null){
				if(_v<1 || _v>12)alert("Hour should be in range 1-12");	else	_ok=true;
			}
			else{
				if(_v<0 || _v>23)alert("Hour should be in range 0-23");	else	_ok=true;
			}
		}
		else if (_type == "Minute" || _type == "Second")
		{
			if (_v<0 || _v>59)
				alert(_type + " should be in range 0-59");
			else
				_ok=true;
		}
	}
	else
		_ok=true;
	
	
	if(!_ok)
	{
		try{ _o.click(); }catch(e){}
		try{ _o.focus(); }catch(e){}
		try{ _o.select();}catch(e){}
		//_o.focus();
		//_o.select();
		//_o.click();
	}
	else
	{
		var _e=_o;while(_e.getAttribute("__type")!="DateTime")_e=_e.parentNode;
		var _d,_mm,_dd,_yy,_th,_tm,_ts,_pmam,_vd;
		var _a=_e.getElementsByTagName("INPUT");
		
		for(var i1=0; i1<_a.length; i1++)
		{
			_o2=_a[i1];
			var _t = _o2.getAttribute("__type");
			if		(_t=="Day")		_dd=_o2;
			//else if (_t=="Month")	_mm=_o2.selectedIndex+1;
			else if (_t=="Year")	_yy=_o2;
			else if (_t=="Hour")	_th=_o2;
			else if (_t=="Minute")	_tm=_o2;
			else if (_t=="Second")	_ts=_o2;
			else if (_t=="Date")	_vd=_o2;
		}
		_a=_e.getElementsByTagName("SELECT");
		for(var i1=0; i1<_a.length; i1++)
		{
			_o2=_a[i1];
			var _t = _o2.getAttribute("__type");
			if (_t=="Month")	_mm=_o2.selectedIndex+1;
		}

		try
		{
			if (_th.value=="")
			{
				_tm.value = "";
				_ts.value = "";
			}
		}catch(e){}
		
		if (_type=="Hour" || _type=="Minute" || _type=="Second")return;

		var vDay, vMonth, vYear;
		vDay	= _dd==null ? 1 : _dd.value;
		vMonth	= _mm==null ? 1 : _mm;
		vYear	= _yy==null ? 2008 : _yy.value;
		if(vYear=="" && vDay=="")
			_vd.value = "";
		else
		{
			_vd.value = vMonth + "/" + vDay + "/" + vYear;
		}
		
//alert(_vd.value);

		if(vYear!="" && vDay!="")
		{
			_vd.blur();
			//_vd.fireEvent("onchange");
		}

//alert(_vd.value);// + "     " + _vd.onchange);
	}

	try{ event.cancelBubble	= true;}catch(e){}
	try{ event.returnValue	= _ok;}catch(e){}

	return _ok;
}


//------------------------------------------------------------------
//--- Textual View
//------------------------------------------------------------------
//------------------------------------------------------------------
//------------------------------------------------------------------
function DT_Textual(clientID)
{
	this.clientID	= clientID;
	this.cText		= document.getElementById(clientID+"_date");
	this.cPan		= document.getElementById(clientID+"_panFormatView_Textual");
	this.cPan.obj	= this;
	this.enabled	= document.getElementById(clientID+"_hidEnabled").value=="y";
	this.showDay	= true;
	this.showMonth	= true;
	this.showYear	= true;
}
//------------------------------------------------------------------
function DT_Textual_Init(clientID, showDay, showMonth, showYear)
{
	var tb = new DT_Textual(clientID);
	tb.showDay	= showDay==null || showDay==true || showDay=="y";
	tb.showMonth= showMonth==null || showMonth==true || showMonth=="y";
	tb.showYear	= showYear==null || showYear==true || showYear=="y";

	tb.Init();
}
//------------------------------------------------------------------
DT_Textual.prototype.Init=function()
{
	var ss = "";try{ss=this.cText.value;}catch(e){}
	var arr = ss.split("/");
	var valM="", valD="", valY="";
	if (this.showDay==false) valD="01";
	this.arrM = new Array();
	this.arrD = new Array();
	this.arrY = new Array();
	
	try{valM = arr[0]; if(valM.length==1)valM="0"+valM;}catch(e){}
	try{valD = arr[1]; if(valD.length==1)valD="0"+valD;}catch(e){}
	try{valY = arr[2];}catch(e){}
	
	var a = this.cPan.getElementsByTagName("INPUT");
	for(var j=0; j<a.length; j++)
	{
		var o = a[j];
		if (o.tagName=="INPUT" && o.type=="text")
		{
			o.onkeyup = DT_Textual_PressKey;
			o.disabled = !this.enabled;
			var ct = o.getAttribute("c_t");
			if (ct == "M")
			{
				try{o.value = valM.substr(this.arrM.length,1);}catch(e){}
				o.setAttribute("c_ind", this.arrM.length);
				this.arrM.push(o);
			}
			else if (ct == "D")
			{
				try{o.value = valD.substr(this.arrD.length,1);}catch(e){}
				o.setAttribute("c_ind", this.arrD.length);
				this.arrD.push(o);
			}
			else if (ct == "Y")
			{
				try{o.value = valY.substr(this.arrY.length,1);}catch(e){}
				o.setAttribute("c_ind", this.arrY.length);
				this.arrY.push(o);
			}
		}
	}
}
//------------------------------------------------------------------
function DT_Textual_PressKey(e)
{
	//::::::::::::::::::::::::::::: IE, NC, FF, Opera, Safari, IE(Mac)
	var ev = (e) ? e : window.event;
	var k = (ev.keyCode) ? ev.keyCode : ev.which;
	var o = (ev.srcElement) ? ev.srcElement : ev.target;
	if (o.nodeType == 3) o = o.parentNode;	// defeat Safari bug
	//:::::::::::::::::::::::::::::
	
	var ind=1*o.getAttribute("c_ind");
	var t = o.getAttribute("c_t");
	var c=o;while(c.getAttribute("c_token")!="DateTime_Textual")c=c.parentNode;
	var arr = eval("c.obj.arr"+t);
	var arr2 = arr;
	var moveCursor = false;

	if (k != null)
	{
		try
		{
			if (		k==39	//...arrow Right
					||	k==48	//...arrow Down
					||	k==34	//...PgDn
					)	
			{
				if (ind<arr.length-1)
				{
					ind++;
					moveCursor = true;
				}
				else if (t!="Y")
				{
					arr2 = t=="M" ? c.obj.arrD : c.obj.arrY;
					ind = 0;
					moveCursor = true;
				}
			}
			else if (	k==37	//...arrow Left
					||	k==38	//...arrow Up
					||	k==33	//...PgUp
					)
			{
				if (ind>0)
				{
					ind--;
					moveCursor = true;
				}
				else if (t!="M")
				{
					arr2 = t=="D" ? c.obj.arrM : c.obj.arrD;
					ind = arr2.length-1;
					moveCursor = true;
				}
			}
			else if (	k==36)	//...Home
			{
				arr2 = c.obj.arrM;
				ind = 0;
				moveCursor = true;
			}
			else if (	k==35)	//...End
			{
				arr2 = c.obj.arrY;
				ind = arr2.length-1;
				moveCursor = true;
			}
		//	else if (	k==8)	//...Backspace
		//	{
		//		ind=arr.length-1;
		//		moveCursor = true;
		//	}
			else if (	k==45)	//...Insert
			{
				for (var j=arr.length-2; j>=ind; j--)
				{
					arr[j+1].value = arr[j].value;
				}
				arr[ind].value = "";
				moveCursor = true;
			}
			else if (	k==46)	//...Delete
			{
				if (o.value.length == 0)
				{
					for (var j=ind+1; j<arr.length; j++)
					{
						arr[j-1].value = arr[j].value;
					}
					arr[arr.length-1].value = "";
					moveCursor = true;
				}
			}
			else 
			{
				if (o.value.length==1)
				{
					if (ind<(arr.length-1))
						ind++;
					else if (t!="Y")
					{
						arr2 = t=="M" ? c.obj.arrD : c.obj.arrY;
						ind = 0;
					}
					moveCursor = true;
				}
			}
		}
		catch(e){}
	}
	
	//...update text value	
	if (c.obj.cText != null)
	{
		var a,m="",d="",y="",ss="";
		a = c.obj.arrM;	for(var j=0; j<a.length; j++) if(a[j].value!="/" || a[j].value!=" ") m+=a[j].value;
		if (c.obj.showDay)
		{
			a = c.obj.arrD;	for(var j=0; j<a.length; j++) if(a[j].value!="/" || a[j].value!=" ") d+=a[j].value;
		}
		else
		{
			d = "01";
		}
		a = c.obj.arrY;	for(var j=0; j<a.length; j++) if(a[j].value!="/" || a[j].value!=" ") y+=a[j].value;

//alert("@" + m  + "#" + d + "#" + y + "!" + isNaN(m));
		
		if (isNaN(m) || m==" " || m=="  ")m="";
		if (isNaN(d) || d==" " || d=="  ")d="";
		if (isNaN(y) || y==" " || y=="  " || y=="   " || y=="    ")y="";
		
//		try{ var nn=1*m; }catch(e){m="";}
//		try{ var nn=1*d; }catch(e){d="";}
//		try{ var nn=1*y; }catch(e){y="";}
		
		if (m!="" || d!="" || y!="")
			ss = m + "/" + d + "/" + y;
//alert("@" + m  + "#" + ss + "#");
		//...set textBox value and rise event for validators	
		c.obj.cText.value = ss;
		c.obj.cText.blur();
		//c.obj.cText.fireEvent("onchange");
	}
	
	try{ o.click(); }catch(e){}
    try{ o.focus(); }catch(e){}
	
	//...move cursor if needed
	if (moveCursor)
	{
	    try{
		    o = arr2[ind];
	    	o.focus();
    		o.select();
		}catch(e){}
	}
}
