
function check_form(form) {
  var eles = form.getElementsByTagName('input');
  var btn = false;
  for(var i=0,ele=null;i<eles.length,ele=eles[i];i++) {
    if (ele.type == 'submit') {
      btn = ele;
      btn.disabled = true;
      break;
    }
  }
  var err = [];
  for (var i=0, x=null;i<REQ_FLDS.length,x=REQ_FLDS[i];i++) {
    try {
      if (form[x.name].value.length < 1) {
        err.push( "'" + x.caption + "' cannot be blank.");
      }
      if (x.type=='phone') _validatePhone(form[x.name].value);
      if (x.type=='email') _validateEmail(form[x.name].value);
    } catch(e) {
      alert( 'Error while checking form field: ' + x.name + '\n' + e);
      if (btn) btn.disabled = false;
      return false;
    }
  }
  if (err.length > 0) {
    alert("Errors have occured during the process of your form!\n"
        +"Please make the following corrections:\n\n"
        +'* ' + err.join('\n\n* '));
    if (btn) btn.disabled = false;
    return false;
  }
  // ensure captcha is well set
  var fld1 = document.getElementById('imgverify'), fld0 = document.getElementById('arverify');
  if (fld1 && fld0) fld1.value = fld0.value;
  // remove pretty stuff so blank is blank
  pretty.clean();
  if (btn) btn.disabled = false;
  return true;

  function _validatePhone(s) {
    if (!/^\d\d\d\-\d\d\d-\d\d\d\d/.test(s)) {
      err.push( "'" + s + "' is not a valid phone number.\n"
        + 'Please format the phone number as: 123-456-7890.\n'
        + 'You may append an optional extension number.');
    }
  }
  function _validateEmail(s) {
    if (!/[-.+a-zA-Z0-9]+@[-a-zA-Z0-9]+(\.[a-zA-Z0-9])+/.test(s)) {
      err.push( "'" + s + "' is not a valid email address.");
    }
  }
}

var iTries = 5;
function reloadCaptcha() {
  var eleImg = document.getElementById('vimg');
  var eleBtn = document.getElementById('captchaBtn');
  if (!eleImg || !eleBtn) return;
  iTries--;
  eleImg.setAttribute('src',
    eleImg.getAttribute('src') + '&cnt=' + iTries);
  eleBtn.innerHTML =
    'Get Different Image [' + iTries
    + (iTries>1 ? ' tries' : ' try')
    + ' remaining]';
  eleBtn.disabled = !iTries;
}

var pretty = {
  doAll: function(func, tag, type) {
    var eles = document.getElementsByTagName(tag);
    for (var i=0,ele=null; i<eles.length, ele=eles[i]; i++) {
      if (type && ele.type!=type) continue;
      func(ele);
    }
  },
  init: function() {
    var C = 'not-visited';
    pretty.doAll( _init, 'input', 'text');
    pretty.doAll( _init, 'textarea');

    function _init(ele) {
      var s = ele.getAttribute('orig');
      if (!s) return;
      ele.value = s;
      ele.className = ele.className + ' ' + C;
      ele.origClass = ele.className;
      ele.onfocus = function() {
        if (this.className.indexOf(C) > -1) {
          this.value = '';
          this.className = this.className.replace(C, '');
        }
      }
      ele.onblur = function() {
       if (this.value=='') {
          this.value = this.getAttribute('orig');
          this.className = this.origClass;
        }
      }
    }
  },
  clean: function() {
    pretty.doAll( _clean, 'input', 'text');
    pretty.doAll( _clean, 'textarea');

    function _clean(ele) {
      if (ele.getAttribute('orig')==ele.value) {
          ele.value = '';
      }
    }
  },
  setup: function() {
    var prev = window.onload;
    if (prev) {
      window.onload = function() {
        prev();
        pretty.init();
      }
    } else {
      window.onload = function() {pretty.init()}
    }
  }
}
pretty.setup();

