/*
Generic Validation DOB Version 1.1
Checked against IE 5*, IE 5.5*, IE 6*, IE 7*, Mozilla*, NS6*, Safari*
*/

var fV = {
  addEvent: function(elm, evType, fn, useCapture) {
    // cross-browser event handling for IE5+, NS6 and Mozilla 
    // By Scott Andrew
    if (elm.addEventListener) {
      elm.addEventListener(evType, fn, useCapture);
      return true;
    } else if (elm.attachEvent) { 
      var r = elm.attachEvent('on' + evType, fn);
      return r;
    } else {
      elm['on' + evType] = fn; 
    }
  },

  init: function() {
    for (var i in validationSet) {
      if (document.getElementsByName(i)) {
        var formField = document.getElementsByName(i)[0];
        fV.addEvent(formField, 'blur', fV.checkValid, false);
        fV.addEvent(formField, 'focus', fV.fieldEdit, false);
 		 
 		var errDisplay = document.getElementById('error_' + formField.name);

       // if (!formField.form.validateSubmit) {
      //    fV.addEvent(formField.form, 'submit', fV.checkValidSubmit, false);
      //    formField.form.onsubmit = fV.checkSubmit; // Safari
      //    formField.form.validateSubmit = true;
      //  }
        
	    if(validationSet[formField.name]['required']&&!formField.value) {
 		  var errIcon = document.getElementById('icon_' + formField.name);
		  errIcon.innerHTML = "Required";
		  errIcon.parentNode.className = "required";
		}   
	    if(errDisplay.innerHTML) {
 		  var errIcon = document.getElementById('icon_' + formField.name);
 		  errDisplay.style.display = "block";
		}   

	  }
    }
  },

  checkValidSubmit: function(e) {
    var frm = window.event ? window.event.srcElement : e ? e.target : null;
    if (!frm) return;
    var errText = [];

    for (var i = 0; i < frm.elements.length; i++) {
      if (frm.elements[i].name && validationSet[frm.elements[i].name]) {

        var failedE = fV.handleValidity(frm.elements[i]);
        var requiredE = fV.handleRequired(frm.elements[i]);

        var errDisplay = document.getElementById('error_' + frm.elements[i].name);
        if (failedE && errDisplay) {
          errDisplay.innerHTML = validationSet[failedE.name]['error'];
 		  errDisplay.style.display = "block";
       }
        if (!failedE && errDisplay) {
	        errDisplay.innerHTML = '';
 		  errDisplay.style.display = "none";
        }

        if (failedE) {
          var labels = document.getElementsByTagName('label');
          errText[errText.length] = validationSet[failedE.name]['error'];
          for (var j = 0; j < labels.length; j++) {
            if (labels[j].htmlFor == failedE.id) {
              errText[errText.length - 1] +=
                  ' (field \'' + labels[j].firstChild.nodeValue + '\')';
            }
          }
       } else if (requiredE) {
          var labels = document.getElementsByTagName('label');
          errText[errText.length] = validationSet[requiredE.name]['reqerror'];
          for (var j = 0; j < labels.length; j++) {
            if (labels[j].htmlFor == requiredE.id) {
              errText[errText.length - 1] +=
                  ' (field \'' + labels[j].firstChild.nodeValue + '\')';
            }
          }
        }
      }  /* end 'if' */
    } /* end 'for' */
    
    if (errText.length > 0) {
      alert('Please fix the following errors and resubmit:\n' +
          errText.join('\n'));
      frm.submitAllowed = false;
      if (e && e.stopPropagation && e.preventDefault) {
        e.stopPropagation();
        e.preventDefault();
      }
      if (window.event) {
        window.event.cancelBubble = true;
        window.event.returnValue = false;
        return false;
      }
    } else {
      frm.submitAllowed = true;
    }
  },

  checkSubmit: function() {
    if (this.attachEvent) return true;
    return this.submitAllowed;
  },
  
  checkValid: function(e) {
    var target = window.event ? window.event.srcElement : e ? e.target : null;
    if (!target) return;

    var failedE = fV.handleValidity(target);
    var requiredE = fV.handleRequired(target);
    var emptyF = fV.handleEmpty(target);

    var errIcon = document.getElementById('icon_' + target.name);
    var errDisplay = document.getElementById('error_' + target.name);
    
    if (failedE && errDisplay) {
      errIcon.innerHTML = "Invalid";
	  errIcon.parentNode.className = "invalid";
      errDisplay.innerHTML = validationSet[failedE.name]['error'];
  	 errDisplay.style.display = 'block';
	}
    if (failedE && !errDisplay) {
      alert(validationSet[failedE.name]['error']);
    }
    if (!failedE && errDisplay) {
    
		if(!emptyF){
			if(requiredE) {
			    errIcon.innerHTML = "Required";
			    errIcon.parentNode.className = "required";
			    errDisplay.innerHTML = '';
				 errDisplay.style.display = 'none';
			   //  errDisplay.innerHTML = validationSet[requiredE.name]['reqerror'];
			}else{
			    errIcon.innerHTML = "";
			    errIcon.parentNode.className = "";
			    errDisplay.innerHTML = '';
				errDisplay.style.display = 'none';
			}
	  	} else {
		  	 errIcon.innerHTML = 'Complete';
			 errIcon.parentNode.className = "complete";
		     errDisplay.innerHTML = '';     
			 errDisplay.style.display = 'none';
		}	     
    }
  },

  fieldEdit: function(e) {
    var target = window.event ? window.event.srcElement : e ? e.target : null;
    if (!target) return;

    var errIcon = document.getElementById('icon_' + target.name);

    errIcon.innerHTML = "Focus";
	errIcon.parentNode.className = "focus";
  },


  handleValidity: function(field) {
    if (!field.value) {
      return null;
    }
    var re = validationSet[field.name]['regexp'];
    if (!field.value.match(re)) {
      return field;
    } else {
      return null;
    }
  },
  
  handleRequired: function(field) {
    if (!field.value&&validationSet[field.name]['required']) {
      return field;
    } else {
      return null;
    }
  },

  handleEmpty: function(field) {
    return field.value;
  }
}

fV.addEvent(window, 'load', fV.init, false);

