<!--
/*=========================================================================
 * Filename    : /central/javascript/formfuncs.js
 * Type	       : JavaScript
 * Description : javascript functions to be used with html forms
 * Functions   : - isBlank(str)
 *               - isNumeric(str)
 *               - isDate(str) 
 *               - makeDate(str)
 *               - isBefore(date1, date2) 
 *               - isChecked(obj)
 *               - hasChanged(obj)
 *=========================================================================*/
 
	/*=====================================================================*
	 * Function    : formfuncs » isBlank
	 * Description : returns true if string is blanks
	 *=====================================================================*/
	function isBlank(str) 
	{
		return (str == '');
	}

	/*=====================================================================*
	 * Function    : formfuncs » isNumeric
	 * Description : returns true if string contains only numbers 0-9
	 *=====================================================================*/
	function isNumeric(str, extra)
	{
		if (!str) return false;
		var regstr = "[0-9]";
		if(extra) regstr = extra + "?" + regstr;
		var regexp = new RegExp(regstr);
		return regexp.exec(str);
	}

	/*=====================================================================*
	 * Function    : formfuncs » isDate
	 * Description : returns true if string is a date in the form yyyy-mm-dd
	 *=====================================================================*/
	function isDate(str) 
	{
		//return (makeDate(str) != null);
		if(makeDate(str) != null) {
			return true;
		}
		return false;
	}

	/*=====================================================================*
	 * Function    : formfuncs » isChecked
	 * Description : returns true if one of the radio buttons is selected
	 *=====================================================================*/
	function isChecked(obj) 
	{	
		if(obj.length)
		{	
			for (var i=0;i<obj.length;i++) {
				if (obj[i].checked)
					return true;
			}
			return false;
		}
		else
			return(obj.checked);
	}

	
	function addDays(str,weeks) 
	{
    	var obj = makeDate(str);
		var newDate = new Date(obj.getTime() + weeks*7*24*60*60*1000);
		var newStr = newDate.getFullYear()+"-"+(newDate.getMonth()+1)+"-"+newDate.getDate();
		return newStr;
	}


	/*=====================================================================*
	 * Function    : formfuncs » makeDate
	 * Description : returns date object corresponding to yyyy-mm-dd string
	 *=====================================================================*/
	function makeDate(str)
	{
		var re_date = /^(\d+)-(\d+)-(\d+)$/;
		
		if (re_date.exec(str)) {
			var dd = RegExp.$3;
			var mm = RegExp.$2-1
			var yy = RegExp.$1;
	
			// make sure that day/month combo is valid
			// 3=April, 5=June, 8=Sept, 10=November
			if(mm==3 || mm== 5 || mm==8 || mm==10) {
				if (dd < 1 || dd > 30)
					return null;
			}
			// 0=January, 2=March, 4=May, 6=July, 7=August, 9=October, 11=December
			else if(mm==0 || mm== 2 || mm==4 || mm==6 || mm==7 || mm==9 || mm==11) {
				if (dd < 1 || dd > 31)
					return null;
			}
			// 1=February
			else if(mm==1) {
				var r = yy % 4;
				if(r == 0 && (dd < 1 || dd > 29))
					return null;
				else if(r > 0 && (dd < 1 || dd > 28))
					return null;
			}
			// make sure month is valid
			else if(mm < 0 || mm > 11)
				return null;			 		
		
			return (new Date (yy, mm, dd));
		}
		return null;		
	}
		
	/*=====================================================================*
	 * Function    : formfuncs » isBefore
	 * Description : returns true if date1 object <= date2 object
	 *=====================================================================*/
	function isBefore(date1, date2, strict) 
	{
		var first = makeDate(date1);
		var second = makeDate(date2);
		
		if(strict)
			return (first.getTime() < second.getTime())
		else
			return (first.getTime() <= second.getTime())
	}

	/*=====================================================================*
	 * Function    : formfuncs » hasChanged
	 * Description : returns true if obj's current value != obj's default value
	 *=====================================================================*/
	function hasChanged(obj)
	{
		if(obj){
			if(obj.type == "text")
				return (obj.defaultValue!=obj.value);						
			else
				return (obj.defaultChecked!=obj.checked);						
		}
		else
			return false;
	}


	/*=====================================================================*
	 * Function    : formfuncs » round
	 * Description : rounds number to X decimal places, defaults to 2
	 *=====================================================================*/
	function round(amount) {
		amount -= 0;
		var X = 0;
		return Math.round(amount*Math.pow(10,X))/Math.pow(10,X);

	}

	/*=====================================================================*
	 * Function    : formfuncs » confirmDeletion
	 * Description : displays popup to confirm deletion of a record
	 *=====================================================================*/
	function confirmDeletion(delType, delList)
	{
		var count=0;
		var specials = "";
		var msg = "";

		for (i = 0; i < delList.length; i++) {
			if(list[i].checked) {
				if(count > 0)
					specials += ", ";
				specials += "#" + list[i].value;
				count++;
			}
		}

		
		if(count == 0)
			msg += "No " + delType + "s were selected for deletion.\n";
		else if (count == 1)				
			msg += "Delete " + delType + " " + specials + "?";
		else {
			msg += "Delete the following " + delType + "s?\n";
			msg += "" + specials;
		}
	
		if(!confirm(msg)) 
			return false;
		else 
			return true;
	}

	/*=====================================================================*
	 * Function    : formfuncs » makeOkay
	 * Description : returns proper lenght string with invalid characters 
	 *               removed
	 *=====================================================================*/
	function makeOkay(str, strType)
	{
		var maxlength = 10;  					// shortstr
		if(strType == 1) maxlength = 50;  		// medstr
		else if(strType == 2) maxlength = 100;	// longstr
		else if(strType == 3) maxlength = 2000; // textstr

		if (!str) return "";
		var goodStr = str;

		if(goodStr.length > maxlength) {
			goodStr = goodStr.substring(0,maxlength);
			alert ("string truncated.");
		}

		return goodStr;	
	}
	
	/*=====================================================================*
	 * Function    : formfuncs » checkAll
	 * Description : check/uncheck all checkboxes
	 *=====================================================================*/
	function checkAll(checkboxgroup, numResults, val)
	{
		var position = "";
		var form = document.hotsheetsForm;
		for (var i = 0; i < numResults; i++) 
		{
			position = checkboxgroup+"\["+i+"\]";
			form[position].checked = val;
		}
	}

	function isFutureDate(yr,mo)
	{
	   var nowDate = new Date();
	   var nowYear = nowDate.getYear();
	   var nowMonth = nowDate.getMonth() + 1;
	   var expYear = yr;
	   var expMonth = mo;
	   
	   // some browsers return only 99 for the year so we need to compensate for that
	   if (nowYear == 0)
		  nowYear = 2000;

	   if (nowYear < 1900)
		  nowYear = nowYear + 1900;

	   if (expYear <= nowYear)
	   {
		  if (expMonth < nowMonth)
		  {
			 return false;
		  }
	   }
		return true;	
	}

	/*/
	function checkAll(val)
	{
		for (var i = 0; i<document.hotsheetsForm.elements.length; i++) 
			if(document.hotsheetsForm.elements[i].type == "checkbox")
				document.hotsheetsForm.elements[i].checked = val;
	}
	/*/
	
/*=========================================================================*/
/*=========================================================================*/
-->
