function colorRed(elemID) {
  var currElem = document.getElementById(elemID);
  currElem.setAttribute("class", "red");
  currElem.setAttribute("className", "red");
  return true;
} 

function colorDefault(elemID) {
  var currElem = document.getElementById(elemID);
  currElem.setAttribute("class", "");
  currElem.setAttribute("className", "");
  return true;
}

function rec_check(el,lvl) {
  switch(el.type) {
    case 'text':
      if(el.value.length == 0) {
        if (lvl == 0) colorRed(el.name);
        return false;
      }
      colorDefault(el.name);
      return true;

    case 'select-one':
      if(el.value.length == 0) {
        if (lvl == 0) colorRed(el.name);
        return false;
      }
      colorDefault(el.name);
      return true;

    case 'radio':
      if (el.checked == false) {
        if (lvl == 0) colorRed(el.name);
        return false;
      }
      colorDefault(el.name);
      return true;

    case 'checkbox':
      if (el.checked == false) {
        if (lvl == 0) colorRed(el.name);
        return false;
      }
      colorDefault(el.name);
      return true;

    case 'textarea':
      if (el.value.length == 0) {
        if (lvl == 0) colorRed(el.name);
        return false;
      }
      colorDefault(el.name);
      return true;
    default:
      if (typeof(el.length)) {
        lvl++;                        // Increase recursion level
        ret = false;
        for (i=0;i<el.length;i++) {
          if(rec_check(el[i],lvl) == true) ret = true;
        }
        if (ret == false) 
          colorRed(el[0].name);
        else 
          colorDefault(el[0].name);
        return ret;
      }
      return false;
  } 
}

function checkFieldValidity(el,expression,error) {
  _value  = el.value;
  _length = _value.length;
  if(expression()) {
    alert(error);
    window.setTimeout(function() { el.focus();}, 50);
    return false;
  }
  return true;
}

function isInteger(el,error) {
  if(!error) error='Please enter a numeric value';
  var expression = function() { return ((_length > 0) && (isNaN(parseInt(_value,10)))) }
  return checkFieldValidity(el,expression,error);
}
  
function isUrl(el,error) {
  if (!error) error='This is not a valid URL.';
  var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/
  var expression = function() { return ((_length > 0) && (regexp.test(_value) == false)) }
  return checkFieldValidity(el,expression,error);
}

function isEmail(el,error){
  if (!error) error = 'This is not a valid Email address'
  var regexp = /^.+@.+\..{2,6}$/
  var expression = function (){ return((_length > 0) && (regexp.test(_value) == false))}
  return checkFieldValidity(el,expression,error);
}

