/**
 * @author Alex
 */
var astMenuFX = new Class({
    getOptions: function() {
        return {
            duration: 400,
            transition: Fx.Transitions.expoOut,
            wait: false
        }
    },
    initialize: function(b, c, d, e) {
        this.setOptions(this.getOptions(), e);
        this.enter = c;
        this.leave = d;
        $$(b).each(function(a, i) {
            this.createOver(a, i)
        }.bind(this))
    },
    createOver: function(a, i) {
        var b = new Fx.Morph(a, this.options);
        if (!a.hasClass("active")) {
            a.addEvent("mouseenter",
            function(e) {
                b.start(this.enter)
            }.bind(this));
            a.addEvent("mouseleave",
            function(e) {
                b.start(this.leave)
            }.bind(this))
        }
    }
});
astMenuFX.implement(new Options);

var astScroller = new Class({
    options: {
        slides: 'coop-slide',
        direction: 'v',
        duration: 3000,
        auto: false,
        delay: 1000,
        transition: Fx.Transitions.linear
    },
    initialize: function(wrapper,options) {
        this.setOptions(options);
        this.wrapper = $(wrapper);
        this.wrapper.setStyles({
            position: 'relative',
            overflow: 'hidden'
        });

        this.wrapper.addEvent('mouseenter', this.stop.bind(this));
        this.wrapper.addEvent('mouseleave', this.play.bind(this));

        this.slideOut = new Element('div').setStyles({
            position: 'absolute',
            overflow: 'hidden',
            top: 0,
            left: 0,
            width: this.wrapper.getStyle('width'),
            height: this.wrapper.getStyle('height')
        }).injectInside(this.wrapper);

        this.slideIn = this.slideOut.clone();
        this.slideIn.injectInside(this.wrapper);

        this.slides = $$('.'+this.options.slides);

        if($defined(this.options.buttons)) {
            if($defined(this.options.buttons.next)) {
                $(this.options.buttons.next).addEvent('click', this.next.bind(this));
            }
            if($defined(this.options.buttons.prev)) {
                $(this.options.buttons.prev).addEvent('click', this.prev.bind(this));
            }
            if($defined(this.options.buttons.play)) {
                $(this.options.buttons.play).addEvent('click', this.play.bind(this));
            }
            if($defined(this.options.buttons.stop)) {
                $(this.options.buttons.stop).addEvent('click', this.stop.bind(this));
            }
        }
        this.auto = this.options.auto;
        this.idxSlide = 0;
        this.step = 0;
        this.isFirst = true;
    },
    load: function() {
        if(!this.isFirst) {
            this.idxSlide += this.step;
            if(this.idxSlide > this.slides.length-1) {
                this.idxSlide = 0;
            } else if(this.idxSlide < 0) {
                this.idxSlide = this.slides.length-1;
            }
        }
        this.curSlide = this.slides[this.idxSlide].clone(false,false);
        this.curSlide.set('html', this.slides[this.idxSlide].get('html'));
        this.show();
    },
    show: function() {
        var slide = this.slideIn.getElement('div');
        if(slide) {
            this.curSlide.replaces(slide);
        } else {
            this.curSlide.inject(this.slideIn);
        }
        this.doEffect();
    },
    doEffect: function() {
        this.fxOn = true;
        var d = this.isFirst ? 0:this.options.duration;
        var t = this.options.transition;

        this.slideIn.set('morph',{duration:d, transition: t});
        var inX = 0;
        var inY = 0;
        var outX = 0;
        var outY = 0;
        var ww = this.wrapper.getStyle('width').toInt();
        var wh = this.wrapper.getStyle('height').toInt();
        if(this.step > 0) {
            if(this.options.direction == 'h') {
                inX = -ww;
                outX = ww;
            } else {
                inY = -wh;
                outY = wh;
            }
        } else {
            if(this.options.direction == 'h') {
                inX = ww;
                outX = -ww;
            } else {
                inY =  wh;
                outY = -wh;
            }
        }
        if(this.isFirst) {
            if(this.auto) {
                this.step = 1;
            }
            this.isFirst = false;
        }

        this.slideOut.set('morph', {duration:d, transition: t});

        this.slideIn.morph({
            top: [inY, 0],
            left: [inX, 0],
            opacity: [1, 1]
        });
        this.slideOut.morph({
            top: [0, outY],
            left: [0, outX]
        });
        this.fxEnd.delay(d + 75, this);
    },
    fxEnd: function() {
        this.fxOn = false;
        this.swapSlides();
        if(this.auto) {
            $clear(this.timer);
            this.timer = this.load.delay(this.options.delay, this);
        }
    },
    stop: function(){
        $clear(this.timer);
        this.auto = false;
    },
    play: function() {
        if(!this.auto ) {
            $clear(this.timer);
            this.auto=true;
            this.step = 1;
            if(!this.fxOn) {
                this.load();
            }
        }
    },
    next: function() {
        this.stop();
        if(this.fxOn) { return; }
        this.step = 1;
        this.load();
    },
    prev: function() {
        this.stop();
        if(this.fxOn) { return; }
        this.step = -1;
        this.load()
    },
    swapSlides: function() {
        this.slideOut.setStyles({
            zIndex: 0,
            opacity: 0
        });
        var t = this.slideOut;
        this.slideOut =this.slideIn;
        this.slideIn = t;
    }
});
astScroller.implement(new Options, new Events);

var astDropDown = new Class({
    initialize: function(b, c, d) {
        this.bg = b;
        this.base_container = c;
        this.show_options = d;
        this.perform();

    },
    perform: function() {
        var mySlide = new Fx.Slide(this.base_container, {duration: 500});
        var bg_change = $(this.bg);

        var status = {
            'true': 'open',
            'false': 'close'
        };

        mySlide.hide();
        $(this.show_options).addEvent('mouseenter', function(e){
            e = new Event(e);
            mySlide.toggle();

            e.stop();
        });

        $(this.base_container).addEvent('mouseleave', function(e){
            e = new Event(e);

            e.stop();
            mySlide.slideOut();
        });

        if(this.bg != "") {
            mySlide.addEvent('complete', function(){
                if (status[mySlide.open] == "open") {
                    bg_change.setStyle('background-position', '0px -22px');
                }
                else {
                    bg_change.setStyle('background-position', '0px 0px');
                }
            });
        }
    }
});

var astStart = {

    start: function() {

        // MainMenu DropDown Menu
        var MainMenu = new MenuMatic({
            id: 'cooptopmenu',
            subMenusContainerId:'MainMenuSub',
            effect: 'slide & fade',
            duration: 1200,
            physics: Fx.Transitions.Pow.easeOut,
            hideDelay: 1000,
            orientation: 'horizontal',
            direction:{ x: 'right', y: 'down' },
            opacity: 90
        });

        var color_to = '#81AA42';
        var color_from = '#535D66';
        var bgcolor_to = '#EAEAEA';
        var bgcolor_from = '#EAEAEA';
        var enterOptionsTop = { 'color': color_to };
        var leaveOptionsTop = { 'color': color_from };
        var topmenuFx = new astMenuFX('#topmenu li a', enterOptionsTop, leaveOptionsTop, { transition: Fx.Transitions.expoOut, duration: 500 });

        var enterColor = '#CBCFD2';
        var enterFontColor = '#81AA42';
        //var enterOptions = { 'background-color': enterColor, 'color': enterFontColor, 'padding-left': 13 };
        var enterOptions = { 'background-color': enterColor, 'color': enterFontColor };
        var leaveColor = '#EAEAEA';
        var leaveFontColor = '#727272';
        //var leaveOptions = { 'background-color': leaveColor, 'color': leaveFontColor, 'padding-left': 23 };
        var leaveOptions = { 'background-color': leaveColor, 'color': leaveFontColor };

        var submenuFx = new astMenuFX('#sidebar ul li a', enterOptions, leaveOptions, { transition: Fx.Transitions.expoOut });

        if ($chk($('coop-slider'))) {
            var opt = {
              duration: 1000,
              delay: 5000,
              auto:true,
              onMouseEnter: function(){this.stop();},
              onMouseLeave: function(){this.play();}
            }
            var scroller = new astScroller('coop-slider',opt);
            scroller.load();
        }


        if ($chk($('user-slider-menu2'))) {
            var dropdown = new astDropDown('', 'user-slider-menu2', 'user-options');
        }

        if ($chk($('message-slider-menu2'))) {
            var dropdown = new astDropDown('', 'message-slider-menu2', 'message-options');
        }

        if ($chk($('display-slider-menu2'))) {
            var dropdown = new astDropDown('', 'display-slider-menu2', 'display-options');
        }
        
        $$('.hasTip').each(function(el) {
            var title = el.get('title');
            var parts = title.split('::', 2);
            el.store('tip:title', parts[0]);
            el.store('tip:text', parts[1]);
        });
   }
};

window.addEvent('domready', astStart.start);


