FormCheck = Class.create();
FormCheck.prototype = {
	
	initialize: function () {
		this.inputs = [];
		this.inputsMandatory = [];
		this.inputsMandatoryEmail = [];
		this.inputsNumeric = [];
		this.inputsNumericDate = [];
	},
	
	registerInputText: function (input) {
		this.inputs.push({input:input,startValue:input.title});
		Event.observe(input,"focus",this.inputTextCheck.bindAsEventListener(this,"focus"));
		Event.observe(input,"blur",this.inputTextCheck.bindAsEventListener(this,"blur"));
	},
	
	registerMandatoryInputText: function (input,minLength) {
		this.inputsMandatory.push({input:input,startValue:input.title,minLength:minLength});

	},
	
	registerMandatoryEmailInputText: function (input) {
		this.inputsMandatoryEmail.push({input:input,startValue:input.title});
	},
	
	registerInputNumeric: function (input) {
		this.inputsNumeric.push({input:input});
		Event.observe(input,"keyup",this.toNumeric.bindAsEventListener(this));
	},
	
	registerInputNumericDate: function (input) {
		this.inputsNumericDate.push({input:input});
		Event.observe(input,"keyup",this.toNumericDate.bindAsEventListener(this));
	},
	
	registerInputTextSubmitOnKeyEnter: function (form,input,actionUrl) {
		var inputs = this.getInputInfos(input);
		inputs.form = form;
		inputs.actionUrl = actionUrl;
		inputs.submitOnEnterEvent = false;
		Event.observe(input,"keyup",this.checkKey.bindAsEventListener(this));
	},
	
	registerInputTextOnColor: function (input,cssStyle) {
		var inputs = this.getInputInfos(input);
		inputs.cssStyle = cssStyle;
		inputs.title = inputs.input.title;
		if (inputs.input.value!=inputs.title) { Element.removeClassName(inputs.input,inputs.cssStyle); }
	},
	
	registerInputTextChangeType: function (input,type) {
		var inputs = this.getInputInfos(input);
		inputs.type = input.type;
		inputs.changeTypeOn = type;
		if (inputs.input.value!=inputs.title) { inputs.input.type = type; }
	},
	
	unregisterInputText: function (arr,n) {
		arr.splice(n,1);
	},
	
	unregisterMandatoryInputText: function (input) {
		this.unregisterInputText(this.inputsMandatory,this.getInputInfosId(input));
	},
	
	validEmail: function (email) {
		var reg = /^[A-Za-z0-9._-]+@[A-Za-z0-9.-]{2,}[.][A-Za-z]{2,3}$/;
  		return (reg.exec(email)!=null);
	},
	
	validDate: function (date,type) {
		var sd = date.split('/');
		if (sd.length!=3||isNaN(sd[0])||isNaN(sd[1])||isNaN(sd[2])) { return false;}
		if(sd[2]<100) { return false; }
		var cd = new Date(sd[2],(sd[1]-1),sd[0]);
		if ((sd[2]!=cd.getFullYear())||((sd[1]-1)!=cd.getMonth())||(cd.getDate()!=sd[0])) { return false; }
		if (type!=null )  {
			var nd = new Date();
			if (type==false&&nd<cd){ return false; }
		}                                              
		return true;
	},
	
	hasMinAge: function (d,age) {
		var d = d.split("/");
		var myDate = new Date(Number(d[2])+age,d[1]-1,d[0]);
		var today = new Date();
		return ((today.getTime()-myDate.getTime())<0) ?false :true;
	},
	
	getInputInfos: function (input) {
		var n = -1;
		for (var i=0;i<this.inputs.length&&n==-1;i++) { if (this.inputs[i].input==input) { n = i; } }
		for (var i=0;i<this.inputsMandatory.length&&n==-1;i++) { if (this.inputsMandatory[i].input==input) { n = i; } }
		return (this.inputs[n]) ?this.inputs[n] :this.inputsMandatory[n];
	},
	
	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"&&itemInput.startValue==Event.element(e).value) {
			itemInput.input.value = "";
			if (itemInput.cssStyle) { Element.removeClassName(itemInput.input,itemInput.cssStyle); }
			//if (itemInput.changeTypeOn) { itemInput.input.type = itemInput.changeTypeOn; }
		}
		else if (type=="blur"&&Event.element(e).value=="") {
			itemInput.input.value = itemInput.startValue;
			if (itemInput.cssStyle&&itemInput.input.value==itemInput.title) { Element.addClassName(itemInput.input,itemInput.cssStyle); }
			//if (itemInput.changeTypeOn&&itemInput.input.value==itemInput.title) { itemInput.input.type = itemInput.type; }
		}
	},
	
	inputTextCheckSubmitOnEnter: function (e,type) {
		var inputs = this.getInputInfos(Event.element(e));
		if (type=="focus") { inputs.submitOnEnterEvent = true; }
		else if (type=="blur") { inputs.submitOnEnterEvent = false; }
	},
	
	toNumeric: function (e) {
		var n = Event.element(e).value;
		Event.element(e).value = (isNaN(n)) ? (isNaN(parseInt(n))) ?"" :parseInt(n) :n;
	},
	
	toNumericDate: function (e) {
		var n = Event.element(e).value;
		nk = n.substring(n.length-1,n.length);

		if(nk == 0 || nk == 1 || nk == 2 || nk == 3 || nk == 4 || nk == 5 || nk == 6 || nk == 7 || nk == 8 || nk == 9 ||  nk == "/"){
			Event.element(e).value = n;
		}
		else{
			Event.element(e).value = n.substring(0,n.length-1);
		}
	},
	
	checkKey: function (e) {
		var keyCode = (window.event) ?e.keyCode :e.which;
		if (keyCode==13) {
			var inputs = this.getInputInfos(Event.element(e));
			if (inputs.input==Event.element(e)&&inputs.actionUrl!="#0") {
				inputs.form.action = inputs.actionUrl;
				inputs.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==""||
				this.inputsMandatory[i].minLength&&this.inputsMandatory[i].input.value.length<this.inputsMandatory[i].minLength||
				this.inputsMandatory[i].startValue==this.inputsMandatory[i].input.value
			) 
			{ errorItems.push({input:this.inputsMandatory[i].input,infos:this.inputsMandatory[i],type:"text"}); }
		}
		for (var i=0;i<this.inputsMandatoryEmail.length;i++) {
			if (!this.validEmail(this.inputsMandatoryEmail[i].input.value)) { errorItems.push({input:this.inputsMandatoryEmail[i].input,infos:this.inputsMandatory[i],type:"text"}); }
		}
		return {submiting:(errorItems.length>0)?false:true,errorItems:errorItems};
	}
	
}