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() {
  		var theform = document.getElementById("theform");
  		
    	fV.addEvent(theform, 'submit', fV.checkValidSubmit, false);
    	
        theform.onsubmit = fV.checkSubmit; // Safari
        
        theform.validateSubmit = true;
	},
	
	
	
	
	
	
	checkValidSubmit: function(e) {
		
		var frm = window.event ? window.event.srcElement : e ? e.target : null;
    	if (!frm) return;
    	var errText = [];
    	var noSubmit=0;
    	var ckd;
    	var RadAry=new Array();
    	var GrpAry=new Array(); 
    	
    	for (var i = 0; i < frm.elements.length; i++) {
    	    	
      		if(frm.elements[i].type=="radio"){
      		    if(validationSet[frm.elements[i].name]['required']){
      			   RadAry[RadAry.length]=frm.elements[i];
      			}
      		}else{
      		    if (frm.elements[i].type=="checkbox"){
      		        if(validationSet[frm.elements[i].name]['required']){
      		            if(frm.elements[i].checked!=true){
      		               noSubmit=1;
      		               errText[errText.length] = validationSet[frm.elements[i].name]['error'];
      		            } 
      		        }
      		    }else{
      		        if (frm.elements[i].type=="select-one"){
      		            if(validationSet[frm.elements[i].name]['required']){
      		                if(frm.elements[i].value=="default"){
      		                    noSubmit=1;
      		                    errText[errText.length] = validationSet[frm.elements[i].name]['error'];
      		                }
      		            }
      		        }else{
          		        if (frm.elements[i].name && validationSet[frm.elements[i].name]) {
          			        var failedE = fV.handleValidity(frm.elements[i]);
      	    		        if (failedE) {
      					        noSubmit=1;
      		    		        errText[errText.length] = validationSet[failedE.name]['error'];    
      					    }
      					}      					
      				}
      			}
      		}
      	}
      	
      	if(RadAry.length!=0){
      	GrpAry=new Array();
      	GrpAry[0]=new Array();
      	for (i2=0;i2<RadAry.length;i2++){ 
      		GrpAry[GrpAry.length-1][GrpAry[GrpAry.length-1].length]=RadAry[i2];
      		if (RadAry[i2+1]&&RadAry[i2+1].name!=RadAry[i2].name){ 
      			GrpAry[GrpAry.length]=new Array(); 
      		}
      	}
      	for (i3=0;i3<GrpAry.length;i3++){ 
  			ckd=1; 
  			for (i4=0;i4<GrpAry[i3].length;i4++){ 
   				if (GrpAry[i3][i4].checked==true){ 
    				ckd=0 
   				} 
  			} 
  			if (ckd){ 
  				noSubmit=1;
   				errText[errText.length]=validationSet[GrpAry[i3][0].name]['error']; 
  			} 
		} 
		}
      	
      	if(noSubmit==1){
      		if(document.getElementById("errors")){
      			var errMsg='Please fix the following errors and resubmit:<br />' + errText.join('<br />');
      			document.getElementById("errors").innerHTML=errMsg;
      			document.getElementById("errors").style.display="block";
      		}else{
      			var errMsg='Please fix the following errors and resubmit:\n' + errText.join('\n');
      			alert(errMsg);
      		}
      		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() {
    return this.submitAllowed;
  },	
  
    handleValidity: function(field) {
    	if (!field.value) {
      		if(validationSet[field.name]['required']==true){
      		    return field;
      		}else{
      		    return null;
      		}
    	}
    	if (field.value==validationSet[field.name]['default']){
    	    if(validationSet[field.name]['required']==true){
    	        return field;
    	    }else{
    	        return null;
    	    }
    	}
    	var re = validationSet[field.name]['regexp'];
    	if (!field.value.match(re)) {
      		return field;
    	} else {
      		return null;
    	}
  	}
}

fV.addEvent(window, 'load', fV.init, false);