/*
** VFORMS v1.0a
** Script para validacao facil de formularios
** Desenvolvido por Samuel Corradi - http://www.samuelcorradi.com.br
** Licenciado sob Creative Commons by-sa
** http://creativecommons.org/licenses/by-sa/2.5/br/
*/

/***************************************
** inicio definicao de mascaras para os campos
***************************************/

mascaras={
	"vMaskNumero":["§§§§§"]
}

/***************************************
** inicio dos codigos que fazem tudo funcionar
** nao eh necessario alterar nada a partir daqui
***************************************/

function showErros(er){
	var txterr="Por favor, corrija os seguintes erros:\n"
	for(var i=0;i<er.length;i++){
		txterr += " * " + $.trim(er[i][0].parentNode.innerHTML.replace(/<[^>]*>| *: */g,"")) + ": "+er[i][1]+"\n"
		er[i][0].parentNode.className+=" vErro"
	}
	alert(txterr)
}

function validaForm() {
	this.ferros=[]
	$(this).find("label")
		.removeClass("vErro")
		.each(function() {
		var vals=this.className.split(" ")
		for(var i=0;i<vals.length;i++)
			try {
				var fn=validadores[vals[i]];
				var inp=$(this).attr("for");
				inp=$("#"+inp).get()[0];
				if(!fn(inp.value,inp)) {
					$(this).parents("form")[0].ferros.push([inp,erros[vals[i]]])
				}
			} catch(e){}
	  })
	if(this.ferros.length>0) {
		showErros(this.ferros)
		return false
	}
}

function mascarar(campo, $evento) {
	var labelTarget = campo.getAttribute('id');
	lbl = $("[for="+labelTarget+"]").attr('class');
	var vals=lbl.split(" ");
	for(var j=0; j<vals.length; j++) {
		try {
			func = mascaras[vals[j]];
		} catch(e) {}
	}
	if(func) {
		mask = func[0];
		$tecla = $evento.which;
		if ($tecla == null) $tecla = $evento.keyCode;
		$teclasPermitidas = Array(0, 8, 13);
		for ($i=0; $i < $teclasPermitidas.length; $i++) {
			if ($tecla == $teclasPermitidas[$i]) return true;
		}
		string = campo.value;
		$i = string.length;
		if ($i < mask.length) {
			if (mask.charAt($i) == '§') {
				return ($tecla > 47 && $tecla < 58);
			} else {
				if (mask.charAt($i) == '!') {
					return true;
				}
				for (c = $i; c < mask.length; c++) {
					if (mask.charAt(c) != '§' && mask.charAt(c) != '!') {
						campo.value = campo.value + mask.charAt(c);
					} else if (mask.charAt(c) == '!') {
						return true;
					} else {
						return ($tecla > 47 && $tecla < 58);
					}
				}
			}
		} else return false;
	}
}

$(function() {
	$('form.vForms')
	.submit(validaForm)
	.find('input')
		.keypress( function(e) { return mascarar(this, e) } )
});

