function ValidaForm(objForm) {

	var form = objForm;
	var lista_erro = '';
	var mascara = false;
	var obrigatorio = false;
	
	//se achou o form
	if (typeof(form) == 'object') {
		
		//se achou os elementos
		if (form.elements.length > 0) {
			
			//percorre os objetos realizando as validaçoes
			for (x=0 ; x<form.elements.length ; x++) {
				
				if (typeof(form.elements[x].attributes['mascara']) == 'object') {
					mascara = form.elements[x].attributes['mascara'].value;
				}
				else {
					mascara = '';
				}
				
				
				if (typeof(form.elements[x].attributes['obrigatorio']) == 'object') {
					if (form.elements[x].attributes['obrigatorio'].value == "SIM") {
						obrigatorio = true;
					}
					else {
						obrigatorio = false;
					}
				}
				else {
					obrigatorio = false;
				}
				
				
				//se nao for o controle do viewstate do asp.net
				if (form.elements[x].name != '__VIEWSTATE') {
					
					if (form.elements[x].type == 'text') {
						
						//se o campo é de preenchimento obrigatorio
						if (obrigatorio) {
							//verifica o preenchimento do campo
							if ((mascara == 'CPF') && (!valida_cpf(form.elements[x].value))) {
								lista_erro += '<li><span onclick="document.forms[1].' + form.elements[x].name + '.focus();" style="cursor:pointer">' + form.elements[x].attributes["ErrorMessage"].value + '</span></li>';
							}
							else if ((mascara == 'CNPJ') && (!valida_cnpj(form.elements[x].value))) {
								lista_erro += '<li><span onclick="document.forms[1].' + form.elements[x].name + '.focus();" style="cursor:pointer">' + form.elements[x].attributes["ErrorMessage"].value + '</span></li>';
							}
							else {
								if ((obrigatorio) && (form.elements[x].value.replace(/[ ]/g, '') == '')){
									lista_erro += '<li><span onclick="document.forms[1].' + form.elements[x].name + '.focus();" style="cursor:pointer">' + form.elements[x].attributes["ErrorMessage"].value + '</span></li>';
								}
							}
						}
						
					}
					else if (form.elements[x].type == 'select-one') {
						if (typeof(form.elements[x].attributes['obrigatorio']) == 'object') {
							if ((form.elements[x].attributes['obrigatorio'].value == 'SIM') && (form.elements[x].selectedIndex == 0)){
								lista_erro += '<li><span onclick="document.forms[1].' + form.elements[x].name + '.focus();" style="cursor:pointer;">' + form.elements[x].attributes["ErrorMessage"].value + '</span></li>';
							}
						}
					}
					else if ((form.elements[x].type == 'radio') || (form.elements[x].type == 'checkbox')) {
						if (retorna_obrigatorio(form.elements[x])) {
							if (!valida_marcado(form.elements[x])) {
								lista_erro += '<li><span onclick="document.forms[1].' + form.elements[x].name + '.focus();" style="cursor:pointer;">' + form.elements[x].attributes["ErrorMessage"].value + '</span></li>';
							}
						}
					}
				}
			}
			
			
			if (lista_erro != '') {
				showError(lista_erro);
			}
			
		}
	}
	
}

function retorna_obrigatorio(campo) {
	
	var retorno = false;
	
	
	//se o campo existe
	if (typeof(campo) == 'object') {
		//se não for uma coleção e sim um campo único
		if (campo.length == undefined){
			if (typeof(campo.attributes['obrigatorio']) == 'object') {
				if (campo.attributes['obrigatorio'].value == 'NAO') {return false;} else {return true;}
			}
			else {
				return false;
			}
		}
		else {
			for (x=0 ; x<campo.length ; x++) {
				if (campo.attributes['obrigatorio'] != undefined) {
					if (campo.attributes['obrigatorio'].value == 'SIM') {
						retorno = true;
						break;
					}
				}
			}
			return retorno;
		}
		
	}
}


function valida_marcado(campo) {
	var marcado = false;
	
	if (campo.length != undefined){
		for (x=0 ; x<campo.length ; x++){
			if (campo[x].checked){
				marcado = true;
				break;
			}
		}
	}
	else {
		marcado = campo.checked;
	}
	
	return marcado;
}



function valida_cpf(numero_cpf){
	if (numero_cpf == ''){
		return false;
	}

	var cpf = numero_cpf;
	exp = /\.|\-/g
	cpf = cpf.toString().replace( exp, "" ); 
	var digitoDigitado = eval(cpf.charAt(9)+cpf.charAt(10));
	var soma1=0, soma2=0;
	var vlr =11;

	for(i=0;i<9;i++){
		soma1+=eval(cpf.charAt(i)*(vlr-1));
		soma2+=eval(cpf.charAt(i)*vlr);
		vlr--;
	}    
	soma1 = (((soma1*10)%11)==10 ? 0:((soma1*10)%11));
	soma2=(((soma2+(2*soma1))*10)%11);

	var digitoGerado=(soma1*10)+soma2;
	if (digitoGerado!=digitoDigitado){
		return false;
	}
	else {
		return true;
	}
}

function valida_cnpj(numero_cnpj){
	if (numero_cnpj == ''){
		return false;
	}

	var cnpj = numero_cnpj;
	
	var valida = new Array(6,5,4,3,2,9,8,7,6,5,4,3,2);
	var dig1= new Number;
	var dig2= new Number;

	exp = /\.|\-|\//g
	cnpj = cnpj.toString().replace( exp, "" ); 
	var digito = new Number(eval(cnpj.charAt(12)+cnpj.charAt(13)));

	for(i = 0; i<valida.length; i++){
		dig1 += (i>0? (cnpj.charAt(i-1)*valida[i]):0);    
		dig2 += cnpj.charAt(i)*valida[i];    
	}
	dig1 = (((dig1%11)<2)? 0:(11-(dig1%11)));
	dig2 = (((dig2%11)<2)? 0:(11-(dig2%11)));

	if (((dig1*10)+dig2) != digito)  {
		return false;
	}
	else {
		return true;
	}
}

function showError(texto){
	
	obj = document.getElementsByTagName('span');
	
	if (obj.length != undefined) {
		
		for (x=0 ; x<obj.length ; x++) {
			if (typeof(obj[x].attributes['ListaErro']) == 'object'){
				obj[x].innerHTML = '<ul>' + texto + '</ul>';
				break;
			}
		}
		
	}
	else {
		
		if (typeof(obj[x].attributes['ListaErro']) == 'object'){
			obj[x].innerHTML = '<ul>' + texto + '</ul>';
		}
			
	}
	
}
