var system_datagrid = Class.create();
system_datagrid.prototype = {
	initialize : function(json)
	{
		this.crear_despues_de_iniciar	= 0;
		if(json)
		{
			this.iniciar(json);
		}
		this.get_extra	= '';
		this.post_extra	= '';
		this.fill_campos_contador	= 1;
		this.busqueda_filtros		= new Array();
	}
	,
	set_post_extra:function(extra)
	{
		this.post_extra	= extra;
	}
	,
	set_get_extra:function(extra)
	{
		this.get_extra	= extra;
	}
	,
	obtener_info:function()
	{
		this.mostrar_cargando();
		eval("new Ajax.Request('" + this.json_inicial.url_html + "ajax/json_datagrid.php?" + this.get_extra + "',{postBody:'accion=todo_objeto&" + this.post_standard() + "',onSuccess: function(t) {" + this.json_inicial.instancia + ".iniciar(t.responseText);} })");
	}
	,
	iniciar:function(json)
	{
		if(typeof(json) == 'object')
		{
			this.json_inicial = json;
		}
		else
		{
			eval("this.json_inicial = " + json);
		}
		
		/********* VALIDA INSTANCIA ***********/
		eval("if(typeof(" + this.json_inicial.instancia + ") != 'object'){alert('SYSTEM_Datagrid->La instancia(" + this.json_inicial.instancia + ") parece no estar precente favor de verificarlo.')}");
		/********* VALIDA INSTANCIA ***********/
		
		if(!this.json_inicial.id || this.json_inicial.id=='')
		{
			this.crear_despues_de_iniciar = 1;
			return false;
		}
		this.cargando			= '<div id="global_loading" style="position:absolute;z-index:3;top:50%;left:50%;margin-left:-8px;margin-top:-8px;"><img src="' + this.json_inicial.url_html + 'imagenes/varios/loading.gif" /></div><div id="cuadro_transparente" class="transparente" style="left:0;top:0px;width:100%;height:600px;position:absolute">Cargando...</div>';
		var un_checkbox			= '<input type="checkbox" class="css_' + this.json_inicial.id + '_datagrid_check" onclick="#{onclick}" name="#{valor}" />';
		var un_td				= '<td class="#{class}" onclick="#{onclick}">#{valor}</td>';
		var un_tr				= '<tr class="#{class}" onclick="#{onclick}">#{valor}</tr>';
		var un_table			= '<table class="#{class}" width="#{width}">#{valor}</table>';
		var un_select			= '<select id="#{id}" name="#{name}" class="#{class}">#{valor}</select>';
		var un_option			= '<option class="#{class}">#{valor}</option>';
		var filtro				= '<div class="fila" >#{combo}<div class="td" id="' + this.json_inicial.id + '_div_campo_#{nombre_campo_buscar}_campo"><input type="text" class="w100px" id="#{nombre_buscar}" name="#{nombre_buscar}" title="Insert the text you wish to search" class="tooltip_js" /></div></div>';
		var un_diseno2			= '<div class="tabla" name="' + this.json_inicial.id + '_datagrid_forma" id="' + this.json_inicial.id + '_datagrid_forma"><div class="fila"><div class="td"><div id="' + this.json_inicial.id + '_filtros2" >&nbsp;</div><div id="' + this.json_inicial.id + '_filtros" >&nbsp;</div></div><div class="td"><input type="button" value="Find" title="Busca dentro de listado" class="tooltip_js" onclick="' + this.json_inicial.instancia + '.buscar()" /><input type="button" value="Show All" title="Muestra todos los resultados" class="tooltip_js" onclick="' + this.json_inicial.instancia + '.ver_todo()" /><input type="reset" title="Clears the search fields" value="Clean" class="tooltip_js" /></div></div></div>'
		+ '<div id="' + this.json_inicial.id + '_contenido">#{valor}</div>'
		+ '<table width="' + this.json_inicial.width + '"><tr><td>#{siguiente_atras}</td><td><img title="Click para agregar un nuevo registro" class="pointer_hand tooltip_js" src="' + this.json_inicial.url_html + 'imagenes/varios/detalle.gif" /></td><td> Listing <strong id="' + this.json_inicial.id + '_registros_inicio">#{inicio}</strong> from <strong id="' + this.json_inicial.id + '_registros_fin">#{fin}</strong> Total  <strong id="' + this.json_inicial.id + '_registros_total">#{total}</strong></td></tr></table>';
		
		var un_diseno			= '<div class="tabla" name="' + this.json_inicial.id + '_datagrid_forma" id="' + this.json_inicial.id + '_datagrid_forma">'+
		'<div class="tabla"><div class="fila"><div class="td">'+
		'<div class="fila"><div class="td" id="' + this.json_inicial.id + '_filtros2">&nbsp;</div></div>'+
		'<div class="fila"><div class="td" id="' + this.json_inicial.id + '_filtros">&nbsp;</div></div>'+
		'<div class="fila"><div class="td" id="' + this.json_inicial.id + '_botones">'+
		'<input type="button" value="Find" title="Search within listings" class="tooltip_js" onclick="' + this.json_inicial.instancia + '.buscar()" />'+
		'<input type="button" value="View All" title="Displays all results" class="tooltip_js" onclick="' + this.json_inicial.instancia + '.ver_todo()" />'+
		'</div></div>'+
		'</div>'+
		'<div class="td" id="' + this.json_inicial.id + '_contenido">#{valor}</div>'+
		'</div></div></div>'+
		'<table width="' + this.json_inicial.width + '"><tr><td>#{siguiente_atras}</td><td><img title="Click to add a new record" class="pointer_hand tooltip_js" src="' + this.json_inicial.url_html + 'imagenes/varios/detalle.gif" /></td><td> Displaying <strong id="' + this.json_inicial.id + '_registros_inicio">#{inicio}</strong> to <strong id="' + this.json_inicial.id + '_registros_fin">#{fin}</strong> Total  <strong id="' + this.json_inicial.id + '_registros_total">#{total}</strong></td></tr></table>';
		
		/*
		<td>Reportes: <img onclick="' + this.json_inicial.instancia + '.reporte_pdf();" class="pointer_hand tooltip_js" title="Crear Reporte PDF" src="' + this.json_inicial.url_html + 'imagenes/varios/pdf.gif" /><img onclick="' + this.json_inicial.instancia + '.reporte_exel();" class="pointer_hand tooltip_js" title="Crear Reporte Exel" src="' + this.json_inicial.url_html + 'imagenes/varios/xls-icon.gif" /></td>
		*/
		
		this.siguiente_atras	= '<img class="pointer_hand tooltip_js" src="' + this.json_inicial.url_html + 'imagenes/forward20.gif" alt="Next" title="Next" onclick="' + this.json_inicial.instancia + '.siguiente()" />'+'<img class="pointer_hand tooltip_js" src="' + this.json_inicial.url_html + 'imagenes/back20.gif" alt="Previous" title="Previous" onclick="' + this.json_inicial.instancia + '.anterior()" />';

		this.un_checkbox		= new Template(un_checkbox);
		this.un_td				= new Template(un_td);
		this.un_tr				= new Template(un_tr);
		this.un_table			= new Template(un_table);
		this.un_select			= new Template(un_select);
		this.un_option			= new Template(un_option);
		this.un_diseno			= new Template(un_diseno);
		this.un_filtro			= new Template(filtro);
		this.busqueda_actual_campo 		= '';
		this.busqueda_actual_contenido	= '';

		this.maximos_resultados	= 60;
		if(this.crear_despues_de_iniciar)
		{
			this.crear();
			this.ocultar_cargando();
		}

	}
	,
	crear_filtros:function()
	{
		for (crear_filtros_i =0; crear_filtros_i < this.json_inicial.filtros.length; crear_filtros_i++)
		{
			if(crear_filtros_i>=0 && crear_filtros_i<=100 )
			{
				this.nuevo_filtro(this.json_inicial.filtros[crear_filtros_i],'');
			}
		}
	}
	,
	nuevo_filtro:function(nombre_campo_buscar, combo)
	{
		var nuevo_filtro_dato					= new Object();

		if(!this.filtros_array)
		{
			this.filtros_array	= new Array();
		}

		if(nombre_campo_buscar)
		{
			nuevo_filtro_dato.nombre_buscar		= nombre_campo_buscar;
		}
		else
		{
			nuevo_filtro_dato.nombre_buscar		= this.json_inicial.id + '_datagrid_campo';
		}

		if(!combo && nombre_campo_buscar)
		{
			/*eval("var temp_input	= new Element.update(new Element('input', {value:'" + nombre_campo_buscar + "',type:'hidden',id: 'fill_campo_" + this.fill_campos_contador + "',name: 'fill_campo_" + this.fill_campos_contador + "'}));");*/
			nuevo_filtro_dato.combo					= nombre_campo_buscar + ': ' + '<input value="' + nombre_campo_buscar + '" type="hidden" id="' + this.json_inicial.id + '_fill_campo_' + this.fill_campos_contador + '" name="' + this.json_inicial.id + '_fill_campo_' + this.fill_campos_contador + '" />';
			nuevo_filtro_dato.nombre_buscar			= this.json_inicial.id + '_fill_busqueda_' + this.fill_campos_contador;
			nuevo_filtro_dato.nombre_campo_buscar	= nombre_campo_buscar;
			this.fill_campos_contador++;
		}
		else if(combo)
		{
			nuevo_filtro_dato.combo		= combo;
			new Insertion.Top($(this.json_inicial.id + '_filtros'), this.un_filtro.evaluate(nuevo_filtro_dato) );
			return true;
		}
		else if(!combo)
		{
			var temporal				= new Array();
			temporal['valor']			= this.combo_options_temporal;
			temporal['id'] 				= this.json_inicial.id + '_fill_campo_' + this.fill_campos_contador;
			temporal['name']			= this.json_inicial.id + '_fill_campo_' + this.fill_campos_contador;
			nuevo_filtro_dato.combo		= this.un_select.evaluate(temporal);
			this.fill_campos_contador++;
		}

		new Insertion.Top($(this.json_inicial.id + '_filtros2'), this.un_filtro.evaluate(nuevo_filtro_dato) + '<br />');
	}
	,
	eval_funcion_crear:function()
	{
		eval(this.funcion_crear);
	}
	,
	crear:function()
	{
		if(this.no_se_encontraron_resultados==1)
		{
			var mensaje='No se encontraron resultados';
			this.ocultar_cargando();
			if($(this.json_inicial.destino))
			{
				if($(this.json_inicial.id + '_contenido'))
				{
					$(this.json_inicial.id + '_contenido').innerHTML	= mensaje;
				}
				else
				{
					$(this.json_inicial.destino).innerHTML				= mensaje;
				}
			}
			this.mostrar_numeros();
			return mensaje;
		}
		else
		{
			/*Crea titulos*/
			if(!this.json_inicial.acomodo)
			{
				this.json_inicial.acomodo = 'DESC';
			}
			if(!this.json_inicial.configfile)
			{
				this.json_inicial.configfile = '';			
			}
			if(!this.json_inicial.acomodocampo)
			{
				this.json_inicial.acomodocampo = '';
			}
			this.json_inicial.bandera_chek		= false;
			var html_titulos		= '';
			var html_options		= '';
			var dato= new Array();
			dato['class']	= 'datagrid_titulo_campo';
			dato['valor']	= '<img class="pointer_hand tooltip_js" src="' + this.json_inicial.url_html + '/imagenes/Palomita.gif" onclick="' + this.json_inicial.instancia + '.seleccionar_check();" title="Select All" />';
			html_titulos	+= this.un_td.evaluate(dato);
			
			for (i =0; i < this.json_inicial.busquedas.length; i++)
			{
				if(i>=0 && i<=this.maximos_resultados )
				{
					dato['valor']	= this.json_inicial.busquedas[i];
					dato['class']	= '';
					html_options	+= this.un_option.evaluate(dato);
				}
			}
			
			for (i =0; i < this.json_inicial.titulos.length; i++)
			{
				if(i>=0 && i<=this.maximos_resultados )
				{
					dato['class']	= 'datagrid_titulo_campo pointer_hand';
					dato['valor']	= this.json_inicial.titulos[i];
					dato['onclick']	= this.json_inicial.instancia +'.ordenar(\'' + dato['valor'] + '\')';
					if(this.json_inicial.acomodocampo==dato['valor'])
					{
						if(this.json_inicial.acomodo == 'DESC')
						{
							var img_abajo	= '<img class="pointer_hand tooltip_js" src="' + this.json_inicial.url_html + 'imagenes/down20.gif" alt="Decendente" title="Decendente" />';
							dato['valor']	= img_abajo + this.json_inicial.titulos[i];
						}
						else
						{
							var img_arriva	= '<img class="pointer_hand tooltip_js" src="' + this.json_inicial.url_html + 'imagenes/up20.gif" alt="Acendente" title="Acendente" />';
							dato['valor']	= img_arriva + this.json_inicial.titulos[i];
						}
					}
					html_titulos	+= this.un_td.evaluate(dato);
				}
			}
			var temporal = new Array();
			this.combo_options_temporal	= html_options;
			temporal['valor']	= html_options;
			temporal['id'] 		= this.json_inicial.id + '_datagrid_buscar';
			temporal['name']	= this.json_inicial.id + '_datagrid_buscar';
			var html_combo	= this.un_select.evaluate(temporal);
			/*Crea titulos*/
			
			/*Crea campos*/
			var html_campos			= '';
			var html_campos_filas	= '';
			var dato= new Array();
			dato['class']			= 'datagrid_titulo_campo';
			for (i =0; i < this.json_inicial.datos.length; i++)
			{
				if(i>=0 && i<=this.maximos_resultados )
				{
					html_campos	= '';
					for (x =0; x < this.json_inicial.datos[i].length; x++)
					{
						if(x>=0 && x<=99)
						{
							dato['class']	= 'datagrid_td_campo';
							if(typeof(this.json_inicial.datos[i][x])=="object")
							{
								dato['valor']	= this.crea_objeto(this.json_inicial.datos[i][x]);
							}
							else
							{
								dato['valor']	= this.json_inicial.datos[i][x];
							}
							if(x==0)
							{
								dato['valor']	=  this.un_checkbox.evaluate(dato['valor']);
							}
							html_campos		+= this.un_td.evaluate(dato);
						}
					}
				}
				if(i%2)
				{
					var par_inpar	= '1';
				}
				else
				{
					var par_inpar	= '2';
				}
				temporal			= new Array();
				temporal['valor']	= html_campos;
				temporal['class']	= 'css_un_resultado_datagrid' + par_inpar;
				html_campos_filas		+= this.un_tr.evaluate(temporal);
			}
			/*Crea campos*/
			/*Crea diseño*/
			temporal					= new Array();
			temporal['valor']			= html_titulos + html_campos_filas;
			temporal['class']			= 'css_datagrid_una_tabla';
			temporal['width']			= this.json_inicial.width;
			var html_tabla				= this.un_table.evaluate(temporal);
			temporal					= new Array();
			temporal['valor']			= html_tabla;
			temporal['combo']			= html_combo;
			this.combo_temporal			= html_combo;
			temporal['siguiente_atras']	= this.siguiente_atras;
			var html_campos_filas		= this.un_diseno.evaluate(temporal);
			/*Crea diseño*/
			/*Aplica y regresa tabla*/
			if($(this.json_inicial.destino))
			{
				if($(this.json_inicial.id + '_contenido'))
				{
					$(this.json_inicial.id + '_contenido').innerHTML	= html_tabla;
				}
				else
				{
					$(this.json_inicial.destino).innerHTML	= html_campos_filas;
					this.nuevo_filtro('', html_combo);
					this.crear_filtros();
					this.eval_funcion_crear();
				}
			}
			this.mostrar_numeros();
			/*Aplica y regresa tabla*/
		}
	}
	,
	crea_objeto:function(objeto)
	{
		var objeto_html	= new system_object( JSON.stringify(objeto));
		return objeto_html.crear_html();
	}
	,
	ordenar:function(campo)
	{
		if(this.json_inicial.acomodocampo == campo && this.json_inicial.acomodo != 'ASC')
		{
			this.json_inicial.acomodo = 'ASC';
		}
		else
		{
			this.json_inicial.acomodo = 'DESC';
		}
		this.json_inicial.acomodocampo	= campo;
		this.cambio_de_datos();
	}
	,
	set_function_crear:function(funcion)
	{
		this.funcion_crear	= funcion;
	}
	,
	set_titulos:function(json)
	{
		eval("this.json_inicial.titulos = " + json);
	}
	,
	set_datos:function(json)
	{
		if(json=='{no array}' || json=='0' || json=='null' || !json)
		{
			this.no_se_encontraron_resultados	= 1;
		}
		else
		{
//			eval("this.json_inicial.datos = " + json);
//			this.json_inicial.datos = JSON.parse( json,'');
			this.json_inicial.datos = json.evalJSON();
			this.no_se_encontraron_resultados	= 0;
		}
		this.ocultar_cargando();
	}
	,
	post_standard:function()
	{
		var filtros_post	= '';
		for (busquedas_de_filtros_i =0; busquedas_de_filtros_i<this.busqueda_filtros.length; busquedas_de_filtros_i++)
		{
			if(this.busqueda_filtros[busquedas_de_filtros_i])
			{
				filtros_post += (filtros_post ? '&' : '') + 'fill_campo_' + busquedas_de_filtros_i + '=' + this.busqueda_filtros[busquedas_de_filtros_i]['campo'] + '&fill_busqueda_' + busquedas_de_filtros_i + '=' + this.busqueda_filtros[busquedas_de_filtros_i]['busqueda'];
			}
		}
		return "configfile=" + this.json_inicial.configfile + "&acomodo=" + this.json_inicial.acomodo + "&acomodocampo=" + this.json_inicial.acomodocampo + "&" + this.post_extra + "&limit_inicio=" + this.json_inicial.limit_inicio + "&buscarcampo=" + this.busqueda_actual_campo + "&buscar=" + this.busqueda_actual_contenido + '&' + filtros_post;
	}
	,
	ver_todo:function()
	{
		this.mostrar_cargando();
		this.busqueda_actual_campo 		= '';
		this.busqueda_actual_contenido	= '';
		this.json_inicial.limit_inicio	= 0;
		eval("new Ajax.Request('" + this.json_inicial.url_html + "ajax/json_datagrid.php?" + this.get_extra + "',{postBody:'" + this.post_standard() + "',onSuccess: function(t) {" + this.json_inicial.instancia + ".set_datos(t.responseText);" + this.json_inicial.instancia + ".crear();} });");
	}
	,
	cambio_de_datos:function()
	{
		this.mostrar_cargando();
		eval("new Ajax.Request('" + this.json_inicial.url_html + "ajax/json_datagrid.php?" + this.get_extra + "',{postBody:'" + this.post_standard() + "',onSuccess: function(t) {" + this.json_inicial.instancia + ".set_datos(t.responseText);" + this.json_inicial.instancia + ".crear();} });");
	}
	,
	buscar:function()
	{
		this.json_inicial.limit_inicio	= 0;
		for(var x_contador=1; x_contador<this.fill_campos_contador; x_contador++)
		{
			this.busqueda_filtros[x_contador]				= new Array();
			this.busqueda_filtros[x_contador]['campo']		= $F(this.json_inicial.id + '_fill_campo_' + x_contador);
			this.busqueda_filtros[x_contador]['busqueda']	= $F(this.json_inicial.id +'_fill_busqueda_' + x_contador);
		}
		
		this.busqueda_actual_campo 		= $F(this.json_inicial.id + '_datagrid_buscar');
		this.busqueda_actual_contenido	= $F(this.json_inicial.id + '_datagrid_campo');
		this.mostrar_cargando();
		eval("new Ajax.Request('" + this.json_inicial.url_html + "ajax/json_datagrid.php?" + this.get_extra + "',{postBody:'" + this.post_standard() + "',onSuccess: function(t) {" + this.json_inicial.instancia + ".set_datos(t.responseText);" + this.json_inicial.instancia + ".crear();} });");
	}
	,
	mostrar_cargando:function()
	{
		if(!$('global_loading'))
		{
			new Insertion.Bottom($('body'), this.cargando);
		}
		$('cuadro_transparente').setStyle({
		  Height: $('body').getHeight()
		});
		$('global_loading').show();
		$('cuadro_transparente').show();
	}
	,
	siguiente:function()
	{
		if(( parseInt(this.json_inicial.limit_inicio)+parseInt(this.json_inicial.limit_fin))<=this.json_inicial.total_registros)
		{
			this.json_inicial.limit_inicio=(parseInt(this.json_inicial.limit_inicio)+parseInt(this.json_inicial.limit_fin) );
		}
		this.cambio_de_datos();
		this.mostrar_numeros();
	}
	,
	anterior:function()
	{
		if((parseInt(this.json_inicial.limit_inicio)-parseInt(this.json_inicial.limit_fin) )>=0)
		{
			this.json_inicial.limit_inicio=(parseInt(this.json_inicial.limit_inicio)-parseInt(this.json_inicial.limit_fin) );
		}
		this.cambio_de_datos();
		this.mostrar_numeros();
	}
	,
	mostrar_numeros:function ()
	{
		$(this.json_inicial.id + '_registros_total').innerHTML	= this.json_inicial.total_registros + ' Records';
		$(this.json_inicial.id + '_registros_inicio').innerHTML	= parseInt(this.json_inicial.limit_inicio)+1;
		$(this.json_inicial.id + '_registros_fin').innerHTML	= parseInt(this.json_inicial.limit_fin)+parseInt(this.json_inicial.limit_inicio);
	}
	,
	ocultar_cargando:function()
	{
		$('global_loading').hide();
		$('cuadro_transparente').hide();
	}
	,
	limpiar:function()
	{
		
	}
	,
	reporte_exel:function(json)
	{
		
	}
	,
	reporte_pdf:function(json)
	{
		
	}
	,
	seleccionar_check:function()
	{
		if(!this.json_inicial)
		{
			return false;
		}
		if(this.json_inicial.bandera_chek==false)
		{
			this.json_inicial.bandera_chek=true;
		}
		else
		{
			this.json_inicial.bandera_chek=false;
		}
		eval("$$('input.css_"+this.json_inicial.id +"_datagrid_check').each( function(input) {input.checked = " + this.json_inicial.bandera_chek + ";});");
	}
};