// Title: Timestamp picker
// Description: See the demo at url
// URL: http://us.geocities.com/tspicker/
// Script featured on: http://javascriptkit.com/script/script2/timestamp.shtml
// Version: 1.0
// Date: 12-05-2001 (mm-dd-yyyy)
// Author: Denis Gritcyuk <denis@softcomplex.com>; <tspicker@yahoo.com>
// Notes: Permission given to use this script in any kind of applications if
//    header lines are left unchanged. Feel free to contact the author
//    for feature requests and/or donations

function init_input_calender(input, default_value)
{
	eval('temp = ' + input + '.value');
	
	if(temp == default_value)
	{
		eval(input + ".value = ''");
	}
}


function show_calendar(str_target, str_datetime,id_change,check,changetarget) {
	if (!(str_datetime == null || str_datetime =="" || str_datetime =="0000-00-00 00:00:00") )
	{
		str_datetime = changeDateFormatToBasicFormat(str_datetime);
	}
	if (id_change!='choose_start_date') document.getElementById('choose_start_date').style.display='none';
	if (id_change!='choose_end_date') document.getElementById('choose_end_date').style.display='none';
	if (id_change!='choose_start_date_map') document.getElementById('choose_start_date_map').style.display='none';
	if (id_change!='choose_end_date_map') document.getElementById('choose_end_date_map').style.display='none';
	if (id_change!='choose_start_date_advance') document.getElementById('choose_start_date_advance').style.display='none';
	if (id_change!='choose_end_date_advance') document.getElementById('choose_end_date_advance').style.display='none';
	
	if (changetarget != '')
	{
		var addClickEvent = ",createEndDate('" + str_target + "','" + changetarget + "')";
	}
	else
	{
		var addClickEvent = '';
	}
	
	if (check)
	{
		if (document.getElementById(id_change).style.display=='none')
		{
			document.getElementById(id_change).style.display='block'	
		}
		else
		{
			document.getElementById(id_change).style.display='none'	
		}
	}
	years_range = [2009, 2030];
	// Text
	if(typeof(months_name) == 'undefined')
		months_name = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
	if(typeof(weekdays_name) == 'undefined')
		weekdays_name = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"];	
	if(typeof(calendar_name) == 'undefined')	
		calendar_name = 'Calendar';
	if(typeof(time_name) == 'undefined')
		time_name = 'Time';
	if(typeof(invalid_datetime_format_name)== 'undefined')
		invalid_datetime_format_name = "Invalid datetime format";
		
	var arr_months = months_name;
	var week_days = weekdays_name;
	var calendar  = calendar_name;
	var time  	  = time_name;
	var invalid_datetime_format = invalid_datetime_format_name;
	
	var n_weekstart = 1; // day week starts from (normally 0 or 1)
	var dt_datetime = (str_datetime == null || str_datetime =="" || str_datetime =="0000-00-00 00:00:00") ?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);
	str_target_month = str_target.replace(/\'/g, "\\'");
	// html generation (feel free to tune it for your particular application)
	// print calendar header
	/*
	 *  Added by Thaib
	 *  Create options string for select months
	 *  To get current month: arr_months[dt_datetime.getMonth()]
	 *  To get crrent year  : dt_datetime.getFullYear()
	 */
	optionsMonths = "";
	currentDay   = dt_datetime.getDate(); 
	currentMonth = dt_datetime.getMonth();
	currentYear  = dt_datetime.getFullYear();
	
	thisDate = new Date();
	for(i=1; i<=months_name.length;i++)
	{		
		thisDate.setDate(currentDay);
		thisDate.setMonth(i-1);
		thisDate.setYear(currentYear);		
		if(currentMonth == (i-1)){
			optionsMonths += "<option value=\""+dt2dtstr(thisDate)+"\" selected>"+months_name[i-1]+"</option>\n";
		}
		else {
			optionsMonths += "<option value=\""+dt2dtstr(thisDate)+"\">"+months_name[i-1]+"</option>\n";	
		}
	}
	
	optionsYears = "";
	for(i=years_range[0]; i<=years_range[1];i++)
	{
		thisDate.setDate(currentDay);
		thisDate.setMonth(currentMonth);
		thisDate.setYear(i);
		if(currentYear == i){
			optionsYears += "<option value=\""+dt2dtstr(thisDate)+"\" selected>"+i+"</option>\n";
		}		
		else {
			optionsYears += "<option value=\""+dt2dtstr(thisDate)+"\">"+i+"</option>\n";
		}
	}
	
	var str_buffer = new String (
		"<table class=\"clsOTable\" cellspacing=\"0\" border=\"0\" width=\"200\"  height =\"0\">\n"+
		"<tr><td bgcolor=\"#4682B4\" valign=\"top\">\n"+
		"<table cellspacing=\"1\" cellpadding=\"3\" border=\"0\" width=\"100%\">\n"+
		"<tr>\n	<td bgcolor=\"#4682B4\"><a href=\"javascript:show_calendar('"+
		str_target_month+"', \'"+ dt2dtstr(dt_prev_month)+"', \'"+id_change+"\' );\">"+
		"<img src=\"/skins/images/prev.gif\" width=\"16\" height=\"16\" border=\"0\""+
		" alt=\"previous month\"></a></td>\n"+
		
		// Edited by Thaib, add selectbox to select year and month
		"	<td bgcolor=\"#4682B4\" colspan=\"5\">"+
		"		<select onchange=\"javascript:show_calendar('"+str_target_month+"', this.value, \'"+id_change+"\' );\" style=\"width:82px\">"+
					optionsMonths+
		"		</select>"+
		"		<select onchange=\"javascript:show_calendar('"+str_target_month+"', this.value, \'"+id_change+"\' );\" style=\"width:55px\">"+
					optionsYears+
		"		</select>"+		
		"	</td>\n"+
		
		"	<td bgcolor=\"#4682B4\" align=\"right\"><a href=\"javascript:show_calendar('"
		+str_target_month+"', '"+dt2dtstr(dt_next_month)+"', \'"+id_change+"\' );\">"+
		"<img src=\"/skins/images/next.gif\" width=\"16\" height=\"16\" border=\"0\""+
		" alt=\"next month\"></a></td>\n</tr>\n"
	);

	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=\"#87CEFA\">"+
		"<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\" width=\"14%\">";
				else if (dt_current_day.getDay() == 0 || dt_current_day.getDay() == 6)
					// weekend days
					str_buffer += "	<td bgcolor=\"#DBEAF5\" align=\"right\" width=\"14%\">";
				else
					// print working days of current month
					str_buffer += "	<td bgcolor=\"white\" align=\"right\" width=\"14%\">";

				if (dt_current_day.getMonth() == dt_datetime.getMonth())
					// print days of current month
					str_buffer += "<a id='current_month' style='cursor:pointer' onclick=\"javascript:"+str_target+
					".value='"+dt2dtstr(dt_current_day)+" ';"+
					"document.getElementById('"+id_change+"').style.display='none'"
					+addClickEvent
					+";\">"+
					"<font color=\"black\" face=\"tahoma, verdana\" size=\"2\">";
				else 
					// print days of other months
					str_buffer += "<a id='other_month' style='cursor:pointer' onclick=\"javascript:"+str_target+
					".value='"+dt2dtstr(dt_current_day)+" ';"+
					"document.getElementById('"+id_change+"').style.display='none'"
					+addClickEvent
					+";\">"+
					"<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 +=
	
		"<input  type=\"hidden\" name=\"time\" id=\"timeInput\"   value=\""+dt2tmstr(dt_datetime)+"\" />"
		"</table>\n" +
		"</tr>\n</td>\n</table>\n" 
		;

//	var vWinCal = window.open("", calendar, 
//		"width=200,height=250,status=no,resizable=yes,top=200,left=200");
//	vWinCal.opener = self;
//	var calc_doc = vWinCal.document;
//	calc_doc.write (str_buffer);
//	calc_doc.close();
	document.getElementById(id_change).innerHTML= str_buffer;
}
// datetime parsing and formatting routimes. modify them if you wish other datetime format
function str2dt (str_datetime) {
	str_datetime += " ";
	var re_date = /^(\d+)\-(\d+)\-(\d+)[\s+(\d+)\:(\d+)\:(\d+)]/;
	
	if (!re_date.exec(str_datetime))
		return alert(invalid_datetime_format + ": "+ str_datetime);
	return (new Date (RegExp.$1, RegExp.$2-1, RegExp.$3, RegExp.$4, RegExp.$5, RegExp.$6));
}
function dt2dtstr (dt_datetime) 
{
	//return (new String (dt_datetime.getDate()+"-"+(dt_datetime.getMonth()+1)+"-"+dt_datetime.getFullYear()+" "));
	month = dt_datetime.getMonth()+1;
	if(month < 10)
	{
		month += '';
		month = '0' + month;
	}
	day = dt_datetime.getDate();
	if(day < 10)
	{
		day += '';
		day = '0' + day;
	}	
	return (new String (day+"-"+month+"-"+dt_datetime.getFullYear()));
}

function dt2tmstr (dt_datetime) {
	hour = dt_datetime.getHours();
	minute = dt_datetime.getMinutes();
	second = dt_datetime.getSeconds();
	if(hour < 10)
	{
		hour += '';
		hour = '0' + hour;
	}
	if(minute < 10)
	{
		minute += '';
		minute = '0' + minute;	
	}
	if(second < 10)
	{
		second += '';
		second = '0' + second;
	}
	
	return (new String ('00'+":"+'00'+":"+'00'));
}


function changeDateFormatToBasicFormat(date)
{
	if (date.substr(4,1) != "-")
	{
		var day= date.substr(0,2);
		var month= date.substr(3,2);
		var year= date.substr(6,4);
		return (new String (year+"-"+month+"-"+day));
	}
	return date;
}
function changeDateFormatToEuropeFormat(date)
{
	var day = date.substr(8,2);
	var month= date.substr(5,2);
	var year= date.substr(0,4);
	return (new String (day+"-"+month+"-"+year));
}

function changeAllDateFormatBecomeBasicFormat(str_target1,str_target2,start_date_should_be_larger_than_now,end_date_should_be_larger_start_date)
{
	var dateObject = new Date();
	var dateNow = changeDateFormatToBasicFormat(dt2dtstr(dateObject));
	eval('startDate = ' + str_target1 + '.value');
	startDate = changeDateFormatToBasicFormat(startDate);
	eval('endDate = ' + str_target2 + '.value');
	endDate = changeDateFormatToBasicFormat(endDate)
	if (startDate <= dateNow)
	{
		alert(start_date_should_be_larger_than_now);
		return false;
	}
	if (endDate <= startDate)
	{
		alert(end_date_should_be_larger_start_date);
		return false;
	}
	
	eval(str_target1+ '.value= '+"'" +startDate+"'")
	eval(str_target2+ '.value= '+"'" +endDate+"'")
	return true;
}
function createEndDate(startDateTarget,endDateTarget)
{
	var tempStartDate;
	eval ('tempStartDate = ' + startDateTarget + ".value")
	var d = parseInt(tempStartDate.substr(0,20),10);
	var m = parseInt(tempStartDate.substr(3,2),10);
	var y = parseInt(tempStartDate.substr(6,4),10);
	var endDate= new Date(y, m-1, d+1);
	var eDate;
	var endDay = endDate.getDate();
	if (endDay <10) eDate = '0' + endDay+'-';
			else eDate =endDay+'-'
	var endMonth = endDate.getMonth()+1
	if (endMonth <10) eDate =eDate+ '0' +endMonth+'-';
			else eDate =eDate + endMonth+'-'
	var endYear = endDate.getFullYear();
	eDate = eDate + endYear;
	eval (endDateTarget + ".value = eDate");
}