/*
  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 tab (9), backspace (8) ou shift (16), não executa a função
	if (key == 9 || key == 8 || key == 16)
		return true;

	// 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 '/' 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 tab (9), backspace (8) ou shift (16), não executa a função
	if (key == 9 || key == 8 || key == 16)
		return true;

	// 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 tab (9) ou shift (16), não executa a função
	if (key == 9 || key == 16)
		return true;

	// 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 - 2) + "," + value.substring(length - 2);

	// Desconsidera a string a partir da vírgula
	length = length - 2;

	// 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 tab (9), backspace (8) ou shift (16), não executa a função
	if (key == 9 || key == 8 || key == 16)
		return true;

	// 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 tab (9), backspace (8) ou shift (16), não executa a função
	if (key == 9 || key == 8 || key == 16)
		return true;

	// 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 CEP (Ex.: 00000-000)
*/
function formatCep(field, eventObject)
{
	// Recupera a tecla pressionada
	var key = getKeyPressed(eventObject);

	// Se for tab (9), backspace (8) ou shift (16), não executa a função
	if (key == 9 || key == 8 || key == 16)
		return true;

	// 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 tab (9), backspace (8) ou shift (16), não executa a função
	if (key == 9 || key == 8 || key == 16)
		return true;

	// Recupera somente os números da string
	var value = getOnlyNumbers(field.value);

	// 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;
}

/*
  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;
}

/*
  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)';
}