/* 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
*/

/**Drag Div Functions **/
N = (document.all) ? 0 : 1;
var dragObj;
var over = false;
var dragObjid;
var X, Y;
var dragObjpositions;
var dragObjOriginalPositions = new Array();
var moveFrame = false;
function MD(e) {
	if (over){
		dragObj = document.getElementById(dragObjid);
		var shimFrame = document.getElementById(dragObjid +'Shim');
		if(moveFrame && shimFrame != null){
			shimFrame.style.width = dragObj.offsetWidth;
		    shimFrame.style.height = dragObj.offsetHeight;
		    shimFrame.style.top = dragObj.style.top;
		    shimFrame.style.left = dragObj.style.left;
		    shimFrame.style.zIndex = dragObj.style.zIndex - 1;
		    shimFrame.style.display = "block";
		}
		if(dragObj != null){
			if(dragObjOriginalPositions[dragObjid] == null){
				dragObjOriginalPositions[dragObjid] =[dragObj.offsetLeft, dragObj.offsetTop];
			}
		}
		dragObjpositions = [dragObj.offsetLeft, dragObj.offsetTop];
		if (N) {
			X=e.pageX;
			Y=e.pageY;
			return false;
		}else {
			X=event.clientX;
			Y=event.clientY;
			return false;
		}
	}
}

function MM(e) {
	if (dragObj) {
		var originalPositions = dragObjOriginalPositions[dragObjid];
		var shimFrame = document.getElementById(dragObjid +'Shim');
		if(moveFrame && shimFrame != null){
			shimFrame.style.width = dragObj.offsetWidth;
		    shimFrame.style.height = dragObj.offsetHeight;
		    shimFrame.style.top = dragObj.style.top;
		    shimFrame.style.left = dragObj.style.left;
		}
		if (N) {
			if(originalPositions[1]>=(e.pageY-Y + dragObjpositions[1])){
				dragObj.style.top = e.pageY-Y + dragObjpositions[1];
			}else{
				dragObj.style.top = originalPositions[1];
			}
			if(((originalPositions[0]+100)>=(e.pageX-X + dragObjpositions[0]))&&
				((originalPositions[0]-100)<=(e.pageX-X + dragObjpositions[0]))){
				dragObj.style.left = e.pageX-X + dragObjpositions[0];
			}else{
				if((originalPositions[0]+100)>=(e.pageX-X + dragObjpositions[0])){
					dragObj.style.left = originalPositions[0]-100;
				}else{
					dragObj.style.left = originalPositions[0]+100;			
				}
			}
			return false;
		}
		else {
			if(((originalPositions[0]+100)>=(event.clientX - X + dragObjpositions[0]))&&
				((originalPositions[0]-100)<=( event.clientX - X + dragObjpositions[0]))){
				dragObj.style.left = event.clientX - X + dragObjpositions[0];
			}else{
				if((originalPositions[0]+100)>=(event.clientX - X + dragObjpositions[0])){
					dragObj.style.left = originalPositions[0]-100;
				}else{
					dragObj.style.left = originalPositions[0]+100;			
				}
			}
			if(originalPositions[1]>=(event.clientY - Y + dragObjpositions[1])){
				dragObj.style.top = event.clientY - Y + dragObjpositions[1];
			}else{
				dragObj.style.top = originalPositions[1];
			}
			return false;
	    }
	}
}
function MU(e) {

	dragObj = null;
	over=false;
}

if (N) {	
	document.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE | Event.MOUSEUP);
}
document.onmousedown = MD;
document.onmousemove = MM;
document.onmouseup = MU;
/**End of Drag Div Functions**/

// preSelectTime must follow the format hh:mm aa eg., (5:56 PM)
function show_time(str_target1, preSelectTime){
	var time = new Date();
	var hour = 12;
	var minute = 0;
	var isPM = false;
	
	if(preSelectTime != null && preSelectTime != '' && preSelectTime != 'null' && preSelectTime != 'undefinied'){
		var timeStrArray = preSelectTime.split(":");
		var hourStr = timeStrArray[0];
		var minPMStr = timeStrArray[1];
		var minStr = minPMStr.substring(0, 2);
		var amPMStr = minPMStr.substring(3, 5);
		try{
			hour = parseInt(hourStr);
			
			// remove prefixed 0
			hour += 0;
			if(amPMStr == 'PM'){
				isPM = true;
			}
		}catch (err){}
		
		try{
			minute = parseInt(minStr);
			minute += 0;
		}catch(err){}
	}
	
	if(hour > 12){
		hour = hour%12;
	}
	var str_buffer = new String (
		"<html>\n"+
		"<head>\n"+
		"	<title>Time</title>\n"+
		"</head>\n"+
		"<body bgcolor=\"White\">\n"+
		"<table class=\"clsOTable\" cellspacing=\"0\" border=\"0\" width=\"100%\">\n"+//+
		"<form name=\"time\">\n<tr><td colspan=\"7\" bgcolor=\"#9AD09A\">"+
		"<font color=\"White\" face=\"tahoma, verdana\" size=\"2\">"+
		"Time: <select name='hour'>\n");
	var i = 1;
	var temp;
	
	for(; i<=12; i++){
		if(i == hour)
			str_buffer += "<option value='" + i + "' selected>" + i + "</option>\n";
		else		
			str_buffer += "<option value='" + i + "'>" + i + "</option>\n";
	}
	i = 0;
	str_buffer += "</select>\n" +
				  ":<select name='min'>\n";  
	for(; i<=59; i++)
	{
		if( i<10 )
		{
			if(i == minute)
				str_buffer += "<option value='0" + i + "' selected>" + "0" + i + "</option>";
			else
				str_buffer += "<option value='0" + i + "'>" + "0" + i + "</option>";
		}
		else
		{
			if(i == minute)
				str_buffer += "<option value='" + i + "' selected>" + i + "</option>";
			else
				str_buffer += "<option value='" + i + "'>" + i + "</option>";	
		}
	}
	str_buffer +="</select>\n" +
				 "<select name='ap'>\n";
	if(!isPM){
		str_buffer += "<option value='AM' selected>AM</option>"+
				  	  "<option value='PM'>PM</option>";
	}else{
		str_buffer += "<option value='AM'>AM</option>"+
				  	  "<option value='PM' selected>PM</option>";	
	}
	str_buffer += "</select></td></tr>\n" +
				  "<tr><td align='center'><input type=\"button\" value=\"   OK   \" onclick=\"javascript:window.opener."+str_target1+".value=document.time.hour.value+':'+document.time.min.value+' '+document.time.ap.value; window.close();\"><td></tr>"+		
				  "</form>\n" +
				  "</table>\n" +
				  "</body>\n" +
				  "</html>\n";

	var xCoord = 400;
	var yCoord = 300;


	if (parseInt(navigator.appVersion)>3) {
		if (navigator.appName=="Netscape") {
			xCoord = (top.innerWidth-16) / 2;
			yCoord = (top.innerHeight-16) / 2;
		}
		if (navigator.appName.indexOf("Microsoft")!=-1) {
			xCoord = (top.document.body.offsetWidth - 20)/2;
			yCoord = (top.document.body.offsetHeight - 20)/2;
		}
	}

	var vWinCal = window.open("", "Time", 
		"width=250,height=60,status=no,resizable=no,top=" + (yCoord - 30) + ",left=" + (xCoord - 125));
	vWinCal.opener = self;
	var calc_doc = vWinCal.document;
	calc_doc.write (str_buffer);
	calc_doc.close();
}

function show_time_dropdowns(hour_target, min_target, ap_target){
	var time = new Date();
	var hour = time.getHours();
	var minute = time.getMinutes();
	var isPM = false;
	if(hour >= 12){
		isPM = true;
	}
	if(hour > 12){
		hour = hour%12;
	}
	var str_buffer = new String (
		"<html>\n"+
		"<head>\n"+
		"	<title>Time</title>\n"+
		"</head>\n"+
		"<body bgcolor=\"White\">\n"+
		"<table class=\"clsOTable\" cellspacing=\"0\" border=\"0\" width=\"100%\">\n"+//+
		"<form name=\"time\">\n<tr><td colspan=\"7\" bgcolor=\"#87CEFA\">"+
		"<font color=\"White\" face=\"tahoma, verdana\" size=\"2\">"+
		"Time: <select name='hour'>\n");
	var i = 1;
	var temp;
	
	for(; i<=12; i++){
		if(i == hour)
			str_buffer += "<option value='" + i + "' selected>" + i + "</option>\n";
		else		
			str_buffer += "<option value='" + i + "'>" + i + "</option>\n";
	}
	i = 0;
	str_buffer += "</select>\n" +
				  ":<select name='min'>\n";  
	for(; i<=59; i++)
	{
		if( i<10 )
		{
			if(i == minute)
				str_buffer += "<option value='" + i + "' selected>" + "0" + i + "</option>";
			else
				str_buffer += "<option value='" + i + "'>" + "0" + i + "</option>";
		}
		else
		{
			if(i == minute)
				str_buffer += "<option value='" + i + "' selected>" + i + "</option>";
			else
				str_buffer += "<option value='" + i + "'>" + i + "</option>";	
		}
	}
	str_buffer +="</select>\n" +
				 "<select name='ap'>\n";
	if(!isPM){
		str_buffer += "<option value='AM' selected>AM</option>"+
				  	  "<option value='PM'>PM</option>";
	}else{
		str_buffer += "<option value='AM'>AM</option>"+
				  	  "<option value='PM' selected>PM</option>";	
	}
	str_buffer += "</select></td></tr>\n" +
				  "<tr><td align='center'><input type=\"button\" value=\"   OK   \" onclick=\"javascript:window.opener."+hour_target+".value=document.time.hour.value; window.opener."+min_target+".value=document.time.min.value; window.opener."+ap_target+".value=document.time.ap.value; window.close();\"><td></tr>"+		
				  "</form>\n" +
				  "</table>\n" +
				  "</body>\n" +
				  "</html>\n";

	var xCoord = 400;
	var yCoord = 300;


	if (parseInt(navigator.appVersion)>3) {
		if (navigator.appName=="Netscape") {
			xCoord = (top.innerWidth-16) / 2;
			yCoord = (top.innerHeight-16) / 2;
		}
		if (navigator.appName.indexOf("Microsoft")!=-1) {
			xCoord = (top.document.body.offsetWidth - 20)/2;
			yCoord = (top.document.body.offsetHeight - 20)/2;
		}
	}

	var vWinCal = window.open("", "Time", 
		"width=250,height=60,status=no,resizable=no,top=" + (yCoord - 30) + ",left=" + (xCoord - 125));
	vWinCal.opener = self;
	var calc_doc = vWinCal.document;
	calc_doc.write (str_buffer);
	calc_doc.close();
}

function show_calendar(str_target1, str_date){//, str_target2, str_date, str_time) {
	show_calendar_context(str_target1, str_date, '');
}

function show_calendar_context(str_target1, str_date, context){//, str_target2, str_date, str_time) {

	if(context != ''){
		context += "/"; 
	}
	
	var arr_months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun",
		"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
	var week_days = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"];
	var n_weekstart = 0; // day week starts from (normally 0 or 1)

	var dt_datetime;
	if(str_date == null || str_date == ''){
		dt_datetime = new Date();
	}else{
		dt_datetime = str2dt(str_date);
	}
	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_prev_year = new Date(dt_datetime);
	dt_prev_year.setYear(dt_prev_year.getFullYear()-1);
	var dt_next_year = new Date(dt_datetime);
	dt_next_year.setYear(dt_next_year.getFullYear()+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 (
		"<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=\"#B6B674\">\n"+
		"<table cellspacing=\"1\" cellpadding=\"3\" border=\"0\" width=\"100%\">\n"+
		"<tr><td align='center' bgcolor=\"#B6B674\" width='20' colspan='7'>"+
		"<table class=\"clsOTable\" align='center'><tr>");
	str_buffer+= "<td><select name='cal_month_select' value='' onChange=\"window.opener.changeCalendarDate('"+str_target1+"', this, '"+context+"');\">";
	for(var i = 0; i<12;i++){
		var tempDate = new Date(dt_datetime);
		tempDate.setMonth(i);
		if(tempDate.getMonth() == dt_datetime.getMonth()){
			str_buffer+= "<option value='"+dt2dtstr(tempDate)+"' selected='true'>"+arr_months[i]+"</option>";
		}else{
			str_buffer+= "<option value='"+dt2dtstr(tempDate)+"'>"+arr_months[i]+"</option>";		
		}
	}
	str_buffer+="</select></td>";
	str_buffer+= "<td><select name='cal_year_select' value='' onChange=\"window.opener.changeCalendarDate('"+str_target1+"', this, '"+context+"');\">";
	
	for(var i = dt_datetime.getFullYear()-90; i<dt_datetime.getFullYear()+20;i++){
		var tempDate = new Date(dt_datetime);
		tempDate.setYear(i);
		if(tempDate.getFullYear() == dt_datetime.getFullYear()){
			str_buffer+= "<option value='"+dt2dtstr(tempDate)+"' selected='true'>"+tempDate.getFullYear()+"</option>";
		}else{
			str_buffer+= "<option value='"+dt2dtstr(tempDate)+"'>"+tempDate.getFullYear()+"</option>";		
		}
	}
	str_buffer+="</select></td>";

	str_buffer+="<td align='right'><input type='button' style='background: url("+context+"/images/button_gradient.gif) repeat-x;border-color: #3F833E;border-style: solid;border-width: 1px;font-family: Arial;font-size: 10px;' name='calendar_clear_button' value='Clear' onClick='window.opener."+str_target1+".value=\"\";window.close();'></td>";

	str_buffer+="</tr></table></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=\"#CCCC99\">"+
		"<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=\"#9AD09A\" align=\"right\">";
				else if (dt_current_day.getDay() == 0 || dt_current_day.getDay() == 6)
					// weekend days
					str_buffer += "	<td bgcolor=\"#F5F4F4\" 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_target1+
					".value='"+dt2dtstr(dt_current_day)+"'; window.opener."+str_target1+ ".focus(); window.close();\">"+
					"<font color=\"black\" face=\"tahoma, verdana\" size=\"2\">";
				else 
					// print days of other months
					str_buffer += "<a href=\"javascript:window.opener."+str_target1+
					".value='"+dt2dtstr(dt_current_day)+"'; window.opener."+str_target1+ ".focus(); window.close();\">"+
//					".value='"+dt2dtstr(dt_current_day)+"'+document.cal.time.value; 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";

	var xCoord = 400;
	var yCoord = 300;


	if (parseInt(navigator.appVersion)>3) {
		if (navigator.appName=="Netscape") {
			xCoord = (top.innerWidth-16) / 2;
			yCoord = (top.innerHeight-16) / 2;
		}
		if (navigator.appName.indexOf("Microsoft")!=-1) {
			xCoord = (top.document.body.offsetWidth - 20)/2;
			yCoord = (top.document.body.offsetHeight - 20)/2;
		}
	}

	var vWinCal = window.open("", "Calendar", 
		"width=215,height=220,status=no,resizable=no,top=" + (yCoord-110) + ",left=" + (xCoord-107));
	vWinCal.opener = self;
	var calc_doc = vWinCal.document;
	calc_doc.write (str_buffer);
	calc_doc.close();
}
function closeDiv(divID){
	var d = document.getElementById(divID);
	d.innerHTML = '';
	var shimFrame = document.getElementById(divID +'Shim');
	if(shimFrame != null){
	    shimFrame.style.display = "none";
	}

}
function clear_div_calendar(str_target1, divId){
	str_target1.value = '';
	closeDiv(divId);
}
function clearpop_calendar(str_target1){
	eval(str_target1+".value='';");
}
function changeCalendarDate(str_target1, calendarSelect, context){
	eval("show_calendar_context('"+str_target1+"', '"+ calendarSelect.value+"', '" + context + "');");
}
function changeDivCalendar(str_target1, cal_year_select, divID,context){
	eval("show_calendar_div_context('"+str_target1+"', '"+ cal_year_select.value+"', '" + divID + "','" + context + "', 'true');");
}
function show_calendar_div_context(str_target1, str_date, divID,  context, reset){//, str_target2, str_date, str_time) {
	if(context != ''){
		context += "/"; 
	}
	var arr_months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun",
		"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
	var week_days = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"];
	var n_weekstart = 0; // day week starts from (normally 0 or 1)

	var dt_datetime;
	
	if(str_date == null || str_date == ''){
		dt_datetime = new Date();
	}else{
		dt_datetime = str2dt(str_date);
	}
	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_prev_year = new Date(dt_datetime);
	dt_prev_year.setYear(dt_prev_year.getFullYear()-1);
	var dt_next_year = new Date(dt_datetime);
	dt_next_year.setYear(dt_next_year.getFullYear()+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 (
		"<table class=\"clsOTable\" cellspacing=\"0\" border=\"0\" width=\"150\">\n"+
		"<tr>\n<td align='right' bgcolor='#9AD09A'>"+
		"<div onmouseover='over=true;dragObjid=\""+divID+"\";' onmouseout='over=false;'><input type='button' class='portlet-form-button' name='calendar_clear_button' value='Clear' onClick='clear_div_calendar("+str_target1+", \""+divID+"\");'>"+
		"<a href='javascript:closeDiv(\""+divID+"\");'>"+
		"<img src='"+context+"/images/icon_close.gif' border='0'/></a></div></td>\n"+
		"</tr>"+
		"<tr><td bgcolor=\"#B6B674\">\n"+
		"<table cellspacing=\"1\" cellpadding=\"3\" border=\"0\" width=\"100%\">\n"+
		"<tr><td bgcolor=\"#B6B674\" width='20' colspan='3' align=\"center\">"+
		"<table class=\"clsOTable\"><tr>");
	str_buffer+= "<td><select name='cal_month_select' value='' onChange=\"changeDivCalendar('"+str_target1+"', this, '"+divID+"','"+context+"');\">";
	for(var i = 0; i<12;i++){
		var tempDate = new Date(dt_datetime);
		tempDate.setMonth(i);
		if(tempDate.getMonth() == dt_datetime.getMonth()){
			str_buffer+= "<option value='"+dt2dtstr(tempDate)+"' selected='true'>"+arr_months[i]+"</option>";
		}else{
			str_buffer+= "<option value='"+dt2dtstr(tempDate)+"'>"+arr_months[i]+"</option>";		
		}
	}
	str_buffer+="</select></td></tr></table></td>";
	str_buffer+="<td bgcolor=\"#B6B674\" width='20' colspan='3' align='center'>"+
		"<table class=\"clsOTable\"><tr>";
	str_buffer+= "<td><select name='cal_year_select' value='' onChange=\"changeDivCalendar('"+str_target1+"', this, '"+divID+"', '"+context+"');\">";
	
	for(var i = dt_datetime.getFullYear()-90; i<dt_datetime.getFullYear()+20;i++){
		var tempDate = new Date(dt_datetime);
		tempDate.setYear(i);
		if(tempDate.getFullYear() == dt_datetime.getFullYear()){
			str_buffer+= "<option value='"+dt2dtstr(tempDate)+"' selected='true'>"+tempDate.getFullYear()+"</option>";
		}else{
			str_buffer+= "<option value='"+dt2dtstr(tempDate)+"'>"+tempDate.getFullYear()+"</option>";		
		}
	}
	str_buffer+="</select></td></tr></table></td><td/>";
	str_buffer+="</tr>\n";
	

	str_buffer+="</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=\"#CCCC99\">"+
		"<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=\"#9AD09A\" align=\"right\">";
				else if (dt_current_day.getDay() == 0 || dt_current_day.getDay() == 6)
					// weekend days
					str_buffer += "	<td bgcolor=\"#F5F4F4\" 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:"+str_target1+
					".value='"+dt2dtstr(dt_current_day)+"'; "+str_target1+ ".focus(); closeDiv('" + divID + "');\">"+
					"<font color=\"black\" face=\"tahoma, verdana\" size=\"2\">";
				else 
					// print days of other months
					str_buffer += "<a href=\"javascript:"+str_target1+
					".value='"+dt2dtstr(dt_current_day)+"'; "+str_target1+ ".focus(); closeDiv('" + divID + "');\">"+
					"<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";
	var shimFrame = document.getElementById(divID +'Shim');
	if(shimFrame == null){
		str_buffer  += '<iframe id="'+divID+'Shim" scrolling="no" frameborder="0" style="position:absolute; top:0px; left:0px; display:none;"><!--1--></iframe>';
	}

	var div = document.getElementById(divID);
	
	div.innerHTML = str_buffer;
	div.style.display = "block";
	div.style.visibility = "visible";
	if(reset == null){
		var originalPositions = dragObjOriginalPositions[divID];
		if(originalPositions != null){
			div.style.left = originalPositions[0];	
			div.style.top = originalPositions[1];
		}
	}
	var shimFrame = document.getElementById(divID +'Shim');
	if(shimFrame != null){
		shimFrame.style.zIndex = div.style.zIndex - 1;
		shimFrame.style.display = "block";
		shimFrame.style.visibility = "visible";
		shimFrame.style.width = div.offsetWidth;
		shimFrame.style.height = div.offsetHeight;
		shimFrame.style.top =	div.style.top - 1+1;
		shimFrame.style.left = div.style.left -1+1;
	}
}
function changeDivMonthYearCalendar(str_target1, cal_year_select, divID,context){
	eval("show_calendar_monthYear_div_context('"+str_target1+"', '"+ cal_year_select.value+"', '" + divID + "','" + context + "', 'true');");
}
function show_calendar_monthYear_div_context(str_target1, str_date, divID,  context, reset){//, str_target2, str_date, str_time) {
	if(context != ''){
		context += "/"; 
	}
	var arr_months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun",
		"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
	var week_days = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"];
	var n_weekstart = 0; // day week starts from (normally 0 or 1)

	var dt_datetime;
	
	if(str_date == null || str_date == ''){
		dt_datetime = new Date();
	}else{
		dt_datetime = convertMonthYearToDate(str_date);
	}
	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_prev_year = new Date(dt_datetime);
	dt_prev_year.setYear(dt_prev_year.getFullYear()-1);
	var dt_next_year = new Date(dt_datetime);
	dt_next_year.setYear(dt_next_year.getFullYear()+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 (
		"<table class=\"info_table\" cellspacing=\"0\" border=\"0\" width=\"150\">\n"+
		"<tr>\n<td align='right' bgcolor='#9AD09A'>"+
		"<div onmouseover='over=true;dragObjid=\""+divID+"\";' onmouseout='over=false;'><input type='button' class='portlet-form-button' name='calendar_clear_button' value='Clear' onClick='clear_div_calendar("+str_target1+", \""+divID+"\");'>"+
		"<a href='javascript:closeDiv(\""+divID+"\");'>"+
		"<img src='"+context+"/images/icon_close.gif' border='0'/></a></div></td>\n"+
		"</tr>"+
		"<tr><td bgcolor=\"white\">\n"+
		"<table cellspacing=\"1\" cellpadding=\"3\" border=\"0\" width=\"100%\">\n"+
		"<tr><td bgcolor=\"white\" width='20' colspan='3' align=\"center\">"+
		"<table class=\"clsOTable\"><tr>");
	str_buffer+= "<td><select name='cal_month_select' value='' onChange=\"changeDivMonthYearCalendar('"+str_target1+"', this, '"+divID+"','"+context+"');\">";
	for(var i = 0; i<12;i++){
		var tempDate = new Date(dt_datetime);
		tempDate.setMonth(i);
		if(tempDate.getMonth() == dt_datetime.getMonth()){
			str_buffer+= "<option value='"+dt2dtstr(tempDate)+"' selected='true'>"+arr_months[i]+"</option>";
		}else{
			str_buffer+= "<option value='"+dt2dtstr(tempDate)+"'>"+arr_months[i]+"</option>";		
		}
	}
	str_buffer+="</select></td></tr></table></td>";
	str_buffer+="<td bgcolor=\"white\" width='20' colspan='3' align='center'>"+
		"<table class=\"clsOTable\"><tr>";
	str_buffer+= "<td><select id='yearSelect' name='cal_year_select' value='' onChange=\"changeDivMonthYearCalendar('"+str_target1+"', this, '"+divID+"', '"+context+"');\">";
	
	for(var i = dt_datetime.getFullYear()-90; i<dt_datetime.getFullYear()+20;i++){
		var tempDate = new Date(dt_datetime);
		tempDate.setYear(i);
		if(tempDate.getFullYear() == dt_datetime.getFullYear()){
			str_buffer+= "<option value='"+dt2dtstr(tempDate)+"' selected='true'>"+tempDate.getFullYear()+"</option>";
		}else{
			str_buffer+= "<option value='"+dt2dtstr(tempDate)+"'>"+tempDate.getFullYear()+"</option>";		
		}
	}
	str_buffer+="</select></td>";
	str_buffer+="<td><input type='button' class='portlet-form-button' name='submitCalButton' value='submit' onClick='submitDate("+str_target1+", \""+divID+"\");'/></td>";
	str_buffer+="</tr></table></td><td/>";
	str_buffer+="</tr>\n";
	

	str_buffer+="</tr>\n";

	// print calendar footer
	str_buffer +=
		"</table>\n" +
		"</tr>\n</td>\n</table>\n";
	var shimFrame = document.getElementById(divID +'Shim');
	if(shimFrame == null){
		str_buffer  += '<iframe id="'+divID+'Shim" scrolling="no" frameborder="0" style="position:absolute; top:0px; left:0px; display:none;"><!--1--></iframe>';
	}

	var div = document.getElementById(divID);
	div.innerHTML = str_buffer;
	div.style.display = "block";
	div.style.visibility = "visible";
	if(reset == null){
		var originalPositions = dragObjOriginalPositions[divID];
		if(originalPositions != null){
			div.style.left = originalPositions[0];	
			div.style.top = originalPositions[1];
		}
	}
	var shimFrame = document.getElementById(divID +'Shim');
	if(shimFrame != null){
		shimFrame.style.zIndex = div.style.zIndex - 1;
		shimFrame.style.display = "block";
		shimFrame.style.visibility = "visible";
		shimFrame.style.width = div.offsetWidth;
		shimFrame.style.height = div.offsetHeight;
		shimFrame.style.top =	div.style.top - 1+1;
		shimFrame.style.left = div.style.left -1+1;
	}
}
function submitDate(str_target1, divID){
	var year = document.getElementById('yearSelect');
	var selectedDate = convertDateToMonthYear(new Date(year.value));
	str_target1.value=selectedDate;
	str_target1.focus();
	closeDiv(divID);
}
function show_calendar_dropdowns(month_target, month, date_target, date, year_target, year){//, str_target2, str_date, str_time) {

	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 = 0; // day week starts from (normally 0 or 1)

	var dt_datetime;
	if(month == null || month == '' || date == null || date == '' || year == null || year == ''){
		dt_datetime = new Date();
	}else{
		dt_datetime = new Date(year, month-1, date);
	}
	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_prev_year = new Date(dt_datetime);
	dt_prev_year.setYear(dt_prev_year.getFullYear()-1);
	var dt_next_year = new Date(dt_datetime);
	dt_next_year.setYear(dt_next_year.getFullYear()+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 (
		"<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=\"#B6B674\">\n"+
		"<table cellspacing=\"1\" cellpadding=\"3\" border=\"0\" width=\"100%\">\n"+
		"<tr>\n	<td bgcolor=\"#B6B674\" width='20'><a href=\"javascript:window.opener.show_calendar_dropdowns('"+
		month_target+"', '"+(dt_prev_year.getMonth()+1)+"', '"+ date_target + "', '"+dt_prev_year.getDate()+"', '" +year_target+"', '"+dt_prev_year.getFullYear()+"');\">"+
		"<img src=\"images/prev_year.gif\" width=\"15\" height=\"15\" border=\"0\""+
		" alt=\"previous year\"></a></td>\n"+
		"<td bgcolor=\"#B6B674\" width='20'><a href=\"javascript:window.opener.show_calendar_dropdowns('"+
		month_target+"', '"+(dt_prev_month.getMonth()+1)+"', '"+ date_target + "', '"+dt_prev_month.getDate()+"', '" +year_target+"', '"+dt_prev_month.getFullYear()+"');\">"+
		"<img src=\"images/prev.gif\" width=\"15\" height=\"15\" border=\"0\""+
		" alt=\"previous month\"></a></td>\n"+
		"	<td bgcolor=\"#B6B674\" colspan=\"3\">"+
		"<font color=\"white\" face=\"tahoma, verdana\" size=\"1\">"
		+arr_months[dt_datetime.getMonth()]+" "+dt_datetime.getFullYear()+"</font></td>\n"+
		"<td bgcolor=\"#B6B674\" align=\"right\" width='20'><a href=\"javascript:window.opener.show_calendar_dropdowns('"+
		month_target+"', '"+(dt_next_month.getMonth()+1)+"', '"+ date_target + "', '"+dt_next_month.getDate()+"', '" +year_target+"', '"+dt_next_month.getFullYear()+"');\">"+
		"<img src=\"images/next.gif\" width=\"15\" height=\"15\" border=\"0\""+
		" alt=\"next month\"></a></td>\n" +
		"<td bgcolor=\"#B6B674\" align=\"right\" width='20'><a href=\"javascript:window.opener.show_calendar_dropdowns('"+
		month_target+"', '"+(dt_next_year.getMonth()+1)+"', '"+ date_target + "', '"+dt_next_year.getDate()+"', '" +year_target+"', '"+dt_next_year.getFullYear()+"');\">"+
		"<img src=\"images/next_year.gif\" width=\"15\" height=\"15\" border=\"0\""+
		" alt=\"next year\"></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=\"#CCCC99\">"+
		"<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=\"#9AD09A\" align=\"right\">";
				else if (dt_current_day.getDay() == 0 || dt_current_day.getDay() == 6)
					// weekend days
					str_buffer += "	<td bgcolor=\"#F5F4F4\" align=\"right\">";
				else
					// print working days of current month
					str_buffer += "	<td bgcolor=\"white\" align=\"right\">";

				str_buffer += "<a href=\"javascript:window.opener."+month_target+
							".value='"+ (dt_current_day.getMonth()+1)+"';window.opener." + date_target + 
							".value='"+ dt_current_day.getDate()+"';window.opener." + year_target +
							".value='"+ dt_current_day.getFullYear()+"';window.close();\">";

				if (dt_current_day.getMonth() == dt_datetime.getMonth())
					// print days of current month
					str_buffer += "<font color=\"black\" face=\"tahoma, verdana\" size=\"2\">";
				else 
					// print days of other months
					str_buffer += "<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";

	var xCoord = 400;
	var yCoord = 300;


	if (parseInt(navigator.appVersion)>3) {
		if (navigator.appName=="Netscape") {
			xCoord = (top.innerWidth-16) / 2;
			yCoord = (top.innerHeight-16) / 2;
		}
		if (navigator.appName.indexOf("Microsoft")!=-1) {
			xCoord = (top.document.body.offsetWidth - 20)/2;
			yCoord = (top.document.body.offsetHeight - 20)/2;
		}
	}

	var vWinCal = window.open("", "Calendar", 
		"width=215,height=220,status=no,resizable=no,top=" + (yCoord-110) + ",left=" + (xCoord-107));
	vWinCal.opener = self;
	var calc_doc = vWinCal.document;
	calc_doc.write (str_buffer);
	calc_doc.close();
}


// datetime parsing and formatting routimes. modify them if you wish other datetime format
function str2dt (str_datetime) {
	
	var re_date = /(\d+)\/(\d+)\/(\d+)/i;
	var temp = new Date();
	var re = re_date.exec(str_datetime);
	if (re != null){
		temp = new Date (re[3], re[1]-1, re[2]);
	}
	return temp;
	
}
function dt2dtstr (dt_datetime) {
	var theMonth = dt_datetime.getMonth()+1;
	var theYear = dt_datetime.getFullYear();
	if(theMonth == 0){
		theMonth = 12;
		theYear = theYear - 1;
	}
	return (new String ( theMonth +"/"+dt_datetime.getDate()+"/"+ theYear));
}
function dt2tmstr (dt_datetime) {
	return (new String (
			dt_datetime.getHours()+":"+dt_datetime.getMinutes()+":"+dt_datetime.getSeconds()));
}

function date_check(date){
	var re_date = /^(\d+)\/(\d+)\/(\d+)$/;
	if (!re_date.exec(date.value)){
		alert(date.name + "\nInvalid Date format: "+ date.value + "\nCorrect Format: mm/dd/yyyy");
		date.focus();
		date.select();
		return false;
	}else{
		var temp = new Date(RegExp.$3, RegExp.$1-1, RegExp.$2);
		var the_month = RegExp.$1;
		var the_date = RegExp.$2;
		var the_year = RegExp.$3; 
		var now = new Date();
		if(the_year < 1970){
			alert(date.name + ". Invalid year: " + the_year + "\nPlease enter a 4 digit year (yyyy)");
			date.focus();
			date.select();
			return false;
		}
		if(the_month > 12){
			alert(date.name + "\nInvalid month:" + the_month);
			date.focus();
			date.select();
			return false;		
		}
		if(((the_month == 4 || the_month == 6 || the_month == 9 || the_month == 11) && the_date > 30) ||
			(temp.getFullYear()%4 == 0 && the_month== 2 && the_date > 29) ||
			(temp.getFullYear()%4 != 0 && the_month== 2 && the_date > 28) ||
			the_date > 31 || the_date < 1
		){
			alert(date.name + "\nInvalid date:" + date.value);
			date.focus();
			date.select();
			return false;		
		}
	}
	return true;
}

function time_check(time){
	var re_date = /^(\d+)\:(\d+)\s(am|AM|pm|PM)$/;
	if (!re_date.exec(time.value)){
		alert(time.name + "\nInvalid time format: "+ time.value + "\nCorrect Format: hh:mm am|pm");
		time.focus();
		time.select();
		return false;
	}else{
		var hour = RegExp.$1;
		var min = RegExp.$2;
		if(hour > 23 || hour < 0 || min > 59 || min < 0){
			alert(time.name + "\nInvalid time: "+ time.value);
			time.focus();
			time.select();
			return false;		
		}
	}
	return true;
}



function handleEnter(field, event) {
		var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
		if (keyCode == 13) {
			return false;
		} 
		else
		return true;
	}    

function number_check(number){
	var number_format = /^(\d+)$/;
	if(!number_format.exec(number.value)){
		alert("Invalid number format. Please enter again!");
		number.focus();
		number.select();
		return false;
	}	
	return true;	
}
function decimal_check(sText){
   var ValidChars = "0123456789.";
   var IsNumber=true;
   var Char;
	var foundDecimal = false;
 
	for (i = 0; i < sText.length && IsNumber == true; i++){ 
    	Char = sText.charAt(i); 
	    if (ValidChars.indexOf(Char) == -1){
    	    IsNumber = false;
	    }else if(Char == '.'){
			if(!foundDecimal){
				foundDecimal = true;
			}else{
				IsNumber = false;
			}
		}
    }
    return IsNumber;   
}

function email_check(input){
	var email_format = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
	if(!email_format.exec(input.value)){
		alert("Invalid email format. Please enter again!");
		input.focus();
		input.select();
		return false;
	}	
	return true;	
}

function clearSelectField(field){
	var length = field.length;
	for(var i = length-1; i>-1; i--){
		field.options[i] = null;
	}
}
function changeBoxValue(checkboxField){
	if(checkboxField.checked){
		checkboxField.value='true';
	}else{
		checkboxField.value="false";
	}
}

function escapeHTML(string){
	if(string==null || trim(string)=='')return null;
    var div = document.createElement('div');
    var text = document.createTextNode(string);
    div.appendChild(text);
    var result = div.innerHTML
    var str = result.replace(/'/g,"&#39;");
    return trim(str);
}

function trim(string) {
  if(string == null)return null;
  string = string.replace( /^\s+/g, "" );// strip leading
  string = string.replace( /\s+$/g, "" );// strip trailing
  return string;
}
function showElement(ID){
	var div = document.getElementById(ID);
	if(div != null){
		div.style.visibility = 'visible';
		div.style.display = 'block';
	}
}

function showRow(ID){
	var row = document.getElementById(ID);
	if(row != null){
		row.style.visibility = 'visible';
		row.style.display = '';
	}
}


function hideElement(ID){
	var div = document.getElementById(ID);
	if(div != null){
		div.style.visibility = 'hidden';
		div.style.display = 'none';
	}
}

function isElementVisible(elem){
	var elem = document.getElementById(elem);
	return(elem.style.visibility == '' || elem.style.visibility == 'visible');
}
function convertMonthYearToDate(dateStr){
	var monthAry = new Array();
	monthAry['Jan'] = '1';
	monthAry['Feb'] = '2';
	monthAry['Mar'] = '3';
	monthAry['Apr'] = '4';
	monthAry['May'] = '5';
	monthAry['Jun'] = '6';
	monthAry['Jul'] = '7';
	monthAry['Aug'] = '8';
	monthAry['Sep'] = '9';
	monthAry['Oct'] = '10';
	monthAry['Nov'] = '11';
	monthAry['Dec'] = '12';
	if(monthAry[dateStr.substr(0,3)]== null){
		return new Date(dateStr);
	}
	else{
		var convertedDateStr = monthAry[dateStr.substr(0,3)]+'/1/'+dateStr.substr(4, dateStr.length);
		return new Date(convertedDateStr);
	}
}

function convertDateToMonthYear(date){
	var monthAry = new Array();
	monthAry[0] = 'Jan';
	monthAry[1] = 'Feb';
	monthAry[2] = 'Mar';
	monthAry[3] = 'Apr';
	monthAry[4] = 'May';
	monthAry[5] = 'Jun';
	monthAry[6] = 'Jul';
	monthAry[7] = 'Aug';
	monthAry[8] = 'Sep';
	monthAry[9] = 'Oct';
	monthAry[10] = 'Nov';
	monthAry[11] = 'Dec';
	if(date.getYear() < 2000){
		return monthAry[date.getMonth()] + " " + (1900 + date.getYear());
	}else{
		return monthAry[date.getMonth()] + " " + (date.getYear());
	}
}
/**Info Bubble**/
function addItem(bubbleDivName, newContent, bubbleContents, context){
	var bubbleDiv = document.getElementById(bubbleDivName);
	if(bubbleDiv == null){
		return;
	}
	var content = '';
	bubbleContents[bubbleContents.length] = newContent;
	for(i=0; i < bubbleContents.length; i++){
		content += bubbleContents[i][1];
	}
	bubbleDiv.innerHTML = content;
	for(i=0; i < bubbleContents.length; i++){
		if(!bubbleContents[i][2])
			collapseItem(bubbleContents[i][0], context);
	}
}

function collapseItem(id, context){
	var d = document.getElementById('exp_' + id);
	d.status = "minus";

	var i = document.getElementById("img_" + id);
	i.src = context + "/images/section_show_icon.gif" ;

	d.style.visibility= "hidden";
	d.style.display ="none";
}

function removeItem(bubbleDivName,bubbleContents, context){
	var bubbleDiv = document.getElementById(bubbleDivName);
	if(bubbleDiv == null){
		return;
	}
	var content = '';
	bubbleContents.pop();
	if(bubbleContents.length == 0){
		hideElement('infoBubble');
	}else{
		for(i=0; i < bubbleContents.length; i++){
			content += bubbleContents[i][1];
		}
	}
	bubbleDiv.innerHTML = content;
	for(i=0; i < bubbleContents.length; i++){
		if(!bubbleContents[i][2])
			collapseItem(bubbleContents[i][0], context);
	}
}

// returns true if the first parameter 'value' begins with 2nd parameter 'serachParameter'
function beginsWith(value, searchParameter){
	var re_beginsWith = eval('/^' + searchParameter + '/');
	if(re_beginsWith.exec(value)){
		return true;
	}
	else{
		return false;
	}
}

// finds the actual position of an object and returns an array with the [left, right]
function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}

