String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.ltrim = function() {
	return this.replace(/^\s+/,"");
}
String.prototype.rtrim = function() {
	return this.replace(/\s+$/,"");
}

var frmValidation = {
  addEvent: function(elm, evType, fn, useCapture) {
    // cross-browser event handling for IE5+, NS6 and Mozilla 
    // 
    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];
        frmValidation.addEvent(formField, 'blur', frmValidation.checkValid, false);

        if (!formField.form.validateSubmit) {
          frmValidation.addEvent(formField.form, 'submit', frmValidation.checkValidSubmit, false);
          formField.form.onsubmit = frmValidation.checkSubmit; // Safari
          formField.form.validateSubmit = true;
        }
      }
    }
  },

  checkValidSubmit: function(e) {
    var frm = window.event ? window.event.srcElement : e ? e.target : null;
    if (!frm) return;
    var errText = [];
	//check requiredSet to see if the fields should not be empty	  
	 	for(var i=0; i<requiredSet.length;i++){
			var oRequired=document.getElementById(requiredSet[i]);
		    if (oRequired.value.length == 0){				  
			   errText[errText.length] = oRequired.name +' can\'t be empty ';	   
			   oRequired.focus();			 
			}
		 }	 
		
		 
	//validate the fields that is not empty	 
    for (var i = 0; i < frm.elements.length; i++) {	
      if (frm.elements[i].name && validationSet[frm.elements[i].name]) {
        
        var failedE = frmValidation.handleValidity(frm.elements[i]);		
      
        var errDisplay = document.getElementById('error_' + frm.elements[i].name);

        if (failedE && errDisplay) {
          errDisplay.innerHTML =
              validationSet[failedE.name]['error'];
        }
        if (!failedE && errDisplay) {
           errDisplay.innerHTML = '';
        }

        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) {
			  fieldName = labels[j].childNodes[1].firstChild.nodeValue;
			  fieldName = fieldName.replace(/\*/, "");
              errText[errText.length - 1] +=
                  ' (field \'' + fieldName + '\')';
            }
          }
        }
      }  /* 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 = frmValidation.handleValidity(target);
	  //var required = frmValidation.checkRequired(target);
		//if (required){
		  //alert(required.name+" is required");
		  //required.focus();
		//}
    var errDisplay = document.getElementById('error_' + target.name);

    if (failedE && errDisplay) {
      errDisplay.innerHTML = validationSet[failedE.name]['error'];
      failedE.focus();
    }
    if (failedE && !errDisplay) {
      alert(validationSet[failedE.name]['error']);
    }
    if (!failedE && errDisplay) {
      errDisplay.innerHTML = '';
    }
  },

  handleValidity: function(field) {
    if (!field.value) {
      return null;
    }	

    var re = validationSet[field.name]['regexp'];
	
    if (!field.value.trim().match(re)) {
      return field;
    } else {
      return null;
    }
  }
}
frmValidation.addEvent(window, 'load', frmValidation.init, false);

