// Author: Jonathan Wood
// Company: Creative Times
// Date: 9/1/03
// Version: 1.0
// Description: date picker linked to form menu widgets



// Create calendar
function show_calendar(dayIn, monthIn, yearIn, dateStr) {
    // path to site
	var calWebSite = "http://www.qualityappraisalsonline.com/";
	
	// set table attributes (user defined) 
	var cc_current = "#FFB6C1";
	var cc_bg = "#FFFFFF";
	var cc_header = "#BEBFC1"; // BEBFC1
	var cc_border = "#666666";
	var cc_weekend = "#EEEEEE"; // AC947E
    var cc_weekday = "#FFFFFF";
	var tc_header = "#3079D3"; // 3079D3
	var tc_title = "#FFFFFF";
	var tc_main = "#499AE5"; // 499AE5
	var tc_next_month = "#AC947E";
	var tc_link = "#666666";
	
	var text_size = "2";

	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 calDate = (dateStr == null || dateStr =="" ?  new Date() : CT_str2date(dateStr));
	var cal_prevMonth = new Date(calDate);
	cal_prevMonth.setMonth(calDate.getMonth()-1);
	var cal_nextMonth = new Date(calDate);
	cal_nextMonth.setMonth(calDate.getMonth()+1);
	var cal_firstDay = new Date(calDate);
	cal_firstDay.setDate(1);
	cal_firstDay.setDate(1-(7+cal_firstDay.getDay()-n_weekstart)%7);
	var cal_lastDay = new Date(cal_nextMonth);
	cal_lastDay.setDate(0);
	var cal_thisMonth = new Date();
	
	// write html     
	var htmlPage = new String ("<html>\n");
		htmlPage += "<head>\n"+
		"	<title>Calendar</title>\n"+
		"</head>\n"+
		"<body link=\""+ tc_link +"\" vlink=\""+ tc_link +"\" alink=\""+ tc_link +"\" leftmargin=\"0\" topmargin=\"0\" bgcolor=\""+ cc_bg +"\">\n"+ 
		"<table cellspacing=\"10\" cellpadding=\"0\" border=\"0\" width=\"100%\"><tr><td>\n"+
		"<table class=\"clsOTable\" cellspacing=\"0\" border=\"0\" width=\"100%\">\n"+
		"<tr><td bgcolor=\""+ cc_border +"\">\n"+
		"<table cellspacing=\"1\" cellpadding=\"3\" border=\"0\" width=\"100%\">\n"+
		"<tr>\n	<td bgcolor=\""+ cc_border +"\"><a href=\"javascript:window.opener.show_calendar('"+
		dayIn+"', '"+ monthIn +"', '"+ yearIn +"', '"+ CT_date2str(cal_prevMonth)+"');\">"+
		"<img src=\""+ calWebSite +"cal/prev.gif\" width=\"16\" height=\"16\" border=\"0\""+
		" alt=\"previous month\"></a></td>\n"+
		"	<td bgcolor=\""+ cc_border +"\" colspan=\"5\">"+
		"<font color=\""+ tc_title +"\" face=\"tahoma, verdana\" size=\""+ text_size +"\">"
		+arr_months[calDate.getMonth()]+" "+calDate.getFullYear()+"</font></td>\n"+
		"	<td bgcolor=\""+ cc_border +"\" align=\"right\"><a href=\"javascript:window.opener.show_calendar('"
		+ dayIn+"', '"+ monthIn +"', '"+ yearIn +"', '"+CT_date2str(cal_nextMonth)+"');\">"+
		"<img src=\""+ calWebSite +"cal/next.gif\" width=\"16\" height=\"16\" border=\"0\""+
		" alt=\"next month\"></a></td>\n</tr>\n";

	var cal_currentDay = new Date(cal_firstDay);
	// print weekdays titles
	htmlPage += "<tr>\n";
	for (var n=0; n<7; n++)
		htmlPage += "	<td bgcolor=\""+ cc_header +"\">"+ 
		"<font color=\""+ tc_header +"\" face=\"tahoma, verdana\" size=\""+ text_size +"\">"+
		week_days[(n_weekstart+n)%7]+"</font></td>\n";
	// print calendar table
	htmlPage += "</tr>\n";
	while (cal_currentDay.getMonth() == calDate.getMonth() ||
		cal_currentDay.getMonth() == cal_firstDay.getMonth()) {
		// print row 
		htmlPage += "<tr>\n";
		for (var n_current_wday=0; n_current_wday<7; n_current_wday++) {
				if (cal_currentDay.getDate() == calDate.getDate() &&
					cal_currentDay.getMonth() == calDate.getMonth() &&
					cal_thisMonth.getMonth() == calDate.getMonth())
					// print current date
					htmlPage += "	<td bgcolor=\""+ cc_current +"\" align=\"right\">";
				else if (cal_currentDay.getDay() == 0 || cal_currentDay.getDay() == 6)
					// weekend days
					htmlPage += "	<td bgcolor=\""+ cc_weekend +"\" align=\"right\">";
				else
					// print working days of current month
					htmlPage += "	<td bgcolor=\""+ cc_weekday +"\" align=\"right\">";

				if (cal_currentDay.getMonth() == calDate.getMonth())
					// print days of current month
					htmlPage += "<a href=\"javascript:window.opener."+dayIn+
					".value='"+CT_cal2dialog(cal_currentDay, "day")+"'; window.opener."+monthIn+
					".value='"+CT_cal2dialog(cal_currentDay, "month")+"'; window.opener."+yearIn+
					".options["+CT_cal2dialog(cal_currentDay, "year")+"].selected='true'; window.close();\">"+
					"<font color=\""+ tc_main +"\" face=\"tahoma, verdana\" size=\""+ text_size +"\">";
				else 
					// print days of other months
					htmlPage += "<a href=\"javascript:window.opener."+dayIn+
					".value='"+CT_cal2dialog(cal_currentDay, "day")+"'; window.opener."+monthIn+
					".value='"+CT_cal2dialog(cal_currentDay, "month")+"'; window.opener."+yearIn+
					".value='"+CT_cal2dialog(cal_currentDay, "year")+"'; window.close();\">"+
					"<font color=\""+ tc_next_month +"\" face=\"tahoma, verdana\" size=\""+ text_size +"\">";
				htmlPage += cal_currentDay.getDate()+"</font></a></td>\n";
				cal_currentDay.setDate(cal_currentDay.getDate()+1);
		}
		// print row footer
		htmlPage += "</tr>\n";
	}
	// print calendar footer
	htmlPage +=
		"<form name=\"cal\">\n<tr align=\"right\"><td colspan=\"7\" bgcolor=\""+ cc_header +"\">"+
		"<font color=\""+ tc_header +"\" face=\"tahoma, verdana\" size=\""+ text_size +"\">"+
		"<a href=\"javascript:window.close();\">Cancel</a>" +
		"</font></td></tr>\n</form>\n" + 
		"</table>\n" +
		"</td>\n</tr>\n</table>\n" +
		"</td>\n</tr>\n</table>\n" +
		"</form>\n"
		"</body>\n" +
		"</html>\n";
		
	// open window
	var vWinCal = window.open("", "Calendar", 
		"width=200,height=215,status=no,resizable=no,top=200,left=200");
	vWinCal.opener = self;
	var calc_doc = vWinCal.document;
	calc_doc.write (htmlPage);
	calc_doc.close();
}



// datetime parsing and formatting routimes.
function CT_str2date (dateStr) {
	var re_date = /^\s*(\d+)\-(\d+)\-(\d+)\s*$/;
	if (!re_date.exec(dateStr))
		return alert("Please make sure that there is something selected in the month, day & year fields.");
	return (new Date (RegExp.$3, RegExp.$2-1, RegExp.$1));
}

function CT_date2str (calDate) {
	return (new String (calDate.getDate()+"-"+(calDate.getMonth()+1)+"-"+calDate.getFullYear()+" "));
}

function CT_cal2dialog (calDate, dateType) {
    var ie_mac_offset = 0;
    var ct_browser = navigator.appName;
    var ct_sys = navigator.userAgent;
  
    ct_sys = ct_sys.replace(/.*Mac.*/,"Mac");
    if (ct_sys != "Mac"){
        ct_sys = "Windows";
    }  
    if (ct_sys == "Mac"){
        if (ct_browser == "Microsoft Internet Explorer"){
           // fix a bug w/ explorer on Mac select array starts on 0 not 1.
	       ie_mac_offset = -1;
        }
    } 

    if (dateType == "day"){
       return (new String (calDate.getDate() + ie_mac_offset));
    } else if (dateType == "month"){
       return (new String (calDate.getMonth() + 1 + ie_mac_offset));
    } else {
       var offsetDate = new Date();
       return (new String (calDate.getFullYear() - offsetDate.getFullYear()));
    }
}


function CT_dateDialogToStr (in_day, in_month, in_year) {
   return (new String (in_day.value+"-"+in_month.value+"-"+in_year.value+" "));
}

function CT_daysInMonth(in_month, in_day, in_year, selMenu) {
   var checkDate = new Date();
   checkDate.setMonth(in_month.value - 1);
   checkDate.setDate(in_day.value);
   checkDate.setYear(in_year.value);

   var lastdate = new Date(checkDate);
   lastdate.setMonth(checkDate.getMonth() + 1);
   lastdate.setDate(0);
   var lastday = lastdate.getDate();
   var menuLength = selMenu.options.length;
   if (lastday != menuLength){
	 selMenu.options.length = lastday;
	 if (menuLength < lastday) {
	     for (i = menuLength + 1; i < lastday + 1; i ++){
	        selMenu.options[i - 1].value = i;
	        selMenu.options[i - 1].text = i;
	     }
	 } 
   }
}


