var Validate = new Object();

//=====================================================//
Validate.validateFormData = function(formName, useSEOUrl, successHandler, errorHandler){
   var formObj     = document.forms[formName];
   var formAction  = formObj.action;

   if (successHandler == undefined || successHandler == ""){
       successHandler = "";
   }
   
   if (errorHandler == undefined || errorHandler == ""){
       errorHandler = "";
   }
   
   Validate.setOriginalFieldLabelClassName();

   if(useSEOUrl == 1){
      var url = formAction + "&ajaxRequest=1&showHTML=0";
   }
   else {
      var url = formAction + "&ajaxRequest=1&showHTML=0";
   }

   
   var formContent = UtilAjax.getFormValues(formObj);
   XMLHTTP.xmlHttpObj  = XMLHTTP.getXMLHTTPObject(function () {Validate.validateFormDataHandler(formObj, successHandler, errorHandler);});
   XMLHTTP.xmlHttpObj.open("POST", url, true);
   XMLHTTP.xmlHttpObj.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
   XMLHTTP.xmlHttpObj.send(formContent);
}

//=====================================================//
Validate.validateFormDataHandler = function(formObj, successHandler, errorHandler){

   if (XMLHTTP.xmlHttpObj.readyState==4 || XMLHTTP.xmlHttpObj.readyState=="complete") {
      var responseText = XMLHTTP.xmlHttpObj.responseText;
      responseText       = responseText.replace(/^\s+/, '');

      var xmlDoc         = XMLHTTP.loadXML(UtilString.trimAll(responseText, 1));
      var root           = xmlDoc.documentElement;
      var headerTag      = xmlDoc.getElementsByTagName("header");
      var errorNo        = headerTag[0].childNodes[0].firstChild.nodeValue;
      var errorCount     = headerTag[0].childNodes[0].firstChild.nodeValue;

      if(errorCount == 0){
         if (eval(successHandler)) {
            return eval(successHandler + '()');
         }
      }
      else{
         var errorsTag   = xmlDoc.getElementsByTagName("errors");
         var errorMsgTag =errorsTag[0].getElementsByTagName("errorMsg");
         var msg = "<p class=\"error\"><b>The following errors occured</b></p>";
         Validate.resetFieldLabelStyles();

         for(var i=0; i<errorMsgTag.length; i++) {
            fieldName = errorMsgTag[i].getAttribute("field");
            msg     += errorMsgTag[i].firstChild.nodeValue;
            var fieldLabelDIV = document.getElementById("label_" + fieldName);
            var existingClass = fieldLabelDIV.originalClassName;
            fieldLabelDIV.className = existingClass + ' ' + "formFieldLabelError";
         }
         var errorDisplayDIV = document.getElementById("errorDisplayBox");
         errorDisplayDIV.innerHTML = msg + "<br>";
         errorDisplayDIV.style.display = "block";
         errorDisplayDIV.className = "errorDisplayBox";

         if (eval(errorHandler)) {
            return eval(errorHandler+ '()');
         }
      }
   }
}

//=====================================================//
Validate.setOriginalFieldLabelClassName = function(){
   var formContainer = document.getElementById("formContainer");
   var divElements = formContainer.getElementsByTagName("div");

   for (var i=0; i < divElements.length; i++) {

      var fieldLabelDIV = divElements[i];
      if (!fieldLabelDIV.originalClassName){
         fieldLabelDIV.originalClassName = fieldLabelDIV.className;
      }      
   }
   
}

//=====================================================//
Validate.resetFieldLabelStyles = function(){
   var formContainer = document.getElementById("formContainer");
   var divElements   = formContainer.getElementsByTagName("div");

   var numDiv = divElements.length;
   for (var i=0; i < numDiv; i++) {
      divElements[i].className = divElements[i].originalClassName;
   }
}


//=====================================================//
var Validate2 = {
    //=====================================================//
    validateFormData: function(json, statusText, jqFormObj, extraParamObj){
        if (typeof(json) == 'string') {
            eval('var json =' + json);
        }

        var callbackFunction = null;
        var callbackFunctionOnError = null;
        if (extraParamObj) {
            if (extraParamObj.callback) {
                callbackFunction = extraParamObj.callback;
            }

            if (extraParamObj.callbackOnError) {
                callbackFunctionOnError = extraParamObj.callbackOnError;
            }
        }

        $(jqFormObj).find('.progressSpan').removeClass('progress').css('display', 'none');
        
        var errorCount = json.errorCount;
        if(errorCount == 0){
            $(jqFormObj).find("#errorDisplayBox").css('display', 'none');

            var successHandler = jqFormObj.attr("success");
            if (successHandler) {
                eval(successHandler);
            }

            if (returnUrl) {
                document.location = returnUrl;
            } else {
                returnUrl = json.returnUrl;
                if (returnUrl) {
                    document.location = returnUrl;
                } else {
                    var returnUrl = $(jqFormObj).find('#retUrl').val();
                    if (returnUrl) {
                        document.location = returnUrl;
                    } else if(callbackFunction) {
                        callbackFunction.call(this, json, statusText, jqFormObj, extraParamObj);
                    }
                }

            }
        } else {

            var htmlText  = "";
            htmlText += "<h4>The following errors occured</h4>";

            $(jqFormObj).find('div').removeClass('error');

            $.each(json.errors, function() {
                fieldName = this.name;
                var fieldObj = $(jqFormObj).find('#fld_' + fieldName);

                var parent = fieldObj.parent('div');
                if (fieldObj.attr('type') == 'radio') {
                    // since each radio is encapsulated in each div we would simply
                    // add the error class to the parent - two level up
                    parent = fieldObj.parent('div').parent('div');
                }
			    
                parent.addClass('error');
                if (this.msg) {
                    htmlText  += '<p>' + this.msg + '</p>';
                }

                $("#label_" + fieldName).addClass("formFieldLabelError");
            });

            $(jqFormObj).find("#errorDisplayBox").html(htmlText);
            $(jqFormObj).find("#errorDisplayBox").addClass('errorDisplayBox');
            $(jqFormObj).find("#errorDisplayBox").css('display', 'block');

            if(callbackFunctionOnError) {
                callbackFunctionOnError.call(this, json, statusText, jqFormObj, extraParamObj);
                return;
            }
        }
    }
}

//**********************************************************************************//
Validate.validateLoginForm = function(formName){
   formObj  = document.forms[formName];

   //-----------------------------------------------------//
   if (!checkUserName(formObj.user_name.value))
   {
     formObj.user_name.focus();
     return false;
   }

   //-----------------------------------------------------//
   if (!checkPassword(formObj.pass_word.value))
   {
     formObj.pass_word.focus();
     return false;
   }
   //-----------------------------------------------------//

}
//**********************************************************************************//
Validate.validateNewMemberForm = function(formName){
   formObj  = document.forms[formName];

   //-----------------------------------------------------//
   if (isTextEmpty(formObj.first_name.value))
   {
     alert('Please enter your first name!');
     formObj.first_name.select();
     return false;
   }

   //-----------------------------------------------------//
   if (isTextEmpty(formObj.last_name.value))
   {
     alert('Please enter your last name!');
     formObj.last_name.select();
     return false;
   }

   //-----------------------------------------------------//
   if (!isValidEmail(formObj.email.value))
   {
     alert('Please enter a valid email address!');
     formObj.email.select();
     return false;
   }

   //-----------------------------------------------------//
   if (!isDropDownSelected('address_country', formName))
   {
     alert('Please select your country!');
     formObj.address_country.focus();
     return false;
   }

   //-----------------------------------------------------//
   if (!checkUserName(formObj.user_name.value))
   {
     formObj.user_name.focus();
     return false;
   }

   //-----------------------------------------------------//
   if (!checkPassword(formObj.pass_word.value))
   {
     formObj.pass_word.focus();
     return false;
   }

   //-----------------------------------------------------//
   if (isTextEmpty(formObj.cpass_word.value))
   {
     alert('Please confirm your password!');
     formObj.cpass_word.focus();
     return false;
   }

   //-----------------------------------------------------//
   if (formObj.pass_word.value != formObj.cpass_word.value)
   {
     alert('The password and confirm password are not the same!');
     formObj.cpass_word.focus();
     return false;
   }
   //-----------------------------------------------------//

}

//**********************************************************************************
Validate.validateEditProfile = function(formName){

   formObj  = document.forms[formName];
   //-----------------------------------------------------//
   if (isTextEmpty(formObj.first_name.value))
   {
     alert('Please enter your first name!');
     formObj.first_name.select();
     return false;
   }

   //-----------------------------------------------------//
   if (isTextEmpty(formObj.last_name.value))
   {
     alert('Please enter the last name!');
     formObj.last_name.select();
     return false;
   }

   //-----------------------------------------------------//
   if (!isValidEmail(formObj.email.value))
   {
     alert('Please enter a valid email address!');
     formObj.email.select();
     return false;
   }

   //-----------------------------------------------------//
   if (!isDropDownSelected('address_country', formName))
   {
     alert('Please select your country!');
     formObj.address_country.focus();
     return false;
   }
   //-----------------------------------------------------//
}

//**********************************************************************************
Validate.validateEditPassword = function(formName){
   formObj  = document.forms[formName];

   //-----------------------------------------------------//
  if (
      isTextEmpty(formObj.old_password.value)  ||
      isTextEmpty(formObj.new_password1.value) ||
      isTextEmpty(formObj.new_password2.value)
      )
      {
        alert('Please enter proper values!');
        formObj.old_password.select();
        return false;
      }

   //-----------------------------------------------------//
   if ( formObj.new_password1.value != formObj.new_password2.value )
          {
            alert('Your new password and confirm password are not the same!');
            formObj.new_password1.select();
           return false;
   }

   //-----------------------------------------------------//
   if (confirm('Are you sure you want to modify this entry?'))
   {
     return true;
   } else {
     return false;
   }
   //-----------------------------------------------------//

}

//**********************************************************************************
Validate.validateEnquiry = function(formName, hasCaptchaValidation){
   formObj  = document.forms[formName];

   //-----------------------------------------------------//
   if (isTextEmpty(formObj.first_name.value))
   {
     alert('Please enter your first name!');
     formObj.first_name.select();
     return false;
   }

   //-----------------------------------------------------//
   if (isTextEmpty(formObj.last_name.value))
   {
     alert('Please enter your last name!');
     formObj.last_name.select();
     return false;
   }

   //-----------------------------------------------------//
   if (!isValidEmail(formObj.email.value))
   {
     alert('Please enter a valid email address!');
     formObj.email.select();
     return false;
   }

   //-----------------------------------------------------//
   if (!isDropDownSelected('address_country', formName))
   {
     alert('Please select your country!');
     formObj.address_country.focus();
     return false;
   }

   //-----------------------------------------------------//
   if (isTextEmpty(formObj.comments.value))
   {
     alert('Please enter your comments!');
     formObj.comments.select();
     return false;
   }

   //-----------------------------------------------------//
   if(hasCaptchaValidation == 1){
      if (isTextEmpty(formObj.captcha_code.value))
      {
        alert('Please enter the security code!');
        formObj.captcha_code.select();
        return false;
      }
   }
   //-----------------------------------------------------//
}
//**********************************************************************************

Validate.validateBillingDetails = function(formName){
   formObj  = document.forms[formName];

   //-----------------------------------------------------//
   if (isTextEmpty(formObj.cust_first_name.value))
   {
     alert('Please enter your first name!');
     formObj.cust_first_name.select();
     return false;
   }

   //-----------------------------------------------------//
   if (isTextEmpty(formObj.cust_last_name.value))
   {
     alert('Please enter the last name!');
     formObj.cust_last_name.select();
     return false;
   }

   //-----------------------------------------------------//
   if (!isValidEmail(formObj.cust_email.value))
   {
     alert('Please enter a valid email address!');
     formObj.cust_email.select();
     return false;
   }

   //-----------------------------------------------------//
   if (isTextEmpty(formObj.cust_phone.value))
   {
     alert('Please enter your contact no.!');
     formObj.cust_phone.select();
     return false;
   }

   //-----------------------------------------------------//
   if (isTextEmpty(formObj.cust_address_street.value))
   {
     alert('Please enter your street address.!');
     formObj.cust_address_street.select();
     return false;
   }

   //-----------------------------------------------------//
   if (isTextEmpty(formObj.cust_address_town.value))
   {
     alert('Please enter your town / suburb.!');
     formObj.cust_address_town.select();
     return false;
   }

   //-----------------------------------------------------//
   if (!isDropDownSelected('cust_address_country', formName))
   {
     alert('Please select your country!');
     formObj.cust_address_country.focus();
     return false;
   }

   //-----------------------------------------------------//
   if (isTextEmpty(formObj.shipping_first_name.value))
   {
     alert('Please enter shipping first name!');
     formObj.shipping_first_name.select();
     return false;
   }

   //-----------------------------------------------------//
   if (isTextEmpty(formObj.shipping_last_name.value))
   {
     alert('Please enter shipping last name!');
     formObj.shipping_last_name.select();
     return false;
   }

   //-----------------------------------------------------//
   if (!isValidEmail(formObj.shipping_email.value))
   {
     alert('Please enter shipping email address!');
     formObj.shipping_email.select();
     return false;
   }

   //-----------------------------------------------------//
   if (isTextEmpty(formObj.shipping_phone.value))
   {
     alert('Please enter shipping contact no.!');
     formObj.shipping_phone.select();
     return false;
   }

   //-----------------------------------------------------//
   if (isTextEmpty(formObj.shipping_address_street.value))
   {
     alert('Please enter the shipping street address.!');
     formObj.shipping_address_street.select();
     return false;
   }

   //-----------------------------------------------------//
   if (isTextEmpty(formObj.shipping_address_town.value))
   {
     alert('Please enter the shipping town / suburb.!');
     formObj.shipping_address_town.select();
     return false;
   }

   //-----------------------------------------------------//
   if (!isDropDownSelected('shipping_address_country', formName))
   {
     alert('Please select the shipping country!');
     formObj.shipping_address_country.focus();
     return false;
   }
   //-----------------------------------------------------//
}

//**********************************************************************************//
Validate.validateEmailToFriend = function(formName){
   formObj  = document.forms[formName];

// name
         if (isTextEmpty(formObj.name1.value))
         {
           alert('Please enter your name!');
           formObj.name1.select();
           return false;
         }

// email

         if (!isValidEmail(formObj.email1.value))
         {
           alert('Please enter a valid email address!');
           formObj.email1.select();
           return false;
         }

// friends name
         if (isTextEmpty(formObj.name2.value))
         {
           alert('Please enter your friends name!');
           formObj.name2.select();
           return false;
         }

// friends email

         if (!isValidEmail(formObj.email2.value))
         {
           alert('Please enter your friends email address!');
           formObj.email2.select();
           return false;
         }
}
//**********************************************************************************//
