// script by xrado(at)email(dot)si (2006)
// style: .fail { background: #FFAFAF; }

function validate(forma,atr) {
	atr = atr ? atr : 'valid';
	var send = true;
	var form = forma;
	var f,fl,vl,vll,op,opl,pat;
	for(f = 0, fl = form.length; f < fl; f++) {
		if(form[f].className.match('fail')) form[f].className = form[f].className.replace(/fail+/gi,'');
		if(form[f].type=='checkbox') form[f].parentNode.className = form[f].parentNode.className.replace(/fail+/gi,'');
		if(form[f].getAttribute(atr)) {
			var valid = form[f].getAttribute(atr).split(" ");
			for(var vl = 0, vll = valid.length; vl < vll; vl++) {
				var check = valid[vl].split("-");
				switch(check[0]) {
					case 'req': if(!form[f].value.length) { form[f].className +=' fail'; send = false; } break;
					case 'minlen': if(form[f].value.length < check[1]) { form[f].className +=' fail'; send = false; } break;
					case 'maxlen': if(form[f].value.length > check[1]) { form[f].className +=' fail'; send = false; } break;
					case 'len': if(form[f].value.length != check[1]) { form[f].className +=' fail'; send = false; } break;
					case 'max': if(parseFloat(form[f].value) > parseFloat(check[1])) { form[f].className +=' fail'; send = false; } break;
					case 'min': if(parseFloat(form[f].value) < parseFloat(check[1])) { form[f].className +=' fail'; send = false; } break;
					case 'num': pat = /^[0-9]*$/; if(form[f].value.length && !pat.test(form[f].value)) { form[f].className +=' fail'; send = false; } break;
					case 'phone': pat = /^[ 0-9]*$/; if(!pat.test(form[f].value)) { form[f].className +=' fail'; send = false; } break;
					case 'notnum': pat = /^[0-9]*$/; if(pat.test(form[f].value)) { form[f].className +=' fail'; send = false; } break;
					case 'nosp': if(form[f].value.match(' ')) { form[f].className +=' fail'; send = false; } break;
					case 'alp': pat = /^[a-zA-Z]*$/; if(form[f].value.length && !pat.test(form[f].value)) { form[f].className +=' fail'; send = false; } break;
					case 'alpnum': pat = /^[0-9a-zA-Z]*$/; if(form[f].value.length && !pat.test(form[f].value) ) { form[f].className +=' fail'; send = false; } break;
					case 'date': pat = /^(\d{1,2})\.(\d{1,2})\.(\d{4})$/; if(!pat.test(form[f].value) && form[f].value.length) { form[f].className +=' fail'; send = false; } break;
					case 'email': pat = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i; if(form[f].value.length && !pat.test(form[f].value)) { form[f].className +=' fail'; send = false; } break;
					case 'money': pat = /^[0-9.,-]*$/; if(!pat.test(form[f].value) || !form[f].value.length) { form[f].className +=' fail'; send = false; } break;
					case 'checked': if(!form[f].checked) { form[f].parentNode.className +=' fail'; send = false; } break;
					case 'selected': if(form[f].selectedIndex==0) { form[f].className +=' fail'; send = false; } break;
					case 'ip': pat = /^([0-9]{0,2})+\.([0-9]{0,2})+\.([0-9]{0,2})+\.([0-9]{0,2})+$/; if(!pat.test(form[f].value)) { form[f].className +=' fail'; send = false; } break;
					case 'domain': pat = /^[0-9a-zA-Z.-_]*$/; if(!pat.test(form[f].value) || !form[f].value.length) { form[f].className +=' fail'; send = false; } break;
					case 'size': if(!/^[0-9]*%$/.test(form[f].value) || !/^[0-9]*px$/.test(form[f].value)) { form[f].className +=' fail'; send = false; } break;
					case 'furl': pat = /^[a-zA-Z0-9-]*$/; if(!pat.test(form[f].value) || (form[f].value.length && form[f].value.match(' '))) { form[f].className +=' fail'; send = false; } break;
					case 'time': if(form[f].value.length && !/^[0-9:]*$/.test(form[f].value)) { form[f].className +=' fail'; send = false; } break;
				}	
			}
		}
	}
	return send;
}

