function TEQLib_DateTimePicker(id,name){

	this.ID = id;
	this.Name = name;
	this.DisplayTextBoxClass = "TEQLib_DateTimePicker_Display";
	this.ToggleButtonClass = "TEQLib_DateTimePicker_Toggle";
	this.ToggleButtonText = "...";
	this.ShowCheckBox = 0;
	this.CheckBoxClass = "TEQLib_DateTimePicker_CheckBox";
	this.CalenderFrameTDClass = "TEQLib_DateTimePicker_Frame";
	this.CalenderHeaderTDClass = "TEQLib_DateTimePicker_Header";
	this.CalenderFooterTDClass = "TEQLib_DateTimePicker_Footer";
	this.CalenderItemTDClass = "TEQLib_DateTimePicker_Item";
	this.CalenderWeekDayLabelTDClass = "TEQLib_DateTimePicker_WeekDayLabel";
	this.CalenderSundayItemTDClass = "TEQLib_DateTimePicker_SundayItem";
	this.CalenderNowItemSpanClass = "TEQLib_DateTimePicker_NowItem";
	this.CalenderSelectedItemSpanClass = "TEQLib_DateTimePicker_SelectedItem";
	this.MonthDropDownListClass = "TEQLib_DateTimePicker_Month";
	this.YearDropDownListClass = "TEQLib_DateTimePicker_Year";
	this.HourDropDownListClass = "TEQLib_DateTimePicker_Hour";
	this.MinuteDropDownListClass = "TEQLib_DateTimePicker_Minute";
	this.AMPMDropDownListClass = "TEQLib_DateTimePicker_AMPM";
	this.Checked = 0;
	this.ShowTime = 0;
	this.ShowDate = 1;
	this.SelectedDate  = new Date();
	this.Now = new Date();

	this.GetHtml = GetHtml;
	function GetHtml(){
		var html = ""
		html += "<table border=0 cellspacing=0 cellpadding=0>";
		html += "	<tr valign=middle>";
		html += "		<td>";
		if( this.ShowCheckBox ){
			var chked = "";
			var chkval = "0";
			if( this.Checked ){ chked = "checked"; chkval = "1"; }			
			html += "			<input type=checkbox value=\"1\" "+chked+" id=\""+this.ID+"_chkbox\" onclick=\""+this.ID+".ToggleCheck();"+this.ID+".ToggleCheck();\" class=\""+this.CheckBoxClass+"\"><input type=hidden id=\""+this.ID+"_Checked\" name=\""+this.ID+"_Checked\" value="+chkval+">";
		}
		html += "<input type=text value=\"\" readonly id=\""+this.ID+"_Display\" name=\""+this.Name+"\" class=\""+this.DisplayTextBoxClass+"\">";
		html += "<input type=button value=\""+this.ToggleButtonText+"\" id=\""+this.ID+"_Display_ToggleButton\" name=\""+this.Name+"_ToggleButton\" class=\""+this.ToggleButtonClass+"\" onclick=\""+this.ID+".ToggleCalender();\">";
		//alert(html);
		html += "		</td>";
		html += "	</tr>";
		html += "	<tr>";
		html += "		<td id=\""+this.ID+"_CalenderTD\" class="+this.CalenderFrameTDClass+" style=\"visibility:hidden;\">";
		html += "			<div id=\""+this.ID+"_CalenderDIV\" style=\"height:1;overflow:hidden;visibility:hidden;\">";
		html += "			<table border=0 cellspacing=0 cellpadding=0>";
		
		if( this.ShowDate ){
		
		html += "				<tr valign=middle>";
		html += "					<td colspan=7 class=\""+this.CalenderHeaderTDClass+"\">";
		html += "						<select id=\""+this.ID+"_Month\" class=\""+this.MonthDropDownListClass+"\" onchange=\""+this.ID+".ReadDate();\">";
		for( var y=0; y<=11; y++ ){ //>
			html += "							<option value=\""+y+"\">"+this.FindMonthName(y)+"</option>";
		}
		html += "						</select>";
		html += "						<select id=\""+this.ID+"_Year\" class=\""+this.YearDropDownListClass+"\" onchange=\""+this.ID+".ReadDate();\">";
		for( var y=1900; y<=2999; y++ ){ //>
			html += "							<option value=\""+y+"\">"+y+"</option>";
		}
		html += "						</select>";
		html += "					</td>";
		html += "				</tr>";
		html += "				<tr valign=middle>";
		for( var j=0; j<=6; j++ ){ //>
			html += "					<td class=\""+this.CalenderWeekDayLabelTDClass+"\">";
			html += "						"+this.FindWeekDayName(j).substring(0,2);
			html += "					</td>";
		}
		html += "				</tr>";
		for( var i=0; i<=5; i++ ){ //>
			html += "				<tr valign=middle>";
			for( var j=0; j<=6; j++ ){ //>
				var tdclass = this.CalenderItemTDClass;
				if( j==0 ) tdclass = this.CalenderSundayItemTDClass;
				html += "					<input type=hidden id=\""+this.ID+"_Day_"+j+"_"+i+"_Value\" value=0>";
				html += "					<td class=\""+tdclass+"\" id=\""+this.ID+"_Day_"+j+"_"+i+"\" onclick=\""+this.ID+".SelectDay(this.id);\">";
				html += "					</td>";
			}
			html += "				</tr>";
		}

		} // if( this.ShowDate )
		if( this.ShowTime ){		
		
		html += "				<tr valign=middle>";
		html += "					<td colspan=7 class=\""+this.CalenderFooterTDClass+"\">";
		html += "						<select id=\""+this.ID+"_Hour\" class=\""+this.HourDropDownListClass+"\" onchange=\""+this.ID+".ReadDate();\">";
		for( var y=0; y<=12; y++ ){ //>
			html += "							<option value=\""+y+"\">"+y+"</option>";
		}
		html += "						</select> : ";
		html += "						<select id=\""+this.ID+"_Minute\" class=\""+this.MinuteDropDownListClass+"\" onchange=\""+this.ID+".ReadDate();\">";
		for( var y=0; y<=59; y++ ){ //>
			var y2 = y;
			if( y2<10 ) y2 = "0"+y; //>
			html += "							<option value=\""+y+"\">"+y2+"</option>";
		}
		html += "						</select>";
		html += "						<select id=\""+this.ID+"_AMPM\" class=\""+this.AMPMDropDownListClass+"\" onchange=\""+this.ID+".ReadDate();\">";
		html += "							<option value=\"AM\">AM</option>";
		html += "							<option value=\"PM\">PM</option>";
		html += "						</select>";
		html += "					</td>";
		html += "				</tr>";

		} // if( this.ShowTime )

		html += "			</table>";
		html += "			</div>";
		html += "		</td>";
		html += "	</tr>";
		html += "</table>";
		return html;
	}
	this.Write = Write;
	function Write(){
		document.write(this.GetHtml());
	}
	this.Check = Check;
	function Check(){
		document.all[this.ID+"_Checked"].value = "1";
		document.all[this.ID+"_chkbox"].checked = true;
	}
	this.Uncheck = Uncheck;
	function Uncheck(){
		document.all[this.ID+"_Checked"].value = "0";
		document.all[this.ID+"_chkbox"].checked = false;
	}
	this.ToggleCheck = ToggleCheck;
	function ToggleCheck(){
		if( document.all[this.ID+"_chkbox"].checked ) this.Uncheck();
		else this.Check();
	}
	this.ExpandCalender = ExpandCalender;
	function ExpandCalender(){
		document.all[this.ID+"_CalenderDIV"].style.overflow = "visible";
		document.all[this.ID+"_CalenderDIV"].style.visibility = "visible";
		document.all[this.ID+"_CalenderTD"].style.visibility = "visible";
		document.all[this.ID+"_CalenderDIV"].style.height = "100%";
	}
	this.ColapseCalender = ColapseCalender;
	function ColapseCalender(){
		document.all[this.ID+"_CalenderDIV"].style.overflow = "hidden";
		document.all[this.ID+"_CalenderDIV"].style.visibility = "hidden";
		document.all[this.ID+"_CalenderTD"].style.visibility = "hidden";
		document.all[this.ID+"_CalenderDIV"].style.height = "1";
		this.OnCollapse(this);
	}
	this.ToggleCalender = ToggleCalender;
	function ToggleCalender(){
		if( document.all[this.ID+"_CalenderDIV"].style.overflow=="hidden" ){
			this.ExpandCalender();
		}else{
			this.ColapseCalender();
		}
	}
	this.RefreshCalender = RefreshCalender;
	function RefreshCalender(){
	
		var month = this.SelectedDate.getMonth();
		if( this.ShowDate ) document.all[this.ID+"_Month"].value = month;

		var year = this.SelectedDate.getFullYear();
		if( this.ShowDate ) document.all[this.ID+"_Year"].value = year;

		var ampm = "AM";
		var hour = this.SelectedDate.getHours();
		if( hour==12 ){
			ampm = "PM";
		}
		if( hour>12 ){
			hour -= 12;
			ampm = "PM";
		}
		if( this.ShowTime ) document.all[this.ID+"_Hour"].value = hour;
		if( this.ShowTime ) document.all[this.ID+"_AMPM"].value = ampm;

		var minute = this.SelectedDate.getMinutes();
		if( this.ShowTime ) document.all[this.ID+"_Minute"].value = minute;

		var weekday = this.SelectedDate.getDay();

		var day = this.SelectedDate.getDate();

		var firstWeekDayofMonth = new Date(year,month,1,0,0,0,0).getDay();

		var prettyMinute = minute;
		if( prettyMinute<10 ) prettyMinute = "0"+prettyMinute;

		if( this.ShowDate && this.ShowTime )
			document.all[this.ID+"_Display"].value = day+" "+this.FindMonthName(month).substring(0,3)+" "+year+" ("+this.FindWeekDayName(weekday).substring(0,3)+") "+hour+":"+prettyMinute+" "+ampm;
		else if( this.ShowDate )
			document.all[this.ID+"_Display"].value = day+" "+this.FindMonthName(month).substring(0,3)+" "+year+" ("+this.FindWeekDayName(weekday).substring(0,3)+")";
		else if( this.ShowTime )
			document.all[this.ID+"_Display"].value = hour+":"+prettyMinute+" "+ampm;

		if( this.ShowDate ){
			var dayCount = -firstWeekDayofMonth+1;
			for( var i=0; i<=5; i++ ){ //>
				for( var j=0; j<=6; j++ ){ //>
					thisDate = new Date(year,month,dayCount,0,0,0,0);
					if( thisDate.getDate()==this.SelectedDate.getDate() && thisDate.getMonth()==this.SelectedDate.getMonth() ){
						document.all[this.ID+"_Day_"+j+"_"+i].innerHTML = "<span class=\""+this.CalenderSelectedItemSpanClass+"\">"+thisDate.getDate()+"</span>";
					}
					else if( thisDate.getDate()==this.Now.getDate() && thisDate.getMonth()==this.Now.getMonth() ){
						document.all[this.ID+"_Day_"+j+"_"+i].innerHTML = "<span class=\""+this.CalenderNowItemSpanClass+"\">"+thisDate.getDate()+"</span>";
					}else{
						document.all[this.ID+"_Day_"+j+"_"+i].innerHTML = thisDate.getDate();
					}
					document.all[this.ID+"_Day_"+j+"_"+i+"_Value"].value = dayCount;
					dayCount++;
				}
			}
		}
	}
	this.SelectDay = SelectDay;
	function SelectDay(id){
		var selected = this.SelectedDate;
		this.SelectedDate = new Date( selected.getFullYear(), selected.getMonth(), document.all[id+"_Value"].value, selected.getHours(), selected.getMinutes(), 0,0 );
		this.RefreshCalender();
		if( !this.ShowTime ) this.ToggleCalender();
		this.OnValueChanged(selected,this.SelectedDate)
	}
	this.ReadDate = ReadDate;
	function ReadDate(){
		var selected = this.SelectedDate;
		var hou = selected.getHours();
		if( this.ShowTime ) hou = document.all[this.ID+"_Hour"].value;
		var ampm = "AM";
		if( this.ShowTime ) ampm = document.all[this.ID+"_AMPM"].value;
		if( hou==0 ) ampm = "AM";
		if( ampm=="PM" && hou!=12 ) hou = hou-0+ 12;
		var minu = selected.getMinutes();
		if( this.ShowTime ) minu = document.all[this.ID+"_Minute"].value;
		var year = selected.getYear();
		if( this.ShowDate ) year = document.all[this.ID+"_Year"].value;
		var mon = selected.getMonth();
		if( this.ShowDate ) mon = document.all[this.ID+"_Month"].value;
		this.SelectedDate = new Date(
			year, mon,
			selected.getDate(),
			hou, minu, 0,0 );
		this.RefreshCalender();
		this.OnValueChanged(selected,this.SelectedDate)
	}
	this.FindWeekDayName = FindWeekDayName;
	function FindWeekDayName(num){
		switch(num){
			case 0: return "Sunday";
			case 1: return "Monday";
			case 2: return "Tuesday";
			case 3: return "Wednesday";
			case 4: return "Thusday";
			case 5: return "Friday";
			case 6: return "Saturday";
		}
	}
	this.FindMonthName = FindMonthName;
	function FindMonthName(num){
		switch(num){
			case 0: return "January";
			case 1: return "Febuary";
			case 2: return "March";
			case 3: return "April";
			case 4: return "May";
			case 5: return "Jun";
			case 6: return "July";
			case 7: return "August";
			case 8: return "September";
			case 9: return "October";
			case 10: return "November";
			case 11: return "December";
		}
	}
	this.OnValueChanged = OnValueChanged;
	function OnValueChanged(oriDate,newDate){
	}
	this.OnCollapse = OnCollapse;
	function OnCollapse(sender){
	}
}