// esta variable afecta el retardo de los efectos visuales.
var tiempoEfectos = 0.25;

String.prototype.trim = function() {
	return this.replace('/^\s+|\s+$/g',"");
}
String.prototype.pad = function(l, s, t){
	return s || (s = " "), (l -= this.length) > 0 ? (s = new Array(Math.ceil(l / s.length)
		+ 1).join(s)).substr(0, t = !t ? l : t == 1 ? 0 : Math.ceil(l / 2))
		+ this + s.substr(0, l - t) : this;
}
/**
 *
 */
function zSubmit(f){
	if ($('usoBotones').getValue()=="0"){
		alert("Por favor, utilice los botones de comando para efectuar la acciÃ³n.");
		return false;
	}
	return true;
}
function zAtras(){
	history.back(1);
}
function zGet(m,a,otros){
	otros = (otros == null ? "" : otros);
	document.location = "?m="+m+"&a="+a+"&"+otros;
}
function zValidarRequerido(id,label){
	obj = document.getElementById(id);
	ok  = true;
	if (obj.value.trim().length == 0){
		alert('Debe proporcionar un valor para '+label);
		obj.focus();
		ok = false;
	}
	return ok;
}
function zSetAccion(m,a){
	$('m').setValue(m);
	$('a').setValue(a);
}
function zLimpiarAccion(){
	$('m').setValue("");
	$('a').setValue("");
}
function zPost(m,a,mensaje){
	if (mensaje != null){
		if (!confirm(mensaje)){
			return;
		}
	}
	$('m').setValue(m);
	$('a').setValue(a);
	$('usoBotones').setValue("1");
	$('form').submit();
}
function borrar(url){
	zConfirm("Confirma que desea eliminar el elemento?",url);
}
function zConfirm(message,url){
	if (!confirm(message)){
		return false;
	}
	document.location = url;
}
function isdefined(variable){
	return (typeof(window[variable]) == "undefined")?  false: true;
}
function alternar(idObj){
	obj = document.getElementById(idObj);
	obj.style.display = obj.style.display=="none" ? "" : "none";
	return obj.style.display;
}
function zOcultar(idObj){
	$(idObj).hide();
}
function zMostrar(idObj){
	$(idObj).show();
}
function mover(desde,hasta){
	cmbDesde = document.getElementById(desde);
	cmbHasta = document.getElementById(hasta);
	if (cmbDesde.length==0){
		alert("No hay elementos que mover.");
		return false;
	}
	if (cmbDesde.selectedIndex==-1){
		alert("Debe marcar un elemento para mover.");
		return false;
	}
	for (i = 0; i < cmbDesde.length; i++){
		if (cmbDesde.options[i].selected){
			x = document.createElement("option");
			x.value = cmbDesde.options[i].value;
			x.text  = cmbDesde.options[i].text;
			cmbHasta.add(x);
		}
	}
	for (i = cmbDesde.length-1; i >= 0; i--){
		if (cmbDesde.options[i].selected){
			cmbDesde.remove(i);
		}
	}
}
function alternarIcono(idIcono,idObj,imgMas,imgMenos){
	icono = document.getElementById(idIcono);
	obj   = document.getElementById(idObj);
	icono.src = obj.style.display=="none" ? imgMas : imgMenos;
}
function stringValoresSelect(desde){
	cmbDesde = document.getElementById(desde);
	s = "";
	for (i=0;i<cmbDesde.length;i++){
		s = (s==""?"":s+",")+cmbDesde.options[i].value;
	}
	return s;
}
function vacio(id){
	id = document.getElementById(id);
	if (id.value==""){
		id.focus();
	}
}
function zFiltrar(m,a){
	document.form.usarFiltro.value = "1";
	document.form.usoBotones.value = "1";
	zPost(m,a);
}
function zDespachar(m,a){
	zPost(m,a);
}

/**
 * Emite una petición GET vía Ajax y con el HTML resultado de esa petición
 * actualiza el contenido del elemento que se indique (generalmente
 * un DIV o un FRAMESET o lo que gustes).
 *
 * @param string containerId El ID del contenedor que se va a actualizar.
 * @param strnig m           El módulo que contiene la acción que se solicita.
 * @param string a           La acción que se solicita.
 * @param string extras      Cualquier valor que se desee pasar a la petición ("x=1&y=2")
 * @param string idScroll    El ID del elemento HTML al que se debe ir con scroll luego de la actualización (puede no funcar).
 *
 * Importante:
 * - Si se omite el parámetro extras, se asume $('form').serialize() que son TODOS los valores del form.
 * - Si se especifica el parámetro extras, sólo se envían los valores especificados.
 * - Ver más acerca de Form::serialize y Ajax.Updater en la ayuda de Prototype.
 * - Si el HTML resultante trae JavaScript, debe especificarse como: saludar = function(){alert("Hola");}
 *
 */
function zGetConAjax(containerId,m,a,extras,idScroll){
	if (extras == null){
		extras = $('form').serialize();
	}
	new Ajax.Updater(containerId,"?",{
		parameters: extras+"&m="+m+"&a="+a+"&conAjax=true",
		evalScripts: true,
		method: "get",
		encoding: "iso-8859-1",
		contentType: "application/x-www-form-urlencoded; charset=iso-8859-1",
		onComplete: function(){
			new Effect.Highlight($(containerId),{duration: tiempoEfectos, queue: 'end'});
			if (idScroll!=null) new Element.scrollTo($(idScroll));
		}});
}

/**
 * Emite una petición POST vía Ajax y con el HTML resultado de esa petición
 * actualiza el contenido del elemento que se indique (generalmente
 * un DIV o un FRAMESET o lo que gustes).
 *
 * @param string containerId El ID del contenedor que se va a actualizar.
 * @param strnig m           El módulo que contiene la acción que se solicita.
 * @param string a           La acción que se solicita.
 * @param string extras      Cualquier valor que se desee pasar a la petición ("x=1&y=2")
 * @param string idScroll    El ID del elemento HTML al que se debe ir con scroll luego de la actualización (puede no funcar).
 *
 * Importante:
 * - Si se omite el parámetro extras, se asume $('form').serialize() que son TODOS los valores del form.
 * - Si se especifica el parámetro extras, sólo se envían los valores especificados.
 * - Ver más acerca de Form::serialize y Ajax.Updater en la ayuda de Prototype.
 * - Si el HTML resultante trae JavaScript, debe especificarse como: saludar = function(){alert("Hola");}
 *
 */
function zPostConAjax(containerId,m,a,extras,idScroll){
	if (extras == null){
		extras = $('form').serialize();
	}
	new Ajax.Updater(containerId,"?",{
		parameters: extras+"&m="+m+"&a="+a+"&conAjax=true",
		evalScripts: true,
		method: "post",
		encoding: "iso-8859-1",
		contentType: "application/x-www-form-urlencoded; charset=iso-8859-1",
		onComplete: function(){
			new Effect.Highlight($(containerId),{duration: tiempoEfectos, queue: 'end'});
			if (idScroll!=null) new Element.scrollTo($(idScroll));
		}});
}

function zRequerir(id){
	if ($(id).value.blank()){
		$(id).focus();
		alert("Debe proporcionar un valor para "+zGetLabelFor(id));
		return false;
	}
	return true;
}

function zGetLabelFor(id){
	var labels = document.getElementById(id).parentNode.getElementsByTagName('LABEL');
	for ( i=0; i<labels.length; i++){
		if (labels[i].htmlFor == id){
			return labels[i].innerHTML;
		}
	}
	return "";
}

/**
 * Devuelve el número de la tecla presionada.
 */
function getKeynum(e){
	var keynum;
	if(window.event) // IE
	{
		keynum = e.keyCode;
	}
	else if(e.which) // Netscape/Firefox/Opera
	{
		keynum = e.which;
	}
	return keynum;
}

/**
 * Devuelve el caracter de la tecla presionada.
 */
function getKeyChar(e){
	return String.fromCharCode(getKeynum(e));
}

/**
 * Despliega un elemento (generalmente DIV) con un efecto BlindDown.
 *
 * @param string divId          El ID del elemento a desplegar.
 * @param bool   scrollHastaAhi Si es TRUE hace scroll hasta ubicar el DIV en pantalla.
 */
function zfxDesplegar(divId,scrollHastaAhi){
	obj = $(divId);
	if (!obj.visible()){
		new Effect.BlindDown(obj,{duration: tiempoEfectos, queue: 'end'});
	}
	if (scrollHastaAhi!=null) new Element.scrollTo(obj);
}

/**
 * Cotnrae un elemento (generalmente DIV) con un efecto BlindUp.
 *
 * @param string divId El ID del DIV a contraer.
 * @param bool scrollHastaAhi Si es TRUE hace scroll hasta ubicar el DIV en pantalla.
 */
function zfxContraer(obj){
	obj = $(obj);
	if (obj.visible()){
		new Effect.BlindUp(obj,{duration: tiempoEfectos, queue: 'end'});
	}
}

/**
 * Despliega o contraer un elemento (generalmente DIV) con efecto BlindDown/BlindUp.
 * Si está oculto lo despliega y si está desplegado lo contrae.
 *
 * @param string divId El ID del DIV a alternar.
 * @param bool scrollHastaAhi Si es TRUE hace scroll hasta ubicar el DIV en pantalla.
 */
function zfxAlternar(obj,scrollHastaAhi){
	obj = $(obj);
	if (obj.visible()){
		zfxContraer(obj);
	} else {
		zfxDesplegar(obj,scrollHastaAhi);
	}
}
zPintarFilas=function(tabla){var filas = tabla.rows;var i=1;for(j=1;j<filas.length;j++){if(i==1){filas[j].addClassName("impar");i=0;}else{filas[j].addClassName("par");i=1;}}}
zAlternarFila=function(id){if($(id).hasClassName("seleccionFila")){$(id).removeClassName('seleccionFila');}else{$(id).addClassName("seleccionFila");}}
combo_change=function(obj){var id=$(obj).id.substr(0,$(obj).id.length-2)+"nombre";if($(obj).value==-1){$(id).show();$(id).focus();}else{$(id).hide();}}
comboFecha_change=function(id){$(id).value=$(id+'Dia').value.pad(2,"0",2)+"/"+$(id+'Mes').value.pad(2,"0",2)+"/"+$(id+"Anio").value;}
clipCopy = function(d){clipboardData.setData('text',d);}