

/**
 * Javascript de la administración
 *
 * @category javascript
 * @copyright Copyright 2008, Isertia
 * @filesource
 * @package javascript
 * @version 1.0 2008/10/01
 */


/**
 * Ruta web de instalación. Constante
 */
var INSTALATION_DIR = '';
var selected_days = new Array(0);
var tp_loaded = false;


/**
 * Mostrar símbolo de carga 
 * @param e object Elemento al que superponer el cargador
 */
function loading(e, opac)
{
	var opac = opac || '0.5';
	var lwidth;
	var lheight;
	var container;
	var ltop = 0;
	var lleft = 0;
	var lposition = 'absolute';
	if(e == 'parent')
	{
		lwidth = '100%';
		lheight = '100%';
		container = window.parent.document.getElementById('content');		
	}
	else if(e)
	{
		lwidth = $(e).outerWidth(true);
		//lheight = ($(e).outerHeight(true) < lheight)? $(e).outerHeight(true) : lheight;
		lheight = $(e).outerHeight(true);
		container = e;
		ltop = (parseInt($(e).css('top')) > $(e).attr('offsetTop'))? parseInt($(e).css('top')) : $(e).attr('offsetTop');
		lleft = (parseInt($(e).css('left')) > $(e).attr('offsetLeft'))? parseInt($(e).css('left')) : $(e).attr('offsetLeft');
	}
	else
	{
		lwidth = '100%';
		lheight = $(window).height();
		container = window.document.getElementById('content');
	}

	//Crea loading si no existe
	if($('#loading').length < 1)
	{
		$(container).before('<div id="loading"></div>');
		$(container).prev('#loading').css({opacity: opac, left: lleft, top: ltop, width: lwidth, height: lheight, position: lposition});
	}
	return true;
}
function loadingEnd()
{
	while($('#loading').length > 0)
	{
		$('#loading').remove();
	}
	return true;
}


/**
 * Cargar interFace con parámetros
 */
function loadIf()
{
	//Elementos de interface
	$("[rel=interface]").interFace();

	//Iframe en un enlace, para validar
	$("[rel='iframe-coord']").livequery('click', function(event)
	{
		event.preventDefault();		
		$(this).after('<iframe src="'+$(this).attr('href')+'" frameborder="0" class="iframe" name="iframe_js" scrolling="no"></iframe>');
	});
	
	//Relation_n
	if($("select[multiple]:visible").length > 0)
	{
		//Carga boxy, cuadros emergentes. Boxy incluye UI
		$("select[multiple]:visible").asmSelect({
			listType: 'ul',
			highlight: true,
			addItemTarget: 'top',
			removeLabel: lng.del,
			highlightAddedLabel: lng.added+': ',
			highlightRemovedLabel: lng.deleted+': '
		});
	}

	//Multimedia
	if($("div.multimedia").length > 0)
	{
		//Acordeón con los elementos
		$("div.multimedia").accordion({
			header: "h5.header",
			selectedClass: "active",
			active: ".active",
			autoHeight: false
		});
		
		//Enviar formulario, solo campos rellenos del active
		$('form').bind('submit', function(){
			$('.multimedia > div:not([class$="active"]) input').val('');
		});
	}
}


/**
 * Cargar lightbox con parámetros 
 */
function loadLb()
{
	$('a[rel*=lightbox]').lightBox(
	{
		imageLoading: INSTALATION_DIR+'/img/lightbox-ico-loading.gif',
		imageBtnClose: INSTALATION_DIR+'/img/lightbox-btn-close.gif',
		imageBtnPrev: INSTALATION_DIR+'/img/lightbox-btn-prev.gif',
		imageBtnNext: INSTALATION_DIR+'/img/lightbox-btn-next.gif',
		imageBlank: INSTALATION_DIR+'/img/lightbox-blank.gif',
		containerResizeSpeed: 250,
		txtImage: lng.image,
		txtOf: lng.of,
		keyToPrev: lng.lightbox_prev,
		keyToNext: lng.lightbox_next
	});
}


/**
 * Carga User Interface de jquery
 */
function loadUI()
{
	//Fecha
	$('input.date_picker').datepicker({
		yearRange: "-60:+2",
		firstDay: 1,
		dateFormat: 'd-m-yy',
		clearText: lng.clear,
		clearStatus: '',
		closeText: lng.close,
		closeStatus: '',
		prevText: lng.prev,
		prevStatus: '',
		nextText: lng.next,
		nextStatus: '',
		currentText: lng.today,
		currentStatus: '',
		monthNames: lng.months,
		monthNamesShort: lng.months_short,
		weekHeader: 'Sm',
		dayNames: lng.days,
		dayNamesShort: lng.days_short,
		dayNamesMin: lng.days_min,
		dayStatus: 'DD'
	});
	
	//Fecha con múltiples días seleccionados
	$('.time_n > div[id!=dp]').datepicker({
		yearRange: "-60:+2",
		firstDay: 1,
		dateFormat: 'd-m-yy',
		clearText: lng.clear,
		clearStatus: '',
		closeText: lng.close,
		closeStatus: '',
		prevText: lng.prev,
		prevStatus: '',
		nextText: lng.next,
		nextStatus: '',
		currentText: lng.today,
		currentStatus: '',
		monthNames: lng.months,
		monthNamesShort: lng.months_short,
		weekHeader: 'Sm',
		dayNames: lng.days,
		dayNamesShort: lng.days_short,
		dayNamesMin: lng.days_min,
		dayStatus: 'DD',
		onSelect: function(date, dp)//Seleccionar día, añade a la lista
		{
			for(var i=0; selected_days && i < selected_days.length; i++)
			{
				//Fecha coincide con algun día, lo borra de la lista
				if(dp.selectedYear == selected_days[i][0] && dp.selectedMonth+1 == selected_days[i][1] && dp.selectedDay == selected_days[i][2])
				{
					selected_days.splice(i,1);
					$(this).children('input')[0].value = JSON.stringify(selected_days);
					return true;
				}
			}
			//No está en lista, añade y actualiza campo
			selected_days[selected_days.length] = new Array(dp.selectedYear, dp.selectedMonth+1, dp.selectedDay);
			if($(this).children('input').length > 0)
			{
				$(this).children('input')[0].value = JSON.stringify(selected_days);
			}
			return true;
		},
		beforeShowDay: function(date)//Marca los días seleccionados en el input
		{
			if(selected_days.length === 0)
			{
				if($(this).children('input').length > 0 && $(this).children('input')[0].value)
				{
					selected_days = JSON.parse($(this).children('input')[0].value);
				}
			}
			for(var i=0; selected_days && i < selected_days.length; i++)
			{
				//Fecha coincide con algun día
				if(date.getFullYear() == selected_days[i][0] && date.getMonth()+1 == selected_days[i][1] && date.getDate() == selected_days[i][2])
				{
					return [true, 'selected'];
				}
			}
			return [true];//Dia habilitado sin seleccionar
		}
	});

	
	
	//Hora
	if($("input.time_picker").length >= 1)
	{
		tp_loaded = false;
		if( ! tp_loaded)//JS y CSS de clockpick no cargado
		{
			$("input.time_picker").clockpick({
				starthour : 0,
				endhour : 23,
				showminutes : true,
				minutedivisions : 12,
				military : true			
			});
			tp_loaded = true;
		}
		else //Archivos cargados, solo inicializar campos
		{
			$("input.time_picker").clockpick({
				starthour : 0,
				endhour : 23,
				showminutes : true,
				minutedivisions : 12,
				military : true			
			});			
		}
	}
	
	//Debug
	$("#debug").draggable();
	$("#debug h4").unbind('dblclick').bind('dblclick', function()
	{
		$("#debug").toggleClass('minimized');
		$("#debug .text").toggleClass('hidden');
	});
	/*
	//Aviso navegador no compatible (IE6 o inferior)
	if(jQuery.browser.msie && jQuery.browser.version.substr(0,1) <= 6)
	{
		new Boxy('<div id="boxy_error">'+lng.err_navigator_no_supported+'</div>',
		{
			title: lng.err_title,
			closeable: false,
			modal: true,
			afterShow: function()
			{
				this.resize(350, 150);
				this.center();
			}
		});
	}
	*/
	
}


/**
 * Cargar ventanas comportamiento con parámetros 
 */
function loadBoxy()
{
	var url_data = window.document.location; //Url a cargar
	var url_aux = window.document.location; //Url actual

	//**********
	//Boxy para relation_n, controla el formulario
	$("div#content[class!='gallery'] [rel='boxy']").livequery('click', function(event)
	{
		event.preventDefault();
		//Al pulsar sobre una imagen, buscar el primer enlace superior
		if(event.target.nodeName.toLowerCase() == 'img')
		{
			event.target = $(event.target).parents('a:first');
		}
		
		//Crear boxy
		Boxy.load($(event.target).attr('href')+'show_full/',
		{
			title: $(event.target).attr('title'),
			closeText: lng.close_boxy,
			modal: true,
			actuator: $(event.target),
			unloadOnHide: true,
			afterHide: function()//Tras ocultar, restaurar url de carga de datos
			{
				url_data = window.document.location;
			},
			afterShow: function()//Tras mostrar
			{
				//Ventana creada dentro de un boxy, como como ruta de vuelta la referencia
				if($(event.target).parent().parent().parent().parent().parent().attr('class') == 'boxy-content')
				{
					url_data = url_aux;
				}
				else if(url_aux == window.document.location)//Ventana original, url aux para futuras a ella misma
				{
					url_aux = this.options.actuator.attr('href');//Ruta de llamada la nuevo boxy
				}

				//Cargar UI
				loadUI();
				loadIf();
			},
			behaviours: function(r) //Tras cambiar contenido
			{
				var boxy_element = this;//Mantener el objeto boxy para llamadas siguientes

				$(r).find('a').click(function(e)//Enlaces deshabilitados
				{
					e.preventDefault();
				});
				
				//Action del form, llamada ajax. Mirar resultado
				$(r).find('form').unbind('submit.bif').bind('submit.bif', function handler(event)
				{
					event.preventDefault();
					
					$.post($(event.target).attr('action')+'show_full/', $(event.target).serialize(), function(text, status)
					{
						//Estado de la llamada ajax
						if(status == 'success')
						{
							//Tipo del mensaje de aviso
							switch($(text).find("div:first").attr('class'))
							{
								//Resultado correcto, cerrar cuadro y recargar web parent
								case 'info':
									//Mensaje éxito
									boxy_element.setContent($(text).find("div:first"));
									
									var id_element = $(boxy_element.options.actuator).parent().attr('id');
									//Si elemento por encima 2 posiciones tiene id es formulario, cambiar solo esa parte
									if(id_element.toString().length > 2)
									{
										//Es un select, carga los options uno a uno
										if($('#'+id_element).hasClass('relation_n'))
										{
											//Obtener nuevo select para añadir los nuevos option
											$.get(url_data+'show_full/', function(text, status)
											{
												//Opciones existentes en el array
												var arr = new Array();
												var i = 0;
												$('#'+id_element+' select[multiple] option').each(function()
												{
													arr[i++] = '-'+this.value+this.text;
												})
												var arr2str = arr.toString();

												//Selector en el archivo cargado
												$(text).find('#'+id_element+' select option').each(function()
												{
													//Añadir options nuevos si no existe ya													
													//Tiene valor, texto y no está en el select actualmente
													if(this.value && this.text && arr2str.search('-'+this.value+this.text) < 0)
													{
														var $option = $("<option value="+this.value+"></option>").text(this.text).attr("selected", false);
														$('#'+id_element+' select[multiple]').append($option).change();//Añadir como seleccionado
													}
												});
												//Ocultar boxy
												boxy_element.hide();
												
											}, 'html');
										}
										else //Recarga de la parte modificada
										{
											$('#'+id_element).load(url_data+'show_full/ #'+id_element+' > *', {}, function()
											{
												loadLb();
												loadIf();
												boxy_element.hide();
											});
										}
									}
									else //Cambiar todo el contenido
									{
										//Obtener url sin parámetros en url ( /param_value)
										var url = String();
										var parts = (url_data).toString().split("/");
										for(i in parts)
										{
											if(parts[i].indexOf('_') == -1 || parts[i].substring(0,3) == 'pag')//No tiene parámetros con _ o es número de página, meter en url
											{
												url = url+parts[i]+'/';
											}
										}

										//Cambia el contenido viejo por el nuevo y activa javascript
										$('#content').load(url+'show_full/ #content > *', {}, function()
										{
											loadLb();
											loadIf();
											boxy_element.hide();
										});
									}
									
									break;
									
								//Error, sigue mostrando ventana y todo el contenido devuelto
								case 'warning':
									boxy_element.setContent(text);
									break;
								case 'error':
									boxy_element.setContent(text);
									break;
								default: //Error, mostrar lo que sale
									boxy_element.setContent(text);
									break;
							}
							return true;
						}
						else
						{
							return false;	
						}
					}, 'xhtml');
				});
			}
		});		
	});

	//**********
	//Boxy para gallery. Al hacer click en un elemento lo añade en el container
	$("[rel='boxy-gallery']").livequery('click', function(event)
	{
		event.preventDefault();		

		//Crear boxy
		Boxy.load($(event.target).attr('href')+'show_full/',
		{
			title: $(event.target).attr('title'),
			closeText: lng.close_boxy,
			actuator: $(event.target),
			unloadOnHide: true,
			afterHide: function()//Tras ocultar, restaurar url de carga de datos
			{
				url_data = window.document.location;
			},
			afterShow: function(r)//Tras mostrar
			{
				//Ventana creada dentro de un boxy, como como ruta de vuelta la referencia
				if($(event.target).parent().parent().parent().parent().parent().attr('class') == 'boxy-content')
				{
					url_data = url_aux;
				}
				else if(url_aux == window.document.location)//Ventana original, url aux para futuras a ella misma
				{
					url_aux = this.options.actuator.attr('href');//Ruta de llamada la nuevo boxy
				}
				
				//Tamaño más grande de ventana
				this.resize(600, 370);
				this.center();
				
				//Marcar fotos seleccionadas
				var photos_container = $('.'+$(this.options.actuator).attr('rev')+'_container');//fotos seleccionadas
				//Marcar fotos seleccionadas si hay seleccionadas
				if(photos_container.find('input').length > 0)
				{
					var pc = photos_container.find('input');
					var photos_selected = new Array();
					for(var i=0; i < pc.length; i++)
					{
						photos_selected[i] = '-'+$(pc[i]).val();
					}
					//Array a cadena para búsquedas rápidas
					var arr2str = photos_selected.toString();
					
					//Fotos mostradas, marcar las seleccionadas
					$(r).find('#show li[class*="row_"][rel]').each(function()
					{
						if(arr2str.search('-'+$(this).attr('rel')) >= 0)
						{
							$(this).find('li:nth-child(2)').addClass('active');
						}
					});
				}
				
				//Cargar UI
				loadUI();
			},
			behaviours: function(r) //Tras cambiar contenido
			{
				//Tamaño más grande de ventana. Mantener posición del usuario
				this.resize(600, 370);
				this.center();
				
				var boxy_element = this;//Mantener el objeto boxy para llamadas siguientes
				var text_button = '';//Texto del botón, usado para mostrar formulario de subir
				
				//Estilo de galería al contenido
				$(r).addClass('gallery');
				
				//Nombre campo de las fotos
				var field = $(boxy_element.options.actuator).attr('rev');
				var photos_container = $('.'+field+'_container');//Contenedor de fotos
				
				//Marcar fotos seleccionadas si hay seleccionadas
				if(photos_container.find('input').length > 0)
				{
					var pc = photos_container.find('input');
					var photos_selected = new Array();
					for(var i=0; i < pc.length; i++)
					{
						photos_selected[i] = '-'+$(pc[i]).val();
					}
					//Array a cadena para búsquedas rápidas
					var arr2str = photos_selected.toString();
					
					//Fotos mostradas, marcar las seleccionadas
					$(r).find('#show li[class*="row_"][rel]').each(function()
					{
						if(arr2str.search('-'+$(this).attr('rel')) >= 0)
						{
							$(this).find('li:nth-child(2)').addClass('active');
						}
					});
				}
				
				//Formulario buscar por ajax
				$(r).find('form').unbind('submit').bind('submit', function(event)
				{
					event.preventDefault();
					loading('.boxy-wrapper');//Cargando

					//Buscador controlado a mano
					var form = $(event.target);
					$.get(form.attr('action')+'show_full/', form.serialize(), function(text, status)
					{
						//Estado de la llamada ajax
						if(status == 'success')
						{
							//Cargar contenido
							boxy_element.setContent(text);
						}
						loadingEnd();
					}, 'html');
				});
				
				//Click en algún sitio
				$(r).unbind('click keypress').bind('click keypress', function(event)
				{
					//**********
					//Click en foto, copiar en el contenedor
					if($(event.target).parents('#show').length > 0 && event.target.nodeName.toLowerCase() == 'img')
					{
						//$(event.target).unbind();
						event.preventDefault();
						loading('.boxy-wrapper');//Cargando
						
						//Id de la photo
						var photo_id = $(event.target).parents("li[class^='row_']").find('.action_edit a').attr('href');
						photo_id = photo_id.substring(photo_id.lastIndexOf('_')+1, photo_id.length - 1);
											
						//Evitar imagen repetida
						if(photos_container.find('#'+field+'_image_'+photo_id).length === 0)
						{
							var block = field.split('_')[1];//Nombre bloque
							var block_real = field.split('_')[0];//Nombre bloque en el que se está
							//Elemento a insertar
							photos_container.append('<li id="'+field+'_image_'+photo_id+'"><img src="'+$(event.target).attr('src')+'"/>'
									+'<a href="" rel="interface" rev="'+field+'_image_'+photo_id+'" title="'+lng.del+'" class="delete">'+lng.del+'</a>'
									+'<input type="hidden" name="'+block_real+'_'+field+'[]" value="'+photo_id+'"/>'
									+'</li>');
							$("[rev*="+field+"_image_"+photo_id+"]").interFace();//Evento de borrar
							
							//Marcar como activo
							$(event.target).parents('li:first').addClass('active');
						}
						loadingEnd();
					}
					//**********
					//Click en enlace de nuevo elemento
					else if($(event.target).parents('.buttons').length > 0 && $(event.target).parents('.buttons').children().attr('class') == 'action_new')
					{
						event.preventDefault();//Parar comportamiento normal
						//Cargando
						loading('.boxy-wrapper', 0.9);

						//Texto del botón
						if( ! text_button)
						{
							text_button = $(event.target).text();
						}

						//Crear iframe conteniendo el enlace si no lo hay
						if( ! $(r).find('iframe').length)
						{
							if(typeof head == 'undefined')
							{
								head = $('head').html();//Cabecera actual para poner en iframe
							}
							
							//Ocultar lista de fotos y paginador
							$(r).find('.paginator, #show').css('display', 'none');
							//Insertar iframe
							$(r).append('<iframe src="'+$(event.target).attr('href')+'show_full/" class="iframe" name="iframe_gallery" scrolling="auto" frameborder="0"></iframe>');
							
							//Tras cargar iframe, añadir cabecera, cambiar estilos
							$('iframe').load(function()
							{
								//Texto del botón de añadir, cambiado
								$(event.target).text(lng.photos_list);								
								//Iframe creado
								var iframe = $(r).find('.iframe').contents();
								iframe.find('head').append(head);//Cabecera con estilos, codificación, etc...

								//Mensaje de éxito, mostrar lista de elementos recién cargada
								if(iframe.find('.info').length > 0)
								{
									//Quitar iframe
									iframe.remove();
									
									//Página a cargar con la lista. Quitar / final
									var str = $(event.target).attr('href').substring(0, $(event.target).attr('href').length - 1);
									var index = str.lastIndexOf('/');//Quitar partes tras último /
									str = str.substring(0, index)+'/show_full/';

									$.get(str, function(text, status)
									{
										if(status == 'success')//Estado de la llamada ajax
										{
											boxy_element.setContent(text);//Cargar contenido
										}
										loadingEnd();
									}, 'html');
								}
								else
								{
									iframe.find('body').attr('id', 'iframe_content');
									iframe.find('form').attr('action', iframe.find('form').attr('action')+'show_full/');//Acción del form
									iframe.find('form').submit(function(){ loading('.boxy-wrapper', 0.9); });
									loadingEnd();
								}
							});
						}
						else //Hay iframe, mostrar lista fotos
						{
							//Cargando
							loading('.boxy-wrapper');									
							//Mostrar lista de fotos y paginador
							$(r).find('.paginator, #show').css('display', 'block');
							$(r).find('.iframe').remove();//Quitar iframe
							$(event.target).text(text_button);
							text_button = '';
						}
						loadingEnd();
					}
					//**********
					//Demás enlaces (paginador, volver, etc...)
					else if(event.target.nodeName.toLowerCase() == 'a')
					{
						//Tab, comportamiento normal del tab
						if(event.keyCode == 9)
						{
							return;
						}
						else if($(event.target).children().length)//Si tiene hijos, no ejecutar nada
						{
							return false;
						}						
						
						event.preventDefault();
						loading('.boxy-wrapper');//Cargando

						//Añadir show_full antes de ?
						var page_load;
						if($(event.target).attr('href').lastIndexOf('?') > 0)
						{
							var index = $(event.target).attr('href').lastIndexOf('?');
							var str = $(event.target).attr('href').substring(0, index-1);
							page_load = str+'/show_full/'+$(event.target).attr('href').substring(index, $(event.target).attr('href').length);
						}
						else
						{
							page_load = $(event.target).attr('href')+'show_full/';
						}
						
						$.get(page_load, function(text, status)
						{
							//Estado de la llamada ajax
							if(status == 'success')
							{
								//Cargar contenido
								boxy_element.setContent(text);
							}
							loadingEnd();
						}, 'html');	
					}
					//**********
					//Otro click, por si acaso dejar cargar
					else
					{
						//loadingEnd();
					}
				});
			}
		});
	});
	
	
	//**********
	//**********
	//Boxy para listado. Al hacer click en un elemento lo añade en el container
	$("[rel='boxy-list']").livequery('click', function(event)
	{
		event.preventDefault();		

		//Crear boxy
		Boxy.load($(event.target).attr('href')+'show_full/',
		{
			title: $(event.target).attr('title'),
			closeText: lng.close_boxy,
			actuator: $(event.target),
			modal: true,
			afterHide: function()//Tras ocultar, restaurar url de carga de datos
			{
				url_data = window.document.location;
			},
			afterShow: function()//Tras mostrar
			{
				//Ventana creada dentro de un boxy, como ruta de vuelta la referencia
				if($(event.target).parent().parent().parent().parent().parent().attr('class') == 'boxy-content')
				{
					url_data = url_aux;
				}
				else if(url_aux == window.document.location)//Ventana original, url aux para futuras a ella misma
				{
					url_aux = this.options.actuator.attr('href');//Ruta de llamada la nuevo boxy
				}
				
				//Tamaño más grande de ventana
				this.resize(600, 400);
				this.center();
				
				//Campo select donde añadir el elemento seleccionado. Elementos seleccionados aqui
				var id_element = $(this.options.actuator).parent().attr('id');
				id_element = id_element.substr(5, id_element.length-5);
				
				//Marcar seleccionados
				$('#'+id_element+'_1 :selected').each(function(el, it)
				{
					$('#show li[rel="'+$(it).val()+'"]').addClass('active');
				})
				
				//Cargar UI
				loadUI();
			},
			behaviours: function(r) //Tras cambiar contenido
			{
				//Tamaño más grande de ventana. Mantener posición del usuario
				this.resize(600, 400);
				this.center();
				
				var boxy_element = this;//Mantener el objeto boxy para llamadas siguientes
				var text_button = '';//Texto del botón, usado para mostrar formulario de subir
				
				//Estilo de galería al contenido
				$(r).addClass('list');
				
				//Mensaje click para añadir
				$(r).find('[class*="row_"][class!=row_header]').attr('title', lng.add_click);
				
				//Campo select donde añadir el elemento seleccionado. Elementos seleccionados aqui
				var id_element = $(boxy_element.options.actuator).parent().attr('id');
				id_element = id_element.substr(5, id_element.length-5);
				
				//Marcar seleccionados
				$('#'+id_element+'_1 :selected').each(function(el, it)
				{
					$('#show li[rel="'+$(it).val()+'"]').addClass('active');
				})

				//Formulario por ajax
				$(r).find('form').unbind('submit').bind('submit', function(event)
				{
					event.preventDefault();
					loading('.boxy-wrapper');//Cargando

					//Buscador controlado a mano
					var form = $(event.target);
					$.ajax(
					{
						'type' : (form.parents('#searcher').length > 0)? 'get' : 'post',
						'url' : form.attr('action')+'show_full/',
						'data' : form.serialize(),
						'success' : function(text, status)
						{
							//Estado de la llamada ajax
							if(status == 'success')
							{
								//Cargar contenido
								boxy_element.setContent(text);
							}
							loadingEnd();
						},
						'dataType' : 'html'
					});
				});
				
				//Click en algún sitio
				$(r).unbind('click').bind('click', function(event)
				{
					//**********
					//Click en alguna fila del listado
					if($(event.target).parents('#show').length > 0)
					{
						//Desactivar todos los enlaces
						$('#show a').bind('click', function(event){event.preventDefault()});
						event.preventDefault();
						
						//Click en el li
						if(event.target.nodeName.toLowerCase() == 'li' && $(event.target).attr('rel'))
						{
							//Elemento para id de la fila
							var row_id = $(event.target).find('.action_edit a').attr('href');
							//Elemento a copiar
							var element = $(event.target).children();
							//Fila seleccionada
							$(event.target).addClass('active');
						}
						else if($(event.target).parents('[class*="row_"][class!="row_header"]'))
						{
							//Elemento para id de la fila
							var row_id = $(event.target).parents('li[class^="row_"]').find('.action_edit a').attr('href');
							//Elemento a copiar
							var element = $(event.target).parents('li[class^="row_"]').children();//$(event.target).parents('ul.row_data');
							//Fila seleccionada
							$(event.target).parents('[class*="row_"]').addClass('active');
						}

						//Id de la fila
						row_id = row_id.substring(row_id.lastIndexOf('_')+1, row_id.length - 1);
						
						//Datos de la fila visibles
						var texto = sep = '';
						$("div.data", element).each(function(i)
						{
							//Añadir elemento si se ve
							if($(this).attr('display') != 'none' && $(this).css('display') != 'none')
							{
								texto += sep+$(this).text();
								sep = ' ';
							}
						});
						
						//Existe elemento, marcar como seleccionado
						if($("#"+id_element+"_1 option[value='"+row_id+"']").length > 0)
						{
							$("#"+id_element+"_1 option[value='"+row_id+"']").attr("selected",true);
							$('#'+id_element+'_1').change();
						}
						else //No existe, crear
						{
							//Option a añadir
							var $option = $("<option value="+row_id+"></option>").text(texto).attr("selected",true);
							$('#'+id_element+'_1').append($option).change();
						}
					}
					//Demás enlaces (paginador, volver, etc...)
					else if(event.target.nodeName.toLowerCase() == 'a')
					{
						//Tab, comportamiento normal del tab
						if(event.keyCode == 9)
						{
							return;
						}
						else if($(event.target).children().length)//Si tiene hijos, no ejecutar nada
						{
							return false;
						}						
						
						event.preventDefault();
						loading('.boxy-wrapper');//Cargando

						//Añadir show_full antes de ?
						var page_load;
						if($(event.target).attr('href').lastIndexOf('?') > 0)
						{
							var index = $(event.target).attr('href').lastIndexOf('?');
							var str = $(event.target).attr('href').substring(0, index-1);
							page_load = str+'/show_full/'+$(event.target).attr('href').substring(index, $(event.target).attr('href').length);
						}
						else
						{
							page_load = $(event.target).attr('href')+'show_full/';
						}
						
						$.get(page_load, function(text, status)
						{
							//Estado de la llamada ajax
							if(status == 'success')
							{
								//Cargar contenido
								boxy_element.setContent(text);
							}
							loadingEnd();
						}, 'html');	
					}
					//**********
					//Otro click, por si acaso dejar de cargar
					else
					{
					}
				});
			}
		});
	});

	
}


/**
 * Cargar archivo css
 * @param file string Nombre del css a cargar
 * @param callback function Función a ejecutar tras la carga
 */
jQuery.getCss = function(url, callback)
{	
	var head = document.getElementsByTagName('head')[0];//Head
	var script = document.createElement("link");
	$(script).attr({type: 'text/css', href: url, rel: 'stylesheet', media: 'screen'});//Código css
	
	// Attach handlers for all browsers
	script.onload = script.onreadystatechange = function(){};

	//Añadir a cabecera
	head.appendChild(script);
	
	return undefined;
};

/**
 * Cargar archivo js con opción de cache
 * @param url string Nombre del css a cargar
 * @param callback function Función a ejecutar tras la carga
 * @param cache bool Cachear js o no
 */
$.getScript = function(url, callback, cache)
{
	$.ajax(
	{
		type: "GET",
		url: url,
		success: callback,
		dataType: "script",
		cache: cache
	});
}; 


/**
 * Defuscador de email
 * Uso: $(enlace elemento).defuscate();
 */ 
jQuery.fn.defuscate = function()
{
	return this.each(function(){
	var email = String($(this).html()).replace(/\s*\(.+\)\s*/, "@");
	$(this).before('<a href="mailto:' + email + '">' + email + "</a>").remove();
	});
}; 


/**
 * Cargar funcionalidades js tras cargar DOM
 */
$(document).ready(function()
{
	//Líneas de idioma
	$.getScript(INSTALATION_DIR+"/lng/es/base.js", function()
	{
		//Carga de lightbox
		loadLb();
		//UI
		loadUI();
		//Carga elementos de interfaz
		loadIf();
		//Carga boxy, cuadros emergentes. Boxy incluye UI
		loadBoxy();
		
		//Tabs actividades
		var sel = window.location.href.substring(window.location.href.lastIndexOf('/')-1, window.location.href.lastIndexOf('/'));
		if(sel > 0 && sel < 4)
		{
			$('#tabs > ul').tabs({selected: sel-1});
		}
		else
		{
			$('#tabs > ul').tabs();
		}
			
	}, true);
	


	//Menú de actividades
	$('body[id!=actividades] #header .actividades, body[id!=actividades] #submenu').hover(
		function(){ $('#submenu').css('display', 'block')},
		function(){ $('#submenu').css('display', 'none')}
	);
	
	//Compresión en actividades
	$('.recobros-list h3').unbind('mouseover').bind('mouseover', function(event)
	{
		var class_item = $($(event.target).parent()).attr('class');
		$('.recobros-list .data li').removeClass('visible');
		$('.recobros-list .data .'+class_item).toggleClass('visible');		
		$('.recobros-list .titles h3').removeClass('active');
		$(event.target).toggleClass('active');
	});
});

