// Ultimate client-side JavaScript client sniff. Version 3.03
// (C) Netscape Communications 1999-2001.  Permission granted to reuse and distribute.

// convert all characters to lowercase to simplify testing
var agt=navigator.userAgent.toLowerCase();

// *** BROWSER VERSION ***
// Note: On IE5, these return 4, so use is_ie5up to detect IE5.
var is_major = parseInt(navigator.appVersion);
var is_minor = parseFloat(navigator.appVersion);

// Note: Opera and WebTV spoof Navigator.  We do strict client detection.
// If you want to allow spoofing, take out the tests for opera and webtv.
var is_nav  = ((agt.indexOf('mozilla')!=-1) && (agt.indexOf('spoofer')==-1)
			&& (agt.indexOf('compatible') == -1) && (agt.indexOf('opera')==-1)
			&& (agt.indexOf('webtv')==-1) && (agt.indexOf('hotjava')==-1));
var is_nav2 = (is_nav && (is_major == 2));
var is_nav3 = (is_nav && (is_major == 3));
var is_nav4 = (is_nav && (is_major == 4));
var is_nav4up = (is_nav && (is_major >= 4));
var is_navonly      = (is_nav && ((agt.indexOf(";nav") != -1) ||
					  (agt.indexOf("; nav") != -1)) );
var is_nav6 = (is_nav && (is_major == 5));
var is_nav6up = (is_nav && (is_major >= 5));
var is_gecko = (agt.indexOf('gecko') != -1);

var is_ie     = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));
var is_ie3    = (is_ie && (is_major < 4));
var is_ie4    = (is_ie && (is_major == 4) && (agt.indexOf("msie 4")!=-1) );
var is_ie4up  = (is_ie && (is_major >= 4));
var is_ie5    = (is_ie && (is_major == 4) && (agt.indexOf("msie 5.0")!=-1) );
var is_ie5_5  = (is_ie && (is_major == 4) && (agt.indexOf("msie 5.5") !=-1));
var is_ie5up  = (is_ie && !is_ie3 && !is_ie4);
var is_ie5_5up =(is_ie && !is_ie3 && !is_ie4 && !is_ie5);
var is_ie6    = (is_ie && (is_major == 4) && (agt.indexOf("msie 6.")!=-1) );
var is_ie6up  = (is_ie && !is_ie3 && !is_ie4 && !is_ie5 && !is_ie5_5);

var is_opera = (agt.indexOf("opera") != -1);
var is_opera2 = (agt.indexOf("opera 2") != -1 || agt.indexOf("opera/2") != -1);
var is_opera3 = (agt.indexOf("opera 3") != -1 || agt.indexOf("opera/3") != -1);
var is_opera4 = (agt.indexOf("opera 4") != -1 || agt.indexOf("opera/4") != -1);
var is_opera5 = (agt.indexOf("opera 5") != -1 || agt.indexOf("opera/5") != -1);
var is_opera5up = (is_opera && !is_opera2 && !is_opera3 && !is_opera4);

// *** PLATFORM ***
var is_win   = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) );
var is_mac   = (agt.indexOf("mac")!=-1);

var FORM_NAME;
var FIELD_NAME;
var FIELD;
var LAYER_NAME;
var MAX_YEAR;
var MIN_YEAR;
var ONCLICKFUNCTION;
var LONGDATE=false;

var IS_VISIBLE = new Boolean(false);

/*
 FORM_NAME	- form name which values will be written to when user selects
 FIELD_NAME	- field in 'FORM_NAME' to replace value with
 LAYER_NAME	- name of the layer that holds the calendar
 left		- where to position calendar's left edge (pixels)
 top		- where to position the calendar's top edge (pixels)
 */
 
 function Calendar3(form_name, field_name, layer_name, minyear, maxyear, onClickFunc, LongDate)
{
	if(LongDate==null||LongDate==false)
		LONGDATE=false
	else
		LONGDATE=true;
		
	MAX_YEAR = maxyear;
	MIN_YEAR = minyear;
	ONCLICKFUNCTION = onClickFunc;
	
	if (is_nav4) { return; }		// go away foul demon!

	if (toggleCalendar(layer_name) == false) { return; }

	FORM_NAME   = new String(form_name);
	FIELD_NAME  = new String(field_name);
	LAYER_NAME  = layer_name;
	eval("FIELD = document."+FORM_NAME+"."+FIELD_NAME);
	
	button_obj = document.getElementById(field_name + "-btn");

	var field_value;
	
	//FIELD.value = FIELD.value.replace(/(^\s+|\s+$)/g,'');
	
	var sDay 	= 0;
	var sMnth 	= 0;
	var sYear 	= 0;
		
	if (sDay == '' || sDay == '00' || sMnth == '' || sMnth == '00' || sYear == '' || sYear == '00') {
		var today = new Date();
		sDay = new Number(today.getDate());
		sMnth = new Number(today.getMonth()) + 1;
		sYear = new Number(today.getFullYear());
	}
	
	displayCalendar(sMnth, sYear);
	
	if (is_ie5up||is_nav6up||is_opera5up) {
		document.getElementById(LAYER_NAME).style.visibility='visible';
		document.getElementById(LAYER_NAME).style.left=XPosn(button_obj) + 20;
		document.getElementById(LAYER_NAME).style.top=YPosn(button_obj);

	} else if (is_nav4) {
		document.eval(LAYER_NAME).visibility=true;
		document.eval(LAYER_NAME).left=XPosn(button_obj) + 20;
		document.eval(LAYER_NAME).top=YPosn(button_obj);

	} else {
		eval(LAYER_NAME + ".style.visibility='visible'");
		eval(LAYER_NAME + ".style.left=" + XPosn(button_obj)) + 20;
		eval(LAYER_NAME + ".style.top=" + YPosn(button_obj));
	}
}
 
function Calendar2(form_name, field_name, layer_name, minyear, maxyear, onClickFunc, LongDate)
{
	if(LongDate==null||LongDate==false)
		LONGDATE=false
	else
		LONGDATE=true;
		
	MAX_YEAR = maxyear;
	MIN_YEAR = minyear;
	//ONCLICKFUNCTION = onClickFunc;
	
	if (is_nav4) { return; }		// go away foul demon!

	if (toggleCalendar(layer_name) == false) { return; }

	FORM_NAME   = new String(form_name);
	FIELD_NAME  = new String(field_name);
	LAYER_NAME  = layer_name;
	eval("FIELD = document."+FORM_NAME+"."+FIELD_NAME);
	
	button_obj = document.getElementById(field_name + "-btn");

	var field_value;
	
	//FIELD.value = FIELD.value.replace(/(^\s+|\s+$)/g,'');
	
	var sDay 	= 0;
	var sMnth 	= 0;
	var sYear 	= 0;
		
	if (sDay == '' || sDay == '00' || sMnth == '' || sMnth == '00' || sYear == '' || sYear == '00') {
		var today = new Date();
		sDay = new Number(today.getDate());
		sMnth = new Number(today.getMonth()) + 1;
		sYear = new Number(today.getFullYear());
	}
	
	displayCalendar(sMnth, sYear);
	
	if (is_ie5up||is_nav6up||is_opera5up) {
		document.getElementById(LAYER_NAME).style.visibility='visible';
		document.getElementById(LAYER_NAME).style.left=XPosn(button_obj) + 20;
		document.getElementById(LAYER_NAME).style.top=YPosn(button_obj);

	} else if (is_nav4) {
		document.eval(LAYER_NAME).visibility=true;
		document.eval(LAYER_NAME).left=XPosn(button_obj) + 20;
		document.eval(LAYER_NAME).top=YPosn(button_obj);

	} else {
		eval(LAYER_NAME + ".style.visibility='visible'");
		eval(LAYER_NAME + ".style.left=" + XPosn(button_obj)) + 20;
		eval(LAYER_NAME + ".style.top=" + YPosn(button_obj));
	}
}


function toggleCalendar(layer_name)
{
	var temp = new String("");

	if (IS_VISIBLE == true) {
		IS_VISIBLE = false;
		temp = "hidden";
		showme();
	} else {
		IS_VISIBLE = true;
		temp = "visible";
		hideme();
	}

	if (is_nav4) {
		document.eval(layer_name).visibility=IS_VISIBLE;

	} else if (is_nav6up||is_opera5up||is_ie6up) {
		document.getElementById(layer_name).style.visibility=temp;

	} else {
		eval(layer_name).style.visibility=temp;

	}

	return IS_VISIBLE;

}

function findYear(pYear, year) {
	for (var i=0; i<pYear.length; i++) 
		if (pYear[i].value == year)
			return i;
}

function selectDay(day,month,year) {
	month++;
	
	if(LONGDATE==false)
	{
		if (day.length < 2) day = "0" + day;
		if (month.length < 2) month = "0" + month;
	}
	else
	{
		day=""+day;
		month=""+month;
	}

	var pField = document.getElementById(FIELD_NAME);
	pField.value = day + '/' + month + '/' + year
	
	var monthName = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
	
	if (FIELD_NAME != "summary_vpd"){
		document.getElementById("Select1" + FIELD_NAME).selectedIndex = day;
		document.getElementById("Select2" + FIELD_NAME).selectedIndex = month;
		for (var ii = 1; ii < document.getElementById("Select3" + FIELD_NAME).options.length; ii++)
		{
			if (document.getElementById("Select3" + FIELD_NAME).options[ii].value == year)
			{
				document.getElementById("Select3" + FIELD_NAME).options[ii].selected = true;
			}
		}
	}
	
	toggleCalendar(LAYER_NAME);
	eval(ONCLICKFUNCTION);
}

function clickDay(date)
{
	//FIELD.value = date;
	//toggleCalendar(LAYER_NAME);
	
	//document.form1.optRegDateDay.selectedIndex = 
}


function displayCalendar(month, year)
{	
	var thisMonth = parseInt(month,10);
	var thisYear  = parseInt(year,10);
	
	month 	= thisMonth - 1;
	year 	= thisYear;

	if (MAX_YEAR != null && MAX_YEAR != undefined)
		if (year > MAX_YEAR) return;
		
	if (MIN_YEAR != null && MIN_YEAR != undefined)
		if (year < MIN_YEAR) return;
	
	if (year < 1000) { year += 1900; }
	var prev_month = new Number(month);
	var prev_year = new Number(year);
	if (prev_month < 1) { prev_month = 12; prev_year--; }

	var next_month = new Number(month + 2);
	var next_year = new Number(year);
	if (next_month > 12) { next_month = 1; next_year++; }

	var field_value = new Date(FIELD.value);

	var months = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
	var days = new Number(getDaysInMonth(month + 1, year));
	var first_of_month = new Date (year, month, 1);
	var startingPos = new Number(first_of_month.getDay());
	days += startingPos;

	//var selectedDate = sDay + ' ' + months[sMnth-1] + ' ' +  sYear
	//var field_value = new Date(selectedDate);

	// do some tests now to save time during the loop
	var today = new Date();
	var today_date = new Number(today.getDate());
	var today_month = new Boolean(today.getMonth() == month);
	var today_year = new Boolean(today.getFullYear() == year);
	var is_today = new Boolean();
	var is_weekend = new Boolean();

	// highlight the selected day in the form fields
	var selected_day = new Number(field_value.getDate());
	var selected_month = new Boolean(field_value.getMonth() == month);
	var selected_year = new Boolean(field_value.getFullYear() == year);
	var is_selected = new Boolean();


	var i = new Number(0);

	var div_html = new String('<table border="0" cellpadding="0" cellspacing="0" width="210">');

	div_html += '<tr>';
	div_html += '<td class="jsCalArrows" title="Previous year" onmouseover="this.className=' +"'jsCalActiveArrows'"+ '" onmouseout="this.className=' +"'jsCalArrows'"+ '" onclick="displayCalendar('+thisMonth+','+(thisYear-1)+')">&lt;</td>';
	div_html += '<td class="jsCalArrows" title="Previous month" onmouseover="this.className=' +"'jsCalActiveArrows'"+ '" onmouseout="this.className=' +"'jsCalArrows'"+ '" onclick="displayCalendar('+prev_month+','+prev_year+')">&lt;&lt;</td>';
	div_html += '<td colspan="3" class="jsCalMonth">&nbsp;'+months[month]+'&nbsp;'+year+' </td>';
	div_html += '<td class="jsCalArrows" title="Next month" onmouseover="this.className=' +"'jsCalActiveArrows'"+ '" onmouseout="this.className=' +"'jsCalArrows'"+ '" onclick="displayCalendar('+next_month+','+next_year+')">&gt;&gt;</td>';
	div_html += '<td class="jsCalArrows" title="Next year" onmouseover="this.className=' +"'jsCalActiveArrows'"+ '" onmouseout="this.className=' +"'jsCalArrows'"+ '" onclick="displayCalendar('+thisMonth+','+(thisYear+1)+')">&gt;</td>';
	div_html += '<td class="jsCalMonth">&nbsp;</td>';
	div_html += '</tr><tr>';

	div_html += '<td width="30" class="jsCalWeekday">Su</td><td width="30" class="jsCalWeekday">Mo</td><td width="30" class="jsCalWeekday">Tu</td><td width="30" class="jsCalWeekday">We</td><td width="30" class="jsCalWeekday">Th</td><td width="30" class="jsCalWeekday">Fr</td><td width="30" class="jsCalWeekday">Sa</td>';

	for (i = 0; i < startingPos; i++) { if (i%7==0) { div_html+='</tr></table><table border="0" cellpadding="0" cellspacing="0" width="210"><tr>'} div_html+='<td width="30" class="jsCalDeadCell">&nbsp;</td>' }
	for (i = startingPos; i < days; i++) {
		if (i%7==0) { div_html+='</tr></table><table border="0" cellpadding="0" cellspacing="0" width="210"><tr>' }
		div_html += '<td width="30" class="';

		// show a different style if the cell is today or a weekend or is selected
		is_today = ( ((i-startingPos+1) == today_date) && (today_month == true) && (today_year == true) );
		is_weekend = ((i%7==0) || (i%7==6));
		is_selected = (((i-startingPos+1) == selected_day) && (selected_month == true) && (selected_year == true));

		// normal css class
		if (is_selected) {	div_html += 'jsCalSel'; }
		else if (is_today) {	div_html += 'jsCalToday'; }
		else if (is_weekend) {	div_html += 'jsCalWeekend'; }
		else {			div_html += 'jsCalDay'; }

		// onmouseover css class switch
		div_html += '" onmouseover=this.className="';
		if (is_selected) {	div_html += 'jsCalActiveSel'; }
		else if (is_today) {	div_html += 'jsCalActiveToday'; }
		else if (is_weekend) {	div_html += 'jsCalActiveWeekend'; }
		else {			div_html += 'jsCalActiveDay'; }

		// onmouseout css class switch back
		div_html += '" onmouseout=this.className="';
		if (is_selected) {	div_html += 'jsCalSel'; }
		else if (is_today) {	div_html += 'jsCalToday'; }
		else if (is_weekend) {	div_html += 'jsCalWeekend'; }
		else {			div_html += 'jsCalDay'; }

		div_html += '"';

		// title (tooltip)
		if (is_selected) {
			if (is_today) {	div_html += ' title="Selected (Today)" '; }
			else {	div_html += ' title="Selected" '; }
		} else if (is_today) {	div_html += ' title="Today" '; }

		div_html += ' onclick="selectDay(\''+(i-startingPos+1)+'\',\''+month+'\',\''+year+'\')">'+ (i-startingPos+1) +'</td>';
		//div_html += "></td>";
	}
	for (i=days; i<42; i++) { if (i%7==0) { break; } div_html += '<td width="30" class="jsCalDeadCell">&nbsp;</td>'; }

	div_html += '</tr></table>&nbsp;';

	if (is_nav6up||is_ie6up||is_opera5up) {
		document.getElementById(LAYER_NAME).innerHTML = div_html;
	} else {
		eval(LAYER_NAME).innerHTML = div_html;
	}

}


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);
	}
}


// for the date editing icons...

function fiddleDate(form_name, field_name, value)
{
	// 0 is a magical code to mean "Today"
	//if (value == 0) {
	//	document.forms[form_name].elements[field_name].value = formatDate(new Date());
	//	return;
	//}
	//var date;

	//if (document.forms[form_name].elements[field_name].value == "") {
	//	date = new Date();
	//} else {
	//	date = new Date(document.forms[form_name].elements[field_name].value);
	//}

	date.setDate(date.getDate() + value);
	//document.forms[form_name].elements[field_name].value = formatDate(date);
	
	var month = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
	
	if (field_name == "optRegDateYear"){
		alert("1");
		document.forms[0].optRegDateDay.selectedIndex = date.getDate();
		document.forms[0].optRegDateMonth.selectedIndex = month[date.getMonth()];
		document.forms[0].optRegDateYear.selectedIndex = date.getFullYear();
	} else {
		alert("2");
		document.forms[0].optPurchDateDay.selectedIndex = date.getDate();
		document.forms[0].optPurchDateMonth.selectedIndex = month[date.getMonth()];
		document.forms[0].optPurchDateYear.selectedIndex = date.getFullYear();		
	}
	alert("3");
}


function formatDate(date)
{
	var month = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
	return date.getDate() + " " + month[date.getMonth()] + " " + date.getFullYear();
}

function hideme() {
	return;
	
	if (is_ie5up) {
		var selNodes = document.getElementsByTagName('select')
		var i=0;
		
		if (!selNodes.item(0))
			{
			return false;
		} else {
			do{selNodes.item(i).style.visibility = 'hidden';}
			while(++i < selNodes.length);
		}
		
	}
}

function showme() {
	return;
	
	if (is_ie5up) {
		var selNodes = document.getElementsByTagName('select')
		var i=0;
		
		if (!selNodes.item(0)) {
			return false;
		} else {
			do{selNodes.item(i).style.visibility = 'visible';}
			while(++i < selNodes.length);
		}
		
	}
}

function XPosn(obj){
var curleft = 0;
	if(document.getElementById||document.all){while(obj.offsetParent){curleft+=obj.offsetLeft;obj=obj.offsetParent;}}
	else if(document.layers){curleft+=obj.x;}
	return curleft;
}

function YPosn(obj){
var curtop = 0;
	if(document.getElementById||document.all){while(obj.offsetParent){curtop+=obj.offsetTop;obj=obj.offsetParent;}}
	else if(document.layers){curtop+=obj.x;}
	return curtop;
}




