/* validate.js JavaScript class for Form Validation by Lucas Ferreira - http://www.lucasferreira.com/
*  Bugs and Reports: panchorf@gmail.com
*  Version: 1.8b */

function ValidateForm(f)
{
	var f = typeof f == "string" ? $(f) : f;
	
	Event.add(f, "submit", function(evt){
		if(ValidateForm.forms[$target(evt || window.event).getAttribute("id")].checkForm())
		{
			return true;
		}
		else
		{		
			try {
				evt.preventDefault();
			} catch(err) {
				window.event.returnValue=false;
			}
			return false;
		}
	});
	
	this.onError = function(msg, field, form)
	{
		alert(msg);
		return false;
	}
	
	this.fields = new Array();
	this.form = f;
	
	ValidateForm.forms[f.getAttribute("id")] = this;
}
ValidateForm.prototype.checkForm = function()
{
	for(var i=0; i<this.fields.length; i++)
	{
		if(!this.fields[i].enabled) continue;
		
		if((this.form[this.fields[i].field] || null) != null
				&& !this.fields[i].c(this.form[this.fields[i].field], this.form))
		{
			this.onError(this.fields[i].msg);
			this.form[this.fields[i].field].focus();
			
			return false;
		}
	}
	return true;
}
ValidateForm.prototype.getFieldIndex = function(f)
{
	if(f.indexOf("/") > -1)
	{
		f = f.split("/");
		f = "data[" + f[0] + "][" + f[1] + "]";
	}	
	for(var i=0; i<this.fields.length; i++)
	{
		if(this.fields[i].field == f)
		{
			return i;
		}
	}
	return false;
}
ValidateForm.prototype.addField = function(f, msg, checkFunction)
{
	if(f.indexOf("/") > -1)
	{
		f = f.split("/");
		f = "data[" + f[0] + "][" + f[1] + "]";
	}
	this.fields.push({field: f, msg: msg, enabled: true, c: checkFunction});
	
	return this;
}
ValidateForm.forms = new Array();

/* VALIDATE FILTERS */
ValidateForm.CHECK_NOT_EMPTY = function(field, form)
{
	return (field.value && field.value.length > 0);
}
ValidateForm.CHECK_EMAIL = function(field, form)
{
	return (ValidateForm.CHECK_NOT_EMPTY(field) && (a=field.value.indexOf("@")) > 1 && field.value.indexOf(".") > a);
}
ValidateForm.CHECK_CNPJ = function(field, form)
{
    var b = [6,5,4,3,2,9,8,7,6,5,4,3,2], c = field.value.toString();
    if((c = c.replace(/[^\d]/g,"").split("")).length != 14) return false;
    for(var i = 0, n = 0; i < 12; n += c[i] * b[++i]);
    if(c[12] != (((n %= 11) < 2) ? 0 : 11 - n)) return false;
    for(var i = 0, n = 0; i <= 12; n += c[i] * b[i++]);
    if(c[13] != (((n %= 11) < 2) ? 0 : 11 - n)) return false;
    return true;
}
ValidateForm.CHECK_CPF = function(field, form)
{
    var c = field.value.toString();
    if((c = c.replace(/[^\d]/g,"").split("")).length != 11) return false;
    if(new RegExp("^" + c[0] + "{11}$").test(c.join(""))) return false;
    for(var s = 10, n = 0, i = 0; s >= 2; n += c[i++] * s--);
    if(c[9] != (((n %= 11) < 2) ? 0 : 11 - n)) return false;
    for(var s = 11, n = 0, i = 0; s >= 2; n += c[i++] * s--);
    if(c[10] != (((n %= 11) < 2) ? 0 : 11 - n)) return false;
    return true;
}
