hasalert = true;
function onExitPage() {
if (!hasalert)
{
	message = "Please click Register button to complete your registration.";
	if (window.location.href.indexOf("/pp/us/cns/cns_registration.jsp") == -1)
	{
		message = "Please click Submit button to save your changes.";
	}
	alert(message);
	window.location.href="javascript:void(0)";
	hasalert = true;
}
}


/*
 * Used to create objects for validation
 *
 */
   function defineObject( type, htmlname, val, min, max) {

     object = new Object();
     object.type = type;
     object.htmlname = htmlname;
     object.value = val;
     object.min = min;
     object.max = max;
     object.len = val.length;

     return object;
   }
/*
 * Used to create compare to object for validation.
 *  Used to compare password and password confirm values
 *
 */
   function defineCompareObject( type, htmlname, val, min, max, compareVal , compareHtmlName ) {

     object = defineObject ( type, htmlname, val, min, max );
     object.compareTo = compareVal;
     object.compareToName = compareHtmlName;

     return object;
   }
/*
 *
 * Returns True if special characters are contained in input
 *
 *
 */
     function hasSpecialCharacters ( input )	{

      var forbidden = false;
      var i;
      var exclude = " ,\"$;&}{][)(^><~?%#*|_\`/!\'-.@+:=\\/";

      for ( i = 0; i < input.length; i ++ )	{

         var c = input.charAt(i);

         if ( exclude.indexOf(c) != -1 )  	// on exclude list

             forbidden = true;

         if ( forbidden == true ) break;
       }

      return forbidden;

   }//:


/*
 *
 * Used to check a string for special characters
 * Any characters contained in the include string are ignored
 *
 */
    function hasSpecialCharactersExcept ( input, include )	{

      var forbidden = false;
      var i;
      var exclude = " ,\"$;&}{][)(^><~?%#*|_\`!\'-.@+=:\\/";

      for ( i = 0; i < input.length; i ++ )	{

         var c = input.charAt(i);

         if ( include.indexOf(c) != -1 ) //character on include list

           {} //do nothing

         else {

           if ( exclude.indexOf(c) != -1 )  	// on exclude list
             forbidden = true;

         }

         if ( forbidden == true ) break;
      }

      return forbidden;
   }//:


/**
 * Return true if all characters fit within 7 bits
 **/
   function check7BitClean(input) {
     for ( var i = 0; i < input.length; i ++ )
       if (! (input.charCodeAt(i) < 128)) // check 7-bit clean
         return false;

     return true;
   }

/**
 * Returns TRUE if value passes as a valid email address
 *
 * Examines each character in a string to determine
 * if the string represents a valid email address
 *
 * Definition :  Valid email address
 *  1) A string no less than 5 characters
 *  2) Does not begin with a special character
 *  3) Mailbox name contains only letters, numbers, underscores,
 *      dashes and periods
 *  4) Contains an "@" symbol
 *  5) The "@" symbol is not followed by a special character
 *  5) Contains a "." after the "@" symbol
 *  6) Suffix does not contain any special characters
 *
 *
 * Example :
 *
 *    Correct :  scott_tiger@merck.com  scott.tiger@merck.com   scott-tiger@merck.com.edu
 *  Incorrect :  $$scott_tiger@merck.co(  scot#tiger@merck.com    scott@.com.
 *
 *
*/

   function checkValidEmail (  emailAddress ) 	{

      var invalid = true;
      var state = "initial";
      var ampersand = "@";
      var exclude = ", \"$;&}{][)(^><~?%#*|_\`!\'-.@=+:\\/";
      var stateOneExclude = " ,\"$;&}{][)(^><~?%#*|\`!\'@=+:\\/";
      var stateThreeExclude = " ,\"$;&}{][)(^><~?%#*|\`!\'.@=+:\\/";


      if ( emailAddress.length < 5 )

         state = "invalid";

      else {

          for ( var i = 0; i < emailAddress.length; i ++ ) 	{

             var textChar = emailAddress.charAt(i);

             switch ( state ) 	{

                case "initial":  // must begin with letter or number

                   if ( exclude.indexOf(textChar) != -1 )
                      state = "invalid";

                   else
                      state = "one";

                break;

                case "one":

                   if ( textChar == "@" )
                      state = "two";
                   else {

                      if ( stateOneExclude.indexOf(textChar) != -1 )
                         state = "invalid";
                      }
               break;


               case "two":

                  if ( exclude.indexOf( textChar) != -1)
                     state = "invalid";
                  else
                     state = "three";
                  break;


               case "three":

                  if ( textChar == "." )
                     state = "four";
                  else  {

                     if ( stateThreeExclude.indexOf( textChar ) != -1)
                       state = "invalid";
                  }

               break;


               case "four":

                  if ( exclude.indexOf( textChar ) != -1 )
                     state = "invalid";

                  else
                     state = "five";
               break;

              case "five":

                 if ( textChar == "." )
                    state = "four";
                 else {

                 if ( exclude.indexOf( textChar ) != -1)
                    state = "invalid";
                 }
                 break;

              default:
              break;

            }//switch

	  }//for

        } //else

     return ( state == "five" );

   }//:

/*
 * Verifies that a text string contains only digits.
 *
 */
   function isANumber( txtNumber ) 	{

     var allNums = "0123456789";

     var validNum = true;

     for ( var i = 0; i < txtNumber.length; i ++ ) 	{

         var n = txtNumber.charAt(i);

         if ( allNums.indexOf(n) == -1 ) {

            validNum = false;

            break;

         }

    }

    return validNum;

}//:
/*
 * Generic method used to validate forms.
 *
 *  Overview:  Define a javascript object with properties from html form elements
 *             The method queries attributes of the generated object for validation purposes
 *             And builds an error message to display
 *
 */

   function validate ( objects )	{
     var language		= new Array();
     language["header"]	= "The following error(s) occured:"
     language["start"]	= "->";
     language["field"]	= " Field ";
     language["require"]	= " is required";
     language["min"]		= " and must consist of at least ";
     language["max"]		= " and must not contain more than ";
     language["minmax"]	= " and no more than ";
     language["chars"]	= " characters";
     language["num"]		= " and must contain a number";
     language["exact"]		= " and must equal the value of ";
     language["email"]	= " must contain a valid e-mail address ";
     language["specialchars"] = " and must consist of only letters, underscores, and hypens ";
     language["nospecialchars"] = " and must contain only letters and numbers ";
     language["valid"] = " and must contain a valid value";

     var returnVal = true;
     var i;
     var errorString = "";

     for ( i =0; i < objects.length; i ++ ) 	{

        switch ( objects[i].type )	{

           case 'login':

              if ( objects[i].len == 0 ) {
                 errorString += language["start"] + language["field"] + objects[i].htmlname + language["require"]+"\n";
              }
              else if ((!check7BitClean(objects[i].value)) || hasSpecialCharactersExcept(objects[i].value, "-_" ) ) {
                 errorString += language["start"] + language["field"] + objects[i].htmlname + language["require"] + language["specialchars"] + "\n";

              } else if ( objects[i].len < objects[i].min || objects[i].len > objects[i].max ) {
                 errorString += language["start"] + language["field"] + objects[i].htmlname + language["require"] + language["min"] + objects[i].min + language["chars"] + language["minmax"] + objects[i].max + language["chars"] + "\n";

              } else {}

           break;

           case 'firstname':

              if ( objects[i].len == 0 ) {
                 errorString += language["start"] + language["field"] + objects[i].htmlname + language["require"]+"\n";
              }
              else if ((!check7BitClean(objects[i].value)) || hasSpecialCharactersExcept(objects[i].value, "-_" ) ) {
                 errorString += language["start"] + language["field"] + objects[i].htmlname + language["require"] + language["specialchars"] + "\n";

              } else if ( objects[i].len < objects[i].min || objects[i].len > objects[i].max ) {
                 errorString += language["start"] + language["field"] + objects[i].htmlname + language["require"] + language["min"] + objects[i].min + language["chars"] + language["minmax"] + objects[i].max + language["chars"] + "\n";

              } else {}

           break;

           case 'lastname':

              if ( objects[i].len == 0 ) {
                 errorString += language["start"] + language["field"] + objects[i].htmlname + language["require"]+"\n";
              }
              else if ((!check7BitClean(objects[i].value)) || hasSpecialCharactersExcept(objects[i].value, "-_" ) ) {
                 errorString += language["start"] + language["field"] + objects[i].htmlname + language["require"] + language["specialchars"] + "\n";

              } else if ( objects[i].len < objects[i].min || objects[i].len > objects[i].max ) {
                 errorString += language["start"] + language["field"] + objects[i].htmlname + language["require"] + language["min"] + objects[i].min + language["chars"] + language["minmax"] + objects[i].max + language["chars"] + "\n";

              } else {}

           break;

           case 'password':

              if ( objects[i].len == 0 ) {
                 errorString += language["start"] + language["field"] + objects[i].htmlname + language["require"]+"\n";
              }
              else if ((!check7BitClean(objects[i].value)) || hasSpecialCharactersExcept(objects[i].value, "-_" ) ) {
                 errorString += language["start"] + language["field"] + objects[i].htmlname + language["require"] + language["specialchars"] + "\n";
              } else if ( objects[i].len < objects[i].min || objects[i].len > objects[i].max ) {
                  errorString += language["start"] + language["field"] + objects[i].htmlname + language["require"] + language["min"] + objects[i].min + language["chars"] + language["minmax"] + objects[i].max + language["chars"] + "\n";

              } else if ( objects[i].value != objects[i].compareTo ) {
						errorString += language["start"] + language["field"] + objects[i].htmlname + language["require"] + language["exact"] + language["field"] + objects[i].compareToName + "\n";
              } else {}

           break;

           case 'string':

              if ( objects[i].len == 0 ) {
                 errorString += language["start"] + language["field"] + objects[i].htmlname + language["require"]+"\n";
              }
              else {

                 if ( objects[i].len < objects[i].min || objects[i].len > objects[i].max ) {
                    errorString += language["start"] + language["field"] + objects[i].htmlname + language["require"] + language["min"] + objects[i].min + language["chars"] + language["minmax"] + objects[i].max + language["chars"] + "\n";

                 }
              }

          break;

          case 'num':
              if ( objects[i].len == 0 ) {
                 errorString += language["start"] + language["field"] + objects[i].htmlname + language["require"]+"\n";
              } else {

                 if ( ! isANumber ( objects[i].value ) ) {
                    errorString += language["start"] + language["field"] + objects[i].htmlname + language["require"] + language["num"]+ "\n";
                 }
              }
          break;

         case 'email':

            if ((!check7BitClean(objects[i].value)) || !checkValidEmail ( objects[i].value ) ) {

               errorString += language["start"] + language["field"] + objects[i].htmlname + language["email"] + "\n";
            }

          break;


           case 'numlength':

			if ( objects[i].len == 0 ) {
					 errorString += language["start"] + language["field"] + objects[i].htmlname + language["require"]+"\n";
				}

			else if ( ! isANumber ( objects[i].value ) ) {
						errorString += language["start"] + language["field"] + objects[i].htmlname + language["require"] + language["num"]+ "\n";
			 }
			else if ( objects[i].len < objects[i].min ) {
						errorString += language["start"] + language["field"] + objects[i].htmlname + language["require"]+ language["valid"] +  "\n";
				  }

            else if( (objects[i].htmlname == "Zip") &&  ( ( objects[i].value == "00000") || ( objects[i].value == "99999")) )
			 	 {
			            errorString += language["start"] + language["field"] + objects[i].htmlname + language["require"]+ language["valid"] +  "\n";
       		 }

		      break;



        case 'hint':

              if ( objects[i].len == 0 ) {
                 errorString += language["start"] + language["field"] + objects[i].htmlname + language["require"]+"\n";
              }
              else if ( hasSpecialCharactersExcept(objects[i].value, " '?.-_" ) ) {
                 errorString += language["start"] + language["field"] + objects[i].htmlname + language["require"] + language["nospecialchars"] + "\n";
              } else if ( objects[i].len < objects[i].min || objects[i].len > objects[i].max ) {
                  errorString += language["start"] + language["field"] + objects[i].htmlname + language["require"] + language["min"] + objects[i].min + language["chars"] + language["minmax"] + objects[i].max + language["chars"] + "\n";

              } else {}

           break;

        case 'nospecialcharacters':

           if ( objects[i].len != 0 && hasSpecialCharactersExcept(objects[i].value, "-_" ) ) {
                 errorString += language["start"] + language["field"] + objects[i].htmlname + language["require"] + language["nospecialchars"] + "\n";
           }
        break;

        case 'htmlselect':

           if ( objects[i].value < 1 ) {
              errorString += language["start"] + language["field"] + objects[i].htmlname + language["require"]+"\n";
           }
        break;
        default:

           if ( objects[i].len == 0 ) {
              errorString += language["start"] + language["field"] + objects[i].htmlname + language["require"]+"\n";
           }
        break;

       }//switch

     }//for

     if ( errorString ) 	{

         alert(language["header"].concat("\n" + errorString) );
         errors = "";
         returnVal = false;

     } else {

	 hasalert = true;
         returnVal = true;

     }//if


     return returnVal;

  }//:

