//Grupo de métodos generales
var Solidus = {
	
	//Método inicial. Se encarga de llamar al resto de los métodos del script
	start: function(){
		Solidus.activar_enlaces();
		Solidus.activar_enlaces_externos();
		Login.start();
		Formularios_iniciales.start();
		Formularios_alta.start();
		if($('form_contacto')){
			Contacto.start();
		}
		if(($('contenido').hasClass('disenadores'))&&($('enlace_ancla'))){
			$('enlace_ancla').addEvent('click', function(e){
				if(window.ie){
					e.returnValue = false;	
				}else{
					e.preventDefault();
				}
				Formularios_iniciales.ancla(2);
			});
		}
		if(($('contenido').hasClass('ongs'))&&($('enlace_ancla'))){
			$('enlace_ancla').addEvent('click', function(e){
				if(window.ie){
					e.returnValue = false;
				}else{
					e.preventDefault();	
				}
				e.preventDefault();
				Formularios_iniciales.ancla(3);
			});
		}		
		if(($('tabla_disenadores'))&&($('principal').hasClass('admin')==false)){
			TablaOrdenable.disenadores();
		}
		if(($('tabla_ongs'))&&($('principal').hasClass('admin')==false)){
			TablaOrdenable.ongs();	
		}
		if(($('contenido').hasClass('articulos'))||($('contenido').hasClass('trabajos'))){
			Light.start();
		}
	},
	
	//Método que activa el enlace del logo, debido al hack para reeemplazar el encabezado por una imagen
	activar_enlaces: function(){
		$('logoprincipal').addEvent('click', function(){
			document.location = $('enlace_home').getProperty('href');
		});
	},
	
	activar_enlaces_externos: function(){
		$$('a').each(function(el) { 
			if (el.getProperty('rel') == 'external') { 
				el.addEvent('click', function(e) { 
					e = new Event(e); 
					e.stop();     
					window.open(this.getProperty('href')); 
				}.bind(el)); 
			}     
		});		
	}
}

//Grupo de métodos para el formulario de login
var Login = {
	
	//Método inicial. Prepara el formulario de login, así como las capas necesarias para mostrar los mensajes de éxito, error, etc
	start: function(){
		if($('mensajes_identificacion')){
			var deslizamiento = new Fx.Slide('mensajes_identificacion').hide();
			if(window.ie)
				$('fecha').setStyle('padding-top', '0px');
			//Añadimos el evento para el botón de envío.
			$('envio_login').addEvent('click', function(e){
				if(window.ie){
					e.returnValue = false;
				}else{
					e.preventDefault();
				}
				var parrafo = new Element('p',{'id': 'p_login'}).setText('Cargando...');
				parrafo.injectInside('mensajes_identificacion');
				var fx_texto = $('mensajes_identificacion').effects({duration: 300, transition: Fx.Transitions.Quart.easeOut});
				deslizamiento.slideIn().chain(function(){
					fx_texto.start.delay(700, fx_texto, { 'color': '#999999' });
					var email = encodeURI($('correo').value);
					var passwd = $('passwd').value;
					var url = $('enlace_home').href+'admin/validar_usuario/ajax';
					var miAjax = new Ajax(url,
					{
						method: 'post',
						data: $('formulario_login'),
						onComplete: function(request){
							if((request == 'Usuario o password incorrecto')||(request == 'Debe rellenar los dos campos')){
								$('p_login').setText(request);
							}else{
								$('mensajes_identificacion').remove();
								$('capa_login').innerHTML = request;
							}
							(function(){
								deslizamiento.slideOut();
							}).delay(1400);
							
						}
					}).request();
				});
			});
		}
	}
}

//Grupo de métodos que hacen referencia a los formularios de inscripción, tanto de diseñadores como de ongs
var Formularios_iniciales = {

	start: function(){
		//Formulario de diseñadores
		if($('registro_disenadores')){
			//preparamos el deslizamiento de la capa del formulario y el efecto para el campo de contraseña
			var deslizamiento = new Fx.Slide('form_disenadores').hide();
			var fx_contrasena = $('etiqueta_contrasena').effects({duration: 1000, transition: Fx.Transitions.Quart.easeOut});
			$('etiqueta_contrasena').setStyle('opacity', 0);
			//añadimos el evento para cuando se pulse en "regístrate +"
			$('registro_disenadores').addEvent('click', function(e){
				if(window.ie){
					e.returnValue = false;	
				}else{
					e.preventDefault();	
				}
				//cuando termina el deslizamiento, si el formulario está abierto recibe el foco 
				//llama a los métodos para hacer scroll y para cambiar el texto del enlace
				deslizamiento.toggle().addEvent('onComplete', function(){
					if($('form_disenadores').getParent().getStyle('height')!='0px'){
						$('nombre_disenador').focus();
						Formularios_iniciales.ancla(2);
						Formularios_iniciales.cambia_texto_enlace(1);
					}else{
						Formularios_iniciales.ancla(1);
						Formularios_iniciales.cambia_texto_enlace(2);
					}
				});
			});
			//evento para cuando el campo "contraseña" recibe el foco: se muestra un mensaje informando de la longitud válida de la contraseña
			$('contrasena_disenador').addEvent('focus', function(){
				fx_contrasena.start({
					'opacity': 1
				}).chain(function(){
					this.start({
						'color': '#ff0000'
					});
					this.start.delay(3000, this, {
						'opacity': 0,
						'color': '#333333'
					});		
				});
			});
			//envio del formulario de diseñadores
			$('envio_disenadores').addEvent('click', function(e){
				if(window.ie){
					e.returnValue = false;	
				}else{
					e.preventDefault();
				}
				Formularios_iniciales.envia(1);											  
			});			
		}
		//Formulario de ONGs, el funcionamiento es análogo al de diseñadores
		if($('registro_ongs')){
			var deslizamiento2 = new Fx.Slide('form_ongs').hide();
			var fx_contrasena2 = $('etiqueta_ong').effects({duration: 1000, transition: Fx.Transitions.Quart.easeOut});
			$('etiqueta_ong').setStyle('opacity', 0);
			$('registro_ongs').addEvent('click', function(e){
				if(window.ie){
					e.returnValue = false;	
				}else{
					e.preventDefault();	
				}
				deslizamiento2.toggle().addEvent('onComplete', function(){
					//abrir el formulario de alta de ongs
					if($('form_ongs').getParent().getStyle('height')!='0px'){
						$('nombre_ong').focus();
						Formularios_iniciales.ancla(3);
						Formularios_iniciales.cambia_texto_enlace(3);
					}else{
						Formularios_iniciales.ancla(1);
						Formularios_iniciales.cambia_texto_enlace(4);
					}
				});
			});	
			$('contrasena_ong').addEvent('focus', function(){
				fx_contrasena2.start({
					'opacity': 1				 
				}).chain(function(){
					this.start({
						'color': '#111111'
					});
					this.start.delay(3000, this, {
						'opacity': 0,
						'color': '#333333'
					});
				});
			});
			//envio del formulario de ongs
			$('envio_ongs').addEvent('click', function(e){
				if(window.ie){
					e.returnValue = false;	
				}else{
					e.preventDefault();	
				}
				Formularios_iniciales.envia(2);											  
			});						
		}
	},
	
	//Método que realiza un scroll a la página hacia el elemento correspondiente utilizando para ello la librería mooscroll.js
	ancla: function(opt){
		var skroll = new Fx.ScrollWindow({duration: 1000, wait: false, transition: Fx.Transitions.Back.easeInOut});
		switch(opt){
			case 1:
				//subir scroll al tope
				skroll.toElement('ancla_top');
				break;
			case 2:
				//bajar scroll al formulario de diseñadores
				skroll.toElement('ancla_disenadores');
				break;
			case 3:
				//bajar scroll al formulario de ong´s
				skroll.toElement('ancla_ongs');
				break;
		}
		
	},
	
	//Método que cambia el texto del enlace de "REGÍSTRATE +" a "REGÍSTRATE -" y viceversa
	cambia_texto_enlace: function(opt){
		var fx_texto = $('registro_disenadores').effects({duration: 1000, transition: Fx.Transitions.Quart.easeOut});
		var fx_texto2 = $('registro_ongs').effects({duration: 1000, transition: Fx.Transitions.Quart.easeOut});
		switch(opt){
			case 1: 
				$('registro_disenadores').setText('REG\u00CDSTRATE -');
				fx_texto.start({
					'color': '#999999'
				})	
				break;
			case 2:
				$('registro_disenadores').setText('REG\u00CDSTRATE +');
				fx_texto.start({
					'color': '#333333'
				})						
				break;
			case 3:
				$('registro_ongs').setText('REG\u00CDSTRATE -');
				fx_texto2.start({
					'color': '#999999'
				})	
				break;
			case 4:
				$('registro_ongs').setText('REG\u00CDSTRATE +');
				fx_texto2.start({
					'color': '#333333'
				})						
				break;
		}
	},

	//Método que realiza la comprobación y el envío del formulario de diseñadores o de ongs, dependiendo del parámetro recibido
	envia: function(opt){
		switch(opt){
			//Formulario de diseñadores
			case 1:
				//comprobación de los campos
				if((!Validacion.comprueba_vacio('nombre_disenador'))||(!Validacion.comprueba_vacio('apellidos_disenador'))||((!Validacion.comprueba_vacio('identidad_disenador'))&&(!Validacion.comprueba_vacio('editorial_disenador'))&&(!Validacion.comprueba_vacio('carteleria_disenador'))&&(!Validacion.comprueba_vacio('web_disenador'))&&(!Validacion.comprueba_vacio('copy_disenador'))&&(!Validacion.comprueba_vacio('packaging_disenador')))||(!Validacion.comprueba_vacio('email_disenador'))){
					$('errores_disenadores').setText('Debe rellenar todos los campos marcados con un asterisco');	
				}else if (!Validacion.comprueba_email('email_disenador')) {
					$('errores_disenadores').setText('Por favor, introduzca un email v\u00E1lido');
				}else if (!Validacion.comprueba_contrasena('contrasena_disenador')) {
					$('errores_disenadores').setText('La contrase\u00F1a no tiene un formato v\u00E1lido');
				}else{ 
					//si todo es correcto realiza la llamada Ajax al script correspondiente y devuelve el mesaje correspondiente
					var url = $('enlace_home').href+'disenadores/alta_temporal/ajax';
					var miAjax = new Ajax(url,
					{
						method: 'post',
						data: $('form_disenadores'),
						onComplete: function(request){
							if(request=='true'){
								$('errores_disenadores').setHTML('<span class="verde">Su solicitud se ha enviado correctamente.<br />En caso de ser admitido le enviaremos una respuesta en el menor tiempo posible</span>');
								$('form_disenadores').remove();
							}else if(request=='existe'){
								$('errores_disenadores').setHTML('Ya existe un usuario con ese correo');
							}else{
								$('errores_disenadores').setHTML('La petici\u00F3n Ajax no se realiz\u00F3 correctamente, por favor, contacte con el administrador para informar del problema'+request);	
							}
						}
					}).request();
				}
				Formularios_iniciales.ancla(2);
			break;
			//Formulario de ong´s
			case 2:
				if( (!Validacion.comprueba_vacio('ong')) || (!Validacion.comprueba_vacio('nombre_ong')) || (!Validacion.comprueba_vacio('apellidos_ong')) || (!Validacion.comprueba_vacio('pais_ong')) || (!Validacion.comprueba_vacio('email_ong')) || (!Validacion.comprueba_vacio('contrasena_ong')) ){
					$('errores_ongs').setText('Debe rellenar todos los campos marcados con un asterisco');
				}else if(!Validacion.comprueba_email('email_ong')){
					$('errores_ongs').setText('Por favor, introduzca un email v\u00E1lido');
				}else if(!Validacion.comprueba_contrasena('contrasena_ong')){
					$('errores_ongs').setText('La contrase\u00F1a no tiene un formato v\u00E1lido');
				}else{
					var url = $('enlace_home').href+'ongs/alta_temporal/ajax';
					var miAjax = new Ajax(url,
					{
						method: 'post',
						data: $('form_ongs'),
						onComplete: function(request){
							if(request=='true'){
								$('errores_ongs').setHTML('<span class="verde">Su solicitud se ha enviado correctamente.<br />En caso de ser admitido le enviaremos una respuesta en el menor tiempo posible</span>');
								//POSIBLE ERROR. COMPROBAR
								$('form_ongs').remove();
							}else{
								$('errores_ongs').setHTML('La petici\u00F3n Ajax no se realiz\u00F3 correctamente, por favor, contacte con el administrador para informar del problema');	
							}
						}
					}).request();
				}
				Formularios_iniciales.ancla(3);
			break;
			
		}
	},
	
	comprueba_formulario_ong: function(opt){
		switch(opt){
		}
	}	

}

var Formularios_alta = {
	
	start: function(){
		if(($('contenido').hasClass('disenadores'))&&($('form_disenadores'))){
			var fx_contrasena = $('etiqueta_contrasena').effects({duration: 1000, transition: Fx.Transitions.Quart.easeOut});
			$('etiqueta_contrasena').setStyle('opacity', 0);
			$('contrasena_disenador').addEvent('focus', function(){
				fx_contrasena.start({
					'opacity': 1
				}).chain(function(){
					this.start({
						'color': '#ff0000'
					});
					this.start.delay(3000, this, {
						'opacity': 0,
						'color': '#333333'
					});		
				});
			});
			$('envio_disenadores').addEvent('click', function(e){
				if(window.ie){
					e.returnValue = false;	
				}else{
					e.preventDefault();	
				}
				Formularios_iniciales.envia(1);					  
			});
		}else if(($('contenido').hasClass('ongs'))&&($('form_ongs'))){
			var fx_contrasena = $('etiqueta_contrasena').effects({duration: 1000, transition: Fx.Transitions.Quart.easeOut});
			$('etiqueta_contrasena').setStyle('opacity', 0);
			$('contrasena_ong').addEvent('focus', function(){
				fx_contrasena.start({
					'opacity': 1
				}).chain(function(){
					this.start({
						'color': '#ff0000'
					});
					this.start.delay(3000, this, {
						'opacity': 0,
						'color': '#333333'
					});		
				});
			});
			$('envio_ongs').addEvent('click', function(e){
				if(window.ie){
					e.returnValue = false;
				}else{
					e.preventDefault();	
				}
				Formularios_iniciales.envia(2);
			});
		}
	}
}

var TablaOrdenable = {
	
	disenadores: function(){
		$('enlace_filtro').removeClass('oculto');
		$('info_disenadores').removeClass('oculto');
		var desliza_info = new Fx.Slide('info_disenadores').hide();
		$$('#tabla_disenadores a').each(function(el){
			el.setStyle('text-decoration', 'none');
			el.addEvent('click', function(e){
				if(window.ie){
					e.returnValue = false;	
				}else{
					e.preventDefault();
				}
			});
		});
		var miTabla = {};
		miTabla = new sortableTable('tabla_disenadores', {
			overCls: 'over',
			onClick: function(){
				$('info_disenadores').innerHTML = '<p>Cargando...</p>';
				this.getFirst().getChildren().each(function(el){
					var url = el.href.substring(0, (el.href.length)-5)+'/ajax';
					var miAjax = new Ajax(url,
					{
						method: 'post',
						onComplete: function(request){
							if(request){
								var results = Json.evaluate(request);
								if(results){
									$('info_disenadores').getFirst().remove();
									var elemento = new Element('p');
									var negrita = new Element('strong').appendText('Nombre / Apellidos: ').injectInside(elemento);
									elemento.appendText(results.nombre+' / '+results.apellidos).injectInside('info_disenadores');
									var elemento = new Element('p');
									var negrita = new Element('strong').appendText('Ciudad / País: ').injectInside(elemento);
									elemento.appendText(results.ciudad+' / '+results.pais).injectInside('info_disenadores');									
									var elemento = new Element('p');
									var negrita = new Element('strong').appendText('Áreas: ').injectInside(elemento);
									elemento.appendText(results.areas).injectInside('info_disenadores');
									var elemento = new Element('p');
									var negrita = new Element('strong').appendText('Intereses: ').injectInside(elemento);
									elemento.appendText(results.intereses).injectInside('info_disenadores');
									if(results.email!='no'){	
										var elemento = new Element('p');
										var negrita = new Element('strong').appendText('Email: ').injectInside(elemento);
										var enlace = new Element('a', {href: 'mailto: '+results.email, title: 'Enviar un correo a '+results.nombre+' '+results.apellidos}).appendText(results.email).injectInside(elemento);
										elemento.injectInside('info_disenadores');
									}else{
										var elemento = new Element('p');
										var negrita = new Element('strong').appendText('Email: ');
										negrita.injectInside(elemento);
										elemento.appendText('Debe ser un usuario registrado para poder ver el email de este diseñador').injectInside('info_disenadores');
									}
									if(results.sitio_web!=''){
										var elemento = new Element('p');
										var negrita = new Element('strong').appendText('Sitio web: ').injectInside(elemento);
										var enlace = new Element('a', {href: results.sitio_web, title: 'Visitar la web de '+results.nombre+' '+results.apellidos}).appendText(results.sitio_web).injectInside(elemento);
										elemento.injectInside('info_disenadores');
									}
									//$('info_disenadores').setHTML(request);
									desliza_info.slideIn();
								}
							}
						}
					}).request();
				});
			}
		});
		var deslizamiento = new Fx.Slide('filtro_disenadores').hide();
		var fx_borde = $('filtrado').effects({duration: 200, transition: Fx.Transitions.Quart.easeOut});
		$('enlace_filtro').addEvent('click', function(){
			deslizamiento.toggle().addEvent('onComplete', function(){
			});
			if(deslizamiento.open){
				$('enlace_filtro').setText('+ Mostrar las opciones de filtrado');
				//$('filtrado').setStyle('border', 'none');
				fx_borde.start({
					'border-color': '#ffffff'		 
				});
			}else{
				$('enlace_filtro').setText('- Ocultar las opciones de filtrado');
				//$('filtrado').setStyle('border', '1px solid #cccccc');
				fx_borde.start({
					'border-color': '#cccccc'
				});
			}
		});
		$('filtro_disenadores').addEvent('submit', function(e){
			if(window.ie){
				e.returnValue = false;
			}else{
				e.preventDefault();	
			}
			miTabla.filter('filtro_disenadores');
			if(miTabla.filtered){
				$('limpiar_filtro').removeClass('oculto');
			}
		});
		$('limpiar_filtro').addEvent('click', function(){
			miTabla.clearFilter();
			$('filtro_disenadores').reset();
			$('limpiar_filtro').addClass('oculto');
		});
	},
	
	ongs: function(){
		$('enlace_filtro').removeClass('oculto');
		$('info_ongs').removeClass('oculto');
		var desliza_info = new Fx.Slide('info_ongs').hide();
		$$('#tabla_ongs a').each(function(el){
			el.setStyle('text-decoration', 'none');
			el.addEvent('click', function(e){
				if(window.ie){
					
				}else{
					e.preventDefault();
				}
			});
		});
		var miTabla2 = {};
		miTabla2 = new sortableTable('tabla_ongs', {
			overCls: 'over',
			onClick: function(){
				$('info_ongs').innerHTML = '<p>Cargando...</p>';
				this.getFirst().getChildren().each(function(el){
					var url = el.href.substring(0, (el.href.length)-5)+'/ajax';
					var miAjax = new Ajax(url,
					{
						method: 'post',
						onComplete: function(request){
							if(request){
								var results = Json.evaluate(request);
								if(results){
									$('info_ongs').getFirst().remove();
									var elemento = new Element('p');
									var negrita = new Element('strong').appendText('Ong: ').injectInside(elemento);
									elemento.appendText(results.ong).injectInside('info_ongs');
									var elemento = new Element('p');
									var negrita = new Element('strong').appendText('Ciudad / País: ').injectInside(elemento);
									elemento.appendText(results.ciudad+' / '+results.pais).injectInside('info_ongs');
									if(results.sitio_web!=''){
										var elemento = new Element('p');
										var negrita = new Element('strong').appendText('Sitio web: ').injectInside(elemento);
										var enlace = new Element('a', {href: results.sitio_web, title: 'Visitar la web de '+results.ong}).appendText(results.sitio_web).injectInside(elemento);
										elemento.injectInside('info_ongs');
									}
									var capa_responsable = new Element('div', {'id': 'responsable_ong'}).injectInside('info_ongs');
									var encabezado = new Element('h4').appendText('Responsable').injectInside(capa_responsable);
									var elemento = new Element('p').injectInside(capa_responsable);
									if(results.email!='no'){
										var negrita = new Element('strong').appendText('Nombre / Apellidos: ').injectInside(elemento);
										elemento.appendText(results.nombre+' / '+results.apellidos);
										var elemento = new Element('p').injectInside(capa_responsable);
										var negrita = new Element('strong').appendText('Cargo: ').injectInside(elemento);
										elemento.appendText(results.cargo);
										var elemento = new Element('p').injectInside(capa_responsable);
										var negrita = new Element('strong').appendText('Email: ').injectInside(elemento);
										var enlace = new Element('a', {href: 'mailto:'+results.email, title: 'Enviar un correo al responsable'}).appendText(results.email).injectInside(elemento);
									}else{
										elemento.appendText('Debe ser un usuario registrado para poder contactar con el responsable de la ong');
									}
									desliza_info.slideIn();
								}
							}
						}
					}).request();
				});
			}
		});
		var deslizamiento = new Fx.Slide('filtro_ongs').hide();
		var fx_borde = $('filtrado').effects({duration: 200, transition: Fx.Transitions.Quart.easeOut});
		$('enlace_filtro').addEvent('click', function(){
			deslizamiento.toggle().addEvent('onComplete', function(){
			});
			if(deslizamiento.open){
				$('enlace_filtro').setText('+ Mostrar las opciones de filtrado');
				//$('filtrado').setStyle('border', 'none');
				fx_borde.start({
					'border-color': '#ffffff'		 
				});
			}else{
				$('enlace_filtro').setText('- Ocultar las opciones de filtrado');
				//$('filtrado').setStyle('border', '1px solid #cccccc');
				fx_borde.start({
					'border-color': '#cccccc'
				});
			}
		});
		$('filtro_ongs').addEvent('submit', function(e){
			e.preventDefault();
			miTabla.filter('filtro_ongs');
			if(miTabla.filtered){
				$('limpiar_filtro').removeClass('oculto');
			}
		});
		$('limpiar_filtro').addEvent('click', function(){
			miTabla.clearFilter();
			$('filtro_ongs').reset();
			$('limpiar_filtro').addClass('oculto');
		});
	}

}

var Contacto = {

	start: function(){
		$('envio_contacto').addEvent('click', function(e){
			e.preventDefault();
			var errores = 0;
			if(!Validacion.comprueba_vacio('nombre')){
				var parrafo = new Element('p').appendText('El campo nombre no puede estar vac\u00EDo');
				parrafo.injectInside('errores_contacto');
				errores++;
			}
			if(!Validacion.comprueba_vacio('correo1')){
				var parrafo = new Element('p').appendText('El campo correo no puede estar vac\u00EDo');
				parrafo.injectInside('errores_contacto');
				errores++;
			}else if(!Validacion.comprueba_email('correo1')){
				var parrafo = new Element('p').appendText('El campo correo no presenta el formato correcto');
				parrafo.injectInside('errores_contacto');
				errores++;
			}
			if(!Validacion.comprueba_vacio('asunto')){
				var parrafo = new Element('p').appendText('El campo asunto no puede estar vac\u00EDo');
				parrafo.injectInside('errores_contacto');
				errores++;
			}
			if(errores == 0){
				var parrafo = new Element('p').appendText('Su mensaje se envi\u00F3 con \u00E9xito');
				parrafo.injectInside('exito_contacto');
				$('form_contacto').submit();
			}
		});
	}

}

var Validacion = {

	comprueba_vacio: function(variable){
		if($(variable).getProperty('value').length < 1)
			return false;
		else
			return true;
	},

	comprueba_email: function(variable){
		var filter=/^[A-Za-z][A-Za-z0-9_]*@[A-Za-z0-9_]+\.[A-Za-z0-9_.]+[A-za-z]$/;
		if(!filter.test($(variable).getProperty('value')))
			return false;
		else
			return true;
	},
	
	comprueba_contrasena: function(variable){
		if($(variable).getProperty('value').length<6){
			return false	
		}else{
			return true;	
		}
	}	
	
}

var Light = {

	start: function(){
		new MultiBox('multibox', {
			ajax: true,
			showControls: false
		});			
	}

}

window.addEvent('domready', Solidus.start);	