var addContent = new Class ({
    Implements: [Events, Options],
    
    options: {
        url: null,
        container: null,
        getId: null,
        images: null
    },
    initialize: function(options) {
        this.setOptions(options);
    },
    
    display: function() {
        contentContainer = this.options.container;
        contentUrl = this.options.url;
        getId = this.options.getId;
        images = this.options.images;
        if (contentContainer.getElement('h2') == null) {
            var that = this;
            var contentRequest = new Request.HTML({
                url: contentUrl,
                onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript) {
                    if (responseHTML.trim() != "") {
                        var framesContainer = new Element('div', {
                            'class': 'framesContainer',
                            'html': responseHTML
                        })
                        contentContainer.grab(framesContainer, 'top');
                    }
                    if (images != null) {
                        var imagesContainer = $$(contentContainer.getElements('.frame_image'));
                        var i = 0;
                        images.each(function(item, index) {
                            i++;
                            item.inject(imagesContainer[index], 'top');
                        })
                        that.fireEvent('complete');
                    } else {
                        that.fireEvent('complete');
                    }
                }
            }).post(contentUrl+'?document_id='+getId);
        } else {
            this.fireEvent('complete');
        }
    }
});

var projectSlider = new Class({
    Implements: Options,
    Options: {
        boxMargin: 20
    },
    
    initialize: function(options){
        this.setOptions(options);
    },

    
    contentShow: function(image) {
        slideImages.removeEvents('click');
        if (openContent != 0 && openContent != -1) {
            var button = $(openContent.getParent().getParent().getElement('span.back'));
            this.contentClose(button, 'contentShow', image);
        } else if (openContent == -1) {
            this.openerClose(image);
        } else {
            var content = $(image.getParent().getParent().getElement('div.slide_content'));
            var box = $(content.getParent());
            var documentId = box.get('id').slice(6);
            var loaderGif = $(box.getElement('img.loader_gif'));
            loaderGif.setStyle('display', 'block');
            var that = this;
            
            var imageRequest = new Request.JSON({url: 'get_images.php',
                onSuccess: function(responseJSON, responseText) {
                    
                    var images = eval(responseText);
                    if (images == "") images = "gfx/logo.jpg";
                    var loadImages = new Asset.images(images, {
                        onComplete: function() {
                            if (images == "gfx/logo.jpg") {loadImages = null;}
                            var slideContent = new addContent({
                                url: 'index.php',
                                container: content,
                                getId: documentId+'&ditto_documents='+documentId+'&id=92',
                                images: loadImages,
                                onComplete: function() {
                                    var mediaSpaces = $$(content.getElements('.mediaspace_visible'));
                                    var z = 0;
                                    mediaSpaces.each(function(item, index) {
                                        var movieId = item.get('id').slice(10);
                                        var getMovie = new addContent({
                                            url: 'get_movie.php',
                                            container: item,
                                            getId: movieId,
                                            onComplete: function() {
                                                z++;
                                                if (z == mediaSpaces.length) {
                                                    contentHeight = 0;
                                                    var contentHeight = content.getDimensions().height;
                                                    var imageHeight = $(image.getParent()).getDimensions().height;
                                                    
                                                    content.setStyles({'height': 0, 'display': 'block'});
                                                    var contentTween = new Fx.Tween(content, {
                                                        duration: 1000,
                                                        onComplete: function() {
                                                            loaderGif.setStyle('display', 'none');
                                                            openContent = image;
                                                            
                                                            var myFx = new Fx.Scroll(window, {
                                                                offset: {'x': 0, 'y': -25},
                                                                wheelStops: false    
                                                            }).toElement(box);
                                                            
                                                            slideImages.addEvent('click', function() {
                                                                that.contentShow(this);
                                                            })
                                                            window.backButtons = $$('span.back');
                                                            backButtons.addEvent('click', function() {
                                                                that.contentClose(this);
                                                            })
                                                            window.watchButtons = $$('span.watch');
                                                            watchButtons.addEvent('click', function() {
                                                                that.movieShow(this);
                                                            })
                                                            window.closeButtons = $$('span.close');
                                                            closeButtons.addEvent('click', function() {
                                                                that.movieClose(this);
                                                            })
                                                        }
                                                    }).start('height', contentHeight);
                                                    var boxTween = new Fx.Tween(box, {duration: 1000}).start('margin-bottom', (contentHeight - imageHeight) + that.options.boxMargin)
                                                }
                                            }
                                        }).display();
                                    })
                                    if (z == mediaSpaces.length) {
                                        contentHeight = 0;
                                        var contentHeight = content.getDimensions().height;
                                        var imageHeight = $(image.getParent()).getDimensions().height;
                                        
                                        content.setStyles({'height': 0, 'display': 'block'});
                                        var contentTween = new Fx.Tween(content, {
                                            duration: 1000,
                                            onComplete: function() {
                                                loaderGif.setStyle('display', 'none');
                                                openContent = image;
                                                
                                                var myFx = new Fx.Scroll(window, {
                                                    offset: {'x': 0, 'y': -25},
                                                    wheelStops: false    
                                                }).toElement(box);
                                                
                                                slideImages.addEvent('click', function() {
                                                    that.contentShow(this);
                                                })
                                                window.backButtons = $$('span.back');
                                                backButtons.addEvent('click', function() {
                                                    that.contentClose(this);
                                                })
                                                window.watchButtons = $$('span.watch');
                                                watchButtons.addEvent('click', function() {
                                                    that.movieShow(this);
                                                })
                                                window.closeButtons = $$('span.close');
                                                closeButtons.addEvent('click', function() {
                                                    that.movieClose(this);
                                                })
                                            }
                                        }).start('height', contentHeight);
                                        var boxTween = new Fx.Tween(box, {duration: 1000}).start('margin-bottom', (contentHeight - imageHeight) + that.options.boxMargin);
                                    }
                                }
                            }).display();
                        }
                    });
                    
                }
            }).post('get_images.php?document_id='+documentId);
        }
    },
    
    contentClose: function(button, nextFunction, nextElement) {
        backButtons.removeEvents('click');
        if (openMovie != 0) {
            var watchButton = button.getParent().getElement('span.watch');
            if (nextFunction == 'contentShow') {this.movieClose($(openMovie.getNext('span.close')), 'contentClose', button, 'contentShow', nextElement);}
            else {this.movieClose($(openMovie.getNext('span.close')), 'contentClose', button);}
        } else {
            var content = $(button.getParent().getParent());
            var box = $(content.getParent());
            
            var contentHeight = content.getDimensions().height;
            var that = this;
            
            var contentTween = new Fx.Tween(content, {
                duration: 1000,
                onComplete: function() {
                    content.setStyles({'height': contentHeight, 'display': 'none'});
                    openContent = 0;
                    if (nextFunction != null) {
                        if (nextFunction == 'contentShow') {that.contentShow(nextElement);}
                    } else {
                        var myFx = new Fx.Scroll(window, {
                            offset: {'x': 0, 'y': -25},
                            wheelStops: false    
                        }).toElement(box);
                    }
                }
            }).start('height', 0);
            var boxTween = new Fx.Tween(box, {duration: 1000}).start('margin-bottom', this.options.boxMargin);
        }
    },
    
    openerClose: function(nextElement) {
        var opener = $('opener_content');
        var that = this;
        
        var openerMarginTween = new Fx.Tween(opener, {
            duration: 400,
            onComplete: function() {
                var openerTween = new Fx.Tween(opener, {
                    duration: 600,
                    onComplete: function() {
                        openContent = 0;
                        opener.setStyle('display', 'none');
                        that.contentShow(nextElement);
                    }
                }).start('height', 0);
            }
        }).start('margin-bottom', 0);
    },
    
    movieShow: function(button) {
        watchButtons.removeEvents('click');
        if (openMovie != 0) {
            this.movieClose($(openMovie.getNext('span.close')), 'movieShow', button);
        } else {
            var mediaspace = $(button.getParent().getParent().getElement('div.mediaspace'));
            var movieId = mediaspace.get('id').slice(10);
            var content = $(mediaspace.getParent().getParent().getParent());
            var box = $(content.getParent());
            
            var that = this;
            
            var slideMovie = new addContent({
                url: 'get_movie.php',
                container: mediaspace,
                getId: movieId,
                onComplete: function() {
                    var mediaHeight = mediaspace.getDimensions().height;
                    var contentHeight = content.getDimensions().height;
                    var boxMargin = box.getStyle('margin-bottom').toInt();
                    mediaspace.setStyles({'height': 0, 'display': 'block'});
                    var mediaTween = new Fx.Tween(mediaspace, {
                        duration: 1000,
                        onComplete: function() {
                            button.setStyle('display', 'none');
                            $(button.getNext('span.close')).setStyle('display', 'inline');
                            openMovie = button;
                            var myFx = new Fx.Scroll(window, {
                                offset: {'x': 0, 'y': -15},
                                wheelStops: false    
                            }).toElement($(button.getNext('span.close')));
                            watchButtons.addEvent('click', function() {
                                that.movieShow(this);
                            })
                        }
                    }).start('height', mediaHeight);
                    var boxTween = new Fx.Tween(box, {duration: 1000}).start('margin-bottom', boxMargin + mediaHeight);
                    var contentTween = new Fx.Tween(content, {duration: 1000}).start('height', contentHeight + mediaHeight);
                }
            }).display();
        }
    },
    
    movieClose: function(button, nextFunction, nextElement, fromFunction, fromElement) {
        closeButtons.removeEvents('click');
        var mediaspace = $(button.getParent().getParent().getElement('div.mediaspace'));
        var content = $(mediaspace.getParent().getParent().getParent());
        var box = $(content.getParent());
        
        var mediaHeight = mediaspace.getDimensions().height;
        var contentHeight = content.getDimensions().height;
        var boxMargin = box.getStyle('margin-bottom').toInt();
        var that = this;
        
        var mediaTween = new Fx.Tween(mediaspace, {
            duration: 1000,
            onComplete: function() {
                mediaspace.setStyles({'height': mediaHeight, 'display': 'none'});
                button.setStyle('display', 'none');
                $(button.getPrevious('span.watch')).setStyle('display', 'inline');
                openMovie = 0;
                if (nextFunction != null) {
                    if (fromFunction == 'contentShow') that.contentClose(nextElement, 'contentShow', fromElement);
                    else {
                        if (nextFunction == 'contentClose') that.contentClose(nextElement);
                        if (nextFunction == 'movieShow') that.movieShow(nextElement);
                    }
                } else {
                    var myFx = new Fx.Scroll(window, {
                        offset: {'x': 0, 'y': -15},
                        wheelStops: false    
                    }).toElement($(button.getParent().getParent()));
                }
                closeButtons.addEvent('click', function() {
                    that.movieClose(this);
                })
            }
        }).start('height', 0);
        var boxTween = new Fx.Tween(box, {duration: 1000}).start('margin-bottom', boxMargin - mediaHeight);
        var contentTween = new Fx.Tween(content, {duration: 1000}).start('height', contentHeight - mediaHeight);
    }
})

window.addEvent('domready', function() {
    if ($('opener_content') != null) window.openContent = -1;
    else window.openContent = 0;
    window.openMovie = 0;
    var slider = new projectSlider({boxMargin: 40});
    
    window.slideImages = $$($$('div.slide_image').getChildren('img.preview_image'));
    slideImages.addEvent('click', function() {
        slider.contentShow(this);
    })
})

