	// this function checks to see if the valid form of email address has been entered,
	// If not, it displays the error message,
	// focuses the control	and returns false
	function checkEmail(obj,msg) {
		if (!checkText(obj,msg)) return false;
		if (!checkEmailChar(obj)){
			alert(msg);
			obj.focus();
			return false;
		};
		return true;
	};

	function checkEmailChar(obj) {
		invalidChars=" /:,;";
		for (i=0; i<invalidChars.length;i++){
			badChar = invalidChars.charAt(i);
				if (obj.value.indexOf(badChar,0) !=-1) {
					return false;
				};
		};
		atPos = obj.value.indexOf("@", 1);
		if (atPos == -1){
					return false;
		};
		if (obj.value.indexOf("@",atPos+1)!= -1){
					return false;
		};
		dotPos = obj.value.indexOf(".", atPos);
		if (dotPos <=0){
					return false;
		};
		if (dotPos+3 > obj.value.length){
					return false;
		};

		return true;
	};


	// this function checks to see if a radio-button has not been selected
	// If not, it displays the error message,
	// focuses the control	and returns true


	function checkRadio(obj,msg)
	{	var itemchecked = false;
		for(var j = 0 ; j < obj.length ; ++j)
		{	if(obj[j].checked)
			{	itemchecked = true;
				break;
			};
		};
		if(!itemchecked)
		{ 	alert(msg);
			obj[0].focus()
			return false;
		};
		return true;

	};

	// this function checks to see if a pull-down has not been selected
	// past the first item OR if the value option selected is '0' or '',
	// If not, it displays the error message,
	// focuses the control	and returns false

	function checkPullDown(obj,msg) {
		if (obj.selectedIndex==0 || obj.options[obj.selectedIndex].value=='0' || obj.options[obj.selectedIndex].value=='') {
			alert(msg);
			obj.focus();
			return false;
		};
		return true;
	};


	// this function checks to see whether a text input or textarea
	// is blank or is all white space.
	// If so, it displays the error message,
	// focuses the control	and returns false

	function checkText(obj,msg) {
		var str = obj.value+'';
		var allWhite = true;
		//var whiteTrail;
		for(var c=0; c<str.length; c++) {
			if (!isWhite(str.charAt(c))) allWhite=false;
		//	if (c=str.length) && (isWhite(str.charAt(str.length)))
		};

		if (allWhite || str=='') {
			obj.value="";
			alert(msg);
			obj.focus();
			return false;
		};
			remove_XS_whitespace(obj);
		return true;
	};

	// this function checks to see whether a text input or textarea
	// is blank or is all white space.
	// If it is all white space, it cleans it out and return true

	function cleanNonRequiredText(obj) {
		var str = obj.value+'';
		var allWhite = true;
		for(var c=0; c<str.length; c++) {
			if (!isWhite(str.charAt(c))) {
				allWhite=false; 
			};
		}
		if (allWhite || str=='') {
			obj.value="";
			return true;
		}else{
			remove_XS_whitespace(obj);
			return false;		
		};
	};


	// this function checks to see whether a text input or textarea
	// is blank or is all white space.
	// If so, it displays the error message,
	// focuses the control	and returns true
	// It also checks the number of chars and displays the too many
	// chars message if that is exceeded

	function checkTextArea(obj,msg,max,msgmax) {
		var str = obj.value+'';
		if (str.length>max) {
			alert(msgmax + ' [There are currently '+str.length+' characters]');
			obj.focus();
			return false;
		};
		var allWhite = true;
		for(var c=0; c<str.length; c++) {
			if (!isWhite(str.charAt(c))) allWhite=false;
		}
		if (allWhite || str=='') {
			obj.value="";
			alert(msg);
			obj.focus();
			return false;
		};
		return true;
	};

	// this function checks to see whether a text input 
	// contains " or '.
	// If so, it displays the error message,
	// focuses the control	and returns false
	
	function checkQuoteMark(obj, msg)
	{
		if ((obj.value.indexOf('"') >= 0) || (obj.value.indexOf("'") >= 0))
		{ 	alert(msg);
			obj.focus();
			return false;
		};
		
		return true;
	};


	function checkMax(obj,max,msgmax) {
		var str = obj.value+'';
		if (str.length>max) {
			alert(msgmax + ' [There are currently '+str.length+' characters]');
			obj.focus();
			return false;
		};
		return true;
	};
	
	
	// These functions check to see if the text field 
	// contains a valid date
	// If not, they display an error message,
	// focus the control and return false.
	
	// Declaring valid date character, minimum year and maximum year
	var dtCh= "/";
	var minYear=1900;
	var maxYear=2100;

	function isInteger(s){
		var i;
    	for (i = 0; i < s.length; i++){   
        	// Check that current character is number.
        	var c = s.charAt(i);
        	if (((c < "0") || (c > "9"))) return false;
    	}
    	// All characters are numbers.
    	return true;
	}
	
	function isFloat(s, emptyOK){
		var regexp = /^((\d+(\.\d*)?)|((\d*\.)?\d+))$/
		if ((s == null) || (s.length == 0))
			return (emptyOK == true);
		return regexp.test(s);
	}

	function stripCharsInBag(s, bag){
		var i;
    	var returnString = "";
    	// Search through string's characters one by one.
    	// If character is not in bag, append to returnString.
    	for (i = 0; i < s.length; i++){   
     	   var c = s.charAt(i);
     	   if (bag.indexOf(c) == -1) returnString += c;
    	}
    	return returnString;
	}

	function daysInFebruary (year){
		// February has 29 days in any year evenly divisible by four,
  	  // EXCEPT for centurial years which are not also divisible by 400.
	    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
	}
	
	function DaysArray(n) {
		for (var i = 1; i <= n; i++) {
			this[i] = 31
			if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
			if (i==2) {this[i] = 29}
   		} 
   		return this
	}

	function checkDate(obj){
		sDateString = obj.value
		
		var daysInMonth = DaysArray(12)
		var pos1=sDateString.indexOf(dtCh)
		var pos2=sDateString.indexOf(dtCh,pos1+1)
		var strMonth=sDateString.substring(0,pos1)
		var strDay=sDateString.substring(pos1+1,pos2)
		var strYear=sDateString.substring(pos2+1)
		strYr=strYear
		if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
		if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
		for (var i = 1; i <= 3; i++) {
			if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
		}
		month=parseInt(strMonth)
		day=parseInt(strDay)
		year=parseInt(strYr)
		if (pos1==-1 || pos2==-1){
			alert("The date format should be : mm/dd/yyyy")
			obj.focus()
			return false
		}
		if (strMonth.length<1 || month<1 || month>12){
			alert("Please enter a valid month")
			obj.focus()
			return false
		}
		if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
			alert("Please enter a valid day")
			obj.focus()
			return false
		}
		if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
			alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear)
			obj.focus()
			return false
		}
		if (sDateString.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(sDateString, dtCh))==false){
			alert("Please enter a valid date")
			obj.focus()
			return false
		}
	return true
	}
	
	function isWhite(ch) {
		if (ch==' ' || ch=='	' || ch=="\n" || ch=="\r") return true;
		return false;
	};


function remove_XS_whitespace(obj)
{
  var tmpStr = "";
  var obj_length = obj.value.length;
  var obj_length_minus_1 = obj.value.length - 1;
  for (i = 0; i < obj_length; i++)
  {
    if (obj.value.charAt(i) != ' ')
    {
      tmpStr += obj.value.charAt(i);
    }
    else
    {
      if (tmpStr.length > 0)
      {
        if (obj.value.charAt(i+1) != ' ' && i != obj_length_minus_1)
        {
          tmpStr += obj.value.charAt(i);
        }
      }
    }
  }
  obj.value = tmpStr;
};
