// script by xrado(at)email(dot)si (2006)
// style: .fail { background: #FFAFAF; }

function validate(forma,att) {
	var attribute = att ? att : 'valid';
	var send = true;
	$(forma).getElements('input,select,textarea').each(function(el){
		if(el.hasClass('fail')) el.removeClass('fail');
		if(el.get('type')=='checkbox' && el.getParent()) el.getParent().removeClass('fail');
		if(el.get(attribute)) {
			el.get(attribute).split(" ").each(function(val){
				var check = val.split("-");
				switch(check[0]) {
					case 'req': if(!el.get('value').length) { el.addClass('fail'); send = false; } break;
					case 'minlen': if(el.get('value').length < check[1]) { el.addClass('fail'); send = false; } break;
					case 'maxlen': if(el.get('value').length > check[1]) { el.addClass('fail'); send = false; } break;
					case 'len': if(el.get('value').length != check[1]) { el.addClass('fail'); send = false; } break;
					case 'max': if(parseFloat(el.get('value')) > parseFloat(check[1])) { el.addClass('fail'); send = false; } break;
					case 'min': if(parseFloat(el.get('value')) < parseFloat(check[1])) { el.addClass('fail'); send = false; } break;
					case 'int': pat = /^[0-9]*$/; if(el.get('value').length && !pat.test(el.get('value'))) { el.addClass('fail'); send = false; } break;
					case 'phone': pat = /^[ 0-9\-\+]*$/; if(!pat.test(el.get('value'))) { el.addClass('fail'); send = false; } break;
					case 'notnum': pat = /^[0-9]*$/; if(pat.test(el.get('value'))) { el.addClass('fail'); send = false; } break;
					case 'nosp': if(el.get('value').match(' ')) { el.addClass('fail'); send = false; } break;
					case 'alp': pat = /^[a-zA-Z]*$/; if(el.get('value').length && !pat.test(el.get('value'))) { el.addClass('fail'); send = false; } break;
					case 'alpnum': pat = /^[0-9a-zA-Z]*$/; if(el.get('value').length && !pat.test(el.get('value')) ) { el.addClass('fail'); send = false; } break;
					case 'date': pat = /^(\d{1,2})\.(\d{1,2})\.(\d{4})$/; if(!pat.test(el.get('value')) && el.get('value').length) { el.addClass('fail'); send = false; } break;
					case 'email': pat = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i; if(el.get('value').length && !pat.test(el.get('value'))) { el.addClass('fail'); send = false; } break;
					case 'numeric': pat = /^[0-9.,-]*$/; if(el.get('value').length && !pat.test(el.get('value'))) { el.addClass('fail'); send = false; } break;
					case 'checked': if(!el.checked) { el.getParent().addClass('fail'); send = false; } break;
					case 'selected': if(el.selectedIndex==0) { el.addClass('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(el.get('value'))) { el.addClass('fail'); send = false; } break;
					case 'domain': if(el.get('value').length && !/^[0-9a-zA-Z.-_]*$/.test(el.get('value'))) { el.addClass('fail'); send = false; } break;
					case 'size': if(!/^[0-9]*%$/.test(el.get('value')) || !/^[0-9]*px$/.test(el.get('value'))) { el.addClass('fail'); send = false; } break;
					case 'furl': pat = /^[a-zA-Z0-9\-]*$/; if(!pat.test(el.get('value')) || (el.get('value').length && el.get('value').match(' '))) { el.addClass('fail'); send = false; } break;
					case 'time': if(el.get('value').length && !/^[0-9:]*$/.test(el.get('value'))) { el.addClass('fail'); send = false; } break;
				}
			});
		}
	});
	return send;
}

