// JavaScript Document

Field =new Class({
	initialize:function(npt, message) {
		this.input = npt;
		this.msg = message;
	}
})

SimpleValidator = new Class({
	initialize:function(errorClass) {
		this.errors = new Array();
		this.errorClass = errorClass;
	},
	reset: function() {
		this.errors=new Array();
	},
	hasErrors:function(){return this.errors.length > 0},
	getErrors:function() {
		var ret = '';
		this.errors.each(function(f) { ret += f.msg + "\n"});
		//return this.errors.join("\n")
		return ret;
	},
	testError:function(obj,re,message) {
		
		this.resetCss(obj);
		if(!re.test(obj.value)){this.addError(obj,message); return false;}
		return true;
	},
	addError:function(obj,message) {
		this.setCss(obj);
		this.errors.push(new Field(obj, message));	
	},
	setCss:function(obj) {obj.addClass(this.errorClass)},
	resetCss:function(obj) {obj.removeClass(this.errorClass)},
	isEmpty: function(v) {
		return  ((v == null) || (v.length == 0));
	},
	test: function(func, npt, message) {
		var obj = $(npt);
		this.resetCss(obj);
		if(func()) {
			this.setCss(obj);
			this.errors.push(new Field(npt,message ? message : "El campo " + obj.id + " es un valor requerido"));
			return true;
		}		
		return false;
			
	},
	required:function(npt,message) {
		var obj = $(npt);
		return this.testError(obj,/[^.*]/,message ? message : "El campo " + obj.id + " es un valor requerido");
	},
	numbers:function(npt,message) {
		var obj = $(npt);
		return this.testError(obj,/^[-+]?\d*\.?\d+$/,message ? message : "El campo " + obj.id + " debe contener números");
	},
	integers:function(npt,message) {
		var obj = $(npt);
		return this.testError(obj,/^[-+]?\d+$/,message ? message : "El campo " + obj.id + " debe contener números enteros");
	},
	email:function(npt,message) {
		var obj = $(npt);
		return this.testError(obj,/^[a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,4}$/i,message ? message : "El campo " + obj.id + " debe contener un email válido");
	},
	alpha:function(npt,message) {
		var obj = $(npt);
		return this.testError(obj,/^[a-z ._-]+$/i,message ? message : "El campo " + obj.id + " debe contener sólo letras");
	},
	alphanum:function(npt,message) {
		var obj = $(npt);
		return this.testError(obj,/^[a-z0-9 ._-]+$/i,message ? message : "El campo " + obj.id + " debe contener sólo letras o numeros");
	},	

	extension:function(npt, exts, message) {
		var obj = $(npt);
		var ext = obj.value.slice(obj.value.indexOf(".")).toLowerCase();
		var flag = false;
		for(var i=0; i < exts.length; i ++) {
			if(ext == exts[i]) {flag=true; break}
		}
		if(!flag) {
			this.setCss(obj);
			this.errors.push(new Field(npt, message ? message : "El campo " + obj.id + " no tiene una extensión válida"));
			//this.errors.push(message ? message : "El campo " + obj.id + " no tiene una extensión válida");
		}					
	}
})
var obj_sv = new SimpleValidator('npt_error');