function validForm(frm) {
	
	var tags = new Array('input','textarea','select');
	for (var k=0; k<tags.length; k++){
		if (typeof(frm) != 'undefined') 
			var sfElems = frm.getElementsByTagName(tags[k]);
		else 
			var sfElems = document.getElementsByTagName(tags[k]);
		
		for (var i = 0; i < sfElems.length; i++) {
			if (sfElems[i].value == "" && sfElems[i].getAttribute('obg')=="true") {
				alert(sfElems[i].getAttribute('err'));
				sfElems[i].focus();
				return(false);
			}
			else if (sfElems[i].getAttribute('obg')=="check" && sfElems[i].checked == false) {
				alert(sfElems[i].getAttribute('err'));
				sfElems[i].focus();
				return(false);
			}
			
			switch(sfElems[i].getAttribute("special")){
				
				case null : isValid = true;
							break;
				case "email" : 	isValid = (sfElems[i].getAttribute("obg") != "true" && sfElems[i].value == '') ? true : validMail(sfElems[i].value);
								oComments = "\nEx.: nom@site.com";
								break;
				case "date" :  	isValid = (sfElems[i].getAttribute("obg") != "true" && sfElems[i].value == '') ? true :  validDate(sfElems[i].value);
								oComments = "\nEx.: 1982-03-25";
								break;
				case "datefr" :  	isValid = (sfElems[i].getAttribute("obg") != "true" && sfElems[i].value == '') ? true :  validDateFr(sfElems[i].value);
								oComments = "\nEx.: 25-03-1982";
								break;
				case "nospecial" :  isValid = (sfElems[i].getAttribute("obg") != "true" && sfElems[i].value == '') ? true :  validSpecial(sfElems[i].value);
									oComments = "\nEx.: a-z, A-Z, 0-9";
									break;
				case "numeric" :  	isValid = (sfElems[i].getAttribute("obg") != "true" && sfElems[i].value == '') ? true :  validNumeric(sfElems[i].value);
									oComments = '';
									if (isValid && sfElems[i].getAttribute('minval') != null &&  parseFloat(sfElems[i].value) < parseFloat(sfElems[i].getAttribute('minval'))) {
										isValid=false;	
									}
									if (isValid && sfElems[i].getAttribute('maxval') != null &&  parseFloat(sfElems[i].value) > parseFloat(sfElems[i].getAttribute('maxval'))) {
										isValid=false;	
									}
									
									break;
				case "mustequal" : 
								oComments = '';
								if (sfElems[i].value != document.getElementById(sfElems[i].getAttribute('depend_id')).value) isValid=false;
								else isValid=true;
								break;	
				case "tel" : 	isValid = (sfElems[i].getAttribute("obg") != "true" && sfElems[i].value == '') ? true :  validTel(sfElems[i].value);
								oComments = "\nEx.: 819-379-8614";
								break;
				case "codepostal" : isValid = (sfElems[i].getAttribute("obg") != "true" && sfElems[i].value == '') ? true :  validCP(sfElems[i].value);
								oComments = "\nEx.: G8V 1Z2";
								break;
				case "notzero" : isValid = (sfElems[i].value == 0) ? false : true;
								
								oComments = "";
								break;
					
			}
			if(!isValid){
				alert(sfElems[i].getAttribute("errorspecial")+oComments);
				sfElems[i].focus();
				return false;
			}
			if (sfElems[i].getAttribute("minlength") != null && sfElems[i].value.length < sfElems[i].getAttribute("minlength")) {
				alert(sfElems[i].getAttribute("errorlength"));
				sfElems[i].focus();
				return false;
			}
			
		}
	}
	return(true);
}

function validDate(dateaaaammjj) {
	var dt=dateaaaammjj.split("-"),date=new Date(dt[0],dt[1]-1,dt[2]);
	return date.getDate()==dt[2]&&date.getMonth()+1==dt[1]&&date.getFullYear()==dt[0]?date:false;
}

function validDateFr(dateaaaammjj) {
	var dt=dateaaaammjj.split("-"),date=new Date(dt[2],dt[1]-1,dt[0]);
	return date.getDate()==dt[2]&&date.getMonth()+1==dt[1]&&date.getFullYear()==dt[0]?date:false;
}

function validSpecial(fStr){
	myReg = new RegExp("[A-Za-z0-9]+");
	if(myReg.exec(fStr)!=fStr){return false};
	return true;
}

function validCP(fStr){
	myReg = /^[A-Z][0-9][A-Z] [0-9][A-Z][0-9]$/;
	if(myReg.exec(fStr)!=fStr){return false};
	return true;
}

function validNumeric(fStr){
	myReg = new RegExp("[0-9.]+");
	if(myReg.exec(fStr)!=fStr){return false};
	return true;
}


function checkDependency(obg) {
	if (obg.getAttribute('depend')!="")
	{
		var sfElems = document.getElementsByTagName('input');
		for (var i = 0; i < sfElems.length; i++) {
			if (obg.getAttribute('depend')== sfElems[i].name && obg.value=="" && sfElems[i].checked==true && sfElems[i].value=="1") {
				//alert(obg.getAttribute('err'));
				return(false);
			}
		}
		
	}
	return(true);
}

function validMail(email) {
	var result = false
	var theStr = new String(email)
	var index = theStr.indexOf("@");
	if (index > 0) {
		var pindex = theStr.indexOf(".",index);
		if ((pindex > index+1) && (theStr.length > pindex+1)) result = true;
	}
	return result;
}

function validTel(val) {
	if (val.match(/\(?\d{3}\)?([-\/\.])\d{3}\1\d{4}/) || val.match(/\d{10}/)) return true;
}