var StacksController = Class.create({
    
    initialize: function() {
        this.spacingV = 60;
        this.spacingH = 1;
        this.speedOpen = 0.6;
        this.speedClose = 0.3;
    },
    
    openStackUp: function(divPos) {
        var spacingV = this.spacingV;
        var spacingH = this.spacingH;
        var speedOpen = this.speedOpen;
        
        $('GlobalNavContainerUp').setStyle({
            zIndex: '200',
            position: 'absolute'
        });
        
        $$('.StackUp').each(function(e, i) {
            e.setStyle({
                top: (divPos[0]-30) +'px',
                left: divPos[1] +'px',
                zIndex: '199',
                position: 'absolute'
            });
            
            if (Prototype.Browser.IE) {
                e.toggle();
            } else {
                Effect.Appear(e, { duration: speedOpen });
            }
            new Effect.Move(e, { 
                x: (divPos[1]+spacingH), 
                y: (divPos[0]-spacingV), 
                mode: 'absolute', 
                duration: speedOpen
            });
            spacingV = spacingV + 60;
            spacingH = spacingH * 1.5;
            speedOpen = speedOpen - 0.05;
        });
    },
    
    closeStackUp: function(divPos) {
        var speedClose = this.speedClose;
        
        $('GlobalNavContainerUp').setStyle({
            position: 'static'
        });
        
        $$('.StackUp').each(function(e, i) {
            if (!Prototype.Browser.IE) {
                Effect.Fade(e, { duration: speedClose });
            }
            new Effect.Move(e, { 
                x: divPos[1], 
                y: divPos[0], 
                mode: 'absolute', 
                duration: speedClose,
                afterFinish: function(){
                    if (Prototype.Browser.IE) {
                        e.toggle();
                    }
                }
            });
            speedClose = speedClose - 0.01;
        });
    },

    openStackDown: function(divPos) {
        var spacingV = this.spacingV;
        var spacingH = this.spacingH;
        var speedOpen = this.speedOpen;
        
        $('GlobalNavContainerDown').setStyle({
            zIndex: '200',
            position: 'absolute'
        });
        
        $$('.StackDown').each(function(e, i) {
            e.setStyle({
                top: (divPos[0]) +'px',
                left: divPos[1] +'px',
                zIndex: '199',
                position: 'absolute'
            });
            
            if (Prototype.Browser.IE) {
                e.toggle();
            } else {
                Effect.Appear(e, { duration: speedOpen });
            }
            new Effect.Move(e, { 
                x: (divPos[1]+spacingH), 
                y: (divPos[0]+spacingV), 
                mode: 'absolute', 
                duration: speedOpen
            });
            spacingV = spacingV + 60;
            spacingH = spacingH * 1.5;
            speedOpen = speedOpen - 0.05;
        });
    },
    
    closeStackDown: function(divPos) {
        var speedClose = this.speedClose;
        
        $('GlobalNavContainerDown').setStyle({
            position: 'static'
        });
        
        $$('.StackDown').each(function(e, i) {
            if (!Prototype.Browser.IE) {
                Effect.Fade(e, { duration: speedClose });
            }
            new Effect.Move(e, { 
                x: divPos[1], 
                y: divPos[0], 
                mode: 'absolute', 
                duration: speedClose,
                afterFinish: function(){
                    if (Prototype.Browser.IE) {
                        e.toggle();
                    }
                }
            });
            speedClose = speedClose - 0.01;
        });
    },
    
    fireStacksUp: function(originelement) {
        var position = $(originelement).cumulativeOffset();
        var divPos = [ position[1], position[0] ];
        
        if ($('GlobalNavContainerUp').getStyle('position') !== 'absolute') {         
            this.openStackUp(divPos);
        } else {
            this.closeStackUp(divPos);
        }
    },
    
    fireStacksDown: function(originelement) {
        var position = $(originelement).cumulativeOffset();
        var divPos = [ position[1], position[0] ];
        
        if ($('GlobalNavContainerDown').getStyle('position') !== 'absolute') {         
            this.openStackDown(divPos);
        } else {
            this.closeStackDown(divPos);
        }
    },
    
    hideWhenResized: function() {
        if ($('GlobalNavContainer').getStyle('position') == 'absolute') { 
            $('GlobalNavContainer').setStyle({
                position: 'relative'
            });
            $$('.Stack').each(function(e, i) {
                e.setStyle({
                    display: 'none'
                });
            });
        }
    }
    
});

var st = new StacksController();