/*
	Desenha a barra com o titulo
	@param String titulo
	@param String path opcional das imagens
*/
function makeTitle( 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>" );
}			

/*
	Funcao para mostrar o help (sei...)
*/
function helpMe() {
	oWnd = window.open("http://10.0.0.10/intra/help.html","help","width=250,height=150,left=100,top=100");
}

/*	
	Funcao para fazer padding
	@param int    direcao: 0-esquerda, 1-direita
	@param String string
	@param int    tamanho da string para gerar
	@param char   caracter a ser usado ( espaço como default )
*/
function pad( iDir, sStr, iSize, cChar ) {
	// se tamanho maximo ...
	if(sStr.length>iSize)
		return sStr.substring(0,iSize);
	
	// usa espaço como default !!!
	if( cChar == null )
		cChar = ' ';

	var sPad	= new String( "" );
	var iDif = iSize - sStr.length;
	
	// padding a direita
	if( iDir == 1 )	
		sPad	= sPad.concat( sStr );

	// faz o padding		
	for( var i=0; i<iDif; i++ )
		sPad	= sPad.concat( cChar );

	// padding a esquerda
	if( iDir == 0 )	
		sPad	= sPad.concat( sStr );
	return sPad;		
}

function padLeft( sStr, iSize, cChar ) {
	return pad( 0, sStr, iSize, cChar );		
}	

function padRight( sStr, iSize, cChar ) {
	return pad( 1, sStr, iSize, cChar );		
}	

function trim( sStr ) {
	sRtn = "";
	for( i=0; i<sStr.length; i++ ) {
		if( sStr.charAt(i) != ' ' )
			sRtn=sRtn.concat( sStr.substring(i,i+1) );
	}
	return sRtn;	
}

function stripLeftZeros(sStr){
	var i;
	for(i=0;i<sStr.length;i++)
		if(sStr.charAt(i)!='0')
			return sStr.substring(i);
	return sStr;
}

/**
	Verifica se o formato de data é valido
	@param String data
*/
function checkDateFmt( sDate ) {
	oReg = /(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[0-2])\/[12][0-9]{3}/;
	return oReg.test( sDate );
}

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

/**
	Valida hora
*/	
function checkTime(sTime) {
	oReg = /([01][0-9]|2[0-3]):[0-5][0-9]/;
	return oReg.test(sTime);
}

/**
	Abre janela de relatórios 
	@param String url
*/	
function reportWindow(sURL) {
	oWnd = window.open(sURL,null,"scrollbars=1,location=no,toolbar=yes,scrollbars=no");
	oWnd.moveTo(0,0);
}

/**
	Retorna uma data a partir de uma string
*/
function getDate(sData){
	sDay	= stripLeftZeros(sData.substring(0,2));
	sMon	= stripLeftZeros(sData.substring(3,5));
	sYear = stripLeftZeros(sData.substring(6));
	return new Date(parseInt(sYear),parseInt(sMon)-1,parseInt(sDay));
}

/**
	Valida um intervalo de datas, em dias
	@param String data inicial
	@param String data final
	@param int qtde de dias
*/
function isValidDateInterval(sDataIni,sDataFim,iDays) {
	if(!checkDateFmt(sDataIni)) {
		alert("Data inicial inválida: "+sDataIni);
		return false;
	}
	if(!checkDateFmt(sDataFim)) {
		alert("Data final inválida: "+sDataFim);
		return false;
	}
	if(iDays<0){
		alert("Intervalo de dias inválido: "+iDays);
		return false;
	}
	oDataIni	=getDate(sDataIni);
	oDataFim	=getDate(sDataFim);
	
	if(oDataFim.getTime()-oDataIni.getTime()>(1000*60*60*24*iDays)) {
		alert("Muitos dias para processar !!! No máximo "+iDays+" por favor !!!");
		return false;
	}
	return true;
}

/**
	Validação de CPF
	Só podem números
*/
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 getDateAsString(dDate){
	return (dDate.getDate()<10?"0"+dDate.getDate():dDate.getDate())+"/"+
	       (dDate.getMonth()+1<10?"0"+(dDate.getMonth()+1):dDate.getMonth()+1)+"/"+
			 dDate.getFullYear();
}

function get_xml_http_request(){
	xml_http = false;
	try{
		xml_http = new XMLHttpRequest();
	}catch(e){
		try{
			xml_http = new ActiveXObject("Msxml2.XMLHTTP");
		}catch(e){
			try{
				xml_http = new ActiveXObject("Microsoft.XMLHTTP");
			}catch(e){
				alert("Sem XMLHttpRequest disponível!");
			}
		}
	}
	return xml_http;	
}

/******************************************************************************
*																										*
*	Desabilita elementos do FORM enquanto procura dados.								*
*	Se não fosse um certo browser aí que insiste em deixar os SELECTs por cima	*
*	de TUDO na página, poderíamos inserir uma DIV em um z-index mais alto para *
*	bloquear os controles. Mas como ele não colabora ... :-p							*
*																										*
******************************************************************************/
function enable_form(form,b){
	var oForm = document.getElementById(form);	// pega o form
	var oElems = oForm.elements;
	for(var i=0; i<oElems.length; i++)
		oElems[i].disabled=!b;
}

/******************************************************************************
*																										*
*	Remove todos os elementos do SELECT														*
*																										*
******************************************************************************/			
function remove_all_select_elements(id){
	var oObj = document.getElementById(id);
	var iSize = oObj.length;
	for(var i = 0; i<iSize; i++)
		oObj.remove(0);
}

function select_all_elements(id){
	var obj = document.getElementById(id);
	if(!obj)
		return;
	for(var i=0; i<obj.options.length; i++)
		obj.options[i].selected = true;		
}

/******************************************************************************
*																										*
*	Envia requisição ajax																		*
*																										*
******************************************************************************/
function xml_http_send(xml_http,method,url,func){
	var async = func==null?false:true;
	xml_http.open(method,url,async);
	if(async)
		xml_http.onreadystatechange=func;
	xml_http.send(null);
}

/******************************************************************************
*																										*
*	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;
}

function enable_element(id,b){
	var oObj = document.getElementById(id);
	oObj.disabled=!b;
}

function focus_element(id){
	try {
		document.getElementById(id).focus();
	}catch(e){};
}

function create_option(text,key,selected){
	var opt			= document.createElement("option");
	opt.text			= text;
	opt.value		= key ? key : text;
	opt.selected	= selected ? selected : false;
	return opt;
}

function add_option(element,opt){
	try {
		element.add(opt,null);
	}catch(ex){
		element.add(opt,element.length);
	}
}

function select_from_json(url,element,key){
	var req = get_xml_http_request();
	xml_http_send(req,"get",url);
	if(req.status==200){
		try{
			var result	= eval(req.responseText);
			var obj		= document.getElementById(element);
			if(obj.toString().toUpperCase().indexOf("SELECT")>=0){
				remove_all_select_elements(element);
				for(i=0;i<result.length;i++){
					var o		= document.createElement("option");
					o.value	= result[i].key;
					o.text	= result[i].desc;
					if(result[i].key==key)
						o.selected = true;
					try {
						obj.add(o,null);
					}catch(ex){
						obj.add(o,obj.length);
					}
				}
			}	
			// se é um campo texto ...
			if(obj.toString().toUpperCase().indexOf("INPUT")>=0){
				obj.value = result[i].desc;
			}
		}catch(e){};
	}
}

function invert_display(id){
	var obj;
	obj = document.getElementById(id);
	if(!obj)
		return;
	obj.style.display = obj.style.display == "none" ? "block" : "none";
}

function setCookie(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;							  
}

function getCookie( 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;
}

