var today = new Date();
var curr_month = today.getMonth();
var curr_day = today.getDate();
var curr_year = today.getFullYear();
var curr_date = getDateObject(curr_month + "/01/" + curr_year, "/");
var month2 = "";
var year2 = "";
var prev_month = "";
var prev_year = "";
var next_month = "";
var next_year = "";
var prev_date = "";
var next_date = "";
var position_id = "";
var max_year = curr_year * 1 + 1;
var max_month = curr_month * 1;
var max_day = curr_day * 1;
var max_date = getDateObject(max_month + "/01/" + max_year, "/");
var form_id = "";
var cal_header = "";
var month_string = "";
var month_string2 = "";
var year_string2 = "";

function generate_calendar(year, month, id, form_id, cal_header) {
	month = month * 1;
	year = year * 1;

	var first_of_month = new Date();
	first_of_month.setFullYear(year, month, 1);

	SetDisplayedMonth(year, month);


	var calendar = '<div>';

	calendar += '<div class="cal_top clearfix">';
	calendar += '<div class="cal_title">' + cal_header + '</div>';
	calendar += '<div class="cal_close"><a href="javascript:popup_exit();" class="no_hover" title="' + close_string + '">X</a></div>';
	calendar += '</div>';



	calendar += '<div class="clearfix contents" style="border-bottom: 1px solid #78B9FC; background-color:#FFFFFF;">';

	calendar += '<div style="float:left; width:188px; border-right:1px solid #78B9FC; border-right: 1px solid #78B9FC;">';
	if (prev_date <= curr_date) {
		calendar += '<div class="calendar_prev">' + prev + '</div>';
	} else {
		calendar += '<div class="calendar_prev"><a href="javascript: open_cal(' + prev_year + ', ' + prev_month + ', \'' + id + '\', \'' + form_id + '\',\'' + cal_header + '\');" class="no_hover">' + prev + '</a></div>';
	}

	calendar += '<div style="float:right; padding: 2px 50px 2px 0;">' + month_string + ' - ' + year + '</div>';
	calendar += '</div>';

	calendar += '<div style="float:right; width:188px;">';
	calendar += '<div style="float:left; padding:2px 0 2px 50px;">' + month_string2 + ' - ' + year_string2 + '</div>';
	if (next_date < max_date) {
		calendar += '<div class="calendar_next"><a href="javascript: open_cal(' + next_year + ', ' + next_month + ', \'' + id + '\', \'' + form_id + '\', \'' + cal_header + '\');" class="no_hover">' + next + '</a></div>';
	} else {
		calendar += '<div class="calendar_next">' + next + '</div>';
	}
	calendar += '</div></div>';
	calendar += '<div style="padding: 1px 0;" class="clearfix">';
	calendar += generate_calendar_contents(month, year, "border");
	calendar += generate_calendar_contents(month2, year2, "none");
	calendar += '<br class="clearboth" /></div>';
	calendar += '</div>';

	return calendar;
}

function generate_calendar_contents(month, year, border) {
	var day_field = position_id + 'Day';
	var month_field = position_id + 'Month';

	var max_days = 1000;
	var prev_month_days = new Date(year, month - 1, 1);
	var start_day = prev_month_days.getDay() - firstDay;
	var num_days = days_in_month(month, year);
	var prev_num_days = days_in_month(prev_month, prev_year);
	var prev_start_day = prev_num_days - start_day + 1;
	var calendar = '<div style="float:left; width:189px; border-top: 1px #78B9FC solid;';
	if (border == "border") {
		calendar += ' border-right: 1px #78B9FC solid" id="left-calendar">';
	} else {
		calendar += '" id="right-calendar">';
	}

	/* display headings */
	calendar += '<div class="clearfix">';
	for (s = 0; s < 7; s++) {
		if (((s == 0 || s == 6) && (firstDay == 0)) || ((s == 5 || s == 6) && (firstDay == 1))) {
			calendar += '<div class="weekend line_under">';
		} else {
			calendar += '<div class="weekdays line_under">';
		}
		calendar += day_headings[s] + '</div>';
	}
	calendar += '</div>';

	/* display days */
	calendar += '<div class="clearfix" style="text-align:center">';
	j = 1;
	k = prev_start_day;
	for (i = 0; i < 42; i++) {
		/* days in the month */
		if ((i - start_day >= 0) && (i - start_day < num_days)) {
			x = i - start_day + 1;
			input_month = month;
			input_year = year;
		} else if (i - start_day + 1 < num_days) { // next month
			x = k;
			k++;
			if (month == 1) {
				input_month = 12;
				input_year = year - 1;
			} else {
				input_month = month - 1;
				input_year = year;
			}
		} else { // prev month
			x = j;
			j++;
			if (month == 12) {
				input_month = 1;
				input_year = year + 1;
			} else {
				input_month = month + 1;
				input_year = year;
			}
		}


		var day = new Date();
		day.setFullYear(input_year);
		day.setMonth(input_month - 1);
		day.setDate(x);

		if ((((i) % 7 == 0 || (i) % 7 == 6) && (firstDay == 0)) || (((i) % 7 == 5 || (i) % 7 == 6) && (firstDay == 1))) {
			calendar += '<div class="weekend" ';
			hover_off_class = "hover_off_weekend";
		} else {
			calendar += '<div class="weekdays" ';
			hover_off_class = "hover_off_weekdays";
		}

		if (day >= today) {
			/*
			if (input_month > month) {
			calendar += 'style="color:#000;">' + x + '</div>';
			} else if (input_month < month) {
			calendar += 'style="color:#999;">' + x + '</div>';
			*/
			if (input_month != month) {
				calendar += 'style="color:#999;">' + x + '</div>';
			} else {
				calendar += 'onmouseover="this.className=\'hover_on\'" onmouseout="this.className=\'' + hover_off_class + '\'" class="hover_off"><a href="javascript:selectDate(' + x + ', ' + input_month + ', ' + input_year + ', \'' + form_id + '\', \'' + day_field + '\', \'' + month_field + '\')" >' + x + '</a></div>';
			}
		} else {
			calendar += 'style="color:#999;">' + x + '</div>';
		}

		if (((i) % 7 == 6) && (i < 36)) {
			if (i - start_day + 1 > num_days) {
				break;
			}
			calendar += '</div><div class="clearfix">';
		}
	}
	calendar += '</div>';
	calendar += '</div>';


	return calendar;
}

/* count how many days in month */
function days_in_month(m, y) {
	if (m == 0) {
		m = 1; y += 1;
	}
	var md = new Date();
	md.setDate(1);
	md.setFullYear(y);
	md.setMonth(m);

	md.setDate(md.getDate() - 1);

	return md.getDate();
}


function selectDate(selected_day, selected_month, selected_year, form_id, day_field, month_field) {

	// show the dropdowns
	document.getElementById('retDay').style.visibility = 'visible';
	document.getElementById('retMonth').style.visibility = 'visible';

	if (selected_month > 12) {
		selected_month = 1;
		selected_year += 1;
	}

	if ((day_field == "depDay") || (month_field == "depMonth")) {
		var mon_element = document.getElementById("depMonth");
		document.getElementById("depDay").options[selected_day - 1].selected = true;

		for (i = 0; i < mon_element.options.length; i++)
			if (mon_element.options[i].value == selected_month - 1) {
			mon_element.options[i].selected = true;
		}

		if (typeof (mon_element.onchange) == "function") {
			mon_element.onchange();
		}

	} else if ((day_field == "retDay") || (month_field == "retMonth")) {
		var mon_element = document.getElementById("retMonth");
		document.getElementById("retDay").options[selected_day - 1].selected = true;

		for (i = 0; i < mon_element.options.length; i++)
			if (mon_element.options[i].value == selected_month - 1)
				mon_element.options[i].selected = true;
	}

	if (document.getElementById('popup')) {
		document.getElementById('popup').style.display = "none";
	}
}

function open_cal(year, month, id, formId, cal_header) {
	if (month.length == 0)
		month = curr_month;
	if (year.length == 0)
		year = curr_year;
	position_id = id;
	form_id = formId;

	document.getElementById('calendar_field').innerHTML = generate_calendar(year, month, id, form_id, cal_header);
	setBorder();
}


function setBorder() {
	h1 = document.getElementById("left-calendar");
	h2 = document.getElementById("right-calendar");
	boxh1 = h1.clientHeight;
	boxh2 = h2.clientHeight;
	if (boxh1 >= boxh2) {
		document.getElementById("right-calendar").style.height = boxh1 + "px";
	} else {
		document.getElementById("left-calendar").style.height = boxh2 + "px";
	}
}

// Sets the currently-displayed month object
function SetDisplayedMonth(year, month) {
	month_string = month_array[month - 1];
	if (month == 1) {
		prev_month = 12;
		prev_year = year - 1;
		next_month = month + 1;
		next_year = year;
		month_string2 = month_array[month];
		year_string2 = year;
	} else if (month == 12) {
		prev_month = month - 1;
		prev_year = year;
		next_month = 1;
		next_year = year + 1;
		month_string2 = month_array[0];
		year_string2 = year + 1;
	} else {
		prev_month = month - 1;
		prev_year = year;
		next_month = month + 1;
		next_year = year;
		month_string2 = month_array[month];
		year_string2 = year;
	}

	month2 = next_month;
	year2 = next_year;

	// Creates the previous and next month objects
	prev_date = getDateObject(prev_month + "/01/" + prev_year, "/");
	next_date = getDateObject(next_month + "/01/" + next_year, "/");
}

function getDateObject(dateString, dateSeperator) {
	//This function return a date object after accepting 
	//a date string ans dateseparator as arguments
	var curValue = dateString;
	var sepChar = dateSeperator;
	var curPos = 0;
	var cDate, cMonth, cYear;

	//extract day portion
	curPos = dateString.indexOf(sepChar);
	cDate = dateString.substring(0, curPos);

	//extract month portion				
	endPos = dateString.indexOf(sepChar, curPos + 1);
	cMonth = dateString.substring(curPos + 1, endPos);

	//extract year portion				
	curPos = endPos;
	endPos = curPos + 5;
	cYear = curValue.substring(curPos + 1, endPos);

	//Create Date Object
	dtObject = new Date(cYear, cMonth, cDate);
	return dtObject;
}

function ShowHideDropDownLists(show) {
	if (BrowserDetect.browser == 'Explorer' && BrowserDetect.version < 7) {
		var lValue = true;
		if (show) {
			lValue = false;
		}
		var lRetDayContainer = document.getElementById('retDay');
		if (lRetDayContainer != null) {
			lRetDayContainer.disabled = lValue;
		}

		var lRetMonthContainer = document.getElementById('retMonth');
		if (lRetMonthContainer != null) {
			lRetMonthContainer.disabled = lValue;
		}

		var lDepDayContainer = document.getElementById('depDay');
		if (lDepDayContainer != null) {
			lDepDayContainer.disabled = lValue;
		}

		var lDepMonthContainer = document.getElementById('depMonth');
		if (lDepMonthContainer != null) {
			lDepMonthContainer.disabled = lValue;
		}
	}
}


var BrowserDetect = {
	init: function() {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
		|| this.searchVersion(navigator.appVersion)
		|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function(data) {
		for (var i = 0; i < data.length; i++) {
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function(dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index + this.versionSearchString.length + 1));
	},
	dataBrowser: [
	{ string: navigator.userAgent,
		subString: "OmniWeb",
		versionSearch: "OmniWeb/",
		identity: "OmniWeb"
	},
	{
		string: navigator.vendor,
		subString: "Apple",
		identity: "Safari"
	},
	{
		prop: window.opera,
		identity: "Opera"
	},
	{
		string: navigator.vendor,
		subString: "iCab",
		identity: "iCab"
	},
	{
		string: navigator.vendor,
		subString: "KDE",
		identity: "Konqueror"
	},
	{
		string: navigator.userAgent,
		subString: "Firefox",
		identity: "Firefox"
	},
	{
		string: navigator.vendor,
		subString: "Camino",
		identity: "Camino"
	},
	{       // for newer Netscapes (6+)
		string: navigator.userAgent,
		subString: "Netscape",
		identity: "Netscape"
	},
	{
		string: navigator.userAgent,
		subString: "MSIE",
		identity: "Explorer",
		versionSearch: "MSIE"
	},
	{
		string: navigator.userAgent,
		subString: "Gecko",
		identity: "Mozilla",
		versionSearch: "rv"
	},
	{               // for older Netscapes (4-)
		string: navigator.userAgent,
		subString: "Mozilla",
		identity: "Netscape",
		versionSearch: "Mozilla"
	}
    ],
	dataOS: [
	{
		string: navigator.platform,
		subString: "Win",
		identity: "Windows"
	},
	{
		string: navigator.platform,
		subString: "Mac",
		identity: "Mac"
	},
	{
		string: navigator.platform,
		subString: "Linux",
		identity: "Linux"
	}
    ]
};

BrowserDetect.init()
