var SC = {

	init: function(){
		this.sendForm = true;
		this.dom = {login:{},suscr:{},overlay:$('detalle')};

		//suscr DOM
		this.dom.suscr = {form:$('suscrForm1'),inputs:{}};
		this.dom.suscr.form.getElements('input,select').each(function(el){
			if(el.getTag()=='select' || ['text','password'].contains(el.type)){
				this.dom.suscr.inputs[el.name] = el;
			}else{
				if(!this.dom.suscr.inputs[el.name]){
					this.dom.suscr.inputs[el.name] = [];
				}
				this.dom.suscr.inputs[el.name].push(el);
			}
		},this);
		this.dom.suscr.inputs.email.addEvent('blur',this.checkMail.bind(this));
		this.dom.suscr.form.addEvent('submit',function(e){
			new Event(e).stop();
			if(this.sendForm){
				this.send();
			}
			this.sendForm = true;	
		}.bind(this));

		$("email").addEvent('keyup', function(event) {  
			this.sendForm = false;
			var ev = new Event(event); 
		    if(ev.code == '13'){
		    	event.target.highlight('#eaea16');
				this.checkMail();
			}
			ev.stop();
		}.bind(this)
		); 
		
		$('b_enviar').addEvent('click',this.Login.bind(this));
		
		//validation
		this.validator = new iValidator(this.dom.suscr.form.getElements('input[class],select'));

		//request
		this.request = new Request({url:base+'usuario.ajax', onFailure:onError, onSuccess:this.onRequest.bind(this)});

		//login data
		this.loginData = {email:'',clave:''};

		this.logged = false;
		this.last_email = '';

		if(loginData){
			this.onLogin(loginData);
		}else{
			this.dom.suscr.inputs.email.focus();
		}
		$('div_olvido_contra').addEvent('click',this.SendPassword.bind(this));
	},
	
	SendPassword: function(){
		var email = this.dom.suscr.inputs.email.value = this.dom.suscr.inputs.email.value.trim();
		loading.show(this.dom.overlay);
		this.request.action ='Restore';
		this.request.send({data:'action='+this.request.action+'&email='+this.dom.suscr.inputs.email.value});
		
	},
	
	checkData: function(){
		
		var email = this.dom.suscr.inputs.email.value = this.dom.suscr.inputs.email.value.trim();

		if(!email.isMail() || !this.dom.suscr.inputs.clave.value.isPassword()){
			alert('Debe de ingresar un mail valido y la contraseña');
			return false;
		}
		return true;
	},

	Login: function(){
		if(this.checkData()){
			loading.show(this.dom.overlay);
			this.request.action ='Login';
			this.request.send({data:'action='+this.request.action+'&email='+this.dom.suscr.inputs.email.value+'&clave='+this.dom.suscr.inputs.clave.value});
			this.sendForm = false;
		}
		
	},
	
	onRequest: function(){
		alertInfo();
		if(this.request.action=='BOLETIN'){
			this.onComplete(this.request.response.text);
		}else if(this.request.action=='CheckMail'){
			this.onCheckMail(this.request.response.text);
		}else if(this.request.action=='Restore'){
			this.onRestore(this.request.response.text);
		}else if(this.request.action=='Login'){
			var info = JSON.decode(this.request.response.text);
			this.onLogin(info.data,info.status);
		}else{
			alert(this.request.response.text);
		}
	},
	
	onRestore: function(response){
		var email = this.dom.suscr.inputs.email.value;
		if(['true','false'].contains(response)){
			if(response=='true'){
				alert('Se envio el mail al correo '+email);
				this.dom.suscr.inputs.clave.set('value','').focus();
			}else{
				alert('No se envio el mail al correo '+email);
				this.dom.suscr.inputs.clave.set('value','');
			}
			loading.remove();
		}else{
			alert(response);
		}
	},

	onLogin: function(response,status){
		alertInfo();
		var data = false;
		if(response=='false'){
			alertInfo('Identificación incorrecta.','error');
		}else if($type(response)=='object'){
			data = response;
		}else{
			try{
				data = JSON.decode(response);
			}catch(e){
				alert('Ha surgido un error:');
				alert(response);
			}
		}
		if(status == "ERROR"){ 
			alert('ingrese el usuario y la contraseña correctamente.');
			loading.remove();
			return false;
		}
		
		if(status == "ERROR_CLAVE"){ 
			alert('ingrese el usuario y la contraseña correctamente.');
			loading.remove();
			return false;
		}else{
			if(status == "NO_EXISTE"){ 
				alert('ingrese el usuario y la contraseña correctamente.');
				loading.remove();
				return false;
			}
		}
		if(data){
			if(status && status=='SUSCRIBE'){
				window.location.href = window.location.href+'';
			}else{
				
				this.logged = true;

				//login data
				this.loginData = {email:data.email,clave:data.clave};

				this.forceLogin(false);

				//fill suscr inputs
				['email','nombre','apellidos','clave','telefono','celular'].each(function(el){
					this.dom.suscr.inputs[el].value = data[el];
				},this);

				['elearning'].each(function(el){
					this.dom.suscr.inputs[el][0].checked = data[el];
					this.dom.suscr.inputs[el][1].checked = !data[el];
				},this);

				this.dom.suscr.inputs.programas.each(function(el){
					el.checked = data.programas.contains(el.value);
				});

				//clave no required
				this.dom.suscr.inputs.clave.addClass('norequired').getParent().getPrevious().set('html','Contraseña');

				//this.dom.suscr.inputs.programas[0].focus();

				$('enviar').value = "Listo para editar!";

				this.validator.test();

				$('textsearch').set('value',data.email).readOnly = true;
								
				$('div_contrasena').removeClass('hidden');
				$('div_nombre').removeClass('hidden');
				$('div_apellidop').removeClass('hidden');
				
				
				$('div_phone').removeClass('hidden');
				$('div_phone').removeClass('hidden');
				
				$('div_programas').removeClass('hidden');
				$('div_elearning').removeClass('hidden');
				
				$('div_enviar').removeClass('hidden');
				$('div_enviar_olvido').addClass('hidden');

				loading.remove();
			}
		}
	},

	send: function(){
		alertInfo();
		var checkForm = this.validator.test();
		if(!checkForm){
			this.validator.showInvalid(true,{x:-270,y:-24},true);
		}else{
			var programas = 0;
			this.dom.suscr.inputs.programas.each(function(el){
				if(el.checked){
					programas++;
				}
			},this);
			if(programas==0){
				alertInfo('Debe seleccionar uno o más programas de interés.','error');
			}else{
				loading.show(this.dom.overlay);
				this.request.action = 'BOLETIN';
				this.request.send({data:'action='+this.request.action+this.getPostData()});
			}
		}
	},

	onComplete: function(response){
		if(response=='false'){
			alert('ERROR!\nNo se pudo procesar la información.\nPor favor, contacte con el administrador.');
		}else if(response=='true'){
			if(this.logged){
				alertInfo('Actualizado correctamente.','success');
				this.loginData = {email:this.dom.suscr.inputs.email.value,clave:this.dom.suscr.inputs.clave.value};
			}else{
				this.dom.suscr.form.disabled = true;
				$each(this.dom.suscr.inputs,function(el){
					if($type(el)=='array'){
						el.each(function(it){
							it.disabled=true;
						});
					}else{
						el.disabled=true;
					}
				});
				window.location.href = base+gracias;
				return;
			}
		}else{
			alert('Ha surgido un error:');
			alert(response);
		}
		loading.remove();
	},

	getPostData: function(){
		var data = '';

		if(this.logged && this.dom.suscr.inputs.clave.value.trim()==''){
			this.dom.suscr.inputs.clave.value = this.loginData.clave;
		}

		['email','clave','nombre','apellidos','telefono','celular'].each(function(el){
			data += '&'+el+'='+encodeURIComponent(this.dom.suscr.inputs[el].value.trim());
		},this);

		['elearning'].each(function(el){
			data += '&'+el+'='+(this.dom.suscr.inputs[el][0].checked?'S':'N');
		},this);

		this.dom.suscr.inputs.programas.each(function(el){
			if(el.checked){
				data += '&programas[]='+el.value;
			}
		},this);

		if(this.logged){
			data += '&login_email='+this.loginData.email+'&login_clave='+this.loginData.clave;
		}else{
			data += '&login_email='+this.dom.suscr.inputs.email.value+'&login_clave='+this.dom.suscr.inputs.clave.value;
		}
		data += '&ref='+ref;

		return data;
	},

	checkMail: function(){
		var email = this.dom.suscr.inputs.email.value = this.dom.suscr.inputs.email.value.trim();
		if(email!=this.last_email && email.test(iRules.mail.regex) && (!this.logged || email!=this.loginData.email)){
			this.last_email = email;
			loading.show(this.dom.overlay);
			this.request.action = 'CheckMail';
			this.request.send({data:'action='+this.request.action+'&email='+email});
		}
		if(email==this.loginData.email){
			this.last_email = '';
			alertInfo();
		}

	},

	onCheckMail: function(response){
		if(this.logged){
			if(response=='true'){
				alertInfo('No puede usar el email: '+this.dom.suscr.inputs.email.value,'error');
				this.dom.suscr.inputs.email.set('value','').focus();
				this.last_email = '';
			}
		}else{
			if(response=='true'){
				alertInfo('Al parecer usted ya se encuentra registrado. Si es un usuario antiguo probablemente no tiene contraseña, para generar una favor use el link ¿Olvidó su contraseña?. En caso sea un usuario nuevo y no la recuerde use ese mismo link.','error');
				//alertInfo('Ud. ya se encuentra registrado, necesita autentificarse en el formulario superior para poder continuar, si ha olvidado su contraseña use el link "¿Olvidó su contraseña?".','error');
				$('div_contrasena').removeClass('hidden');
				$('clave').removeClass('password');
				$('clave').addClass('password_ya_reg');
				this.dom.suscr.inputs.clave.set('value','').focus();
				$('div_enviar_olvido').removeClass('hidden');
				
				
				//this.forceLogin(true);
			}else{
				$('clave').addClass('password');
				$('clave').removeClass('password_ya_reg');
				
				$('div_contrasena').removeClass('hidden');
				$('div_nombre').removeClass('hidden');
				$('div_apellidop').removeClass('hidden');
				
				$('div_phone').removeClass('hidden');
				$('div_celular').removeClass('hidden');
				$('div_enviar_olvido').addClass('hidden');
				
				$('div_elearning').removeClass('hidden');
				
				$('div_programas').removeClass('hidden');
				
				$('div_enviar').removeClass('hidden');
				//this.forceLogin(false);
			}
		}
		loading.remove();
	},

	forceLogin: function(mode){
		if(mode){
			Login.inputs.email.value = this.dom.suscr.inputs.email.value;
			Login.inputs.clave.value = '';
			this.dom.suscr.form.disabled = true;
			$each(this.dom.suscr.inputs,function(el,i){
				if($type(el)=='array'){
					el.each(function(it){
						it.disabled=true;
					});
				}else if(i!='email'){
					el.disabled=true;
				}
			});
			Login.inputs.clave.focus();
			window.scroll(0,124);
		}else{
			this.dom.suscr.form.disabled = false;
			$each(this.dom.suscr.inputs,function(el,i){
				if($type(el)=='array'){
					el.each(function(it){
						it.disabled=false;
					});
				}else{
					el.disabled=false;
				}
			});
			this.dom.suscr.inputs.clave.focus();
			
			
		}
	}
};

Login.onComplete = SC.onLogin.bind(SC);


window.addEvent('domready',SC.init.bind(SC));
