var Register = {
	initialize: function(){
		this.form = $('form');

		this.validation = {};
		this.inputs = {};

		//inputs
		this.form.getElements('input,select').each(function(el){
			this.inputs[el.name] = el;
			if(!empty(el.className)){
				this.validation[el.name] = [el.className.match(/^[\w]+/),!el.hasClass('norequired')];
			}
		},this);

		//check email
		this.inputs.email.addEvent('change',this.checkUserEmail.bind(this));

		//dp
		//this.dp = this.inputs.fechaNacimiento.datePicker({to:datemax});

		//buttons
		this.buttons = this.form.getElements('button').associate(['submit']);
		this.buttons.submit.addEvent('click',this.submit.bind(this));

		//tip
		this.tip = new Element('div',{'class':'iVtip hidden'}).addEvent('click',this.hideTip.bind(this)).inject(document.body);
		this.tip_hide = 0;

		//request
		this.request = new Request({url:BASE.ajax+'usuario.ajax',onSuccess:function(r){this['on'+this.request.action](r);}.bind(this),onFailure:onError});
		this.request.submit = function(action,data,loading){
			if(loading){
				Loading.show();
			}
			this.request.action = action;
			this.request.cancel().send({data:'action='+action+'&'+data});
		}.bind(this);

		//start
		this.toForm();
		this.gotoEmptyInput();
	},

	checkUserEmail: function(){
		this.buttons.submit.disabled = this.checkInputs(['email'],false) && this.inputs.email.value!=this.data.email;
		if(this.buttons.submit.disabled){
			this.request.submit('CheckUserEmail','email='+this.inputs.email.value,false);
		}
	},

	onCheckUserEmail: function(response){
		if(response=='true'){
			this.showTip('email','Ya existe una cuenta para: <b>'+this.inputs.email.value+'</b>');
		}else{
			this.buttons.submit.disabled = false;
		}
		this.gotoEmptyInput();
	},

	gotoEmptyInput: function(){
		for(var l in this.inputs){
			if(empty(this.inputs[l].value) && this.validation[l][1]){
				this.inputs[l].focus();
				break;
			}
		}
	},

	toForm: function(){
		$each(this.data,function(v,l){
			if(l=='fechaNacimiento'){
				if(v.test(iRules.date.regx)){
					var date = v.split('/').associate(['d','m','y']);
					this.dp.setFullDate(date.y.toInt(),date.m.toInt()-1,date.d.toInt());
					this.inputs[l].value = v;
				}
			}else if(this.inputs[l].type=='checkbox'){
				this.inputs[l].checked = v=='1';
			}else{
				this.inputs[l].value = v;
			}
		},this);
	},

	toData: function(){
		$each(this.inputs,function(el,l){
			if(el.type=='checkbox'){
				this.data[l] = el.checked ? '1' : '0';
			}else{
				this.data[l] = el.value.trim();
			}
		},this);
	},

	submit: function(){
		if(this.checkForm()){
			this.toData();
			var data = this.data;
			var recordar = data.recordar=='1';
			delete(data.recordar);
			delete(data.clave2);
			this.request.submit('UserRegister','lng='+LNG.code+'&data='+encodeURIComponent(JSON.encode(data))+(recordar?'&recordar=1':''),true);
		}
	},

	onUserRegister: function(response){
		if(response=='true'){
			Loading.set('Su cuenta se ha creado correctamente','success');
			redirect.delay(3000,window,[return_url]);
		}else{
			Loading.set('Error!','error');
		}
	},

	checkInputs: function(ls,tip){
		this.hideTip();

		for(var i=0;i<ls.length;i++){
			var l = ls[i];
			var rule = this.validation[l];
			var irule = iRules[rule[0]];
			var input = this.inputs[l];
			var value = input.value = input.value.trim();

			if((value=='' && rule[1]) || (value!='' && !value.test(irule.regx))){
				if(tip){
					this.showTip(l,value==''?_jlng.requerido:irule.msg);
				}
				return false;
			}
		}

		return true;
	},

	checkForm: function(){
		var ls = [];
		for(var l in this.validation){
			ls.push(l);
		}
		if(this.checkInputs(ls,true)){
			if(this.inputs.clave.value==this.inputs.clave2.value){
				return true;
			}else{
				this.showTip('clave2','Las claves no coinciden');
			}
		}
		return false;
	},

	// TOOL TIP
	showTip: function(l,msg){
		$clear(this.tip_hide);
		this.tipl = l;
		this.inputs[l].addClass('fail');
		var ref = this.inputs[l].getParent().getCoordinates();
		var increment = Browser.Engine.trident4 ? document.body.scrollTop : 0;
		this.tip.set('html','<div><h3>Error!</h3><p>'+msg+'</p></div><div class="foot"></div>').setStyles({'left':(ref.right+4)+'px','top':(ref.bottom+increment-48)+'px'}).removeClass('hidden');
		this.tip_hide = this.hideTip.delay(10000,this);
		window.scroll(0,ref.top+increment-50);
		this.inputs[this.tipl].focus();
	},

	hideTip: function(){
		$clear(this.tip_hide);
		this.tip.addClass('hidden');
		if(this.tipl){
			this.inputs[this.tipl].removeClass('fail');
		}
	}
};

window.addEvent('domready',Register.initialize.bind(Register));

/*Date: Tue, 07 Feb 2012 00:45:41 GMT */
