document.documentElement.className = 'js-enabled';
var CZ = CZ || {};
CZ.url ='http://www.macaco.es';


window.addEvent('domready', function(){
    // Clases en html
    $$('li:first-child, blockquote p:first-child').addClass('first-child');
    $$('li:last-child').addClass('last-child');
    $$('li:nth-child(odd)').addClass('odd');
    $$('.thumbnails li:nth-child(6n+0)').addClass('last-child');
    $$('.thumbnails li:nth-child(7n+0)').addClass('first-child');
    
    // Carrusel home
    $$('div.carrusel').each(function(el){
        new CZ.Carrusel(el);
    });
    
    // Login
    new CZ.Login($('login'));
    
    // Galerias
    new CZ.Galerias($('galerias'),{
	mostrarPrimerAlbum: true // dejar visible el primer album. Por defecto TRUE
    });
    
    // Paginacion conciertos
    $$('div.conciertos > div.contenido').each(function(el){
        new CZ.Paginador(el,{
			numeroItems: 5, // items por bloque
			ocultarPaginacion: true, // ocultar los links anterior y siguiente si el numero de items publicados es menor o igual al numero de items por bloque. Por defecto TRUE
            ruta: CZ.url // esta opcion solo se usa si la web es multiidioma para localizar las imagenes de anteriores y siguientes
        });
    });
    
    // Scroll suave hacia arriba
    new CZ.up.init($$('a.up'));
})


CZ.Carrusel = new Class({
    Implements: Options,
    options: {
        controles: {
            txtLinkRetroceder: 'Previous',
            txtLinkAvanzar: 'Next',
            claseLinkRetroceder: 'prev',
            claseLinkAvanzar: 'next',
            claseLinkDeshabilitado: 'disabled'
        },
        itemsVisiblesAlInicio: 3,
        anchoItem: 100
    },
    
    initialize: function(carrusel, options){        
        this.setOptions(options);
        this.carrusel = carrusel; 
        this.controles = this.options.controles;
        this.itemsVisiblesAlInicio = this.options.itemsVisiblesAlInicio;
        this.anchoItem = this.options.anchoItem;
        
        this.posicionaLista();
        this.anadeControles(this.controles);        
        this.prev = this.carrusel.getElements('div > a')[0];
        this.next = this.carrusel.getElements('div > a')[1];
        
    },
    
    posicionaLista: function(){
        var ul = this.carrusel.getElement('ul').setStyle('left', 0);
    },
    
    anadeControles: function(opciones){
        var linkRetroceder = new Element('a', {
            'class': opciones.claseLinkDeshabilitado, // por defecto el link de retroceder aparece deshabilitado al cargar la pagina
            text: opciones.txtLinkRetroceder,
            href: '#'
        });
        var divLinkRetroceder = new Element('div', {
            'class': opciones.claseLinkRetroceder
        }).grab(linkRetroceder);
        this.carrusel.grab(divLinkRetroceder, 'top');
        
        var ul = this.carrusel.getElement('ul');
        var totalItems = ul.getElements('li').length - this.itemsVisiblesAlInicio;
        var linkAvanzar = new Element('a', {
            text: opciones.txtLinkAvanzar,
            href: '#',
            restantes: totalItems
        });
        var divLinkAvanzar = new Element('div', {
            'class': opciones.claseLinkAvanzar
        }).grab(linkAvanzar);
        this.carrusel.grab(divLinkAvanzar, 'bottom');
        
        // Anadimos eventos
        var links = this.carrusel.getElements('div > a');
        links.addEvent('click', this.avanzaRetrocede.bind(this));
    },
    
    
    avanzaRetrocede: function(ev){
        ev.stop();
        // IE Bug: https://mootools.lighthouseapp.com/projects/2706/tickets/443-getter-and-setter-not-working-on-etarget
        if(Browser.Engine.trident) var target = ev.target || $(ev.srcElement);

        
        var ul = this.carrusel.getElement('ul');
        var totalItems = ul.getElements('li').length - this.itemsVisiblesAlInicio;
        
        var movimiento = new Fx.Morph(ul, {
            duration: 500,
            transition: Fx.Transitions.Pow.easeOut
        });

        if(!ev.target.hasClass(this.controles.claseLinkDeshabilitado)){
            if(ev.target == this.prev){
                if(this.next.get('restantes') < totalItems){
                    this.next.removeClass(this.controles.claseLinkDeshabilitado);
                }
                if(this.next.get('restantes') == totalItems - 1){
                    this.prev.addClass(this.controles.claseLinkDeshabilitado);
                }
                movimiento.start({
                    'left': [ul.getStyle('left'), ul.getStyle('left').toInt() + this.anchoItem + 'px']
                });
                this.next.set('restantes', this.next.get('restantes').toInt() + 1);
            }
            
            else{
                if(this.next.get('restantes') < totalItems + 1){
                    this.prev.removeClass(this.controles.claseLinkDeshabilitado);
                }
                if(this.next.get('restantes') == 1){
                    this.next.addClass(this.controles.claseLinkDeshabilitado);
                }
                movimiento.start({
                    'left': [ul.getStyle('left'), ul.getStyle('left').toInt() - this.anchoItem + 'px']
                });
                this.next.set('restantes', this.next.get('restantes').toInt() - 1);
            }
        }
    }
});





CZ.Paginador = new Class({
    Implements: Options,
    options: {
        numeroItems: 5,
        claseLinkDeshabilitado: 'disabled',
        ruta: '',
	ocultarPaginacion: true,
        rutaImgPrevios: '/wp-content/themes/macaco/images/pagePrev.gif',
        rutaImgSiguientes: '/wp-content/themes/macaco/images/pageNext.gif',
        literales: {
            ES: {
                imgAltPrevios: 'Anteriores',
                imgAltSiguientes: 'Siguientes'
            },
            EN: {
                imgAltPrevios: 'Previous',
                imgAltSiguientes: 'Next'
            }
        }
    },
    initialize: function(element, options){
        this.setOptions(options);
        this.element = element;
        this.opt = this.options;
        this.getDocumentLang();
        this.lang == 'en' ? this.literales = this.opt.literales.EN : this.literales = this.opt.literales.ES;
        this.ul = this.element.getElement('ul');
        if(!this.ul) return;

		if(this.opt.ocultarPaginacion){
			this.totalItems = this.ul.getElements('li').length;
			if(this.totalItems <= this.opt.numeroItems) return;
		}			
		
        this.ocultaItems();
        this.creaControles();
        this.prev = this.links[0];
        this.next = this.links[1];
    },
    getDocumentLang: function(){
        this.lang = $$('html')[0].get('xml:lang') || $$('html')[0].get('lang');
        if(!this.lang) this.lang = 'en'; // ingles por defecto
        return this.lang;
    },
    creaControles: function(){        
        var divPaginacion = new Element('div', {'class': 'paginacion'});
        var ulDivPaginacion = new Element('ul').inject(divPaginacion);
        // LI previos
        var liPrevios = new Element('li').inject(ulDivPaginacion);
        var linkPrevios = new Element('a',{
            'class': this.opt.claseLinkDeshabilitado,
            'href': '#',
            'restantes': 0
        }).inject(liPrevios);
        var imgPrevios = new Element('img',{
            'src': this.opt.ruta + this.opt.rutaImgPrevios,
            'alt': this.literales.imgAltPrevios
        }).inject(linkPrevios);
        
        // LI siguientes
        var liSiguientes = new Element('li').inject(ulDivPaginacion);
        var linkSiguientes = new Element('a',{
            'href': '#',
            'restantes': this.ul.getElements('li').length - this.opt.numeroItems
        }).inject(liSiguientes);
        var imgSiguientes = new Element('img',{
            'src': this.opt.ruta + this.opt.rutaImgSiguientes,
            'alt': this.literales.imgAltSiguientes
        }).inject(linkSiguientes); 
        var links = ulDivPaginacion.getElements('a');
        links.addEvent('click', this.paginador.bind(this));
        this.links = links;
        this.element.grab(divPaginacion, 'bottom');
        return this.links;
    },
    ocultaItems: function(){
        var items = this.ul.getElements('li');
        items.setStyle('display', 'none');
        items.each(function(el, ind){
            el.set('item', ind + 1);
            if(ind < this.opt.numeroItems){
                el.setStyle('display', '');
            }
        }.bind(this));
    },
    paginador: function(ev){
        ev.stop();
        if(Browser.Engine.trident) var target = ev.target || $(ev.srcElement);
        var link = ev.target;
        
        if(link.tagName != 'A') link = link.getParent('a');
        
        var numeroItems = this.opt.numeroItems;
        
        
        if(link == this.next && !link.hasClass(this.opt.claseLinkDeshabilitado)){
            this.prev.set('restantes', this.prev.get('restantes').toInt() + numeroItems).removeClass(this.opt.claseLinkDeshabilitado);
            this.next.set('restantes', this.next.get('restantes').toInt() - numeroItems);
            if(this.next.get('restantes').toInt() <= 0) this.next.addClass(this.opt.claseLinkDeshabilitado);
            this.cambiaVisibles(numeroItems);
        }        
        if(link == this.prev && !link.hasClass(this.opt.claseLinkDeshabilitado)){
            this.prev.set('restantes', this.prev.get('restantes').toInt() - numeroItems);
            this.next.set('restantes', this.next.get('restantes').toInt() + numeroItems).removeClass(this.opt.claseLinkDeshabilitado);
            if(this.prev.get('restantes').toInt() <= 0) this.prev.addClass(this.opt.claseLinkDeshabilitado);
            this.cambiaVisibles(numeroItems);    
        }
        
    },
    cambiaVisibles: function(numeroItems){
        var ocultos = this.prev.get('restantes').toInt();
        var ultimoIndice = this.prev.get('restantes').toInt() + numeroItems;

        this.ul.getElements('li').each(function(el, ind){
            if(ind >= ocultos && ind < ultimoIndice){
                new Fx.Reveal(el).reveal();
            }
            else{
                new Fx.Reveal(el).dissolve();
            }
        }.bind(this));
    }
});




// caja login
CZ.Login = new Class({
    Implements: Options,
    options: {
        linkCerrar: 'p.cerrar a'
    },
    initialize: function(element, options){
        this.setOptions(options);
        if(element) {
            this.element = element;
        }
        else{
            return;
        }
        this.linkCerrar = this.element.getElement(this.options.linkCerrar);
        this.alternaVisibilidad(this.element);
    },
    alternaVisibilidad: function(element){
        var _this = this;
        var heading = element.getElement('h2');
        heading.addEvents({
            'mouseenter': function(){
                if(element.getStyle('z-index') != 2)
                element.setStyle('right', '-10px');
            },
            'mouseleave': function(){
                if(element.getStyle('z-index') != 2)
                element.setStyle('right', 0);
            },
            'click': function(){
                if(element.getStyle('z-index') != 2)
                _this.muestraLogin(element);
            }
        });
    },
    muestraLogin: function(element){
        element.setStyle('z-index', 2);
        this.linkCerrar.addEvent('click', function(ev){
            ev.stop();
            this.ocultaLogin();
        }.bind(this));
    },
    ocultaLogin: function(){
        this.element.setStyles({
            'z-index': 0,
            'right': 0
        });
    }
});


// fotos 
// Galerias de fotos 
CZ.Galerias = new Class({
    Implements: Options,
    options: {
        claseActivo: 'active',
        tagHeaderAlbum: 'h3',
		mostrarPrimerAlbum: true,
        selectorCapaImgs: '.thumbnails',
        literales: {
            ES: {
                txtTitleMostrar: 'Mostrar álbum',
                txtTitleOcultar: 'Ocultar álbum'
            },
            EN: {
                txtTitleMostrar: 'Show album',
                txtTitleOcultar: 'Hide album'
            }
        }
    },
    initialize: function(element, options){
		if(!element) return;
        this.setOptions(options);
        this.element = element;
        this.opt = this.options;
		
        this.album = this.element.getElements(this.opt.selectorCapaImgs);
        this.getDocumentLang();
        this.lang == 'en' ? this.literales = this.opt.literales.EN : this.literales = this.opt.literales.ES;
        this.ocultaAlbums();
        this.makeLinksFromHeaders();
    },
    getDocumentLang: function(){
        this.lang = $$('html')[0].get('xml:lang') || $$('html')[0].get('lang');
        if(!this.lang) this.lang = 'en'; // ingles por defecto
        return this.lang;
    },
    ocultaAlbums: function(){
        this.album.setStyle('display', 'none');
		if(this.opt.mostrarPrimerAlbum) this.album[0].setStyle('display', '');		
    },
    makeLinksFromHeaders: function(){
        var headers = this.element.getElements(this.opt.tagHeaderAlbum);
		headers.each(function(header, ind){
			var link = new Element('a',{
	            'href': '#',
	            'text': header.get('text'),
	            'title': this.literales.txtTitleMostrar
	        });
			
	        header.empty().grab(link);
			if(this.opt.mostrarPrimerAlbum){
				if(ind == 0){
					link.set('title', this.literales.txtTitleOcultar);
					link.getParent().addClass(this.opt.claseActivo);
				}
			}			
	        link.addEvent('click', this.toggleAlbum.bind(this));
		}.bind(this))      
    },
    toggleAlbum: function(ev){
        ev.stop();
        if(Browser.Engine.trident) var target = ev.target || $(ev.srcElement);
        var link = ev.target;

        if(!link.getParent().hasClass(this.opt.claseActivo)){
            new Fx.Reveal(link.getParent('div').getElement(this.opt.selectorCapaImgs)).reveal();
            link.getParent().addClass(this.opt.claseActivo);
            link.set('title', this.literales.txtTitleOcultar);
        }
        else{
            new Fx.Reveal(link.getParent('div').getElement(this.opt.selectorCapaImgs)).dissolve();
            link.getParent().removeClass(this.opt.claseActivo);
            link.set('title', this.literales.txtTitleMostrar);
            link.blur(); // evitamos que se quede de color amarillo
        }
    }
});


// Scroll
CZ.up = CZ.up || {};
CZ.up.init = function(elements){
    elements.each(function(el){
        el.hideFocus = true;
        el.setStyle('outline', 'none');
        el.addEvent('click', function(ev){            
            ev.stop();
            var myFx = new Fx.Scroll($(document.body)).start(0, 0.5);
        });
    });     
}



