function Validation() { }
Validation.check = function(form)
{
	var errors = [];
	for (var i=0; i < form.elements.length; i++)
	{
		var el = form.elements[i];
		if (el.getAttribute("novalidation") != null || el.disabled) continue;

		// Check if field is filled
		if (el.value.length == 0)
		{
			errors[errors.length] = "O campo " + el.getAttribute("identifier") + " deve ser preenchido.\n";
		}

		// Format types
		switch(el.getAttribute("format"))
		{
			case "mail":
				if (e = Validation.checkMail(el)) { errors[errors.length] = e + "\n"; }
			break;
		
			case "zipcode":
				if (e = Validation.checkZipCode(el)) { errors[errors.length] = e + "\n"; }
			break;

			case "cpf":
				if (e = Validation.checkCPF(el)) { errors[errors.length] = e + "\n"; }
			break;

			case "phone":
				if (e = Validation.checkPhone(el)) { errors[errors.length] = e + "\n"; }
			break;
			
			case "date":
				if (e = Validation.checkDate(el)) { errors[errors.length] = e + "\n"; }
			break;

			case "number":
				if (e = Validation.checkNumber(el)) { errors[errors.length] = e + "\n"; }
			break;
			
			case "currency":
				if (e = Validation.checkCurrency(el)) { errors[errors.length] = e + "\n"; }
			break;
			
			case "password":
				if (e = Validation.checkPassword(el)) { errors[errors.length] = e + "\n"; }
			break;
			
			case "confirm_password":
				if (e = Validation.checkConfirmPassword(el)) { errors[errors.length] = e + "\n"; }
			break;
		}
	}

	if (errors.length > 0)
	{
		alert("Ocorreram os seguintes erros:\n" + errors.join(""));
		return false;
	}
	
	return true;
}

Validation.checkMail = function(el)
{
	if (el.value && (el.value.indexOf(".") < 0 || el.value.indexOf("@") < 0))
	{
		return "O campo " + el.getAttribute("identifier") + " deve ser preenchido corretamente.";
	}

	return null;
}

Validation.checkZipCode = function(el)
{
    if(el.value && !/^[0-9\-]{9}$/.test(el.value))
	{
        return "O campo " + el.getAttribute("identifier") + " deve ser preenchido corretamente. Ex: 99999-999";
	}
	
	return null;
}

Validation.checkCPF = function(el)
{
	if (el.value && el.value.length != 11 || el.value == "00000000000" || el.value == "11111111111" ||
		el.value == "22222222222" ||	el.value == "33333333333" || el.value == "44444444444" ||
		el.value == "55555555555" || el.value == "66666666666" || el.value == "77777777777" ||
		el.value == "88888888888" || el.value == "99999999999" || el.value == "12345678910")
		return "O " + el.getAttribute("identifier") + " informado é inválido. (Não digitar pontos e traços!)";
	soma = 0;
	for (i=0; i < 9; i ++)
		soma += parseInt(el.value.charAt(i)) * (10 - i);
	resto = 11 - (soma % 11);
	if (resto == 10 || resto == 11)
		resto = 0;
	if (resto != parseInt(el.value.charAt(9)))
		return false;
	soma = 0;
	for (i = 0; i < 10; i ++)
		soma += parseInt(el.value.charAt(i)) * (11 - i);
	resto = 11 - (soma % 11);
	if (resto == 10 || resto == 11)
		resto = 0;
	if (resto != parseInt(el.value.charAt(10)))
		return "O " + el.getAttribute("identifier") + " informado é inválido. (Não digitar pontos e traços!)";
	return null;
}

Validation.checkPhone = function(el)
{
    if(el.value && !/^[0-9\s()-\/]*$/.test(el.value))
	{
        return "O campo " + el.getAttribute("identifier") + " deve ser preenchido corretamente. Ex: (XX) XXXX-XXXX";
	}
	
	return null;
}

Validation.checkDate = function(el)
{
    if(el.value && !/^[0-9\/]{10}$/.test(el.value))
	{
        return "O campo " + el.getAttribute("identifier") + " deve ser preenchido corretamente. Ex: DD/MM/AAAA";
	}
	
	return null;
}

Validation.checkNumber = function(el)
{
	if (el.value && !/^[0-9]*$/.test(el.value))
	{
		return "O campo " + el.getAttribute("identifier") + " deve ser preenchido corretamente.";
	}

	return null;
}

Validation.checkCurrency = function(el)
{
	if (el.value && !/^[0-9.,]*$/.test(el.value))
	{
		return "O campo " + el.getAttribute("identifier") + " deve ser preenchido corretamente.";
	}

	return null;
}

Validation.checkPassword = function(el)
{
	if (el.value && !/^[a-zA-Z0-9]{6,20}$/.test(el.value))
	{
		return "O campo " + el.getAttribute("identifier") + " deve ser preenchido corretamente.";
	}

	return null;
}

Validation.checkConfirmPassword = function(el)
{
	if (el.value && el.value != el.form.password.value)
	{
		return "O campo " + el.getAttribute("identifier") + " deve ser preenchido corretamente.";
	}

	return null;
}
