// USDM form validation


addEvent(window, 'load', function() {
 var input, textarea, sel;

 var inputs = document.getElementsByTagName('input');
 for (var i = 0; (input = inputs[i]); i++) {
   addEvent(input, 'focus', oninputfocus);
   addEvent(input, 'blur', oninputblur);
 }
 var textareas = document.getElementsByTagName('textarea');
 for (var i = 0; (textarea = textareas[i]); i++) {
   addEvent(textarea, 'focus', oninputfocus);
   addEvent(textarea, 'blur', oninputblur);
 }
 var sels = document.getElementsByTagName('select');
 for (var i = 0; (sel = sels[i]); i++) {
   addEvent(sel, 'focus', oninputfocus);
   addEvent(sel, 'blur', oninputblur);
 }
 
});


function checkPhone(id) {
 var phone = document.getElementById(id);
 var label = getLabelForId(phone);
 var digits = phone.value.replace(/[^0-9]/ig, '');
 if (!digits) {
   return;
 }
 if (digits.length == 10) {
   phone.value = '(' + digits.substring(0, 3) + ') ' +  
     digits.substring(3, 6) + '-' +  
     digits.substring(6, 10);
 } else {
   phone.value = digits;
 }
}

function checkCountry(id) {
 var country = document.getElementById(id);
 var ucase = country.value.toUpperCase();
 if ((ucase == 'US')||(ucase == 'USA')) {
   country.value = 'United States';  
 } else {
   country.value = country.value;
 }
}

function checkURI(id) {
 var address = document.getElementById(id);
 var lcase = address.value.toLowerCase();
 var start = lcase.indexOf('//'); 
 if(lcase != '') {
	 if (start != -1) {
		 address.value = 'http://' + lcase.substring(start+2);
	 } else {
		 address.value = 'http://' + lcase;
	 } 
 }
 
}


function getLabelForId(id) {
/* find the label */
 var label, labels = document.getElementsByTagName('label');
 for (var i = 0; (label = labels[i]); i++) {
   if (label.htmlFor == id) {
     return label;
   }
 }
 return false;
}


function checkRequired(id) {
/* check if required has something in it */
 var formfield = document.getElementById(id);
 var label = getLabelForId(id);
 if (formfield.value.length == 0) {
   label.className = 'problem';
 } else {
   label.className = 'completed';
 }
}

var nbsp = 160; 
var node_text = 3; 
var emptyString = /^\s*$/

function trim(str)
{
  return str.replace(/^\s+|\s+$/g, '')
};


function msg(id, fld, message) //field and message string
{
  var dispmessage;
  var label = getLabelForId(id);
  var elem = document.getElementById(fld);

  if (emptyString.test(message)){ 
    dispmessage = String.fromCharCode(nbsp); //send a blank space if no error
	elem.style.display = 'none'; // remove required symbol
	label.className = 'completed';
  }else if (message == "req"){
	dispmessage = String.fromCharCode(nbsp); //send blank space
	elem.style.display = 'inline'; //keep symbol visible
	label.className = 'problem';
  }else{  
    dispmessage = message; //send the warning message
	elem.style.display = 'inline'; //keep symbol
	label.className = 'problem';
  }  
  elem.firstChild.nodeValue = dispmessage; // display the message
};


var proceed = 2;  

function commonCheck(vfld, ifld, reqd)//value, field, required(t/f)
{
  if (!document.getElementById) 
    return true;  
  var elem = document.getElementById(ifld);
  if (!elem.firstChild)
    return true; 
  if (elem.firstChild.nodeType != node_text)
    return true; 

  if (emptyString.test(vfld.value)) {
    if (reqd) {
      msg (vfld, ifld, "req"); //if required start message  
      return false;
    }
    else {
      msg (vfld, ifld, "");
      return true;  
    }
  }
  return proceed;
};


function validatePresent(vfld, ifld)
{
  var stat = commonCheck (vfld, ifld, true);
  if (stat != proceed) return stat;

  msg (vfld, ifld, "");  
  return true;
};


function validateEmail  (id, vfld, ifld, reqd) //validate email address
{
  var stat = commonCheck (vfld, ifld, reqd);
  if (stat != proceed) return stat;

  var tfld = trim(vfld.value); 
  var email = /^[^@]+@[^@.]+\.[^@]*\w\w$/ //simple check
  if (!email.test(tfld)) {
    msg (id, ifld, "Appears to be invalid");
    return false;
  }

  var email2 = /^[A-Za-z][\w.-]+@\w[\w.-]+\.[\w.-]*[A-Za-z][A-Za-z]$/ //format check
  if (!email2.test(tfld)) 
    msg (id, ifld, "Unusual email address");
  else
    msg (id, ifld, "");
  return true;
};


function validatePhone (id, vfld, ifld, reqd)
{
  var stat = commonCheck (vfld, ifld, reqd);
  if (stat != proceed) return stat;

  var tfld = trim(vfld.value);
  var telnr = /^\+?[0-9 ()-]+[0-9]$/
  if (!telnr.test(tfld)) {
    msg (id, ifld, "You may use digits, spaces, (), - and leading +");
    return false;
  }

  var numdigits = 0;
  for (var j=0; j<tfld.length; j++)
    if (tfld.charAt(j)>='0' && tfld.charAt(j)<='9') numdigits++;

  if (numdigits<6) {
    msg (id, ifld, "Too short");
    return false;
  }

  if (numdigits>14)
    msg (id, ifld, "Pretty long number, check if correct");
  else { 
    if (numdigits<10)
      msg (id, ifld, "Only " + numdigits + " digits");
    else
      msg (id, ifld, "");
  }
  return true;
};


function addEvent(obj, evType, fn){
 if (obj.addEventListener){
    obj.addEventListener(evType, fn, true);
    return true;
 } else if (obj.attachEvent){
    var r = obj.attachEvent("on"+evType, fn);
    return r;
 } else {
    return false;
 }
}

function oninputfocus(e) {
 /* find the source of the event */
 if (typeof e == 'undefined') {
   var e = window.event;
 }
 var source;
 if (typeof e.target != 'undefined') {
    source = e.target;
 } else if (typeof e.srcElement != 'undefined') {
    source = e.srcElement;
 } else {
   return;
 }
 source.style.border='1px solid #000';
}


function oninputblur(e) {
 /* find the source of the event */
 if (typeof e == 'undefined') {
   var e = window.event;
 }
 var source;
 if (typeof e.target != 'undefined') {
    source = e.target;
 } else if (typeof e.srcElement != 'undefined') {
    source = e.srcElement;
 } else {
   return;
 }
 source.style.border='1px solid #ccc';
}