/*------------------------------------------*/
/* Gesti�n del Medio Rural de Canarias 2007 */
/*------------------------------------------*/

(function($) {

	$.fn.extend({

		/**
		 * Añade filas a una tabla HTML.
		 *
		 * @param datos		Array de objetos javascript.
		 * @param cellFuncs	Array de funciones javascript que generan el contenido de cada celda.
		 * @param opciones	(OPCIONAL)
		 *			- borrarAnteriores: [Boolean] 	Borrar las filas existentes antes de insertar las nuevas (por defecto: TRUE).
		 *			- buscar: 			[String]	Cadena de texto que se quiere resaltar en la tabla.
		 *			- camposUnicos:		[Array]		Array con los indices de las columnas que no se pueden repetir [1,2...].
		 *			- funcBuscar:		[String]	Cadena de texto con el nombre de la funcion que se ejecuta al pulsar la paginacion.
		 *
		 * Ejemplo:
		 *
		 * var datos = [
		 *					{id: 1, nombre: 'Prueba', telefono: '922222222'},
		 *					{id: 2, nombre: 'Otra prueba', telefono: '928888888'}
		 * 			   ];
		 *
		 * var cellFuncs = [
		 *						function(fila) {return fila.id;},
		 *						function(fila) {return "<strong>" + fila.nombre + "</strong>";},
		 *						function(fila) {return fila.telefono;},
		 *					];
		 *
		 * $("#idTabla").addFilas(datos, cellFuncs, {buscar: 'prueba', camposUnicos: [2,3]});
		 */
		addFilas: function(datos, cellFuncs, opciones)
		{
			var opciones = $.extend({borrarAnteriores: true, buscar: null, camposUnicos: [], funcBuscar: null}, opciones);

			if (opciones.buscar)
				var expreg = new RegExp("(?![^<]+>)(" + opciones.buscar + ")(?![^<]+>)", "ig");

			return this.each(function() 
			{
				var oBody = this.getElementsByTagName("tbody")[0];

				if ( ! oBody)
				{
					oBody = document.createElement("tbody");
					this.appendChild(oBody);
				}

				if (opciones.borrarAnteriores) $(oBody).empty();

				var totalFilas = datos.length;

				// if (totalFilas > 100) { totalFilas = 100; }

				if (totalFilas > 0)
				{
					var auxCampo = [];
	
					// Recorremos las filas para crear los TR de la tabla
					for (var i=0; i<totalFilas; i++)
					{
						var oFila = document.createElement("tr");
	
						// Coloreamos las filas pares (class="par")
						if (i%2!=0) $(oFila).addClass("par");
	
						// A�adimos el efecto "rollover"
						$(oFila).hover(function(){$(this).addClass("over");}, function(){$(this).removeClass("over");});
	
						// Recorremos las celdas para crear los TD de la fila
						for (var j=0, totalCeldas=cellFuncs.length; j<totalCeldas; j++)
						{
							var oCelda = document.createElement("td");
	
							// Ejecutamos la funcion para obtener el texto de la celda
							var filaDatos = (cellFuncs[j](datos[i], i) || "");
							var textoCelda = "";
							
							if  (typeof filaDatos == "object")
							{								
								if (filaDatos.texto == null)
								{									
									textoCelda = "";
								}
								else
								{
									textoCelda = filaDatos.texto;								
								}
								$(oCelda).addClass(filaDatos.clase);
							}
							else
								textoCelda = filaDatos.toString();
								
							// Comprobamos si la celda no permite datos repetidos
							if ($.inArray(j + 1, opciones.camposUnicos) > -1)
							{
								if (textoCelda == auxCampo[j])
									textoCelda = "";
								else						
									auxCampo[j] = textoCelda;								
							}
	
							if (opciones.buscar)
								textoCelda = textoCelda.replace(expreg, "<span class='buscado'>$1</span>");
	
							oCelda.innerHTML = textoCelda;
	
							oFila.appendChild(oCelda);
						}
						oBody.appendChild(oFila);
					}

					if (opciones.funcBuscar)
					{
						if ($("#paginacion_" + this.id).length <= 0)
						{
							$("<div id='paginacion_" + this.id + "' class='paginacion'><form>" +
								"<input type='button' class='boton prev' onclick='paginaActual--;" + opciones.funcBuscar +"(true); Paginacion.actualizarContador(\"" + this.id + "\"); return false;' value='' />" +
								"<span id='numRegistros_" + this.id + "' class='numRegistros'></span>" +
								"<input type='button' class='boton next' onclick='paginaActual++;" + opciones.funcBuscar +"(true); Paginacion.actualizarContador(\"" + this.id + "\"); return false;' value='' />" +
							  "</form></div>").insertAfter(this);
						}
						else
							$("#paginacion_" + this.id).show();
					}

					$(this).show();
				}
				else
					$(this).hide();
			});
		},
		
		ocultar: function()
		{
			return this.each(function() 
			{
				$(this).hide();
				$("#paginacion_" + this.id).hide();
			});
		}
	});

})(jQuery);


var Paginacion = {

	actualizarContador: function(idPaginador, paginas)
	{
		if (paginas != null) 	totalPaginas = paginas;
		if (totalPaginas == 0) 	totalPaginas = 1;

		$("#paginacion_" + idPaginador + " input.prev").attr("disabled", (paginaActual <= 0));
		$("#paginacion_" + idPaginador + " input.next").attr("disabled", ((paginaActual + 1) >= totalPaginas));

		$("#numRegistros_" + idPaginador).text("Página " + (paginaActual + 1) + " de " + totalPaginas);
	}
};

