var errorSet = null;

FieldObj = function() {
   var Field;
   this.get_Field = function() { return Field; }
   this.set_Field = function(val) { Field = val; }

   var ErrorMessage;
   this.get_ErrorMessage = function() { return ErrorMessage; }
   this.set_ErrorMessage = function(val) { ErrorMessage = val; }
}

function ResetHighlight() {
   var field;

   if (errorSet != null) {
      for (var i = 0; i < errorSet.length; i++) {
         errorSet[i].Field.className = 'elqField'
      }
    }
   errorSet = new Array();
}

function DisplayErrorSet(ErrorSet) {
   var element;
   var ErrorMessage = '';

   for (var i = 0; i < ErrorSet.length; i++) {
      ErrorMessage = ErrorMessage + ErrorSet[i].ErrorMessage + '\n';
      ErrorSet[i].Field.className = 'elqFieldValidation';
   }

   if (ErrorMessage != '')
      alert(ErrorMessage);
}

function ValidateRequiredField(Element) {
   if (Element.value == null || Element.value == "") {
     return false;
   } else
   return true;
}

function ValidateEmailAddress(Element) {
   var varRegExp='^[A-Z0-9!#\\$%&\'\\*\\+\\-/=\\?\\^_`\\{\\|\\}~][A-Z0-9!#\\$%&\'\\*\\+\\-/=\\?\\^_`\\{\\|\\}~\\.]{0,62}@([A-Z0-9](?:[A-Z0-9\\-]{0,61}[A-Z0-9])?(\\.[A-Z0-9](?:[A-Z0-9\\-]{0,61}[A-Z0-9])?)+)$';
   if ((Element) && (Element.value != '')) {
      var reg = new RegExp(varRegExp,"i");
      var match = reg.exec(Element.value);
         if ((match) && (match.length=3) && (match[1].length<=255) && ((match[2].length>=3) & (match[2].length<=7)))
            return true;
   }
   return false;
}

function ValidateDataTypeLength(Element, args, ErrorMessage) {
   var elementVal = Element.value;
   var testPass = true;

   if (Element) {
      if (args.Type == 'text') {
         if ((args.Minimum != '') && (elementVal.length < args.Minimum))
            testPass = false;
         if ((args.Maximum != '') && (elementVal.length > args.Maximum))
            testPass = false;
      }
      else if (args.Type == 'numeric') {
         if ((elementVal != '') && (elementVal != parseFloat(elementVal)))
            testPass = false;
         if (args.Minimum != '') {
            if ((elementVal == '') || (parseFloat(elementVal) < args.Minimum))
            testPass = false;
         }
         if (args.Maximum != '') {
            if ((elementVal != '') && (parseFloat(elementVal) > args.Maximum))
               testPass = false;
         }
      }
   }
   else
      testPass = false;
   return testPass;
}

function CheckElqForm(elqForm) {
var args = null;
var allValid = true;

if (elqForm == null) {
   alert('Unable to execute form validation!\Unable to locate correct form');
   return false;
}
ResetHighlight();

formField = new FieldObj();
formField.Field = elqForm.elements['PurchaseTimeframe'];
formField.ErrorMessage ='Form field Purchase Timeframe is required'
if (formField.Field != null) {
   if (!ValidateRequiredField(formField.Field)) {
      errorSet.push(formField);
      allValid = false;
   }
}

formField = new FieldObj();
formField.Field = elqForm.elements['OrgType'];
formField.ErrorMessage ='Form field Organization Type is required'
if (formField.Field != null) {
   if (!ValidateRequiredField(formField.Field)) {
      errorSet.push(formField);
      allValid = false;
   }
}

formField = new FieldObj();
formField.Field = elqForm.elements['Country'];
formField.ErrorMessage ='Form field Country is required'
if (formField.Field != null) {
   if (!ValidateRequiredField(formField.Field)) {
      errorSet.push(formField);
      allValid = false;
   }
}

formField = new FieldObj();
formField.Field = elqForm.elements['ZipPostalCode'];
formField.ErrorMessage ='Form field Zip/Postal Code is required'
if (formField.Field != null) {
   if (!ValidateRequiredField(formField.Field)) {
      errorSet.push(formField);
      allValid = false;
   }
}

formField = new FieldObj();
formField.Field = elqForm.elements['StateProvince'];
formField.ErrorMessage ='Form field State/Province is required'
if (formField.Field != null) {
   if (!ValidateRequiredField(formField.Field)) {
      errorSet.push(formField);
      allValid = false;
   }
}

formField = new FieldObj();
formField.Field = elqForm.elements['City'];
formField.ErrorMessage ='Form field City is required'
if (formField.Field != null) {
   if (!ValidateRequiredField(formField.Field)) {
      errorSet.push(formField);
      allValid = false;
   }
}

formField = new FieldObj();
formField.Field = elqForm.elements['Street'];
formField.ErrorMessage ='Form field Street is required'
if (formField.Field != null) {
   if (!ValidateRequiredField(formField.Field)) {
      errorSet.push(formField);
      allValid = false;
   }
}

formField = new FieldObj();
formField.Field = elqForm.elements['FirstName'];
formField.ErrorMessage ='Form field First Name is required'
if (formField.Field != null) {
   if (!ValidateRequiredField(formField.Field)) {
      errorSet.push(formField);
      allValid = false;
   }
}

formField = new FieldObj();
formField.Field = elqForm.elements['OrgName'];
formField.ErrorMessage ='Form field Organization is required'
if (formField.Field != null) {
   if (!ValidateRequiredField(formField.Field)) {
      errorSet.push(formField);
      allValid = false;
   }
}

formField = new FieldObj();
formField.Field = elqForm.elements['JobTitle'];
formField.ErrorMessage ='Form field Job Title is required'
if (formField.Field != null) {
   if (!ValidateRequiredField(formField.Field)) {
      errorSet.push(formField);
      allValid = false;
   }
}

formField = new FieldObj();
formField.Field = elqForm.elements['PhoneNumber'];
formField.ErrorMessage ='Form field Phone Number is required'
if (formField.Field != null) {
   if (!ValidateRequiredField(formField.Field)) {
      errorSet.push(formField);
      allValid = false;
   }
}

formField = new FieldObj();
formField.Field = elqForm.elements['LastName'];
formField.ErrorMessage ='Form field Last Name is required'
if (formField.Field != null) {
   if (!ValidateRequiredField(formField.Field)) {
      errorSet.push(formField);
      allValid = false;
   }
}

formField = new FieldObj();
formField.Field = elqForm.elements['EmailAddress'];
formField.ErrorMessage ='Form field Email Address contains an invalid email address'
if (formField.Field != null) {
   if (!ValidateEmailAddress(formField.Field)) {
      errorSet.push(formField);
      allValid = false;
   }
}

if (!allValid) {
   DisplayErrorSet(errorSet);
   return false;
}

return true;
}

function submitForm(elqForm) {
   if (CheckElqForm(elqForm)) {
      return true;
   }
   else { return false; }
}
function prepareSelectsForEloqua(elqForm) {
   var selects = elqForm.getElementsByTagName("SELECT");
   for (var i = 0; i < selects.length; i++) {
       if (selects[i].multiple) {
           createEloquaSelectField(elqForm, selects[i]);
       }
   }
   return true;
}
function createEloquaSelectField(elqForm, sel) {
   var inputName = sel.name;
   var newInput = document.createElement('INPUT');
   newInput.style.display = "none";
   newInput.name = inputName;
   newInput.value = "";
   for (var i = 0; i < sel.options.length; i++) {
       if (sel.options[i].selected) {
           newInput.value += sel.options[i].value + "::";
       }
   }
   if (newInput.value.length > 0) {
       newInput.value = newInput.value.substr(0, newInput.value.length - 2);
   }
   sel.disabled = true;
   newInput.id = inputName;
   elqForm.insertBefore(newInput, elqForm.firstChild);
}