﻿/**************************************************************

Script	: Image Menu
Version	: 2.2
Authors	: Samuel Birch
Desc	: 
Licence	: Open Source MIT Licence

**************************************************************/

var ImageMenu = new Class({

    getOptions: function() {
        return {
            onOpen: false,
            onClose: Class.empty,
            openWidth: 200,
            transition: Fx.Transitions.quadOut,
            duration: 400,
            open: null,
            border: 0
        };
    },

    initialize: function(elements, options) {
        this.setOptions(this.getOptions(), options);

        this.elements = $$(elements);

        this.widths = {};
        this.widths.closed = this.elements[0].getSize().x;

        this.widths.openSelected = this.options.openWidth;
        this.widths.openOthers = Math.max(Math.round(((this.widths.closed * this.elements.length) - (this.widths.openSelected + this.options.border)) / (this.elements.length - 1)), 30);


        this.fx = new Fx.Elements(this.elements, { wait: false, duration: this.options.duration, transition: this.options.transition });

        this.elements.each(function(el, i) {
            el.addEvent('mouseenter', function(e) {
                new Event(e).stop();
                this.reset(i);

            } .bind(this));

            el.addEvent('mouseleave', function(e) {
                new Event(e).stop();
                this.reset(this.options.open);

            } .bind(this));

            var obj = this;

            el.addEvent('click', function(e) {

                if (obj.options.onOpen) {
                    new Event(e).stop();
                    if (obj.options.open == i) {
                        obj.options.open = null;
                        obj.options.onClose(this.href, i);
                    } else {
                        obj.options.open = i;
                        obj.options.onOpen(this.href, i);
                    }


                }

            })

        } .bind(this));

        if (this.options.open) {
            if ($type(this.options.open) == 'number') {
                this.reset(this.options.open);
            } else {
                this.elements.each(function(el, i) {
                    if (el.id == this.options.open) {
                        this.reset(i);
                    }
                }, this);
            }
        }

    },

    reset: function(num) {
        if ($type(num) == 'number') {
            var width = this.widths.openOthers;
            if (num + 1 == this.elements.length) {
                width += this.options.border;
            }
        } else {
            var width = this.widths.closed;
        }

        var obj = {};
        this.elements.each(function(el, i) {
            var w = width;
            if (i == this.elements.length - 1) {
                w = width + 5
            }
            obj[i] = { 'width': w };
        } .bind(this));

        if ($type(num) == 'number') {
            obj[num] = { 'width': this.widths.openSelected };
        }

        this.fx.start(obj);
    }

});

ImageMenu.implement(new Options);
ImageMenu.implement(new Events);


/*************************************************************/
