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 isValidDate(myVal,date_format) {
  switch (date_format) {
    case "mm/dd":
      regex = /^\d{2}\/\d{2}$/;
      break;
  }
  if (!regex) {
    return false;
  }
  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().toString();
    //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+"_msg");
    }
  }
}

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,myForm) {
  var el = null;
  if (myForm) {
    el = document.forms[myForm].elements[el_id];
  } else {
    el = document.getElementById(el_id);
  }
  if (el) el.disabled=true;
}

function enableElmt(el_id,myForm) {
  var el = null;
  if (myForm) {
    el = document.forms[myForm].elements[el_id];
  } else {
    el = document.getElementById(el_id);
  }
  if (el) el.disabled=false;
}

function setCheckElmt(el_id,myForm) {
  var el = null;
  if (myForm) {
    el = document.forms[myForm].elements[el_id];
  } else {
    el = document.getElementById(el_id);
  }
  if (el) el.checked=true;
}

function unCheckElmt(el_id,myForm) {
  var el = null;
  if (myForm) {
    el = document.forms[myForm].elements[el_id];
  } else {
    el = document.getElementById(el_id);
  }
  if (el) el.checked=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;
  }
//showArray(myElmts);
  var myEl = null;
  var myName = null;
  for (var i=0;i<count;i++) {
    if (fieldnames) {
      myEl = myForm.elements[myFields[i]];
      myName = myFields[i];
    } else {
      myEl = myElmts[i];
      myName = myEl.name;
    }
//alert(myName);
    if (myEl && myName != undefined) {
//showArray(myEl);
      if (myEl.type == "checkbox") {
        myArray[myName] = myEl.checked;
      } else if (myEl.type == "radio") {
        if (myEl.checked == true) {
          myArray[myName] = myEl.value;
        }
      } else if (myEl.type.indexOf("select") != -1) {
        //myArray[myName] = new Array();
        //myArray[myName][0] = myEl.value;
        myArray[myName] = myEl.value;
      } else {
        myArray[myName] = myEl.value;
      }
    }
  }
//showArray(myArray);
  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;
}

/**
* 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 serializeNew(newArray)
{
//showArray(newArray);
    var myArray = newArray;
    var counter = 0;
    var vardef = "";
    var key = "";
    for (key in myArray)
    {

        counter++;
        var length = myArray[key].length;
        if (!length) {
          length = 0;
        }

        //alert("begin key "+key);
        var pos = key.indexOf("[");
        if (pos!=-1) {
          // this is handle situations with form names being "name[name2][name3]..."
          // which are not arrays but merely strings.
          var newname = key.substring(0,pos);
          var endpos = key.indexOf("]",pos);
          var newkey = key.substring(pos+1,endpos);
        //  alert("newkey "+newkey);
          var therest = newkey+key.substring(endpos+1);
        //  alert("therest "+therest);
          var newArray = new Object();
          newArray[therest] = myArray[key];
          vardef += "s:" + newname.length + ":\"" + newname + "\";"
          vardef += serialize(newArray);
        } else if (dltypeof(myArray[key])=="array") {
          vardef += serialize(myArray[key]);
        } else {
          vardef += "s:" + key.length + ":\"" + key + "\";";
          if (typeof(myArray[key]) == "number") {
            vardef += "i:" + myArray[key] + ";";
          } else {
            vardef += "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;
}

function focusFirstFormElement(myForm) {
  // Function to set focus to first real form element ("fieldset" is a form element,
  // but we want to skip those);

  if (!myForm || !myForm.elements) {
    return;
  }
  var i=0;
  var found = null;

  while (!found && i<myForm.elements.length) {
    if (myForm.elements[i].tagName.toLowerCase() != "fieldset" && myForm.elements[i].type != "hidden") {
      found = i;
    }
    i++;
  }

  if (found) {
    myForm.elements[found].focus();
  }
}

/*
* PHP Serialize
* Morten Amundsen
* mor10am@gmail.com
*/
function php_serialize(obj)
{
    var string = '';

    if (typeof(obj) == 'object') {
        if (obj instanceof Array) {
            string = 'a:';
            tmpstring = '';
            count = 0;
            for (var key in obj) {
                tmpstring += php_serialize(key);
                tmpstring += php_serialize(obj[key]);
                count++;
            }
            string += count + ':{';
            string += tmpstring;
            string += '}';
        } else if (obj instanceof Object) {
            classname = obj.toString();

            if (classname == '[object Object]') {
                classname = 'StdClass';
            }

            string = 'O:' + classname.length + ':"' + classname + '":';
            tmpstring = '';
            count = 0;
            for (var key in obj) {
                tmpstring += php_serialize(key);
                if (obj[key]) {
                    tmpstring += php_serialize(obj[key]);
                } else {
                    tmpstring += php_serialize('');
                }
                count++;
            }
            string += count + ':{' + tmpstring + '}';
        }
    } else {
        switch (typeof(obj)) {
            case 'number':
                if (obj - Math.floor(obj) != 0) {
                    string += 'd:' + obj + ';';
                } else {
                    string += 'i:' + obj + ';';
                }
                break;
            case 'string':
                string += 's:' + obj.length + ':"' + obj + '";';
                break;
            case 'boolean':
                if (obj) {
                    string += 'b:1;';
                } else {
                    string += 'b:0;';
                }
                break;
        }
    }

    return string;
}


