function BusqPag(cls, mth, tbl, cols, key, tits)
{
	this.cls = cls; //clase ajax
	this.mth = mth; //metodo ajax
	this.tbl = tbl; //tabla SListaJS
	this.cols = cols; //columnas del form.
	this.tits = tits; //titulos
	this.key = key; //indice de la columna clave
	this.pag = 1; //pag. actual
	this.pagTot = 0; //total de paginas
	this.arrBusq = null; //arreglo de busqueda
	this.fila = null; //fila seleccionada
	this.onAceptar = null; //funcion ejecutada luego de aceptar
	this.onCancelar = null; //funcion ejecutada luego de cancelar
	this.onBuscar = null; //funcion ejecutada luego de buscar
	this.onPreBuscar = null; //funcion ejecutada antes de buscar
	this.onSelect = null; //funcion ejecutada al seleccionar un elemento
	this.botonSig = null; //boton siguiente pagina
	this.botonAnt = null; //boton anterior pagina
	this.botonPri = null; //boton primer pagina
	this.botonUlt = null; //boton ultima pagina
	this.botonBus = null; //boton buscar
	this.botonAce = null; //boton aceptar
	this.botonCan = null; //boton cancelar
	this.arrRes = null; //arreglo del resultado
	this.__busy_flag = false; //Am I busy?
	
	var instance = this; //puntero a esta instancia
	
	this.buscar = function(arr) {
		instance.arrBusq = arr;
		instance.pag = 1;
		instance.pagTot = 0;
		instance.__buscar();
	}
	
	this.__buscar = function() {
	//busca resultados
		if (instance.tbl) instance.tbl.del(1);
		if (instance.__busy_flag) return false;
		if (instance.onPreBuscar != null) instance.onPreBuscar();
		instance.arrBusq["__pag"] = instance.pag;
		instance.__busy_flag = true;
		var sarr = Util.escape(instance.arrBusq);
		Util.unescape(instance.arrBusq);
		instance.actBotones(false);
		HTML_AJAX.defaultEncoding = "null";
		HTML_AJAX.call(instance.cls, instance.mth, instance.cf_buscar, sarr);
		HTML_AJAX.defaultEncoding = "JSON";
	}
	
	this.cf_buscar = function(res) {
	//callback de buscar
		instance.pagTot = res.__pag_tot;
		instance.autoBotones();
		instance.arrRes = res.__cont;
		if (Number(res.__reg_x_pag) > 0) {
			if (instance.cols) {
				var arr_ins, arr_tit;
				for (var i = 0; i < res.__reg_x_pag; i++) {
					arr_ins = new Array();
					arr_tit = new Array();
					for (var j = 0; j < instance.cols.length; j++) {
						arr_ins[j] = unescape(res.__cont[i][instance.cols[j]]);
						if (instance.tits) {
							arr_tit[j] = unescape(res.__cont[i][instance.tits[j]])
						}
					}
					if (instance.tits) {
						instance.tbl.insRow(arr_ins, false, false, arr_tit, "1px solid #CCCCCC");
					} else {
						instance.tbl.insRow(arr_ins);
					}
				}
			}
		}
		instance.__busy_flag = false;
		if (instance.onBuscar != null) {
			instance.onBuscar(res);
		}
	}
	
	this.actBoton = function(b, v) {
	//activa / desactiva un boton
		if (b != null) {
			b.style.visibility = v ? "visible": "hidden";
		}
	}
	
	this.actBotones = function(v) {
	//activa / desactiva botones
		this.actBoton(this.botonSig, v);
		this.actBoton(this.botonAnt, v);
		this.actBoton(this.botonPri, v);
		this.actBoton(this.botonUlt, v);
		this.actBoton(this.botonBus, v);
		this.actBoton(this.botonAce, v);
		this.actBoton(this.botonCan, v);
	}
	
	this.autoBotones = function() {
	//activa o desactiva automaticamente los botones de busqueda segun los resultados
		instance.actBoton(this.botonAnt, (instance.pag > 1));
		instance.actBoton(this.botonPri, (instance.pag > 1));
		instance.actBoton(this.botonSig, (instance.pag < instance.pagTot));
		instance.actBoton(this.botonUlt, (instance.pag < instance.pagTot));
	}
	
	this.setTabla = function(idt) {
	//setea la tabla ListaJS
		instance.tbl = new SListaJS(idt, instance.key, instance.selectElm, 1);
	}
	
	this.sig = function() {
	//ir a la sig. pag
		if ((instance.pagTot > 0) && (instance.pag < instance.pagTot)) {
			instance.pag++;
		}
		instance.__buscar(instance.arrBusq);
	}
	this.ant = function() {
	//ir a la pag, ant
		if ((instance.pagTot > 0) && (instance.pag > 1)) {
			instance.pag--;
		}
		instance.__buscar(instance.arrBusq);
	}
	this.pri = function() {
	//ir a la 1ra pag
		if ((instance.pagTot > 0) && (instance.pag > 1)) {
			instance.pag = 1;
		}
		instance.__buscar(instance.arrBusq);
	}
	this.ult = function() {
	//ir a la ult
		if ((instance.pagTot > 0) && (instance.pag < instance.pagTot)) {
			instance.pag = instance.pagTot;
		}
		instance.__buscar(instance.arrBusq);
	}
	
	this.selectElm = function(tr) {
	//seleccionar un elemento
		instance.fila = tr;
		if (instance.onSelect != null) {
			instance.onSelect(tr);
		}
	}
	
	this.setBotones = function() {
	//coloca eventos a los botones
		if (instance.botonSig != null) {
			instance.botonSig.style.visibility = "hidden";
			instance.botonSig.onclick = function() {
				instance.sig();
			}
		}
		if (instance.botonAnt != null) {
			instance.botonAnt.style.visibility = "hidden";
			instance.botonAnt.onclick = function() {
				instance.ant();
			}
		}
		if (instance.botonPri != null) {
			instance.botonPri.style.visibility = "hidden";
			instance.botonPri.onclick = function() {
				instance.pri();
			}
		}
		if (instance.botonUlt != null) {
			instance.botonUlt.style.visibility = "hidden";
			instance.botonUlt.onclick = function() {
				instance.ult();
			}
		}
	}
	
	this.pause = function() {
		instance.tbl.detenido = true;
	}
	
	this.resume = function() {
		instance.tbl.detenido = false;
	}
}