/*******************************************************************************
FILE: validator.js

DESCRIPTION: This file contains a library of validation functions
  using javascript regular expressions.  Library also contains functions that re-
  format fields for display or for storage.


  VALIDATION FUNCTIONS:

  validateEmail - checks format of email address
  validateUSPhone - checks format of US phone number
  validateNumeric - checks for valid numeric value
  validateInteger - checks for valid integer value
  validateNotEmpty - checks for blank form field
  validateUSZip - checks for valid US zip code
  validateUSDate - checks for valid date in US format
  validateValue - checks a string against supplied pattern

  FORMAT FUNCTIONS:

  rightTrim - removes trailing spaces from a string
  leftTrim - removes leading spaces from a string
  trimAll - removes leading and trailing spaces from a string
  removeCurrency - removes currency formatting characters (), $
  addCurrency - inserts currency formatting characters
  removeCommas - removes comma separators from a number
  addCommas - adds comma separators to a number
  removeCharacters - removes characters from a string that match passed pattern


AUTHOR: Karen Gayda

DATE: 03/24/2000
*******************************************************************************/

/**
  A collection of functions for formatting and validating form elements.
 */
    function checkdate(objName) {
		var datefield = objName;
		if (validDate(objName) == false) {
			datefield.select();
			//alert("That date is invalid.  Please try again.");
			datefield.focus();
			return false;
		} else {
			return true;
		}
	}
	
	function validDate(objName) {
		var strDatestyle = "US"; //United States date style
		//var strDatestyle = "EU";  //European date style
		var strDate;
		var strDateArray;
		var strDay;
		var strMonth;
		var strYear;
		var intday;
		var intMonth;
		var intYear;
		var booFound = false;
		var datefield = objName;
		var strSeparatorArray = new Array("-"," ","/",".");
		var intElementNr;
		var err = 0;
		var strMonthArray = new Array(12);
		strMonthArray[0] = "01";
		strMonthArray[1] = "02";
		strMonthArray[2] = "03";
		strMonthArray[3] = "04";
		strMonthArray[4] = "05";
		strMonthArray[5] = "06";
		strMonthArray[6] = "07";
		strMonthArray[7] = "08";
		strMonthArray[8] = "09";
		strMonthArray[9] = "10";
		strMonthArray[10] = "11";
		strMonthArray[11] = "12";
		strDate = datefield.value;
		
		if ((strDate.length > 0) && (strDate.length < 4)) {
			alert("That date is invalid.  Please try again.");
			return false;
		} else {
			if (strDate.length < 1) {
				return true;
			}
		}
		
		for (intElementNr = 0; intElementNr < strSeparatorArray.length; intElementNr++) {
			if (strDate.indexOf(strSeparatorArray[intElementNr]) != -1) {
				strDateArray = strDate.split(strSeparatorArray[intElementNr]);
				if (strDateArray.length != 3) {
					err = 1;
					alert("That date is invalid.  Please try again.");
					return false;
				} else {
					strDay = strDateArray[0];
					strMonth = strDateArray[1];
					strYear = strDateArray[2];
				}
				booFound = true;
		   }
		}
		
		if (booFound == false) {
			if (strDate.length > 4) {
				strDay = strDate.substr(0, 2);
				strMonth = strDate.substr(2, 2);
				strYear = strDate.substr(4);
		  } else {
				if (strDate.length == 4) {
					strDay = strDate.substr(0, 1);
					strMonth = strDate.substr(1, 1);
					strYear = strDate.substr(2);
		  	}
			}
		}
		
		if (strYear.length == 2) {
			var today = new Date();
      if (parseInt(strYear) + 2000 <= today.getFullYear()) {
        strYear = '20' + strYear;
      } else {
        strYear = '19' + strYear; 
      }
		} else {
			if (strYear.length == 3 || strYear.length < 2 || strYear.length > 4) {
				alert("Invalid Year format.  Must be yy or yyyy.");
				return false;
			}
		}
		
		//if (strYear.length == 4 && strYear.substr(0, 1) != '2') {
		//	alert("The year '" + strYear + "' is invalid.");
		//	return false;
		//}
		
		// US style
		if (strDatestyle == "US") {
			strTemp = strDay;
			strDay = strMonth;
			strMonth = strTemp;
		}
		
		intday = parseInt(strDay, 10);
		if (isNaN(intday)) {
			err = 2;
			alert("Invalid Day format.  Must be d or dd.");
			return false;
		}
		
		if (intday < 10) {
			strDay = '0' + intday;
		}
		
		intMonth = parseInt(strMonth, 10);
		if (isNaN(intMonth)) {
			for (i = 0;i<12;i++) {
				if (strMonth == strMonthArray[i]) {
					intMonth = i+1;
					strMonth = strMonthArray[i];
					i = 12;
		   	}
			}
			if (isNaN(intMonth)) {
				err = 3;
				alert("Invalid Month format.  Must be m or mm.");
				return false;
		  }
		}
		
		intYear = parseInt(strYear, 10);
		if (isNaN(intYear)) {
			err = 4;
			alert("Invalid Year format.  Must be yy or yyyy.");
			return false;
		}
		if (intMonth > 12 || intMonth < 1) {
			err = 5;
			alert("'" + intMonth + "' is not a valid month.");
			return false;
		}
		if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || intMonth == 10 || intMonth == 12) && (intday > 31 || intday < 1)) {
			err = 6;
			alert("Invalid Day. Must be between 1 and 31.");
			return false;
		}
		if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && (intday > 30 || intday < 1)) {
			err = 7;
			alert("Invalid Day. Must be between 1 and 30.");
			return false;
		}
		
		if (intMonth == 2) {
			if (intday < 1) {
				err = 8;
				alert("Invalid Day. Cannot be less than 1.");
				return false;
			}
			if (LeapYear(intYear) == true) {
				if (intday > 29) {
					err = 9;
					alert("Invalid Day. February has 29 days in " + intYear + " (Leap Year).");
					return false;
				}
			} else {
				if (intday > 28) {
					err = 10;
					alert("Invalid Day. February has 28 days in " + intYear + ".");
					return false;
				}
			}
		}
		
		if (strDatestyle == "US") {
			datefield.value = strMonthArray[intMonth-1] + "/" + strDay +"/" + strYear;
		} else {
			datefield.value = strDay + "." + strMonthArray[intMonth-1] + "." + strYear;
		}
		return true;
	}
	
	function LeapYear(intYear) {
		if (intYear % 100 == 0) {
			if (intYear % 400 == 0) {
				return true;
			}
		} else {
			if ((intYear % 4) == 0) { 
				return true;
			}
		}
		return false;
	}
	//  End -->
  
function validateUSDate( strValue ) {
/************************************************
DESCRIPTION: Validates that a string contains only
    valid dates with 2 digit month, 2 digit day,
    4 digit year. Date separator can be ., -, or /.
    Uses combination of regular expressions and
    string parsing to validate date.
    Ex. mm/dd/yyyy or mm-dd-yyyy or mm.dd.yyyy

PARAMETERS:
   strValue - String to be tested for validity

RETURNS:
   True if valid, otherwise false.

REMARKS:
   Avoids some of the limitations of the Date.parse()
   method such as the date separator character.
*************************************************/
  var objRegExp = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/

  //check to see if in correct format
  if(!objRegExp.test(strValue))
    return false; //doesn't match pattern, bad date
  else{
    var strSeparator = strValue.substring(2,3) //find date separator
    var arrayDate = strValue.split(strSeparator); //split date into month, day, year
    //create a lookup for months not equal to Feb.
    var arrayLookup = { '01' : 31,'03' : 31, '04' : 30,'05' : 31,'06' : 30,'07' : 31,
                        '08' : 31,'09' : 30,'10' : 31,'11' : 30,'12' : 31}
    var intDay = parseInt(arrayDate[1]);

    //check if month value and day value agree
    if(arrayLookup[arrayDate[0]] != null) {
      if(intDay <= arrayLookup[arrayDate[0]] && intDay != 0)
        return true; //found in lookup table, good date
    }

    //check for February
    var intYear = parseInt(arrayDate[2]);
    var intMonth = parseInt(arrayDate[0]);
    if( ((intYear % 4 == 0 && intDay <= 29) || (intYear % 4 != 0 && intDay <=28)) && intDay !=0)
      return true; //Feb. had valid number of days
  }
  return false; //any other values, bad date
}


function removeCurrency( strValue ) {
/************************************************
DESCRIPTION: Removes currency formatting from
  source string.

PARAMETERS:
  strValue - Source string from which currency formatting
     will be removed;

RETURNS: Source string with commas removed.
*************************************************/
  var objRegExp = /\(/;
  var strMinus = '';

  //check if negative
  if(objRegExp.test(strValue)){
    strMinus = '-';
  }

  if (typeof (strValue) == "string")
  {
	  objRegExp = /\)|\(|[,]/g;
	  strValue = strValue.replace(objRegExp,'');
	  if(strValue.indexOf('$') >= 0){
	    strValue = strValue.substring(1, strValue.length);
	  }
  }
  return strMinus + strValue;
}

function addCurrency( strValue ) {
/************************************************
DESCRIPTION: Formats a number as currency.

PARAMETERS:
  strValue - Source string to be formatted

REMARKS: Assumes number passed is a valid
  numeric value in the rounded to 2 decimal
  places.  If not, returns original value.
*************************************************/
//  var objRegExp = /-?[0-9]+\.[0-9]{2}$/;
    strValue = removeCurrency(strValue);
    var objRegExp  = new RegExp('(-?[0-9]+)([0-9]{3})');
    if (strValue == null)
    	strValue = '0';
    if( objRegExp.test(strValue)) {
      objRegExp.compile('^-');
      strValue = addCommas(strValue);
      if (objRegExp.test(strValue)){
      //  strValue = '(' + strValue.replace(objRegExp,'') + ')';
		  strValue = '-' + strValue.replace(objRegExp,'');
          return strValue;
      }
      strValue = '$' + strValue;
      return strValue;
    }
    else
       if ((strValue != null) && (strValue.value != null) && (strValue.value.length() > 0) && (strValue.value.charAt(0) != '$'))
           strValue = '$' + strValue;
	
	if (strValue == "")            
	    	strValue = '$0';	
	return strValue;
}

function removeCommas( strValue ) {
/************************************************
DESCRIPTION: Removes commas from source string.

PARAMETERS:
  strValue - Source string from which commas will
    be removed;

RETURNS: Source string with commas removed.
*************************************************/
  var objRegExp = /,/g; //search for commas globally

  //replace all matches with empty strings
  return strValue.replace(objRegExp,'');
}

function addCommas( strValue ) {
/************************************************
DESCRIPTION: Inserts commas into numeric string.

PARAMETERS:
  strValue - source string containing commas.

RETURNS: String modified with comma grouping if
  source was all numeric, otherwise source is
  returned.

REMARKS: Used with integers or numbers with
  2 or less decimal places.
*************************************************/
  var objRegExp  = new RegExp('(-?[0-9]+)([0-9]{3})');

    //check for match to search criteria
    while(objRegExp.test(strValue)) {
       //replace original string with first group match,
       //a comma, then second group match
       strValue = strValue.replace(objRegExp, '$1,$2');
    }
  return strValue;
}

function currencyFormat(fld, milSep, decSep, e) {
/************************************************
DESCRIPTION: Formats currency fields
*************************************************/

var sep = 0;
var key = '';
var i = j = 0;
var len = len2 = 0;
var strCheck = '0123456789';
var aux = aux2 = '';
var whichCode = (window.Event) ? e.which : e.keyCode;
if (whichCode == 13) return true;  // Enter
key = String.fromCharCode(whichCode);  // Get key value from key code
if (strCheck.indexOf(key) == -1) return false;  // Not a valid key
len = fld.value.length;
for(i = 0; i < len; i++)
if ((fld.value.charAt(i) != '0') && (fld.value.charAt(i) != decSep)) break;
aux = '';
for(; i < len; i++)
if (strCheck.indexOf(fld.value.charAt(i))!=-1) aux += fld.value.charAt(i);
aux += key;
len = aux.length;
if (len == 0) fld.value = '';
if (len == 1) fld.value = '0'+ decSep + '0' + aux;
if (len == 2) fld.value = '0'+ decSep + aux;
if (len > 2) {
aux2 = '';
for (j = 0, i = len - 3; i >= 0; i--) {
if (j == 3) {
aux2 += milSep;
j = 0;
}
aux2 += aux.charAt(i);
j++;
}
fld.value = '';
len2 = aux2.length;
for (i = len2 - 1; i >= 0; i--)
fld.value += aux2.charAt(i);
fld.value += decSep + aux.substr(len - 2, len);
}
return false;
}

function DateFormat(vDateName, vDateValue, e, dateCheck, dateType) {
<!-- Original:  Richard Gorremans (RichardG@spiritwolfx.com) -->
<!-- Web Site:  http://www.spiritwolfx.com -->

<!-- This script and many more are available free online at -->
<!-- The JavaScript Source!! http://javascript.internet.com -->

<!-- Begin
// Check browser version

	var isNav4 = false, isNav5 = false, isIE4 = false
	var strSeperator = "/"; 
	// If you are using any Java validation on the back side you will want to use the / because 
	// Java date validations do not recognize the dash as a valid date separator.
	var vDateType = 3; // Global value for type of date format
	//                1 = mm/dd/yyyy
	//                2 = yyyy/dd/mm  (Unable to do date check at this time)
	//                3 = dd/mm/yyyy
	var vYearType = 4; //Set to 2 or 4 for number of digits in the year for Netscape
	var vYearLength = 2; // Set to 4 if you want to force the user to enter 4 digits for the year before validating.
	var err = 0; // Set the error code to a default of zero
	if(navigator.appName == "Netscape")
    {
	   if (navigator.appVersion < "5") 
       {
	       isNav4 = true;
	       isNav5 = false;
	   }
	   else if (navigator.appVersion > "4") 
       {
	       isNav4 = false;
	       isNav5 = true;
	   }
	}
	else 
    {
	   isIE4 = true;
    }

    vDateType = dateType;
// vDateName = object name
// vDateValue = value in the field being checked
// e = event
// dateCheck 
// True  = Verify that the vDateValue is a valid date
// False = Format values being entered into vDateValue only
// vDateType
// 1 = mm/dd/yyyy
// 2 = yyyy/mm/dd
// 3 = dd/mm/yyyy
//Enter a tilde sign for the first number and you can check the variable information.
	if (vDateValue == "~") 
    {
	   alert("AppVersion = "+navigator.appVersion+" \nNav. 4 Version = "+isNav4+" \nNav. 5 Version = "+isNav5+" \nIE Version = "+isIE4+" \nYear Type = "+vYearType+" \nDate Type = "+vDateType+" \nSeparator = "+strSeperator);
	   vDateName.value = "";
	   vDateName.focus();
	   return true;
    }   
    var whichCode = (window.Event) ? e.which : e.keyCode;
// Check to see if a seperator is already present.
// bypass the date if a seperator is present and the length greater than 8
    if (vDateValue.length > 8 && isNav4) 
    {
        if ((vDateValue.indexOf("-") >= 1) || (vDateValue.indexOf("/") >= 1))
            return true;
    }
//Eliminate all the ASCII codes that are not valid
    var alphaCheck = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/-";
    if (alphaCheck.indexOf(vDateValue) >= 1) 
    {
        if (isNav4) {
            vDateName.value = "";
            vDateName.focus();
            vDateName.select();
            return false;
        }
        else 
        {
            vDateName.value = vDateName.value.substr(0, (vDateValue.length-1));
            return false;
        }
    }
    if (whichCode == 8) //Ignore the Netscape value for backspace. IE has no value
        return false;
    else 
    {
//Create numeric string values for 0123456789/
//The codes provided include both keyboard and keypad values
        var strCheck = '47,48,49,50,51,52,53,54,55,56,57,58,59,95,96,97,98,99,100,101,102,103,104,105';
        if (strCheck.indexOf(whichCode) != -1) 
        {
            if (isNav4) {
                if (((vDateValue.length < 6 && dateCheck) || (vDateValue.length == 7 && dateCheck)) && (vDateValue.length >=1)) 
                {
                    alert("Invalid Date\nPlease Re-Enter (MM/DD/YYYY)");
                    vDateName.value = "";
                    vDateName.focus();
                    vDateName.select();
                    return false;
                }
                if (vDateValue.length == 6 && dateCheck) 
                {
                    var mDay = vDateName.value.substr(2,2);
                    var mMonth = vDateName.value.substr(0,2);
                    var mYear = vDateName.value.substr(4,4)
    //Turn a two digit year into a 4 digit year
	               if (mYear.length == 2 && vYearType == 4) 
                   {
                        var mToday = new Date();
//If the year is greater than 30 years from now use 19, otherwise use 20
                        var checkYear = mToday.getFullYear() + 30; 
                        var mCheckYear = '20' + mYear;
                        if (mCheckYear >= checkYear)
                            mYear = '19' + mYear;
                        else
                            mYear = '20' + mYear;
                    }
                    var vDateValueCheck = mMonth+strSeperator+mDay+strSeperator+mYear;
                    if (!dateValid(vDateValueCheck)) 
                    {
                        alert("Invalid Date\nPlease Re-Enter (MM/DD/YYYY)");
                        vDateName.value = "";   
                        vDateName.focus();
                        vDateName.select();
                        return false;
                    }
                    return true;
                }
                else
                {
    // Reformat the date for validation and set date type to a 1
                    if (vDateValue.length >= 8  && dateCheck) {
                        if (vDateType == 1) // mmddyyyy
                        {
                            var mDay = vDateName.value.substr(2,2);
                            var mMonth = vDateName.value.substr(0,2);
                            var mYear = vDateName.value.substr(4,4)
                            vDateName.value = mMonth+strSeperator+mDay+strSeperator+mYear;
                        }
                        if (vDateType == 2) // yyyymmdd
                        {
                            var mYear = vDateName.value.substr(0,4)
                            var mMonth = vDateName.value.substr(4,2);
                            var mDay = vDateName.value.substr(6,2);
                            vDateName.value = mYear+strSeperator+mMonth+strSeperator+mDay;
                        }
                        if (vDateType == 3) // ddmmyyyy
                        {
                            var mMonth = vDateName.value.substr(2,2);
                            var mDay = vDateName.value.substr(0,2);
                            var mYear = vDateName.value.substr(4,4)
                            vDateName.value = mDay+strSeperator+mMonth+strSeperator+mYear;
                        }
    //Create a temporary variable for storing the DateType and change
//the DateType to a 1 for validation.
                        var vDateTypeTemp = vDateType;
                        vDateType = 1;
                        var vDateValueCheck = mMonth+strSeperator+mDay+strSeperator+mYear;
                        if (!dateValid(vDateValueCheck)) 
                        {
                            alert("Invalid Date\nPlease Re-Enter (MM/DD/YYYY)");
                            vDateType = vDateTypeTemp;
                            vDateName.value = "";
                            vDateName.focus();
                            vDateName.select();
                            return false;
                        }
                        vDateType = vDateTypeTemp;
                        return true;
                    }
                    else 
                    {
                        if (((vDateValue.length < 8 && dateCheck) || (vDateValue.length == 9 && dateCheck)) && (vDateValue.length >=1)) 
                        {
                            alert("Invalid Date\nPlease Re-Enter (MM/DD/YYYY)");
                            vDateName.value = "";
                            vDateName.focus();
                            vDateName.select();
                            return false;
                        }
                    }
               }
            }
            else 
            {
// Non isNav Check
                if (((vDateValue.length < 8 && dateCheck) || (vDateValue.length == 9 && dateCheck)) && (vDateValue.length >=1)) 
                {
                    alert("Invalid Date\nPlease Re-Enter (MM/DD/YYYY)");
                    vDateName.value = "";
                    vDateName.focus();
                    return true;
                }
// Reformat date to format that can be validated. mm/dd/yyyy
                if (vDateValue.length >= 8 && dateCheck) 
                {
// Additional date formats can be entered here and parsed out to
// a valid date format that the validation routine will recognize.
                    if (vDateType == 1) // mm/dd/yyyy
                    {
                        var mMonth = vDateName.value.substr(0,2);
                        var mDay = vDateName.value.substr(3,2);
                        var mYear = vDateName.value.substr(6,4)
                    }
                    if (vDateType == 2) // yyyy/mm/dd
                    {
						var mYear = vDateName.value.substr(0,4)
						var mMonth = vDateName.value.substr(5,2);
						var mDay = vDateName.value.substr(8,2);
					}
					if (vDateType == 3) // dd/mm/yyyy
					{
						var mDay = vDateName.value.substr(0,2);
						var mMonth = vDateName.value.substr(3,2);
						var mYear = vDateName.value.substr(6,4)
					}
                    if (vYearLength == 4) {
                        if (mYear.length < 4) {
                            alert("Invalid Date\nPlease Re-Enter (MM/DD/YYYY)");
                            vDateName.value = "";
                            vDateName.focus();
                            return true;
                        }
                    }
// Create temp. variable for storing the current vDateType
                    var vDateTypeTemp = vDateType;
// Change vDateType to a 1 for standard date format for validation
// Type will be changed back when validation is completed.
                    vDateType = 1;
// Store reformatted date to new variable for validation.
                    var vDateValueCheck = mMonth+strSeperator+mDay+strSeperator+mYear;
                    if (mYear.length == 2 && vYearType == 4 && dateCheck) {
                    //Turn a two digit year into a 4 digit year
                    var mToday = new Date();
                    //If the year is greater than 30 years from now use 19, otherwise use 20
					var checkYear = mToday.getFullYear() + 30; 
					var mCheckYear = '20' + mYear;
					if (mCheckYear >= checkYear)
    					mYear = '19' + mYear;
					else
	       				mYear = '20' + mYear;
					vDateValueCheck = mMonth+strSeperator+mDay+strSeperator+mYear;
				// Store the new value back to the field.  This function will
				// not work with date type of 2 since the year is entered first.
				    if (vDateTypeTemp == 1) // mm/dd/yyyy
                        vDateName.value = mMonth+strSeperator+mDay+strSeperator+mYear;
                        if (vDateTypeTemp == 3) // dd/mm/yyyy
                            vDateName.value = mDay+strSeperator+mMonth+strSeperator+mYear;
                } 
				if (!dateValid(vDateValueCheck)) {
					alert("Invalid Date\nPlease Re-Enter (MM/DD/YYYY)");
					vDateType = vDateTypeTemp;
					vDateName.value = "";
					vDateName.focus();
    				return true;
                }
				vDateType = vDateTypeTemp;
				return true;
			}
            else {
                if (vDateType == 1) {
					if (vDateValue.length == 2) {
    					vDateName.value = vDateValue+strSeperator;
				}
				if (vDateValue.length == 5) {
    				vDateName.value = vDateValue+strSeperator;
	            }
			}
            if (vDateType == 2) {
                if (vDateValue.length == 4) {
                    vDateName.value = vDateValue+strSeperator;
                }
                if (vDateValue.length == 7) {
                vDateName.value = vDateValue+strSeperator;
           }
        } 
        if (vDateType == 3) {
        if (vDateValue.length == 2) {
            vDateName.value = vDateValue+strSeperator;
        }
        if (vDateValue.length == 5) {
            vDateName.value = vDateValue+strSeperator;
        }
    }
    return true;
   }
}
if (vDateValue.length == 10&& dateCheck) {
if (!dateValid(vDateName)) {
// Un-comment the next line of code for debugging the dateValid() function error messages
//alert(err);  
alert("Invalid Date\nPlease Re-Enter (MM/DD/YYYY)");
vDateName.focus();
vDateName.select();
   }
}
return false;
}
else {
// If the value is not in the string return the string minus the last
// key entered.
if (isNav4) {
vDateName.value = "";
vDateName.focus();
vDateName.select();
return false;
}
else
{
vDateName.value = vDateName.value.substr(0, (vDateValue.length-1));
return false;
         }
      }
   }
}
function dateValid(objName) {
var strDate;
var strDateArray;
var strDay;
var strMonth;
var strYear;
var intday;
var intMonth;
var intYear;
var booFound = false;
var datefield = objName;
var strSeparatorArray = new Array("-"," ","/",".");
var intElementNr;
// var err = 0;
var strMonthArray = new Array(12);
strMonthArray[0] = "Jan";
strMonthArray[1] = "Feb";
strMonthArray[2] = "Mar";
strMonthArray[3] = "Apr";
strMonthArray[4] = "May";
strMonthArray[5] = "Jun";
strMonthArray[6] = "Jul";
strMonthArray[7] = "Aug";
strMonthArray[8] = "Sep";
strMonthArray[9] = "Oct";
strMonthArray[10] = "Nov";
strMonthArray[11] = "Dec";
//strDate = datefield.value;
strDate = objName;
if (strDate.length < 1) {
return true;
}
for (intElementNr = 0; intElementNr < strSeparatorArray.length; intElementNr++) {
if (strDate.indexOf(strSeparatorArray[intElementNr]) != -1) {
strDateArray = strDate.split(strSeparatorArray[intElementNr]);
if (strDateArray.length != 3) {
err = 1;
return false;
}
else {
strDay = strDateArray[0];
strMonth = strDateArray[1];
strYear = strDateArray[2];
}
booFound = true;
   }
}
if (booFound == false) {
if (strDate.length>5) {
strDay = strDate.substr(0, 2);
strMonth = strDate.substr(2, 2);
strYear = strDate.substr(4);
   }
}
//Adjustment for short years entered
if (strYear.length == 2) {
strYear = '20' + strYear;
}
strTemp = strDay;
strDay = strMonth;
strMonth = strTemp;
intday = parseInt(strDay, 10);
if (isNaN(intday)) {
err = 2;
return false;
}
intMonth = parseInt(strMonth, 10);
if (isNaN(intMonth)) {
for (i = 0;i<12;i++) {
if (strMonth.toUpperCase() == strMonthArray[i].toUpperCase()) {
intMonth = i+1;
strMonth = strMonthArray[i];
i = 12;
   }
}
if (isNaN(intMonth)) {
err = 3;
return false;
   }
}
intYear = parseInt(strYear, 10);
if (isNaN(intYear)) {
err = 4;
return false;
}
if (intMonth>12 || intMonth<1) {
err = 5;
return false;
}
if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || intMonth == 10 || intMonth == 12) && (intday > 31 || intday < 1)) {
err = 6;
return false;
}
if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && (intday > 30 || intday < 1)) {
err = 7;
return false;
}
if (intMonth == 2) {
if (intday < 1) {
err = 8;
return false;
}
if (LeapYear(intYear) == true) {
if (intday > 29) {
err = 9;
return false;
   }
}
else {
if (intday > 28) {
err = 10;
return false;
      }
   }
}
return true;
}
function LeapYear(intYear) {
if (intYear % 100 == 0) {
if (intYear % 400 == 0) { return true; }
}
else {
if ((intYear % 4) == 0) { return true; }
}
return false;
}


function formatSSN(el) {

    var ssn = '';
    var c = '';
    var ssnIsAllNumeric = 'true';

    if (el.value.length > 11) 
    {
    	el.value = el.value.substring( 0, 11 );
	}

	for ( var i = 0; i < el.value.length; i++ ) {
	    c = el.value.charCodeAt( i );
	        if ( c >= 48 && c <= 57 ) {                
	        } else {
	        	ssnIsAllNumeric = 'false';
	        }
	}

	if (ssnIsAllNumeric == 'true') 
	{
	    for ( var i = 0; i < el.value.length; i++ ) {
	        c = el.value.charCodeAt( i );
	        if (i == 3 || i == 5) {
	            ssn += "-"+ el.value.charAt( i );
	        } else {
	            if ( c >= 48 && c <= 57 )
	              { 	
	              ssn += el.value.charAt( i );
	              } 
	        }
	    }
	} else { //is empty or has formatting already added
	
	    if (el.value.length == 3 || el.value.length == 6) 
	    {
	    	el.value += "+";
	    }
	    
	    for ( var i = 0; i < el.value.length; i++ ) {
	        c = el.value.charCodeAt( i );
	        if (i == 3 || i == 6) {
	            ssn += "-";
	        } else {
	            if ( c >= 48 && c <= 57 )
	              { 	
	              ssn += el.value.charAt( i );
	              } else {
	              }
	        }
	    }
	}

    el.value = ssn;
}


function formatControlValue(value)
{
	var v = '' + value;
    return addCurrency(v);
} 

function formatControl(control)
{
    control.value = addCurrency(control.value);
} 

function formatPercentControl(control)
{
	var num = control.value;
    if (num.toFixed) // Browser support test
        control.value = num.toFixed(1);
    if(control.value.charAt( control.value.length - 1) != "%")
    {
    	control.value += "%"; 
	}
	if (control.value == "")            
    	control.value = '0%';	
}


function formatPercentControlCappedAt12(control)
{
	var num = control.value;
	if (num > 12) {
		control.value = 12;
	}
    if (num.toFixed) // Browser support test
        control.value = num.toFixed(1);
    if(control.value.charAt( control.value.length - 1) != "%")
    {
    	control.value += "%"; 
	}
	if (control.value == "")            
    	control.value = '0%';	
}


function formatPhoneNumber(el) 
{
    var phone = '';
    var c = '';

    if (el.value.length == 3) el.value += "-";
    if (el.value.length > 8) el.value = el.value.substring( 0, 8 );

    for ( var i = 0; i < el.value.length; i++ ) {
        c = el.value.charCodeAt( i );
        if ((i == 3) && (el.value.charAt( i ) != "-")) 
        {
        	phone += '-';
            phone += el.value.charAt( i );
        } else {
            if (( c >= 48 && c <= 57 ) || (c == 45))
              phone += el.value.charAt( i );
        }
    }

    el.value = phone;
  }
