var canAccess = {};
canAccess['state_id'] = 1;
canAccess['region_id'] = 1;
canAccess['community_id'] = 1;

var reqField = {};
reqField['state_id'] = 1;
reqField['region_id'] = 1;
reqField['community_id'] = 1;

function getElement(id) {
  var element = null;
  if (document.getElementById) {
    element = document.getElementById(id);
  } else if (document.layers) {
    element = document.layers[id];
  } else if (document.all) {
    element = document.all[id];
  }
  return element;
}

// associate ability of location select boxes to subject lines
// subject line => state, region, community
var subjects = {};
subjects[""] = [1,1,1];
subjects["Non-Pardee New Home Purchase"] = [0,0,0];
subjects["Pardee Home Purchase"] = [1,1,0];
subjects["Resale Home Purchase"] = [1,1,0];
subjects["Refinance"] = [1,0,0];
subjects["Equity Line of Credit"] = [1,0,0];

function checkSubject(selectedSubject, state, region, community) {
  if (typeof(subjects[selectedSubject]) == "undefined") {
    return;
  } else {
    stateInput = getElement(state);
    regionInput = getElement(region);
    communityInput = getElement(community);
    stateInput.selectedIndex = 0;
    regionInput.selectedIndex = 0;
    communityInput.selectedIndex = 0;
    regionInput.disable();
    communityInput.disable();

    stateInput.enable();

    canAccess[state] = 1;
    reqField[state] = subjects[selectedSubject][0]
    canAccess[region] = 1;
    reqField[region] = subjects[selectedSubject][1];
    canAccess[community] = 1;
    reqField[community] = subjects[selectedSubject][2];
    checkAccess(state);
    checkAccess(region);
    checkAccess(community);
  }
  return;
}

function checkAccess(field) {
  if (reqField[field]) {
    getElement("req_"+field).innerHTML =  "*";
  } else {
    getElement("req_"+field).innerHTML =  "";
    getElement(field).className = getElement(field).className.replace("error", "");
  }
}

var reqfields = ['subject','state_id','region_id','community_id','first_name','last_name','email','comments'];
var valfuncs = [];
valfuncs.zip = ['validateZIP', 'zip code'];
valfuncs.email = ['isEmail', 'email address'];

function updateRegions(targetID, stateID) {
  if (canAccess[targetID] == 0 || stateID == 0) {
    $(targetID).disable();
  } else {
    url = 'includes/update_selectregions.php?state='+stateID;
    myelement = $(targetID);
    new Ajax.Updater(myelement, url, {method: 'get'});
    $(targetID).enable();
  }
} 

function updateCommunities(targetID, regionID) {
  if (canAccess[targetID] == 0 || !regionID) {
    getElement(targetID).disable();
  } else {
    var url = 'includes/update_selectcommunities.php?region='+regionID;
    var myelement = getElement(targetID);
    var ajax = new Ajax.Updater(myelement, url, {method: 'get'});
    getElement(targetID).enable();
  }
}

function updateLoanPrograms(targetID, loanType) {
  if (!loanType) {
    getElement(targetID).disable();
  } else {
    var url = 'includes/update_selectloanprogram.php?type='+loanType;
    var myelement = getElement(targetID);
    var ajax = new Ajax.Updater(myelement, url, {method: 'get'});
    getElement(targetID).enable();
  }
}

function stillRequired(fieldname) {
  // if fieldname is set
  if (typeof(reqField[fieldname]) != "undefined") {
    //alert(fieldname+": "+typeof(canAccess[fieldname]));
    // and if it is set as true
    if (reqField[fieldname]==1) { 
      return true;
    } else {
      //alert('returning false');
      return false;
    }
  } else {
    return true;
  }
}

function validate() {
  //var f = $('cform');
  //var test = "first_name";
  //alert(reqfields.length);
  var errordiv = getElement('errormsg');
  var errormsg = '';
  var errorlist = [];
  for (var i=0; i<reqfields.length; i++) {
    var fieldname = reqfields[i];
    var field = getElement(fieldname);
    var value = field.value;
    field.className = field.className.replace("error", "");
    if (stillRequired(fieldname)) {
      if (!value) {//value===null || value=='') {
        field.className += " error";
        if (!errormsg) { errormsg = "Please provide the information indicated by the highlighted fields"; }
      } else {
        try {
          if (valfuncs[fieldname][0]) {
            var valfunc = valfuncs[fieldname][0];
            if (!eval(valfunc+"(value)")) {
              field.className += " error";
              if (!errormsg) { errormsg = "Please provide the information indicated by the highlighted fields"; }
              errorlist.push(valfuncs[fieldname][1]);
            }
          }
        } catch(e) { }
      }
    }
  }
  if (errormsg) {
    if (errorlist) {
      for (var j=0; j<errorlist.length; j++) {
        if (j === 0) {
          errormsg = errormsg + ", entering a valid ";
        } else if (j == errorlist.length-1) {
          errormsg = errormsg + " and ";
        } else {
          errormsg = errormsg + ", ";
        }
        errormsg = errormsg + errorlist[j];
      }
    }
    errormsg = errormsg + ".";
    errordiv.innerHTML = errormsg;
    return false;
  } else {
    return true;
  }
}

function validateZIP(field) {
  var valid = "0123456789-";
  var hyphencount = 0;
  if (field.length!=5 && field.length!=10) { return false; }
  for (var i=0; i < field.length; i++) {
    var temp = "" + field.substring(i, i+1);
    if (temp == "-") { hyphencount++; }
    if (valid.indexOf(temp) == "-1") { return false; }
    if ((hyphencount > 1) || ((field.length==10) && ""+field.charAt(5)!="-"))
    { return false; }
  }
  return true;
}


// check if email is formatted correctly
//String.prototype.isEmail = function(){
function isEmail(field) {
  if (field.length < 5)
  { return false; }
  var iChars = "*|,\":<>[]{}`';()&$#%";
  var eLength = field.length;
  for (var i=0; i < eLength; i++) {
    if (iChars.indexOf(field.charAt(i)) != -1)
    { return false; }
  }
  var atIndex = field.lastIndexOf("@");
  if(atIndex < 1 || (atIndex == eLength - 1))
  { return false; }
  var pIndex = field.lastIndexOf(".");
  if(pIndex < 4 || (pIndex == eLength - 1))
  { return false; }
  if(atIndex > pIndex)
  { return false; }
  return true;
}
