var europeandate = false;
var SORT_COLUMN_INDEX;
var thead = false;

// VARIABLE Y CODIGO PARA PAGINACION
var numpaginas;
var total;
addEvent(window, "load", sortables_init);

// para resaltar y desresaltar las cabeceras de las columnas
// cuando el raton esta encima

function resaltarElemento(Elemento){
	Elemento.style.backgroundImage="url(/images/fondos/ground_th_2.gif)";
	Elemento.style.backgroundPosition="top";
}

function desresaltarElemento(Elemento){
	Elemento.style.backgroundImage="url(/images/fondos/ground_th.gif)";
	Elemento.style.backgroundPosition="left";
}

function resaltador() {
  var myTH = document.getElementsByTagName('th');
  for (var i=0;i<myTH.length;i++) {
      myTH[i].setAttribute("onMouseOver", "resaltarElemento(this)");
      myTH[i].setAttribute("onMouseOut", "desresaltarElemento(this)");
  }
}

// funcion que toma la url y crea una lista con los atributos sort
// ademas de incluir un atributo. si el atributo es nuevo, se incluye
// si ya esta, se cambia el orden ascendente/descendente

function extraerAtributosSort(sort, tabla){
	//alert(sort);
	var url = document.location.toString();
	var tipo_tabla = tabla.getAttribute('id');
	var posAmp;
	var posIgual;
	var atributo;
	var valor;
	var listaAtributos= new Array;
	var cambio = false;
	var direccion;
	var posicion = null;
	var i = 0;
	var atributos = "";
	var tname;
	
	if (tipo_tabla == "index_en_seleccion") atributos += "action=listaEnSeleccion";
	else if (tipo_tabla == "index_en_curso") atributos += "action=listaEnCurso";
	else{
		posAmp = url.indexOf("?");
		if (posAmp !== -1)
		atributos = url.substring(posAmp + 1);
	}
//alert("atributos url -> "+atributos);
	while (atributos.length > 0){
		posIgual = atributos.indexOf('=');
		atributo = atributos.slice(0, posIgual);
//		alert(atributo);
		
		posAmp = atributos.indexOf('&');
		if (posAmp == -1) posAmp = atributos.length;
		valor = atributos.slice(posIgual + 1, posAmp);
		//alert(Url.decode(valor)+" - "+sort);


		if ((atributo == "sort")&&(Url.decode(valor).indexOf(sort)!=-1)){
//			alert('cambiar direccion');
			posicion = i;
			
			direccion = valor.slice(valor.indexOf("-") + 1, valor.length);
			direccion = direccion.slice(direccion.indexOf("-") + 1, direccion.length);
//			alert(direccion);
			//direccion = valor.substring(valor.indexOf("-")+1, valor.length).slice(valor.indexOf("-") + 1, valor.length);
			if (direccion == "DESC"){
				valor = valor.slice(0, valor.indexOf(direccion) - 1);
				valor += "-ASC";
			}else{
				valor = valor.slice(0, valor.indexOf(direccion) - 1);
				valor += "-DESC";
			}
		}
		var par = new Array (atributo, valor);
		listaAtributos[listaAtributos.length] = par;
		
		atributos = atributos.substring(posAmp + 1, atributos.length);
		
		i++;

	}
	//alert (listaAtributos);
	for (i = 0; i < listaAtributos.length; i++){
		//alert(atributos+" - "+listaAtributos[i][1]);
		if (((listaAtributos[i][1] == "")||(atributos.indexOf(listaAtributos[i][1]) == -1)) && i != posicion){
			atributos += "&"+listaAtributos[i][0]+"="+listaAtributos[i][1];
		}
	}
	//alert("despues de recorrer el array del for: "+atributos);
	if (posicion) atributos += "&sort="+listaAtributos[posicion][1];
	//alert("despues del if: "+atributos);
	if (sort && ((atributos.indexOf(sort) == -1)&&(atributos.indexOf(Url.encode(sort)) == -1))) atributos += "&sort="+tabla.getAttribute('name')+"-"+sort+"-ASC";
	//alert("despues del 2º if: "+atributos.slice(1, atributos.length));
//alert(atributos.slice(1, atributos.length));
	return atributos.slice(1, atributos.length);
}	

// funcion que genera la lista de atributos para cambiar de sector
// en la paginacion

function extraerAtributosSector(sector, pagina){
	var url = document.location.toString();
	var posAmp;
	var posIgual;
	var atributo;
	var valor;
	var listaAtributos= new Array;
	
	posAmp = url.indexOf("?");
	if (posAmp == -1) return;
	
	var atributos = url.substring(posAmp + 1, url.length);
	
	while (atributos.length > 0){
		posIgual = atributos.indexOf('=');
		atributo = atributos.slice(0, posIgual);
		
		posAmp = atributos.indexOf('&');
		if (posAmp == -1) posAmp = atributos.length;
		valor = atributos.slice(posIgual + 1, posAmp);


		if (atributo == "pagina"){
			par = new Array (atributo, sector);
		}else if (atributo == "p"){
			par = new Array (atributo, pagina);
		}else{
			var par = new Array (atributo, valor);
		}
		listaAtributos[listaAtributos.length] = par;
		
		atributos = atributos.substring(posAmp + 1, atributos.length);
	}
	for (var i = 0; i < listaAtributos.length; i++){
		atributos += "&"+listaAtributos[i][0]+"="+listaAtributos[i][1];
	}

	if (sector && (atributos.indexOf("pagina=") == -1)) atributos += "&pagina="+sector;
	if (pagina && (atributos.indexOf("p=") == -1)) atributos += "&p="+pagina;

	return atributos.slice(1, atributos.length);
}

function sortables_init() {
//	alert("sortables_init");
	var tbls;
	if (!document.getElementsByTagName) return;
	tbls = document.getElementsByTagName("table");
	for (var ti=0;ti<tbls.length;ti++) {
		var thisTbl = tbls[ti];
		
		var resultado = ts_makeSortable(thisTbl);
		
		if (resultado == "no paginable"){
			continue;
		}else if (resultado){
			continue;
		}
		if ((thisTbl.getAttribute('id') == "")||(thisTbl.getAttribute('id') == null)){
			thisTbl.setAttribute('id', ti);
			thisTbl.id = ti;
		}
		if ((thisTbl.getAttribute('sectorActual') != null)&&(thisTbl.getAttribute('sectorActual') != "")) var sector = eval(thisTbl.getAttribute('sectorActual'));
		else {
			var sector = 0;
			thisTbl.setAttribute('sectorActual', 0);
		}
		if ((thisTbl.getAttribute('pActual') != null)&&(thisTbl.getAttribute('pActual') != "")) var pagina =eval(thisTbl.getAttribute('pActual'));
		else {
			var pagina = 0;
			thisTbl.setAttribute('pActual', 0);
		}
		if ((thisTbl.getAttribute('regs') == null)||(thisTbl.getAttribute('regs') == "")) thisTbl.setAttribute('regs', thisTbl.tBodies[0].rows.length);

		if (document.getElementById('filtros')){
			aplicarFiltrosTabla(thisTbl.id);
		}
		else{
			if (!thisTbl.getAttribute('paginable')||(thisTbl.getAttribute('paginable') != "no")){			
				//alert(thisTbl.id);
				paginate(thisTbl.id, sector, pagina);			
			}
		}
	}
}


function ts_makeSortable(t) {

	// extraemos la linea de cabecera que sera la ordenable
	if (t.rows && t.rows.length > 0) {
	//alert(t.tHead);
		if (t.tHead && t.tHead.rows.length > 0) {
			var firstRow = t.tHead.rows[0];
			thead = true;
		} else {
			return "no paginable";
		}
	}
	if (!firstRow) return ("error: tabla vacia");
	
	var atributos;
	
	//alert(t.getAttribute('regs'));
	//alert(maximoOrdenableJs);
	for (var i=0;i<firstRow.cells.length;i++) {
		//alert("for");
		var cell = firstRow.cells[i];
		var txt = ts_getInnerText(cell);
		//alert("we");
		if ((txt != "Acciones")&&(txt != "Añadir")/*&&(txt != "Otras Redes")&&(txt != "Ediciones Procedencia")*/) {
			// esto no funciona en ie -> cell.setAttribute("onMouseOver", "resaltarElemento(this)");
			// hay que poner esto
			cell.onmouseover = function(){resaltarElemento(this);};
			cell.onmouseout = function(){desresaltarElemento(this);};
			//alert("comprobar paginable");
			if (t.getAttribute('name') != 'recipients'){
				if (eval(t.getAttribute('regs')) <= maximoOrdenableJs){
					////alert("ordenar por javascript");
					cell.innerHTML = '<a style="text-decoration:none" href="#" class="sortheader" onclick="ts_resortTable(this, '+i+');return false;"><span class="sortarrow">'+txt+'</span></a>';
				}else{
					////alert("ordenar por bbdd");
					var sort = quitarAcentos(txt.toLowerCase());
					if ((t.id == "index_en_seleccion")||(t.id == "index_en_curso")){
						atributos = extraerAtributosSort(sort, t);
						var direccion = "ListaEdiciones.php";
					}
					else{
						atributos = extraerAtributosSort(sort, t);
						var direccion = "";
					}
					//alert('" href="'+direccion+"?"+atributos+'"');
					cell.innerHTML = '<a style="text-decoration:none" href="'+direccion+"?"+atributos+'">'+txt+'<span class="sortarrow"></span></a>';
				}
				var span = cell.getElementsByTagName("span");
				// asignamos al atributo ordenada un "no" pq la columna no esta ordenada
				span[0].setAttribute("ordenada", "no");
			}
		}
	}
	////alert("fin for");
}

function ocultarLineas(table){
	for(i=0;i<table.tBodies[0].rows.length;i++){
		table.tBodies[0].rows[i].style.display='none';
	}
}

function paginate(table_id, sector, pagina) {
	////alert("paginate("+sector+", "+pagina+")");
	//alert(table_id);
	var table = document.getElementById(table_id);
	
	if (pagina != null) table.setAttribute('pActual', pagina);
	else pagina = table.getAttribute('pActual');
	if (!sector) sector = 0;
	
	// obtener los numeros de pagina a mostrar bajo la tabla
	var paginas = getpaginas(table_id);
	
	// CREACION DEL DIV EN EL QUE SE ESCRIBIRAN EL NUMERO DE RESULTADOS
	// Y LOS NUMEROS DE PAGINA
	
	if ((table.getAttribute('id') != "index_en_seleccion")&&
	(table.getAttribute('id') != "index_en_curso")){
		////alert("ni en seleccion ni en curso");
		var padre = table.parentNode;
		if (paginacion = document.getElementById('paginacion'+table_id)) padre.removeChild(paginacion);
		var paginacion = document.createElement("div");
		paginacion.setAttribute('id', 'paginacion'+table_id);
		paginacion.setAttribute('align', 'center');
		
		var nres = document.createElement('span');

		// calculamos el ultimo numero de pagina imprimible
		if ((table.getAttribute('regs') != "") && (table.getAttribute('regs') != null)) var maximo = eval(table.getAttribute('regs'));
		else {
			var maximo = table.tBodies[0].rows.length;
		}
	 	var numpaginas = maximo / resultadosPagina;
	 	dif = (maximo % resultadosPagina);
		if (dif != 0) numpaginas = ((maximo - dif) / resultadosPagina)+1;
	 	if (resultadosPagina == 1) numpaginas++;
		var uno = "";
		if (table.getAttribute('regs') > 1) uno = "s";
		var una = "";
		if (numpaginas > 1) una = "s";
		nres.innerHTML = "Encontrado"+uno+" <strong>"+table.getAttribute('regs')+"</strong> elemento"+uno+" (<strong>"+numpaginas+"</strong> pagina"+una+").";
		paginacion.appendChild(nres);
		paginacion.appendChild(document.createElement('br'));
		paginacion.appendChild(document.createElement('br'));

		if (table.getAttribute('regs') > resultadosPagina){
			var div_paginas = document.createElement("div");
			div_paginas.setAttribute('id', 'paginas'+table_id);
			paginacion.appendChild(div_paginas);
			paginacion.appendChild(document.createElement("br"));
		}
		
		padre.insertBefore(paginacion, table.nextSibling);
	}
	
	// calculamos el indice de la pagina en relacion al sector
	var primero_mostrar = pagina * resultadosPagina;
	primero_mostrar = primero_mostrar - (sector * registrosSector);
	var ultimo_mostrar = (pagina + 1) * resultadosPagina;
	ultimo_mostrar = ultimo_mostrar - (sector * registrosSector);
	
	// calculamos el total de registros de este sector
	total = table.tBodies[0].rows.length;
	
	ocultarLineas(table);

	// mostrar las filas correspondientes a la pagina actual
	for(var i=primero_mostrar;i<Math.min(ultimo_mostrar, total);i++){
		table.tBodies[0].rows[i].style.display='';
	}
	
	// obtenemos el div donde vamos a insertar los numeros de pagina
	// e insertamos sus url's
	var paginacion = document.getElementById('paginas'+table_id);

	if (paginacion){
		paginacion.innerHTML = "";
		for (var i = 0; i < paginas.length; i++){
			// ponemos el numero de la pagina actual en negrita
			if (paginas[i] != "..."){
				if (paginas[i]-1 == pagina) paginacion.innerHTML += '<strong>'+paginas[i]+'</strong>&nbsp';
				else {
					// insertamos los links a las otras paginas
					// el primer caso es para las que estan en el cliente
					// los otros dos para el sector superior e inferior
					if ((((sector + 1) * registrosSector) - 1) / resultadosPagina < (paginas[i] - 1)){
						//alert("entra en el primer if");
						//alert("sector --> "+sector);
						//alert("registrosSector --> "+registrosSector);
						//alert("resultadosPagina --> "+resultadosPagina);
						//alert("pagina -->> "+(paginas[i]-1));
						var nuevaDif = ((paginas[i]-1)*resultadosPagina)%registrosSector;
						//alert("nueva dif: "+nuevaDif);
						var nuevoSector = (((paginas[i]-1)*resultadosPagina)-nuevaDif)/registrosSector;
						//alert("nuevo sector: "+nuevoSector);
						var atributos = extraerAtributosSector(nuevoSector, paginas[i]-1);
						//alert(paginas[i] - 1);
						//alert(atributos);
						if (table.getAttribute('name') == 'recipients'){
							paginacion.innerHTML += '<a onclick="refreshRecipients(null, null, \''+nuevoSector+'\', \''+(paginas[i] - 1)+'\');" href="#">'+paginas[i]+'</a>&nbsp;';
						}else
							paginacion.innerHTML += '<a href="?'+atributos+'">'+paginas[i]+'</a>&nbsp;';
					}else if ((((sector) * registrosSector) - 1) / resultadosPagina > paginas[i]-1){
						//alert("entra en el else");
						var nuevaDif = ((paginas[i]-1)*resultadosPagina)%registrosSector;
						//alert("nueva dif: "+nuevaDif);
						var nuevoSector = (((paginas[i]-1)*resultadosPagina)-nuevaDif)/registrosSector;
						//alert("nuevo sector: "+nuevoSector);
						var atributos = extraerAtributosSector(nuevoSector, paginas[i]-1);
						//alert(atributos);
						if (table.getAttribute('name') == 'recipients'){
							paginacion.innerHTML += '<a onclick="refreshRecipients(null, null, \''+nuevoSector+'\', \''+(paginas[i] - 1)+'\');" href="#">'+paginas[i]+'</a>&nbsp;';
						}else
						paginacion.innerHTML += '<a href="?'+atributos+'">'+paginas[i]+'</a>&nbsp;';
					}else{
						//alert("entra aqui");
						paginacion.innerHTML += '<a href="#" onclick="paginate('+table_id+', '+sector+', '+(paginas[i]-1)+');window.scrollTo(0, 100);return false;">'+paginas[i]+'</a>&nbsp;';
					}
				}
			}else paginacion.innerHTML += '...&nbsp;';
		}
	}
	////alert('finish paginate');
}

function getpaginas(table_id){
	var paginas = new Array();
	var interval = paginasMostradas / 2;
	////alert("paginas mostradas: "+paginasMostradas);
	////alert("interval: "+interval);
	
	var table = document.getElementById(table_id);
	pagina = table.getAttribute('pActual');
	//alert("pActual: "+pagina);
	if ((table.getAttribute('regs') != "") && (table.getAttribute('regs') != null)) var maximo = eval(table.getAttribute('regs'));
	else {
		var maximo = table.tBodies[0].rows.length;
	}
	//alert("maximo: "+maximo);
/*	var primerRegistro = (pagina * resultadosPagina) + 1;
	document.getElementById("regInicio").innerHTML = primerRegistro;
	var ultimoRegistro;
	if (primerRegistro + resultadosPagina - 1 > maximo)
		document.getElementById("regFin").innerHTML = maximo;
	else
		document.getElementById("regFin").innerHTML = primerRegistro + resultadosPagina - 1;
	// calculamos el ultimo numero de pagina imprimible
	document.getElementById("rango").style.visibility = "";*/
 	numpaginas = maximo / resultadosPagina;
 	dif = (maximo % resultadosPagina);
	if (dif != 0) numpaginas = ((maximo - dif) / resultadosPagina)+1;
// 	if (resultadosPagina == 1) numpaginas++;
 	//alert("numpaginas: "+numpaginas);
 	
  // calculamos el primer y ultimo numero de pagina a visualizar
 	inicio = pagina - interval + 1;
 	
 	if (inicio < 1) inicio = 1;
 	else inicio = inicio - 0.5;
 	fin = inicio + paginasMostradas;

 	//alert("fin: "+fin);
 	if (fin > numpaginas - 1){
 		fin = numpaginas - 1;
 		inicio = fin - paginasMostradas;
 		if (inicio < 0) inicio = 1;
 	}
	// creamos un array con los numeros a imprimir
 	for (i= inicio, j = 0; i < fin; i++) paginas[j++] = i+1;
  	
  	// creacion de un array con algunos numeros de pagina
  	// anteriores al primero impreso
  	var anteriores = new Array();
  	var factor = Math.floor(paginas[0] / 5);

	anteriores[0] = 1;
  	if (factor > 0){
	  	for (i = 2, j = 1; i < paginas[0];){
			if (anteriores[j-1] != i - 1) anteriores[j++] = "...";
			anteriores[j++] = i;
			i += factor;
	  	}
	}

	// creacion de un array con algunos numeros de pagina
  	// posteriores al ultimo impreso
	
  	var posteriores = new Array();
  	factor = Math.floor((numpaginas - paginas[paginas.length-1]) / 5);
	posteriores[0] = numpaginas;
  	if (factor > 0){
	  	for (i = numpaginas - 1, j = 1; i > paginas[paginas.length-1] + factor;){
			if (posteriores[j-1] != i + 1) posteriores[j++] = "...";
			posteriores[j++] = i;
			i -= factor;
	  	}
	}

  	//alert(paginas);
  	//alert(anteriores);
  	//alert(posteriores);
  	//alert(anteriores[anteriores.length - 1]+" "+(paginas[0]-1));
	if ((anteriores[anteriores.length - 1] != paginas[0] - 1)&&(posteriores[posteriores.length-1] != anteriores[anteriores.length-1]+1)) anteriores[anteriores.length] = "...";
	if ((posteriores[posteriores.length-1] != paginas[paginas.length-1]+1)&&(posteriores[posteriores.length-1] != anteriores[anteriores.length-1]+1)) posteriores[posteriores.length] = "...";
	
	return anteriores.concat(paginas).concat(posteriores.reverse());
}	

function eliminarOptionsNoSeleccionados(lista){

	
	if (lista.type =="select-one"){
		var salida = "";	
		for (var i =0; i< lista.length; i++){				
			if(lista[i].selected){
				salida= lista[i].innerHTML;
			}				
		}	
		return  salida;
	}else{
		return lista;	
	}	
}

function ts_getInnerText(el) {
	if (typeof el == "string") return el;
	if (typeof el == "undefined") { return el };
	
	if (el.innerText) return el.innerText;	//Not needed but it is faster

	var str = "";
	var cs = el.childNodes;	
	var l = cs.length;
	for (var i = 0; i < l; i++) {
		switch (cs[i].nodeType) {		
			case 1: //ELEMENT_NODE
				var elementoFormateado = eliminarOptionsNoSeleccionados(cs[i]);				
				str += ts_getInnerText(elementoFormateado);				
				break;
			case 3:	//TEXT_NODE			
				if (cs[i].nodeValue != "\n") str += cs[i].nodeValue;
				break;
		}
	}

	return str;
}

function ts_resortTable(lnk, clid) {
	
	//alert('comenzamos ts_resortTable');
	//alert(clid);
	var span;
	for (var ci=0;ci<lnk.childNodes.length;ci++) {
		if (lnk.childNodes[ci].tagName && lnk.childNodes[ci].tagName.toLowerCase() == 'span') span = lnk.childNodes[ci];
	}
	//alert(span);
	var spantext = ts_getInnerText(span);
	//alert(spantext);
	
	var td = lnk.parentNode;
	var column = clid || td.cellIndex;
	var t = getParent(td,'TABLE');
	
	if (t.rows && t.rows.length > 0) {
		if (t.tHead && t.tHead.rows.length > 0) {
			var firstRow = t.tHead.rows[t.tHead.rows.length-1]; //por si hubiera más de una fila en la cabecera fuerzo a quedarme con la primera
		} else {
			var firstRow = t.rows[0];
		}
	}
		
	
	// quitamos a todas las columnas menos la clickeada la propiedad de ordenada
	for (i = 0; i < firstRow.cells.length; i++){
/*		if ((i != column)&&(firstRow.cells[i].innerHTML != "Acciones")&&(firstRow.cells[i].innerHTML != "Añadir")
				&&(firstRow.cells[i].innerHTML != "Otras Redes")&&(firstRow.cells[i].innerHTML != "Ediciones Procedencia")){*/
			if ((i != column)&&(firstRow.cells[i].innerHTML.indexOf("Acciones")==-1)&&(firstRow.cells[i].innerHTML.indexOf("Añadir")==-1)/*
					&&(firstRow.cells[i].innerHTML.indexOf("Otras Redes")==-1)&&(firstRow.cells[i].innerHTML.indexOf("Ediciones Procedencia")==-1)*/){
			var spanaux;
			//alert(firstRow.cells[i].innerHTML);
			spanaux = firstRow.cells[i].getElementsByTagName('span')[0];
			spanaux.setAttribute("ordenada", "no");
		}else{	
		}
	}
	
	
	
	// averiguar el tipo de la columna a ordenar
	if (t.rows.length <= 1) return;
	var itm = "";
	var i = 0;
	while ((itm == "" || itm == "-") && i < t.tBodies[0].rows.length) {
		var itm = ts_getInnerText(t.tBodies[0].rows[i].cells[column]);
		itm = trim(itm);
		if (itm.substr(0,4) == "<!--" || itm.length == 0) {
			itm = "";
		}
		i++;
	}
	
			
	//alert(itm);
	if (itm == "") return; 
	sortfn = ts_sort_caseinsensitive;

	if (itm.match(/^\d\d[\/\.-][a-zA-z][a-zA-Z][a-zA-Z][\/\.-]\d\d\d\d$/)) sortfn = ts_sort_date;
	if (itm.match(/^\d\d[\/\.-]\d\d[\/\.-]\d\d\d{2}?$/)) sortfn = ts_sort_date;
	if (itm.match(/^-?[£$€Û¢´]\d/)) sortfn = ts_sort_numeric;
	if (itm.match(/^-?(\d+[,\.]?)+(E[-+][\d]+)?%?$/)) sortfn = ts_sort_numeric;
	SORT_COLUMN_INDEX = column;

	var firstRow = new Array();
	var newRows = new Array();
	
	// extraemos las filas de la tabla saltando la de cabecera
	for (k=0;k<t.tBodies.length;k++) {
		if (!thead) {
//alert('no tengo cabecera');		
			// Skip the first row
			for (j=1;j<t.tBodies[k].rows.length;j++) { 
				newRows[j-1] = t.tBodies[k].rows[j];
			}
		} else {
			//alert("si tengo cabecera");
			// Do NOT skip the first row
			for (j=0;j<t.tBodies[k].rows.length;j++) { 
				newRows[j] = t.tBodies[k].rows[j];
			}
		}
	}
	
	// si la columna ya esta ordenada, se hace un reverse
	// si no lo esta, se ordena
	//alert("nuevas filas: "+newRows.length);
	if (span.getAttribute("ordenada") == "no"){
		//alert("no estaba ordenada");
		newRows = ordenar(newRows, sortfn);
//		newRows.sort(sortfn);
		span.setAttribute("ordenada", "si");
	}else{
		//alert("estaba ordenada --> girar");
		newRows.reverse();
	}

	// anexamos las lineas en orden a la tabla
	if(newRows!=null){
	  	for (i=0; i<newRows.length; i++) {
				t.tBodies[0].appendChild(newRows[i]);
		}
	}

	// ocultamos las todas las lineas y llamamos a paginar
	// para mostrar las adecuadas y los links a las paginas
	//ocultarLineas(t);
	//alert("filtros y paginar...");
	if (document.getElementById('filtros')) aplicarFiltrosTabla(t.id, eval(t.getAttribute('pActual')));
	else paginate(t.id, t.getAttribute('sectorActual'), t.getAttribute('pActual'));
}

function getParent(el, pTagName) {
	if (el == null) {
		return null;
	} else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase()) {
		return el;
	} else {
		return getParent(el.parentNode, pTagName);
	}
}

function sort_date(date) {	
	// y2k notes: two digit years less than 50 are treated as 20XX, greater than 50 are treated as 19XX
	var dt = "";
	dt = date.substr(6,4)+date.substr(3,2)+date.substr(0,2);
	return dt;
}

function ts_sort_date(a,b) {
	dt1 = sort_date(ts_getInnerText(a.cells[SORT_COLUMN_INDEX]));
	dt2 = sort_date(ts_getInnerText(b.cells[SORT_COLUMN_INDEX]));
	
	if (dt1==dt2) {
		return 0;
	}
	if (dt1<dt2) { 
		return -1;
	}
	return 1;
}
function ts_sort_numeric(a,b) {
	var aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
	aa = clean_num(aa);
	var bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
	bb = clean_num(bb);
	return compare_numeric(aa,bb);
}
function compare_numeric(a,b) {
	var a = parseFloat(a);
	a = (isNaN(a) ? 0 : a);
	var b = parseFloat(b);
	b = (isNaN(b) ? 0 : b);
	return a - b;
}
/*
function trim(cadena)
{
	cadena = cadena.split("sr.").join("");
	alert(cadena);
	cadena = cadena.split("sra.").join("");
	alert(cadena);
	for(i=0; i<cadena.length; )
	{
		if(cadena.charAt(i)==" ")
			cadena=cadena.substring(i+1, cadena.length);
		else
			break;
	}

	for(i=cadena.length-1; i>=0; i=cadena.length-1)
	{
		if(cadena.charAt(i)==" ")
			cadena=cadena.substring(0,i);
		else
			break;
	}
	
	return cadena;
}
*/

function ts_sort_caseinsensitive(a,b) {
	aa = trim(ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).toLowerCase());
	bb = trim(ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).toLowerCase());
	
	if (aa==bb) {
		return 0;
	}
	if (aa<bb) {
		return -1;
	}
	return 1;
}


function ts_sort_default(a,b) {
	aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
	bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
	if (aa==bb) {
		return 0;
	}
	if (aa<bb) {
		return -1;
	}
	return 1;
}
function addEvent(elm, evType, fn, useCapture)
// addEvent and removeEvent
// cross-browser event handling for IE5+,	NS6 and Mozilla
// By Scott Andrew
{
	if (elm.addEventListener){
		elm.addEventListener(evType, fn, useCapture);
		return true;
	} else if (elm.attachEvent){
		var r = elm.attachEvent("on"+evType, fn);
		return r;
	} else {
		//alert("Handler could not be removed");
	}
}
function clean_num(str) {
	str = str.replace(new RegExp(/[^-?0-9.]/g),"");
	return str;
}

function trim(s) {
//	s = s.split("sr.").join("");
//	s = s.split("sra.").join("");
	s = s.replace("\n", "");
	s = s.replace(/^\s+|\s+$/g, "");
	s = s.replace("sr.", "");
	s = s.replace("sra.", "");
	//alert(s);
	return s;
}

// ordenacion por burbuja y tipo de datos
function ordenar(lista, tipo){
	var elemento;
	var cambio = 0;
	
	for (i = 0; i < lista.length-1; i++){
		if (tipo(lista[i], lista[i+1]) > 0){
			elemento = lista[i];
			lista[i] = lista[i+1];
			lista[i+1] = elemento;
			cambio = 1;
		}
	}
	if (cambio == 0){
		return lista;
	}else{
		return ordenar(lista, tipo);
	}
}

function filasVisibles(table){

	// contar las filas visibles y guardar sus posiciones en la tabla
	// para devolver el array con ellas
	var filas = new Array();
	for(var i=0;i<table.tBodies[0].rows.length;i++){
		if ((table.tBodies[0].rows[i].style.display == '')||(!table.tBodies[0].rows[i].style.display)) filas.push(i);
	}
	return filas;
}

function contarFilasVisibles(table){

	// contar las filas visibles y guardar sus posiciones en la tabla
	// para devolver el array con ellas
	var contador = 0;
	for(var i=0;i<table.tBodies[0].rows.length;i++){
		if ((table.tBodies[0].rows[i].style.display == '')||(!table.tBodies[0].rows[i].style.display)) {
			contador++;
		}
	}
	return contador;
}

function aplicarFiltrosLinea(linea, filtros){
	//alert("starting aplicarFiltrosLinea: linea:" + linea + " filtros: " + filtros);
	var aplicar = 'no';
	for (var i = 0; i < filtros.length; i++){
		var textoCelda = ts_getInnerText(linea.cells[filtros[i][0]]);
		if (textoCelda.toUpperCase() != filtros[i][1].toUpperCase()){
			aplicar = 'si';
		}
	}
	if (aplicar == 'si') linea.style.display = 'none';
	else linea.style.display = '';
	//alert("end aplicarFiltrosLinea");
}

function aplicarFiltrosTabla(tablaId, pagina){
	//alert('aplicarFiltrosTabla: '+ tablaId);
	var divFiltros = document.getElementById('filtros');
	var filtros = new Array();
	filtros = divFiltros.getElementsByTagName('select');
	//alert('filtros: ' + filtros);
	var tabla = document.getElementById(tablaId);
	var cabecera = tabla.tHead.rows[0];
	var arrayFiltros = new Array();
	for (var i = 0; i < filtros.length; i ++){
		if (filtros[i].options[filtros[i].selectedIndex].innerHTML != 'Todos'){
			var columnaTxt = filtros[i].name.slice("filtro_".length);
			columnaTxt = columnaTxt.removeAccents();
			for (var j=0; j < cabecera.cells.length; j++){
				var textoCab = ts_getInnerText(cabecera.cells[j]);
				textoCab = textoCab.removeAccents();
				textoCab = textoCab.toLowerCase();
		//		alert(textoCab+" "+columna);
				if (textoCab.indexOf(columnaTxt) != -1){
					var columnaIndex = j;
				}
			}
			var par = new Array (columnaIndex, filtros[i].options[filtros[i].selectedIndex].innerHTML);
			arrayFiltros[arrayFiltros.length] = par;
		}
	}
	var cuerpoTabla = tabla.tBodies[0].rows;
	for (var i=0; i < cuerpoTabla.length; i++){
		aplicarFiltrosLinea(cuerpoTabla[i], arrayFiltros);
	}
	if (!tabla.getAttribute('paginable')||(tabla.getAttribute('paginable')!="no")){
		if (!pagina) paginateFiltrate(tablaId, 0);
		else paginateFiltrate(tablaId, pagina);
	}
}

function paginateFiltrate(table_id, pagina) {
//	alert(pagina);
	var table = document.getElementById(table_id);
	table.setAttribute('pActual', pagina);
	// obtener los numeros de pagina a mostrar bajo la tabla
	var paginas = getpaginasFiltrate(table_id, pagina);
	// CREACION DEL DIV EN EL QUE SE ESCRIBIRAN EL NUMERO DE RESULTADOS
	// Y LOS NUMEROS DE PAGINA
//	if (!table.getAttribute('paginable')||(table.getAttribute('paginable') != "no")){
	if ((table.getAttribute('id') != "index_en_seleccion")&&
	(table.getAttribute('id') != "index_en_curso")){
		var padre = table.parentNode;
		if (paginacion = document.getElementById('paginacion'+table_id)) padre.removeChild(paginacion);
		var paginacion = document.createElement("div");
		paginacion.setAttribute('id', 'paginacion'+table_id);
		paginacion.setAttribute('align', 'center');
		
		var nres = document.createElement('span');

		var maximo = contarFilasVisibles(table);
	 	var numpaginas = maximo / resultadosPagina;
	 	dif = (maximo % resultadosPagina);
		if (dif != 0) numpaginas = ((maximo - dif) / resultadosPagina)+1;
	 	if (resultadosPagina == 1) numpaginas++;
		var uno = "";
		if (maximo > 1) uno = "s";
		var una = "";
		if (numpaginas > 1) una = "s";
		nres.innerHTML = "Encontrado"+uno+" <strong>"+maximo+"</strong> elemento"+uno+" (<strong>"+numpaginas+"</strong> pagina"+una+").";
		paginacion.appendChild(nres);
		paginacion.appendChild(document.createElement('br'));
		paginacion.appendChild(document.createElement('br'));

		if (maximo > resultadosPagina){
			var div_paginas = document.createElement("div");
			div_paginas.setAttribute('id', 'paginas'+table_id);
			paginacion.appendChild(div_paginas);
			paginacion.appendChild(document.createElement("br"));
		}

		padre.insertBefore(paginacion, table.nextSibling);
	}
	
	// obtengo el array con los numeros de paginas visibles
	var visibles = filasVisibles(table);
	
	// calculamos el indice de la pagina en relacion al sector
	var primero_mostrar = pagina * resultadosPagina;
	var ultimo_mostrar = (pagina + 1) * resultadosPagina;
//	alert(primero_mostrar+" "+ultimo_mostrar);
	ocultarLineas(table);

	// mostrar las filas correspondientes a la pagina actual
	for(var i=primero_mostrar;i<Math.min(visibles.length,ultimo_mostrar);i++){
		var indice = visibles[i];
		table.tBodies[0].rows[indice].style.display='';
	}
	
	// obtenemos el div donde vamos a insertar los numeros de pagina
	// e insertamos sus url's
	var paginacion = document.getElementById('paginas'+table_id);

	if (paginacion){
		paginacion.innerHTML = "";
		
		for (var i = 0; i < paginas.length; i++){
			// ponemos el numero de la pagina actual en negrita
			if (paginas[i] != "..."){
				if (paginas[i]-1 == pagina) paginacion.innerHTML += '<strong>'+paginas[i]+'</strong>&nbsp';
				else{
					paginacion.innerHTML += '<a href="#" onclick="aplicarFiltrosTabla('+table_id+', '+(paginas[i]-1)+');window.scrollTo(0, '+(table.scrollHeight+100)+');return false;">'+paginas[i]+'</a>&nbsp;';
				}
			}else paginacion.innerHTML += '...&nbsp;';
		}
	}
}

function getpaginasFiltrate(table_id, pagina){
	var paginas = new Array();
	var interval = paginasMostradas / 2;
	
	var table = document.getElementById(table_id);
	var maximo = contarFilasVisibles(table);
	
	// calculamos el ultimo numero de pagina imprimible
 	numpaginas = maximo / resultadosPagina;
 	dif = (maximo % resultadosPagina);
	if (dif != 0) numpaginas = ((maximo - dif) / resultadosPagina)+1;
// 	if (resultadosPagina == 1) numpaginas++;
 	
  // calculamos el primer y ultimo numero de pagina a visualizar
 	inicio = pagina - interval + 1;
 	if (inicio < 0) inicio = 1;
 	fin = inicio + paginasMostradas;

 	if (fin > numpaginas){
 		fin = numpaginas - 1;
 		inicio = fin - paginasMostradas;
 		if (inicio < 0) inicio = 1;
 	}
	// creamos un array con los numeros a imprimir
 	for (i= inicio, j = 0; i < fin; i++) paginas[j++] = i+1;
  	
  	// creacion de un array con algunos numeros de pagina
  	// anteriores al primero impreso
  	var anteriores = new Array();
  	var factor = Math.floor(paginas[0] / 5);

	anteriores[0] = 1;
  	if (factor > 0){
	  	for (i = 2, j = 1; i < paginas[0];){
			if (anteriores[j-1] != i - 1) anteriores[j++] = "...";
			anteriores[j++] = i;
			i += factor;
	  	}
	}

	// creacion de un array con algunos numeros de pagina
  	// posteriores al ultimo impreso
	
  	var posteriores = new Array();
  	factor = Math.floor((numpaginas - paginas[paginas.length-1]) / 5);
	posteriores[0] = numpaginas;
  	if (factor > 0){
	  	for (i = numpaginas - 1, j = 1; i > paginas[paginas.length-1] + factor;){
			if (posteriores[j-1] != i + 1) posteriores[j++] = "...";
			posteriores[j++] = i;
			i -= factor;
	  	}
	}

	if ((anteriores[anteriores.length - 1] != paginas[0] - 1)&&(posteriores[posteriores.length-1] != anteriores[anteriores.length-1]+1)) anteriores[anteriores.length] = "...";
	if ((posteriores[posteriores.length-1] != paginas[paginas.length-1]+1)&&(posteriores[posteriores.length-1] != anteriores[anteriores.length-1]+1)) posteriores[posteriores.length] = "...";
	
	return anteriores.concat(paginas).concat(posteriores.reverse());
}	

String.prototype.removeAccents = function ()
{
	var __r = {'Á':'A', 'É':'E', 'Í':'I', 'Ó':'O', 'Ú':'U'};
	
	return this.replace(/[ÁÉÍÓÚ]/gi, function(m){
		var ret = __r[m.toUpperCase()];
					
		if (m === m.toLowerCase())
			ret = ret.toLowerCase();
			
		return ret;
	});
};

String.prototype.htmlentities = function()
{
	var __r = {'Á':'%C1', 'É':'%C9', 'Í':'%CD', 'Ó':'%D3', 'Ú':'%DA',
				'á':'%E1', 'é':'%E9', 'í':'%ED', 'ó':'%F3', 'ú':'%FA',
				'º':'%BA', 'ª':'%AA', '<':'%3C', '>':'%3E', 'ñ':'%F1',
				'Ñ':'%D1', ' ':'%20'};
	
	return this.replace(/[ÁÉÍÓÚáéíóúºª <>]/gi, function(m){
		var ret = __r[m.toUpperCase()];
					
		if (m === m.toLowerCase())
			ret = ret.toLowerCase();
			
		return ret;
	});
};

function quitarAcentos(palabra){
	var nueva = palabra.toLowerCase();
	nueva = nueva.replace('á', 'a');
	nueva = nueva.replace('é', 'e');
	nueva = nueva.replace('í', 'i');
	nueva = nueva.replace('ó', 'o');
	nueva = nueva.replace('ú', 'u');
	return nueva;
}

