/*
  COPYWRITE

  This javascript library file is the sole property of Art Main and GoldCoastDesign and may
  not be reproduced, sold, or used in whole or in part for any purpose other than intended.
  All rights to this code is not transfered to the client it was provided for.  This code
  may be used for the single domain and purpose as provided by Art Main and GoldCoastDesign
  to the client it is intended for.

  Questions or concerns may be directed to info@goldcoastdesign.org

*/


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+)?(\.)?(\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;
}

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();
  }
}
