//Biblioteca com funções de javascript usadas pelo sistema

//Função para submeter a acao do formulário para o destino escolhido
function Submete( pagina )
	{
	document.forms[0].action = pagina;
	document.forms[0].submit();
	}

// Função utilizada para processar uma ação, submetendo o formulário para a página indicada
function Processa( asPagina, asOpcao )
{
	document.forms[0].fsAcao.value = asOpcao;
	Submete(asPagina );
}


// Função que recebe objeto combo e verifica se foi selecionado algum item
function ValidaCombo( asObjeto, asNome )
{
	if ( !arguments[1] ) asNome = "um item";

	if ( asObjeto.value == "" )
	{
		alert ("Por favor, selecione " + asNome + ".");
		asObjeto.focus();
		return false;

	}
	else
	{
		return true;
	}

}

// Função para Validar asObjeto com aiTamanho caracteres
// Útil para TEXTAREA usando no evento onKeyPress
function LimitaCampo( asObjeto, aiTamanho )
{
	sTexto = asObjeto.value;
	if ( sTexto.length > aiTamanho - 1 )
	{
		return false;
	}
	else
	{
		return true;
	}

}

// Função para substituir string por caracteres maiusculos retirando espaços
function UpperTrim( asObjeto )
{
	asObjeto.value = Trim(asObjeto.value.toUpperCase());
}

// Função para substituir string por caracteres maiusculos retirando espaços limitanto
// em um número de caracteres
function LimitaCampoUpperTrim( asObjeto, aiTamanho )
{
	UpperTrim( asObjeto );
	if (!LimitaCampo( asObjeto, aiTamanho ) ) asObjeto.value = asObjeto.value.substr( 0,aiTamanho );
}

// Função que só permite números
function CampoNumerico( asObjeto )
{
	var sTexto = asObjeto.value;
	asObjeto.value = sTexto.replace(/[^a-z]/,"");
}



// Funções para retirar espaços de uma string
function Trim(texto)
{
  return texto.replace(/(^\s+)|(\s+$)/g,"");
}

function LTrim(texto)
{
  return texto.replace(/(^\s+)/g,"");
}

function RTrim(texto)
{
 return texto.replace(/(\s+$)/g,"");
}

// Função que busca objeto por nome no formulário
function BuscaObjeto(asNomeObjeto)
{
	var iEncontrou = 0;

	// Verifico todos os elementos existentes no formulário
	for (i=0 ; i < document.forms[0].elements.length; i++)
	{
		// Verifico se o elemento é do tipo checkbox
		sNome = document.forms[0].elements[i].name;
		if ( sNome.indexOf(asNomeObjeto) > -1 )
		{
			iEncontrou++;
		}
	}

	if (iEncontrou > 0) return true;
	else return false;
}

// Função que verifica se o valor do campo passado por parametro é diferente de zero
function VerificaPreenchimento(asCampo,asMsg)
{
	if ( Trim(asCampo.value) == "" )
	{
		alert(asMsg);
		sTipo = asCampo.type;
		if ( ( sTipo.indexOf ('button') > -1 ) || ( sTipo.indexOf ('textarea') > -1 ) )
		{
			asCampo.value = Trim(asCampo.value);
		}
		asCampo.focus();
		if (sTipo.indexOf ('select') < 0) asCampo.select();

		return false;
	}
	else
	{
		return true;
	}
}


// Função que ordena uma lista alfabeticamente
function OrdenaLista( asObjeto )
{
	// Verifico se o objeto existe
	if(!asObjeto) return;

	// Crio o Dicionario
	var oCombo = new ActiveXObject("Scripting.Dictionary")

	// Busco todos os elementos
	for ( i = 0; i < asObjeto.options.length; i++ )
	{
		oCombo.Add ( asObjeto.options[i].text , asObjeto.options[i].value );
	}

	// Insiro os itens num vetor
	sKeys = (new VBArray(oCombo.Keys())).toArray();

	// Ordeno os itens no vetor
	sKeys.sort();

	// Limpo a combo
	asObjeto.options.length = 0;

	// Adiciono os itens ordenados
	for ( i = 0; i < oCombo.count;i++)
	{
		//asObjeto.options.length++;
		//asObjeto.options[ asObjeto.options.length -1 ] = new Option(sKeys[i],oCombo.item(sKeys[i]));
		AdicionaItem( asObjeto, oCombo.item(sKeys[i]), sKeys[i] )
	}

	oCombo.removeAll();

}

// Função que verifica se existe algum checkbox selecionado
function VerificaCheckbox( asMensagem )
{
	iNumItens = 0;
	sSelecionados = "";
	iNumChecks = 0;

	// Verifico todos os elementos existentes no formulário
	for (i=0 ; i < document.forms[0].elements.length; i++)
	{
		// Verifico se o elemento é do tipo checkbox
		sTipo = document.forms[0].elements[i].type;
		if ( sTipo.indexOf('checkbox') > -1 )
		{
			// Incremento o número de combos
			iNumChecks++;

			// Verifico se está "checado"
			if ( document.forms[0].elements[i].checked )
			{
				iNumItens++;
			}

		}
	}

	// Verifico o numero de itens "checados"
	if ( iNumItens > 0 )
	{
		return true;
	}
	else
	{
		if ( iNumChecks > 0 )
		{
			alert ( asMensagem );
			return false;
		}
	}
}

/*
 Função que compara datas no
 formato:
	MM/AAAA(asTipoComparacao = 1) OU
	DD/MM/AAAA (asTipoComparacao = 0) que é default
*/
function ComparaData( asDataInicial, asDataFinal , asTipoComparacao )
{

	if ( !arguments[2] ) asTipoComparacao = 0;

	if ( asTipoComparacao == 0 )// formato DD/MM/AAAA
	{
		// Formato as datas para o formato mm/dd/aaaa
		asDataInicial 	= asDataInicial.substr(3,2) + '/' + asDataInicial.substr(0,2) + '/' + asDataInicial.substr(5,4);
		asDataFinal 	= asDataFinal.substr(3,2) + '/' + asDataFinal.substr(0,2) + '/' + asDataFinal.substr(5,4);
	}
	else // formato MM/AAAA
	{
		// Formato as datas para o formato mm/dd/aaaa
		// Como a comparação que interessa é de meses, seto como 01 o dia
		asDataInicial 	= asDataInicial.substr(0,2) + '/' +  '01/' + asDataInicial.substr(3,4);
		asDataFinal 	= asDataFinal.substr(0,2) + '/' + '01/' + asDataFinal.substr(3,4);
	}

	// Agora comparo as datas e verifico se a inicial é maior ou menor que a final
	if ( Date.parse( asDataInicial ) > Date.parse( asDataFinal ) ) return false; else return true;

}

// Função que busca qual o indice cujo valor pertence
function BuscaIndice(asObjeto, asValor)
{
	// Busco todos os elementos
	for ( i = 0; i < asObjeto.options.length; i++ )
	{
		sValue = asObjeto.options[i].value;
		if ( sValue == asValor ) return i;
	}

	//return -1;
}

// Função que seleciona o indice passado por parametro
function SelecionaIndice(asObjeto, asValor)
{
	if (!asValor) return;
	var iIndice = BuscaIndice(asObjeto, asValor);
	if ( iIndice < 0 ) return;

	asObjeto.options[iIndice].selected = true;

}

//Função que transfere dados de uma combo para outra, esvaziando antes a combo de destino
function TransfereCombo( asObjetoOrigem, asObjetoDestino)
{
	asObjetoDestino.options.length = 0;
	if (!asObjetoOrigem) return;
	// Busco todos os elementos da combo
	for ( i = 0; i < asObjetoOrigem.options.length; i++ )
	{
		AdicionaItem( asObjetoDestino, asObjetoOrigem.options[i].value, asObjetoOrigem.options[i].text, asObjetoOrigem.options[i].selected );
	}

}

// Função que adiciona um option numa combo // somente para ie 5.5 e ne 7(testados)
function AdicionaItem( asObjeto, asValor, asTexto, abSelecionado )
{
	var NS4 = (navigator.appName == "Netscape" && parseInt(navigator.appVersion) < 5);
	var NSX = (navigator.appName == "Netscape");
	var IE4 = (document.all) ? true : false;

	// para garantir que este parametro foi passado
	if (!abSelecionado) abSelecionado = false;

	//asObjeto.options.length++;
	//asObjeto.options[asObjeto.options.length-1] = new Option( asValor, asTexto );
	//var newoption = new Option(asTexto, asValor, true, true);
	//asObjeto.options[asObjeto.length] = newoption;

	if (NSX)
	{
		var newOpt  = new Option(asTexto, asValor );
		var sTamanho = asObjeto.length;
		asObjeto.options[sTamanho] = newOpt;
		asObjeto.options[sTamanho].selected = abSelecionado;
	}
	else if (IE4)
	{
		var newOpt = document.createElement("OPTION");
		newOpt.text=asTexto;
		newOpt.value=asValor;
		newOpt.selected = abSelecionado;
		asObjeto.add(newOpt);
	}
}

// Função que remove item de option através do text
function RemoveItem(asObjeto, aiIndice )
{
	asObjeto.options[ aiIndice ] = null;
}

// Função que abre popup
function AbrePop(urlLoc,sNome,larg,alt) {
  var _winName = sNome;
  var _info  = "toolbar=no";   // yes|no
  _info += ",location=no";     // yes|no
  _info += ",directories=no";  // yes|no
  _info += ",status=no";      // yes|no
  _info += ",menubar=no";      // yes|no
  _info += ",scrollbars=no"; // auto|yes|no
  _info += ",resizable=no";   // yes|no
  _info += ",dependent";       // close the parent, close the popup, omit if you want otherwise
  _info += ",width=" + larg;       //largura em pixels
  _info += ",height=" + alt;      //altura em pixels
  //alert(sNome)
  var DispWin=window.open(urlLoc,_winName,_info);
}

// Função que converte um array para uma string, onde é possível indicar o caracter separador
function ArrayToString( avArray, asSeparador )
{
	var sAux = "";
	for ( i = 0; i < avArray.length; i++ )
	{
		if ( sAux != "" )	sAux = sAux + asSeparador + avArray[i];
		else sAux = sAux + avArray[i];
	}

	return sAux;
}

// Função que move os items selecionados para cima
function ParaCima( asObjeto )
{
	// Busco todos os itens selecionados na lista de campos selecionados
	for ( i = 0; i < asObjeto.options.length ; i++)
	{
		// Verifico se o campos estão selecionados
		if ( asObjeto.options[ i ].selected )
		{

			// Tenho que verificar se o item selecionado não é o primeiro
			if ( i > 0 )
			{
				if ( (asObjeto.options[ i ].selected) != (asObjeto.options[ i - 1].selected ) )
				{
					// Busco os valores dos campos selecionados
					sTextoAnterior = asObjeto.options[ i - 1  ].text;
					sValorAnterior = asObjeto.options[ i - 1 ].value;
					sTexto = asObjeto.options[ i ].text;
					sValor = asObjeto.options[ i ].value;

					// Altero os valores
					asObjeto.options[ i - 1 ].text  = sTexto
					asObjeto.options[ i - 1 ].value = sValor

					asObjeto.options[ i ].text  = sTextoAnterior
					asObjeto.options[ i ].value = sValorAnterior

					// Altero os valores selecionados também
					asObjeto.options[ i ].selected = false;
					asObjeto.options[ i - 1 ].selected = true;
				}

			}
		}
	}
}

// Função que move para baixo os itens selecionados
function ParaBaixo( asObjeto )
{
	// Busco todos os itens selecionados na lista de campos selecionados
	for ( i = asObjeto.options.length -1 ; i >= 0  ; i--)
	{
		// Verifico se o campos estão selecionado
		if ( asObjeto.options[ i ].selected )
		{
			// Tenho que verificar se o item selecionado não é o último
			if ( i < ( asObjeto.options.length - 1 ) )
			{
				if ( asObjeto.options[ i ].selected != asObjeto.options[ i + 1].selected )
				{
					// Busco os valores dos campos selecionados
					sTextoAnterior = asObjeto.options[ i + 1  ].text;
					sValorAnterior = asObjeto.options[ i + 1  ].value;
					sTexto = asObjeto.options[ i ].text;
					sValor = asObjeto.options[ i ].value;

					// Altero os valores
					asObjeto.options[ i + 1 ].text  = sTexto;
					asObjeto.options[ i + 1 ].value = sValor;
					asObjeto.options[ i ].text  = sTextoAnterior;
					asObjeto.options[ i ].value = sValorAnterior;

					// Altero os valores selecionados também
					asObjeto.options[ i ].selected = false;
					asObjeto.options[ i + 1 ].selected = true;
				}
			}
		}
	}
}

// função que remove um item por valor
function RemoveItemPorValor( asObjeto, asValor )
{
	// Verifico se existe este valor no objeto
	var iIndice = BuscaIndice(asObjeto, asValor );

	// Se foi encontrado, removo o item
	if ( iIndice > - 1 )
	{
		RemoveItem( asObjeto, iIndice );
	}

}

/*
	Abre uma popup nova, submetendo o form aoForm.

	RECEBE:

		object			Form que será submetido e cujo target será a popup aberta
		String			Nome da tela popup
		String			Parâmetros de Altura e Largura para o comando window.open()

	RETORNA:
		<nada>
*/
function AbrePopupSubmit( aoForm, asNome, asAltura, asLargura )
	{

	// Parametros adicionais que não são obrigatórios
	// asResizale
	// asScrollbars

	if ( !arguments[4] ) asResizable = "no";
   else asResizable = arguments[4];

   if ( !arguments[5] ) asScrollbars = "no";
   else asScrollbars = arguments[5];

	var _info  = "toolbar=no";   					// yes|no
	  _info += ",location=no";     				// yes|no
	  _info += ",directories=no";  				// yes|no
	  _info += ",status=no";      				// yes|no
	  _info += ",menubar=no";      				// yes|no
	  _info += ",scrollbars=" + asScrollbars; // auto|yes|no
	  _info += ",resizable=" + asResizable;   // yes|no
	  _info += ",dependent";       				// close the parent, close the popup, omit if you want otherwise
	  _info += ",width="  + asLargura;       //largura em pixels
	  _info += ",height=" + asAltura;      	//altura em pixels


	// Armazeno o target atual para guardá-lo novamente
	var sTarget = aoForm.target;

	// Altero o target
	aoForm.target = asNome;

	w = window.open(	"", asNome, _info );

	w.focus();

	aoForm.submit();

	// Altero o target para o valor anterior
	aoForm.target = sTarget;

	}


// Esta função é a mesma queLimitaCampo // retirar do código onde é usado depois
// controla o máximo de caracteres para uma textarea
// parâmetros:
// oCampo -> nome do campo
// iTamMax -> tamanho máximo de caracteres no campo
// exemplo: onKeyDown = "javascript:controlaMaxCaracteres( nomeCampo, 255 );"
function controlaMaxCaracteres( oCampo, iTamMax )
	{
	tecla = event.keyCode;

	// se for diferente de backspace, delete e as setas direcionais e atingir o máximo
	// de caracteres, não podem ser entrados caracteres
	if(  tecla != 37 && tecla != 38 && tecla != 39 && tecla != 40
	  && tecla != 8 && tecla != 46 && oCampo.value.length >= iTamMax )
		return false;
	else
		return true;
	}

// Função que imprime a página escondendo os layers existentes,
// que não devem aparecer na impressão
// Os layers são separados por "|". Exemplo imprimir('layer1|layer2');
function imprimir(sNomeLayer)
{
	// Se a variável estiver vazia, imprimo a página assim mesmo
	if (!sNomeLayer)
	{
		alert("Imprimiu!");
		//window.print();
		return;
	}

	// Busco o nome de todos os layers
	aNomeLayer = sNomeLayer.split("|");

	// Torno os layers invisíveis
	for (i = 0; i < aNomeLayer.length; i++)
	{
		EscondeLayer ( aNomeLayer[i] );
	}
	//alert("Imprimiu!");
	window.print();

	// Torno os layers invisíveis
	for (i = 0; i < aNomeLayer.length; i++)
	{
		ExibeLayer( aNomeLayer[i] );
	}
}

// Função que exibe layer com o nome igual a asLayer
function ExibeLayer( asLayer )
{
	document.getElementById(asLayer).style.visibility = 'visible';
}

// Função que esconde layer com o nome igual a asLayer
function EscondeLayer( asLayer )
{
	document.getElementById(asLayer).style.visibility = 'hidden';
}