/**
*	arquivo  : funcoes.js
*	data     : 31/05/2005 
*	versao   : 0.6
*   autor    : rafael 
*	
*	Colecao de funcoes para JavaScript
*
*   CHANGELOG
*	-------------------------------------------------------------
*	data     : 31/05/2005 
*	versao   : 0.6
*   autor    : rafael 
*
*   implementacao da funcao stringTrim
*
*	-------------------------------------------------------------
*	data     : 20/05/2005 
*	versao   : 0.5
*   autor    : rafael 
*   melhoramento da funcao de soma de itens do vetor, checa se o vetor nao 
*   contem um elemento nulo
*
*	-------------------------------------------------------------
*	data     : 02/12/2004
*	versao   : 0.4
*   autor    : rafael 
*
*   function f_valorRadio - funcao que recupera o valor do radio 
*
*	-------------------------------------------------------------
*	data     : 03/09/2004
*	versao   : 0.3
*   autor    : rafael 
*   funcao arredondaValor e mostraArredonda
*	-------------------------------------------------------------
*	data     : 07/11/2003
*	versao   : 0.2
*
*	Programacao da funcao dataMaior, e alteracao da funcao distanciaDias
*	para calculo de distancias retroativas( negativas )
*
*
echo "<script> window.opener.location.reload(); window.close(); </script>"; 

*/

function mascara(src, mascara) {
	var campo = src.value.length;
	var saida = mascara.substring(0,1);
	var texto = mascara.substring(campo);
	if(texto.substring(0,1) != saida) {
		src.value += texto.substring(0,1);
	}
}

//<input type=”button” onclick=”visualizarImpressao();” value=”Visualizar Impressão” />
function visualizarImpressao(){
	var Navegador = '<object id="Navegador1" width="0" height="0"  classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></object>';
	document.body.insertAdjacentHTML('beforeEnd', Navegador);
	Navegador1.ExecWB(7, 1);
	Navegador1.outerHTML = "";
}

//abre uma nova janela
function abrejURL( destino , parametros, nome ){
	var janela ; 
	if( !nome ) 
		nome = 'janela' ; 
 	janela = window.open( destino, nome, parametros ) ;
	janela.focus() ;
	janela.onblur = function(){repagina=1; document.onfocus = function(){if (repagina==1){document.cadastro.submit()}}}
}

//abre uma nova janela simples. Somente com a barra de titulo.
function abrejSimples( destino , nome ){
	var janela ; 
	if( !nome ) 
		nome = 'janela' ; 
 	janela = window.open( destino, nome, 'resizable,scrollbars,titlebar') ;
	janela.focus() ;
	janela.onblur = function(){repagina=1; document.onfocus = function(){if (repagina==1){document.cadastro.submit()}}}
}


function altForm(nomeForm, comando , fsubmit ){
	/*var antes ;
	antes = nomeForm.action ;*/
	nomeForm.action = comando ;
	if( fsubmit ) {
		nomeForm.submit() ;
		//nomeForm.action = antes;
	}
}
/*funcao para mostrar os elementos de um vetor como um item do objeto combo*/
function mostraCombo( pvetor , pinicio, pfinal ){
	var i ;
	for( i= pinicio; pfinal > i ; i++ ){
		document.write('<option value="' +pvetor[i]+'">'+pvetor[i] );
	}
}
/****************************************************************************
*  funcao para [marcar] com valor todos os itens de um form [pform] que 
*  contenham a string [pnome]
*****************************************************************************/
function mTodos(pform, pnome, valor ){
	var i ;
	for( i = 0 ; pform.length > i ; i++ ){
		if( pform.elements[i].name.indexOf(pnome,0 ) != -1 )
			pform.elements[i].checked = valor ;
	}
}
/****************************************************************************
*  funcao para [marcar] com valor todos os checkboxes de um vetor de objetos 
*****************************************************************************/
function mTodosLista( vetorObjeto , valor ){
	var i ;
	var tam = vetorObjeto.length ;
	for( i = 0 ; tam > i ; i++ )
		vetorObjeto[i].checked = valor ; 
}
/****************************************************************************
*  funcao para inverter todos os itens de um form [pform] que 
*  contenham a string [pnome]
*****************************************************************************/
function inverter(pform,pnome ){
	var i ;
	for( i = 0 ; pform.length > i ; i++ ){
		if( pform.elements[i].name.indexOf(pnome,0 ) != -1 )
			pform.elements[i].checked = !pform.elements[i].checked ;
	}
}
/***********************************
*para o objeto com o nome pnome.
*retorna o indice no vetor de objeto do form
*retorna -1 quando o valor nao for encontrado
***********************************/
function achaObjeto(pform,pnome ){
	var i ;
	for( i = 0 ; pform.length > i ; i++ ){
		if( pform.elements[i].name.indexOf(pnome,0 ) != -1 )
			return i ;
	}
	return( -1 ) ; 
}
/***********************************************************************************************
*Marca os checkboxes que tenham o nome parcial de nomeObj, com o valor trocado o objeto nomeRef
*pform form que contem os objetos referenciados por nomeRef e nomeObj
***********************************************************************************************/
function marcarElementos( pform, nomeObj, nomeRef ){
	var i ; 
	var objeto ;
	var valor ;  
	i = achaObjeto( pform, nomeRef );
	if( i >= 0 ){
		objeto = pform.elements[i] ;
		valor = !objeto.checked ;
		mTodos( pform, nomeObj , valor ) ; 
	}else{
		alert('Objeto nao encontrado ' + nomeRef ) ; 
	}
}
/***********************************************************************************************
*Marca os checkboxes do vetor vetorObjeto, com base ao complemento do primeiro elemento do vetor
*O Parametro vetorObjeto, tem que ser uma lista so de checkboxes
***********************************************************************************************/
function marcarElementosLista( vetorObjeto ){
	var i ; 
	var objeto ;
	var valor ;  
	if( vetorObjeto.length > 0 ){
		valor = !vetorObjeto[0].checked ;
		mTodosLista( vetorObjeto, valor ) ; 
	}else
		alert('Nao ha elementos a serem alterados') ; 
}
/***********************************************
valida se o parametro data passado é uma data valida
a data precisa estar no formato dd/mm/aaaa 
***********************************************/
function validaData( data ){
	var res = false ;
	var mesesMax = new Array(31,31,29,31,30,31,30,31,31,30,31,30,31);/*uma posicao no vetor para
	cada mes do ano, a primeira posicao nao e usada e apenas para preencher os outros meses no tempo correto*/
	var dia , mes , ano, maxDia, vetorData ;
	var ANO_INICIO = 1970;
	var ANO_FINAL = 2070;
	vetorData = separaData( data, "-" );
	dia = vetorData[0];
	mes = vetorData[1];
	ano = vetorData[2];
	if( !isNaN(dia) && !isNaN( mes ) && !isNaN( ano ) ){
		if( ano >= ANO_INICIO && ano <= ANO_FINAL ){
			if( mes >=1 && 12 >= mes ){
				maxDia = mesesMax[mes];
				if( dia >= 1 && maxDia >= dia ){
					if( (mes == 2) && anoBissexto ( ano )  )//ano bissexto
						res = (dia <= 28) ;
					else
						res = true ;
				}else
					alert('Data invalida, o dia viola os limites: 1 a '+mesesMax[mes]+'.') ;
			}else
				alert('Data invalida, o mes viola os limites: 1 a 12.' +mes) ;
		}else{
			alert('Data invalida, o ano viola os limites: 1970 a 2070.') ;	
		}
	} 	
	return res;
}

 function calculaQtde( vetor ){
 	var i, res, tmp ; 
	var tam = vetor.length ; 
	res = 0;
	for( i =0 ; tam > i ; i++){
      if( vetor[i] != null ){
          tmp = parseFloat( vetor[i].value) ;
          if( !isNaN( tmp ) ){
            res+= 1 ;
          } 
      }
	}
	return (res) ; 
 }
 
 /** funcao calculaSomaValores - dado um vetor de objetos, a funcao percorre o vetor
 *   somando os valores dos objetos do vetor. Retorna a soma. Se algum elemento do vetor 
 *   nao tiver um valor numerico, este valor nao sera computado na soma
 *
 *   @param array vetor vetor de objetos 
 *   @return float soma dos valores dos objetos    
 */
 function calculaSomaValores( vetor ){
 	var i, res, tmp ; 
	var tam = vetor.length ; 
	res = 0;
	for( i =0 ; tam > i ; i++){
      if( vetor[i] != null ){
          tmp = parseFloat( vetor[i].value) ;
          if( !isNaN( tmp ) ){
            res+= tmp ;
          } 
      }
	}
	return (res) ; 
 }
 function calculaSomaValores2( vetor ){
 	var i, res, tmp ; 
	var tam = vetor.length ; 
	tam--;
	res = 0;
	for( i =0 ; tam > i ; i++){
	  tmp = parseFloat(vetor[i].value) ;
	  if( !isNaN( tmp ) ){
		res+= tmp ;
	  } 
	}
	return (res) ; 
 }
 

 /** funcao pesqBinaria - Realiza uma pesquisa binaria no vetor
 *   
 *   @param int inicio Posicao de inicio da pesquisa binaria 
 *   @param int fim Posicao final na pesquisa binaria
 *   @param mixed chave chave a ser pesquisada
 *   @param array vetor vetor de elementos
 *   @return int posicao do elemento, se nao encontrado retorna -1
 *    
 */
 function pesqBinaria( vetor, inicio, fim , chave ){
 	var meio ; 
	if( fim >= inicio ){
		meio = Math.floor( (inicio + fim )/2 ); 
		if( vetor[ meio ] > chave ){
			return pesqBinaria( vetor, inicio, meio -1, chave ) ;
		}else{
			if( vetor[meio]< chave ){
				return pesqBinaria( vetor, meio+1, fim, chave ) ;			
			}else{//achou
				return meio ;
			}
		}
	}
	return -1 ; 
 }

/**
*	function separaData - separa os elementos de uma data dia, mes, ano em posicoes 
*	de um vetor
*	@param	string	pdata	Data 
*	@param	char	Separador dos elementos da data
*	@return	array	Vetor com os resultados. Posicoes 0,1 e 2, preenchidos pelas respectivas posicoes do parametro de entrada
*/
function separaData( pdata, separador ){
	var vetorData = Array();
	var cont,tam, tmp ;
	vetorData = pdata.split( separador ) ;
	tam = vetorData.length ;
	for( cont = tam-1 ; cont >= 0; cont--){
		tmp = vetorData[cont] ;
		vetorData[cont] = parseInt( tmp,10 ) ;
		//alert( vetorData[cont] + " ["+tmp+"]");
	}
	return vetorData ; 
}

/**
	function stringPData	converte uma string para o objeto Date, correspondente.
	@param	string	pdata 		String com a data
	@param 	char	separador	separador da data
	@return Date	objeto Date, retorna false se nao houver sucesso
*/
function stringPData( pdata, separador ){
	var oData, vData ;
	vData	= separaData( pdata, separador );
	if( vData.length > 0 ){
		/*o objeto data lida com a data com janeiro como o mes zero*/
		oData = new Date( vData[2], vData[1] -1, vData[0] ) ;
		return oData ; 
	}else
		return false;
}

/**
*	function diaSemana retorna o nome do dia de uma data
*	
*	@param	Date	pdata	objeto Date com a data
*	@return	string	String com o dia da semana
*/
function diaSemana( pdata ) {
	var vetorSemana = [ "Domingo", "Segunda-feira", "Terça-feira","Quarta-feira", "Quinta-feira","Sexta-feira","Sábado"] ;
	var dia ;
	dia = pdata.getDay() ;
	if( dia >= 0 && dia <= 6 )
		return vetorSemana[ dia ] ;
	else
		return "Data desconhecida ";
}
/**
* function distanciaDias calcula a distancia em dias entre duas datas. A data mais recente deve ser o segundo parametro.
*	@param	Date	pantiga     Primeira data, deve ser um objeto Date
*	@param	Date	precente    Segunda data e mais recente. Tambem deve ser um objeto Date.
*	@return	int		            Diferenca em dias, entre as duas datas
*/
function distanciaDias( pantiga, precente ){
	var mesesDias = new Array(31,31,28,31,30,31,30,31,31,30,31,30,31);/*uma posicao no vetor para
	cada mes do ano, a primeira posicao nao e usada e apenas para preencher os outros meses no tempo correto*/
	var res = 0 ; 
	var antiga, recente ; /* instancias locais das datas */
	var ano_inicial, mes_inicial, ano_final, mes_final, dia_inicial, dia_final ;
	var retroativo ; /* diz se o calculo vai ser retroativo, distancia negativa */
	if ( dataMaior( pantiga, precente ) == 1 ){
		retroativo = true ; 
		antiga = precente ;
		recente = pantiga ;
	}else{
		antiga = pantiga ;
		recente = precente ; 
		retroativo = false ; 
	}

	ano_inicial = antiga.getYear();
	ano_final = recente.getYear();
	if( ano_inicial == ano_final ){
		dia_inicial = antiga.getDate();
		mes_inicial = antiga.getMonth()+1;
		dia_final = recente.getDate() ;
		mes_final = recente.getMonth()+1;
		if( mes_inicial != mes_final ){
			if( anoBissexto( ano_inicial ) ){
				mesesDias[2]=29 ;
				res = somaDias( mes_inicial+1, mes_final, true ) ;/*calculando o numero de dias ENTRE os meses*/
			}else
				res = somaDias( mes_inicial+1, mes_final, false) ;/*calculando o numero de dias ENTRE os meses*/
			//alert( " res "+res );
			res += mesesDias[mes_inicial] - dia_inicial ;
			//alert( res +" += "+ mesesDias[mes_inicial]+" - "+dia_inicial) ;
		}else
			res = - dia_inicial; 
		res += dia_final ;
	}else{
		res = somaAnos( ano_inicial+1, ano_final ) ; /* soma os dias ENTRE o ano inicial e o ano_final */
		if( anoBissexto( ano_inicial ) )
			res += (366 - diaNumero( antiga ) );/*numero de dias entre a data inicial ate o final do ano_inicial*/
		else
			res += (365 - diaNumero( antiga ) );/*numero de dias entre a data inicial ate o final do ano_inicial*/
		//alert( " res "+res );
		res += diaNumero( recente ) ; //somando os dias do ano_final
		//alert( " res "+res );
	}
//	alert('antiga '+antiga+ ' recente '+recente+' retroativo '+retroativo+' dias '+res );
	if( retroativo )
		return ( -res );
	else
		return ( res );
}
/** function somaDias soma todos os dias que passaram apartir do mes_inicial ate o inicio do mes, especificado pela variavel mes
*	@param	int	mes_inicial	Mes inicial para a soma dos dias
*	@param	int	mes	Mes limite para a soma dos dias
*	@param	bool	ano_bissexto	Indica se o ano e bissexto( fev 29 dias ) ou nao ( fev 28 dias )
*	@return	int		numero de dias corridos ate o inicio do mes
*/
function somaDias( mes_inicial, mes, ano_bissexto ){
	var mesesDias = new Array(31,31,28,31,30,31,30,31,31,30,31,30,31);/*uma posicao no vetor para
	cada mes do ano, a primeira posicao nao e usada e apenas para preencher os outros meses no tempo correto*/
	var res  =0, cont ;
	if( ano_bissexto )
		mesesDias[2]=29 ; //fev tem 29 dias quando o ano for bissexto	
	for( cont =mes_inicial ; mes > cont ; cont++){
		res += mesesDias[cont];
	}
	return res ; 
}
/**
*	function anoBissexto retorna true se o ano for bissexto ou nao.
*	@param	int	Ano
*	@return bool	true para ano bissexto, false para nao bissexto.
*/
function anoBissexto( ano ){
	return ( (0 == (ano%4)) && ( (0 != (ano%100)) || (0 == (ano%400))) );
}
/** function somaAnos soma o numero de dias corridos desde o inicio do ano inicial ate o ultimo dia ante do inicio do ano final
*	@param	int	ano_inicial	Ano de inicio	
*	@param	int	ano_final	Ano limite
*	@return	int		numero de dias 
*/
function somaAnos( ano_inicial, ano_final ){
	var res  =0, cont ;
	for( cont =ano_inicial ; ano_final > cont ; cont++){
		if( anoBissexto( cont ) )
			res += 366 ;
		else
			res += 365 ;
	}
	return res ; 
}
/**
*	function diaNumero retorna o numero(corrido) do dia no ano em questao.
*	@param	Date	data	data com o dia em questao
*	@return int		numero do dia.
*/
function diaNumero( data ){
	var ano_inicial, mes_inicial, dia_inicial;
	var res ;

	dia_inicial = data.getDate();
	mes_inicial = data.getMonth()+1;
	ano_inicial = data.getYear();

	res = somaDias( 1, mes_inicial, ano_inicial  ) ;
	res += dia_inicial ;
	return ( res ) ;
}

/** function dataMaior compara duas datas e retorna o id da maior
*   @param        Date        data1     Primeira data 
*   @param        Date        data2     Segunda data 
*   @return       int                   Se ( data1 > data2  ) retrona 1 
*                                       Se ( data2 > data1  ) retorna 2
*                                       Se ( data1 == data2 ) retorna 0 
**/
function dataMaior( data1, data2 ){
	var dia1, dia2, mes2, mes1, ano1, ano2 ;
	var res = -1;
	dia1 = data1.getDate();
	mes1 = data1.getMonth()+1;
	ano1 = data1.getYear();

	dia2 = data2.getDate();
	mes2 = data2.getMonth()+1;
	ano2 = data2.getYear();
	
	if( ano1 > ano2 )
		res = 1; 
	else{
		if( ano2 > ano1 ){
			res = 2 ;
		}else{/* ano1 == ano2 */
            if( mes1 > mes2 ){
				res =1 ;
			}else{
				if( mes2 > mes1 ){
					res = 2;
				}else{/* meses iguais */
					if( dia1 > dia2 )
						res = 1 ;
					else{
						if( dia2 > dia1 )
							res = 2;
						else/* ano, mes e dia iguais */
							res =0 ;
					}//fecha do else if( dia1 > dia2 )
				}//fecha do else do if( mes2 > mes1 )
			}//fecha do else if( mes1 > mes2 							
		}//fecha do else do if ano2 > ano1 
	}//fecha do else 
	
	return res ; 
}
/** function cmpPrecisao - compara 2 numeros com precisao e retorna true se forem iguais 
@param            double             primeiro              valor
@param            double             segundo               valor
@param            double             precisao              precisao a ser usada na comparacao
@return           double                                   true se forem iguais(usando precisao), false caso contrario
*/

function cmpPrecisao( primeiro, segundo, precisao ){
	return( (primeiro+precisao) >= segundo && (primeiro-precisao) <= segundo );
}


/** functions arredondaValor - arredonda um valor numerico, moeda - o metodo de arredondamento
deve estar sincronizado com a funcao de arredondamento em php
@param        double            valor                Valor a ser arredondado
@param        int               casas                num de casas decimais
@param        double            valor                precisao de arredondamento - nao utilizada  
@return       double                                 Valor arredondado
*/

function arredondaValor( valor, casas, precisao ){
    var fator ;
	var res ;
	if( casas > 0 ){
		res = round_decimals( valor, casas );
	}else{
		res = Math.floor(valor);
	}
	
	return res ;
}

/** mostraArredonda - transforma o arredondamento em string para ser usada em um combo de dialogo 
@param   double       ver arredondaValor
*/
function mostraArredonda( valor, casas, precisao ){
	var res ;
	res = arredondaValor( valor, casas, precisao );
	return( res.toString() );
}
/*********************************************************************************/
/** funcoes copiadas da internet **/
/*********************************************************************************/


/* This script is Copyright (c) Paul McFedries and 
Logophilia Limited (http://www.mcfedries.com/).
Permission is granted to use this script as long as 
this Copyright notice remains in place.*/

function round_decimals(original_number, decimals) {
    var result1 = original_number * Math.pow(10, decimals)
    var result2 = Math.round(result1)
    var result3 = result2 / Math.pow(10, decimals)
    return pad_with_zeros(result3, decimals)
}

function pad_with_zeros(rounded_value, decimal_places) {

    // Convert the number to a string
    var value_string = rounded_value.toString()
    
    // Locate the decimal point
    var decimal_location = value_string.indexOf(".")

    // Is there a decimal point?
    if (decimal_location == -1) {
        
        // If no, then all decimal places will be padded with 0s
        decimal_part_length = 0
        
        // If decimal_places is greater than zero, tack on a decimal point
        value_string += decimal_places > 0 ? "." : ""
    }
    else {

        // If yes, then only the extra decimal places will be padded with 0s
        decimal_part_length = value_string.length - decimal_location - 1
    }
    
    // Calculate the number of decimal places that need to be padded with 0s
    var pad_total = decimal_places - decimal_part_length
    
    if (pad_total > 0) {
        
        // Pad the string with 0s
        for (var counter = 1; counter <= pad_total; counter++) 
            value_string += "0"
        }
    return value_string
}
/** funcao que retorna o valor selecionado por um conjunto de radio box */
function f_valorRadio( nomeRadio ){
		var i, res = null ;
		i = f_indRadio( nomeRadio );
		if( i != null)
			res = nomeRadio[i].value;
		return res ;
}


/** funcao que retorna o indice do item selecionado por um conjunto de radio box */
function f_indRadio( nomeRadio ){
		var i, res = null  ;
		for( i = 0 ; nomeRadio.length > i && res == null ; i++ ){
			if( nomeRadio[i].checked )
				res = i;
		}
		return res ;
}

/** faz o trim, ou seja remove todos os espacos a direita e a esquerda de uma string */
function stringTrim( prmString ){
	var localString = prmString ;
	while(''+localString.charAt(0)==' ')
		localString=localString.substring(1,localString.length);
	while(''+localString.charAt(localString.length-1)==' ')
		localString=localString.substring(0,localString.length-1);
	return localString ;
}

function setaDia( objeto, pdata ){
	var res ;
	res = stringPData( pdata, strSeparador );
	if( res == false )
		objeto.value = "desconhecido";
	else
		objeto.value = diaSemana( res ) ;
}

function setaPrazo( oAlvo, antiga, recente){
	var data1, data2, res ;	
	data1 = stringPData( antiga, strSeparador) ;
	data2 = stringPData( recente, strSeparador) ;
	if( data1== false || data2 == false )
		oAlvo.value = 'Indefinido'; 
	else{
		res = distanciaDias( data1, data2 ) ; 
		oAlvo.value = res; 
	}
}
/** separa a string de entrada(cheque) e distribui entre os campos documento, banco_documento, serie, historico, data
formato do campo cheque: banco_documento(4)documento(6)serie(5)historico(8)  */
function separa_string( cheque, banco_documento, documento, serie, historico, data, indice){
   var valor   = cheque.value;
   var proxInd ;
	if( valor ){
		with( document.cadastro ){
			banco_documento.value = valor.substring(1,4);// codigo do banco 
			historico.value = valor.substring(4,9);  
			documento.value =  valor.substring(13,19); //numero do heque
			serie.value = valor.substring(24,32); //serie 
			proxInd = parseInt( indice ) + 0;
			eval ( "if( document.cadastro.data"+(proxInd)+" != null ) document.cadastro.data"+(proxInd)+".focus(); ");  
		}		   
	}
}
function Dia(Data_DDMMYYYY) {
	string_data = Data_DDMMYYYY.toString();
	posicao_barra = string_data.indexOf("-");
	if (posicao_barra!= -1) {
		dia = string_data.substring(0,posicao_barra);
		return dia;
	} else {
		return false;
	}
}

function Mes(Data_DDMMYYYY) {
	string_data = Data_DDMMYYYY.toString();
	posicao_barra = string_data.indexOf("-");
	if (posicao_barra!= -1) {
		dia = string_data.substring(0,posicao_barra);
		string_mes = string_data.substring(posicao_barra+1,string_data.length);
		posicao_barra = string_mes.indexOf("-");
		if (posicao_barra!= -1) {
			mes = string_mes.substring(0,posicao_barra);
			mes = Math.floor(mes);
			return mes;
		} else {
			return false;
		}
	} else {
		return false;
	}
}

function Ano(Data_DDMMYYYY) {
	string_data = Data_DDMMYYYY.toString();
	posicao_barra = string_data.indexOf("-");
	if (posicao_barra!= -1)	{
		dia = string_data.substring(0,posicao_barra);
		string_mes = string_data.substring(posicao_barra+1,string_data.length);
		posicao_barra = string_mes.indexOf("-");
		if (posicao_barra!= -1) {
			mes = string_mes.substring(0,posicao_barra);
			mes = Math.floor(mes);
			ano = string_mes.substring(posicao_barra+1,string_mes.length);
			return ano;
		} else {
			return false;
		}
	} else {
		return false;
	}
}

function Calcula_Dias(data1_DDMMYYYY,data2_DDMMYYYY){
	Var_Dia1=Dia(data1_DDMMYYYY);
	Var_Mes1=Mes(data1_DDMMYYYY);
	Var_Mes1=Math.floor(Var_Mes1)-1;
	Var_Ano1=Ano(data1_DDMMYYYY);
	var data1 = new Date(Var_Ano1,Var_Mes1,Var_Dia1);

	Var_Dia2=Dia(data2_DDMMYYYY);
	Var_Mes2=Mes(data2_DDMMYYYY);
	Var_Mes2=Math.floor(Var_Mes2)-1;
	Var_Ano2=Ano(data2_DDMMYYYY);
	var data2 = new Date(Var_Ano2,Var_Mes2,Var_Dia2);

	var diferenca = data1.getTime() - data2.getTime();
	var diferenca = Math.floor(diferenca / (1000 * 60 * 60 * 24));
	return diferenca;
}

function Calcula_Data(data_DDMMYYYY,dias,adicao){
	Var_Dia=Dia(data_DDMMYYYY);
	Var_Mes=Mes(data_DDMMYYYY);
	Var_Mes=Math.floor(Var_Mes)-1;
	Var_Ano=Ano(data_DDMMYYYY);

	var data = new Date(Var_Ano,Var_Mes,Var_Dia);

	if (adicao == true) {
		operacao = '+'
		var diferenca = data.getTime() + (dias * 1000 * 60 * 60 * 24);
	} else 	{
		operacao = '-'
		var diferenca = data.getTime() - (dias * 1000 * 60 * 60 * 24);
	}
	var diferenca = new Date(diferenca);
	Var_Dia=diferenca.getDate();
	Var_Mes=(diferenca.getMonth() + 1);
	Var_Ano=diferenca.getFullYear();

	if (Var_Mes < 10) Var_Mes = "0" + Var_Mes;
	if (Var_Dia < 10) Var_Dia = "0" + Var_Dia;

	diferenca = Var_Dia + '-' + Var_Mes + '-' +  Var_Ano;
	return diferenca;

//	alert(string_data+operacao+dias+' dias = '+diferenca.getDate()+'/'+(parseInt(diferenca.getMonth())+1)+'/'+diferenca.getYear());
}

function calcula_volume(comprimento, largura, altura, total_m3) {
	var total = 0;
	if (largura > 0)
	{
		total = (comprimento * largura);
	}
	if (altura)
	{
		total = (comprimento * largura * altura);
	}
	total = arredondaValor(total, 4);
	total_m3.value = total;
}

/*
Função:                    enviaarquivo
Parâmetros:
campo_upload_imagem        = id do campo file que conterá o endereço da imagem
url_upload_imagem          = url do arquivo php que gerenciará o upload da imagem, a salvará e retornará seu código base64
nome_arquivo_upload_imagem = nome que o arquivo receberá no servidor
largura_upload_imagem      = largura do arquivo final
altura_uplaod_imagem       = algura do arquivo final
Todos os parâmetros são strings
*/

function enviaarquivo(campo_upload_imagem, url_upload_imagem, nome_arquivo_upload_imagem, largura_upload_imagem, altura_upload_imagem){
	nome_campo_upload_imagem = campo_upload_imagem;
	divimg_upload_imagem     = document.getElementById("img_"+nome_campo_upload_imagem);
	campo_upload_imagem      = document.getElementById(nome_campo_upload_imagem);
	formulario_upload_imagem = campo_upload_imagem.form.id;
	form_upload_imagem       = document.getElementById(formulario_upload_imagem);
	url_upload_imagem        += "?nome_arquivo="+nome_arquivo_upload_imagem+"&nome_campo="+nome_campo_upload_imagem+"&largura="+largura_upload_imagem+"&altura="+altura_upload_imagem;
	var iframe_upload_imagem = document.createElement("iframe");
	iframe_upload_imagem.setAttribute("id",nome_campo_upload_imagem+"_iframe");
	iframe_upload_imagem.setAttribute("name",nome_campo_upload_imagem+"_iframe");
	iframe_upload_imagem.setAttribute("width","0");
	iframe_upload_imagem.setAttribute("height","0");
	iframe_upload_imagem.setAttribute("border","0");
	iframe_upload_imagem.setAttribute("style","width: 0; height: 0; border: none;");
	form_upload_imagem.parentNode.appendChild(iframe_upload_imagem);
//	window.frames[nome_campo_upload_imagem+"_iframe"].name=nome_campo_upload_imagem+"_iframe";
	frame_upload_imagem      = document.getElementById(nome_campo_upload_imagem+"_iframe");
	frame_upload_imagem.onload = function (){
		base64_upload_imagem = iframe_upload_imagem.contentWindow.document.body.innerHTML;
		form_upload_imagem.parentNode.removeChild(iframe_upload_imagem);
		divimg_upload_imagem.innerHTML="<img src='data:image/jpeg;base64,"+base64_upload_imagem+"'>"
	};
	url_ant_upload_imagem    = form_upload_imagem.getAttribute("action");
	form_upload_imagem.setAttribute("target",nome_campo_upload_imagem+"_iframe");
	form_upload_imagem.setAttribute("action",url_upload_imagem);
	form_upload_imagem.submit();
	divimg_upload_imagem.innerHTML = "<img src='ajax_loading.gif'>";
	form_upload_imagem.setAttribute("target","top");
	form_upload_imagem.setAttribute("action",url_ant_upload_imagem);
	campo_upload_imagem.value = "";
}

var valores_ja_usados;
var constante_separacao;
valores_ja_usados = new Array();
constante_separacao = ';;;-*/+-*/+=-_+/+*-;;;'
function bloqueia_repetido(radical_campo, campo_atual, numero_linhas, inicial){
	valores_ja_usados[radical_campo] = constante_separacao;
	for(a=inicial;a<=numero_linhas;a++){
		valores_ja_usados[radical_campo] = valores_ja_usados[radical_campo] + document.getElementById(radical_campo + a).value + constante_separacao;
	}
	if (valores_ja_usados[radical_campo].indexOf(campo_atual.value) >= 0){
		numero_primeiro = valores_ja_usados[radical_campo].indexOf(campo_atual.value)+5
		if (valores_ja_usados[radical_campo].indexOf(campo_atual.value,numero_primeiro) >= 0){
			if (campo_atual.value != ""){
				alert("Valor do campo repetido em alguma outra linha!")
				campo_atual.value = ''
			}
		}
	}
}




var total_paginas;

function paginar(id_tabela_paginar,numero_linhas_pagina_paginar,id_lista_paginar,estilo_lista_paginar,primeira_linha){
	tabela_paginar = document.getElementById(id_tabela_paginar);
	linhas_paginar = tabela_paginar.getElementsByTagName("tr");
	listas_paginar = document.getElementById(id_lista_paginar);
	pagina_paginar = 1;
	listas_paginar.setAttribute('style','width:100%;text-align:center;');
	listas_paginar.setAttribute('class',estilo_lista_paginar);
	cardinal_linha_pagina_paginar = 0;
	for (n=primeira_linha;n<linhas_paginar.length;n++){
		if (cardinal_linha_pagina_paginar == numero_linhas_pagina_paginar){
			cardinal_linha_pagina_paginar = 0;
			pagina_paginar += 1;
		} 
		linhas_paginar[n].setAttribute("name","pagina-"+pagina_paginar);
//		linhas_paginar[n].setAttribute("id","pagina-"+pagina_paginar);
		cardinal_linha_pagina_paginar += 1;
	}
	total_paginas = pagina_paginar;
	for (numero=1;numero<=total_paginas;numero++){
		listas_paginar.innerHTML += " <span onclick='set_page("+numero+")'>"+numero+"</span>";
	}
	set_page(1);
}
function set_page(numero_pagina){
	for (numero=1;numero<=total_paginas;numero++){
		id_pagina_atual = "pagina-"+numero;
		linhas_desta_pagina = document.getElementsByName(id_pagina_atual)
		for (numero_linha=0;numero_linha<linhas_desta_pagina.length;numero_linha++){
			linhas_desta_pagina[numero_linha].setAttribute('style',"display:none");
		}
	}
	id_pagina_atual = "pagina-"+numero_pagina;
	linhas_desta_pagina = document.getElementsByName(id_pagina_atual)
	for (numero_linha=0;numero_linha<linhas_desta_pagina.length;numero_linha++){
		linhas_desta_pagina[numero_linha].removeAttribute('style');
	}
}
function trim(str){return str.replace(/^\s+|\s+$/g,"");}
function limpa_form(campo_atual){
	valor_campo_atual = campo_atual.value
	form = campo_atual.form;
	elementos = form.elements;
	numero_elementos = elementos.length;
	for (numero_campo=0;numero_campo<numero_elementos;numero_campo++){
		campo = elementos[numero_campo];
		tipo_campo = campo.tagName;
		if (tipo_campo.toLowerCase() == 'input'){
			if (campo.getAttribute('type').toLowerCase() != 'button' && campo.getAttribute('type').toLowerCase() != 'checkbox'){
				campo.value = '';
			} else {
				campo.checked = false;
			}
		} else {
			campo.value = '';
		}
	}
	campo_atual.value = valor_campo_atual;
}
function limita_data(id_campo_data, data_parametro, limite_minimo, limite_maximo){
	dia_parametro  = data_parametro.substr(0,2);
	mes_parametro  = parseFloat(data_parametro.substr(3,2))-1;
	ano_parametro  = data_parametro.substr(6,4);
	data_parametro = new Date(ano_parametro, mes_parametro, dia_parametro);
	dnum_parametro = data_parametro.getTime();

	campo_data = document.getElementById(id_campo_data);
	data_atual = campo_data.value;
	dia_atual  = data_atual.substr(0,2);
	mes_atual  = parseFloat(data_atual.substr(3,2))-1;
	ano_atual  = data_atual.substr(6,4);
	data_atual = new Date(ano_atual, mes_atual, dia_atual);
	dnum_atual = data_atual.getTime();

	dnum_maximo = dnum_parametro + (limite_maximo * 24 * 60 * 60 * 1000);
	dnum_minimo = dnum_parametro + (limite_minimo * 24 * 60 * 60 * 1000);

	if ((dnum_atual > dnum_maximo) || (dnum_atual < dnum_minimo)){
		data_maxima = new Date(dnum_maximo);
		dia_maximo  = data_maxima.getDate();
		mes_maximo  = parseFloat(data_maxima.getMonth())+1;
		ano_maximo  = data_maxima.getFullYear();
		data_minima = new Date(dnum_minimo);
		dia_minimo  = data_minima.getDate();
		mes_minimo  = parseFloat(data_minima.getMonth())+1;
		ano_minimo  = data_minima.getFullYear();

		document.getElementById(id_campo_data).value = "";
		alert("Data fora do limite!\nEste campo aceita somente valores entre\n" + dia_minimo + "-" + mes_minimo + "-" + ano_minimo + " e " + dia_maximo + "-" + mes_maximo + "-" + ano_maximo + ".")
	}
}

//funcao que muda o estilo de uma linha de uma tabela quando é marcado um checkbox.
var estilo_antigo_array = new Array();
function muda_estilo(linha, estilo, nome_input){
	var teste = document.getElementById('ad1');
	var qtde_item = teste.getElementsByTagName('input').length;
	var nome_campo="";
	var tipo = "";
	var elemento = "";

		var num_linha = parseInt(linha)*parseInt(7);
		
		nome_campo = teste.getElementsByTagName('input')[num_linha].name;
		tipo = teste.getElementsByTagName('input')[num_linha].type;
		elemento = teste.getElementsByTagName('input')[num_linha];
       var selecao_empr = document.getElementById(nome_input+linha);
		 var seleciona_parcial = document.getElementById("seleciona_parcial"+linha);
		
		if(selecao_empr.checked || seleciona_parcial.checked){
			var tr = teste.getElementsByTagName('tr')[linha];
		
			var td = tr.getElementsByTagName('td');
			var estilo_antigo = document.getElementById('estilo_antigo').value;
			var est_antigo = "";
			for(var i_td=0; i_td<td.length; i_td++){
				if(td[i_td].getAttribute('class') == "a21h" || td[i_td].getAttribute('class') == "a6h" )
					est_antigo = td[i_td].getAttribute('class');
				
				td[i_td].setAttribute("class", estilo);
			}
			if(est_antigo == "a21h" || est_antigo == "a6h" ){
			     estilo_antigo_array[linha] = est_antigo;
			}
			return false;
			
		}else{

			var estilo_antigo = estilo_antigo_array[linha];

			var tr = teste.getElementsByTagName('tr')[linha];
			var td = tr.getElementsByTagName('td');
			for(var i_td=0; i_td<td.length; i_td++){
				if(estilo_antigo)
				   td[i_td].setAttribute("class",estilo_antigo);
	
			}
			document.getElementById('estilo_antigo').value="";
		}
	return false;
}

var estilo_antigo_fundo;

function muda_fundo_onfocus(obj, estilo)
{
	estilo_antigo_fundo = obj.className;
	obj.className = estilo_antigo_fundo + ' ' + estilo;
}

function muda_fundo_onblur(obj)
{
	obj.className = estilo_antigo_fundo;
}


function mudar_cor_fundo(obj, sel, nsel)
{
    var tds = obj.parentNode.parentNode.childNodes;
    for(var i = 0; i < obj.parentNode.parentNode.childNodes.length; i++)
    {
        (obj.checked == true) ? tds[i].className = sel : tds[i].className = nsel;
    }
    
}

