// Title: Timestamp picker
var objRefCurr;
function showCalendar(objRef) 
{
	objRefCurr=objRef;
	show_calendar("document.getElementById('"+objRef.id+"')", objRef.value);
}
function show_calendar(str_target, str_datetime) {
	try {
		//alert(str_target);
		if (eval(str_target).readOnly==true || eval(str_target).disabled==true)
			return;
		var arr_months = ["January", "February", "March", "April", "May", "June",
			"July", "August", "September", "October", "November", "December"];
		var week_days = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"];
		var n_weekstart = 1; // day week starts from (normally 0 or 1)
		
		
		var dt_datetime = (str_datetime == null || str_datetime =="" ?  new Date() : str2dt(str_datetime));
		var dt_prev_month = new Date(dt_datetime);
		dt_prev_month.setMonth(dt_datetime.getMonth()-1);
		var dt_next_month = new Date(dt_datetime);
		dt_next_month.setMonth(dt_datetime.getMonth()+1);
		var dt_firstday = new Date(dt_datetime);
		dt_firstday.setDate(1);
		dt_firstday.setDate(1-(7+dt_firstday.getDay()-n_weekstart)%7);
		var dt_lastday = new Date(dt_next_month);
		dt_lastday.setDate(0);
		
		// html generation (feel free to tune it for your particular application)
		// print calendar header
		var str_buffer = new String ();

		str_buffer = "<html>\n"+
			"<head>\n"+
			"	<title>Calendar</title>\n"+
			"</head>\n"+
			"<body bgcolor=\"White\">\n"+
			"<table class=\"clsOTable\" cellspacing=\"0\" border=\"0\" width=\"100%\">\n"+
			"<tr><td bgcolor=\"DBEAF5\">\n"+
			"<table cellspacing=\"1\" cellpadding=\"3\" border=\"0\" width=\"100%\">\n";
			
			if (str_target.indexOf("document.getElementById(") < 0) 
			{
				str_buffer += "<tr>\n	<td bgcolor=\"#DBEAF5\"><a href=\"javascript:window.opener.show_calendar('"+
				str_target+"', '"+ dt2dtstr(dt_prev_month)+"');\">";
			}
			else 
			{
				str_buffer += "<tr>\n	<td bgcolor=\"#DBEAF5\"><a href='#' onclick=\"window.opener.show_calendar('document.forms[0]."+replaceAll(objRefCurr.name,":","_")+"', '"+dt2dtstr(dt_prev_month)+"')\">";
			}
			
			str_buffer += "<img src=\"../presentation/images/cal_prev.gif\" width=\"16\" height=\"16\" border=\"0\""+
			" alt=\"previous month\"></a></td>\n"+
			"	<td bgcolor=\"#DBEAF5\" colspan=\"5\">"+
			"<font color=\"black\" face=\"tahoma, verdana\" size=\"2\">"
			+arr_months[dt_datetime.getMonth()]+" "+dt_datetime.getFullYear()+"</font></td>\n";
			
			if (str_target.indexOf("document.getElementById(") < 0) 
			{
				str_buffer += "	<td bgcolor=\"#DBEAF5\" align=\"right\"><a href=\"javascript:window.opener.show_calendar('"+str_target+"', '"+dt2dtstr(dt_next_month)+"');\">";
			}
			else 
			{
				str_buffer += "	<td bgcolor=\"#DBEAF5\" align=\"right\"><a href='#' onclick=\"window.opener.show_calendar('document.forms[0]."+replaceAll(objRefCurr.name,":","_")+"', '"+dt2dtstr(dt_next_month)+"');\">";
			}
			
			str_buffer += "<img src=\"../presentation/images/cal_next.gif\" width=\"16\" height=\"16\" border=\"0\""+
			" alt=\"next month\"></a></td>\n</tr>\n"
		//str_buffer=replaceAll(str_buffer,":","_");
		//alert(str_buffer);
		var dt_current_day = new Date(dt_firstday);
		// print weekdays titles
		str_buffer += "<tr>\n";
		for (var n=0; n<7; n++)
			str_buffer += "	<td bgcolor=\"#C0C0C0\">"+
			"<font color=\"white\" face=\"tahoma, verdana\" size=\"2\">"+
			week_days[(n_weekstart+n)%7]+"</font></td>\n";
		// print calendar table
		str_buffer += "</tr>\n";
		while (dt_current_day.getMonth() == dt_datetime.getMonth() ||
			dt_current_day.getMonth() == dt_firstday.getMonth()) {
			// print row heder
			str_buffer += "<tr>\n";
			for (var n_current_wday=0; n_current_wday<7; n_current_wday++) {
					if (dt_current_day.getDate() == dt_datetime.getDate() &&
						dt_current_day.getMonth() == dt_datetime.getMonth())
						// print current date
						str_buffer += "	<td bgcolor=\"#FFB6C1\" align=\"right\">";
					else if (dt_current_day.getDay() == 0 || dt_current_day.getDay() == 6)
						// weekend days
						str_buffer += "	<td bgcolor=\"#DBEAF5\" align=\"right\">";
					else
						// print working days of current month
						str_buffer += "	<td bgcolor=\"white\" align=\"right\">";

					if (dt_current_day.getMonth() == dt_datetime.getMonth())
						// print days of current month
						str_buffer += "<a href=\"javascript:window.opener."+str_target+
						".value='"+dt2dtstr(dt_current_day)+"';window.opener."+str_target+".focus();valueChanged=false;window.close();\">"+
						"<font color=\"black\" face=\"tahoma, verdana\" size=\"2\">";
					else 
						// print days of other months
						str_buffer += "<a href=\"javascript:window.opener."+str_target+
						".value='"+dt2dtstr(dt_current_day)+"';window.opener."+str_target+".focus();valueChanged=false;window.close();\">"+
						"<font color=\"gray\" face=\"tahoma, verdana\" size=\"2\">";
					str_buffer += dt_current_day.getDate()+"</font></a></td>\n";
					dt_current_day.setDate(dt_current_day.getDate()+1);
			}
			// print row footer
			str_buffer += "</tr>\n";
		}
		// print calendar footer
		str_buffer +=
			"</table>\n" +
			"</tr>\n</td>\n</table>\n" +
			"</body>\n" +
			"</html>\n";

		//str_buffer=replaceAll(str_buffer,":","_");
		str_buffer=replaceAll(str_buffer,"javascript_","javascript:");
		
		//alert(str_buffer);
		
		var vWinCal = window.open("", "Calendar", 
			"width=200,height=200,status=no,resizable=yes,top=200,left=200");
		vWinCal.opener = self;
		var calc_doc = vWinCal.document;
		calc_doc.write (str_buffer);
		calc_doc.close();
	}
	catch(exception) 
	{
		alert(exception)
	}
}
// datetime parsing and formatting routimes. modify them if you wish other datetime format
function str2dt (str_datetime) {
	var re_date = /^(\d+)\/(\d+)\/(\d+)/;
	if (!re_date.exec(str_datetime))
		return alert("Invalid Datetime format: "+ str_datetime);
	return (new Date (str_datetime));
}
function dt2dtstr (dt_datetime) {
	return (new String (
			(dt_datetime.getMonth()+1)+"/"+(dt_datetime.getDate())+"/"+dt_datetime.getFullYear()+""));
}
function dt2tmstr (dt_datetime) {
	return (new String (
			dt_datetime.getHours()+":"+dt_datetime.getMinutes()+":"+dt_datetime.getSeconds()));
}
function formatDate(obj)
{
  try {
	var sep="";
	if (obj.value.indexOf("/")!=-1)
		sep="/";
	else if (obj.value.indexOf("-")!=-1)
		sep="-";
	if (sep=="" && obj.value.length==8) {
		obj.value=obj.value.substring(0,2)+"/"+obj.value.substring(2,4)+"/"+obj.value.substring(4,8);
	}
  }
  catch (exception) {
  }
}
function replaceAll(str,f,r) {
	while (str.indexOf(f)!=-1)
		str=str.replace(f,r);
	return str;
}
