// Strip illegal characters from a string defined in the bag
function stripCharsInBag (s, bag)
{   var i;
    var returnString = "";
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

// Strip illegal characters from a string not defined in the bag
function stripCharsNotInBag (s, bag)
{   var i;
    var returnString = "";
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (bag.indexOf(c) != -1) returnString += c;
    }
    return returnString;
}

// ***** Dialog Validation Check *****
function checkSelect(fldCheck, strFieldTag, strDefaultValue) {
	
	strValue = fldCheck[fldCheck.selectedIndex].text;

	if(strValue == strDefaultValue){
		alert(strFieldTag + " has not been selected.  Please complete this field.");
		fldCheck.focus();
		return 1;
	}
	return 0;
}

// ***** Check that the field does not exceed max characters (mostly for textareas) ********
function checkFieldLength(theField, maxlength)
{
	x = theField.value.length + 1;

	if (x >= maxlength)
	{
		theField.value = theField.value.slice(0,(maxlength - 1));
		return false; 
	} else
	{
		return true;
	}
}

//********* Text Field Validation********************
function CheckRequiredField(fldCheck,strFieldTag){
	
	var illegalCharacters = "\'\"\<\>\&\\\:\;\?";
	var checkField = fldCheck.value;
	
	checkField = stripCharsInBag (checkField, illegalCharacters);
		
	if(checkField == "") {
			alert(strFieldTag + " has not been filled in.  Please complete this field.");
			fldCheck.focus();
			return 1;	
	}
	
	fldCheck.value = checkField;

}

//********* Text Field Validation********************
function CheckRequiredTextOnlyField(fldCheck,strFieldTag){
	
	var illegalCharacters = "\'\"\<\>\&\\\:\;\?0123456789";
	var checkField = fldCheck.value;
	
	checkField = stripCharsInBag (checkField, illegalCharacters);
		
	if(checkField == "") {
			alert(strFieldTag + " has not been filled in.  Please complete this field.");
			fldCheck.focus();
			return 1;	
	}
	
	fldCheck.value = checkField;

}

//******** Test if value is integer *********************
function isInteger (s)
{   var i;
    if (isEmpty(s)) 
       if (isInteger.arguments.length == 1) return defaultEmptyOK;
       else return (isInteger.arguments[1] == true);
    for (i = 0; i < s.length; i++)
    {   var c = s.charAt(i);
        if (!isDigit(c)) return false;
    }
    return true;
}
function isEmpty(s)
{   return ((s == null) || (s.length == 0))
}
var defaultEmptyOK = false;
function isDigit (c)
{   return ((c >= "0") && (c <= "9"))
}

//******** Test if value is mm/dd/yyyy date ***************
function intCheckDate(sDate)
{
  if (sDate.length == 0) return "";
  var iTerms = 0, iSeps = 0, sTerm, pos, new_pos, mm, dd, yy;
  for (pos = 0; (pos < sDate.length) && (iTerms < 4); iTerms++)
  {
    new_pos = sDate.indexOf('/', pos);
    if( new_pos == -1 )
        new_pos = sDate.length;
    else
        iSeps++;
    sTerm = sDate.substring(pos, new_pos);
    if (isInteger(sTerm))
    {
        if (iTerms == 0)
            mm = parseInt(sTerm,10);
		else if (iTerms == 1)
            dd = parseInt(sTerm,10);
        else if (iTerms == 2)
            yy = parseInt(sTerm,10);
    }
    else
        break;
    pos = new_pos + 1;
  }
  return ((iSeps == 2) && (iTerms == 3) && (mm > 0) && (mm < 13) && (dd > 0) && (dd < 32) && (yy > 1000))?
    "":
    "Date must be in the following format: mm/dd/yyyy";
};

function CheckDate(DateField)
{
	var s = intCheckDate(DateField.value)
	if (s != "")
	{
		alert(s);
		DateField.focus();
		return false;
	}
	return true;
}

//******** Radio Button Validation *****************
function CheckRadio (Field, Name)
{	var byteFlag=false;
	for (var i = 0; i < Field.length; i++) {
		if (Field[i].checked) byteFlag=true;
		}
	if (byteFlag==false)
	{	
          alert(Name + " has not been selected.  Please complete this field.");
        //  Field.focus();
		return false;
	}
	return true;
}

//********************SSN Validation**********************
function SSNValidation(ssn) {
var matchArr = ssn.match(/^(\d{3})-?\d{2}-?\d{4}$/);
var numDashes = ssn.split('-').length - 1;
if (matchArr == null || numDashes == 1) {
alert('Invalid SSN. Must be 9 digits or in the form NNN-NN-NNNN.');
return false;

}
/****************************************************
 * pjk: 04/30/03 commented-out because 
 * all zeros should be allowed
 *
//else 
//if (parseInt(matchArr[1],10)==0) {
//alert("Invalid SSN: SSN's can't start with 000.");
//return false;
//}
 *
 ****************************************************/
else {
msg = "appears to be valid";
//alert(ssn + "\r\n\r\n" + msg + " Social Security Number.");
return true;
   }
}
// -->
//******** Test if value is a number *****************
function isNum(cNum) {
   cNum=parseFloat(StripNum(cNum))
  return (!isNaN(cNum));
}

function isPositiveNum(cNum) {

	if(isNum(cNum) == false) {
		return false;
	}
	else {
		if(cNum >= 0) {
			return true;
		}
		else {
			return false;
		}
	}
}

function StripNum(Val)   {
   //  Remove decorations (commas, dollar signs) from number
   var RefString = "-.0123456789", TempChar, OutString = "";
   Val = "" + Val; // Make sure Val is character string
   // Only keep chars in Val that are valid numeric chars (i.e. in "RefString")
   if(Val.length == 0) return ("");
   for (var i=0; i<Val.length; i++){
      TempChar=Val.substring(i, i+1);
      if (RefString.indexOf (TempChar, 0) != -1) OutString=OutString+TempChar; // TempChar is valid number
   }
   return (OutString);
}

//********* Trim function ********************
function trim(str)
{
	var i = 0,j = str.length - 1;

	while(str.charAt(i) == ' ') i++;
	while(str.charAt(j) == ' ') j--;

	j++;
	if ( j == 0)
	{
		//empty, so return as such
		return "";
	}
	else
	{
		return str.substring(i,j);
	}
}

//formats the dashes in the records
function SSNTranslation(ssn)
{
	build = "";
	for(i = 0; i < ssn.length; i++)
	{
		c = ssn.charAt(i);

		if(isInteger (c))
		{
			build = build + c;
		}
		
		if((build.length == 3) | (build.length == 6))
		{
			build = build + "-";
		}
	}
	return build;
}
//******************* Phone format validation *************************
function isPhoneFmt (FormObj)  {
   // Return false if field isn't in Phone Format (10 digit) or empty"
   // Also reformat phone to xxx-xxx-xxxx format
   
  //modified: 1/20/2003-KM per SS/AU
  //return checkFieldLength(FormObj, 25);
  return (true);
   
  var i,Tmp,String,NewString;
  String=FormObj.value;
  if (String.length == 0) {return (true);}
  NewString="";
  var NumChars = 0;
  var OKchars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwyxz'
  for (var i=0; i < String.length; i++)  {
    Tmp = String.substring (i, i+1);
    if (OKchars.indexOf (Tmp, 0) > -1) {
       NewString=NewString+Tmp;
       NumChars=NumChars+1;
    }
  }
  if (0==NumChars) {return (true);}
  if (10<=NumChars) { // ok reformat
     String=""
     if ('1'==NewString.substring(0,1)) {
			String="1-"
			NewString=NewString.substring(1,NewString.length)			
		 }
     String+=NewString.substring(0,3)+"-";
     String+=NewString.substring(3,6)+"-";
     String+=NewString.substring(6,10)+" ";
     String+=NewString.substring(10,NewString.length);
     FormObj.value=String;
     return (true);
  }
  return (false);
}

//******** email validation *************************
function isEmail (s)
{   if (isEmpty(s)) 
       if (isEmail.arguments.length == 1) return defaultEmptyOK;
       else return (isEmail.arguments[1] == true);
    if (isWhitespace(s)) return false;
    var i = 1;
    var sLength = s.length;
    while ((i < sLength) && (s.charAt(i) != "@"))
    { i++
    }

    if ((i >= sLength) || (s.charAt(i) != "@")) return false;
    else i += 2;
    while ((i < sLength) && (s.charAt(i) != "."))
    { i++
    }
    if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
    else return true;
}

function CheckEmail (s)
{
	if (!isEmail(s)) {
		//alert ("Enter true e-mail address.");
		return false;
	}
    return true;
}
function isEmpty(s)
{   return ((s == null) || (s.length == 0))
}
var defaultEmptyOK = false;
var whitespace = " \t\n\r";
function isWhitespace (s)
{   var i;
    if (isEmpty(s)) return true;
    for (i = 0; i < s.length; i++)
    {   var c = s.charAt(i);
        if (whitespace.indexOf(c) == -1) return false;
    }
    return true;
}


//********************* Validation that end dates not before start date ***************
function checkStartEndDate(startDate,endDate){
	
	var m_startDate = new Date(startDate);
	var m_endDate = new Date(endDate);

	var difference = m_startDate - m_endDate;

	if(difference <= 0){
		return 1;
	}	
}

  //********* Currency Validation ********************* 
 function isMoneyFmt (FormObj)  { 
    // Return false if Field isn't in Money Format or empty" 
    // Also reformat to $xxx.xx format 
    var Val=StripNum(FormObj.value) 
    FormObj.value=Val; 
    if (Val.length==0) return(true); 
    Val=parseFloat(Val) 
    if (isNaN(Val)) { 
       //ErrorMsg(FormObj,'Please enter a valid dollar amount.'); 
       FormObj.focus(); 
     return(false); 
    } 
   FormObj.value=CommaFmt(roundto(.01,Val)) 
   //if no decimal, add 
     //rs addition 
    var decPosition =  FormObj.value.indexOf(".",0); 
    if(decPosition == "-1") 
    { 
    		FormObj.value = FormObj.value + ".00" 
    } 
    //end addition 
    return true; 
 } 
 function StripNum(Val)   { 
    //  Remove decorations (commas, dollar signs) from number 
    var RefString = "-.0123456789", TempChar, OutString = ""; 
    Val = "" + Val; // Make sure Val is character string 
    // Only keep chars in Val that are valid numeric chars (i.e. in "RefString") 
    if(Val.length == 0) return (""); 
    for (var i=0; i<Val.length; i++){ 
       TempChar=Val.substring(i, i+1); 
       if (RefString.indexOf (TempChar, 0) != -1) OutString=OutString+TempChar; // TempChar is valid number 
    } 
    return (OutString); 
 } 
 function CommaFmt(Num) { 
    // Add commas to large numbers 
    var Result,IX,Trailer 
    Result = ""; 
    Num=Num.toString() 
    IX=Num.indexOf('.',0); 
    if (IX<0) { 
 	  IX=Num.length 
 	 } else { 
 		Num=Num+"00"	 
 	 }	 
    if ((Num.length-IX)>3) Num=Num.substring(0,IX+3) // only 2 decimal places past . 
    if (IX<=4) return Num; // too short for commas 
    Result=Num.substring(IX,Num.length) 
    Num=Num.substring(0,IX) 
    while (Num.length > 3) { 
       Result = "," + Num.substring(Num.length-3,Num.length)+ Result; 
       Num = Num.substring(0,Num.length-3) 
    } 
    Result = Num + Result; 
    return Result; 
 } 
 function roundto(Factor,Num)   { 
    // Round "Num" to nearest "Factor" 
    /*    Ex: roundto (100, 2532)      --> 2500    (for nearest 100) 
          roundto (1, 252.4284)    --> 252     (for nearest whole number) 
          roundto (.01, 252.4284)  --> 252.43  (for dollars & cents) 
          roundto (.125, 252.4284) --> 252.375 (for nearest 1/8th of a point) 
    */ 
    if (Factor == 0) return (0); // No can do if factor is zero -- just return zero 
    Num = Factor * (Math.floor(.5 + (Num/Factor))); 
    return(Num); 
 } 
 function checkEndDate(endDate){
	var date = new Date();

	var m_endDate = new Date(endDate);

	var difference = date - m_endDate;

	if(difference > 0){
		return 1;
	}
}

/*** pjk 06/25/03, 
 *** added functions to check that date is "real" 
 *** e.g. 12/35/2003 or 02/29/1963 would fail
 ***/

 /**
  * Given a mm/dd/yyyy format, returns true if the date 
  * is valid
  */
 function isValidDate(p_startDate) {

   var sDateToken = p_startDate.split("/");
	 if ( sDateToken.length < 3 ) return false;
	 
   var sdMonth =  parseInt(sDateToken[0], 10);
	 if ( isNaN(sDateToken[0]) || !inRange(sdMonth, 1, 12) ) return false;
	 
   var sdDay = parseInt(sDateToken[1], 10);
	 if ( isNaN(sdDay) ) return false;
	 
	 if ( sDateToken[2].length != 4 )return false;
   var sdYear = parseInt(sDateToken[2], 10);
	 if ( isNaN(sdYear) ) return false;
	 	 
	 // check for valid number of days for month, accounting for leap year
	 var maxDays = daysInMonth( sdMonth - 1,  isLeapYear( sdYear ) );
   if ( (sdDay > maxDays) || (sdDay <= 0) )
	 {
	    return false;
	 }
	 
	 return true;
	 
 }
 
 /**
  * checks if number between p_lowerBound, p_upperBound inclusive
  */ 
 function inRange(p_num, p_lowerBound, p_upperBound) {
   if ( (p_num < p_lowerBound) || (p_num > p_upperBound) )
	 {
	   return false;
	 }
	 else
	 {
	   return true;
	 } 
 }
 
   /**
    * Given a four digit integer, returns true if is a leap year
    */
    function isLeapYear(intYear) {
        var isLeap = false;
        if ( (intYear%4) == 0 )
         {
           isLeap = true;
           // probably a leap year, but check for exception
           if ( ((intYear%100) == 0) && ((intYear%400) == 0) )
             isLeap = false;
         }
        return isLeap;
   }

   
   /**
    * Given the zero-based integer month and boolean indication of leap year
    * return the number of days in the month
    */   
   function daysInMonth(intMonth, isLeap) {
      if ((intMonth == 3) || (intMonth == 5) || (intMonth == 8) || (intMonth == 10))
        return 30;
      if (intMonth == 1)
       {
         if (isLeap) return 29;
         else return 28;
       }
      return 31;
   }

