// =========================================
// Funciones generales
// =========================================

// Variables generales

var extensionesImagen = new Array('png','jpg','gif');
var extensionesTipoArchivo = new Array('arj','avi','bmp','doc','htm','html','iso','mov','mp3','pdf','pps','ppt','psd','rar','tga','tif','txt','wav','xls','zip');

// Sustitución de imágenes

function buscarObjeto(n, d) {
	var p,i,x;

	if(!d)
		d=document;

	if((p=n.indexOf("?")) > 0 && parent.frames.length) {
		d=parent.frames[n.substring(p+1)].document;
		n=n.substring(0,p);
	}

	if(!(x=d[n]) && d.all)
		x=d.all[n];

	for (i=0; !x && i < d.forms.length; i++)
		x=d.forms[i][n];

	for(i=0; !x && d.layers && i < d.layers.length; i++)
		x=buscarObjeto(n,d.layers[i].document);

	if(!x && d.getElementById)
		x=d.getElementById(n);

	return x;
}

function cambiarImagen() {
	var i,j=0,x,a=cambiarImagen.arguments;
	document.MM_sr = new Array;

	for(i=0; i < (a.length); i += 1)
		if ((x=buscarObjeto(a[i]))!=null) {
			document.MM_sr[j++] = x;
			if(!x.oSrc)
				x.oSrc=x.src;
				x.src=a[i+1];
		}
}

function restaurarImagen() {
	var i,x,a=document.MM_sr;

	for(i=0; a && i<a.length && (x=a[i]) && x.oSrc; i++)
		x.src = x.oSrc;
}

// Pre-carga de imágenes

function cargarImagenes() {
	var d=document;

	if(d.images) {
		if(!d.MM_p)
			d.MM_p = new Array();
			var i,j=d.MM_p.length,a=cargarImagenes.arguments;

			for(i=0; i < a.length; i++) {
				if(a[i].indexOf("#") != 0) {
					d.MM_p[j]=new Image;
					d.MM_p[j++].src=a[i];
				}
			}
	}
}

// Abrir ventana

function abrirVentana(origen, nombre, parametros) {
	var vent = window.open(origen, nombre, parametros);
	vent.focus()
}


// =========================================
// Funciones del módulo listado
// =========================================

// Mouse sobre fila

function sobreFila(fila, modo) {
	if(fila.className == 'fila' || fila.className == 'filaSobre') {
		switch(modo) {
			case 'on':
				fila.className = 'filaSobre';
				break;
			case 'off':
				fila.className = 'fila';
				break;
		}
	}
}

// Clic sobre fila

function clicFila(fila) {
	var tipoExplorador;

	if(document.all) {
		tipoExplorador = 0
	} else {
		tipoExplorador = 1
	}

	if(fila.className == 'fila' || fila.className == 'filaSobre') {
		fila.className='filaMarcada';
		fila.childNodes[tipoExplorador].childNodes[0].checked = true;
	} else {
		fila.className = 'fila';
		fila.childNodes[tipoExplorador].childNodes[0].checked = false;
	}
}

// Tildar checkboxes

function seleccionar(campo) {
	if(campo.length == null) {
		if(campo.checked == false) {
			campo.checked = true;
			campo.parentNode.parentNode.className = 'filaMarcada';
		} else {
			campo.checked = false;
			campo.parentNode.parentNode.className = 'fila';
		}
	}

	for (i = 0; i < campo.length; i++) {
		if(campo[i].checked == false) {
			campo[i].checked = true;
			campo[i].parentNode.parentNode.className = 'filaMarcada';
		} else {
			campo[i].checked = false;
			campo[i].parentNode.parentNode.className = 'fila';
		}
	}
}

// Verificar filas marcadas

function verMarcados(mensajes) {
	// Genero una colección con los mensajes para la función segpun el idioma configurado
	aMensajes = mensajes.split('|');

	if($('#bloquear').val() == 'false') {
		if(document.forms['listado'].elements['items'].length == null) {
			if(document.forms['listado'].items.checked) {
				return true;
			}
		}

		for(i=0; i < document.forms['listado'].elements['items'].length; i++) {
			if(document.forms['listado'].items[i].checked) {
				return true;
			}
		}

		alert(aMensajes[0]);
		return false
	} else {
		alert(aMensajes[1]);
		return false
	}
}


// =========================================
// Funciones del módulo formulario
// =========================================

// Actualizar vista previa de imágenes

function actualizar_vista_previa(campo, indice, urlGeneral, pathGeneral, ancho, fondo, modoEnlace) {
	var valor = $('#' + campo + '_lista').val();
	var archivo = valor.substr(valor.lastIndexOf('/') + 1);
	var extension = valor.substr(valor.lastIndexOf('.') + 1);

	if(valor !== '') {
		$('#vistaPrevia' + indice).show();
		$('#' + campo).val(valor);
		$('#enlace_vista_previa' + indice).attr('title', archivo);

		if(extensionesImagen.toString().indexOf(extension) > -1) {
			$('#descarga' + indice).hide();
			$('#vista_previa' + indice).attr('src', 'scripts/recortarImagen.php?imagen=' + pathGeneral + valor + '&ancho=' + ancho + '&alto=' + ancho + '&fondo=' + fondo + '&modo=crop');

			if(modoEnlace == 'integrado') {
				$('#enlace_vista_previa' + indice).attr('href', urlGeneral + valor);
				$('#enlace_vista_previa' + indice).attr('rel', 'grupo_recursos');
				$('#enlace_vista_previa' + indice).attr('target', '_self');
			} else {
				$('#enlace_vista_previa' + indice).attr('href', 'javascript:abrirVentana(\'' + urlGeneral + valor + '\',\'vistaPrevia\',\'width=500,height=400\');');
				$('#enlace_vista_previa' + indice).attr('rel', '');
				$('#enlace_vista_previa' + indice).attr('target', '_blank');
			}
		} else {
			$('#descarga' + indice).show();

			if(extensionesTipoArchivo.indexOf(extension) > -1) {
				$('#vista_previa' + indice).attr('src', 'scripts/recortarImagen.php?imagen=../images/ic_recurso_' + extension + '.png&ancho=' + ancho + '&alto=' + ancho + '&fondo=' + fondo + '&modo=crop');
			} else {
				$('#vista_previa' + indice).attr('src', 'scripts/recortarImagen.php?imagen=../images/ic_recurso_general.png&ancho=' + ancho + '&alto=' + ancho + '&fondo=' + fondo + '&modo=crop');
			}

			$('#enlace_vista_previa' + indice).attr('href', urlGeneral + $('#' + campo).val());
			$('#enlace_vista_previa' + indice).attr('rel', '');
			$('#enlace_vista_previa' + indice).attr('target', '_blank');
		}
	} else {
		$('#' + campo).val('');
		$('#vista_previa' + indice).attr('src', 'images/p00.gif');
		$('#vistaPrevia' + indice).hide();
		$('#descarga' + indice).hide();
		$('#enlace_vista_previa' + indice).attr('href', 'javascript:;');
		$('#enlace_vista_previa' + indice).attr('rel', '');
		$('#enlace_vista_previa' + indice).attr('target', '_blank');
	}

	configurar_popup_recursos();
}

// Eliminar recurso

function eliminar_recurso(campo, id, mensajes) {
	// Genero una colección con los mensajes para la función segpun el idioma configurado
	aMensajes = mensajes.split('|');

	if($('#' + campo).value !== '') {
		if(confirm(aMensajes[0])) {
			destino = '?modo=eliminarimg&imagen=' + $('#' + campo).val();
			if(id !== '') destino += '&id=' + id;
			location.href = destino;
		}
	} else {
		alert(aMensajes[1]);
	}
}

// Eliminar un valor del campo de relación

function eliminar_relacion(campo, id, mensajes) {
	// Genero una colección con los mensajes para la función segpun el idioma configurado
	aMensajes = mensajes.split('|');

	if($('#' + campo).selectedIndex !== 0) {
		if(confirm(aMensajes[0])) {
			destino = '?modo=eliminarrel&valor=' + $('#' + campo).val();
			if(id !== '') destino += '&id=' + id;
			location.href = destino;
		}
	} else {
		alert(aMensajes[1]);
	}
}

// Mostrar / ocultar valor de un campo clave

function cambiar_clave(campo, boton, mensajes) {
	// Genero una colección con los mensajes para la función según el idioma configurado
	aMensajes = mensajes.split('|');
	
	valorCampo = $('#' + campo).val();
	codigoCampo = $('#' + campo).attr('outerHTML');
	
	if($('#' + campo).attr('type') == 'password') {
		codigoCampo = codigoCampo.replace('type="password"', 'type="text"');
		$('#' + boton).attr('title', aMensajes[0]);
	} else {
		codigoCampo = codigoCampo.replace('type="text"', 'type="password"');
		$('#' + boton).attr('title', aMensajes[1]);
	}

	$('#' + campo).attr('outerHTML', codigoCampo);
	$('#' + campo).val(valorCampo);
}

// Generador de claves aleatorias

function generar_clave_aleatoria(campo, caracteres) {
	var clave = '';

	for (i=0; i < caracteres; i++) {
		caracter = numero_aleatorio();

		while (verificar_caracter(caracter)) {
			caracter = numero_aleatorio();
		}

		clave += String.fromCharCode(caracter);
	}

	$('#' + campo).val(clave);
}

function numero_aleatorio() {
	// entre 0 - 1
	var aleatorio = Math.random()

	// aleatorio entre 0 - 1000
	aleatorio = parseInt(aleatorio * 1000);

	// aleatorio entre 33 - 127
	aleatorio = (aleatorio % 94) + 33;

	return aleatorio;
}

function verificar_caracter(valor) {
	if ((valor >=33) && (valor <=47)) return true;
	if ((valor >=58) && (valor <=64)) return true;
	if ((valor >=91) && (valor <=96)) return true;
	if ((valor >=123) && (valor <=126)) return true;
	return false;
}

function actualizar_combos_fecha(campo) {
	var fecha, fechaActual = new Date(), dia = '01', mes = '01', anio = fechaActual.getFullYear(), hora = '00', minuto = '00';

	// Verifico los valores individuales de todos los elementos de la fecha
	if(eval($('#' + campo + '_DD'))) {
		dia = $('#' + campo + '_DD').val();
	}

	if(eval($('#' + campo + '_MM'))) {
		mes = $('#' + campo + '_MM').val();
	}

	if(eval($('#' + campo + '_AA'))) {
		anio = $('#' + campo + '_AA').val();
	}

	if(eval($('#' + campo + '_HH'))) {
		hora = $('#' + campo + '_HH').val();
	}

	if(eval($('#' + campo + '_II'))) {
		minuto = $('#' + campo + '_II').val();
	}

	// Formateo el valor para la fecha
	fecha = anio + '-' + mes + '-' + dia + ' ' + hora + ':' + minuto

	// Asigno la fecha al campo del formulario correspondiente
	$('#' + campo).val(fecha);
}

// Resetear fecha para el control tipo calendario

function resetear_fecha(nombre) {
	$('#' + nombre + '_display').attr('innerHTML', '');
	$('#' + nombre).val('');
}

function configurar_popup_recursos() {
	$('a[rel=grupo_recursos]').fancybox({
		'speedIn'		:	600, 
		'speedOut'		:	200, 
		'titlePosition'	:	'over',
		'overlayOpacity'	:	0.8,
		'hideOnContentClick'	: true,
		'onComplete'	:	function() {
			$("#fancybox-wrap").hover(function() {
				$("#fancybox-title").show();
			}, function() {
				$("#fancybox-title").hide();
			});
		}
	});
}

// Inicialización plantilla listado
function inicializar_plantilla_listado() {
	$(document).ready(function() {
		$('#exportar').fancybox({
			'speedIn'		:	400, 
			'speedOut'		:	200, 
			'titleShow'		:	false,
			'overlayOpacity'	:	0.8,
			'showCloseButton'	:	false
		});

		setTimeout(function() { $('#estado').fadeOut(1000); }, 3000);
	});
}

// Inicialización plantilla formulario
function inicializar_plantilla_formulario() {
	$(document).ready(function() {
		configurar_popup_recursos();

		$('a.popup_explorador').fancybox({
			'speedIn'		:	400, 
			'speedOut'		:	200,
			'width'		:	640,
			'height'		:	480,
			'autoDimensions'	:	false,
			'titleShow'		:	false,
			'overlayOpacity'	:	0.8,
			'showCloseButton'	:	false
		});

		$('a.popup_subir').fancybox({
			'speedIn'		:	400, 
			'speedOut'		:	200, 
			'titleShow'		:	false,
			'overlayOpacity'	:	0.8,
			'showCloseButton'	:	false,
			'width'		:	430,
			'height'		:	480,
			'autoDimensions'	:	false
		});

		$('a#ic_agregarRelacion').fancybox({
			'speedIn'		:	400, 
			'speedOut'		:	200, 
			'titleShow'		:	false,
			'overlayOpacity'	:	0.8,
			'showCloseButton'	:	false
		});
		
		setTimeout(function() { $('#estado').fadeOut(1000); }, 3000);
	});
}


// =========================================
// Funciones de ventanas pop-up
// =========================================

// Redimensión y posicionamiento de la ventana pop-up

function ventana_inicio(ancho, alto) {
	// Coordenadas del centro
	var x = Math.ceil((window.screen.width - ancho) / 2);
	var y = Math.ceil((window.screen.height - alto) / 2);

	// Moviendo y redimensionando la ventana
	window.resizeTo(ancho, alto);
	window.moveTo(x, y);
}

// Recargando datos de la ventana principal (y foco en ventana pop-up)

function ventana_recargar() {
	window.opener.location.reload();
	window.setTimeout('foco()', 1000);
}

function foco() {
	window.focus();
	window.clearTimeout();
}

// Validando la extensión del archivo a subir

function validar_extension(extensiones, mensajes) {
	// Genero una colección con los mensajes para la función segpun el idioma configurado
	aMensajes = mensajes.split('|');

	var archivo = $('#archivo').val();
	var extension = '';

	if(archivo !== '') {
		if(archivo.indexOf('.') > -1) {
			var extension = archivo.substr(archivo.lastIndexOf('.') + 1, 3);
		}

		var validas = extensiones.split(',');

		if(archivo.value == '') {
			alert(aMensajes[0]);
			archivo.focus();
			return false;
		}

		if(extension !== '') {
			for(elemento in validas) {
				if(extension.toUpperCase() == validas[elemento].toUpperCase()) {
					return true;
				}
			}
		}

		alert(aMensajes[1]);
		return false;
	} else {
		alert(aMensajes[0]);
		return false;
	}
}

// Habilitando los controles para redimensión si el recurso es una imagen

function habilitar_redimension() {
	var archivo = $('#archivo').val();
	var extension = archivo.substr(archivo.lastIndexOf('.') + 1, 3);

	if(extensionesImagen.indexOf(extension) > -1) {
		$('#controlesRedimension').show();
	} else {
		$('#controlesRedimension').hide();
	}

	// Muestro u oculto los campos para cargar las dimensiones de la redimensión
	habilitar_dimensiones();
}

// Validando los parámetros de redimensión de imagen

function habilitar_dimensiones() {
	// Muestro u oculto los campos de ancho y alto según la opción de redimensión esté seleccionada o no
	if($('#redimensionar').attr('checked') == true) {
		$('#controlesRedimensionValores').show();
	} else {
		$('#controlesRedimensionValores').hide();
	}
}

function validar_redimension(mensajes) {
	// Genero una colección con los mensajes para la función segpun el idioma configurado
	aMensajes = mensajes.split('|');

	if($('#redimensionar').attr('checked') == true && ($('#redimensionarAncho').val() == '' || $('#redimensionarAlto').val() == '')) {
		if($('#redimensionarAncho').val() == '') {
			alert(aMensajes[0]);
			return false;
		}

		if($('#redimensionarAlto').val() == '') {
			alert(aMensajes[1]);
			return false;
		}
	}

	return true;
}

// Calculando el ancho para la redimensión en base al alto ingresado

function calcular_ancho() {
	var alto = $('#redimensionarAlto').val();

	if(alto != '' && alto != '0') {
		$('#redimensionarAncho').val(Math.ceil(alto * 1.333));
	} else {
		$('#redimensionarAncho').val('');
	}
}

// Calculando el alto para la redimensión en base al ancho ingresado

function calcular_alto() {
	var ancho = $('#redimensionarAncho').val();

	if(ancho != '' && ancho != '0') {
		$('#redimensionarAlto').val(Math.floor(ancho / 1.333));
	} else {
		$('#redimensionarAlto').val('');
	}
}

// Cambiando el origen de un recurso desde el explorador de recursos

function cambiar_recurso(archivo, directorio, campo, indice, urlGeneral, pathGeneral, ancho, fondo, modoEnlace) {
	var extension = archivo.substr(archivo.lastIndexOf('.') + 1);
	$('#' + campo + '_lista').val(directorio + archivo).attr("selected", "selected");
	$('#enlace_vista_previa' + indice).attr('title', archivo);

	if(archivo.substr(0,2) == '--' && archivo.substr(archivo.length - 2,2) == '--') {
			$('#vista_previa' + indice).attr('src', 'images/p00.gif');
			$('#vistaPrevia' + indice, 'descarga' + indice).hide();
			$('#' + campo).val('');
			$('#enlace_vista_previa' + indice).attr('href', '');
			$('#enlace_vista_previa' + indice).attr('rel', '');
			$('#enlace_vista_previa' + indice).attr('target', '_self');
	} else {
		$('#vistaPrevia' + indice).show();
		$('#' + campo).val(directorio + archivo);

		if(extensionesImagen.toString().indexOf(extension) > -1) {
			$('#descarga' + indice).hide();
			$('#vista_previa' + indice).attr('src', 'scripts/recortarImagen.php?imagen=' + pathGeneral + directorio + archivo + '&ancho=' + ancho + '&alto=' + ancho + '&fondo=' + fondo + '&modo=crop');

			if(modoEnlace == 'integrado') {
				$('#enlace_vista_previa' + indice).attr('href', urlGeneral + directorio + archivo);
				$('#enlace_vista_previa' + indice).attr('rel', 'grupo_recursos');
				$('#enlace_vista_previa' + indice).attr('target', '_self');
			} else {
				$('#enlace_vista_previa' + indice).attr('href', 'javascript:abrirVentana(\'' + urlGeneral + directorio + archivo + '\',\'vistaPrevia\',\'width=500,height=400\');');
				$('#enlace_vista_previa' + indice).attr('rel', '');
				$('#enlace_vista_previa' + indice).attr('target', '_self');
			}
		} else {
			$('#descarga' + indice).show();

			if(extensionesTipoArchivo.toString().indexOf(extension) > -1) {
				$('#vista_previa' + indice).attr('src', 'scripts/recortarImagen.php?imagen=../images/ic_recurso_' + extension + '.png&ancho=' + ancho + '&alto=' + ancho + '&fondo=' + fondo + '&modo=crop');
			} else {
				$('#vista_previa' + indice).attr('src', 'scripts/recortarImagen.php?imagen=../images/ic_recurso_general.png&ancho=' + ancho + '&alto=' + ancho + '&fondo=' + fondo + '&modo=crop');
			}

			$('#enlace_vista_previa' + indice).attr('href', urlGeneral + $('#' + campo).val());
			$('#enlace_vista_previa' + indice).attr('rel', '');
			$('#enlace_vista_previa' + indice).attr('target', '_blank');
		}
	}

	$.fancybox.close();
	configurar_popup_recursos();
}


// Validando el valor de relación ingresado

function validarNombreRelacion(mensajes) {
	// Genero una colección con los mensajes para la función según el idioma configurado
	aMensajes = mensajes.split('|');

	if($('#relacion_nombre').val() == '') {
		alert(aMensajes[0]);
		$('#relacion_nombre').focus();
		return false;
	}

	return true;
}

// =========================================
// AJAX
// =========================================

// Relaciones

function rel_agregarValor(origen, valor, nombre, tabla, id, campo) {
	// Oculto los elementos del formulario	$('#puCamposElementos').hide();
	$('#puCamposElementos').hide();

	// Muestro un indicador de que se está procesando el pedido
	$('#puEstado').show();
	$('#puEstado').html('<p><img src="images/ani_procesando.gif" alt="ani_procesando.gif" />&nbsp;&nbsp;Procesando...</p>');

	// Inserto el nuevo valor en la tabla de relaciones
	$.ajax({
		'url' : 'scripts/rel_agregarValor.php',
		'data' : { relacion_valor : valor, relacion_tabla : tabla, relacion_campo : campo },
		'success' : function(data) { $('#puEstado').html('<p><img src="images/ic_info.png" alt="ic_info.png" style="vertical-align: middle;" />&nbsp;&nbsp;' + data + '</p>'); }
	});

	// Actualizo el combo con los valores de la relación en la pantalla principal del formulario
	$.ajax({
		'url' : 'scripts/rel_cargarValores.php',
		'data' : { relacion_nombre: nombre, relacion_valor: valor, relacion_tabla: tabla, relacion_id: id, relacion_campo: campo },
		//'success' : function(data) { $('#puEstado').attr('innerHTML', data); }
		'success' : function(data) { $('#' + origen).attr('innerHTML', data); }
	});

	// Oculto el botón de guardado y muestro el de agregar un nuevo valor
	$('#ic_otro').show();
	$('#ic_guardar').hide();
}
