var GalleryManager = Class.create({
    initialize: function(){
        try {
            if(Object.isUndefined(galleryFilePathOverride)){
                this.filePath = 'fileadmin/templates';
            }else{
                this.filePath = galleryFilePathOverride;
            }
        } catch (exception) {
            this.filePath = 'fileadmin/templates';
        }
        this.addAll();
    },
    
    setFilePath: function(path){
        this.filePath = path;
    },

    prepare: function(container){
        var containerPanel = $(container);
        var elements = containerPanel.select(".gallery_element");
        if(elements.size() > 0){
            for(var i = 0; i < elements.size(); i++){
                if(elements[i].visible && i > 0){
                    elements[i].hide();
                }
            }
        }
    },
    
    update: function(){
        this.addAll();
    },
    
    add: function(container){
        var containerPanel = $(container);
        var containerPanelId = containerPanel.identify();
        var elements = containerPanel.select(".gallery_element");
        var navPanel = containerPanel.select(".gallery_navigation").first();
        var navigation = '';
        var currentElement = null;
        if(elements.size() > 0){
            var count = 0;
            for(var i = 0; i < elements.size(); i++){
                var element = elements[i];
                if(element.select(".gallery_image").first().empty()){
                    element.remove();
                }else{
                    var link = '';
                    if(element.visible()){
                        link = ' <a class="active">' + (i + 1) + '</a> '
                        currentElement = element;  
                    }else{
                        link = ' <a onclick="galleryManager.show(\'' + element.identify() + '\',\'' + containerPanelId + '\');">' + (i + 1) + '</a> ';
                    }
                    if(i != 0){
                        link = '|' + link;
                    }
                    navigation += link;
                    count++;
                }
            }
            var nextSiblings = currentElement.nextSiblings();
            var prevSiblings = currentElement.previousSiblings();
            if(nextSiblings.length > 0 && nextSiblings.first().hasClassName('gallery_navigation') == false){
                navigation += '<a onclick="galleryManager.show(\'' + nextSiblings.first().identify() + '\',\'' + containerPanelId + '\');"><img src="' + this.filePath + '/images/arrow_right.png"></a>';
            }else{
                navigation += '<img src="' + this.filePath + '/images/arrow_right_grey.png">';
            }
            if(prevSiblings.length > 0){
                navigation = '<p><a onclick="galleryManager.show(\'' + prevSiblings.first().identify() + '\',\'' + containerPanelId + '\');"><img src="' + this.filePath + '/images/arrow_left.png"></a>' + navigation;
            }else{
                navigation = '<p><img src="' + this.filePath + '/images/arrow_left_grey.png">' + navigation;
            }
            navigation += '</p>';
            navPanel.update(navigation);
                    if(count == 1){
                            navPanel.remove();
                    }
        }else{
            navPanel.remove();
        }
    },
    
    addAll: function(){
        var galleries = $$(".gallery_container");
        if(galleries != null){
            for(var i = 0; i < galleries.size(); i++){
                this.prepare(galleries[i]);//Addition for typo3 news plugin
                this.add(galleries[i]);
            }
        }
    },
    
    show: function(currentElement, parentContainer){
        var elements = $(parentContainer).select(".gallery_element");
        for(var i = 0; i < elements.size(); i++){
            var element = elements[i];
            if(element != $(currentElement)){
                element.hide();
            }else{
                element.show();
            }
        }
        this.add(parentContainer);
    }
});

Event.observe(window, 'load', function() {
  galleryManager = new GalleryManager();
});

