/******************************************************************************
*																										*
*							J a v a s c r i p t   D O M										*
*																										*
******************************************************************************/

/******************************************************************************
*																										*
*	Retorna um objeto. Se enviado um id, pega a referência, se foi enviado um	*
*	objeto, retorna o mesmo.																	*
*	Exemplo: var o = get_element("obj");													*
*																										*
******************************************************************************/
function get_element(o){
	return is_object(o) ? o : document.getElementById(o)
}

/******************************************************************************
*																										*
*	Habilita ou não um elemento.																*
*	Exemplo: enable_element("elemento");													*
*																										*
******************************************************************************/
function enable_element(obj,b){
	var o = get_element(obj) ;
	o.disabled=!b;
}

/******************************************************************************
*																										*
*	Retorna se o argumento é um objeto ou não.											*
*	Exemplo:																							*
*	is_object("teste");																			*
*	is_object(document.getElementById("elemento"));										*
*																										*
******************************************************************************/
function is_object(o){
	try {
		return o.toString().toUpperCase().indexOf("OBJECT")>=0;
	}catch(e){
		return false;
	}
}

/******************************************************************************
*																										*
*	Inverte a visualização de um elemento.													*
*	Exemplo: invert_display("elemento");													*
*																										*
******************************************************************************/
function invert_display(obj){
	var o = get_element(obj);
	if(!o)
		return;
	o.style.display = (o.style.display != "block" && o.style.display.length!=0 ? "block" : "none");
}

function show_element(obj){
	var o = get_element(obj);
	if(!o)
		return;
	o.style.display = "block";
}

function hide_element(obj){
	var o = get_element(obj);
	if(!o)
		return;
	o.style.display = "none";
}

/******************************************************************************
*																										*
*	Envia o foco para um elemento.															*
*	Exemplo: focus_element("elemento");														*
*																										*
******************************************************************************/
function focus_element(id){
	try {
		var obj = get_element(id);
		obj.focus();
	}catch(e){};
}

function create_list_element(id,text){
	var li	= document.createElement("li");
	li.id		= id;
	li.appendChild(document.createTextNode(text));
	return li;
}

function remove_children(id){
	try {
		var obj = get_element(id);
		if(obj.length<1)
			return;
		while(obj.firstChild)
			obj.removeChild(obj.firstChild);
	}catch(e){};
}

/******************************************************************************
*																										*
*	Cria uma opção para um elemento do tipo SELECT.										*
*	Exemplo: create_option("Texto a ser exibido","key1",false);						*
*																										*
******************************************************************************/
function create_option(key,text,selected){
	var opt			= document.createElement("option");
	opt.text			= text ? text : key;
	opt.value		= key  ? key  : text;
	opt.selected	= selected ? selected : false;
	return opt;
}

function create_list_item(text,id){
	var li = document.createElement("li");
	if(id)
		li.id = id;
	li.innerHTML = text;
	return li;
}

/******************************************************************************
*																										*
*	Adiciona uma opção a um elemento do tipo SELECT.									*
*	Exemplo:																							*
*	var o = add_option("element",option);													*
*	add_option("select1",o);																	*
*																										*
******************************************************************************/
function add_option(obj,opt){
	var o = get_element(obj);
	try {
		o.add(opt,null);
	}catch(ex){
		o.add(opt,o.length);
	}
}

/******************************************************************************
*																										*
*	Retorna uma OPTION de um SELECT, a partir do seu VALUE.							*
*	Exemplo:																							*
*	var o = get_option("element","id");														*
*																										*
******************************************************************************/
function get_option(obj,val){
	var o = get_element(obj);
	var cnt;
	for(cnt=0;cnt<o.length;cnt++){
		if(o[cnt].value==val)
			return o[cnt];
	}
	return null;
}

/******************************************************************************
*																										*
*	Remove todos os elementos de um SELECT.												*
*	Exemplo: remove_all_select_elements("select1");										*
*																										*
******************************************************************************/
function remove_all_select_elements(id){
	var o = get_element(id);
	var iSize = o.length;
	for(var i = 0; i<iSize; i++)
		o.remove(0);
}

/******************************************************************************
*																										*
*	Seleciona todos os elementos de um SELECT.											*
*	Exemplo: select_all_elements("select1");												*
*																										*
******************************************************************************/
function select_all_elements(id){
	var obj = get_element(id);
	if(!obj)
		return false;
	for(var i=0; i<obj.options.length; i++)
		obj.options[i].selected = true;		
}

function check_all(name,checked){
	var objs = document.getElementsByName(name);
	for(var i=0; i<objs.length; i++)
		objs[i].checked = checked;
}

/******************************************************************************
*																										*
*	Preenche um SELECT com o retorno de uma chamada a uma URL JSON.				*
*	O ultimo parametro, func, é uma função para testar se o elemento vai ser	*
*	incluído ou não, devendo retornar boolean.											*
*	Exemplo:																							*
*	fill_select_from_json("page.php?p1=1&p2=2","select1",["campo","campo"],		*
*  ["chave","chave"],"elemento1",false,"-","-");										*
*																										*
******************************************************************************/
function fill_select_from_json(url,element,fields,keys,key,blank,fs,ks,func){
	var obj = get_element(element);		
	/* voltar isso quando descobrir como o IEca faz para detectar o tipo de um objeto 
	com o toString()
	if(obj.toString().toUpperCase().indexOf("SELECT")<0)
		return false;
	*/		

	// valores default
	fs		= fs  ? fs	: "-";
	ks		= ks  ? ks	: "-";
	key	= key ? key : "";

	// request Ajax
	var req = get_http_request();
	ajax_send(req,"get",url);

	// retornou!
	if(req.readyState==4){
		if(req.status==200){
			try{
				var result	= eval(req.responseText);
				var text		= "";
				// var key		= "";
				remove_all_select_elements(element);

				if(blank)
					add_option(obj,create_option("","",false));

				for(i=0;i<result.length;i++){
					text	= "";
					keyt	= "";

					// se tem uma funcao, testa
					if(func && !func(result[i]))
							continue;

					// monta o texto com os campos selecionados
					for(a=0;a<fields.length;a++)
						text = text + eval("result[i]."+fields[a])+fs;
					for(k=0;k<keys.length;k++)
						keyt = keyt + eval("result[i]."+keys[k])+ks;

					text	= text.substr(0,text.length-fs.length);
					keyt	= keyt.substr(0,keyt.length-ks.length);

					var opt = create_option(keyt,text,keyt==key);
					add_option(obj,opt);
				}
            return result.length;
			}catch(e){};
		}
	}
}

/******************************************************************************
*																										*
*	Preenche um TEXT com o retorno de uma chamada a uma URL JSON.					*
*	Exemplo:																							*
*	fill_text_from_json("page.php?p1=1&p2=2","text1",["NOME","APELIDO"]);		*
*																										*
******************************************************************************/
function fill_text_from_json(url,element,fields,fs,rs){
	var obj = get_element(element);		
	if(obj.toString().toUpperCase().indexOf("INPUTELEMENT")<0 &&
		obj.toString().toUpperCase().indexOf("TEXTAREA")<0){
		return false;
	}

	// valores default
	fs	= fs ? fs : " ";
	rs = rs ? rs : "\n";

	// request Ajax
	var req = get_http_request();
	ajax_send(req,"get",url);

	// retornou!
	if(req.status==200){
		try{
			var result	= eval(req.responseText);
			var text		= "";
			for(i=0;i<result.length;i++){
				for(f=0;f<fields.length;f++)
					text = text + eval("result[i]."+fields[f])+fs;
				text = text + rs;
			}
			obj.value = text;
		}catch(e){ 
			alert("ERRO:"+e); 
		}
	}
}
	
/******************************************************************************
*																										*
*	Preenche um FORM com o retorno de uma chamada a uma URL JSON.					*
*	Exemplo:																							*
*	fill_from_from_json("form1","page.php?p1=1&p2=2");									*
*																										*
******************************************************************************/
function fill_form_from_json(id,url){
   try {
      var req = get_http_request();
      ajax_send(req,"get",url);

      // retornou!
      if(req.status==200){
         try {
            var result = eval(req.responseText);
            if(!result){
               alert("Erro pegando informações do cliente!");
               return false;
            }
         } catch(e) {
            alert("erro avaliando retorno: "+e+" "+req.responseText);
            return false;
         }
         // so interessa a primeira linha
         result = result[0];

         // verifica o formulário
         var form = document.getElementById(id);
         var elements = form.elements;

         for(var i=0; i<elements.length; i++){
            var element = elements[i];
            // só processa elementos com nome!
            if(!element.name)
               continue;
            // verifica se houve retorno no JSON com mesmo nome
            var evaluated;
            try {
               evaluated = eval("result."+element.name);
            }catch(e) {};  
            if(evaluated){
               if(element.type.indexOf("checkbox")>=0)
                  element.checked = evaluated > 0;
               else	
                  element.value = unescape(evaluated);
            }
         }
      }
   }catch(e){
      alert("Erro preenchendo campos: "+e);
   }
}

/******************************************************************************
*																										*
*	Limpa os valores de um formulário.														*
*	Exemplo:																							*
*	form_clear("id");																				*
*																										*
******************************************************************************/
function form_clear(id){
	var form = get_element(id);
	var elements = form.elements;
	for(var i=0; i<elements.length; i++){
		var element = elements[i];
		var type		= element.type;
		if(!type)
			continue;
		if(type.indexOf("text")>=0)
			element.value="";
		else if(type.indexOf("select")>=0)
			element.value=1;	
		else if(type.indexOf("checkbox")>=0)
			element.checked = false;	
	}
}
						
/******************************************************************************
*																										*
*	Copia o conteúdo de um elemento para o outro. Podem ser passados os			*
*	elementos ou os ids. Os dois elementos tem que ser do mesmo tipo.				*
*	Exemplo:																							*
*	copy_contents("elemento_fonte","elemento_destino");								*
*																										*
******************************************************************************/
function copy_contents(from,to){
	var objfrom = get_element(from);		
	var objto	= get_element(to);
	if(objfrom.toString()!=objto.toString())
		return false;

	// copia um select		
	if(objfrom.toString().toUpperCase().indexOf("SELECT")>=0){
		remove_all_select_elements(objto);
		var size = objfrom.options.length;
		for(var i=0; i<size; i++)
			objto.options[i] = create_option(objfrom.options[i].value,objfrom.options[i].text);
	}
	if(objfrom.toString().toUpperCase().indexOf("INPUTELEMENT")>=0 ||
		objfrom.toString().toUpperCase().indexOf("TEXTAREA")>=0){
		objto.value = objfrom.value;
	}
}

/******************************************************************************
*																										*
*	Funções de validação																			*
*																										*
******************************************************************************/
function regexp_test(r,s){
	var reg = new RegExp(r);
	return reg.test(s);
}

function get_radio_value(id){
	try {
		var options = document.getElementsByName(id);
		for(var i=0; i<options.length; i++){
			if(options[i].checked)
				return options[i].value;
		}
	}catch(e){
		alert("ERRO: get_radio_value: "+id+"/"+e);
	}
	return null;
}

function get_checkbox_values(id){
	var values		= [];
	try {
		var collection = document.getElementsByName(id);
		for(var i=0; i<collection.length; i++){
			if(collection[i].checked)
				values.push(collection[i].value);
		}
	}catch(e){
		alert("ERRO: get_checkbox_values: "+id+"/"+e);
	}
	return values.join(",");
}

function date_regexp(){
	return /^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[0-2])\/[12][0-9]{3}$/;
}

function valid_date(d){
	reg = date_regexp();
	return reg.test(d);
}

function valid_time(t){
	reg = /([01][0-9]|2[0-3]):[0-5][0-9]/;
	return reg.test(t);
}
			
function valid_datetime(dt){
	reg = /(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[0-2])\/[12][0-9]{3} ([01][0-9]|2[0-3]):[0-5][0-9]/;
	return reg.test(dt);
}

function valid_email(email) {
	oReg = /[A-Za-z0-9_.-]+@([A-Za-z0-9_-]+\.)+[A-Za-z]{2,4}/;
	return oReg.test(email);
}

function valida_cpf(cpf){
	// somente numéricos
	if(!/^[0-9]{11}$/.test(cpf)) 
		return false;

   icpf = parseInt(cpf.replace(/^0+/,""));
   if(icpf<=0) 
      return false;

	var soma	= 0;
	var mult = 10;
	var len	= cpf.length;
	var digi, cpf_temp, loop;

	// encontra a soma
	for(loop=0; loop < len; loop++)
		soma += loop < 9 ? parseInt(cpf.charAt(loop)) * mult-- : 0;	

	// calcula o primeiro digito
	digi = String(soma%11 < 2 ? 0 : 11-(soma%11));

	// "gruda" o primeiro digito nos 9 primeiros numeros do CPF
	cpf_temp = cpf.substring(0,9)+digi;
	len		= cpf_temp.length;
	soma		= 0;
	mult		= 11;

	// encontra o segundo digito
	for(loop=0; loop < len; loop++)
		soma += parseInt(cpf_temp.charAt(loop)) * mult--;	
		
	// calcula o segundo digito
	digi = digi+String(soma % 11 < 2 ? 0 : 11-(soma%11));
	return digi==cpf.substring(9);
}

function validaCPF(sCPF){
	var iLen, iLoop, iChar, iSoma, iMult, iRest, sDigi, sCPFTemp;

	iLen = sCPF.length;
	if(iLen!=11)
		return false;

	iSoma	= 0;
	iMult = 10;
	iRest = 0;
	
	// verifica se todos os digitos sao numericos
	for(iLoop=0;iLoop<iLen;iLoop++){
		iChar = parseInt(sCPF.charAt(iLoop));
		if(isNaN(iChar))
			return false;
		iSoma += iLoop<9?iChar*iMult--:0;	
	}

	// calcula o primeiro digito
	iRest	= iSoma%11<2?0:11-(iSoma%11);
	sDigi	= String(iRest);

	// "gruda" o primeiro digito nos 9 primeiros numeros do CPF
	sCPFTemp = sCPF.substring(0,9)+sDigi;
	iLen		= sCPFTemp.length;
	iSoma		= 0;
	iMult		= 11;

	// encontra o segundo digito
	for(iLoop=0;iLoop<iLen;iLoop++){
		iChar = parseInt(sCPFTemp.charAt(iLoop));
		iSoma += iChar*iMult--;	
	}
		
	// calcula o segundo digito
	iRest	= iSoma%11<2?0:11-(iSoma%11);
	sDigi = sDigi+String(iRest);
	return sDigi==sCPF.substring(9);
}

function validaCNPJ(sCNPJ){
	var iLen, iLoop, iChar, iM1, iM2, iSoma1, iSoma2, iDigi1, iDigi2, sDigi;
	
	// verifica o tamanho
	iLen = sCNPJ.length;
	if(iLen!=14)
		return false;

	for(iLoop=0;iLoop<iLen;iLoop++){
		iChar = parseInt(sCNPJ[iLoop]);
		if(isNaN(iChar))
			return false;
	}

	iM2		= 2;
	iSoma1	= 0;
	iSoma2	= 0;
	
	for(iLoop=11;iLoop>=0;iLoop--){
		iChar = parseInt(sCNPJ[iLoop]);
		iM1	= iM2;
		iM2	= iM2<9?iM2+1:2;
		
		iSoma1 += iChar*iM1;
		iSoma2 += iChar*iM2;
	}
		
	iDigi1 = iSoma1%11<2?0:11-(iSoma1%11);
	iSoma2 = (iSoma2+(2*iDigi1))%11;	
	iDigi2 = iSoma2<2?0:11-iSoma2;

	sDigi	 = String(iDigi1)+String(iDigi2);
	return sDigi==sCNPJ.substring(12);
}

function pad(dir,str,size,ch){
   str = String(str);
	// se tamanho maximo ...
	if(str.length>size)
		return str.substring(0,size);
	
	// usa espaço como default !!!
	if(ch==null)
		ch = ' ';

	var spad	= new String("");
	var idif = size-str.length;
	
	// padding a direita
	if(dir==1)	
		spad = spad.concat(str);

	// faz o padding		
	for(var i=0;i<idif;i++)
		spad = spad.concat(ch);

	// padding a esquerda
	if(dir==0)	
		spad = spad.concat(str);
	return spad;		
}

function pad_left(str,size,ch){
	return pad(0,str,size,ch);
}

function pad_right(str,size,ch){
	return pad(1,str,size,ch);
}

function ltrim( value ) {
	var re = /\s*((\S+\s*)*)/;
	return value.replace(re, "$1");
}

function rtrim( value ) {
	var re = /((\s*\S+)*)\s*/;
	return value.replace(re, "$1");
}

function trim( value ) {
	return ltrim(rtrim(value));
}

function decode( value ) {
	return unescape(value.replace(/\+/g,  " "));
}

function encode( value ){
	return escape(value);
}

/******************************************************************************
*																										*
*												A J A X												*
*																										*
******************************************************************************/

/******************************************************************************
*																										*
*	Retorna o objeto de requisições para o Ajax											*
*	Exexmplo: var o = get_http_request();												*
*																										*
******************************************************************************/
function get_http_request(){
	http_req = false;
	try{
		http_req = new XMLHttpRequest();
	}catch(e){
		// adivinha para quem é isso ... :-p
		try{
			http_req = new ActiveXObject("Msxml2.XMLHTTP");
		}catch(e){
			try{
				http_req = new ActiveXObject("Microsoft.XMLHTTP");
			}catch(e){
				alert("Sem XMLHttpRequest disponível!");
			}
		}
	}
	return http_req;	
}

function get_xml_http_request(){
   return get_http_request();
}

/******************************************************************************
*																										*
*	Envia requisição ajax																		*
*	Exemplo:																							*
*	var o = get_http_request();																*
*	ajax_send(o,"get","url.php?p1=1&p2=2",func);										*
*																										*
******************************************************************************/
function ajax_send(http_req,method,url,func){
	var async = func==null?false:true;
	http_req.open(method,url,async);
	if(async)
		http_req.onreadystatechange=func;
	http_req.send(null);
}

function xml_http_send(xml_http,method,url,func){
   ajax_send(xml_http,method,url,func);
}

/******************************************************************************
*																										*
*	Envia requisição ajax e retorna resultado												*
*	Exemplo:																							*
*	var o = get_http_request();																*
*	ajax_send_and_return(o,"get","url.php?p1=1&p2=2");									*
*																										*
******************************************************************************/
function ajax_send_and_return(http_req,method,url){
	ajax_send(http_req,method,url);
	if(http_req.readyState==4 && http_req.status==200)
		return eval(http_req.responseText);
}

/******************************************************************************
*																										*
*	Grava um cookie no computador do usuário.												*
*	Exemplo: set_cookie("taqmail","taq@expressoitamarati.com.br",365);			*
*	onde o último parâmetro é a quantidade de dias que o cookie vai persistir.	*
*																										*
******************************************************************************/
function set_cookie(name,value,expire){
	var dExpire = new Date();
   dExpire.setTime(dExpire.getTime()+(expire*24*60*60*1000));
	var cookie = name+"="+ escape(value)+   
   ((expire==null)?"":("; EXPIRES="+dExpire.toGMTString()));
	document.cookie = cookie;							  
}

/******************************************************************************
*																										*
*	Retorna o valor de um cookie.																*
*	Exemplo: get_cookie("taqmail");															*
*																										*
******************************************************************************/
function get_cookie(name){
	var search = name + "=";
	if(document.cookie.length> 0){
		offset = document.cookie.indexOf(search);
		if(offset!=-1){
			offset += search.length;
			end = document.cookie.indexOf(";",offset);
			if(end==-1)
				end = document.cookie.length;
			return unescape(document.cookie.substring(offset,end));	
		}
	}
	return null;
}

function urldecode(str){
	var ret = str.toString();
	return unescape(ret);
}

function set_opacity(id,opacity){ 
	var element = document.getElementById(id); 
	if (navigator.userAgent.indexOf("MSIE")!=-1){ 
		var normalized = Math.round(opacity*100); 
		element.style.filter = "alpha(opacity=" + normalized + ")"; 
	}else{ 
		element.style.opacity = opacity; 
	} 
}

function reais(val){
	try {
		var i = parseInt(val);
		var f = pad_right(/[\.]+[\d]{1,2}$/.exec(val)[0],3,"0").replace(/\./,",");
		return "R$ "+i+f;
	}catch(e){
		return "R$ "+val+",00";
	}
}

function coordToDec(coord){
	var match, sig, deg, min, sec, dec;
	match	= /(-)?(\d+\.)(\d{2})(\d{2})(\d{2})/.exec(parseFloat(coord).toFixed(6));
	sig	= match[1] ? -1 : 1;
	deg	= Math.abs(parseFloat(match[2]));
	min	= parseFloat(match[3]);
	sec	= parseFloat(match[4]+"."+match[5]);
	dec	= (min+sec/60.0)/60.0;
	return ((deg+dec)*sig).toFixed(6);
}

function reportWindow(sURL) {
	oWnd = window.open(sURL,null,"scrollbars=1,location=no,toolbar=yes,scrollbars=no");
	oWnd.moveTo(0,0);
}

function current_date_str(){
	var d = new Date();
	return pad_left(String(d.getDate()),2,"0")	+"/"+
		    pad_left(String(d.getMonth()+1),2,"0")+"/"+
			 pad_left(String(d.getFullYear()),4,"0");
}

/******************************************************************************
*																										*
*	Preenche SELECT com os dados de um arquivo XML										*
*	O primeiro elemento do array é o elemento principal de onde a) se pega o	*
*	valor ou b) pega os valores dos outros nós, definidos como o resto dos		*
*	elementos do Array.																			*
*																										*
******************************************************************************/
function load_select_from_xml(oSelect,oXml,oNodesSel,sSep,bBlank){
	remove_all_select_elements(oSelect);
	var oObj		= document.getElementById(oSelect);				// SELECT a ser preenchido
	var oNodes	= oXml.getElementsByTagName(oNodesSel[0]);	// nó "raiz"
	var oOpt;

	// insere ou não em branco
	if(bBlank){
		oOpt = document.createElement("option");
		oOpt.text	= "";
		oOpt.value	= "";
		try {
			oObj.add(oOpt,null);
		}catch(e){
			oObj.add(oOpt,oObj.length);
		}	
	}	
	
	// aqui é o loop nos "registros" do XML			
	for(var i=0; i<oNodes.length; i++){
		var oNode = oNodes[i];	// pega o nó
		var sText = "";			// string que vai ser preenchida para formar a option
		
		// pega o valor de um nó ou concatena a string para pegar os subnós com o separador
		if(oNodesSel.length==1)
			sText = unescape(oNode.firstChild.data).replace(/\+/g," ");
		else{
			for(var l=1; l<oNodesSel.length; l++)
				sText = sText + unescape(oNode.getElementsByTagName(oNodesSel[l]).item(0).firstChild.data).replace(/\+/g," ")+(l<oNodesSel.length-1?sSep:"");
		}
		
		// aqui já temos o texto, criando a OPTION
		oOpt			= document.createElement("option");
		oOpt.text	= sText;
		oOpt.value	= sText;

		// inserindo no SELECT - o catch é por causa do IE, pra variar ...
		try {
			oObj.add(oOpt,null);
		}catch(e){
			oObj.add(oOpt,oObj.length);
		}
	}
}

/******************************************************************************
*																										*
*	Retorna uma TABLE com os dados de um arquivo XML.									*
*	O primeiro elemento do array é o elemento principal de onde a) se pega o	*
*	valor ou b) pega os valores dos outros nós, definidos como o resto dos		*
*	elementos do Array.																			*
*																										*
******************************************************************************/
function load_table_from_xml(oSelect,oXml,sCaption,oHeader,oNodesSel,sSep){
	remove_all_select_elements(oSelect);
	var oObj		= document.getElementById(oSelect);				// element a ser preenchido com a table
	if(!oObj)
		return;
	var oNodes	= oXml.getElementsByTagName(oNodesSel[0]);	// nó "raiz"
	var sTable  = "<table id='xml_http_table'><caption>" + sCaption + "</caption>";

	// se tem header, insere
	if(oHeader){
		sTable = sTable + "<thead>";
		sTable = sTable + "<tr>";
		for(var i=0; i<oHeader.length; i++)
			sTable = sTable + "<th>" + oHeader[i] + "</th>";
		sTable = sTable + "</tr>";
		sTable = sTable + "</thead>";
	}

	// começa o body
	sTable = sTable + "<tbody>";

	// aqui é o loop nos "registros" do XML			
	for(var i=0; i<oNodes.length; i++){
		var oNode = oNodes[i];	// pega o nó
		
		// pega o valor de um nó ou concatena a string para pegar os subnós com o separador
		if(oNodesSel.length==1)
			sTable = "<tr><td>"+unescape(oNode.firstChild.data).replace(/\+/g," ")+"</td></tr>";
		else{
			sTable = sTable + "<tr class='"+(i%2==0?"par":"impar")+"'>";
			for(var l=1; l<oNodesSel.length; l++)
				sTable = sTable + "<td>" + unescape(oNode.getElementsByTagName(oNodesSel[l]).item(0).firstChild.data).replace(/\+/g," ") + "</td>";
			sTable = sTable + "</tr>";
		}
	}
	
	sTable = sTable + "</tbody>";
	sTable = sTable + "</table>";
	oObj.innerHTML=sTable;
}

/*
	Desenha a barra com o titulo
	@param String titulo
	@param String path opcional das imagens
*/
function makeTitle(title,path) {
   make_title_bar(title,path);
}

function make_title_bar( sTitle, sPath ) {
	if( sPath == null )
		sPath = "img";
		
	document.write( "<table border='0' cellspacing='0' cellpadding='0'>" );
	document.write( "<tr>" );
	document.write( "<td valign='top' align='right' width='25' height='25'>" );
	document.write( "<img src='"+sPath+"/leftback3.gif' border='0' width='25' height='25' align='top'>" );
	document.write( "</td>" );
	document.write( "<td bgcolor='#C00000' align='center' valign='center' height='25'>" );	
	document.write( "<span class='TITULO'>" );
	document.write( sTitle );
	document.write( "</span>" );
	document.write( "</td>" );
	document.write( "<td valign='top' align='left' width='25' height='25'>" );
	document.write( "<img src='"+sPath+"/rightback3.gif' border='0' width='25' height='25' align='top'>" );
	document.write( "</td>" );
	document.write( "</tr>" );		
	document.write( "</table>" );
}			

function get_date(sData){
	sDay	= strip_left_zeros(sData.substring(0,2));
	sMon	= strip_left_zeros(sData.substring(3,5));
	sYear = strip_left_zeros(sData.substring(6));
	return new Date(parseInt(sYear),parseInt(sMon)-1,parseInt(sDay));
}

function strip_left_zeros(str) {
   return str.replace(/^0+/,"");
}

function removeAccents(str){
   var tokens     = str.split('');
   var accents    = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÕÖØòóôõöøÈÉÊËèéêëðÇçÐÌÍÎÏìíîïÙÚÛÜùúûüÑñ¿¿¿ÿý¿¿".split('');
   var stripped   = "AAAAAAaaaaaaOOOOOOOooooooEEEEeeeeeCcDIIIIiiiiUUUUuuuuNnSsYyyZz".split('');
   var removed   = new Array();
   var cur, pos;
   for(var i=0; i<tokens.length; i++) {
      cur = tokens[i];
      pos = accents.indexOf(cur);
      if(pos>=0)
         cur = stripped[pos];
      removed.push(cur);
   }
   return removed.join("");
}

