// Variable para determinar la cantidad de miniaturas a visualizar
var cant_mini = 4;
// Array que va a contener la descripcion de las imagenes
var descripcion_foto = {};

// Funcion que prepara una imagen para aplicarle el efecto FadeIn
function verImage(imageId){
    image = document.images[imageId];
    setOpacity(image, 0);
    image.style.visibility = 'visible';
    fadeIn(imageId, 0);
}

// Funcion que da el efecto FadeIn a la imagen que se carga
function fadeIn(objId, opacity){
    obj = document.getElementById(objId);
    if (opacity <= 100) {
        setOpacity(obj, opacity);
        opacity += 10;
        window.setTimeout("fadeIn('" + objId + "'," + opacity + ")", 30);
    }
}

// Funcion que da el efecto FadeOut a una imagen
function fadeOut(objId, opacity){
    obj = document.getElementById(objId);
    if (opacity >= 0) {
        setOpacity(obj, opacity);
        opacity -= 10;
        window.setTimeout("fadeOut('" + objId + "'," + opacity + ")", 10);
    }
}

// Funcion que define la opacidad de un elemento
function setOpacity(obj, opacity){
    opacity = (opacity == 100) ? 99.999 : opacity;
    // IE/Win
    obj.style.filter = "alpha(opacity:" + opacity + ")";
    // Safari<1.2, Konqueror
    obj.style.KHTMLOpacity = opacity / 100;
    // Mozilla y Firefox antiguos
    obj.style.MozOpacity = opacity / 100;
    // Safari 1.2, Firefox and Mozilla modernos
    obj.style.opacity = opacity / 100;
}

// Funcion para cambiar el atributo SRC de una imagen
function cargar(ruta, indice){
    document.images['foto'].src = ruta;
    document.getElementById('descripcion_foto').innerHTML = descripcion_foto[indice];
}

// Funcion que hace tratamiento al REQUEST para las miniaturas de la galeria
function js_php(texto){
    // Genero un array con los valores encontrados en la cadena
    var variables = texto.split("&");
    // Extraigo los tres ultimos valores del array generado
	var idGal = variables.pop();
    var pagSig = variables.pop();
    var pagAnt = variables.pop();
    // Creo un objeto llamado link que contiene la etiqueta <a> con id 'ctrl_der'
    var link = document.links['ctrl_der'] ? document.links['ctrl_der'] : document.links('ctrl_der');
    // Comparo el valor de la variable pagSig si es -1 el link no realiza ninguna accion de lo contrario se le asigna una peticion ajax
    if (pagSig == -1) {
        link.href = 'javascript:void();';
        link.onclick = '&nbsp;';
    }
    else {
        link.href = "javascript:doAjax('galerias/lista_mini.php','pag=" + pagSig + "&id=" + idGal + "','load_mini','get', 'js_php', '0','loader_mini','');";
        link.onclick = function(){
            ocultar_images();
        }
    }
    // Creo un objeto llamado link que contiene la etiqueta <a> con id 'ctrl_izq' 
    link = document.links['ctrl_izq'] ? document.links['ctrl_izq'] : document.links('ctrl_izq');
    // Comparo el valor de la variable pagAnt si es -1 el link no realiza ninguna accion de lo contrario se le asigna una peticion ajax
    if (pagAnt == -1) {
        link.href = 'javascript:void();';
        link.onclick = '&nbsp;';
    }
    else {
        link.href = "javascript:doAjax('galerias/lista_mini.php','pag=" + pagAnt + "&id=" + idGal + "','load_mini','get', 'js_php', '0','loader_mini','');";
        link.onclick = function(){
            ocultar_images();
        }
    }
    // Asigno a num_variables la longitud del array que contiene los valores para manipular las miniaturas
    var num_variables = variables.length;
    var indice = 1;
    // Pregunto si la cantidad de variables extraidas es menor que la cantidad de miniaturas a mostrar*2
    if (num_variables < (cant_mini * 2)) {
        // Calculo la cantidad de divs (con class 'mini') se van a mostrar
        var num_div = cant_mini - (num_variables / 2);
        // Por medio del FOR oculto los div's y las imagenes dentro de estos
        for (var i = 0; i < num_div; i++) {
            elem = document.getElementById('mini' + (cant_mini - i));
            elem.style.visibility = 'hidden';
            document.images['foto_mini' + (cant_mini - i)].style.visibility = 'hidden';
        }
    }
    // Realizo un FOR para poder discriminar cada valor del array y asignarlo donde debe
    for (var i = 0; i < num_variables; i++) {
        // Si cumple la condicion quiere decir que es la ruta de una imagen
        if (i % 2 == 0) {
            // Creo un objeto 'link' con la etiqueta <a> de id link_mini1, link_mini2 ...
            link = document.links['link_mini' + indice] ? document.links['link_mini' + indice] : document.links('link_mini' + indice);
            // modifico el atributo href del objeto, asignandole la funcion cargar con la ruta de la imagen y el valor del indice del array que contiene la descripcion de la imagen
            link.href = 'javascript:cargar("' + variables[i] + '",' + (indice - 1) + ')';
            // Cambio el atributo SRC de la imagen con id foto_mini1, foto_mini2...
            document.images['foto_mini' + indice].src = 'includes/miniaturaLive.php?u=../' + variables[i] + '&w=119&h=69';
            // Ejecuto la funcion verImage para la respectiva miniatura
            verImage('foto_mini' + indice);
            // Le doy estilo visible al DIV mini1, mini2..., por si este ha sido ocultado anteriormente
            document.getElementById("mini" + indice).style.visibility = 'visible';
            indice++;
        }
        else {
            // Lleno el array con la descripcion de cada foto
            descripcion_foto[indice - 2] = variables[i];
        }
    }
    // Cargo por defecto la primera imagen y la primera descripcion (Foto Grande)
    cargar(variables[0], 0);
    // Elimino el cargador que esta en medio de los 2 botones de control
    document.getElementById('load_mini').innerHTML = '&nbsp;';
}

// Funcion para hacer un efecto de desvanecimiento 'fadeOut' de las imagenes
function ocultar_images(){
    for (var i = 1; i <= cant_mini; i++) {
        fadeOut('foto_mini' + i, 100);
    }
}

//--- Para el Scroll (Listado de Galerias) ---//

// Stop controla cuando debe parar el movimiento de scroll
var stop;
// Alto determina la altura de cada bloque que contiene items del listado de galerias
var alto;
// Max contiene la altura total (sumatoria) de todos los bloques con items (texto_scroll)
var max;
// Operando establece si se esta realizando un movimiento de scroll o no
var operando;
// Texto_scroll es el elemento al que se le va a realizar el movimento de scroll
var texto_scroll;
// Listado es el elemento que determina el area visible del scroll
var listado;

// Esta funcion coloca las variables en sus valores iniciales (debe hacerse un llamado de esta funcion con el evento onload de la etiqueta BODY)
function inicializar(){
    texto_scroll = document.getElementById('texto_scroll');
    listado = document.getElementById('listado');
    listado.scrollTop = 0;
    operando = false;
    max = texto_scroll.offsetHeight;
    stop = 0;
    alto = 85;
}

// Funcion que comprueba si se puede realizar un scroll hacia arriba
function move_up(){
	// Si un movimiento se esta realizando retorna el control a la funcion de llamado
    if (operando) {
        return;
    }
	// Se verifica que el movimiento se pueda realizar, si es posible, se hace el llamado a la funcion subir cada 10 milisegundos
    if (stop > 0) {
        stop--;
        operando = true;
        intervalo = setInterval('subir()', 10);
    }
}

// Funcion que comprueba si se puede realizar un scroll hacia abajo
function move_down(){
	// Si un movimiento se esta realizando retorna el control a la funcion de llamado
    if (operando) {
        return;
    }
	// Se verifica que el movimiento se pueda realizar, si es posible, se hace el llamado a la funcion bajar cada 10 milisegundos
    if (max > (stop + 1) * alto) {
        stop++;
        operando = true;
        intervalo = setInterval('bajar()', 10);
    }
}

// Esta funcion modifica el atributo scrollTop del objeto listado para hacer posible el movimiento hacia abajo del bloque texto_scroll
function bajar(){
	// se aumenta en 5 la propiedad scrollTop del objeto listado
    listado.scrollTop += 5;
	// Si el valor de la propiedad scrollTop es igual a alto*stop, o altoTotal(max)-alto <= scrollTop
    if ((listado.scrollTop == alto * stop) || (max - alto <= listado.scrollTop)) {
		// Se elimina el llamado recurrente a la funcion bajar
        clearInterval(intervalo);
		// Se coloca operando en false para que otro movimiento pueda ser realizado
        operando = false;
    }
}

// Esta funcion modifica el atributo scrollTop del objeto listado para hacer posible el movimiento hacia arriba del bloque texto_scroll
function subir(){
	// se disminuye en 5 la propiedad scrollTop del objeto listado
    listado.scrollTop -= 5;
	// Si se ha llegado al tope o stop*alto = scrollTop
    if (listado.scrollTop == 0 || (stop * alto == listado.scrollTop)) {
		// Se elimina el llamado recurrente a la funcion subir
        clearInterval(intervalo);
		// Se coloca operando en false para que otro movimiento pueda ser realizado
        operando = false;
    }
}

