
var msg;

function evento(e)
{
	if(typeof(e)=='undefined')var e=window.event;
    var source=e.target?e.target:e.srcElement;
    if(source.nodeType==3)source=source.parentNode;
	return source;
}
function trim(string){
	while(""+string.charAt(string.length-1)==" ") string=string.substring(0,string.length-1);
	return string;
}
function verifica(e)
{
	var form 	= evento(e)
	var tag		= form.getElementsByTagName("*")
	var tmTag	= tag.length
	var retorno = true
	msg = "  Ocorreu erro: \n"
	msg +="--------------------------------------------------------\n"

	for(i=0;i<tmTag;i++)
	{
		if(tag[i].title != 'undefined' && tag[i].title != null && tag[i].title != "")
		{
			switch(tag[i].tagName.toLowerCase())
			{
				case "textarea": case "select":
					if(trim(tag[i].value).length == 0)
					{
						msg += " * ' " + tag[i].title.toUpperCase() + " ' não preenchido.\n";
						retorno = false;
					}
					break;

				case "input":
					switch(tag[i].type.toLowerCase())
					{
						case "radio":

							if(msg.indexOf(" * ' " + tag[i].title.toUpperCase() + " ' não preenchido.\n") < 0)
							{
								var ret_radio = true;
								for(f=0 ; f < tmTag ; f++)
								{
									if(tag[i].type.toLowerCase() == "radio")
									{
										if(tag[f].name == tag[i].name && tag[f].checked)
										{
											ret_radio = false;
											continue;
										}
									}
								}
								if(ret_radio)
								{
									msg += " * ' " + tag[i].title.toUpperCase() + " ' não preenchido.\n";
									retorno = false;
								}
								break;
							}

						case "checkbox":

							if(!tag[i].checked)
							{
								msg += " * ' " + tag[i].title.toUpperCase() + " ' não preenchido.\n";
								retorno = false;
							}
							break;

						default:

							if(trim(tag[i].value).length == 0)
							{
								msg += " * ' " + tag[i].title.toUpperCase() + " ' não preenchido.\n";
								retorno = false;
							}
							else
							{
								switch(tag[i].title.toLowerCase())
								{
									case "e-mail":
										ret = validaEmail(tag[i].value);
										if(!ret) retorno = false;
									break;
									case "cpf":
										ret = Verifica_CPF(tag[i].value);
										if(!ret) retorno = false;
									break;
									case "data":
										ret = vdata(tag[i].value);
										if(!ret) retorno = false;
          							break;
								}
							}
						break;
					}
				break;
			}
		}
	}
	msg +="--------------------------------------------------------\n";
	msg +=" Trabalho Espetacular - Preencha e envie novamente. "

	if(!retorno) alert(msg)

	return retorno
}

function validaEmail(email)
{
	emailRE = new RegExp("^([a-zA-Z0-9(.)(_)]{3,})+@+([a-zA-Z0-9(.)(_)])+.")
  	if(emailRE.test(email)) return true
	else{
		msg += " * E-Mail '" + email + "' invalido. \n";
		return false
	}
}


function Verifica_CPF(CPF)
{
    // Aqui começa a checagem do CPF
    var POSICAO, I, SOMA, DV, DV_INFORMADO;
    var DIGITO = new Array(10);
    DV_INFORMADO = CPF.substr(9, 2); // Retira os dois últimos dígitos do número informado

    // Desemembra o número do CPF na array DIGITO
    for (I=0; I<=8; I++) {
      DIGITO[I] = CPF.substr( I, 1);
    }

    // Calcula o valor do 10º dígito da verificação
    POSICAO = 10;
    SOMA = 0;
       for (I=0; I<=8; I++) {
          SOMA = SOMA + DIGITO[I] * POSICAO;
          POSICAO = POSICAO - 1;
       }
    DIGITO[9] = SOMA % 11;
       if (DIGITO[9] < 2) {
            DIGITO[9] = 0;
    }
       else{
           DIGITO[9] = 11 - DIGITO[9];
    }

    // Calcula o valor do 11º dígito da verificação
    POSICAO = 11;
    SOMA = 0;
       for (I=0; I<=9; I++) {
          SOMA = SOMA + DIGITO[I] * POSICAO;
          POSICAO = POSICAO - 1;
       }
    DIGITO[10] = SOMA % 11;
       if (DIGITO[10] < 2) {
            DIGITO[10] = 0;
       }
       else {
            DIGITO[10] = 11 - DIGITO[10];
       }

    // Verifica se os valores dos dígitos verificadores conferem
    DV = DIGITO[9] * 10 + DIGITO[10];
       if (DV != DV_INFORMADO) {
		msg += " * CPF '" + CPF + "' invalido. \n";
		return false
       }
       return true;
}



function vdata(data){
	var ret = true;

	if(data.length == 10)
	{
		var dt  = data.split("/")
		var dia = dt[0];
		var mes = dt[1];
		var ano = dt[2];

		//verifica dia
		if( ( dia < 1 ) || ( dia < 1 || dia > 30) && ( mes == 4 || mes == 6 || mes == 9 || mes == 11) || ( dia > 31 ) )
			ret = false;
		//verfica o mes
		if( mes < 1 || mes > 12 )
			ret = false;
		//verfica o ano
		if( mes == 2 && ( dia < 1 || dia > 29 || ( dia > 28 && ( parseInt( ano / 4 ) != ano / 4 ) ) ) )
			ret = false;

		if(!ret) msg += " * '"+data+"' Data Invalida.\n";
	}
	else
	{
		ret = false;
		msg += " * Data incompleta.\n";

	}
	return ret;
}