/********************************************************************************************************
MicroSource InstantWeb

Autor ..................: Tiago Torres						
Ficheiro ...............: generic_validation.js
Descrição ..............: Ficheiro que faz validação de formularios.
Versão .................: 1.0.2
Última actualização	....: 17-12-2008

Notas:
-
********************************************************************************************************/

function checkAll(objecto){
	//nome = nome da check all que tem prefixo das checkboxes 'msg_'
	//formulario = objecto formulario ondes estao as checkboxes
	for (var i=0;i<objecto.form.elements.length;i++)
	{
		//e = elemento actual
		var e=objecto.form.elements[i];
		//se a checkbox for diferente de ALLBOX e igual a item entao subtituir estado pelo o da ALLBOX
		var string = e.name
		prefixo = string.substring(0, 3); //buscar prefixo da checkbox
		if ((e.type=='checkbox') && (prefixo==objecto.name.substring(0, 3)) && e.disabled!=true)
		{
			e.checked=objecto.checked;
		}
	}
}

function checkIt(objecto, value){
	if (document.getElementById(objecto).disabled!=true)
	{
		document.getElementById(objecto).checked=value;
	}
}

function VerficarItems(nome, formulario)
{
	//verificar se existem checkboxes true
	for (var i=0;i<formulario.elements.length;i++)
	{
		//e = elemento actual
		var e=formulario.elements[i];
		//se a checkbox for diferente de ALLBOX e igual a item entao subtituir estado pelo o da ALLBOX
		var string = e.name
		prefixo = string.substring(0, 4); //buscar prefixo da checkbox
		string = string.substring(4, e.name.length); //retirar prefixo da checkbox
		if ((e.checked==true) && (string!='allbox') && (e.type=='checkbox') && (prefixo==nome))
		{
			//confirmar submissão
			resposta=confirm ("Deseja submeter as informações?")
			if (resposta==false)
			{
				return false;
			}

			return true;
		}
	}

	alert('É necessário seleccionar items para realizar uma acção!');
	return false;
}

function ValidarFormulario(formulario, classeinvalida)
{
	/*Função de validação genérica para usar basta colocar no title o seguinte
	
	* : Campo obrigatorio
	e : Campo de email
	w : Campo de link
	i : Campo numerico
	
	os atributos devem estar separados por pipes |
	*/
	
	valido = true;

	//verificar se os campos estão preenchidos
	for (i = 0; i < formulario.elements.length; i++)
	{
		//Verificar tipo de elemento
		if (formulario.elements[i].type == "select-one")
		{
			//Se for select verificar se o index não é inválido
			if (formulario.elements[i].options[formulario.elements[i].selectedIndex].value == '-1')
			{
				$(formulario.elements[i]).addClass(classeinvalida);
				valido = false;
			}
			else
			{
				$(formulario.elements[i]).removeClass(classeinvalida);
			}
		}
		else
		{
			//Se for do tipo text ou password ou textarea
			if (formulario.elements[i].type == "text" || formulario.elements[i].type == "password" || formulario.elements[i].type == "textarea")
			{				
				//Buscar opcoes de validação guardadas no atributo title
				var opcoes = formulario.elements[i].title.split("|");
				var nopcoes = opcoes.length;

				if (nopcoes > 0)
				{
					//Verificar parametros de validação
					for(opcao in opcoes)
					{
						switch (opcoes[opcao])
						{
							case '*':
								if(formulario.elements[i].value == "")
								{
									$(formulario.elements[i]).addClass(classeinvalida);
									valido = false;
								}
								else
									$(formulario.elements[i]).removeClass(classeinvalida);
									
								break;
							
							case 'e':
								if(!ValidaEmail(formulario.elements[i]))
								{
									$(formulario.elements[i]).addClass(classeinvalida);
									valido = false;
								}
								else
									$(formulario.elements[i]).removeClass(classeinvalida);
									
								break;
								
							case 'w':
								if(!ValidaUrl(formulario.elements[i]))
								{
									$(formulario.elements[i]).addClass(classeinvalida);
									valido = false;
								}
								else
									$(formulario.elements[i]).removeClass(classeinvalida);
									
								break;
								
							case 'i':
								if(!ValidaNumero(formulario.elements[i]))
								{
									$(formulario.elements[i]).addClass(classeinvalida);
									valido = false;
								}
								else
									$(formulario.elements[i]).removeClass(classeinvalida);
									
								break;
						}
					}					
				}
			}
		}
	}

	return valido;
}

function ValidaEmail(campo)
{
	 var Reg = "^[\\w-_\.+]*[\\w-_\.]\@([\\w]+\\.)+[\\w]+[\\w]$";
	 var regex = new RegExp(Reg);
	 return regex.test(campo.value);
}

function ValidaUrl(campo)
{
	 var Reg = "^[A-Za-z]+://[A-Za-z0-9-_]+\\.[A-Za-z0-9-_%&\?\/.=]+$";
	 var regex = new RegExp(Reg);
	 return regex.test(campo.value);
}

function ValidaNumero(campo)
{
	 var Reg = "^[-+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?$";
	 var regex = new RegExp(Reg);
	 return regex.test(campo.value);
}