var emailRE =  /^\S+@[\S\.]+\.\S{2,4}$/;
var validCharactersRE = /^[A-Za-z0-9-_\s,\.]*$/;
var urlRE = /^http(s)?:\/\/[a-zA-Z0-9-]+\.[\.a-zA-Z0-9-]+(:[0-9]+)?(\/.*)?$/;

String.prototype.startsWith = function(str) {return (this.match("^"+str)==str)}

function getStatus(errorList, fieldName, status, message) {
  var obj = document.getElementById(fieldName+"_message");
  if (obj != null && typeof(obj) != 'undefined') {
    if (!status) {
      errors = errorList[fieldName];
      if (errors == undefined) {
        errors = new Array();
        errorList[fieldName]=errors;
      }
      errors.push(message);
      obj.style.display = "";
      obj.innerHTML = errors.join("<br/>");
      return 1;
    } else {
      obj.style.display = "none";
      return 0;
    }
  }
}

function getField(fieldName) {
  return document.join_now[fieldName];
}

function isRequired(errorList, fieldName, fieldDesc) {
  field = getField(fieldName)
  var result = (field.value != "");
  return getStatus(errorList, fieldName, result, fieldDesc + " is required");
}

function isChecked(errorList, fieldName, fieldDesc) {
  field = getField(fieldName);
  var result = (field.checked);
  return getStatus(errorList, fieldName, result, fieldDesc + " must be checked");
}

function isEmail(errorList, fieldName, fieldDesc) {
  field = getField(fieldName);
  value = field.value;
  return getStatus(errorList, fieldName, emailRE.test(value), fieldDesc + " must be a valid email address");
}

function isURL(errorList, fieldName, fieldDesc) {
  field = getField(fieldName);
  value = field.value;
  return getStatus(errorList, fieldName, urlRE.test(value), fieldDesc + " must be a valid URL");
}

function isValidCharacters(errorList, fieldName, fieldDesc) {
  field = getField(fieldName);
  value = field.value;
  return getStatus(errorList, fieldName, validCharactersRE.test(value), fieldDesc + " contains invalid characters");
}

function forceHTTPProtocol(fieldName) {
  field = getField(fieldName);
  if (field.value.indexOf("://") == -1) {
    field.value = "http://" + field.value;
  }
}

function validateGoDaddyJoinForm() {
  errors = validateJoinForm();
  errors += isRequired(errorList, "pubName", "Website name");
  errors += isRequired(errorList, "company", "organization name");
  return errors;
}
function validateJoinForm() {
  errorList = {};
  errors = 0;
  errors += isRequired(errorList, "profileType", "profile type");
  errors += isRequired(errorList, "buysell", "buy/sell preference");
  errors += isRequired(errorList, "first_name", "first name");
  errors += isRequired(errorList, "last_name", "last name");
  errors += isRequired(errorList, "street", "street");
  errors += isRequired(errorList, "city", "city");
  errors += isRequired(errorList, "country", "country");
  errors += isRequired(errorList, "zipcode", "zipcode");
  errors += isValidCharacters(errorList, "company", "company");
  errors += isRequired(errorList, "email", "email");
  errors += isEmail(errorList, "email", "email");
  errors += isRequired(errorList, "phone", "phone");
  errors += isRequired(errorList, "primaryBusiness", "primary business");
  errors += isChecked(errorList, "agreement", "agreement");
  errors += isRequired(errorList, "description", "description");
  errors += isRequired(errorList, "methodOfHearing", "method of hearing");

  if (getField("country").value == "US") {
    errors += isRequired(errorList, "state_US", "state");
  } else {
    errors += isRequired(errorList, "state_other", "state");
  }

  var profileType = getField("profileType").value;
  var buysell = getField("buysell").value;
  if (buysell == "BUY" || buysell== "BUYSELL") {
    if (profileType == "ONLINE" || profileType=="BOTH") {
      forceHTTPProtocol("URL");
      errors += isRequired(errorList, "URL", "URL");
      errors += isURL(errorList, "URL", "URL");
      errors += isRequired(errorList, "websiteName", "website name");
      errors += isRequired(errorList, "uniqueVisitors", "unique visitors");
    }
    if (profileType == "PRINT" || profileType=="BOTH") {
      errors += isRequired(errorList, "pubName", "publication name");
      errors += isRequired(errorList, "circulation", "circulation");
      errors += isRequired(errorList, "circulationAuditedBy", "circulation audited by");
    }
  }
  // showhide("validation_message", errors != 0);
  return errors;
}

function profileTypeOnChange() {
  var profileType = document.getElementById("profileType").value;
  var buysell = document.getElementById("buysell").value;
  
  showhide("online_div", (profileType == "ONLINE" || profileType == "BOTH"));
  showhide("print_div", (profileType == "PRINT" || profileType == "BOTH"));
}

function showhide(divID, state) {
  var div = document.getElementById(divID);
  if (state) {
    div.style.display = "";
  } else {
    div.style.display = "none";
  }
}
    
function setName(objID, name) {
  var obj = document.getElementById(objID);
  obj.name = name;
}
function countryOnChange() {
  var country = document.getElementById("country").value;
  showhide("state_dropdown_div", country == "US");
  showhide("state_textbox_div", country != "US");
}

function onLoad() {
  profileTypeOnChange();
  countryOnChange();
  populateEnquiryFields();
}

function populateEnquiryFields() {
  getField("email").value = getParameter("email");
  getField("URL").value = getParameter("URL");
}
function submitJoinForm() {
  errorCount = validateJoinForm();
  if (getField("country").value == "US") {
    getField("state").value = getField("state_US").value;
  } else {
    getField("state").value = getField("state_other").value;
  }
  if (errorCount == 0) {
    showhide("submit", false);
    showhide("submit_disabled", true);    
    join_now.submit();
    return true;
  }
  return false;
}
function submitGoDaddyJoinForm() {
  errorCount = validateGoDaddyJoinForm();
  if (getField("country").value == "US") {
    getField("state").value = getField("state_US").value;
  } else {
    getField("state").value = getField("state_other").value;
  }
  if (errorCount == 0) {
    join_now.submit();
    return true;
  }
  return false;
}

function validateEnquiryForm() {
  errorList = {};
  errors = 0;
  errors += isRequired(errorList, "email", "email");
  errors += isEmail(errorList, "email", "email");
  forceHTTPProtocol("URL");
  errors += isRequired(errorList, "URL", "URL");
  errors += isURL(errorList, "URL", "URL");
  //showhide("validation_message", errors != 0);
  return errors;
}

function submitEnquiryForm() {
  errorCount = validateEnquiryForm();
  if (errorCount == 0) {
//    showhide("submit", false);
//    showhide("submit_disabled", true);    
    var email = escape(getField("email").value);
    var URL = escape(getField("URL").value);
    var retURLbase = getField("retURLbase").value;
    var retURL = getField("retURL");
    retURL.value = retURLbase + "?email=" + email + "&URL=" + URL;
    join_now.submit();
    return true;
  }
  return false;
}

function getParameter(param) {
  var url = document.location.href;
  qsPos = url.indexOf("?")
  if (qsPos > -1) {
    param = param + "=";
    begin = url.indexOf(param,qsPos);
    if (begin != -1) {
      begin += param.length;
      end = url.indexOf("&", begin);
      if (end == -1) {
        end = url.length;
      }
      return unescape(url.substring(begin, end));
    }
  }
  else {
    return "";
  }
}

