// Title: Tigra Form Validator
// URL: http://www.softcomplex.com/products/tigra_form_validator/
// Version: 1.3
// Date: 08/25/2005 (mm/dd/yyyy)
// Notes: This script is free. Visit official site for further details.


// r: indica se o campo é obrigatório ou não (true ou false)
// f: possui os tipos de campo:
// - alpha = letras, pontos e hífens
// - alphanum = letras, números e underline (_)
// - unsigned = um número positivo
// - integer = um número inteiro
// - real = um número com ponto decimal
// - email = formato de e-mail
// - phone = Número de telefone com digitos, espaços, pontos e hífens
// - date = data no formtado DD/MM/YYYY
// - time = tempo no formato HH:MM:SS 
// regular expressions or function to validate the format

// var re_dt = /^(\d{1,2})\-(\d{1,2})\-(\d{4})$/, antigo
var re_dt = /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/ 
re_tm = /^(\d{1,2})\:(\d{1,2})\:(\d{1,2})$/,
a_formats = {
	'alpha'   : /^[a-zA-Z\.\-]*$/,
	'alphanum': /^\w+$/,
	'unsigned': /^\d+$/,
	'integer' : /^[\+\-]?\d*$/,
	'real'    : /^[\+\-]?\d*\.?\d*$/,
	'email'   : /^[\w-\.]+\@[\w\.-]+\.[a-z]{2,4}$/,
	'phone'   : /^[\d\.\s\-]+$/,
	'date' : function (s_date) { 
	// check format 
	if (!re_dt.test(s_date)){ 
		return false; 
	} 
	// check allowed ranges 
	if (RegExp.$1 > 31 || RegExp.$2 > 12){ 
		return false; 
	} 
		// check number of day in month 
		var dt_test = new Date(RegExp.$3, Number(RegExp.$2-1), RegExp.$1); 
		if (dt_test.getMonth() != Number(RegExp.$2-1)) 
			return false;
		return true;
	},
	'time'    : function (s_time) {
		// check format
		if (!re_tm.test(s_time))
			return false;
		// check allowed ranges	
		if (RegExp.$1 > 23 || RegExp.$2 > 59 || RegExp.$3 > 59)
			return false;
		return true;
	}
},
a_messages = [
    'Nenhum nome do formulário passou à rotina do Validator',
    'Nenhum array do campo "%form%" passou à rotina do Validator',
    'O formulário "%form%" não pode ser encontrado no documento',
    'Entrada imcompleta no campo de formulário "%n%". Atributo "l" não encontrado',
    'Não encontrado o campo "%n%" no formulário "%form%"',
    'Não encontrada a label tag (id="%t%")',
    'Não é possível validar. Campo "%m%" não encontrado',
    '"%l%" é um campo obrigatório.',
    '"%l%" precisa no mínimo %mn% caracteres ou mais',
    '"%l%" não pode ter mais que %mx% caracteres',
    '"%v%" não é um valor válido para "%l%"',
    '"%l%" deve ser igual a "%ml%"'
]

// validator counstruction routine
function validator(s_form, a_fields, o_cfg) {
	this.f_error = validator_error;
	this.f_alert = o_cfg && o_cfg.alert
		? function(s_msg) { alert(s_msg); return false }
		: function() { return false };
		
	// check required parameters
	if (!s_form)	
		return this.f_alert(this.f_error(0));
	this.s_form = s_form;
	
	if (!a_fields || typeof(a_fields) != 'object')
		return this.f_alert(this.f_error