var VLD_msgHeader = '';
var VLD_msgBody = '';

var VLD_numError = 0;

var VLD_emptyName = new Array;
var VLD_emptyField = new Array;
var VLD_emptyCounter = 0;

var VLD_colorError = '#CC0000';
var VLD_colorPassed = '#000000';

var VLD_imgDir = '../../img/';





/**
 * Verifica o preenchimento dos campos obrigatórios.
 */
function VLD_EmptyValidate()
{
	var elemtName = '';

	for(var i = 0; i < VLD_emptyField.length; i++)
	{
		// Condição criada para permitir utilização dos campos do tipo radio
		elemtName = (VLD_emptyField[i][0]['name'] != undefined) ? VLD_emptyField[i][0]['name'] : VLD_emptyField[i][0][0]['name'];

		if(VLD_isEmpty(VLD_emptyField[i][0]))
		{
			// Verificando se este elemento é um campo obrigatório 
			// por alguma condição imposta por outro campo.
			if((VLD_emptyField[i][2] != undefined) && VLD_isEmpty(VLD_emptyField[i][2]))
			{
				VLD_setColor(elemtName, VLD_colorPassed);
				continue;
			}

			VLD_numError++;

			VLD_emptyName[VLD_emptyCounter++] = VLD_emptyField[i][1];

			VLD_setColor(elemtName, VLD_colorError);
			continue;
		}

		VLD_setColor(elemtName, VLD_colorPassed);
	}

	VLD_setEmptyErrorMsg();
}

/**
 * Verifica se o campo foi preenchido
 * marcado ou selecionado.
 */
function VLD_isEmpty(input)
{
	var elemtType = input.type;

	if((elemtType == 'text') || (elemtType == 'textarea') || (elemtType == 'password') || (elemtType == 'file'))
	{
		return (isBlank(input.value) ? true : false);
	}
	else if((elemtType == 'select-one') || (elemtType == 'select-multiple'))
	{
		var selectAux = false;

		for(var i = 0; i < input.options.length; i++)
		{
			if(input.options[i].selected && input.options[i].value)
			{
				selectAux = true;
				break;
			}
		}

		return (selectAux ? false : true);
	}
	else if(elemtType == 'checkbox')
	{
		// Bug: não  foi implementada a opção de um array de checkbox
		return (input.checked ? false : true);
	}
	else if(input[0].type == 'radio')
	{
		var checkAux = false;

		for(var i = 0; i < input.length; i++)
		{
			if(input[i].checked)
			{
				checkAux = true;
				break;
			}
		}

		return (checkAux ? false : true);
	}
}

/**
 * Seta a cor do título dos campos validados.
 */
function VLD_setColor(inputName, color)
{
	document.getElementById('ft_' + inputName).style.color = color;
}

/**
 * Seta as imagens de obrigatoriedade dos campos
 * onde sua condição de preenchimento depende de 
 * algum outro campo.
 */
function VLD_setRequiredFields(input)
{
	var elemtValue = input.value;
	var elemtDepend = input.depEmpty;

	for(var i = 0; i < elemtDepend.length; i++)
	{
		VLD_imgPath  = VLD_imgDir;
		VLD_imgPath += (!isBlank(elemtValue)) ? 'bolinha.gif' : 'ponto.gif';

		document['img_' + elemtDepend[i]].src = VLD_imgPath;
	}
}

/**
 * Seta mensagem e lista dos campos
 * obrigatórios não preenchidos.
 */
function VLD_setEmptyErrorMsg()
{
	if(VLD_emptyCounter)
	{
		VLD_msgBody = '- Os seguintes campos não preenchidos são obrigatórios:\n\n';

		for(var i = 0; i < VLD_emptyName.length; i++)
		{
			VLD_msgBody += '   • ' + VLD_emptyName[i] + '\n\n';
		}
	}
}

/**
 * Imprime as mensagens de erro.
 */
function VLD_getErrorMsg()
{
	if(VLD_numError)
	{
	    VLD_msgHeader  = "------=====x ERRO AO SUBMETER FORMULÁRIO x=====------\n\n"
	    VLD_msgHeader += "O formulário não foi submetido porque foram encontrado(s) " + VLD_numError + " erro(s).\n";
	    VLD_msgHeader += "Por favor verifique a lista abaixo, corrija todos os erros apresentados\n";
	    VLD_msgHeader += "e submeta novamente o formulário.\n\n";
	    VLD_msgHeader += "========================================\n\n"

		alert(VLD_msgHeader + VLD_msgBody);

		VLD_UnsetVars();

		return true;
	}

	return false;
}

/**
 * Destrói os valores armazenados nas variáveis
 * que controlam as mensagens de erro.
 */
function VLD_UnsetVars()
{
	VLD_msgBody = [];
	VLD_numError = 0;
	VLD_emptyName = [];
	VLD_emptyField = [];
	VLD_emptyCounter = 0;
}