﻿/* 
   Validation script 
   Created by Zemoga Inc.
   Responsible: Javier Morales   
   Last update: September 25 2009
*/

$(
    function(){
        $("#btnSubmit").click(submitForm);
        $("#btnReset").click(resetForm);
    }
);

/*
function validateReturn ( data )
{
	// determine what to do based on the return value
	var strPattern = /\[error:/;
	
	if ( strPattern.exec(data) )
	{
		var strErrorMsgPattern = /\[error:(.+)\]/;
		var arrErrorMsg = strErrorMsgPattern.exec ( data )
		if ( arrErrorMsg && arrErrorMsg.length > 1 )
		{
			alert ( arrErrorMsg[1] );
		}
	}
	// registration, send the user to the download page
	else if ( '[success:registration]' == data || '[success:authentication]' == data )
	{
		window.location.href='download_documents.asp';
	}
	// document request, redirect to thank you page
	else if ( '[success:document_request]' == data )
	{
		window.location.href='success.html';
	}
}
*/

function submitForm()
{
   var errors=new Object();
   var errorFields=new Array();
   var errorMessages=new Array();
   var mailingRadio=$("input:radio[name=mailing][value=Y]")[0];
   var formType=$("input[name=hidFormType]")[0].value;
   errors.fields=errorFields;
   errors.messages=errorMessages
   validateRadiosAndChecks(errors);
   validateTextFields(errors);
   validateUsZip(errors);
   validateEmail(errors);
   validatePassword(errors);
  // if (formType=="M" && !mailingRadio.checked)
  // {
     // errors.fields.push(mailingRadio);
      //errors.messages[mailingRadio.name]="* You must agree to be added to the mailing list.";
   //}
   
   if (presentErrors(errors))
   {
		// check if we've been asked to submit through ajax
		if ( $("input:hidden[name=ajax]").val ( ) == 'true' )
		{
			// if we're registering a new user
		   if ( formType == 'R' )
		   {
				jQuery.blockUI ( { 
					'message' : 'Please wait, processing.'
				} );
		   }
		   
			$.post ( 
				'registration.asp',
				$ ( '#registration-form' ).serializeArray ( ),
				function(data) {
					jQuery.unblockUI ( );
					validateReturn ( data );
				}
			);

		}
		else
		{
			$("form#registration-form")[0].submit();
		}
   }
}

function resetForm()
{
   $("form#registration-form")[0].reset();
   $("input[name=salutation]")[0].focus();
}

function validateTextFields(errors)
{
   var valid=true;
   $("input:text.zval_required,textarea.zval_required").each(
      function(){
         var validField=$.trim(this.value).length>0;
         if (!validField)
         {
            errors.fields.push(this);
            errors.messages[this.name]=getTextFieldMessage(this);
         }
         valid=valid&&validField;
      }
   );
   return valid;
}

function validatePassword(errors)
{
   var valid=true;
   $("input:password.zval_required").each(
      function(){
         var validField=$.trim(this.value).length>0;
         if (!validField)
         {
            errors.fields.push(this);
            errors.messages[this.name]=getTextFieldMessage(this);
         }
         valid=valid&&validField;
      }
   );
   
   if ( $("input:password.zval_required").length > 0 )
   {
	if ( $("input:password[name=txt_password]").val ( ) != $("input:password[name=txt_password_confirm]").val ( ) )
	{
		errors.fields.push(({'name':'password_match'}));
		errors.messages['password_match']="* Password confirmation does not match.";
	}
	
	if ($("input:password[name=txt_password]").val ( ).match(/\'/) || $("input:password[name=txt_password_confirm]").val ( ).match(/\'/) )
	{
		errors.fields.push(({'name':'password_special_char'}));
		errors.messages['password_special_char']="* Password may not contain special characters.";
	}
   }
   
   return valid;
}

function validateRadiosAndChecks(errors)
{
   var valid=true;
   var radioContainers=$("div.zval_required_check_radio");
   radioContainers.each(     
      function(){
         var selected=false;
         var elements=$(this).find("input:radio,input:checkbox");
         elements.each(
            function(){
                selected=selected||this.checked;
            }
         );
         if (!selected)
         {
            errors.fields.push(elements[0]);
            errors.messages[elements[0].name]=getDivMessage(this);
         }
         valid=valid&&selected;
      }
   );
   return valid;
}

function validateUsZip(errors)
{
   var valid=true;
   $("input:text.zval_uszip").each(
      function(){
         var validField=$.trim(this.value).length==0 || ($.trim(this.value)).match(/^\d{5}(-\d{4})?$/);
         if (!validField)
         {
            errors.fields.push(this);
            errors.messages[this.name]=getTextFieldMessage(this," must be a valid ZIP code");
         }
         valid=valid&&validField;
      }
   );
   return valid;
    
}

function validateEmail(errors)
{
   var valid=true;
   $("input:text.zval_email").each(
      function(){
         var validField=$.trim(this.value).length==0 || ($.trim(this.value)).match(/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i);
         if (!validField)
         {
            errors.fields.push(this);
            errors.messages[this.name]=getTextFieldMessage(this," must be a valid email address");
         }
         valid=valid&&validField;
      }
   );
   return valid;
    
}

function presentErrors(errors)
{
   var messages="Some required fields are missing, please review:\n";
   if (errors.fields.length==0)
      return true;
   for (var i=0; i<errors.fields.length; i++)
   {
      messages+=errors.messages[errors.fields[i].name]+"\n";
   }
   //errors.fields[0].focus();
   alert(messages);
   return false;
}

function getTextFieldMessage(field, append)
{
   return getDivMessage($(field).closest("div"), append);
}

function getDivMessage(div, append)
{
   if (!append)
      append=" is required";
   return $.trim($(div).children("h3:first").text())+append;
}
