//**********************************************************************
// PAGE:    IE_Validations2.js
// AUTHOR:  IE
// PRODUCT: IE E-Business Suite Sample Site
// VERSION: 1.00
// PURPOSE: Provides generic client side validation routines
//	
//	(C) COPYRIGHT 2004 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 ChkCCVNbr( strFieldValue, 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.\nThis is a required field.\n";
		   }
		else
           {
			if (intRetVal == 4)
			   {
				strErrMsg = "You must enter a valid " + intRetVal + 
							" digit Credit Card Verification Number.\nThis is a required field.\n";
			   }
			else
			   {
				strErrMsg = "You must enter a valid Credit Card Verification Number.\nThis is a required field.\n";
			   }
		   }

	    if (boolReturnErr) return ( strErrMsg );

        alert( strErrMsg );

        return ( false );
       }


	if (boolReturnErr) return ( "" );

	return ( true );
 }


function ChkCCNbr( strFieldValue, 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 == "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 == "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 );
 }
 


//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 i;
  var strPhoneNbr;
  var strErrMsg="";
  var boolErrorFlag = false;

  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 (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 );


  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 chkSubdivision ( strValue, strCountryValue, boolReturnErr )
  {
   var strErrorMsg;
   var strFieldValue;
   var strNewCountryValue;


   strFieldValue = TrimWhiteSpace( strValue );
   strFieldValue = strFieldValue.toUpperCase();
   strNewCountryValue = TrimWhiteSpace ( strCountryValue );


	switch (strNewCountryValue.toLowerCase( ))
	       { 
	        case "840"  ||  "us"  ||  "usa"  ||  "united states":
	                               strErrorMsg = "Please enter the 2 character abbreviation for your state.";

	                               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"  ||  "canada"  ||  "ca":
                                   strErrorMsg = "Please enter the 2 character abbreviation for your Province or Territory.";

                                   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);
  }
