
// 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,props) {
		var obj = $(npt);
		
		if(!props.required) {
			if(this.isEmpty(obj.value)) { return true }
		}
		
		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");
	},
	checkbox:function(name,message) {
		var arr = $$('input[name='+name+'])');
		var flg = false;
		arr.each(function(e) {
			if (e.checked) {flg = true;}
		});
		
		if(!flg) {
			//this.setCss(obj);
			this.errors.push(new Field(null, message));	
			//this.addError(obj,message); return false;}
		}
	},
	nonzero:function(npt,message){
		var obj = $(npt);
		return this.testError(obj,/^[0]+$/i,message ? message : "El campo " + obj.id + " debe contener sólo letras o numeros");
	},
	notempty:function(npt,message){
		var obj = $(npt);
		return this.testError(obj,/^.+$/i,message ? message : "El campo " + obj.id + " no puede estar vacío");
	},
	
	validdate: function(npt, message,props) {
		var obj = $(npt);
		
		if(!props.required) {
			if(this.isEmpty(obj.value)) { return true }
		}


//		if (Date.parse) {
//			var format = props.dateFormat || "%x";
//			var d = Date.parse(element.get('value'));
//			var formatted = d.format(format);
//			if (formatted != "invalid date") element.set('value', formatted);
//			return !isNaN(d);
//		} else {
		var regex = /^(\d{2})\/(\d{2})\/(\d{4})$/;
		if(!regex.test(obj.get('value'))){this.addError(obj,message); return false;}
		var d = new Date(obj.get('value').replace(regex, '$1/$2/$3'));
		var valid =  (parseInt(RegExp.$1, 10) == (1+d.getMonth())) && (parseInt(RegExp.$2, 10) == d.getDate()) && (parseInt(RegExp.$3, 10) == d.getFullYear() );
		if(!valid){this.addError(obj,message); return false;}
//		}
		return true;
	},	

	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");
		}					
	},
	same:function(npt,message, props) {
		var obj = $(npt); var ori = $(props.ori);
		this.test(function(){return obj.value != ori.value},npt, message);
	}
})

var obj_sv = new SimpleValidator('npt_error');
