/**
 * Klasa obsługuje galerie zdjęć.
 */
Galleries = {
    container : null,
    photoContainer : null,
    menuContainer : null,
    list : new Array(),
    listIndex : 0,
    owner : null,
    timeout : 200,
    playBackgroundSound : true,
    _images : null,
    init : function(params) {
        Galleries.owner = params.owner;
    },
    initialized : function() {
        if (Galleries.container && Galleries.photoContainer && Galleries.menuContainer && Galleries.owner) {
            return true;
        }
        return false;
    },
    show : function(root) {
        if (!Galleries.initialized()) {
            Galleries.createGalleryImages(root);
            Galleries.createGalleryMenu(root);
            Galleries.createGalleryBoxes(root);
            Galleries.createFixer(root);
        }
        Galleries.remove();
        Galleries.removeMenu();
        Galleries.removePhoto();
        $.post(templatePath + "servlet.php", {
            action : "getGalleries", 
            owner : this.owner
            }, Galleries.set)
    },
    hide : function() {
        if (Galleries.initialized()) {
            var root = Galleries.container.parentNode;
            while(root && root.childNodes.length > 0) {
                root.removeChild(root.childNodes[0]);
            }
            Galleries.container = null;
            Galleries.photoContainer = null;
            Galleries.menuContainer = null;
        }
    },
    canPlayBackgroundSound : function() {
        return Galleries.playBackgroundSound;
    },
    change : function() {
        Galleries.draw();
    /* więcej akcji */
    },
    add : function(gallery) {
        Galleries.list[Galleries.list.length] = gallery;
    },
    remove : function() {
        Galleries.list = new Array();
        Galleries.listIndex = 0;
        while(Galleries.container.childNodes.length > 0) {
            Galleries.container.removeChild(Galleries.container.childNodes[0]);
        }
    },
    removeMenu : function() {
        while(Galleries.menuContainer.childNodes.length > 0) {
            Galleries.menuContainer.removeChild(Galleries.menuContainer.childNodes[0]);
        }
    },
    removePhoto : function() {
        while(Galleries.photoContainer.childNodes.length > 0) {
            Galleries.photoContainer.removeChild(Galleries.photoContainer.childNodes[0]);
        }
    },
    set : function(galleriesJSON) {
        var galleries = null;
        try {
            galleries = eval(galleriesJSON);
        } catch (e) {
            if (console && console.log) {
                console.log(e);
                console.log(e.message);
            }
        }
        if (!galleries) return;
        for (var i=0;i<galleries.length;i++) {
            var params = galleries[i];
            var paramString = Toolbox.escapeParams(params);
            var gallery = eval("new Gallery(" + paramString + ");");
            gallery.setContainer(Galleries.photoContainer);
            Galleries.add(gallery);
        }
        Galleries.change();
    },
    get : function(id) {
        for (var i=0;i<Galleries.list.length;i++) {
            if (Galleries.list[i].getId() == id) {
                return Galleries.list[i];
            }
        }
        return null;
    },
    draw : function() {
        for (var i=0;i<Galleries.list.length;i++) {
            setTimeout(Galleries.drawGallery, (i * Galleries.timeout));
        }
    },
    drawGallery : function() {
        if (Galleries.listIndex < Galleries.list.length) {
            Galleries.list[Galleries.listIndex].draw(Galleries.container);
            Galleries.listIndex++;
        }
    },
    drawMenu : function(selectedItem) {
        if (Galleries.menuContainer) {
            Galleries.removeMenu();
            for (var i=0;i<Galleries.list.length;i++) {
                Galleries.list[i].drawMenu(Galleries.menuContainer, selectedItem);
            }
        }
    },
    createGalleryImages : function(root) {
        if (!Galleries.photoContainer) {
            var galleryImages = document.createElement("div");
            galleryImages.id = "galleryImages";
            galleryImages.className = "galleryImages";
            root.appendChild(galleryImages);
            Galleries.photoContainer = galleryImages;
            Galleries._images = Galleries.photoContainer.getElementsByTagName('img');
        }
    },
    createGalleryMenu : function(root) {
        if (!Galleries.menuContainer) {
            var galleryMenu = document.createElement("div");
            galleryMenu.id = "galleryMenu";
            galleryMenu.className = "galleryMenu";
            root.appendChild(galleryMenu);
            Galleries.menuContainer = galleryMenu;
        }
    },
    createGalleryBoxes : function(root) {
        if (!Galleries.container) {
            var galleryBoxes = document.createElement("div");
            galleryBoxes.id = "galleryBoxes";
            galleryBoxes.className = "galleryBoxes";
            root.appendChild(galleryBoxes);
            Galleries.container = galleryBoxes;
        }
    },
    createFixer : function(root) {
        var fixer = document.createElement("div");
        fixer.className = "brfix";
        root.appendChild(fixer);
    },
    fixGallerySize : function() {
        if (Galleries.photoContainer) {
            var width = 0;
            var height = 0;
            var i = 0;
            if (Configuration.galleryOrientation == 'horizontal') {
                for (i=0;i<Galleries._images.length;i++) {
                    width += Galleries._images[i].clientWidth;
                }
                height = Configuration.galleryPhotoHeight;
            } else {
                for (i=0;i<Galleries._images.length;i++) {
                    height += Galleries._images[i].clientHeight;
                }
                width = Configuration.galleryPhotoWidth;
            }
            Galleries.photoContainer.style.width = width + 'px';
            Galleries.photoContainer.style.height = height + 'px';
        }
    }
};
