function isEmpty(myVal) {
  return (myVal.length == 0);
}

function isEmptySelect(myVal,defaultVal) {
  if (!defaultVal) {
    defaultVal = 0;
  }
  return (myVal == defaultVal);
}

function isEmail(myVal) {
  regex = /^\w[-._\w]*\w@\w[-._\w]*\w\.\w{2,8}$/;
  return regex.test(myVal);
}

function isDate(myVal) {
  regex = /^(0?[1-9]|1[0-2])\/(0?[1-9]|[1-2][0-9]|3[01])(\/\d{2})?$/;
  return regex.test(myVal);
}

function isCurrency(myVal) {
  regex = /^\$?\d+(\.\d{2})?$/;
  return regex.test(myVal);
}

function isNum(myVal) {
  regex = /\d+/;
  return regex.test(myVal);
}

function addYear(myVal) {
  regex = /^(0?[1-9]|1[0-2])\/(0?[1-9]|[1-2][0-9]|3[01])\/\d{2}?$/;
  if (regex.test(myVal)) {
    return myVal;
  } else {
    todayDate = new Date();
    //var myYear = todayDate.getFullYear();
    var myYear = "2006";
    smYear = myYear.substr(2);
    return myVal+"/"+smYear;
  }
}

function isWithinLength(myField, minLength, maxLength) {
  minLength = (minLength) ? minLength : 0;
  if (maxLength) {
    if (myField.value.length > maxLength) {
      return false;
    }
  }
  return (myField.value.length >= minLength);
}

function showErrorMsg(el,msg) {
  var msg_id = el.id+"_msg";

  var mySpan;

  if (document.getElementById(msg_id)) {
    mySpan = document.getElementById(msg_id);
    mySpan.innerHTML = msg;
  } else {
    var myMsg = document.createTextNode(msg);
    mySpan = document.createElement('div');
    mySpan.id=el.id+"_msg";
    mySpan.className="showErrorMsg";
    //alert(mySpan.className);
    mySpan.appendChild(myMsg);
    el.parentNode.appendChild(mySpan);
  }
}

function clearAllErrorMsg() {
  var myMsgs = document.getElementsByTagName('div');
  myCount = myMsgs.length;

  for (i=0;i<myCount;i++) {
    if (myMsgs[i] && myMsgs[i].className.indexOf("showErrorMsg") != -1) {
      clearErrorMsg(null,myMsgs[i].id);
    }
  }
}

function clearErrorMsg(e,el_id) {
  var el = null;
  var msg_id = null;


  if (el_id) {
    el = document.getElementById(el_id);
    msg_id = el_id;
  } else {
    el = getTarget(e);
    msg_id = el.id+"_msg";
  }

  if (!el) {
    return;
  }

  var myMsg = document.getElementById(msg_id);
  if (myMsg) {
    myMsg.parentNode.removeChild(myMsg);
  }
}

function submitForm(form_name) {
  document.forms[form_name].submit();
}

function disableElmt(el_id) {
  var el = document.getElementById(el_id);
  if (el) el.disabled=true;
}

function enableElmt(el_id) {
  var el = document.getElementById(el_id);
  if (el) el.disabled=false;
}

function getFormValues(fieldnames,form_name) {
  var myForm = (form_name) ? document.forms[form_name] : document.forms[0];
  var myElmts = myForm.elements;
  var myArray = new Array();
  var count = 0;

  if (fieldnames) {
    var myFields = fieldnames.split(',');
    count = myFields.length;
  } else {
    count = myElmts.length;
  }

  var myEl = null;
  var myName = null;
  for (i=0;i<count;i++) {
    if (fieldnames) {
      myEl = myForm.elements[myFields[i]];
      myName = myFields[i];
    } else {
      myEl = myElmts[i];
      myName = myEl.name;
    }

    if (myEl) {
      if (myEl.type == "checkbox") {
        myArray[myName] = myEl.checked;
      } else if (myEl.type.indexOf("select") != -1) {
        myArray[myName] = new Array();
        myArray[myName][0] = myEl.value;
      } else {
        myArray[myName] = myEl.value;
      }
    }
  }
  return myArray;
}

function getFormValuesByDivID(div_id) {
  var excludeElmts = {
    "submit" : 1,
    "cancel" : 1,
    "reset" : 1
  };
  var myDiv = document.getElementById(div_id);

  if (!myDiv) return;
  var myInputs = myDiv.getElementsByTagName("input");
  var mySelects = myDiv.getElementsByTagName("select");

  var myFields = new Array();
  for (i=0;i<myInputs.length;i++) {
    if (!excludeElmts[myInputs[i].name]) {
      myFields.push(myInputs[i].name);
    }
  }
  for (i=0;i<mySelects.length;i++) {
    myFields.push(mySelects[i].name);
  }
  var fieldnames = myFields.join(",");
  //alert(fieldnames);
  return getFormValues(fieldnames);
}

/**
* serialize()
* this function serialize a javascript array to pass it to php and php can unserialize it
* Updated 01/13/07 to be recursive for multi-dimensional arrays
*
* @param     array
* @return     string
*/
function serialize(myArray)
{
    var counter = 0;
    var vardef = "";
    for (key in myArray)
    {

        counter++;
        var length = myArray[key].length;
        if (!length) {
          length = 0;
        }

        if (typeof(myArray[key])=="object") {
          vardef += serialize(myArray[key])+";";
        } else {
          vardef += "s:" + key.length + ":\"" + key + "\";" + "s:" + length + ":\"" + myArray[key] + "\";";
        }


    }
    var serialized = "a:" + counter + ":{" + vardef + "}";
    return serialized;
}

var excludeElmts = {
  "submit" : 1,
  "reset" : 1
};
function serializeForm(formObj) {
  myLength = formObj.length;
  myArray = new Array();

  for(i = 0; i < myLength; i++) {
    if (!excludeElmts[formObj.elements[i].name] && !myArray[formObj.elements[i].name]) {
      if (formObj.elements[i].type == "radio") {
        myArray[formObj.elements[i].name] = getCheckedValue(formObj[formObj.elements[i].name]);
      } else {
        myArray[formObj.elements[i].name] = formObj.elements[i].value;
      }
    }
  }
  return serialize(myArray);
}

function checkField(el,myField) {
  var isValid = true;

  switch (myField.e_type) {
    case "text":
      if (isEmpty(el.value)) {
        isValid = false;
      }
      break;
    case "currency":
      if (myField.is_required && isEmpty(el.value)) {
        isValid = false;
      } else if (!isEmpty(el.value) && !isCurrency(el.value)) {
        isValid = false;
      }
      break;
    case "numeric":
      if (myField.is_required && isEmpty(el.value)) {
        isValid = false;
      } else if (!isEmpty(el.value) && !isNum(el.value)) {
        isValid = false;
      }
      break;
    case "select":
      if (isEmptySelect(el.value)) {
        isValid = false;
      }
      break;
  }

  if (!isValid) {
    showErrorMsg(el,myField.msg);
  }

  return isValid;
}
