//**********************************************************************
// PAGE:    IE_Validations5.js
// AUTHOR:  IE
// PRODUCT: IE E-Business Suite Sample Site
// VERSION: 1.00
// PURPOSE: Provides generic client side validation routines
//	
//	(C) COPYRIGHT 2004-2010 Intelligent Evolution, Inc.
// 	ALL RIGHTS RESERVED
//**********************************************************************
var boolValidateAllFields = false;



function ChkFieldNotBlank( strValue, strName, strName2, intMinSize, boolReturnErr )
 {
  var strFieldValue;


  strFieldValue = TrimWhiteSpace( strValue );

  if (strFieldValue.length < intMinSize )
     {
      var strErrMsg = "Please enter your " + strName + ".\n" + 
                      "Your " + strName2 + " must be greater than " + (intMinSize - 1) + " character.\n";

	  if (boolReturnErr) return ( strErrMsg );

      alert( strErrMsg );

      return ( false );
     }


  if (boolReturnErr) return ( "" );

  return ( true );
 }



function ChkFieldIfNotBlank( strValue, strName, strName2, intMinSize, boolReturnErr )
 {
  var strFieldValue;


  strFieldValue = TrimWhiteSpace( strValue );

  if ((strFieldValue.length < intMinSize )  &&  (strFieldValue.length != 0))
     {
      var strErrMsg = "Please enter your " + strName + ".\n" + 
                      "Your " + strName2 + " must be greater than " + (intMinSize - 1) + " character.\n";

	  if (boolReturnErr) return ( strErrMsg );

      alert( strErrMsg );

      return ( false );
     }


  if (boolReturnErr) return ( "" );

  return ( true );
 }



function ChkCCVNbr( strFieldValue, strCC_Type, boolReturnErr)
 {
	var intRetVal;
    var strErrMsg = "";
	var strCC_Type
    var intSelectedIndex;



//	  intSelectedIndex = document.frmCCPaymentForm.selCC_Type.selectedIndex;
//    strCC_Type = document.frmCCPaymentForm.selCC_Type.options[intSelectedIndex].value;

    intRetVal = isValidCardVerificationNum( strFieldValue, strCC_Type );
    if (intRetVal != 0)
       {
		if (intRetVal == 3)
		   {
            strErrMsg = "You must enter a valid " + intRetVal + 
				        " digit Credit Card Verification Number (Security Code).\nThis is a required field.\n";
		   }
		else
           {
			if (intRetVal == 4)
			   {
				strErrMsg = "You must enter a valid " + intRetVal + 
							" digit Credit Card Verification Number (Security Code).\nThis is a required field.\n";
			   }
			else
			   {
				strErrMsg = "You must enter a valid Credit Card Verification Number (Security Code).\nThis is a required field.\n";
			   }
		   }

	    if (boolReturnErr) return ( strErrMsg );

        alert( strErrMsg );

        return ( false );
       }


	if (boolReturnErr) return ( "" );

	return ( true );
 }


function ChkCCNbr( strFieldValue, strCC_Type, boolReturnErr)
 {
	var nRetVal;
	var strCC_Type;

	var strErrMsg = "";
	var strTrueCC_Type = "";
    var intSelectedIndex;



//	intSelectedIndex = document.frmCCPaymentForm.selCC_Type.selectedIndex;
//    strCC_Type = document.frmCCPaymentForm.selCC_Type.options[intSelectedIndex].value;
//alert( "strCC_Type = " +  strCC_Type );
//    ChangeCC_TypeImage( strCC_Type );

    nRetVal = isValidCreditCardNum( strFieldValue, strCC_Type )
//alert( "nRetVal = " + nRetVal );
	if (nRetVal != 0)
       {
		strErrMsg = "You must enter a valid Credit Card Number.\n";

		if (nRetVal == 2)
		   {
			strTrueCC_Type = GetCreditCardType( strFieldValue );

			if ((strCC_Type != strTrueCC_Type)  &&  strTrueCC_Type != "Unknown")
			   {
				strErrMsg += "Verify that you have selected the correct \nPayment Type ('" + 
							  strTrueCC_Type + "'), above.\n"; 
			   }
		   }

        strErrMsg += "This is a required field.\n";


	    if (boolReturnErr) return ( strErrMsg );

        alert( strErrMsg );

        return ( false );
       }


	if (boolReturnErr) return ( "" );

	return ( true );
 }



function ChkPostalCode( strValue, strCountryValue, boolReturnErr )
 {
  var strErrMsg="";
  var strFieldValue;
  var strNewCountryValue;


  strFieldValue = TrimWhiteSpace ( strValue );
  strNewCountryValue = TrimWhiteSpace ( strCountryValue );
  if ( strNewCountryValue.length > 0 )
	 {
      strNewCountryValue = strNewCountryValue.toLowerCase();


      if (strNewCountryValue == "united states"  ||  strNewCountryValue == "usa"  ||   
          strNewCountryValue == "us"             ||  strNewCountryValue == "840" )
         {
		  if (!(isValidZipCode( strFieldValue )))
			 {
			  strErrMsg = "You must enter a valid Zip Code.\n" + 
						  "A valid US zip code must be either 5 digits (ex. 21403) " + 
						  "or 9 digits with a dash (ex. 21403-1414).\n";
			 }
         }
      else
		 {
		  if (strNewCountryValue == "canada"  ||  strNewCountryValue == "can"  || 
		      strNewCountryValue == "ca"      ||  strNewCountryValue == "124")
			 {
			  if (!(isValidCanadianPostalCode( strFieldValue )))
				 {
				  strErrMsg = "You must enter a valid Postal Code.\n" + 
							  "A valid Canadian postal code is seven (7) alphanumeric characters " + 
							  "(ex: T0H 1A0, or V8X 3X4).\n"; 

				 }
			 }
		  else
			 {
		      if ( strFieldValue.length == 0 )
				 {
				  strErrMsg = "You must enter a valid Postal Code.\n";
				 }
			 }
		 }


      if (strErrMsg.length > 0)
         {
		  if (boolReturnErr) return ( strErrMsg );

		  alert( strErrMsg );

		  return ( false );
         }
	 }


  if (boolReturnErr) return ( "" );

  return ( true );
 }


function ChkPhoneNumber( strValue, boolRequiredField, boolReturnErr )
 {
  var strErrMsg = "";
  var strFieldValue;


  strFieldValue = TrimWhiteSpace ( strValue );
  if (strFieldValue.length == 0)
	 {
	  if (boolRequiredField)
		 {
		  strErrMsg = "Please enter your Phone Number.\nThe phone number is a required field.\n";

		  if (boolReturnErr) return ( strErrMsg );

		  alert( strErrMsg );

		  return ( false );
		 }

      // Field is Empty/Blank, and NOT a required field
	  return ( true );
	 }

  strErrMsg = ValidatePhoneNumber( strFieldValue, true );
  if (strErrMsg.length > 0)
     {
	  if (boolReturnErr) return ( strErrMsg );

      alert( strErrMsg );

      return ( false );
     }


  if (boolReturnErr) return ( "" );

  return ( true );
 }




function ChkPhoneNbr_woExt( strValue, boolRequiredField, boolReturnErr )
 {
  var strErrMsg = "";
  var strFieldValue;


  strFieldValue = TrimWhiteSpace ( strValue );
  if (strFieldValue.length == 0)
	 {
	  if (boolRequiredField)
		 {
		  strErrMsg = "Please enter your Phone Number.\nThe phone number is a required field.\n";

		  if (boolReturnErr) return ( strErrMsg );

		  alert( strErrMsg );

		  return ( false );
		 }

      // Field is Empty/Blank, and NOT a required field
	  return ( true );
	 }

  strErrMsg = ValidatePhoneNumber( strFieldValue, false );
  if (strErrMsg.length > 0)
     {
	  if (boolReturnErr) return ( strErrMsg );

      alert( strErrMsg );

      return ( false );
     }


  if (boolReturnErr) return ( "" );

  return ( true );
 }



 //A utility function that validates FAX numbers
 function ChkFaxNumber( strValue, boolRequiredField, boolReturnErr )
 {
  var strErrMsg = "";
  var strFieldValue;


  strFieldValue = TrimWhiteSpace ( strValue );
  if (strFieldValue.length == 0)
	 {
	  if (boolRequiredField)
		 {
		  strErrMsg = "Please enter your Fax Number.\nThe fax number is a required field.\n";

		  if (boolReturnErr) return ( strErrMsg );

		  alert( strErrMsg );

		  return ( false );
		 }

      // Field is Empty/Blank, and NOT a required field
	  return ( true );
	 }

  strErrMsg = ValidateFaxNumber( strFieldValue, true );
  if (strErrMsg.length > 0)
     {
	  if (boolReturnErr) return ( strErrMsg );

      alert( strErrMsg );

      return ( false );
     }


  if (boolReturnErr) return ( "" );

  return ( true );
 }


function ChkEmgcyPhoneNumber( strValue, boolRequiredField, boolReturnErr )
 {
  var strErrMsg = "";
  var strFieldValue;


  strFieldValue = TrimWhiteSpace ( strValue );
  if (strFieldValue.length == 0)
	 {
	  if (boolRequiredField)
		 {
		  strErrMsg = "Please enter your Emergency Contact Phone Number.\nThe emergency contact phone number is a required field.\n";

		  if (boolReturnErr) return ( strErrMsg );

		  alert( strErrMsg );

		  return ( false );
		 }

      // Field is Empty/Blank, and NOT a required field
	  return ( true );
	 }

  strErrMsg = ValidatePhoneNumber( strFieldValue, true );
  if (strErrMsg.length > 0)
     {
	  if (boolReturnErr) return ( strErrMsg );

      alert( strErrMsg );

      return ( false );
     }


  if (boolReturnErr) return ( "" );

  return ( true );
 }
 


//A utility function that validates SSN
function ValidateSSN ( strSSN, boolRequiredField, boolReturnErr )
 {
    var i;
    var lngSSNLength; 

    var strErrMsg = "";


    var strFieldValue;


    strFieldValue = TrimWhiteSpace ( strSSN );
    if (strFieldValue.length == 0)
       {
        if (boolRequiredField)
           {
            strErrMsg = "Please enter your Social Security Number.\n" + 
                       "The social security number is a required field.\n";

            if (boolReturnErr) return ( strErrMsg );

            alert( strErrMsg );

            return ( false );
           }

        // Field is Empty/Blank, and NOT a required field
        return ( true );
       }


    lngSSNLength = strSSN.length;
    if (lngSSNLength == 9)
       {
        var validSSNChars = "0123456789";

        for (i= 0; i < 9 ; i++ )
            {
             var c = strSSN.charAt( i );
             if (validSSNChars.indexOf( c ) == -1)
                {
                 strErrMsg = "The SSN contains the invalid character ('" + c + "'). \n";
                 break;
                }
            }
     //Just trying something
     //added b/c we didn't return the error message previously
        return( strErrMsg );
       }
    else
       {
        if (lngSSNLength == 11) 
           {
            var validSSNChars = "0123456789";

            for (i = 0; i < 11; i++)
                {
                 var c = strSSN.charAt( i );
                 if (validSSNChars.indexOf( c ) == -1)
                    {
                     if (!((c == "-")  &&  ((i == 3)  ||  (i == 6))))
                        {
                         strErrMsg = "The SSN contains the invalid character ('" + c + "'). \n";
                         break;
                        }
                    }
                }
           }
        else
           {
            strErrMsg = "Invalid SSN format, 9 or 11 characters only: (999999999 or 999-99-9999).\n";
           }
       }

    return( strErrMsg );
 }


// A utility function that returns a null string, 
// if the string contains valid phone number and extension (703-370-7400 x704)
function ValidatePhoneNumber( strPhoneNumber, boolExtensionAllowed )
 {
  var boolErrorFlag = false;
  var boolPhoneNbrAllNbrs = true;

  var i;
  var strPhoneNbr;
  var strErrMsg = "";
  var strPhoneNbrAllNbrs = "";

  if (boolExtensionAllowed)
     {
      var validPhoneChars = "0123456789" + "-(). x";
     }
  else
     {
      var validPhoneChars = "0123456789" + "-(). ";
     }

  strPhoneNbr = strPhoneNumber.toLowerCase()
  do {
	  for ( i = 0  ;  i < strPhoneNumber.length  ;  i++)
		  {
		   var c = strPhoneNbr.charAt( i );
		   if (validPhoneChars.indexOf( c ) == -1)
			  {
			   strErrMsg = "The Phone Number contains the invalid character ('" + strPhoneNumber.charAt( i ) + "').\n";

			   boolErrorFlag = true;
			   break;
			  }

           if ((c == " ")  ||  (c == "x")) boolPhoneNbrAllNbrs = false;

           if (boolPhoneNbrAllNbrs  &&  _isInteger(c)) strPhoneNbrAllNbrs += c;
	      }

      if ((!boolErrorFlag)  &&  (strPhoneNbrAllNbrs.length < 10))
         {
          strErrMsg = "The entered Phone Number is invalid, must be at least 10 digits.\n";

          boolErrorFlag = true;
          break;
         }

	  if (boolErrorFlag  ||  !(boolExtensionAllowed)) break;

	  i = strPhoneNbr.indexOf( "x" );
	  if (i == -1) break;

	  if (i < 6)
	     {
		  strErrMsg = "The Phone Number extension must follow the phone number.\n";

		  boolErrorFlag = true;
		  break;
	     }

	  i = strPhoneNbr.indexOf( "x", (i + 1) );
	  if (i != -1)
	     {
		  strErrMsg = "The Phone Number contains more then one (1) extension character ('x').\n";

		  boolErrorFlag = true;
		  break;
	     }

      i = strPhoneNbr.indexOf( "x" );
      if ( !(/(x\d+)$/.test( strPhoneNbr ) ))
         {
		  strErrMsg = "The Phone Number contains the malformed extension ('" + strPhoneNumber.slice( i ) + "').\n";

		  boolErrorFlag = true;
		  break;
         }

     } while ( false );


     if ((!boolErrorFlag)  &&  (strPhoneNbrAllNbrs.length < 10))
        {
         strErrMsg = "The entered Phone Number is invalid, must be at least 10 digits.\n";

         boolErrorFlag = true;
        }

     if (!boolErrorFlag)
        {
         var astrInvalidPhones = new Array( '0000000000', '1111111111', '2222222222', '3333333333', '4444444444',
                                            '5555555555', '6666666666', '7777777777', '8888888888', '9999999999' );

//          alert( "strPhoneNbrAllNbrs = " + strPhoneNbrAllNbrs );
          lngPhoneNbrAllNbrs = strPhoneNbrAllNbrs.length;
          strPhoneNbrAllNbrs = strPhoneNbrAllNbrs.substring( (lngPhoneNbrAllNbrs - 10), lngPhoneNbrAllNbrs );
//          alert( "strPhoneNbrAllNbrs = " + strPhoneNbrAllNbrs );

          for ( i = 0  ;  i < astrInvalidPhones.length  ;  i++)
              {
               if (strPhoneNbrAllNbrs == astrInvalidPhones[ i ])
                  {
                   strErrMsg = "The entered Phone Number is invalid.\n";

                   boolErrorFlag = true;
                   break;
                  }
              }
        }


  return ( strErrMsg );
 }



// A FAX utility function that returns a null string, 
// if the string contains valid phone number and extension (703-370-7400 x704)
function ValidateFaxNumber( strFax, boolExtensionAllowed )
 {
  var i;
  var strFaxNbr;
  var strErrMsg="";
  var boolErrorFlag = false;

  if (boolExtensionAllowed)
     {
      var validPhoneChars = "0123456789" + "-(). x";
     }
  else
     {
      var validPhoneChars = "0123456789" + "-(). ";
     }

  strFaxNbr = strFax.toLowerCase()
  do {
	  for ( i = 0  ;  i < strFax.length  ;  i++)
		  {
		   var c = strFaxNbr.charAt( i );
		   if (validPhoneChars.indexOf( c ) == -1)
			  {
			   strErrMsg = "The Fax Number contains the invalid character ('" + strFax.charAt( i ) + "').\n";

			   boolErrorFlag = true;
			   break;
			  }
		  }

	  if (boolErrorFlag  ||  !(boolExtensionAllowed)) break;

	  i = strFaxNbr.indexOf( "x" );
	  if (i == -1) break;

	  if (i < 6)
	     {
		  strErrMsg = "The Fax Number extension must follow the fax number.\n";

		  boolErrorFlag = true;
		  break;
	     }

	  i = strFaxNbr.indexOf( "x", (i + 1) );
	  if (i != -1)
	     {
		  strErrMsg = "The Fax Number contains more then one (1) extension character ('x').\n";

		  boolErrorFlag = true;
		  break;
	     }

      i = strFaxNbr.indexOf( "x" );
      if ( !(/(x\d+)$/.test( strPhoneNbr ) ))
         {
		  strErrMsg = "The Fax Number contains the malformed extension ('" + strFax.slice( i ) + "').\n";

		  boolErrorFlag = true;
		  break;
         }

     } while ( false );


  return ( strErrMsg );
 }



function GetLastDayOfMonth2 ( strDateMonth, strDateYear, boolErrRtn, boolReturnErr )
 {
    //alert( "strDateYear = "  + strDateYear + "\n" +   "strDateMonth = " + strDateMonth + "\n" );

    var strErrMsg;
    var strCardExpireDate = "";
    var intCardExpireDateYear = Number( strDateYear );
    var intCardExpireDateMonth = Number( strDateMonth );


    var boolErrRtn = false;

    //alert( "strCardExpireDate = " + strCardExpireDate + "\n" + 
    //      "intCardExpireDateYear = " + intCardExpireDateYear + "\n" + 
    //     "intCardExpireDateMonth = " + intCardExpireDateMonth + "\n");

    if ((isNaN( intCardExpireDateYear ))  ||  (isNaN( intCardExpireDateMonth ))) 
       {
         strErrMsg = "Invalid credit card expiration date entered.\n";

         if (boolReturnErr) 
             return (strErrMsg);
         else
             alert (strErrMsg);

         return (false);
       }

    intCardExpireDateYear = parseInt( intCardExpireDateYear );
    intCardExpireDateMonth = parseInt( intCardExpireDateMonth );
       //alert( "strCardExpireDate = " + strCardExpireDate + "\n" + 
       //      "intCardExpireDateYear = " + intCardExpireDateYear + "\n" + 
       //       "intCardExpireDateMonth = " + intCardExpireDateMonth + "\n");

    if ((intCardExpireDateYear  < 2006)  ||  (intCardExpireDateMonth < 1) ||  (intCardExpireDateMonth > 12))
       {
        strErrMsg = "Invalid credit card expiration date entered.\n";
    
        if (boolReturnErr) 
            return (strErrMsg);
        else
            alert (strErrMsg);

        return (false);                          
       }

    //alert( "strCardExpireDate = " + strCardExpireDate + "\n" + 
    //       "intCardExpireDateYear = " + intCardExpireDateYear + "\n" + 
    //       "intCardExpireDateMonth = " + intCardExpireDateMonth + "\n");
    if ((intCardExpireDateMonth == 1) || (intCardExpireDateMonth == 3) || (intCardExpireDateMonth == 5)  ||  
        (intCardExpireDateMonth == 7) || (intCardExpireDateMonth == 8) || (intCardExpireDateMonth == 10) ||  
        (intCardExpireDateMonth == 12))
         strCardExpireDate = strDateMonth + "/31/" + strDateYear;
    else
       {
        //alert( "strCardExpireDate = " + strCardExpireDate + "\n" + 
        //      "intCardExpireDateYear = " + intCardExpireDateYear + "\n" + 
        //      "intCardExpireDateMonth = " + intCardExpireDateMonth + "\n");
        if (intCardExpireDateMonth != 2)
            strCardExpireDate = strDateMonth + "/30/" + strDateYear;
        else
           {
            if ((intCardExpireDateYear - ((Math.round(intCardExpireDateYear / 4 )) * 4)) != 0)
                strCardExpireDate = strDateMonth + "/28/" + strDateYear;
            else
                strCardExpireDate = strDateMonth + "/29/" + strDateYear;
           }
       }

     boolErrRtn = true;

     return( strCardExpireDate );
 }
 

 function chkSubdivision ( strValue, strCountryValue, boolReturnErr )
  {
   var strErrorMsg;
   var strFieldValue;
   var strNewCountryValue;


   strFieldValue = TrimWhiteSpace( strValue );
   strFieldValue = strFieldValue.toUpperCase();
   strNewCountryValue = TrimWhiteSpace ( strCountryValue );

//if (boolDebug)  alert( "strFieldValue = " + strFieldValue + "\n" + 
//                       "strNewCountryValue = " + strNewCountryValue.toLowerCase( ))

	switch (strNewCountryValue.toLowerCase( ))
	       { 
	        case "840":
            case "us":
            case "usa":
            case "united states":
	                               strErrorMsg = "Please enter the 2 character abbreviation for your state.\n";

	                               if (strFieldValue.length == 2)
	                                  {
                                       var StatesAbr = ",AK,AL,AR,AS,AZ,CA,CO,CT,DC,DE,FL,FM,GA,GU,HI,IA,ID,IL,IN,KS,KY,LA,MA,MD,ME,MH,MI,MN,MO,MP,MS,MT,NC,ND,NE,NH,NJ,NM,NV,NY,OH,OK,OR,PA,PR,PW,RI,SC,SD,TN,TX,UT,VA,VI,VT,WA,WI,WV,WY,";

                                       if (StatesAbr.indexOf(","+strFieldValue+",")  == -1)
                                          {
                                           if (boolReturnErr) 
                                               return (strErrorMsg);
                                           else
                                               alert (strErrorMsg);

                                           return (false);
                                          }
	                                  }
                                  else
                                     {
                                      if (boolReturnErr) 
                                          return (strErrorMsg);
                                      else
                                          alert (strErrorMsg);

                                      return (false);
                                     }

                                  break;

	        case "124":
            case "ca":
            case "can":
            case "canada":
                                   strErrorMsg = "Please enter the 2 character abbreviation for your Province or Territory.\n";

                                   var ProvinceAbr = ",AB,BC,MB,NB,NL,NS,NT,NU,ON,PE,QC,SK,YT,";
                                   var ProvinceName = ",Alberta,British Columbia,Manitoba,New Brunswick,Newfoundland and Labrador,Nova Scotia,Northwest Territories,Nunavut,Ontario,Prince Edward Island,Quebec,Saskatchewan,Yukon,"

                                   if (ProvinceAbr.indexOf(","+strFieldValue+",") < 0 )
                                      {
                                       var ProvinceUCName = ProvinceName.toUpperCase();

                                       if (ProvinceUCName.indexOf(","+strFieldValue+",") !== -1)
                                           break;

                                       if (boolReturnErr) 
                                           return (strErrorMsg);
                                       else
                                           alert (strErrorMsg);

                                       return (false);
                                      }

                                  break;
          }

   if (boolReturnErr) 
       return ("");
   else
       return (true);
  }

//A utility function that validates SSN
function isValidTextFieldData ( TextFieldData, boolRequiredField, boolReturnErr )
 {
    var i;
    var TextFieldDataLength; 

    var strErrMsg = "";


    var strFieldValue;


    strFieldValue = TrimWhiteSpace ( TextFieldData );
    if (strFieldValue.length == 0)
       {
        if (boolRequiredField)
           {
            strErrMsg = "Please enter valid text data.\n" + "This is a required field.\n";

            if (boolReturnErr) return ( strErrMsg );

            alert( strErrMsg );

            return ( false );
           }

        // Field is Empty/Blank, and NOT a required field
        return ( true );
       }


    TextFieldDataLength = TextFieldData.length;

        var validTXTchars = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz-" + " ";

        for (i= 0; i < TextFieldDataLength ; i++ )
            {
             var c = TextFieldData.charAt( i );
             if (validTXTchars.indexOf( c ) == -1)
                {
                 strErrMsg = "This data field contains the invalid character ('" + c + "'). \n";
                 break;
                }
            }

        return( strErrMsg );
 }

