﻿// JScript File
var ranProcFormLabels = 0;

function procFormLabels() {
  var labels = document.getElementsByTagName("LABEL");
  if(labels) {
    for(var i = 0; i < labels.length; i++) {
      if(!labels[i].element) {
        var id = labels[i].htmlFor;
        var elm = (id ? document.getElementById(id) : null);
        if(elm && !elm.label) {
          elm.label = labels[i];
          elm.label.element = elm;
        }
      }
    }
  }
  ranProcFormLabels = 1;
}

function getFieldLabel(elm) {
  return (elm.label ? elm.label.innerHTML : elm.name);
}

function getFieldValue(elm,all,sep) {
  var i = 0;
  var ret = "";
  var elms = null;

  if(elm.selectedIndex || elm.selectedIndex == 0) {
    if(elm.multiple) {
      ret = new Array();
      for(i = 0; i < elm.options.length; i++)
        if(elm.options[i].selected)
          ret[ret.length] = elm.options[i].value;
    } else if(elm.selectedIndex > -1 && elm.selectedIndex < elm.options.length)
      ret = elm.options[elm.selectedIndex].value;
  } else if(all && (elm.type == "radio" || elm.type == "checkbox")) {
    elms = elm.form.elements[elm.name];
    if(!elms.type && elms.length > 0) {
      ret = new Array();
      for(i = 0; i < elms.length; i++)
        if(elms[i].checked)
          ret[ret.length] = elms[i].value;
    } else
      ret = elm.value;
  } else if(elm.value)
    ret = elm.value;

  if(ret.join) {
    if(ret.length == 1)
      ret = ret[0];
    else if(sep || sep == "")
      ret = ret.join(sep);
  }

  return ret;    
}

function handleFieldFormat(elm) {
  var fmt = elm.getAttribute("format");
  var bar, bra, par, pos, cmd, qtp;
  var qt;
  var fmtElm = null;
  var fmtCmd = new Array();
  var fmtValue = "";
  var fmtParam = null;

  if(!fmt || !fmt.length)
    return "";

  bar = fmt.indexOf('|');
  if(bar<0)
    bar = fmt.length;
  while(bar >= 0) {
    cmd = 0;
    fmtElm = elm;
    fmtParam = new Array();
      
    bra = fmt.indexOf('[');
    par = fmt.indexOf('(');

    if(bra > 0 && bra < bar && ((par > 0 && bra < par) || 1)) {
      if(!cmd)
        cmd = bra;
      pos = fmt.indexOf(']', bra);
      if(pos > 0 && pos < bar && ((par > 0 && bra < par) || 1)) {
        fmtElm = fmt.substr(bra+1, pos - bra - 1);
        fmtElm = document.getElementById(fmtElm);
      }
    }

    if(par > 0 && par < bar) {
      if(!cmd)
        cmd = par;
      qt = fmt.substr(par,1);
      while(qt == '(' || qt == ',') {        
        fmtValue = "";
        
        qt = fmt.substr(par+1,1);
        if(qt == '"' || qt == "'") {
          qtp = par+1;
          pos = fmt.indexOf(qt, par+1);
          while(fmt.substr(pos+1, 1) == qt)
            pos = fmt.indexOf(qt, pos+2);
            
          fmtValue = fmt.substr(qtp, pos-qtp);
          if(fmt.substr(pos+1,1) == ",")
            par = pos+1;
        } else {
          pos = fmt.indexOf(",", par)
          if(pos < par ||  pos > bar)
            pos = fmt.indexOf(")", par);
            
          fmtValue = fmt.substr(par+1, pos - par - 1);
          par = pos;
        }
        fmtParam[fmtParam.length] = fmtValue;
        qt = fmt.substr(par,1);
      }
      
    }

    if(!cmd)
      cmd = bar;

    fmtValue = new String(fmt.substr(0, cmd));
    fmtValue['element'] = fmtElm;
    fmtValue['param'] = fmtParam;
    fmtCmd[fmtCmd.length] = fmtValue;

    if(bar < fmt.length) {    
      fmt = fmt.substr(bar+1, fmt.length);
      bar = fmt.indexOf('|');
      if(!bar)
        bar = fmt.length;
    } else
      bar = -1;
  }    

  if(!fmtCmd.length)
    return "";

  for(pos = 0; pos < fmtCmd.length; pos++) {
    cmd = fmtCmd[pos];
    fmtElm = cmd['element'];
    fmtParam = cmd['param'];
    cmd = 'formatField' + cmd.substr(0, 1).toUpperCase() + cmd.substr(1,cmd.length).toLowerCase();
    cmdValue = "";
    if(eval('window.'+cmd))
      cmdValue = eval(cmd+"(elm,fmtElm,fmtParam)");
      
    if(cmdValue.length)
      return cmdValue;
  }
    
  return "";
}

function handleFieldReq(elm) {
  var req = elm.getAttribute("required");
  var pos = 0;
  var reqElm = null;
  var reqValue = "";
  
  if(!req || !req.length)
    return "";
    
  if(req.substr(0,1) == "[" && (pos = req.indexOf(']')) > 1) {
    reqElm = req.substr(1, pos-2);
    reqElm = document.getElementById(reqElem);
    req = req.substr(pos+1, req.length);

    if(req.substr(0,1) == "(" && req.substr(req.length-1,1) == ")") {
      reqValue = req.substr(1, req.length-2);
      if(reqValue != getFieldValue(reqElm,1,""))
        return "";
    } else {
      reqValue = getFieldValue(reqElm,1,"");
      if(!reqValue || !reqValue.length)
        return "";
    }

  }

  reqValue = getFieldValue(elm,1,"");
  if(!reqValue || !reqValue.length)
    return " is required";
  
  return "";    
}

function formAlert(elm, msg) {
  if(elm.focus)
    elm.focus();
  alert(getFieldLabel(elm) + msg + '.');
}

function validateForm(frm) {
  var i = 0;
  var elm;
  var msg;

  for(i = 0; i < frm.elements.length; i++) {
    elm = frm.elements[i];
    msg = "";

    if(!msg.length)
      msg = handleFieldFormat(elm);

    if(!msg.length)
      msg = handleFieldReq(elm);
      
    if(msg.length) {
      formAlert(elm, msg);
      return false;
    }
  }
  
  return true;
}

function submitFormLink(idForm, aryField, aryValue, boolValidate) {
  var frm = document.getElementById(idForm);
  var elm = null;
  var i = 0, j = 0;

  if(!ranProcFormLabels)
    procFormLabels();

  if(boolValidate && !validateForm(frm))
    return;

  if(!aryField)
    aryField = Array();
  else if(aryField.constructor != Array)
    aryField = Array(aryField);

  if(!aryValue)
    aryValue = Array();
  else if(aryValue.constructor != Array)
    aryValue = Array(aryValue);

  for(i = 0; i < aryField.length && i < aryValue.length; i++) {
    elms = frm.elements[aryField[i]];
    if(elms) {
      if(!elms.type && elms.length)
        elm = elms[0];
      else {
        elm = elms;
        elms = Array(elm);
      }

      if(elm.type == "radio" || elm.type == "checkbox") {
        for(j = 0; j < elms.length; j++)
          elms[j].checked = (elms[j].value == aryValue[i]);
      } else if(elm.type == "select") {
        elms = elm.options;
        for(j = 0; j < elms.length; j++)
          elms.selected = (elms.value == aryValue[i]);
      } else
        elm.value = aryValue[i];
    }
  }
  frm.submit();
}

function submitForm(elmFrm, boolValidate) {
  if(!ranProcFormLabels)
    procFormLabels();

  if(boolValidate && !validateForm(elmFrm))
    return false;

  return true;
}

function formatFieldMatch(elm, srcElm, param) {
  if(getFieldValue(elm) != getFieldValue(srcElm))
    return ' does not match ' + getFieldLabel(srcElm);
    
  return "";
}

function formatFieldEmail(elm, srcElm, param) {
  var re = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
  
  if(!re.test(getFieldValue(elm)))
    return ' is not a valid email address';
    
  return "";
}