// Seta o método que deverá ser chamado na action.
function setMethod(method)
{
	for (var i = 0; i < document.forms.length; i++)
		document.forms[i].method.value = method;
}

// Seta para onde a action deverá ir se não houver excessão.
function setForward(forward)
{
	for (var i = 0; i < document.forms.length; i++)
		document.forms[i].forward.value = forward;
}

// Seta se é necessário ou não realizar a validação do form.
function setValidate(validate)
{
	for (var i = 0; i < document.forms.length; i++)
		document.forms[i].validate.value = validate;
}

// Seta a página atual da paginação.
function setPagingCurrentPage(currentPage)
{
	for (var i = 0; i < document.forms.length; i++)
		document.forms[i].pagingCurrentPage.value = currentPage;
}

// Seta o arquivo xml que deverá ser utilizado na criação do relatório.
function setXmlFile(xmlFile)
{
	for (var i = 0; i < document.forms.length; i++)
	{
		document.forms[i].xmlFile.value = xmlFile;
		document.forms[i].isReport.value = 'true';
	}
}

// Seta os arquivos xml que serão utilizados como subreport na criação do relatório.
function setSubreportXmlFiles(xmlFiles)
{
	for (var i = 0; i < document.forms.length; i++)
	{
		document.forms[i].subreportXmlFiles.value = xmlFiles;
	}
}

// Realiza uma determinada ação efetuando um submit no form.
function doSubmit(method, id, validate)
{
	for (var i = 0; i < document.forms.length; i++)
	{
		if (validate)
			document.forms[i].validate.value = 'true';
		else
			document.forms[i].validate.value = 'false';
	
		document.forms[i].id.value = id;
		document.forms[i].method.value = method;
		document.forms[i].submit();
	}
}

// Formata um campo como data (Ex.: 12/05/2007)
function formatDate(field, eventObject)
{
	// Recupera a tecla pressionada
	var key = getKeyPressed(eventObject);
	// Se for uma das teclas permitidas, não executa a função
	if (checkAllowedKeysOnFormat(key))
		return true;
	
	// Possíveis caracteres
	var possibleChars = '0123456789';
	if (possibleChars.indexOf(String.fromCharCode(key)) == -1)
		return false;

	// Verifica se existe alguma seleção no campo (se existir, apaga a seleção)
	checkSelectionOnFormat(field);
	
	// Recupera somente os números da string
	var value = getOnlyNumbers(field.value);

	// Verifica se o número máximo de caracteres foi ultrapassado
	if (value.length == 8)
		return false;
	
	// Coloca a '/' antes do ano
	if (value.length >= 4)
	{
		value = value.substring(0,4) + '/' + value.substring(4);
	}

	// Coloca a '/' antes do mês
	if (value.length >= 2)
	{
		value = value.substring(0,2) + '/' + value.substring(2);
	}

	// Coloca a data formatada no campo
	field.value = value;
	// Retorna true
	return true;
}

// Formata um campo como data e hora (Ex.: 12/05/2007 15:55)
function formatDateTime(field, eventObject)
{
	// Recupera a tecla pressionada
	var key = getKeyPressed(eventObject);
	// Se for uma das teclas permitidas, não executa a função
	if (checkAllowedKeysOnFormat(key))
		return true;

	// Possíveis caracteres
	var possibleChars = '0123456789';
	if (possibleChars.indexOf(String.fromCharCode(key)) == -1)
		return false;
	
	// Verifica se existe alguma seleção no campo (se existir, apaga a seleção)
	checkSelectionOnFormat(field);
	
	// Recupera somente os números da string
	var value = getOnlyNumbers(field.value);

	// Coloca os ':' antes dos minutos
	if (value.length >= 10)
	{
		value = value.substring(0,10) + ':' + value.substring(10);
	}
	
	// Coloca o espaço após a data (ano)
	if (value.length >= 8)
	{
		value = value.substring(0,8) + ' ' + value.substring(8);
	}

	// Coloca a '/' antes do ano
	if (value.length >= 4)
	{
		value = value.substring(0,4) + '/' + value.substring(4);
	}

	// Coloca a '/' antes do mês
	if (value.length >= 2)
	{
		value = value.substring(0,2) + '/' + value.substring(2);
	}

	// Coloca a data formatada no campo
	field.value = value;	
	// Retorna true
	return true;
}

// Formata um campo como moeda (Ex.: 1.500,00)
function formatCurrency(field, eventObject)
{
	// Recupera a tecla pressionada
	var key = getKeyPressed(eventObject);
	// Se for uma das teclas permitidas, não executa a função
	if (checkAllowedKeysOnFormat(key))
		return true;

	// Possíveis caracteres
	var possibleChars = '0123456789';
	if (possibleChars.indexOf(String.fromCharCode(key)) == -1)
		return false;
	
	// Verifica se existe alguma seleção no campo (se existir, apaga a seleção)
	checkSelectionOnFormat(field);
	
	// Recupera somente os números
	var value = getOnlyNumbers(field.value);
	var length = value.length;

	// Se após a formatação o tamanho da string for maior que 2, coloca a vírgula.
	if (length >= 2)
		value = value.substring(0, length - 1) + "," + value.substring(length - 1);

	// Desconsidera a string a partir da vírgula
	length = length - 1;

	// Coloca o ponto de 3 em 3 caracteres.
	while (value.substring(0, length).length > 3)
	{
		length = length - 3;
		value = value.substring(0, length) + "." + value.substring(length);
	}

	// Coloca o valor formatado no campo.
	field.value = value;
}

// Libera somente os caracteres numéricos
function formatOnlyNumber(field, eventObject)
{
	// Recupera a tecla pressionada
	var key = getKeyPressed(eventObject);
	// Se for uma das teclas permitidas, não executa a função
	if (checkAllowedKeysOnFormat(key))
		return true;

	// Possíveis caracteres
	var possibleChars = '0123456789';
	if (possibleChars.indexOf(String.fromCharCode(key)) == -1)
		return false;
	
	// Verifica se existe alguma seleção no campo (se existir, apaga a seleção)
	checkSelectionOnFormat(field);
	
	// Coloca somente os números no campo de texto em questão
	field.value = getOnlyNumbers(field.value);
	// Retorna true
	return true;
}

// Formata um campo como número de telefone (8 dígitos) (Ex.: 3322-3344)
function formatPhone(field, eventObject)
{
	// Recupera a tecla pressionada
	var key = getKeyPressed(eventObject);
	// Se for uma das teclas permitidas, não executa a função
	if (checkAllowedKeysOnFormat(key))
		return true;

	// Possíveis caracteres
	var possibleChars = '0123456789';
	if (possibleChars.indexOf(String.fromCharCode(key)) == -1)
		return false;
	
	// Verifica se existe alguma seleção no campo (se existir, apaga a seleção)
	checkSelectionOnFormat(field);
	
	// Recupera somente os números da string
	var value = getOnlyNumbers(field.value);

	// Coloca a '/' antes do ano
	if (value.length >= 4)
	{
		value = value.substring(0,4) + '-' + value.substring(4);
	}

	// Coloca a data formatada no campo
	field.value = value;	
	// Retorna true
	return true;
}

//Formata um campo como telefone com DDD (Ex.: (41) 3322-4455)
function formatPhoneDDD(field, eventObject)
{
	// Recupera a tecla pressionada
	var key = getKeyPressed(eventObject);
	// Se for uma das teclas permitidas, não executa a função
	if (checkAllowedKeysOnFormat(key))
		return true;

	// Possíveis caracteres
	var possibleChars = '0123456789';
	if (possibleChars.indexOf(String.fromCharCode(key)) == -1)
		return false;
	
	// Verifica se existe alguma seleção no campo (se existir, apaga a seleção)
	checkSelectionOnFormat(field);
	
	// Recupera somente os números da string
	var value = getOnlyNumbers(field.value);
	
	// Verifica se ultrapassou o número máximo de caracteres
	if (value.length > 10)
		value = value.substring(0, 10);

	// Coloca o hífen no final
	if (value.length >= 6) {
		value = value.substring(0,6) + '-' + value.substring(6);
	}

	// Coloca o fecha parêntesis )
	if (value.length >= 2) {
		value = value.substring(0,2) + ') ' + value.substring(2);
	}

	// Coloca o segundo ponto
	if (value.length > 0) {
		value = '(' + value;
	}

	// Coloca a data formatada no campo
	field.value = value;	
	// Retorna true
	return true;
}

// Formata um campo como CEP (Ex.: 00000-000)
function formatCep(field, eventObject)
{
	// Recupera a tecla pressionada
	var key = getKeyPressed(eventObject);
	// Se for uma das teclas permitidas, não executa a função
	if (checkAllowedKeysOnFormat(key))
		return true;

	// Possíveis caracteres
	var possibleChars = '0123456789';
	if (possibleChars.indexOf(String.fromCharCode(key)) == -1)
		return false;
	
	// Verifica se existe alguma seleção no campo (se existir, apaga a seleção)
	checkSelectionOnFormat(field);
	
	// Recupera somente os números da string
	var value = getOnlyNumbers(field.value);

	// Coloca o '-' após os 5 primeiros dígitos
	if (value.length >= 5)
	{
		value = value.substring(0,5) + '-' + value.substring(5);
	}

	// Coloca a data formatada no campo
	field.value = value;	
	// Retorna true
	return true;
}

// Formata um campo como CPF (Ex.: 000.000.000-00)
function formatCpf(field, eventObject)
{
	// Recupera a tecla pressionada
	var key = getKeyPressed(eventObject);
	// Se for uma das teclas permitidas, não executa a função
	if (checkAllowedKeysOnFormat(key))
		return true;

	// Possíveis caracteres
	var possibleChars = '0123456789';
	if (possibleChars.indexOf(String.fromCharCode(key)) == -1)
		return false;
	
	// Verifica se existe alguma seleção no campo (se existir, apaga a seleção)
	checkSelectionOnFormat(field);
	
	// Recupera somente os números da string
	var value = getOnlyNumbers(field.value);
	
	// Verifica se o número máximo de caracteres foi ultrapassado
	if (value.length == 11)
		return false;

	// Coloca a barra no final '/'
	if (value.length >= 9) {
		value = value.substring(0,9) + '-' + value.substring(9);
	}

	// Coloca o segundo '.'
	if (value.length >= 6) {
		value = value.substring(0,6) + '.' + value.substring(6);
	}

	// Coloca o primeiro '.'
	if (value.length >= 3) {
		value = value.substring(0,3) + '.' + value.substring(3);
	}

	// Coloca a data formatada no campo
	field.value = value;	
	// Retorna true
	return true;
}

// Formata um campo como CNPJ (Ex.: 00.000.000/0000-00)
function formatCnpj(field, eventObject)
{
	// Recupera a tecla pressionada
	var key = getKeyPressed(eventObject);
	// Se for uma das teclas permitidas, não executa a função
	if (checkAllowedKeysOnFormat(key))
		return true;

	// Possíveis caracteres
	var possibleChars = '0123456789';
	if (possibleChars.indexOf(String.fromCharCode(key)) == -1)
		return false;
	
	// Verifica se existe alguma seleção no campo (se existir, apaga a seleção)
	checkSelectionOnFormat(field);
	
	// Recupera somente os números da string
	var value = getOnlyNumbers(field.value);
	
	// Verifica se ultrapassou o número máximo de caracteres
	// Verifica se o número máximo de caracteres foi ultrapassado
	if (value.length == 14)
		return false;

	// Coloca o hífen no final
	if (value.length >= 12) {
		value = value.substring(0,12) + '-' + value.substring(12);
	}

	// Coloca a barra
	if (value.length >= 8) {
		value = value.substring(0,8) + '/' + value.substring(8);
	}

	// Coloca o segundo ponto
	if (value.length >= 5) {
		value = value.substring(0,5) + '.' + value.substring(5);
	}
	
	// Coloca o primeiro ponto
	if (value.length >= 2) {
		value = value.substring(0,2) + '.' + value.substring(2);
	}

	// Coloca a data formatada no campo
	field.value = value;	
	// Retorna true
	return true;
}

// Retorna somente os caracteres numéricos de uma string
function getOnlyNumbers(string)
{
	var currentChar;
	var value = '';

	// Percorre a string
	for (var i = 0; i <= string.length; i++)
	{
		// Recupera o caractere atual
		currentChar = string.charAt(i);

		// Se não for número, remove da nova string (value)
		if (currentChar >= '0' && currentChar <= '9')
		{
			value += currentChar;
		}
	}
	
	// Retorna o valor desejado
	return value;
}

// Verifica se a tecla pressionada é uma das permitidas
function checkAllowedKeysOnFormat(key) {
	// Se for tab(9), backspace(8), shift(16), end(35), home(36), left(37), right(39) ou delete(46), retorna true
	if (key == 9 || key == 8 || key == 16 || key == 35 || key == 36 || key == 37 || key == 39 || key == 46)
		return true;
	// Caso contrário, retorna false
	return false;
}

// Verifica se existe alguma seleção no campo (se existir, apaga a seleção)
function checkSelectionOnFormat(field) {

	// (Não funciona no IE, serve somente para os outros browsers)
	if (field.selectionStart != null && field.selectionEnd != null) {
		if (field.selectionStart < field.selectionEnd)
			field.value = field.value.substring(0, field.selectionStart) + field.value.substring(field.selectionEnd);
	}
}

// Desabilita o enter de um documento.
function disableEnter(eventObject)
{
	// Recupera a tecla pressionada
	var key = getKeyPressed(eventObject);

	if (key == 13)
		return false;
}

// Desabilita os submits de um documento.
function disableSubmits()
{
	var inputs = document.getElementsByTagName("INPUT");
	
	for (var i = 0; i < inputs.length; i++)
	{
		if (inputs[i].type.toUpperCase() == "SUBMIT" || inputs[i].type.toUpperCase() == "BUTTON")
			inputs[i].disabled = true;
	}
}

// Abre uma tela de relatório
function openReport(link, screenName)
{
	window.open(link, screenName, 'top=0,left=0,width=750,height=550,resizable=yes');
}

// Muda a classe css de um determinado objeto
function changeObjectClass(object, newClassName)
{
	object.className = newClassName;
}

// Quando um número x de caracteres for digitado, pula para o campo target.
function gotoNextField(source, target, charsNumber, eventObject)
{
	// Recupera a tecla pressionada
	var key = getKeyPressed(eventObject);

	if (source.value.length == charsNumber && key != 16 && key != 9)
		target.focus();
}

// Corta os espaços em branco das bordas (esquerda e direita) de uma string
function trim(sString)
{
	while (sString.substring(0,1) == ' ')
	{
		sString = sString.substring(1, sString.length);
	}

	while (sString.substring(sString.length-1, sString.length) == ' ')
	{
		sString = sString.substring(0,sString.length-1);
	}

	return sString;
}

// Recupera a tecla pressionada (no internet explorer e no firefox)
function getKeyPressed(eventObject)
{
	// Verifica se o objeto evento foi passado como parâmetro
	if (!eventObject)
		eventObject = window.event;

	// Recupera a tecla pressionada para diversos navegadores
	if (eventObject.keyCode)
		return eventObject.keyCode;
	else if (eventObject.witch)
		return eventObject.which;
	else if (eventObject.charCode)
		return eventObject.charCode;

	return 0;
}

// Verifica se o número máximo de caracteres em uma textarea não foi ultrapassado,
// e mostra um texto informativo indicando o número de caracteres ainda disponíveis.
function formatTextareaMaxlength(maxlength, textareaObject, infoObject, maxlengthColor)
{
	// Se nenhuma cor for passada como parâmetro, utiliza o padrão vermelho
	if (!maxlengthColor)
		maxlengthColor = 'red';

	// Recupera o texto da textarea
	var text = textareaObject.value;
	
	// Se ultrapassou o limite de caracteres, seta a fonte para vermelho (ou a cor passada como parâmetro)
	if (text.length > maxlength)
	{
		text = text.substr(0, maxlength);
		textareaObject.value = text;
	}
	// Caso contrário, volta à cor normal
	else
	{
		infoObject.style.color = '';
	}

	// Se o número de caracteres estiver no limite, muda a cor da fonte
	// Isto é necessário
	if (text.length == maxlength)
		infoObject.style.color = maxlengthColor;

	// Altera o texto informativo do número máximo de caracteres
	infoObject.innerHTML = '(Você ainda pode digitar ' + (maxlength - text.length) + ' caracteres)';
}

// Verifica se uma string é vazia ou nula
function isBlankOrNull(value) {
	if (value == null || trim(value).length == 0)
		return true;
	return false;
}

// Valida um campo inteiro
function validateInteger(value) {
	var integerPattern = /^(\d)+$/;
	return integerPattern.test(value);
}

// Valida um campo inteiro
function validateZipCode(value) {
	var zipPattern = /^(\d{5})(-)(\d{3})$/;
	return zipPattern.test(value);
}

// Valida um campo moeda
function validateDecimalCurrency(value) {
	var integerPattern = /^(\d{1,3})(.\d{3})*(,\d{2})$/;
	return integerPattern.test(value);
}

//Valida um e-mail
function validateEmail(value) {
	var emailPattern = /^([a-zA-Z0-9_.-])+@([a-zA-Z0-9_.-])+(\.[a-zA-Z]+)+$/;
	return emailPattern.test(value);
}

// Remove os espaços de uma string
function removeSpaces(str) {
	return str.split(' ').join('');
}

// Substitui todas as ocorrências de um texto em uma string
function replaceAll(string, token, newtoken) {
	while (string.indexOf(token) != -1) {
 		string = string.replace(token, newtoken);
	}
	return string;
}

// Retorna true se todos os elementos de uma multibox ou radio button estão desmarcados
function isMultiboxFullyUnchecked(element) {
	// Se o elemento for uma coleção, percorre e verifica se todos estão desmarcados
	if (element.length) {
		// Variável para controlar se todos os elementos estão desmarcados
		var allUnchecked = true;
		// Percorre a coleção
		for (var i = 0; i < element.length; i++) {
			// Verifica se o elemento atual está marcado
			if (element[i].checked) {
				allUnchecked = false;
				break;
			}
		}
		
		// Retorna se todos os elementos estão desmarcados (true) ou não (false)
		return allUnchecked;
	}
	// Se o elemento não possuir o atributo length (somente 1 checkbox ou 1 radio)
	// e ele estiver desmarcado, retorna true
	else if (!element.checked)
		return true;
	
	// Retorna falso
	return false;
}

// Retorna o valor selecionado de um radio
function getRadioCheckedValue(radio) {
	if (radio.length == null)
		return radio.value;
	
	for (var i = 0; i < radio.length; i++) {
		if (radio[i].checked)
			return radio[i].value;
	}
}

// Compara dois textos (case insensitive)
function compareText(opt1, opt2) { 
	return opt1.text.toLowerCase() < opt2.text.toLowerCase() ? -1 : 
	opt1.text.toLowerCase() > opt2.text.toLowerCase() ? 1 : 0; 
}

// Compara dois textos (case sensitive)
function compareTextCaseSensitive (opt1, opt2) { 
	return opt1.text < opt2.text ? -1 : 
	opt1.text > opt2.text ? 1 : 0; 
}

// Ordena uma list box (elemento select)
function sortListBox(pListBox, compareFunction) {
	if (!compareFunction) 
		compareFunction = compareText; 

	var options = new Array (pListBox.options.length); 
	for (var i = 0; i < options.length; i++) 
		options[i] = new Option( 
				pListBox.options[i].text, 
				pListBox.options[i].value, 
				pListBox.options[i].defaultSelected, 
				pListBox.options[i].selected 
		); 
	options.sort(compareFunction); 
	pListBox.options.length = 0; 
	for (var i = 0; i < options.length; i++) 
		pListBox.options[i] = options[i];
}

// Move todas as options de um select para outro
function slds_moveAll(source, target, sort) {
	if (source.length > 0) {
		jQuery(target).html(target.innerHTML + source.innerHTML);
		jQuery(source).html('');
	}
	
	if (sort != null && sort == true)
		sortListBox(target);
}

// Move apenas as options selecionadas de um select para outro
function slds_moveSelected(source, target, sort) {
	var elementsMoved = new Array();

	for (var i = 0; i < source.length; i++) {
		if (source[i].selected) {
			var opt = new Option(source[i].innerHTML, source[i].value);
			opt.style.fontStyle = source[i].style.fontStyle;
			target[target.length] = opt;
			elementsMoved.push(source[i]);
		}
	}

	for (var i = 0; i < elementsMoved.length; i++)
		source.removeChild(elementsMoved[i]);
	
	if (sort != null && sort == true)
		sortListBox(target);
}

// Move as options selecionadas para cima
function slds_moveUp(selectObj) {
	for (var i = 0; i < selectObj.length; i++) {
		if (selectObj[i].selected) {
			if (i == 0)
				break;

			// Stores the selected value and inner html
			var selectedValue = selectObj[i].value;
			var selectedInnerHTML = selectObj[i].innerHTML;
			var selectedStyle = selectObj[i].style.fontStyle;

			// Changes the options
			selectObj[i] = new Option(selectObj[i - 1].innerHTML, selectObj[i - 1].value);
			selectObj[i].style.fontStyle = selectObj[i - 1].style.fontStyle;
			selectObj[i - 1] = new Option(selectedInnerHTML, selectedValue);
			selectObj[i - 1].selected = true;
			selectObj[i - 1].style.fontStyle = selectedStyle;
		}
	}
}

// Move as options selecionadas para baixo
function slds_moveDown(selectObj) {
	for (var i = selectObj.length - 1; i >= 0; i--) {
		if (selectObj[i].selected) {
			if (i == selectObj.length - 1)
				break;

			// Stores the selected value and inner html
			var selectedValue = selectObj[i].value;
			var selectedInnerHTML = selectObj[i].innerHTML;
			var selectedStyle = selectObj[i].style.fontStyle;

			// Changes the options
			selectObj[i] = new Option(selectObj[i + 1].innerHTML, selectObj[i + 1].value);
			selectObj[i].style.fontStyle = selectObj[i + 1].style.fontStyle;
			selectObj[i + 1] = new Option(selectedInnerHTML, selectedValue);
			selectObj[i + 1].selected = true;
			selectObj[i + 1].style.fontStyle = selectedStyle;
		}
	}
}

// Cria a URL com as options selecionadas em um select
function slds_getSelectedOptionsUrl(selectObj, parameterName) {
	// Creates the parameters string
	var pars = '';
	// Iterates the combo box and concatenates the selected options to the parameters
	for (var i = 0; i < selectObj.length; i++) {
		pars += '&' + parameterName + '=' + selectObj[i].value;
	}
	// Returns the parameters
	return pars;
}

// Checa se um id esta presente em um object select
function slds_isIdPresent(selectObj, id) {
	for (var i = 0; i < selectObj.length; i++) {
		if (selectObj[i].value == id)
			return true;
	}
	
	return false;
}

//Variável para controlar a página atual da display tag
currentDisplayTagPage = null;

// Variável para controlar a última busca realizada pelo usuário
lastUserSearch = null;

// Atualiza a página atual da display tag (função chamada no retorno da troca de páginas da display tag)
function updateDisplayTagCurrentPage() {
	currentDisplayTagPage = $('currentDisplayTagPage').value;
}

// Recupera a página atual da display tag
function getDisplayTagCurrentPage(maxPageRecords) {
	// Cria a variável
	var pars = '';
	// Concatena a página atual (se existir)
	if (currentDisplayTagPage != null && currentDisplayTagPage.length > 0)
		pars += '&' + currentDisplayTagPage;
	// Concatena o número máximo de páginas
	pars += '&maxPageRecords=' + maxPageRecords;
	// Retorna o parâmetro montado
	return pars;
}

// Limpa página atual da display tag
function clearDisplayTagCurrentPage() {
	currentDisplayTagPage = null;
}

//Variável para controlar a página atual da display tag dentro da lightbox
currentDisplayTagPageLightbox = null;

//Atualiza a página atual da display tag dentro da lighbox (função chamada no retorno da troca de páginas da display tag dentro da lightbox)
function updateDisplayTagCurrentPageLightbox() {
	currentDisplayTagPageLightbox = $('currentDisplayTagPageLightbox').value;
}

//Recupera a página atual da display tag dentro da Lightbox 
function getDisplayTagCurrentPageLightbox(maxPageRecords) {
	// Cria a variável
	var pars = '';
	// Concatena a página atual (se existir)
	if (currentDisplayTagPageLightbox != null && currentDisplayTagPageLightbox.length > 0)
		pars += '&' + currentDisplayTagPageLightbox;
	// Concatena o número máximo de páginas
	pars += '&maxPageRecords=' + maxPageRecords;
	// Concatena o parâmetro indicando q a display tag está em uma lightbox
	pars += '&currentDisplayTagPageLightbox=true';
	// Retorna o parâmetro montado
	return pars;
}

//Limpa página atual da display tag
function clearDisplayTagCurrentPageLightbox() {
	currentDisplayTagPageLightbox = null;
}

// Controle da busca rápida (busca no onkeyup)- concatena o parâmetro na requisição ajax
function getLastUserSearchParameter() {
	// Seta o tempo atual em milisegundos como sendo a última busca do usuário
	lastUserSearch = new Date().getTime();
	// Retorna o parâmetro que será concatenado na requisição ajax
	return '&currentSearchId=' + lastUserSearch;
}

// Controle da busca rápida (busca no onkeyup) - avalia a resposta
function lastUserSearchResponse(serverResponse, elementToUpdate) {
	
	// Se a resposta não for vazia e o texto da busca atual estiver presenta, coloca a resposta no elemento
	if (serverResponse.length > 0) {
		
		// Se o texto currentSearchId estiver presente na resposta,
		// verifica se ela é igual a última consulta feita pelo usuário
		if (serverResponse.indexOf('currentSearchId') != -1) {
			// Recupera a consulta atual (presente na resposta
			var currentSearchId = serverResponse.substring(serverResponse.indexOf('currentSearchId') + 16, serverResponse.indexOf('currentSearchId') + 16 + 13);

			// Se a busca atual for igual a última busca feita pelo usuário, seta a resposta no elemento
			if (parseInt(currentSearchId) >= lastUserSearch) {
				$(elementToUpdate).innerHTML = serverResponse;
				$(elementToUpdate).show();
				// Avalia os scripts na resposta
				serverResponse.evalScripts();
			}
		}
	}
}

//Cria os datepickers de acordo com a função onkeypress
function createDatepickers() {
	var inputTypeTextArray = $$('input');
	for (var i = 0; i < inputTypeTextArray.length; i++) {
		if (inputTypeTextArray[i].onkeypress != null && inputTypeTextArray[i].onkeypress.toString().indexOf('formatDate') != -1) {
			jQuery(inputTypeTextArray[i]).datepicker();
		}
	}
}

//Highlights an element
function effectLightboxHighlight(element) {
	new Effect.Highlight(element, {startcolor: '#ffffb5', endcolor: '#ece9d8', restorecolor: '#ece9d8'});
}

//Highlights an element
function effectLightboxHighlightWhite(element) {
	new Effect.Highlight(element, {startcolor: '#ffffb5', endcolor: '#ffffff', restorecolor: '#ffffff'});
}
