/**
* autor : Enrique Meléndez Estrada
* version : 1.0 ( 6/Octubre/2009 )
* OPTIONAL 0 : No tablename selection (dependency: ITAjax_search_UI.asp)
* OPTIONAL 1 : No add field(column) to filter/ no remove empty fields, just show/hide all fields to be filtered
* OPTIONAL 2 : No fields (columns) to be filtered, just input search for all.
* OPTIONAL 3 : No "Exportar a..."
*/

function kike_search_ajax_data(){
	var _data = [];
//	var t = $('#kike-search-tablename').val();        t.length && _data.push("t="+ encodeURIComponent(t));
//	var d = $('#kike-search-dbname').val();           d.length && _data.push("d="+ d);
	var x = $('#kike-search-html').val();             x.length && _data.push("x="+ x);
	var a = $('input[name=search-all-fields]').val(); a.length && _data.push("a="+ encodeURIComponent(escape(a))); // tilde...
	var o = $('#kike-search-fields').val();           o.length && _data.push("o="+ encodeURIComponent(o));
	var s = $('#kike-grid-pageSize').val();           !!s && !isNaN(parseInt(s)) && _data.push("s="+ parseInt(s));
	var i = $('#kike-grid-absolutePage').val();       !!i && !isNaN(parseInt(i)) && _data.push("i="+ parseInt(i));
	// alert(_data.join("\n")+ "\n"+$('#kike-search-action').val()+ "\n"+$('#kike-search-target').val());
	$.ajax({
		url:	$('#kike-search-action').val() || "ITAjax_search.asp",
		type:	"POST",
		data:	 _data.join("&"),
		dataType:"json", //"html",
		success: function(j) {
			// alert(decodeURIComponent(j.html));
			var _timeStart = new Date().getTime();
			for (var i in j){
				switch(i){
					case "html":     break;
					case "recordCount":	$('#kike-grid-'+i).text(j[i]); break;
					default:			$('#kike-grid-'+i).val(j[i]); break; 
				}
			};
			$($('#kike-search-target').val()).replaceWith(decodeURIComponent(j.html));
			kike_grid_navigation();
			$('#kike-grid-timeClient').val('timeClient: '+ (new Date().getTime() - _timeStart));
		}
	});
};

function kike_grid_navigation(){
	// function para inicializar la navegación
	var s = $('#kike-grid-pageSize').val() * 1,
		p = $('#kike-grid-pageCount').val() * 1,
		i = $('#kike-grid-absolutePage').val() * 1;
		r = $('#kike-grid-recordCount').text() * 1;
	$('div.kike-grid-navigation')[ p > 1 ? 'show':'hide']();
	$('#kike-grid-moveFirst, #kike-grid-movePrev').each(function(){ this.style.visibility = (i > 1 ? '':'hidden'); });
	$('#kike-grid-moveNext, #kike-grid-moveLast').each(function(){  this.style.visibility = (i < p ? '':'hidden'); });
	// alert('pageSize ='+s+'\npageCount ='+p+'\nabsolutePage ='+i+'\nrecordCount ='+r);
	for (var o = [], j = 0; j < p ; o[j++] = '<option value="'+j+'">'+ (s*j-s+1) +' a '+ (j===p ? r : s*j) +'</option>'){};
	$('#kike-grid-absolutePage').html(o.join('')).val(i);
};

$(function() {
	//-- BEGIN OPTIONAL 2: ocultar busqueda avanzada...
/*	var _$ks = $('div.kike-search');
	_$ks.length && _$ks.css({visibility:'hidden', position: 'absolute'});
	_$ks.length && $('#kike-search-advanced').toggle( 
		function(){ _$ks.css({position: 'static', visibility:'', display:'none'}).slideDown(500);},
		function(){ _$ks.slideUp(500); $form[0].reset(); }
		);
*/	//-- END OPTIONAL 2
	//
	//-- BEGIN OPTIONAL 0: iniciar bbdd...
/*	var _$db = $('#db');
	_$db.length && _$db
		.bind('change',function(){
			$('#kike-search-dbname').val(_$db.val());
			$.ajax({
				url:	"ITAjax_search_UI.asp",
				type:	"POST",
				data:	"d=" + $('#kike-search-dbname').val(),
				dataType:"html",
				success: function(html) {
					$('#tabla')
						.html(html)
						.children('select')
							.bind('change',function(){
								var v = $(this).val();
								$('#kike-search-tablename').val(v);
								kike_search_ajax_form();
							})
							.combobox({classCombobox:'kike-combobox'}) // opcional
							;
				}
			});
		})
		.combobox({classCombobox:'kike-combobox'}) // opcional
		;
*/	//-- END OPTIONAL 0
	// iniciar busqueda avanzada...
	var $form = $('form.kike-search-form')
		.bind('submit', function(){
			var $form = $(this),
				json = $form.serializeArray(),
				e = $form[0].elements;
			var isHead = $('div.kike-search-selectfields').length;
			json = $.map(json, function(f, i){
				if (f.name !== "search-all-fields"){
					if (f.value.length){
						f.c = $(e[f.name]).attr('data-comparison');
						f.d = $(e[f.name]).prev('select').find('option:selected').text();
						f.name = escape(f.name); // important for tildes
						return f;
					} else {
						isHead && $(e[f.name]).parent('div').hide();
					}
				};
				return null;
			});
			$('#kike-search-fields').val(JSON.stringify(json));
			kike_search_ajax_data();
			return false;
		})
		;
	// Navegación : eventos en botones
	var $page = $('#kike-grid-absolutePage').change(function(){								  $form.submit(); return false; });
	$('#kike-grid-pageSize').change(function(){ $page.val( $(this).val()*1 > 0 ? "1" : "" );  $form.submit(); return false;});
	$('#kike-grid-moveFirst').click(function(){ $page.val( 1 );								  $form.submit(); return false; });
	$('#kike-grid-movePrev').click( function(){ $page.val( $page.val()*1 - 1 );				  $form.submit(); return false; });
	$('#kike-grid-moveNext').click( function(){ $page.val( $page.val()*1 + 1 );				  $form.submit(); return false; });
	$('#kike-grid-moveLast').click( function(){ $page.val( $('#kike-grid-pageCount').val()*1);$form.submit(); return false; });
	kike_grid_navigation();

	//-- BEGIN OPTIONAL 3
	// Export to MsOffice / OpenOffice
	typeof $.fn.kike_export === "function" && $form.find('hr').kike_export({insert:'insertAfter'});
	//-- END OPTIONAL 3
	
	// Buttons
	$("input, button").filter(".kike-state-on")
		.bind('click',function(){$(this).toggleClass("kike-state-on");})
		;
			
});

//-- BEGIN OPTIONAL 2
//
/*
function kike_search_ajax_form(){
	if ($('div.kike-search').length === 0) return; // OPTIONAL 2 : No fields to be filtered
	var _data = [];
	var t = $('#kike-search-tablename').val();        t.length && _data.push("t="+ encodeURIComponent(t));
	var d = $('#kike-search-dbname').val();           d.length && _data.push("d="+ d);
	$.ajax({
		url:	"ITAjax_search_UI.asp",
		type:	"POST",
		data:    _data.join("&"),
		dataType:"html",
		success: function(html) {
			kike_search_toogle(html, true);
			$('#kike-search-advanced:not(.kike-state-on)').trigger('click');}
	});
};

function kike_search_toogle(html, reload){
	//-- BEGIN OPTIONAL 1
	$head = $('div.kike-search-selectfields').empty();
	var isHead = $head.length;
	//-- END OPTIONAL 1
	$body = $('div.kike-search-filterfields');
	//$donde[0].style.visibility = "hidden";
	var b2simpler = !reload && $('form.kike-search-enhanced').length;
	if (b2simpler){
		$body.html(html)
	} else {
		$body.html(html)
		kike_search_init($body);
	};
	//-- BEGIN OPTIONAL 1: button show/hide columns filter
	isHead && $('<button type="button" class="kike-button kike-button-show kike-state-on" txt="Ocultar vacíos">Mostrar columnas</button>')
		.prependTo($head)
		.bind('click',function(){
			var $this = $(this);
			var txt = $this.attr("txt");
			$this.attr("txt", $this.text()).text(txt);
			if ($this.toggleClass("kike-state-on").hasClass("kike-state-on")){
				$('div.kike-search-fields :input[data-comparison]').each(function(){ !$(this).val() && $(this).parent().hide()});
			} else {
				$('div.kike-search-fields > div').show();
			};
			return false;
		})
		.trigger('click');
		;
	//-- END OPTIONAL 1
	var option = [], aWidth = [] , maxWidthLabel = 0
	// add button to delete each column filter
	$body
		.find('label')
			.each(function(){ 
				// calculate max width of label
				var w = $(this).outerWidth();
				maxWidthLabel < w && (maxWidthLabel = w);
				//-- BEGIN OPTIONAL 1
				if (isHead){
					$('<span title="quitar este campo/columna" class="kike-icon-hide"></span>')
						.appendTo(this)
						.hover(function(){$(this).closest('div').css('backgroundColor','#ffffdd')}, function(){$(this).closest('div').css('backgroundColor','')})
						.click(function(){$(this).closest('div').fadeOut(200).children(':input').val('');}) //.find('>:input[name]').val();}) //
						;
					var txt = $(this).text();
					option[option.length] = '<option value="'+ txt +'">'+ txt +'</option>'; 
				}
				//-- END OPTIONAL 1
			})
			.width(maxWidthLabel) // set same max width of label for all labels
			.end()
		.find('div.kike-search-fields > div')
			.each(function(){
				var w = 0;
				$(this).children().each(function(){ this.style.visibility !== "hidden" && (w += $(this).outerWidth(true)); });
				aWidth.push(w);
			})
			;
	// calculate width to create varius visual columns
	var wl = aWidth.sort().length; 
	widthMin = aWidth[ wl - Math.min(4 , wl)]
	$body
		.find('div.kike-search-fields')
			.children()
				.css({'min-width' : widthMin+'px'})
				;
	//-- BEGIN OPTIONAL 1: create selection with as much options as columns filter
	isHead && $('<select><option value="" selected="selected">Elige Campo/Columna a filtrar</option>'+ option.sort().join("") +'</select>')
		.prependTo($head)
		.combobox({classCombobox:'kike-combobox'})
		.bind('click', function(){
			var $label = $('label').filter('[for="'+$(this).val()+'"],[for="CODIGO_'+$(this).val()+'"]');
			$label.parent().slideDown(500);
			return false;
			})
		;
	isHead && $head.parent().hide(); //$('div.kike-search').hide();
	//-- END OPTIONAL 1
};

function kike_search_init(){		
	var $input = $('#search')
		.find('form')
			.addClass('kike-search-enhanced')
			.end()
		.find('select')
			.each(function(){ 
				if (this.options.length > 10 )
					$(this).combobox({classCombobox:'kike-combobox'})
			})
			.end()
		.find('input')
		;
	if ($.mask && $.datepicker){
		$.mask.definitions['1']='[01]';
		$.mask.definitions['2']='[12]';
		$.mask.definitions['3']='[0123]';
		$.mask.definitions['4']='[09]';
		$.mask.definitions['5']='[012345]';
		$.mask.definitions['h']='[012]';
		$input
			.filter(".dataset-date")
				.mask("39/19/2499")
				.datepicker({
					dateFormat: 'dd/mm/yy',
					speed:'fast',
					showOn: 'button', 
					showOtherMonths: false, 
					buttonImageOnly: true, 
					buttonImage: '/lib_ITAtools/icons/date.png'
					})
				.attr('title','formato en dd/mm/aaaa')
				.end()
			.filter(".dataset-time")
				.mask("h9:59")
				.attr('title','formato en hh:mm')
				.after('<img src="/lib_ITAtools/icons/clock.png" class="clockpick" title="Seleccionar Hora"></img>')
				.end()
			.filter(".dataset-currency")
				.numeric({allow:"."})
				.bind("focus",function(){
					//
					// x.y0 -> x.y; x.0y  -> x.0y; x.00 -> x
					//
					this.value = this.value || 0;
					var v = parseInt(this.value);
					this.value = v + (v?this.value%v:"");
					this.select();
				})
				.bind("blur", function(){
					//
					// x -> x.00 ; x.y -> x.y0
					//
					var v = this.value.split(".");
					switch (v.length){
						case 1: this.value = v[0]+".00"; break;
						case 2: switch(v[1].length){
									case 0: this.value = v[0]+".00"; break;
									case 1: this.value = v.join(".")+"0"; break;
									default: break;
									};
								break;
						};
				})
				.after('<span class="icon-euro">&euro;</span>')
				.end()
			.filter(".dataset-float")
				.numeric({allow:"."})
				.attr('title','escribe sólo números y . ')
				.end()
			.filter(".dataset-integer")
				.numeric()
				.attr('title','escribe sólo números')
				.end()
				;
		$('img.clockpick')
			.each(function(){
				$(this).clockpick({
					starthour:0, 
					endhour:23, 
					military:true,
					valuefield : $(this).prev().attr("name")
					}, function(){
						// corregir resultados tipo "6:15" por "06:15"
						alert($(this).prev().val());
						var $i = $(this).prev();
						var t = $i.val(); 
						var h = t.split(":")[0];
						if (h.length == 1) $i.val("0"+t);
				})
		});
	};
	//
	// Búsqueda más detallada... (TODO : BETWEENs...)
	//
	$('select.kike-search-select')
		.bind('change.kike-search-comparison',function(){ $(this).next().attr('data-comparison', $(this).val()); })
		.find('option')
			.attr('title',function(){return $(this).val()})
			;
};
*/
//
//-- END OPTIONAL 2
