//v.1.1
var editando=0;
var enviando=0;
var editandoPostit=false;
var pudeSalir=0;
var hayAjax=0;
var insertando=0;
var base="";
var anual=false;
$(function()
{	
	
	base=$("base").attr("href");
	//Conmutadores
	
		$("button.conmutador").not(".lectura").click(function()
	{
		$(this).trigger("previo");
		var estadoConm;
		var tipoConm=$(this).attr('campo');
		if ($(this).hasClass("on")) estadoConm=0;else estadoConm=1;
		var opciones={};
		var on=$(this).attr('on');
		var off=$(this).attr('off');
		opciones['op']='accion';
		opciones['funcion']="modificaDato";
		opciones['idregistro']=$(this).attr("idregistro");
		opciones['clase']=$(this).attr("clase");
		opciones['var1']=tipoConm;
		opciones['var2']=estadoConm;

		$.get('ajax/ops.php',opciones);
		if (estadoConm==1)	$(this).removeClass("off").addClass("on").find("b").html(on);
						else $(this).removeClass("on").addClass("off").find("b").html(off); 
	});
	
	$("#help").bind('click', function(event) {
		$(".ayuda,.item i").toggle();
	});

	window.onbeforeunload = confirmaSalida;
	

  function confirmaSalida(e)
  {
    if (hayAjax && (!pudeSalir || enviando))
      return "Parece ser que estaba realizando alguna actividad que pudiera no haberse completado.\nPor favor, asegúrese.";
  }  

	$.ajaxSetup({
	  complete:function(em){
		
		try 
		{
			var json = eval('(' + em.responseText + ')');		
			if (json.offline==1)
			{
				alert("Ha caducado la sesión. Por favor, vuelve a identificarte.");
			}
		}
		catch(err)
		{ }
	
		}
	});

  $(document).ajaxError(function(em){
		alert("Se ha producido un error en la conexión, probablemente porque se ha superado el tiempo de espera. La única acción que puede no haberse guardado es la última. Por favor, vuelve a identificarte.");
		hayAjax=0;}
		);

  $(document).ajaxStop(function(em){
    pudeSalir=1;
	$(".ajax_cargador").hide();
  });
  $(document).ajaxStart(function(){
    hayAjax=1;
    pudeSalir=0;
	$(".ajax_cargador").show();
	
  });
  

	//Borramos clicks innecesarios
	//$("[href=#]").removeAttr("href");


	//Buscador de archivos
	$("#varBusqueda").suggest("ajax/ops.php?op=busqueda",
	{
		onSelect: function(){
      		loc=$(this).attr("valor");
      		location.href=base+loc;
    	},
		minchars: 2
	});
	$("#searchform .caja").bind("click",function(){$(this).attr("value","")});
	$("#boton_sug").bind("click",function(){
		if ($("#varSugerencia").attr("value").length && $("#varSugerencia").attr("value")!="¿Alguna sugerencia?")
		{
			$.getJSON('ajax/ops.php', {op:"accion",funcion:"inserta",json:0,clase:"Sugerencias","var_sugerencia":$("#varSugerencia").attr("value"),"var_respuesta":"En el módulo "+$("title").html()});;
			alert("Gracias por ayudarnos a mejorar. Tu sugerencia será tenida en cuenta.");
			$("#varSugerencia").attr("value","");
		}});

	//Buscadores
	$(".buscador .caja").bind('click', function(event) {
		$(this).attr("value","");
	});

	$(".buscador").each(function(index) {
		var columna=$(this).attr("columna");
		var clase=$(this).attr("clase");
		var tabla=$(this).attr("tabla")?$(this).attr("tabla"):"";
		var redir=$(this).attr("redir");
		var idpropio=$(this).attr("id");
		var insertarNuevo=$(this).attr("insertarNuevo");
		var automatico=$(this).attr("automatico");
		
		$(this).children("img").click(function() {
			$("#"+idpropio+"2 .nuevalinea").trigger("click");
		});
		$(this).find("input").suggest("ajax/ops.php?op=buscar&clase="+clase+"&columna="+columna+"&tabla="+tabla+"&insertarNuevo="+insertarNuevo,
		{
			onSelect: function(){
				var valor=$(this).attr("valor");
				var funcion=$(this).attr("funcion");
			
				if (funcion==1)
				{
					if (valor=="insertar" && automatico=="1")
					{
						$("#"+idpropio+"2 .nuevalinea").trigger("click");
					}
					else if (valor=="insertar" && automatico=="0")
					{
					    var disparadorInsercion=$(this).parent().attr("disparadorInsercion");
						if (function_exists(eval(disparadorInsercion))) eval(disparadorInsercion+"(this)");
					}
					else if (function_exists(eval(redir))) eval(redir+"('"+valor+"',this)"); 
				}
				else location.href=base+redir+valor;
				
		},minchars:2
		});	
	});

		eventosTablas();

		//Botones de carga de versiones
		$('.boton_version, #bversiones li a').bind('click', function(event) {

			//Ponemos el cargador de ajax
			$("#content").prepend("<img id='cargadorajax' src='images/ajax-loader.gif'>");
			var cargaversion=$(this).attr('version');
			cargaVersion(cargaversion);


		});


		//Postit
		$('.postit').bind("click",function() {
			if (!editandoPostit)
			{
				var contenido=$(this).attr('title');
				$('#postit').prependTo($(this)).html(contenido).show();


			}

		}); 
		$('#postit').bind('mouseout', function(event) {
			if (!editandoPostit) $(this).hide();
		});
		$('#postit').bind("click",function(){ if (!editandoPostit) cajaEdicionPostit($(this))});		




	});

function crearVentana(titulo,titular)
{
	if (titular==null) titular=titulo;
	var ventana=$('#columnaderecha').prepend('<div class="ventana"><div class="titulo">'+titular+'</div><div class="contenido"></div><div class="inferior"><div class="info">&nbsp;</div><div class="subbotones"><a title="Cambiar configuración" class="boton_config" href="#">-</a><a title="Cerrar el widget" class="boton_cerrar" href="#">-</a></div></div></div>');
	ventana=$("#columnaderecha .ventana:first");
	ventana.find(".boton_cerrar,.boton_config").hover(
	function(){$(this).parent().parent().find(".info").html($(this).attr("title"));},
	function(){$(this).parent().parent().find(".info").html("&nbsp;");});

	$(".boton_cerrar").bind("click",function(){
		$(this).parents(".ventana").remove();

	});
	titulo=titulo.toLowerCase();
	ventana.find(".contenido").load("ajax/cargaWidget.php?mod="+titulo);
};

function guardarCambios(objeto)
{
	var txto=objeto.attr("txto");
	var continuar=true;
	if (typeof disparadorPrevio=="function") 
	{
		continuar=disparadorPrevio(objeto);
	}
	if (continuar)
	
	{
		//Texto que ha escrito
		var nuevoTexto;
		nuevoTexto=objeto.find('input,textarea,select,.selected').attr('value');

		textoSelect=objeto.find('.selected').html();
		var tipo=objeto.attr('tipo');

		if (nuevoTexto==null) nuevoTexto="";
		//Objeto inicial que contenia las cosas
		var original=objeto;

		campo=original.attr('campo');
		clase=original.attr('clase');
		idregistro=original.attr('idregistro');
		dato=nuevoTexto;

		//Vamos a comprobar si ha cambiado el texto antes de enviarlo
		$("html").unbind();
		if (nuevoTexto!=txto)
		{
		
			original.attr("txto",nuevoTexto);
	  
			//Ponemos el símbolo de carga

			var opciones={};

			//Añadimos más opciones para enviar
			opciones['op']='accion';
			opciones['funcion']='modificaDato';
			opciones['var1']=campo;
			opciones['var2']=dato;
			opciones['clase']=clase;
			opciones['idregistro']=idregistro;
			opciones['json']="0";
			//Lo enviamos por ajax y a la vuelta quitamos el símbolo de ajax
			$.get('ajax/ops.php',opciones,function(){
				$('.cargador').remove();
				if (typeof disparador=="function") if (objeto.attr("disparador")==1) {disparador(objeto);}
			});
		};

		//Ponemos al objeto inicial el nuevo valor



		if (tipo=='textolargo' && original.attr('tagName')!="TD"  && original.attr('tagName')!="TH") nuevoTexto=ponerEnLista(nuevoTexto);
	
		if (tipo!="relacion") 
		{
			original.html(nuevoTexto); 
		}
		else
		{
			original.html(textoSelect);
		};
		
	
		if (nuevoTexto=="")	original.addClass('vacio').html("");
		else original.removeClass('vacio');
		if (nuevoTexto!=txto) original.prepend('<img class="cargador" src="images/ajax-loader.gif" />');

	
		editando=0;
	
		// Dejamos las capas como al principio
	  objeto.css("z-index","").children().css("z-index","");
	}
}
function cancelarCambios(objeto)
{
	$(objeto).find('.contiene').remove();
	texto=$(objeto).attr('txto');
	$(objeto).html(texto);
	editando=0;

	// Dejamos las capas como al principio
  objeto.css("z-index","").children().css("z-index","");
}

//Esta función selecciona el siguiente input al objeto pasado
//La función recibe un objeto .item
function seleccionaSiguiente(objeto)
{
	a=1;
	var todos=$(".ajax:visible").not(".check,.sololectura");
	var numero=todos.index($(objeto)[0]);
	nuevoObjeto=todos.eq(numero+1);
	if (nuevoObjeto && nuevoObjeto && nuevoObjeto.parent().css("display")!="none" && nuevoObjeto.parent().parent().css("display")!="none" && nuevoObjeto.parent().parent().parent().css("display")!="none") nuevoObjeto.trigger("click");
	//$(objeto).parent().next().find(".ajax").trigger("click");
};

//Esta función carga los datos desde un json y los pone en todos los campos
function cargaVersion(nuevaVersion)
{

	$.getJSON('ajax/ops.php', {idversion:nuevaVersion,idproceso:idproceso,op:'cargaversion'},function(json){
		idversion=json.id;
		$.each(json,function(i,item){
			//Hacemos la búsqueda así para que coja más de un id. Si hacemos la búsqueda por identificador, sólo coge uno.
			$(".ajax[id="+i+"]").html(item);
		});
		//Cambiamos el número de versión
		$('#bversiones a:first').html('Versión '+json.version);
		$("#cargadorajax").remove();

		//Llamamo a la función que actualiza los items para ponerlos como vacíos.
		actualizaItems();
	});
};



//Esta función actualiza los formularios
function actualizaItems(obj)
{
	if (obj)
	{
		$(obj).find(".ajax").removeClass("vacio");
		$(obj).find(".ajax:empty").not(".archivos").addClass("vacio");
		$(obj).find(".ajax[tipo=textolargo]").not(".vacio").not("td.ajax,th.ajax").each(function(){$(this).html(ponerEnLista($(this).html()))});
	}
	else
	{
		$(".ajax").removeClass("vacio");
		$(".ajax:empty").not(".archivos").addClass("vacio");
		$(".ajax[tipo=textolargo]").not(".vacio").not("td.ajax,th.ajax").each(function(){$(this).html(ponerEnLista($(this).html()))});
		
	}
};


//Esta función añade el html necesario para hacer una lista ul / li a partir de un texto
function ponerEnLista(texto)
{
	//Esta función va a poner sólo en listas
	if (texto!="")
	{
		var lineas=texto.split('\n');
		var lista="";
		for (var i in lineas)
		{
			if (lineas[i]!="") lista=lista+lineas[i]+"<br />\n";	
		}
		if (lineas.length>0) lista=lista;
		return lista;
	}
	else return texto;
};

function quitarTags(Word) {

	Word=Word.replace(/<\/{0,1}[^ba\/][^>]*>/gi,"");
	return Word.replace(/<br[^>]*>/gi,"");
}

function tablasAutonumericas()
{
	$("table[autonumerico=1] tr").slice(0,$("table[autonumerico=1] tr").length-1).each(function(i){if (i!=0) num=i-1; else num='&nbsp;';$(this).prepend("<th class='autonumerico'>"+(num)+"</th>")});
}
function actualizaTablasAutonumericas()
{

	//$("th.autonumerico").slice(2).each(function(i){$(this).html(i+1);});

};

/** Sustituye el postit */
function cajaEdicionPostit(objeto)
{

	editandoPostit=true;
	//$("#postit,.postit").unbind();
	objeto.html("<textarea id='cajaPostit'>"+objeto.html()+"</textarea>");
	var caja=$("#cajaPostit");
	caja[0].focus();
	caja.width(objeto.width()-20);
	caja.height(objeto.height()-30);
	caja.bind("blur",function(){
		var valor=$(this).attr("value");
		var idregistro=$(this).parents(".postit").attr("idregistro");
		objeto.parent().attr('title',valor);
		objeto.hide();
		// $('.postit').bind("mouseover",function() {
		// 	$('#postit').prependTo($(this)).show().bind('mouseout', function(event) {
		// 		$(this).hide();
		// 	}).bind("click",function(){cajaEdicionPostit($(this))});
		// 
		// });

		//Vamos a enviarlo por ajax
		var opciones={};
		opciones["op"]="dato";
		opciones["clase"]="informacion";
		opciones["campo"]="informacion";
		opciones["dato"]=valor;
		opciones["idregistro"]=idregistro;
		$.get("ajax/ops.php",opciones);
		editandoPostit=false;
	})

};

function insertaFila(tabla,json,posicion)
{
	
		//Cuando se devuelva correctamente
		//Creamos la línea
		var nuevaFila=tabla.find("tbody tr.ref").clone(true).removeClass("ref");
		if (posicion=="abajo") 
		{
			tabla.find("tbody tr:last").after(nuevaFila);
		}
		else
		{
			tabla.find("tbody tr:first").after(nuevaFila);
		}
		
			//Metemos los datos en la nueva fila		
			$.each(json,function(i,item){
				//Hacemos la búsqueda así para que coja más de un id. Si hacemos la búsqueda por identificador, sólo coge uno.

				nuevaFila.find("[campo="+i+"]").attr("idregistro",json.id).attr("txto",item).not(".check").not("[tipo=check]").html(item);
				nuevaFila.find("td.cf").attr("idregistro",json.id);
				nuevaFila.attr("idregistro",json.id);
				//actualizaTablasAutonumericas();
				//actualizaItems();
			});
			nuevaFila.find(".ajax:first").trigger("click");
	
};

function itemsAjax(obj)
{
	$(obj).not(".sololectura").bind("click",function(e)
	{
			if (editando==1) return;
			editando=1;
			//almacenamos el objeto original
			var original=$(this);
			
			original.removeClass("vacio");
			var tipo=original.attr('tipo');

			//Copiamos el texto
			var texto=$(this).html();
			var estado=$(this).attr('estado');
			$(this).attr("txto",texto);

			if (texto=="(click para editar)") texto='';

			
			var anchura=original.width();
			
			if (anchura==0) anchura=300;
			if (tipo=="textolargo" && anchura<"100") anchura=300;
			var altura=original.parent().height();
			var medidas=original.offset();
			var izda=medidas["left"];
			var top=medidas["top"];
			var tabla=false;
			var fix=0;	
			if (jQuery.browser.safari) fix=-12;
			if (tipo!="textolargo" && (original.attr('tagName')=="TD" || original.attr('tagName')=="TH")) {tabla=true;top=top+Math.round((altura-25+fix)/2);}
		
			if (original.hasClass("modal")) 
			{
				pantallaH=1450;
				altura=400;
				top=100;
				anchura=480;
				izda=Math.round((pantallaH/2)-(anchura/2));
				var estiloAltura="height:"+altura+"px;";
				
			}
			//original.parent().height(altura);
			//Escondemos el mensaje original
			
			//original.empty();

			//Añadimos la caja y los botones
			var ayuda=original.attr('title');

			//Obtenemos la anchura del contenedor
			
			var estiloAnchura="style='width:"+(anchura)+"px;"+estiloAltura+"'";
					
			//Tipo de atributo

			var globo="";
			if (ayuda!=null && ayuda!='undefined' && ayuda!="") 
			{	
				if (tipo=='relacion' || tipo=='grupo') globo="<div class='arriba' id='globo'></div>";
				else globo="<div id='globo'></div>";
			}
			//Elegimos lo que aparece al hacer click en función del tipo de archivo que sea

			var input;
			texto=quitarTags(texto);
			if (tipo=='texto' || tipo=='entero' || tipo=='fecha' || tipo=='hora') input="<input "+estiloAnchura+" type='text' value='"+texto+"'/>";
			if (tipo=='textolargo') input="<textarea "+estiloAnchura+">"+texto+"</textarea>";

			if (tipo=='check')
			{
				editando=0;
				var opciones={};
				opciones['var1']=original.attr("campo");
				opciones['clase']=original.attr("clase");
				opciones['op']="accion";
				opciones['funcion']="modificaDato";
				opciones['json']=0;
				opciones['idregistro']=original.attr("idregistro");
				if (estado==1) opciones['var2']=0; else opciones['var2']=1;
						
				$.get("ajax/ops.php",opciones,function(){
						original.find("img").remove();
						if (estado==1)	{original.append("<img estado='0' src='images/mini/stop.png' />");original.attr("estado","0");original.addClass("no").removeClass("si");}
						else {original.append("<img estado='1' src='images/mini/tick.png' />");original.attr("estado","1");original.addClass("si").removeClass("no");}
				});
			}
			
			
			//Si es una relación tenemos que coger los datos de forma dinámica. Creamos todo y lo demás se rellenará cuando se devuelvan los datos
			if (tipo=='relacion' || tipo=='grupo')
			{
				
				// input="<select id='relacion'>";
				// input=input+"</select>";
				input="<div class='lista_campos' id='relacion'>";
				input=input+"</div>";
					
			}
			//if (tipo!='check')	$(this).append("<div id='edicion' class='contiene' style='left:"+izda+"px;top:"+top+"px;'>"+input+globo+"<div class='botones'><img class='ok' src='images/button_ok.png' /> <span style='color:#888'>(Esc. para cancelar)</span></div></div>");
			
			
			if (tipo!='check')	if (tabla) $(this).append("<div id='edicion' class='contiene' style='left:"+izda+"px;top:"+top+"px;'>"+input+globo+"</div>");
								else $(this).prepend("<div id='edicion' class='contiene'>"+input+globo+"</div>");
									

			if (ayuda!=null && ayuda!='undefined' && ayuda!="") 
			{	
				$('#globo').html(ayuda);
			}

			//UNa vez que hemos creado la base podemos hacer una carga con javascript
			if (tipo=='relacion' || tipo=='grupo')
			{	

				//El pro
				var opciones={};
				opciones['campo']=original.attr("campo");
				opciones['clase']=original.attr("clase");
				opciones['op']="listahtml";
				opciones['dato']=original.attr("idregistro");
				var ops={};
				$("#relacion").append('<div class="lista_tit" value="*">'+texto+'</div><div class="" value="0">&nbsp;</div><img class="cargador" style="margin-left:0;position:static" src="images/ajax-loader.gif" /><span style="color:#aaa">Cargando</span>').show();
				var div='';
				//Vamos a coger el filtro de la tabla para filtrar los datos de la relación
				var camposRequeridos=original.parents("table").attr("requeridosRelacion");
				if (!camposRequeridos) {camposRequeridos=$(this).attr("requeridos");var listaSimple=true;}
				if (camposRequeridos!=null)
				{
					camposRequeridos=camposRequeridos.split(",");
					for (var j in camposRequeridos)
					{
						var temp=camposRequeridos[j].split(":");
						campoAplicacion=temp[0];
						if (opciones['campo']==campoAplicacion || listaSimple)
						{
							if (listaSimple) temp[1]=temp[0];
							opciones["whereRelacion"]="";
							var variableJS=temp[1];
							var variablePHP=variableJS;
							var rota=variableJS.split("=");
							if (rota[1]!=null) 
							{
								variablePHP=rota[0];variableJS=rota[1];
								opciones["whereRelacion"]=opciones["whereRelacion"]+variablePHP+"="+eval(variableJS)+" AND ";		
							}
							if (opciones["whereRelacion"]!="") opciones["whereRelacion"]=opciones["whereRelacion"]+" 1";
						}
					}
				}
				
				if (tipo=='relacion') $.getJSON("ajax/ops.php", {op:"accion", funcion:"listaRelacionada", json:1, clase:original.attr("clase"), var1:original.attr("campo"), var2:(opciones["whereRelacion"]?opciones["whereRelacion"]:"")}, function(json)
				{
					editando=1;
					var datos=json.resultado;
					rellenarLista(original,json.resultado,texto,tipo);

				});
				
				if (tipo=='grupo')
				{
					e.stopPropagation();
					editando=1;
					lista=original.attr("lista").split(",");
					rellenarLista(original,lista,texto,tipo);
				};
 			  
			}
			
			//Vamos a poner el tamaño adecuado

			//Capturamos el evento onkeypress para ver si hay un escape. Sólo se aplica a inputs y textarea
			original.find('input,textarea').bind('keypress',function(e)
			{
				a=1;
				//Si hay pulsado la tecla escape forzamos la cancelación
				if (e.keyCode==27)
				{
					e.stopPropagation;
					e.preventDefault;
					original.find('input,textarea').unbind('blur');
					cancelarCambios(original);
					return false;
				}
				//Si ha pulsado tabulador o enter
				tipo=original.attr('tipo');

				//El enter (13) sólo debe saltar en caso de que el texto no sea un textarea
				if (e.keyCode==9 || (e.keyCode==13 && tipo!='textolargo'))
				{
					e.stopPropagation;
					e.preventDefault;
					original.find('input,textarea').unbind('blur');
					guardarCambios(original);

					seleccionaSiguiente(original);
					return false;
				}
			}); //Find del keypress
			
			
			if (tipo!='check')
			{
				//Le damos foco a los input
				try	{
					original.find('input,textarea,select')[0].focus();
					}
				catch (error){};

				if (tipo=="texto" || tipo=="textolargo" || tipo=="entero") original.find('input,textarea')[0].select();

				//Añadimos los eventos blur
				original.find('input,textarea,select').bind('blur',function(){
					guardarCambios(original);				
				});
			
				//Añadimos el evento change sólo a los select para que se envíe al cambiar de opción
				original.find('select').bind('change',function()
				{
					guardarCambios(original);
				});


				//Vamos a añadir función al botón ok

				//Boton ok
				original.find('.ok').bind("click",function()
				{
					guardarCambios(original);

				});
			}
			
    	// Mostramos las capas por encima del resto
      original.css("z-index","100");

	//Vamos con los conmutadores
	
  })
};

function eventosTablas(obj)
{
//	return false;
	$("ul.abecedario li").hover(function() {
		$(this).attr("anterior",$(this).css("font-size"));
		$(this).css("font-size","40px");
	}, function() {
		anterior=$(this).attr("anterior");
		$(this).css("font-size",anterior);
	}).bind('click', function(event) 
	{
		$("#content .lista table").addClass("transparente");
		var	letra=$(this).html();
		var clase=$("ul.abecedario").next().attr("clase");
		$("#content .lista").load("ajax/ops.php?op=accion&funcion=tabla&clase="+clase+"&letra="+$(this).html(),function(){
			eventosTablas();
			$("#content .lista h1").html(letra).fadeIn(200);
		});
		
	});
	$("table.paginada tr.pagesCont li").bind('click', function(event) {
		var tabla=$(this).parents("table");
		tabla.addClass("transparente");
		$("#content .lista").load("ajax/ops.php?op=accion&funcion=tabla&clase="+tabla.attr("clase")+"&pagina="+$(this).html()+"&letra="+tabla.attr("letra"),function(){
			eventosTablas();
		});
	});
	
	
	//Tablas
	$("table tr[href]").bind('click', abreEnlace);
	
	//Vamos a poner el botón recoger los grupos
	$('tr.grupo td').prepend("<img src='images/arriba.gif'>").toggle(function() {
			$(this).find("img").attr("src","images/abajo.gif");
			var grupo=$(this).parent().attr("id");
			var numero=$("tr[grupo="+grupo+"]").hide().size();
			$(this).append("<em>("+numero+" líneas ocultas)</em>");
		},
		function(){
			var grupo=$(this).parent().attr("id");
			$("tr[grupo="+grupo+"]").show();
			$(this).find("img").attr("src","images/arriba.gif");
			$(this).find("em").remove();
		}
	);
	
	//Ponemos el orden en las tablas
	$("table.ordenada").tablesorter( );
	$("table .reordenar").bind("click",function()
	{
		body=$(this).parents("table").find("tbody");
		if (body.hasClass("ui-sortable")) body.sortable("destroy"); else body.sortable({axis:"y",update:function(){
			ops={};
			body.find("tr:visible").each(function(j){

				ops["var_"+j]=$(this).attr("idregistro");
			});
			ops["op"]="accion";
			ops["funcion"]="ordenar";
			ops["json"]="1";
			ops["clase"]=body.parent().attr("clase");
			$.getJSON("ajax/ops.php",ops);
		}});
	})


	//Borramos filas de tablas
	$("table .boton_borrar").bind('click', borrarFila);

	//Nuevas lineas en tablas
	$('.titulo').bind('click', function(event) {
		$("#infoAlcance").trigger("click");
	});
	//Eventos de tablas
	$('.nuevalinea').bind('click', function(event) {
		//Solicitamos la nueva versión
		var tabla=$(this).parents("table");
		var camposRequeridos=tabla.attr('requeridosInsercion');
		var campos={};
		var posicion=$(this).attr("posicion");
		var directa=tabla.attr("insercionDirecta");
		var disparadorInsercion=tabla.attr("disparadorInsercion");
		tabla.attr("disparadorInsercion",disparadorInsercion);

		if (typeof(directa) != "undefined" && editando==0 && insertando==0)
		{
			editando=1;
			var campos="";
			var camposInsertar=directa.split(",");
			for (var j in camposInsertar) campos=campos+camposInsertar[j].substr(0,1).toUpperCase() + camposInsertar[j].substr(1)+"<input type='text' name='"+camposInsertar[j]+"'/>";
			$(this).parents("tr").find("td:first").append("<div id='insertador'><em>Rellena los campos</em>"+campos+"<button class='boton aceptar'>Insertar</button><button class='boton cancelar'>Cancelar</button></div>");
			$("#insertador .aceptar").bind('click', function(event) {
				editando=0;
				insertando=1;
				$(this).parents("table").find(".nuevalinea").trigger("click");

			});
				$("#insertador .cancelar").bind('click', function(event) {
					editando=0;
					insertando=0;
					$("#insertador").remove();
				});
		}
		
		if (editando==0 || insertando==1)
		{

			if (insertando)
			{
				var objeto=$(this).next().find("input[type=text]").each(function(index) {
					campos[$(this).attr("name")]=$(this).attr("value");
				});;
				$("#insertador").remove();
			}
			insertando=0;
			insertarRegistro(tabla,campos);

			

		}

	});
	
	//Ponemos el formato autonumérico en las tablas
	//tablasAutonumericas();
	
	//Escogemos sólo aquellos que no están marcados como sólo lectura
	itemsAjax($(".ajax").not(".sololectura"));
	
	//Vamos a poner los rótulos de vacío
	actualizaItems();
	
	
	
}

// Inserta un registro en una tabla especificada y pasándole los campos. Hace la llamada en ajax y todo
function insertarRegistro(tabla,campos)
{
		var camposRequeridos=tabla.attr('requeridosInsercion');
		var opciones={};
		var posicion=$(this).attr("posicion");
		var disparadorInsercion=tabla.attr("disparadorInsercion");
		if (camposRequeridos!=null && camposRequeridos.length)
		{
			camposRequeridos=camposRequeridos.split(",");
			for (var j in camposRequeridos)
			{
				var variableJS=camposRequeridos[j];
				var variablePHP=variableJS;
				var rota=variableJS.split("=");
				if (rota[1]!=null) {variablePHP=rota[0];variableJS=rota[1];}
				opciones["var_"+variablePHP]=eval(variableJS);		
			}
		}
		if (campos)
		{
			for(var c in campos) opciones["var_"+c]=campos[c];
		}

		//Añadimos más opciones para enviar
		opciones['clase']=tabla.attr('clase');
		opciones['op']='insertaentabla';
		$.getJSON('ajax/ops.php',opciones,function(json)
		{
			if (json.id) insertaFila(tabla,json,"abajo");
			if (typeof nuevaLinea == "function") nuevaLinea(json,tabla);
			if (typeof eval(disparadorInsercion)=="function") eval(disparadorInsercion+"(json.id,tabla,json)");
		})
};

function function_exists( function_name ) {

    if (typeof function_name == 'string'){
        return (typeof window[function_name] == 'function');
    } else{
        return (function_name instanceof Function);
    }
};
function crear_emergente()
{
    $("body").prepend ("<div class='ventanaEmergenteFondo'></div>");

    
};
function cerrar_emergente()
{
   ; $("div.ventanaEmergenteFondo").remove();
}
function abreEnlace()
{		
		if ($(this).parents("table").attr("disparador")) eval($(this).parents("table").attr("disparador")+"($(this))"); else
		location.href=$(this).attr("href")+"/idregistro/"+$(this).attr("idregistro");
};
function borrarFila(e)
{
	e.stopPropagation();
	  if (confirm('¿De verdad desea eliminar el registro?')){
		var fila=$(this).parents('tr');
		var clase=$(this).parents('table').attr('clase');
		var idregistro=$(this).parents('tr').attr('idregistro');
		var opciones={};
		opciones['clase']=clase;
		opciones['idregistro']=idregistro;
		opciones['op']='accion';
		opciones['json']=1;
		opciones['funcion']='borra';
		//Enviamos los datos
		fila.hide();
		$.getJSON('ajax/ops.php',opciones,function(json)
		{	
			if (!json.error)
			{
				fila.remove();
				if (typeof disparador=="function") disparador();
				actualizaTablasAutonumericas();
			} else {alert(json.errortexto);fila.show();}

		})
	}else
	  return false;
}

//Retorna: 1 = NIF ok, 2 = CIF ok, 3 = NIE ok, -1 = NIF error, -2 = CIF error, -3 = NIE error, 0 = ??? error

function validaCIF(a,obligatorio)
{
	if(obligatorio=='')obligatorio=true;
	var temp=a.toUpperCase();
	if(temp!='' || obligatorio==true){
		temp = temp.replace(/\s*/g, "");
		temp = temp.replace(/(\.)*/g, "");
		temp = temp.replace(/(\-)*/g, "");
		if(temp.length<9){
			var numeroCeros=9-temp.length;
			var t=1;
			var ceros='';
			for (t; t<=numeroCeros; t++)ceros=ceros+0;
			temp=ceros+""+temp;	
		}
		var cadenadni="TRWAGMYFPDXBNJZSQVHLCKE";
		if (temp!==''){
			//si no tiene un formato valido devuelve error
			if ((!/^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$/.test(temp) && !/^[T]{1}[A-Z0-9]{8}$/.test(temp)) && !/^[0-9]{8}[A-Z]{1}$/.test(temp))
			{
				return 0;
			}
				//comprobacion de NIFs estandar
			if (/^[0-9]{8}[A-Z]{1}$/.test(temp))
			{
				posicion = temp.substring(8,0) % 23;
				letra = cadenadni.charAt(posicion);
				var letradni=temp.charAt(8);
				if (letra == letradni)
				{
					return 1;
				}
				else
				{
					return -1;
				}
		}
		//algoritmo para comprobacion de codigos tipo CIF
		suma = parseInt(a.charAt(2))+parseInt(a.charAt(4))+parseInt(a.charAt(6));

		for (i = 1; i < 8; i += 2)
		{
			temp1 = 2 * parseInt(a.charAt(i));
			temp1 += '';
			temp1 = temp1.substring(0,1);
			temp2 = 2 * parseInt(a.charAt(i));
			temp2 +='';
			temp2 = temp2.substring(1,2);
			if (temp2 == '')
			{
				temp2 = '0';
			}
			suma += (parseInt(temp1) + parseInt(temp2));
		}
		suma += '';
		n = 10 - parseInt(suma.substring(suma.length-1, suma.length));
		//comprobacion de NIFs especiales (se calculan como CIFs)
		if (/^[KLM]{1}/.test(temp))
		{
			if (a.charAt(8) == String.fromCharCode(64 + n))
			{
				return 1;
			}
			else
			{
				return -1;
			}
		}
		//comprobacion de CIFs
		if (/^[ABCDEFGHJNPQRSUVW]{1}/.test(temp))
		{
			temp = n + '';
			if (a.charAt(8) == String.fromCharCode(64 + n) || a.charAt(8) == parseInt(temp.substring(temp.length-1, temp.length)))
			{
				return 2;
			}
			else
			{
				return -2;
			}
		}
			//comprobacion de NIEs
		//T
		if (/^[T]{1}[A-Z0-9]{8}$/.test(temp))
		{
			if (a.charAt(8) == /^[T]{1}[A-Z0-9]{8}$/.test(temp))
			{
				return 3;
			}
			else
			{
				return -3;
			}
		}
			//XYZ
		if (/^[XYZ]{1}/.test(temp))
		{
			temp = temp.replace('X','0')
			temp = temp.replace('Y','1')
			temp = temp.replace('Z','2')
			pos = temp.substring(0, 8) % 23;
			if (a.charAt(8) == cadenadni.substring(pos, pos + 1))
			{
				return 3;
			}
			else
			{
				return -3;
			}
		}
	}
		return 0;
	}
	else if(obligatorio==true)return 0;
	else return 1;

}
function crearFlechaObjetos(o1,o2,auto,estilo)
{
	
	var flechaIzquierda=false;
	var w1=o1.width()+parseInt(o1.css("padding-left"))+parseInt(o1.css("padding-right"));
	var h1=o1.height()+parseInt(o1.css("padding-top"))+parseInt(o1.css("padding-bottom"));
	var x1=o1.offset().left;
	var y1=o1.offset().top;
	
	var w2=o2.width()+parseInt(o2.css("padding-left"))+parseInt(o2.css("padding-right"));
	var h2=o2.height()+parseInt(o2.css("padding-top"))+parseInt(o2.css("padding-bottom"));
	var x2=o2.offset().left;
	var y2=o2.offset().top;
	var rx1=Math.max(x1,x2);
	var rx2=Math.min(x1+w1,x2+w2);
	var rx=Math.max(rx2-rx1,0);
	var ry1=Math.max(y1,y2);
	var ry2=Math.min(y1+h1,y2+h2);
	var ry=Math.max(ry2-ry1,0);
	var nx1;
	var nx2;
	var ny1;
	var ny2;
	var recta;
	//Calculamos los desplazamientos
	if (!ry && !rx)
	{
		if (rx2-rx1>-60)
		{
			nx1=x1+w1/2;
			ny1=y1+(y1<=y2?h1:0);
			nx2=x2+(x2>=x1?0:w2);
			ny2=y2+h2/2;
			recta=true;
		} 
		else
		{
			nx1=x1+(x2>=x1?w1:0);
			ny1=y1+h1/2;
			nx2=x2+(x2<x1?w2:0);
			ny2=y2+h2/2;
		}
	}
	else if (rx)
	{
		nx1=rx1+rx/2;
		ny1=y1+(y2>=y1?h1:0);
		nx2=rx1+rx/2;
		ny2=y2+(y2<y1?h2:0);
	}
	else if (ry)
	{
		nx1=x1+(x2>=x1?w1:0);
		ny1=ry1+ry/2;
		nx2=x2+(x2<x1?w2:0);
		ny2=ry1+ry/2;		
	}
	//Sumamos los desplazamientos
	crearFlecha(nx1,ny1,nx2,ny2,recta);
}
function crearFlecha(x1,y1,x2,y2,recta)
{
	if (!estilo) var estilo='2';
	var flechaIzquierda;
	var nx1=Math.min(x1,x2);
	var nx2=Math.max(x2,x1);
	var ny1=Math.min(y1,y2);
	var ny2=Math.max(y2,y1);
	var w=nx2-nx1;
	var h=ny2-ny1;
	var anchuraFlecha=11;
	var anchuraIntermedia=5;
	var alturaIntermedia=6;
	if (x2<x1) flechaIzquierda=true;
	var desplazamientoFlecha=(flechaIzquierda && w)?anchuraFlecha:0;
	//Si no están a la misma altura
	if (w && h)
	{
		var flecha=$("<div class='flecha_indicadora t"+estilo+"'><div class='fh1'></div><img src='images/f"+estilo+"_v_1.png' class='fv1'><div class='fh2'></div><div class='"+(flechaIzquierda?"ft2":"ft1")+"'></div></div>");
		var w1=(w-anchuraFlecha)/2;
		var w2=w1;
		if (recta)
		{
			if (!flechaIzquierda)
			{
				w2=w-anchuraFlecha;
				w1=0;
			}
			else
			{
				w1=w-anchuraFlecha;
				w2=0;				
			}
		}
	}
	//Si están a la misma altura
	else if (!h)
	{
		var flecha=$("<div class='flecha_indicadora t"+estilo+"'><div class='fh1'></div><div class='"+(flechaIzquierda?"ft2":"ft1")+"'></div></div>");
		var w1=(w-anchuraFlecha);
		var w2=0;
	}
	else
	{
		var flecha=$("<div class='flecha_indicadora t2'><img src='images/f"+estilo+"_v_1.png' class='fv1'><div class='"+(flechaIzquierda?"ft4":"ft3")+"'></div></div>");
		var w1=0;
		h=h-anchuraFlecha;
		var w2=0;	
	}
	if ((x2<x1 && y2>y1) || (x2>x1 && y1>y2)) {var invertido=true;desplazamientoVertical=h;} else {var invertido=false;desplazamientoVertical=0;}
	flecha.css({left:nx1+"px",top:ny1+"px"});
	flecha.find(".fh1").width(w1+anchuraIntermedia).css("left",desplazamientoFlecha).css("top",desplazamientoVertical);
	flecha.find(".fh2").width(w2).css({left:(w1+desplazamientoFlecha)+"px",top:(h-desplazamientoVertical)+"px"});
	flecha.find(".fv1").height(h+(w?alturaIntermedia:0)).css("left",w1+desplazamientoFlecha+"px").css("top",((w==0 && flechaIzquierda)?anchuraFlecha:0));

	if (!flechaIzquierda) flecha.find(".ft1,.ft3").css({left:((w1+w2))+"px",top:h});
	else
	{
		flecha.find(".fh2,.fh1").css("background-position","top right");
	}
	if (invertido) flecha.find(".ft1,.ft2,.ft3").css("top",flechaIzquierda?h:0);
	if (!$("#flechas").length) $("body").prepend($("<div id='flechas'></div>"));
	$("#flechas").prepend(flecha);
}

function rellenarLista(obj,datos,texto,tipo)
{
	var div='<div class="lista_tit" value="*">'+texto+'</div>';
	if (tipo=="relacion" && datos[""]==undefined && datos["0"]==undefined && datos[0]==undefined) { div+='<div class="" value="0">&nbsp;</div>'; }
	var u=0;
	var dato=obj.html();
	for(var h in datos)
	{
		u++;
		if (datos[h]) div+="<div "+(datos[h]==texto?"class='sel'":"")+" value='"+(tipo=="grupo"?datos[h]:h)+"'>"+datos[h]+"</div>";
	}
	if (u>15) $("#relacion").css("max-height","220px").css("overflow","auto");
	
	$("#relacion").html(div);
	
	$("html").bind("click",function(e)
	{
		if (editando)
		if (!$(e.target).parents(".lista_campos").length)
		{
			editando=0;
			$("html").unbind();
			cancelarCambios(obj);
			if ($(e.target).hasClass("ajax")) $(e.target).trigger("click");
		}
	});
	$("#relacion div").bind("click",function(e)
	{
		if ($(this).attr("value")=="*")
		{
			e.stopPropagation();
			cancelarCambios(ob);

			}
		else
		{
			e.stopPropagation();
			$(this).addClass("selected");
			guardarCambios(obj);
		}
		$("html").unbind();
	});
}