var global_flag = 0;

/*When logging on to OJS, this will set the user id and password to the same value.
  After selecting a valid category, the user will then enter the site */
function submit_login (form) {
	var a;
	submit_flag = 0;

	a = form.elements[0].options[form.elements[0].selectedIndex].value;

	if (a == 'NA') {
		alert('Please make a category selection.');
		submit_flag = 1;
	} 
	else {
		form.password.value = a;
	}

	if (submit_flag == 0) {
		document.forms[0].submit();
	}
}

//This will reset the civil search form to it's default options
function reset_form () {
  	 document.case_search.elements[0].value = '';
	 document.case_search.elements[1].value = '';
	 document.case_search.elements[2].value = '';
	 document.case_search.elements[3].value = '';
	 document.case_search.elements[4].checked = true;
	 document.case_search.elements[5].checked = false;
	 document.case_search.elements[6].selectedIndex = 0;
	 document.case_search.elements[7].checked = true;
	 document.case_search.elements[9].selectedIndex = 0;
	 document.case_search.elements[10].value = 'MM/DD/YYYY';
     	 document.case_search.elements[11].value = 'MM/DD/YYYY';
     	 document.case_search.elements[0].focus();
}

//This will reset the criminal search form to it's default options
function reset_criminal_form () {
  	 document.case_search.elements[0].value = '';
	 document.case_search.elements[1].value = '';
	 document.case_search.elements[2].value = '';
	 document.case_search.elements[3].value = '';
	 document.case_search.elements[4].checked = true;
	 document.case_search.elements[5].checked = false;
	 document.case_search.elements[6].selectedIndex = 0;
	 document.case_search.elements[7].checked = true;
	 document.case_search.elements[9].selectedIndex = 0;
	 document.case_search.elements[10].value = 'MM/DD/YYYY';
     	 document.case_search.elements[11].value = 'MM/DD/YYYY';
     	 document.case_search.elements[12].selectedIndex = 0;    	 
     	 document.case_search.elements[0].focus();
}

//This will reset the jail search form to it's default options
function reset_jail_form () {
  	 document.jail_search.elements[0].value = '';
	 document.jail_search.elements[1].value = '';
	 document.jail_search.elements[2].value = '';
	 document.jail_search.elements[3].checked = true;
	 document.jail_search.elements[4].checked = false;
	 document.jail_search.elements[5].selectedIndex = 0;
	 document.jail_search.elements[6].checked = true;
	 document.jail_search.elements[8].selectedIndex = 0;
	 document.jail_search.elements[9].value = 'MM/DD/YYYY';
     	 document.jail_search.elements[10].value = 'MM/DD/YYYY';
     	 document.jail_search.elements[0].focus();
}
//This is the validation code for the civil case search
function check_search () {
	//Flag used to determine if form should be submitted
	global_flag = 0;
	
	//Test to ensure that a search value has been entered
    	if (document.case_search.elements[0].value == '' &&
		document.case_search.elements[1].value == '' &&
		document.case_search.elements[2].value == '' &&
		document.case_search.elements[3].value == '') {
		global_flag = 1;
		alert('Please enter a Case ID, Company Name, Last Name or\nLast and First Name value for search');
		document.case_search.elements[0].focus();
	}
	//Test to require a last name if a first name has been entered
	if (document.case_search.elements[0].value == '' &&
		document.case_search.elements[1].value == '' &&
		!document.case_search.elements[2].value == '') {
		global_flag = 1;
		alert('Search on Name must include a Last Name value');
		document.case_search.elements[1].focus();
	}
	//Test to ensure that both a last name and company name have not been entered at the same time
	if (document.case_search.elements[0].value == '' &&
		!document.case_search.elements[1].value == '' &&
		!document.case_search.elements[3].value == '') {
		global_flag = 1;
		alert('Please enter either a Company Name or a\nLast Name value for a search, not both.');
		document.case_search.elements[1].focus();
	}
	/*Check case id for invalid characters and also make sure that a case id for a mental
	  health case has not been entered */
	if (!document.case_search.elements[0].value == '') {
		id_val = document.case_search.elements[0].value;
		id_len = id_val.length;
		id_flag = 0;
		for (j=0; j < id_len; j++) {
		   if (id_val.charAt(j) == '&') {
		   	id_flag = 1;
		   }
		}
		if (id_flag == 1) {
			global_flag = 1;
			alert('The "&" character is an invalid Case ID value');
			document.case_search.elements[0].focus();
		}
		else if (id_flag == 0) {
			if (id_val.charAt(2) == 'h' || id_val.charAt(2) == 'H') {
				global_flag = 1;
				alert('Access to this Case Type is not permitted');
				document.case_search.elements[0].focus();
			}
		}
		
	}
	/*Test the selections for court code and case type to make sure they are compatible when
	  a search is performed.  This prevents an invalid search selection by the user */
	if (!document.case_search.elements[9].selectedIndex == 0) {
		if (document.case_search.elements[9].options[document.case_search.elements[9].selectedIndex].value == 'MC') {
		  if (document.case_search.elements[6].options[document.case_search.elements[6].selectedIndex].value == 'ALL' ||
		      document.case_search.elements[6].options[document.case_search.elements[6].selectedIndex].value == 'MV' ||
		      document.case_search.elements[6].options[document.case_search.elements[6].selectedIndex].value == 'MA' ||
		      document.case_search.elements[6].options[document.case_search.elements[6].selectedIndex].value == 'ML') {
		     null;
		  } 
		  else {
		     global_flag = 1;
		     alert('You must select a case type that is\nvalid for the Magistrate Court system');   
		  }
		}
		else if (document.case_search.elements[9].options[document.case_search.elements[9].selectedIndex].value == 'ST') {
		  if (document.case_search.elements[6].options[document.case_search.elements[6].selectedIndex].value == 'ALL' ||
		      document.case_search.elements[6].options[document.case_search.elements[6].selectedIndex].value == 'XV' ||
		      document.case_search.elements[6].options[document.case_search.elements[6].selectedIndex].value == 'XA' ||
		      document.case_search.elements[6].options[document.case_search.elements[6].selectedIndex].value == 'XD' ||
		      document.case_search.elements[6].options[document.case_search.elements[6].selectedIndex].value == 'XG') {
		     null;
		  } 
		  else {
		     global_flag = 1;
		     alert('You must select a case type that is\nvalid for the State Court system');   
		  }	
		}
		else if (document.case_search.elements[9].options[document.case_search.elements[9].selectedIndex].value == 'SU') {
		  if (document.case_search.elements[6].options[document.case_search.elements[6].selectedIndex].value == 'ALL' ||
		      document.case_search.elements[6].options[document.case_search.elements[6].selectedIndex].value == 'SA' ||
		      document.case_search.elements[6].options[document.case_search.elements[6].selectedIndex].value == 'SD' ||
		      document.case_search.elements[6].options[document.case_search.elements[6].selectedIndex].value == 'SV') {
		     null;
		  } 
		  else {
		     global_flag = 1;
		     alert('You must select a case type that is\nvalid for the Superior Court system');   
		  }
		}
	}
	/*Set the FROM date value to null if the default has not been changed otherwise check for
	  a valid date entry */
	if (!document.case_search.elements[10].value == '') {
		if (document.case_search.elements[10].value == 'MM/DD/YYYY') {
		  if (global_flag == 0) {
		  	document.case_search.elements[10].value = '';
		  }
		}
		else {
		  isDate(document.case_search.elements[10]);
		}
	}
	/*Set the TO date value to null if the default has not been changed otherwise check for
	  a valid date entry */
	if (!document.case_search.elements[11].value == '') {
		if (document.case_search.elements[11].value == 'MM/DD/YYYY') {
		  if (global_flag == 0) {
			document.case_search.elements[11].value = '';
		  }
		}
		else {
		  isDate(document.case_search.elements[11]);
		}
	}
	
	/* Assemble a parameter string if a case id value has not been entered */
	if (global_flag == 0 && document.case_search.elements[0].value == '') {
		if (document.case_search.elements[1].value == '' && document.case_search.elements[3].value == '') {
		   null;
		}
		else {
		   var param_str;

		   var tcomp = document.case_search.elements[3].value;
		   var newcomp = tcomp.replace(/&/g,"~");
		   newcomp = newcomp.replace(/ /g,"%20");
		   param_str = 'dcms.company='+newcomp;

		   if (document.case_search.elements[4].checked == true) {
			param_str = param_str+'&dcms.exact_last='+document.case_search.elements[4].value;}
		   else {
			param_str = param_str+'&dcms.soundex='+document.case_search.elements[5].value;}

		   param_str = param_str+'&dcms.case_type='+document.case_search.elements[6].options[document.case_search.elements[6].selectedIndex].value;

		   if (document.case_search.elements[7].checked == true) {
			param_str = param_str+'&dcms.case_status='+document.case_search.elements[7].value;}
		   else {
			param_str = param_str+'&dcms.case_status='+document.case_search.elements[8].value;}

		   param_str = param_str+'&dcms.cort_code='+document.case_search.elements[9].options[document.case_search.elements[9].selectedIndex].value;

		   if (document.case_search.elements[10].value == 'MM/DD/YYYY' ||
			document.case_search.elements[11].value == 'MM/DD/YYYY') {
			null;}
		   else {
			param_str = param_str+'&dcms.from_date='+document.case_search.elements[10].value+
			'&dcms.to_date='+document.case_search.elements[11].value;}
			
		   //Perform the default action for the form if it is a search by last name
		   if (!document.case_search.elements[1].value == '') {
			document.case_search.submit();
		   }
		   //Go to the company results page if it is a search by company name
		   else if (!document.case_search.elements[3].value == '') {
			document.location.href = '/pls/portal30/url/page/OJS_COMP_SEARCH_RESULTS?'+param_str;
		   }
		}
	}
	//Go directly to the case details if a case id has been entered
	else if (global_flag == 0 && !document.case_search.elements[0].value == '') {
		document.location.href = '/pls/portal30/url/page/ojs_case_details?dcms.case_id='+document.case_search.elements[0].value+'&dcms.ent_code=COURTS&dcms.pstart=0&dcms.sstart=0';
	}
	else {
	     null;
		
	}
}
//This is the validation code for the criminal case search
function check_criminal_search () {
	//Flag used to determine if form should be submitted
	global_flag = 0;
	
	//Test to ensure that a search value has been entered
    	if (document.case_search.elements[0].value == '' &&
		document.case_search.elements[1].value == '' &&
		document.case_search.elements[2].value == '' &&
		document.case_search.elements[3].value == '') {
		global_flag = 1;
		alert('Please enter a Case ID, Company Name, Last Name or\nLast and First Name value for search');
		document.case_search.elements[0].focus();
	}
	//Test to require a last name if a first name has been entered
	if (document.case_search.elements[0].value == '' &&
		document.case_search.elements[1].value == '' &&
		!document.case_search.elements[2].value == '') {
		global_flag = 1;
		alert('Search on Name must include a Last Name value');
		document.case_search.elements[1].focus();
	}
	//Test to ensure that both a last name and company name have not been entered at the same time
	if (document.case_search.elements[0].value == '' &&
		!document.case_search.elements[1].value == '' &&
		!document.case_search.elements[3].value == '') {
		global_flag = 1;
		alert('Please enter either a Company Name or a\nLast Name value for a search, not both.');
		document.case_search.elements[1].focus();
	}
	/*Check case id for invalid characters and also make sure that a case id for a mental
	  health case has not been entered */
	if (!document.case_search.elements[0].value == '') {
		id_val = document.case_search.elements[0].value;
		id_len = id_val.length;
		id_flag = 0;
		for (j=0; j < id_len; j++) {
		   if (id_val.charAt(j) == '&') {
			id_flag = 1;
		   }
		}
		if (id_flag == 1) {
			global_flag = 1;
			alert('The "&" character is an invalid Case ID value');
			document.case_search.elements[0].focus();
		}
		else if (id_flag == 0) {
			if (id_val.charAt(2) == 'h' || id_val.charAt(2) == 'H') {
				global_flag = 1;
				alert('Access to this Case Type is not permitted');
				document.case_search.elements[0].focus();
			}
		}
	}
	/*Test the selections for court code and case type to make sure they are compatible when
	  a search is performed.  This prevents an invalid search selection by the user */
	if (!document.case_search.elements[9].selectedIndex == 0) {
		if (document.case_search.elements[9].options[document.case_search.elements[9].selectedIndex].value == 'MC') {
		  if (document.case_search.elements[6].options[document.case_search.elements[6].selectedIndex].value == 'DA' ||
		      document.case_search.elements[6].options[document.case_search.elements[6].selectedIndex].value == 'SO') {
		     global_flag = 1;
		     alert('You must choose All courts for this case type');
		  }
		  else if (document.case_search.elements[6].options[document.case_search.elements[6].selectedIndex].value == 'ALL' ||
		           document.case_search.elements[6].options[document.case_search.elements[6].selectedIndex].value == 'MR' ||
		           document.case_search.elements[6].options[document.case_search.elements[6].selectedIndex].value == 'MX' ||
		      	   document.case_search.elements[6].options[document.case_search.elements[6].selectedIndex].value == 'MW') {
		      	null;
		  } 
		  else {
		        global_flag = 1;
		        alert('You must select a case type that is\nvalid for the Magistrate Court system');   
		  }
		}
		else if (document.case_search.elements[9].options[document.case_search.elements[9].selectedIndex].value == 'ST') {
		  if (document.case_search.elements[6].options[document.case_search.elements[6].selectedIndex].value == 'DA' ||
		      document.case_search.elements[6].options[document.case_search.elements[6].selectedIndex].value == 'SO') {
		     global_flag = 1;
		     alert('You must choose All courts for this case type');
		  }
		  else if (document.case_search.elements[6].options[document.case_search.elements[6].selectedIndex].value == 'ALL' ||
		           document.case_search.elements[6].options[document.case_search.elements[6].selectedIndex].value == 'XR' ||
		           document.case_search.elements[6].options[document.case_search.elements[6].selectedIndex].value == 'XS') {
		        null;
		  } 
		  else {
		        global_flag = 1;
		        alert('You must select a case type that is\nvalid for the State Court system');   
		  }	
		}
		else if (document.case_search.elements[9].options[document.case_search.elements[9].selectedIndex].value == 'SU') {
		  if (document.case_search.elements[6].options[document.case_search.elements[6].selectedIndex].value == 'DA' ||
		      document.case_search.elements[6].options[document.case_search.elements[6].selectedIndex].value == 'SO') {
		     global_flag = 1;
		     alert('You must choose All courts for this case type');
		  }
		  else if (document.case_search.elements[6].options[document.case_search.elements[6].selectedIndex].value == 'ALL' ||
		           document.case_search.elements[6].options[document.case_search.elements[6].selectedIndex].value == 'SR') {
		          null;
		  } 
		  else {
		        global_flag = 1;
		        alert('You must select a case type that is\nvalid for the Superior Court system');   
		  }
		}
	}
	/*Set the FROM date value to null if the default has not been changed otherwise check for
	  a valid date entry */
	if (!document.case_search.elements[10].value == '') {
		if (document.case_search.elements[10].value == 'MM/DD/YYYY') {
		  if (global_flag == 0) {
		  	document.case_search.elements[10].value = '';
		  }
		}
		else {
		  isDate(document.case_search.elements[10]);
		}
	}
	/*Set the TO date value to null if the default has not been changed otherwise check for
	  a valid date entry */
	if (!document.case_search.elements[11].value == '') {
		if (document.case_search.elements[11].value == 'MM/DD/YYYY') {
		  if (global_flag == 0) {
			document.case_search.elements[11].value = '';
		  }
		}
		else {
		  isDate(document.case_search.elements[11]);
		}
	}
	/* Assemble a parameter string if a case id value has not been entered */
	if (global_flag == 0 && document.case_search.elements[0].value == '') {
		if (document.case_search.elements[1].value == '' && document.case_search.elements[3].value == '') {
		   null;
		}
		else {
		   var param_str;

		   var tcomp = document.case_search.elements[3].value;
		   var newcomp = tcomp.replace(/&/g,"~");
		   newcomp = newcomp.replace(/ /g,"%20");
		   param_str = 'dcms.company='+newcomp;

		   if (document.case_search.elements[4].checked == true) {
			param_str = param_str+'&dcms.exact_last='+document.case_search.elements[4].value;}
		   else {
			param_str = param_str+'&dcms.soundex='+document.case_search.elements[5].value;}

		   param_str = param_str+'&dcms.case_type='+document.case_search.elements[6].options[document.case_search.elements[6].selectedIndex].value;

		   if (document.case_search.elements[7].checked == true) {
			param_str = param_str+'&dcms.case_status='+document.case_search.elements[7].value;}
		   else {
			param_str = param_str+'&dcms.case_status='+document.case_search.elements[8].value;}

		   param_str = param_str+'&dcms.cort_code='+document.case_search.elements[9].options[document.case_search.elements[9].selectedIndex].value;

		   if (document.case_search.elements[10].value == 'MM/DD/YYYY' ||
			document.case_search.elements[11].value == 'MM/DD/YYYY') {
			null;}
		   else {
		  	param_str = param_str+'&dcms.from_date='+document.case_search.elements[10].value+
			'&dcms.to_date='+document.case_search.elements[11].value;}

		   param_str = param_str+'&dcms.party_type='+document.case_search.elements[12].options[document.case_search.elements[12].selectedIndex].value;
		   
		   //Perform the default action for the form if it is a search by last name
		   if (!document.case_search.elements[1].value == '') {
		        document.case_search.submit();
		    }
		   //Go to the company results page if it is a search by company name
		   else if (!document.case_search.elements[3].value == '') {
		    	document.location.href = '/pls/portal30/url/page/OJS_COMP_CR_SEARCH_RESULTS?'+param_str;
		    }
		}
	}
	//Go directly to the case details if a case id has been entered
	else if (global_flag == 0 && !document.case_search.elements[0].value == '') {
		document.location.href = '/pls/portal30/url/page/ojs_cr_case_details?dcms.case_id='+document.case_search.elements[0].value+'&dcms.ent_code=COURTS&dcms.pstart=0&dcms.sstart=0';
	}
	else {
	     null;
	}
}
//This is the validation code for the jail search
function check_jail_search () {
	//Flag used to determine if form should be submitted
	global_flag = 0;
	
	//Test to ensure that a search value has been entered
        if (document.jail_search.elements[0].value == '' &&
		document.jail_search.elements[1].value == '' &&
		document.jail_search.elements[2].value == '') {
		global_flag = 1;
		alert('Please enter a SPN Number, Last Name or\nLast and First Name value for search');
		document.jail_search.elements[0].focus();
	}
	//Test to require a last name if a first name has been entered
	if (document.jail_search.elements[0].value == '' &&
		document.jail_search.elements[1].value == '' &&
		!document.jail_search.elements[2].value == '') {
		global_flag = 1;
		alert('Search on Name must include a Last Name value');
		document.jail_search.elements[1].focus();
	}
	//Check SPN number for invalid characters 
	if (!document.jail_search.elements[0].value == '') {
		id_val = document.jail_search.elements[0].value;
		id_len = id_val.length;
		id_flag = 0;
		for (j=0; j < id_len; j++) {
		   if (id_val.charAt(j) == '&') {
			id_flag = 1;
		   }
		}
		if (id_flag == 1) {
			global_flag = 1;
			alert('The "&" character is an invalid SPN value');
			document.jail_search.elements[0].focus();
		}
	}
	/*Set the FROM date value to null if the default has not been changed otherwise check for
	  a valid date entry */
	if (!document.jail_search.elements[9].value == '') {
		if (document.jail_search.elements[9].value == 'MM/DD/YYYY') {
		  if (global_flag == 0) {
		  	document.jail_search.elements[9].value = '';
		  }
		}
		else {
		  isDate(document.jail_search.elements[9]);
		}
	}
	/*Set the TO date value to null if the default has not been changed otherwise check for
	  a valid date entry */
	if (!document.jail_search.elements[10].value == '') {
		if (document.jail_search.elements[10].value == 'MM/DD/YYYY') {
		  if (global_flag == 0) {
			document.jail_search.elements[10].value = '';
		  }
		}
		else {
		  isDate(document.jail_search.elements[10]);
		}
	}
	//Perform the default form action if there are no errors
	if (global_flag == 0) {
		document.jail_search.submit();
	}
	else {
	        null;
	} 
}

/* Test function for displaying a parameter value in an alert box */
function Msg(input) {
	alert('Value of parameter is '+ input);
}

/* Check for Valid Date */
function isDate(theElement)
{
 var DayArray =new Array(31,28,31,30,31,30,31,31,30,31,30,31);
 var MonthArray = new Array(01,02,03,04,05,06,07,08,09,10,11,12);
 var thisYear = null;
 var thisMon = null;
 var thisDay = null;
 var today = null;
 var today_day = null;
 var today_month = null;
 var today_year = null;

 inpDate = theElement.value;
  if (inpDate.length == 0 ) return true;
  if (inpDate == 'MM/DD/YYYY') return true;

  thisDay = inpDate.substr(3,2);
  thisMonth = inpDate.substr(0,2);
  thisYear = inpDate.substr(6,4);
 var filter=/^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/;
  if (! filter.test(inpDate))
  {  global_flag = 1;
  	 alert("Please enter Date in MM/DD/YYYY Format !");
     theElement.focus();
     theElement.select();
     return false;
  }
  /* Check Valid Month */
  var filter=/01|02|03|04|05|06|07|08|09|10|11|12/ ;
  if (! filter.test(thisMonth))
  {  global_flag = 1;
     alert("Please enter the Correct Month  (MM/DD/YYYY)!");
     theElement.focus();
     theElement.select();
     return false;
  }
  /* Check For Leap Year */
  N=Number(thisYear);
  if ( ( N%4==0 && N%100 !=0 ) || ( N%400==0 ) )
  {
    DayArray[1]=29;
  }

  /* Check for valid days for month */
  for(var ctr=0; ctr<=11; ctr++)
  {
   if (MonthArray[ctr]==thisMonth)
   {
      if (thisDay<= DayArray[ctr] && thisDay >0 )
           return true;
       else
       {   global_flag = 1;
           alert("Please enter a valid Day !");
           theElement.focus();
           theElement.select();
           return false;
       }
    }
   }
}

/* Start of Clickable Calendar */
var weekend = [0,6];
var weekendColor = "#e0e0e0";
var fontface = "Verdana";
var fontsize = 2;

var gNow = new Date();
var ggWinCal;
isNav = (navigator.appName.indexOf("Netscape") != -1) ? true : false;
isIE = (navigator.appName.indexOf("Microsoft") != -1) ? true : false;

Calendar.Months = ["January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"];

// Non-Leap year Month days..
Calendar.DOMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
// Leap year Month days..
Calendar.lDOMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

function Calendar(p_item, p_WinCal, p_month, p_year, p_format) {
	if ((p_month == null) && (p_year == null))  return;

	if (p_WinCal == null)
		this.gWinCal = ggWinCal;
	else
		this.gWinCal = p_WinCal;

	if (p_month == null) {
		this.gMonthName = null;
		this.gMonth = null;
		this.gYearly = true;
	} else {
		this.gMonthName = Calendar.get_month(p_month);
		this.gMonth = new Number(p_month);
		this.gYearly = false;
	}

	this.gYear = p_year;
	this.gFormat = p_format;
	this.gBGColor = "white";
	this.gFGColor = "black";
	this.gTextColor = "black";
	this.gHeaderColor = "black";
	this.gReturnItem = p_item;
}

Calendar.get_month = Calendar_get_month;
Calendar.get_daysofmonth = Calendar_get_daysofmonth;
Calendar.calc_month_year = Calendar_calc_month_year;
Calendar.print = Calendar_print;

function Calendar_get_month(monthNo) {
	return Calendar.Months[monthNo];
}

function Calendar_get_daysofmonth(monthNo, p_year) {
	/*
	Check for leap year ..
	1.Years evenly divisible by four are normally leap years, except for...
	2.Years also evenly divisible by 100 are not leap years, except for...
	3.Years also evenly divisible by 400 are leap years.
	*/
	if ((p_year % 4) == 0) {
		if ((p_year % 100) == 0 && (p_year % 400) != 0)
			return Calendar.DOMonth[monthNo];

		return Calendar.lDOMonth[monthNo];
	} else
		return Calendar.DOMonth[monthNo];
}

function Calendar_calc_month_year(p_Month, p_Year, incr) {
	/*
	Will return an 1-D array with 1st element being the calculated month
	and second being the calculated year
	after applying the month increment/decrement as specified by 'incr' parameter.
	'incr' will normally have 1/-1 to navigate thru the months.
	*/
	var ret_arr = new Array();

	if (incr == -1) {
		// B A C K W A R D
		if (p_Month == 0) {
			ret_arr[0] = 11;
			ret_arr[1] = parseInt(p_Year) - 1;
		}
		else {
			ret_arr[0] = parseInt(p_Month) - 1;
			ret_arr[1] = parseInt(p_Year);
		}
	} else if (incr == 1) {
		// F O R W A R D
		if (p_Month == 11) {
			ret_arr[0] = 0;
			ret_arr[1] = parseInt(p_Year) + 1;
		}
		else {
			ret_arr[0] = parseInt(p_Month) + 1;
			ret_arr[1] = parseInt(p_Year);
		}
	}

	return ret_arr;
}

function Calendar_print() {
	ggWinCal.print();
}

function Calendar_calc_month_year(p_Month, p_Year, incr) {
	/*
	Will return an 1-D array with 1st element being the calculated month
	and second being the calculated year
	after applying the month increment/decrement as specified by 'incr' parameter.
	'incr' will normally have 1/-1 to navigate thru the months.
	*/
	var ret_arr = new Array();

	if (incr == -1) {
		// B A C K W A R D
		if (p_Month == 0) {
			ret_arr[0] = 11;
			ret_arr[1] = parseInt(p_Year) - 1;
		}
		else {
			ret_arr[0] = parseInt(p_Month) - 1;
			ret_arr[1] = parseInt(p_Year);
		}
	} else if (incr == 1) {
		// F O R W A R D
		if (p_Month == 11) {
			ret_arr[0] = 0;
			ret_arr[1] = parseInt(p_Year) + 1;
		}
		else {
			ret_arr[0] = parseInt(p_Month) + 1;
			ret_arr[1] = parseInt(p_Year);
		}
	}

	return ret_arr;
}

// This is for compatibility with Navigator 3, we have to create and discard one object before the prototype object exists.
new Calendar();

Calendar.prototype.getMonthlyCalendarCode = function() {
	var vCode = "";
	var vHeader_Code = "";
	var vData_Code = "";

	// Begin Table Drawing code here..
	vCode = vCode + "<TABLE BORDER=1 BGCOLOR=\"" + this.gBGColor + "\">";

	vHeader_Code = this.cal_header();
	vData_Code = this.cal_data();
	vCode = vCode + vHeader_Code + vData_Code;

	vCode = vCode + "</TABLE>";

	return vCode;
}

Calendar.prototype.show = function() {
	var vCode = "";

	this.gWinCal.document.open();

	// Setup the page...
	this.wwrite("<html>");
	this.wwrite("<head><title>Calendar</title>");
	this.wwrite("</head>");

	this.wwrite("<body " +
		"link=\"" + this.gLinkColor + "\" " +
		"vlink=\"" + this.gLinkColor + "\" " +
		"alink=\"" + this.gLinkColor + "\" " +
		"text=\"" + this.gTextColor + "\">");
	this.wwriteA("<FONT FACE='" + fontface + "' SIZE=2><B>");
	this.wwriteA(this.gMonthName + " " + this.gYear);
	this.wwriteA("</B><BR>");

	// Show navigation buttons
	var prevMMYYYY = Calendar.calc_month_year(this.gMonth, this.gYear, -1);
	var prevMM = prevMMYYYY[0];
	var prevYYYY = prevMMYYYY[1];

	var nextMMYYYY = Calendar.calc_month_year(this.gMonth, this.gYear, 1);
	var nextMM = nextMMYYYY[0];
	var nextYYYY = nextMMYYYY[1];

	this.wwrite("<TABLE WIDTH='100%' BORDER=1 CELLSPACING=0 CELLPADDING=0 BGCOLOR='#e0e0e0'><TR><TD ALIGN=center>");
	this.wwrite("[<A HREF=\"" +
		"javascript:window.opener.Build(" +
		"'" + this.gReturnItem + "', '" + this.gMonth + "', '" + (parseInt(this.gYear)-1) + "', '" + this.gFormat + "'" +
		");" +
		"\"><<<\/A>]</TD><TD ALIGN=center>");
	this.wwrite("[<A HREF=\"" +
		"javascript:window.opener.Build(" +
		"'" + this.gReturnItem + "', '" + prevMM + "', '" + prevYYYY + "', '" + this.gFormat + "'" +
		");" +
		"\"><<\/A>]</TD><TD ALIGN=center>");
	this.wwrite("[<A HREF=\"javascript:window.print();\">Print</A>]</TD><TD ALIGN=center>");
	this.wwrite("[<A HREF=\"" +
		"javascript:window.opener.Build(" +
		"'" + this.gReturnItem + "', '" + nextMM + "', '" + nextYYYY + "', '" + this.gFormat + "'" +
		");" +
		"\">><\/A>]</TD><TD ALIGN=center>");
	this.wwrite("[<A HREF=\"" +
		"javascript:window.opener.Build(" +
		"'" + this.gReturnItem + "', '" + this.gMonth + "', '" + (parseInt(this.gYear)+1) + "', '" + this.gFormat + "'" +
		");" +
		"\">>><\/A>]</TD></TR></TABLE><BR>");

	// Get the complete calendar code for the month..
	vCode = this.getMonthlyCalendarCode();
	this.wwrite(vCode);

	this.wwrite("</font></body></html>");
	this.gWinCal.document.close();
}

Calendar.prototype.showY = function() {
	var vCode = "";
	var i;
	var vr, vc, vx, vy;		// Row, Column, X-coord, Y-coord
	var vxf = 285;			// X-Factor
	var vyf = 200;			// Y-Factor
	var vxm = 10;			// X-margin
	var vym;				// Y-margin
	if (isIE)	vym = 75;
	else if (isNav)	vym = 25;

	this.gWinCal.document.open();

	this.wwrite("<html>");
	this.wwrite("<head><title>Calendar</title>");
	this.wwrite("<style type='text/css'>\n<!--");
	for (i=0; i<12; i++) {
		vc = i % 3;
		if (i>=0 && i<= 2)	vr = 0;
		if (i>=3 && i<= 5)	vr = 1;
		if (i>=6 && i<= 8)	vr = 2;
		if (i>=9 && i<= 11)	vr = 3;

		vx = parseInt(vxf * vc) + vxm;
		vy = parseInt(vyf * vr) + vym;

		this.wwrite(".lclass" + i + " {position:absolute;top:" + vy + ";left:" + vx + ";}");
	}
	this.wwrite("-->\n</style>");
	this.wwrite("</head>");

	this.wwrite("<body " +
		"link=\"" + this.gLinkColor + "\" " +
		"vlink=\"" + this.gLinkColor + "\" " +
		"alink=\"" + this.gLinkColor + "\" " +
		"text=\"" + this.gTextColor + "\">");
	this.wwrite("<FONT FACE='" + fontface + "' SIZE=2><B>");
	this.wwrite("Year : " + this.gYear);
	this.wwrite("</B><BR>");

	// Show navigation buttons
	var prevYYYY = parseInt(this.gYear) - 1;
	var nextYYYY = parseInt(this.gYear) + 1;

	this.wwrite("<TABLE WIDTH='100%' BORDER=1 CELLSPACING=0 CELLPADDING=0 BGCOLOR='#e0e0e0'><TR><TD ALIGN=center>");
	this.wwrite("[<A HREF=\"" +
		"javascript:window.opener.Build(" +
		"'" + this.gReturnItem + "', null, '" + prevYYYY + "', '" + this.gFormat + "'" +
		");" +
		"\" alt='Prev Year'><<<\/A>]</TD><TD ALIGN=center>");
	this.wwrite("[<A HREF=\"javascript:window.print();\">Print</A>]</TD><TD ALIGN=center>");
	this.wwrite("[<A HREF=\"" +
		"javascript:window.opener.Build(" +
		"'" + this.gReturnItem + "', null, '" + nextYYYY + "', '" + this.gFormat + "'" +
		");" +
		"\">>><\/A>]</TD></TR></TABLE><BR>");

	// Get the complete calendar code for each month..
	var j;
	for (i=11; i>=0; i--) {
		if (isIE)
			this.wwrite("<DIV ID=\"layer" + i + "\" CLASS=\"lclass" + i + "\">");
		else if (isNav)
			this.wwrite("<LAYER ID=\"layer" + i + "\" CLASS=\"lclass" + i + "\">");

		this.gMonth = i;
		this.gMonthName = Calendar.get_month(this.gMonth);
		vCode = this.getMonthlyCalendarCode();
		this.wwrite(this.gMonthName + "/" + this.gYear + "<BR>");
		this.wwrite(vCode);

		if (isIE)
			this.wwrite("</DIV>");
		else if (isNav)
			this.wwrite("</LAYER>");
	}

	this.wwrite("</font><BR></body></html>");
	this.gWinCal.document.close();
}

Calendar.prototype.wwrite = function(wtext) {
	this.gWinCal.document.writeln(wtext);
}

Calendar.prototype.wwriteA = function(wtext) {
	this.gWinCal.document.write(wtext);
}

Calendar.prototype.cal_header = function() {
	var vCode = "";

	vCode = vCode + "<TR>";
	vCode = vCode + "<TD WIDTH='14%'><FONT SIZE='2' FACE='" + fontface + "' COLOR='" + this.gHeaderColor + "'><B>Sun</B></FONT></TD>";
	vCode = vCode + "<TD WIDTH='14%'><FONT SIZE='2' FACE='" + fontface + "' COLOR='" + this.gHeaderColor + "'><B>Mon</B></FONT></TD>";
	vCode = vCode + "<TD WIDTH='14%'><FONT SIZE='2' FACE='" + fontface + "' COLOR='" + this.gHeaderColor + "'><B>Tue</B></FONT></TD>";
	vCode = vCode + "<TD WIDTH='14%'><FONT SIZE='2' FACE='" + fontface + "' COLOR='" + this.gHeaderColor + "'><B>Wed</B></FONT></TD>";
	vCode = vCode + "<TD WIDTH='14%'><FONT SIZE='2' FACE='" + fontface + "' COLOR='" + this.gHeaderColor + "'><B>Thu</B></FONT></TD>";
	vCode = vCode + "<TD WIDTH='14%'><FONT SIZE='2' FACE='" + fontface + "' COLOR='" + this.gHeaderColor + "'><B>Fri</B></FONT></TD>";
	vCode = vCode + "<TD WIDTH='16%'><FONT SIZE='2' FACE='" + fontface + "' COLOR='" + this.gHeaderColor + "'><B>Sat</B></FONT></TD>";
	vCode = vCode + "</TR>";

	return vCode;
}

Calendar.prototype.cal_data = function() {
	var vDate = new Date();
	vDate.setDate(1);
	vDate.setMonth(this.gMonth);
	vDate.setFullYear(this.gYear);

	var vFirstDay=vDate.getDay();
	var vDay=1;
	var vLastDay=Calendar.get_daysofmonth(this.gMonth, this.gYear);
	var vOnLastDay=0;
	var vCode = "";

	/*
	Get day for the 1st of the requested month/year..
	Place as many blank cells before the 1st day of the month as necessary.
	*/

	vCode = vCode + "<TR>";
	for (i=0; i<vFirstDay; i++) {
		vCode = vCode + "<TD WIDTH='14%'" + this.write_weekend_string(i) + "><FONT SIZE='2' FACE='" + fontface + "'> </FONT></TD>";
	}

	// Write rest of the 1st week
	for (j=vFirstDay; j<7; j++) {
		vCode = vCode + "<TD WIDTH='14%'" + this.write_weekend_string(j) + "><FONT SIZE='2' FACE='" + fontface + "'>" +
			"<A HREF='#' " +
				"onClick=\"self.opener.document." + this.gReturnItem + ".value='" +
				this.format_data(vDay) +
				"';window.close();\">" +
				this.format_day(vDay) +
			"</A>" +
			"</FONT></TD>";
		vDay=vDay + 1;
	}
	vCode = vCode + "</TR>";

	// Write the rest of the weeks
	for (k=2; k<7; k++) {
		vCode = vCode + "<TR>";

		for (j=0; j<7; j++) {
			vCode = vCode + "<TD WIDTH='14%'" + this.write_weekend_string(j) + "><FONT SIZE='2' FACE='" + fontface + "'>" +
				"<A HREF='#' " +
					"onClick=\"self.opener.document." + this.gReturnItem + ".value='" +
					this.format_data(vDay) +
					"';window.close();self.opener.document." + this.gReturnItem + ".focus();self.opener.document." + this.gReturnItem + ".select();\">" +
				this.format_day(vDay) +
				"</A>" +
				"</FONT></TD>";
			vDay=vDay + 1;

			if (vDay > vLastDay) {
				vOnLastDay = 1;
				break;
			}
		}

		if (j == 6)
			vCode = vCode + "</TR>";
		if (vOnLastDay == 1)
			break;
	}

	// Fill up the rest of last week with proper blanks, so that we get proper square blocks
	for (m=1; m<(7-j); m++) {
		if (this.gYearly)
			vCode = vCode + "<TD WIDTH='14%'" + this.write_weekend_string(j+m) +
			"><FONT SIZE='2' FACE='" + fontface + "' COLOR='gray'> </FONT></TD>";
		else
			vCode = vCode + "<TD WIDTH='14%'" + this.write_weekend_string(j+m) +
			"><FONT SIZE='2' FACE='" + fontface + "' COLOR='gray'>" + m + "</FONT></TD>";
	}

	return vCode;
}

Calendar.prototype.format_day = function(vday) {
	var vNowDay = gNow.getDate();
	var vNowMonth = gNow.getMonth();
	var vNowYear = gNow.getFullYear();

	if (vday == vNowDay && this.gMonth == vNowMonth && this.gYear == vNowYear)
		return ("<FONT COLOR=\"RED\"><B>" + vday + "</B></FONT>");
	else
		return (vday);
}

Calendar.prototype.write_weekend_string = function(vday) {
	var i;

	// Return special formatting for the weekend day.
	for (i=0; i<weekend.length; i++) {
		if (vday == weekend[i])
			return (" BGCOLOR=\"" + weekendColor + "\"");
	}

	return "";
}

Calendar.prototype.format_data = function(p_day) {
	var vData;
	var vMonth = 1 + this.gMonth;
	vMonth = (vMonth.toString().length < 2) ? "0" + vMonth : vMonth;
	var vMon = Calendar.get_month(this.gMonth).substr(0,3).toUpperCase();
	var vFMon = Calendar.get_month(this.gMonth).toUpperCase();
	var vY4 = new String(this.gYear);
	var vY2 = new String(this.gYear.substr(2,2));
	var vDD = (p_day.toString().length < 2) ? "0" + p_day : p_day;

	switch (this.gFormat) {
		case "MM\/DD\/YYYY" :
			vData = vMonth + "\/" + vDD + "\/" + vY4;
			break;
		case "MM\/DD\/YY" :
			vData = vMonth + "\/" + vDD + "\/" + vY2;
			break;
		case "MM-DD-YYYY" :
			vData = vMonth + "-" + vDD + "-" + vY4;
			break;
		case "MM-DD-YY" :
			vData = vMonth + "-" + vDD + "-" + vY2;
			break;

		case "DD\/MON\/YYYY" :
			vData = vDD + "\/" + vMon + "\/" + vY4;
			break;
		case "DD\/MON\/YY" :
			vData = vDD + "\/" + vMon + "\/" + vY2;
			break;
		case "DD-MON-YYYY" :
			vData = vDD + "-" + vMon + "-" + vY4;
			break;
		case "DD-MON-YY" :
			vData = vDD + "-" + vMon + "-" + vY2;
			break;

		case "DD\/MONTH\/YYYY" :
			vData = vDD + "\/" + vFMon + "\/" + vY4;
			break;
		case "DD\/MONTH\/YY" :
			vData = vDD + "\/" + vFMon + "\/" + vY2;
			break;
		case "DD-MONTH-YYYY" :
			vData = vDD + "-" + vFMon + "-" + vY4;
			break;
		case "DD-MONTH-YY" :
			vData = vDD + "-" + vFMon + "-" + vY2;
			break;

		case "DD\/MM\/YYYY" :
			vData = vDD + "\/" + vMonth + "\/" + vY4;
			break;
		case "DD\/MM\/YY" :
			vData = vDD + "\/" + vMonth + "\/" + vY2;
			break;
		case "DD-MM-YYYY" :
			vData = vDD + "-" + vMonth + "-" + vY4;
			break;
		case "DD-MM-YY" :
			vData = vDD + "-" + vMonth + "-" + vY2;
			break;

		default :
			vData = vMonth + "\/" + vDD + "\/" + vY4;
	}

	return vData;
}

function Build(p_item, p_month, p_year, p_format) {
	var p_WinCal = ggWinCal;
	gCal = new Calendar(p_item, p_WinCal, p_month, p_year, p_format);

	// Customize your Calendar here..
	gCal.gBGColor="white";
	gCal.gLinkColor="black";
	gCal.gTextColor="black";
	gCal.gHeaderColor="darkgreen";

	// Choose appropriate show function
	if (gCal.gYearly) {
		gCal.showY();}
	else {
		gCal.show();}
}

function show_calendar() {
	/*
		p_month : 0-11 for Jan-Dec; 12 for All Months.
		p_year	: 4-digit year
		p_format: Date format (mm/dd/yyyy, dd/mm/yy, ...)
		p_item	: Return Item.
	*/

	p_item = arguments[0];
	if (arguments[1] == null)
		p_month = new String(gNow.getMonth());
	else
		p_month = arguments[1];
	if (arguments[2] == "" || arguments[2] == null)
		p_year = new String(gNow.getFullYear().toString());
	else
		p_year = arguments[2];
	if (arguments[3] == null)
		p_format = "MM/DD/YYYY";
	else
		p_format = arguments[3];

	vWinCal = window.open("", "Calendar",
		"width=250,height=250,status=no,resizable=no,top=200,left=200");
	vWinCal.opener = self;
	ggWinCal = vWinCal;

	Build(p_item, p_month, p_year, p_format);
}
/*
Yearly Calendar Code Starts here
*/
function show_yearly_calendar(p_item, p_year, p_format) {
	// Load the defaults..
	if (p_year == null || p_year == "")
		p_year = new String(gNow.getFullYear().toString());
	if (p_format == null || p_format == "")
		p_format = "MM/DD/YYYY";

	var vWinCal = window.open("", "Calendar", "scrollbars=yes");
	vWinCal.opener = self;
	ggWinCal = vWinCal;

	Build(p_item, null, p_year, p_format);
}