// **************************************** //
// js-valida v1.0 (Rel. 21/Jun/2007)        //
// Rogério Ap. Gonçalves                    //
// **************************************** //

function carregarXml( arquivo ){
	
	if( window.XMLHttpRequest ){ // Opera e FF //
	
		var Loader = new XMLHttpRequest();
		Loader.open( "GET", arquivo, false );
		Loader.send( null );
		return Loader.responseXML;
		
	}
	else if( window.ActiveXObject ){ // IE //
	
		var Loader = new ActiveXObject( "Msxml2.DOMDocument.3.0" );
		Loader.async = false;
		Loader.load( arquivo );
		return Loader;
		
	}
	
}

function validarUsando( arquivo ){
	
	// Carrega o XML de validação //
	var xml = carregarXml( arquivo );
	
	// Roda pelos campos //
	var campos = xml.getElementsByTagName( "campo" );
	for( i = 0; i < campos.length; i++ ){
		
		// Captura o nó da validação //
		var noCampo = campos[i];
		
		// Encontra o id do objeto a ser validado //
		var id = noCampo.getElementsByTagName( "id" )[0].firstChild.data;
		var obj = document.getElementById( id );
		if( obj == null ){
			alert( "[Js-Valida] ERRO:\nNão foi possível encontrar o objeto '" + id + "'" );
			return false;
		}
		
		// Roda pelas regras de cada campo //
		var regras = noCampo.getElementsByTagName( "regra" );
		for( x = 0; x < regras.length; x++ ){
			
			// Encontra o nó da regra //
			var noRegra = regras[x];

			// Encontra a função a executar e a mensagem de erro a mostrar ao usuário //
			var noFuncao = noRegra.getElementsByTagName("funcao")[0];
			var funcao = noFuncao.firstChild.data;
			var mensagem = noRegra.getElementsByTagName("mensagem")[0].firstChild.data;
			
			// Coleta os parametros das funções //
			arrParam = Array();
			for( n = 0; n < noFuncao.attributes.length; n++ ){
				atributo = noFuncao.attributes[n];
				arrParam[n] = "'" + atributo.nodeValue + "'";
			}
			param = arrParam.join();
			
			// Executa a função e retorna a mensagem em caso de erro //
			ret = ( ( param == "" ) ? eval( funcao + "('" + id + "')" ) : eval( funcao + "('" + id + "', " + param + ")" ) );
			if( !ret ){
				obj.focus();
				alert( mensagem );
				return false;
			}
		}
		
	}	
	return true;
}