/*/

Calendar Functions

/*/
//CONSTANTS//
//Used to create a pseudo associative array of calendar options
var _OPT_MONTH_TITLE_LEN = 0;
var _OPT_DOW_NAME_LEN = 1;
var _OPT_DAY_EVENT_TITLES = 2;
var _OPT_DAY_HOVER = 3;
var _OPT_DAY_FADE = 4;
var _OPT_MONTH_NAV_LEN = 5;
var _OPT_DAY_HEIGHT = 6;
var _OPT_DAY_WIDTH = 7;
var _OPT_DAY_HIGHLIGHT = 8;
var _OPT_DAY_SELECTED = 9;
var _OPT_DAY_OFF = 10;
var _OPT_DAY_PAST = 11;
var _OPT_DAY_TODAY = 12;
var _OPT_DAY_FUTURE = 13;
var _OPT_DAY_COL_WE_TINT = 14;
var _OPT_DAY_COL_WE_AMNT = 15;
var _OPT_DAY_FADE_STEPS = 16;
var _OPT_DAY_FADE_INTERVAL = 17;
var _OPT_DAY_FADE_DEFAULT_TEXT = 18;
var _OPT_SEE_SEL_DAYS_HREF = 19;
var _OPT_BGCOLOR_LIGHTEST = 20;
var _OPT_BGCOLOR_DARK = 21;
var _OPT_EVENT_DETAIL_HREF = 22;
var _OPT_GORESET_POS = 23;
var _OPT_DAY_TODAY_BORDER = 24;
var _OPT_MONTH_YEAR_SELECT = 25;

var calendar_description = 'Click on a date or selection of dates and click on Search.';
var _MONTH_NAMES = [
	  ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
	, ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
	, ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D']
];

var _DOW_NAMES = [
	  ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
	, ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']
	, ['S', 'M', 'T', 'W', 'T', 'F', 'S']
];


//GLOBALS VARIABLES//
var fade_timer = 0;
var isNN = (navigator.appName == "Netscape") ? true : false;
var browserVer = parseInt(navigator.appVersion);

//CLASSES//
//Calendar Day - points to the events for a particular date
function calDay(date, events, selected, was_sel) {
	this.date = date || new Date();
	this.events = events || new Array();
	this.selected = selected || false;
	this.was_sel = was_sel || false;
}

//Calendar Event - hold the details of each event
function calEvent(id, name, date_start, date_end) {
	this.id = id || 0;
	this.name = name || '';
	this.date_start = date_start || new Date();
	this.date_end = date_end || new Date();
}
/*/
Date.prototype.addMonths = function(num_months) {
	var crnt_month = this.getMonth();
	var crnt_year = this.getFullYear();

	var new_year = floor((crnt_month + num_months) / 12);
//	var new_month = 12 % (crnt_month + num_months);
	if(new_month < 0) {
		new_month += 12;
		new_year -= 1;
	}
	
	this.setMonth(new_month);
	this.setyear(new_year);
}
/*/
//FUNCTIONS//

function formatDateDisplay(date_obj) {

	var date_str = '';

	if(date_obj.getDate) {
		date_str += date_obj.getDate();
		date_str += ' '+ _MONTH_NAMES[0][date_obj.getMonth()];
		date_str += ' '+ date_obj.getFullYear();
	}
alert("date_str");
	return date_str;
}

//Change the text colour of (child objects to) 'obj' to 'colour_to' in a number of 'steps' seperated by 'interval' time.
//function fadeText(obj, colour_to, steps, interval) {
function fadeText(obj_name, colour_to, steps, interval) {
	//Don't want the fade_timer to interrupt the fader.
	window.clearTimeout(fade_timer);
	
	if(steps > 0) {
		if(isNN && browserVer < 5) { //Netscape
			var obj = eval('document.'+ obj_name);
			var colour_new = tintColour(obj.color, colour_to, (1/steps));
			obj.document.write('<div style="font-family: verdana, arial, helvetica; font-size: 11px; color: '+ colour_new+';">'+ obj.innerHTML +'</div>');
			obj.document.close();
//			document.nav_bottom.top = obj.clip.height;
			timeout_str = 'fadeText(\''+obj_name+'\', \''+colour_to+'\', '+(steps - 1)+', '+interval+')';
		} else if(document.getElementById) {
			var obj = document.getElementById(obj_name);
			for(i=0; i<obj.childNodes.length; i++) {
				obj.childNodes[i].style.color = tintColour(obj.childNodes[i].style.color, obj.childNodes[i].color_to, 1/steps);
			}
			timeout_str = 'fadeText(\''+obj_name+'\', \''+colour_to+'\', '+(steps - 1)+', '+interval+')';
		} else { //IE
			var obj = eval(obj_name);
			for(i=0; i<obj.children.length; i++) {
				obj.children[i].style.color = tintColour(obj.children[i].style.color, obj.children[i].color_to, 1/steps);
			}
			timeout_str = 'fadeText(\''+obj_name+'\', \''+colour_to+'\', '+(steps - 1)+', '+interval+')';
		}
		fade_timer = window.setTimeout(timeout_str, interval);
	}
}


//Change 'colour_from' (eg. '#336699') toward 'colour_to' by a percentage 'amount'.
function tintColour(colour_from, colour_to, amount) {
	// Convert amount to decimal fraction
	if(amount > 1) amount = amount / 100;

	//Convert from rgb string if necessary (ie. NS 6)
	if(colour_from.substr(0,3) == "rgb") {
		colour_from = rgbToHex(colour_from);
	}

	//Extract the hexidecimal couplet for each primary colour (from) as an integer
	var colour_red_from = parseInt(colour_from.slice(1, 3), 16);
	var colour_green_from = parseInt(colour_from.slice(3, 5), 16);
	var colour_blue_from = parseInt(colour_from.slice(5, 7), 16);

	//Extract the hexidecimal couplet for each primary colour (to) as an integer
	var colour_red_to = parseInt(colour_to.slice(1, 3), 16);
	var colour_green_to = parseInt(colour_to.slice(3, 5), 16);
	var colour_blue_to = parseInt(colour_to.slice(5, 7), 16);

	//Determine the difference between 'from' and 'to' colours and multiply by amount
	var colour_red_new = Math.floor(colour_red_from - ((colour_red_from - colour_red_to) * amount));
	var colour_green_new = Math.floor(colour_green_from - ((colour_green_from - colour_green_to)) * amount);
	var colour_blue_new = Math.floor(colour_blue_from - ((colour_blue_from - colour_blue_to)) * amount);

	//Create a new hexidecimal colour string
	var colour_new = '#'+colour_red_new.toString(16)+colour_green_new.toString(16)+colour_blue_new.toString(16);
	return colour_new;
}

		
//Handle the mouse moving over a calendar day
function mouseOverDay(evt) {
	var c_opts = eval(this.c_cal_name +'_opts');
	var c_evts = eval(this.c_cal_name +'_evts');

	var fader_html = '';
	var hover_html = '';

	//Highlight the day by changing the background colour
	if(isNN) { //Netscape
		this.bgColorSet = this.bgColor;
		this.bgColor = c_opts[_OPT_DAY_HIGHLIGHT];
	} else { //IE
		this.bgColorSet = this.style.backgroundColor;
		this.style.backgroundColor = c_opts[_OPT_DAY_HIGHLIGHT];
	}

}

function mouseOutDay(evt) {
	var c_opts = eval(this.c_cal_name +'_opts');

	if(isNN) {
		this.bgColor = this.bgColorSet;
		if(c_opts[_OPT_DAY_HOVER]) {
			var c_hover = eval('document.'+ this.c_cal_name +'_hover');
			c_hover.visibility = 'hide';
		}
	

	} else {
		this.style.backgroundColor = this.bgColorSet;
		if(c_opts[_OPT_DAY_HOVER]) {
			var c_hover = eval(this.c_cal_name +'_hover');
			c_hover.style.visibility = 'hidden';
		}
	
	}
}


function clickDay(evt) {
	var c_opts = eval(this.c_cal_name +'_opts');
	
	if (this.c_day.selected) {
		this.bgColorSet = this.bgColorOld;
		this.c_day.selected = false;
	} else {
		this.bgColorOld = this.bgColorSet;
		this.bgColorSet = c_opts[_OPT_DAY_SELECTED];
		this.c_day.selected = true;
	}
	if(isNN) {
		this.bgColor = this.bgColorSet;
	} else {
		this.style.backgroundColor = this.bgColorSet;
	}
}

function calCreateCalendar(c_cal_name) {
	var c_opts_name = c_cal_name +'_opts';
	var c_days_name = c_cal_name +'_days';
	var c_evts_name = c_cal_name +'_evts';
	var c_opts = eval(c_opts_name);
	var c_days = eval(c_days_name);
	var c_evts = eval(c_evts_name);
	var MINUTE = 60 * 1000;
	var HOUR = MINUTE * 60;
	var DAY = HOUR * 24;
	var WEEK = DAY * 7;
	var last_row;
	
	
	// Maximum number of months to allow navigation backwards and forwards
	var c_max_month_range = eval(c_cal_name +'_max_month_range');

	// Whether or not to show next/prev month nav buttons
	// [Could be replaced by calculating from _max_month_range.]
	var c_show_last_month = eval(c_cal_name +'_show_last_month');
	var c_show_next_month = eval(c_cal_name +'_show_next_month');

	var c_html = '';
	var c_day = 0;
	var c_day_bgColor = c_opts[_OPT_DAY_TODAY];

	// Workout this month, then next and the last (previous) months
	// assuming the 16th listed day is in the current month

	var today = new Date()
	var month_this_month = c_days[16].date.getMonth();
	var month_this_year = c_days[16].date.getFullYear();

	if(isNN && month_this_year < 2000){
	month_this_year = 1900+ month_this_year ;}
	
	var month_this_date = new Date(month_this_year, month_this_month, 1);

	var month_last_month = (month_this_month > 0) ? month_this_month - 1 : 11;
	var month_last_year = (month_this_month > 0) ? month_this_year : (month_this_year-1);

	var month_last_date = new Date(month_last_year, month_last_month, 1);

	var	month_last_datestr = month_last_year +"-"+ (month_last_month+1) + "-1"; // Add 1 to month to adjust for Javascript 0 month offset

	var month_next_month = (month_this_month < 11) ? month_this_month + 1 : 0;
	var month_next_year = (month_this_month < 11) ? month_this_year : (month_this_year+1);
	

	var month_next_date = new Date(month_next_year, month_next_month, 1);

	var	month_next_datestr = month_next_year +"-"+ (month_next_month+1) + "-1"; // Add 1 to month to adjust for Javascript 0 month offset
	if(c_opts[_OPT_GORESET_POS] == 1) {
		c_html += '<table border="1" cellpadding="0" cellspacing="2"><tr><td>\n';
	}
	c_html += '<table id="'+ c_cal_name +'" border="0" cellpadding="0" cellspacing="2">\n';
	c_html += '<tr>'+ calendar_description +'</tr>';
		
	// Heading and Navigation
	c_html += '<tr><td colspan="7"><table width="100%" border="0" cellpadding="0" cellspacing="0"><tr>';
	c_html += '<td align="left" class="cal_head_title">';
		


	// prev month nav. button
	if(c_show_last_month) {
		if((today - month_last_date) / DAY<30 ){
		c_html += '<a href="javascript:navCalendar(\''+ c_cal_name +'\', \''+ month_last_datestr +'\', \'\', \'\')" class="cal_head_nav">';
		if(c_opts[_OPT_MONTH_NAV_LEN] < 2) {
			c_html += '<FONT SIZE="3"><B>&#171;</B></FONT> '+ _MONTH_NAMES[c_opts[_OPT_MONTH_NAV_LEN]][month_last_month];
		} else {
			c_html += '<FONT SIZE="3"><B>&#171;</B></FONT>';
		}
		c_html += '</a>';}
	} else {
		c_html += '&nbsp;&nbsp;';
	}
	c_html += '</td>';
	c_html += '<td align="center" class="cal_head_title">';

	// month/year heading
	if(c_opts[_OPT_MONTH_YEAR_SELECT]) {
		if(isNN && browserVer < 5) c_html += '<form>\n';
		c_html += '<select name="cal_month_nav" class="cal_head_title"';
		c_html += ' onChange="navCalendar(\''+ c_cal_name +'\', this.options[this.selectedIndex].value, \'\', \'\')">\n';
		var crnt_year = today_date.getFullYear();

		var crnt_month = today_date.getMonth();
		var crnt_date = new Date(crnt_year, crnt_month);
		for(i=0; i<=(c_max_month_range); i++) {
			crnt_year = crnt_date.getFullYear();
		if(isNN && crnt_year < 2000){
		   crnt_year = 1900+crnt_date.getFullYear();}

			crnt_month = crnt_date.getMonth();
			c_html += '<option value="'+ crnt_year +'-'+ (crnt_month + 1) +'-1"';
			if(month_this_date.valueOf() == crnt_date.valueOf()) {
				c_html += " selected";
			}
			c_html += '>'+ _MONTH_NAMES[c_opts[_OPT_MONTH_TITLE_LEN]][crnt_month] +' '+ crnt_year +'</option>\n';
			crnt_date.setMonth(crnt_date.getMonth() + 1);
		}

		c_html += '</select>\n';
		if(isNN && browserVer < 5) c_html += '</form>\n';
	} else {
		c_html += _MONTH_NAMES[c_opts[_OPT_MONTH_TITLE_LEN]][month_this_month] +' '+ month_this_year;
	}
	c_html += '</td>';
	c_html += '<td align="right" class="cal_head_title">';

	// next month nav button
	if(c_show_next_month) {
		if((month_next_date - today ) / DAY<365 ){
		
		c_html += '<a href="javascript:navCalendar(\''+ c_cal_name +'\', \''+ month_next_datestr +'\', \'\', \'\')" class="cal_head_nav">';
		if(c_opts[_OPT_MONTH_NAV_LEN] < 2) {
			c_html += _MONTH_NAMES[c_opts[_OPT_MONTH_NAV_LEN]][month_next_month] +' <FONT SIZE="3"><B>&#187;</B></FONT>';
		} else {
			c_html += '<FONT SIZE="3"><B>&#187;</B></FONT>';
		}
		c_html += '</a>';}
	} else {
		c_html += '&nbsp;&nbsp;';
	}
	c_html += '</td>';
	c_html += '</tr></table></td></tr>';
	
	// Day Names
	c_html += '<tr>';
	//c_dow = c_days[0].date.getDay();
	c_dow = 1;
	for(i=0; i<7; i++) {
		c_html += '<td class="cal_head_day" style="background-color: '+ c_opts[_OPT_BGCOLOR_DARK] +';">';
		c_html += _DOW_NAMES[c_opts[_OPT_DOW_NAME_LEN]][c_dow];
		c_html += '</td>';

		c_dow = (c_dow < 6) ? c_dow + 1 : 0;
	}
	c_html += '</tr>';
	c_html += '';
	

	
	// Day Rows
	for(c_row=0; c_row<6; c_row++) {
		c_html += '<tr>';
		
		// Day Columns
		for(c_col=0; c_col<7; c_col++) {
		
			// Set Background Colours
			if(c_days[c_day].date.getMonth() != month_this_month) {
				c_day_bgColor = c_opts[_OPT_DAY_OFF];
			} else if (c_days[c_day].date < today_date) {
				c_day_bgColor = c_opts[_OPT_DAY_PAST];
			} else if (c_days[c_day].date > today_date) {
				c_day_bgColor = c_opts[_OPT_DAY_FUTURE];
			} else {
				c_day_bgColor = c_opts[_OPT_DAY_TODAY];

			}

			// Tint colours on the weekend
			if(c_days[c_day].date.getDay() == 6 || c_days[c_day].date.getDay() == 0) {
				c_day_bgColor = tintColour(c_day_bgColor, c_opts[_OPT_DAY_COL_WE_TINT], c_opts[_OPT_DAY_COL_WE_AMNT]);
			}

			if(c_days[c_day].date.getDate()==1 && c_days[c_day].date.getDay()>=5){
			last_row = 1;}
			else{
			last_row = 0;}

//	if((c_row < 5) || (last_row == 1 && c_days[c_day].date.getDate() > 27)){	
		// Create the days
				if(isNN && browserVer < 5) {
				c_html += '<td align="left" valign="top" bgColor="'+ c_day_bgColor +'" class="cal_day">';
				c_html += '<ilayer><layer id="'+ c_cal_name +'_day_'+ c_day +'"';
				c_html += ' height="'+ c_opts[_OPT_DAY_HEIGHT] +'"';
				c_html += ' width="'+ c_opts[_OPT_DAY_WIDTH] +'"';
				c_html += ' clip="'+ c_opts[_OPT_DAY_WIDTH] +', '+ c_opts[_OPT_DAY_HEIGHT] +'"';
				c_html += ' onLoad="calLoadDay(this, '+ c_day +', \''+ c_cal_name +'\')"';
				c_html += '>';
			} else {
				c_html += '<td align="left" valign="top" bgColor="'+ c_day_bgColor +'" class="cal_day"';
				c_html += ' id="'+ c_cal_name +'_day_'+ c_day +'"';
				c_html += ' height="'+ c_opts[_OPT_DAY_HEIGHT] +'"';
				c_html += ' width="'+ c_opts[_OPT_DAY_WIDTH] +'"';
				if (!(c_days[c_day].date > today_date || c_days[c_day].date < today_date)) {
					c_html += ' style="border: 1px solid '+ c_opts[_OPT_DAY_TODAY_BORDER] +'"';
				}
				c_html += '>';
			}
//}

			//required to show only current month dates
			if(c_days[c_day].date.getMonth() == month_this_month){
				if((c_row >= 5)&&(c_days[c_day].date.getDate() > 27)) {
				c_html += '<span class="cal_date">'+ c_days[c_day].date.getDate() +'</span>';
				}
				else{
				if(c_row<5){

				c_html += '<span class="cal_date">'+ c_days[c_day].date.getDate() +'</span>';
			}
			}}

			if(isNN && browserVer < 5) {
				c_html += '</layer></ilayer>';
			}
			c_html += '</td>';

			c_day++;
		}
		c_html += '</tr>';
	}

	if(c_opts[_OPT_GORESET_POS] == 0) { // Go and Reset buttons at bottom
		//See Selected Days
		c_html += '<tr>';
		c_html += '<td colspan="7" align="left"><table border="0" cellpadding="0" cellspacing="0"><tr valign=top><td><input type="button" name="Search" value="Search" onclick="';
		c_html += 'javascript:navCalendar(\''+ c_cal_name +'\', \'\', \'\', \'Selected\')';
		c_html += '"></td>';

		//Reset Select Days
		c_html += '<td>&nbsp;&nbsp;</td>';
		c_html += '<td><input type="button" name="Reset" value="Reset" onclick="';		
		c_html += 'javascript:navCalendar(\''+ c_cal_name +'\', \'\', \'\', \'del_all\')';
		c_html += '"></td></tr></table></td>';
		c_html += '</tr>';
	}

	c_html += '</table>';

	if(c_opts[_OPT_GORESET_POS] == 1) { // Go and Reset buttons to right
		c_html += '</td><td valign=\"bottom\">\n';

		//See Selected Days
		c_html += '<a href="';
		c_html += 'javascript:navCalendar(\''+ c_cal_name +'\', \'\', \'\', \'Selected\')';

		c_html += '">Go</a><br>';

		//Reset Select Days
		c_html += '<a href="';
		c_html += 'javascript:navCalendar(\''+ c_cal_name +'\', \'\', \'\', \'del_all\')';
		c_html += '">Reset</a>';
		
		c_html += '</td></tr></table>\n';
	}

	// Create hover object if required
	if(c_opts[_OPT_DAY_HOVER]) {
		if(isNN && browserVer < 5) {
			c_html += '<layer id="'+ c_cal_name +'_hover" class="cal_hover" visibility="hidden"></layer>';
		} else {
			c_html += '<div id="'+ c_cal_name +'_hover" class="cal_hover" style="visibility: hidden;"></div>';
		}
	}

	// Create the calender table
	document.write(c_html);
	if(isNN && browserVer < 5) {
	} else if(document.getElementById) {
		for(c_day=0; c_day < c_days.length; c_day++) {
			c_day_obj = document.getElementById(c_cal_name +'_day_'+ c_day);
			calLoadDay(c_day_obj, c_day, c_cal_name);
		}
	} else {
		for(c_day=0; c_day < c_days.length; c_day++) {
			c_day_obj = eval(c_cal_name +'_day_'+ c_day);
			calLoadDay(c_day_obj, c_day, c_cal_name);
		}
	}
}

function calCreateFader(c_cal_name) {
	var c_opts = eval(c_cal_name +"_opts");

	if(isNN && browserVer < 5) {
		document.write('<ilayer id="'+ c_cal_name +'_fader_parent">');
		document.write('</ilayer>');
		document.write('<layer id="'+ c_cal_name +'_fader" class="cal_fader" onLoad="calLoadFader(this, \''+ c_cal_name +'\')">'+ c_opts[_OPT_DAY_FADE_DEFAULT_TEXT] +'</layer>');
	} else {
		document.write('<div id="'+ c_cal_name +'_fader" class="cal_fader">'+ c_opts[_OPT_DAY_FADE_DEFAULT_TEXT] +'</div>');
	}
}

function calLoadDay(c_day_obj, c_day, c_cal_name) {
	var c_opts = eval(c_cal_name +"_opts");
	var c_day = eval(c_cal_name +'_days['+ c_day +']');

	c_day_obj.onmouseover = mouseOverDay;
	c_day_obj.onmouseout = mouseOutDay;
	if(isNN && browserVer < 5) c_day_obj.captureEvents(Event.CLICK);
	c_day_obj.onclick = clickDay;

	c_day_obj.selected = false;
	c_day_obj.c_day = c_day;
	c_day_obj.c_cal_name = c_cal_name;
	if(c_day_obj.c_day.selected) {
		c_day_obj.bgColorOld = c_day_obj.bgColor;
		c_day_obj.bgColor = c_opts[_OPT_DAY_SELECTED];
	}
}

function navCalendar(c_cal_name, c_date_to, cal_href, flag) {
	var c_days = eval(c_cal_name +'_days');
	var c_opts = eval(c_cal_name +"_opts");
	var iCount = 0;
	var cal_href_select;
	var c_dateSearch = '';
	var to_date = new Date();
	
	var sToday = new Date(getFullYear(to_date),to_date.getMonth(),to_date.getDate());
	
			
	// Find month variable in the URL
	// Note: The '=' has to go outside the first bracketed pattern because Netscape 4.7 seems to require
	//       a character to follow the result when performing a replace (below).
	var cal_regexp = new RegExp("(.*)[?|&]"+ c_cal_name +"[^&]*(&.*|$)");
	
	if (cal_href == '') {
		cal_href = document.location.toString();
	}

	if(c_date_to == ''){
		var month_this_month = c_days[16].date.getMonth();
		var month_this_year = c_days[16].date.getFullYear();
		if(isNN && month_this_year < 2000) {
		month_this_year = 1900 + month_this_year ;}
		else{
		month_this_year = month_this_year ;
		}

		var month_this_date = new Date(month_this_year, month_this_month, 1);
		c_date_to = month_this_year +"-"+ (month_this_month+1) + "-1"; // Add 1 to month to adjust for Javascript 0 month offset
	} else if (c_date_to == 'sel_days_none') {
		
	}
	while(cal_regexp.test(cal_href)) {
		cal_href = cal_href.replace(cal_regexp, "$1$2");
	}
	cal_href = c_opts[_OPT_SEE_SEL_DAYS_HREF]
	var url_quest_pos = cal_href.indexOf('?')
	if(url_quest_pos < 0) {
		cal_href += "?"+ c_cal_name +"_month="+ c_date_to;
	} else if (url_quest_pos == cal_href.length) {
		cal_href += c_cal_name +"_month="+ c_date_to;
	} else {
		cal_href += "&"+ c_cal_name +"_month="+ c_date_to;
	}
		if(flag == 'del_all') {
			cal_href += "&"+ c_cal_name + "_del_all_days=true";
	} else {
		cal_href_select = cal_href;
		for(c_day=0; c_day < 42; c_day++) {
			if(c_days[c_day].selected && !c_days[c_day].was_sel) {
			sStartDate = new Date(c_days[c_day].date.getFullYear(),c_days[c_day].date.getMonth(),c_days[c_day].date.getDate()) ;
			if(isNN && c_days[c_day].date.getFullYear() < 2000) {
			sStartDate = new Date(c_days[c_day].date.getFullYear()+1900,c_days[c_day].date.getMonth(),c_days[c_day].date.getDate()) ;
			}
			if (sStartDate < sToday) {
			alert ("Search date cannot be a past date");
			return ;
			}
			if(c_dateSearch == ''){
					c_dateSearch =  (c_days[c_day].date.getMonth()+1) + "-" + c_days[c_day].date.getDate()+ "-" + c_days[c_day].date.getFullYear();
					if(isNN && c_days[c_day].date.getFullYear() < 2000) {
					c_dateSearch =  (c_days[c_day].date.getMonth()+1) + "-" + c_days[c_day].date.getDate()+ "-" + (c_days[c_day].date.getFullYear()+ 1900);
						}
					iCount = iCount + 1;
				}
				else{
					if(isNN && c_days[c_day].date.getFullYear() < 2000) {
					c_dateSearch =  c_dateSearch + ";" + (c_days[c_day].date.getMonth()+1) + "-" + c_days[c_day].date.getDate()+ "-" + (c_days[c_day].date.getFullYear()+1900);
						} 
					else{
					c_dateSearch =  c_dateSearch + ";" + (c_days[c_day].date.getMonth()+1) + "-" + c_days[c_day].date.getDate()+ "-" + c_days[c_day].date.getFullYear();

					}
					iCount = iCount + 1;

				}

			} else if(!c_days[c_day].selected && c_days[c_day].was_sel) {
				
				cal_href += "&"+ c_cal_name + "_del_days[]=";
						
			cal_href += c_days[c_day].date.getFullYear();
			if(isNN && c_days[c_day].date.getFullYear() < 2000) {
			cal_href += c_days[c_day].date.getFullYear() + 1900;

				}
				// Add 1 to month to adjust for Javascript 0 based months
				cal_href += "-"+ (c_days[c_day].date.getMonth() + 1);
				cal_href += "-"+ c_days[c_day].date.getDate() +"";
			}
		}
	}
	if(flag == 'Selected'){
		if ((iCount==0) && (month_this_month + 1)== (to_date.getMonth()+1)){
		c_dateSearch = (to_date.getMonth()+1) + "-" + to_date.getDate() + "-" + to_date.getFullYear();
		}
		else{
		if (iCount==0){
		alert ("Please select a date to search");
		return ;
		}}
		cal_href_select += "&" + "DateSearch="+ c_dateSearch;
		document.location = cal_href_select	} 
	else{
		document.location = cal_href;}
}


function calWriteDiary(c_cal_name,cal_href) {
	var c_sel_days = eval(c_cal_name +'_sel_days');
	var c_evts = eval(c_cal_name +'_evts');
	var c_opts = eval(c_cal_name +'_opts');
	var c_days = eval(c_cal_name +'_days');	
	var c_html = '';
	var num_events = 0;
	var c_dateSearch = '';

	

	for(c_day=0; c_day < 42; c_day++) {
			if(c_days[c_day].selected && !c_days[c_day].was_sel) {
				if(c_dateSearch == ''){
					c_dateSearch =  (c_days[c_day].date.getMonth()+1) + "-" + c_days[c_day].date.getDate()+ "-" + c_days[c_day].date.getFullYear();
				}
				else{
					c_dateSearch =  c_dateSearch + ";" + (c_days[c_day].date.getMonth()+1) + "-" + c_days[c_day].date.getDate()+ "-" + c_days[c_day].date.getFullYear();

				}
				}		
			
		}
cal_href += "&"+"DateSearch="+ c_dateSearch ;
document.location = cal_href;
}

//Netscape Only
function calLoadFader(c_fader, c_cal_name) {
	var c_fader_parent = eval('document.'+ c_cal_name +'_fader_parent');
	c_fader.top = c_fader_parent.pageY;
	c_fader.left = c_fader_parent.pageX;
}

//Convert RGB string (returned by NS 6) to hex style colour string (eg. '#336699')
function rgbToHex(rgbInput){
    var r, g, b;
    var commaFirst, commaSec;
    var output;
    if(rgbInput.indexOf("rgb(") == -1 || rgbInput.indexOf(")") == -1) return rgbInput;
    
    var tempStr= rgbInput.substring(rgbInput.indexOf("rgb("));
    var tempStrIndex= rgbInput.indexOf(tempStr);
	
    var rgb= rgbInput.substring(tempStrIndex+4, 
        tempStrIndex+ tempStr.indexOf(")"));

    commaFirst = rgb.indexOf(",");
    commaSec = rgb.lastIndexOf(",");

    r= rgb.substring(0, commaFirst);
    g= rgb.substring(commaFirst+1, commaSec);
    b= rgb.substring(commaSec+1);

    output= rgbInput.substring(0, rgbInput.indexOf("rgb("));
    output+= "#"+toHex(r)+toHex(g)+toHex(b);
    output+= rgbInput.substring(tempStrIndex+tempStr.indexOf(")")+1);
    if(output.indexOf("rgb(")>0) output= rgbToHex(output);
    return output;
}

 function toHex(dec){
 	var result= (parseInt(dec).toString(16));
 	if(result.length ==1) result= ("0" +result);
 	return result.toUpperCase();
}


function getDaysInMonth(month,year){
var days;
if (month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12)  days=31;
else if (month==4 || month==6 || month==9 || month==11) days=30;
else if (month==2)  {
if (isLeapYear(year)) { days=29; }
else { days=28; }
}
return (days);
}

function isLeapYear (Year) {
if (((Year % 4)==0) && ((Year % 100)!=0) || ((Year % 400)==0)) {
return (true);
} else { return (false); }
}

function RObj(ea)
{var 
LS="";
var QS=new Object();
var un="undefined";
var f="function";
var n="number";
var r="string";
var e1="ERROR:Index out of range in\r\nRequest.QueryString";
var e2="ERROR:Wrong number of arguments or invalid property assignment\r\nRequest.QueryString";var e3="ERROR:Object doesn't support this property or method\r\nRequest.QueryString.Key";
function Err(arg){if(ea)alert("Request Object:\r\n"+arg)};
function URID(t){var d="";if(t){
for(var i=0;i<t.length;++i){var c=t.charAt(i);d+=(c=="+"?" ":c);};};
return unescape(d);};
function OL(o){var l=0;for(var i in o){if(typeof(o[i])!=f) l++;};return l;};function AK(key){var auk=true;for(var u in QS){if(typeof(QS[u])!=f&&u.toString().toLowerCase()==key.toLowerCase()){auk=false;return u;}};if(auk){QS[key]=new Object();QS[key].toString=function(){return TS(QS[key])};QS[key].Count=function(){return OL(QS[key])};QS[key].Count.toString=function(){return OL(QS[key]).toString()};QS[key].Item=function(e){if(typeof(e)==un) return QS[key];else {if(typeof(e)==n){var a=QS[key][Math.ceil(e)];if(typeof(a)==un) Err(e1+"(\""+key+"\").Item("+e+")");return a;}else Err("ERROR:Expecting numeric input in\r\nRequest.QueryString(\""+key+"\").Item(\""+e+"\")");}};QS[key].Item.toString=function(e){if(typeof(e)==un) return QS[key].toString();else {var a=QS[key][e];if(typeof(a)==un) Err(e1+"(\""+key+"\").Item("+e+")");return a.toString();};};QS[key].Key=function(e){var t=typeof(e);if(t==r){var a=QS[key][e];return(typeof(a)!=un&&a&&a.toString()?e:"");}else Err(e3+"("+(e?e:"")+")");};QS[key].Key.toString=function(){return un};};return key};function AVTK(key,val){if(key!=""){var key=AK(key);var l=OL(QS[key]);QS[key][l+1]=val;}};function TS(o){var s="";for(var i in o){var ty=typeof(o[i]);if(ty=="object") s+=TS(o[i]);else if(ty!=f) s+=o[i]+", ";};var l=s.length;if(l>1)return(s.substring(0,l-2));return(s==""?un:s);};function KM(k,o){var k=k.toLowerCase();for(var u in o){if(typeof(o[u])!=f&&u.toString().toLowerCase()==k) return u;};}if(window.location&&window.location.search){LS=window.location.search;var l=LS.length;if(l>0){LS=LS.substring(1,l);var preAmpAt=0;var ampAt=-1;var eqAt=-1;var k=0;var skip=false;for(var i=0;i<l;++i){var c=LS.charAt(i);if(LS.charAt(preAmpAt)=="="||(preAmpAt==0&&i==0&&c=="=")) skip=true;if(c=="="&&eqAt==-1&&!skip) eqAt=i;if(c=="&"&&ampAt==-1){if(eqAt!=-1) ampAt=i;if(skip) preAmpAt=i+1;skip=false;};if(ampAt>eqAt){AVTK(URID(LS.substring(preAmpAt,eqAt)),URID(LS.substring(eqAt+1,ampAt)));preAmpAt=ampAt+1;eqAt=ampAt=-1;++k;};};if(LS.charAt(preAmpAt)!="="&&(preAmpAt!=0||i!=0||c!="=")){if(preAmpAt!=l){if(eqAt!=-1) AVTK(URID(LS.substring(preAmpAt,eqAt)),URID(LS.substring(eqAt+1,l)));else if(preAmpAt!=l-1) AVTK(URID(LS.substring(preAmpAt,l)),"");};if(l==1) AVTK(LS.substring(0,1),"");};};};var TC=OL(QS);if(!TC) TC=0;QS.toString=function(){return LS.toString()};QS.Count=function(){return(TC?TC:0)};QS.Count.toString=function(){return(TC?TC.toString():"0")};QS.Item=function(e){if(typeof(e)==un) return LS;else {if(typeof(e)==n){var e=Math.ceil(e);var c=0;for(var i in QS){if(typeof(QS[i])!=f&&++c==e) return QS[i];};Err(e1+"().Item("+e+")");}else return QS[KM(e,QS)];};return un;};QS.Item.toString=function(){return LS.toString()};QS.Key=function(e){var t=typeof(e);if(t==n){var e=Math.ceil(e);var c=0;for(var i in QS){if(typeof(QS[i])!=f&&++c==e) return i;}}else if(t==r){var e=KM(e,QS);var a=QS[e];return(typeof(a)!=un&&a&&a.toString()?e:"");}else Err(e2+"().Key("+(e?e:"")+")");Err(e1+"().Item("+e+")");};QS.Key.toString=function(){Err(e2+"().Key");};this.QueryString=function(k){if(typeof(k)==un) return QS;else {var k=KM(k,QS);if(typeof(QS[k])==un){t=new Object();t.Count=function(){return 0};t.Count.toString=function(){return "0"};t.toString=function(){return un};t.Item=function(e){return un};t.Item.toString=function(){return un};t.Key=function(e){Err(e3+"("+(e?e:"")+")");};t.Key.toString=function(){return un};return t;}if(typeof(k)==n) return QS.Item(k);else return QS[k];}};this.QueryString.toString=function(){return LS.toString();};this.QueryString.Count=function(){return(TC?TC:0)};this.QueryString.Count.toString=function(){return(TC?TC.toString():"0")};this.QueryString.Item=function(e){if(typeof(e)==un) return LS.toString();else {if(typeof(e)==n){var e=Math.ceil(e);var c=0;for(var i in QS){if(typeof(QS[i])!=f&&++c==e) return QS[i];};Err(e1+".Item("+e+")");}else return QS[KM(e,QS)];}if(typeof(e)==(n)) Err(e1+".Item("+e+")");return un;};this.QueryString.Item.toString=function(){return LS.toString()};this.QueryString.Key=function(e){var t=typeof(e);if(t==n){var e=Math.ceil(e);var c=0;for(var i in QS){if(typeof(QS[i])=="object"&&(++c==e)){return i;}}}else if(t==r){var e=KM(e,QS);var a=QS[e];return(typeof(a)!=un&&a&&a.toString()?e:"");}else Err(e2+".Key("+(e?e:"")+")");Err(e1+".Item("+e+")");};this.QueryString.Key.toString=function(){Err(e2+".Key");};this.Version=1.2;"";};var Request=new RObj(false);



