﻿/* 
   Validation script 
   Created by Zemoga Inc.
   Responsible: Javier Morales   
   Last update: September 25 2009
*/

$(
    function(){
        $("#btnSubmit").click(submitForm);
        $("#btnReset").click(resetForm);
    }
);

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);
   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))
   {
      $("form")[0].submit();
   }
}

function resetForm()
{
   $("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 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").text())+append;
}
