FormCheck = Class.create();
FormCheck.prototype = {
	
	initialize: function () {
		this.inputs = [];
		this.inputsMandatory = [];
		this.inputsMandatoryEmail = [];
		this.inputsNumeric = [];
	},
	
	validEmail: function (email) {
		var reg = /^[A-Za-z0-9._-]+@[A-Za-z0-9.-]{2,}[.][A-Za-z]{2,3}$/;
  		return (reg.exec(email)!=null);
	},
	
	registerInputText: function (input) {
		this.inputs[this.inputs.length] = {input:input,startValue:input.value};
		Event.observe(input,"focus",this.inputTextCheck.bindAsEventListener(this,"focus"));
		Event.observe(input,"blur",this.inputTextCheck.bindAsEventListener(this,"blur"));
	},
	
	getInputInfosId: function (input) {
		for (var i=0;i<this.inputs.length;i++) { if (this.inputs[i].input==input) { return i; } }
		for (var i=0;i<this.inputsMandatory.length;i++) { if (this.inputsMandatory[i].input==input) { return i; } }
	},
	
	inputTextCheck: function (e,type) {
		var itemInput = this.inputs[this.getInputInfosId(Event.element(e))];
		if (type=="focus") { if (itemInput.startValue==Event.element(e).value) { itemInput.input.value = ""; } }
		else if (type=="blur") { if (Event.element(e).value=="") { itemInput.input.value = itemInput.startValue; } }
	},
	
	registerMandatoryInputText: function (input) {
		this.inputsMandatory[this.inputsMandatory.length] = {input:input};
	},
	
	registerMandatoryEmailInputText: function (input) {
		this.inputsMandatoryEmail[this.inputsMandatoryEmail.length] = {input:input};
	},
	
	unregisterInputText: function (arr,n) {
		arr.splice(n,1);
	},
	
	unregisterMandatoryInputText: function (input) {
		this.unregisterInputText(this.inputsMandatory,this.getInputInfosId(input));
	},	
		
	registerInputTextSubmitOnKeyEnter: function (form,input,actionUrl) {
		var n = this.getInputInfosId(input);
		this.inputs[n].form = form;
		this.inputs[n].actionUrl = actionUrl;
		this.inputs[n].submitOnEnterEvent = false;
		Event.observe(input, "keyup", this.checkKey.bindAsEventListener(this));
	},
	
	inputTextCheckSubmitOnEnter: function (e,type) {
		var n = this.getInputInfosId(Event.element(e));
		if (type=="focus") { this.inputs[n].submitOnEnterEvent = true; }
		else if (type=="blur") { this.inputs[n].submitOnEnterEvent = false; }
	},
	
	registerInputNumeric: function (input) {
		this.inputsNumeric[this.inputsNumeric.length] = {input:input};
		Event.observe(input,"keyup",this.toNumeric.bindAsEventListener(this));
	},
	
	toNumeric: function (e) {
		var n = Event.element(e).value;
		Event.element(e).value = (isNaN(n)) ? (isNaN(parseInt(n))) ?"" :parseInt(n) :n;
	},
	
	checkKey: function (e) {
		var keyCode = (window.event) ?e.keyCode :e.which;
		if (keyCode==13) {
			var itemInput = this.inputs[this.getInputInfosId(Event.element(e))];
			if (itemInput.input==Event.element(e)) {
				itemInput.form.action = itemInput.actionUrl;
				itemInput.form.submit();
			}
		}
	},
	
	getAllMandatoryItems: function () {
		return this.inputsMandatory.concat(this.inputsMandatoryEmail);
	},
	
	valid: function () {
		var errorItems = [];
		for (var i=0;i<this.inputsMandatory.length;i++) {
			if (this.inputsMandatory[i].input.value=="") { errorItems[errorItems.length] = {input:this.inputsMandatory[i].input,type:"text"}; }
		}
		for (var i=0;i<this.inputsMandatoryEmail.length;i++) {
			if (!this.validEmail(this.inputsMandatoryEmail[i].input.value)) { errorItems[errorItems.length] = {input:this.inputsMandatoryEmail[i].input,type:"text"}; }
		}
		return {submiting:(errorItems.length>0)?false:true,errorItems:errorItems};
	}
	
}