/***
 * Slideshow.js
 * version 1.5.5
 * Tom McFarlin / May 2008
 *---------------------------------------------------------------------------*/
document.observe('dom:loaded', function(e) {
	if($('slideshow-title'))
		$('slideshow-title').hide();
	$$('div#slideshow-container img').each(function(i) {
		if($$('div#slideshow-container img').first() != i)
			i.hide();
	});
});

Event.observe(window, 'load', function(e) {
	Slideshow.Control.Container = $('slideshow-container');
	Slideshow.Control.Images.All = $$('div#slideshow-container img');
	Slideshow.Control.Titlebar = $('slideshow-title');
		
	Slideshow.Control.Images.All.each(function(i) {
		if(!Slideshow.Control.Images.Widest || Slideshow.Control.Images.Widest.getWidth() < i.getWidth())
			Slideshow.Control.Images.Widest = i;
		if(!Slideshow.Control.Images.Tallest || Slideshow.Control.Images.Tallest.getHeight() < i.getHeight())
			Slideshow.Control.Images.Tallest = i;
		if(i != Slideshow.Control.Images.All.first())
			i.hide();
	});
	
	Slideshow.Methods.start();
	
});

var Slideshow = {

    Version: "1.5.5",

    Browser: {
        IE: Prototype.Browser.IE,
        IE6: parseInt(navigator.appVersion.split('MSIE')[1]) == 6 ? true : false,
        Opera: Prototype.Browser.Opera,
        Safari: Prototype.Browser.WebKit
    },

    Settings: {
        Fade: false,
        Speed: 0,
        Pause: false,
        Manual: false,
        UpperLimit: 0,
        Transition: 1
    },

    Control: {
        Images: {
            Active: null,
            Next: null,
            Largest: null,
            All: null
        },
        Container: null,
        Executer: null,
        PauseMessage: null,
        Titlebar: null
    },

    Util: {
        Images: null,
        Container: null,
        Titlebar: null,
        Executer: null,
        PauseMessage: null,

        Image: {
            Active: null,
            Next: null,
            Widest: null,
            Tallest: null
        }
    },

    Methods: {

        start: function() {

            Slideshow.Methods._setupImages();
            Slideshow.Methods._setupContainer();
            Slideshow.Methods._startExecuter();

        },

        _setupImages: function() {

            Slideshow.Control.Images.All.each(function(i) {
                Slideshow.Methods._setImageStyles(i);
                if (Slideshow.Control.Images.All.first() == i) {
                    Slideshow.Control.Images.Active = i;
                    Slideshow.Methods._updateCaption(Slideshow.Control.Images.Active);
                } else {
                    i.hide();
                }
            });
        },

        _setImageStyles: function(image) {

            var leftMargin = ((Slideshow.Control.Images.Widest.getWidth() - image.getWidth()) / 2);
            leftMargin += 'px';

            /* opera failsafe */
            if (Slideshow.Browser.Opera)
                leftMargin = 0 + 'px';

            var margin = '-' + image.height + 'px';
            if (image.getStyle('margin-bottom') != margin) {
                image.setStyle({
                    marginBottom: margin,
                    float: 'left',
                    marginLeft: leftMargin
                });
            }

        },

        _setupContainer: function() {

            if (Slideshow != null && Slideshow.Control != null && Slideshow.Control.Container != null) {
                Slideshow.Control.Container.setStyle({
                    height: Slideshow.Control.Images.Tallest.getHeight() + 'px',
                    width: Slideshow.Control.Images.Widest.getWidth() + 'px',
                    position: 'relative'
                });

                Slideshow.Control.Container.classNames().each(function(n) {

                    n = n.toLowerCase();

                    if (n == 'fade')
                        Slideshow.Settings.Fade = true;

                    if (n == 'pause') {
                        Slideshow.Settings.Pause = true;
                        Slideshow.Control.Container.observe('mouseover', function(e) {
                            Slideshow.Methods._mouseOverHandler(e);
                        });
                        Slideshow.Control.Container.observe('mouseout', function(e) {
                            Slideshow.Methods._mouseOutHandler(e);
                        });
                    }

                    if (n == 'manual') {
                        Slideshow.Settings.Manual = true;
                        Slideshow.Control.Container.observe('click', function(e) {
                            Slideshow.Methods._mouseClickHandler(e);
                        });
                    }

                    var strParam = n.split(':');
                    if (strParam[0].toLowerCase() == 'speed')
                        Slideshow.Settings.Speed = strParam[1];

                    if (strParam[0].toLowerCase() == 'limit')
                        Slideshow.Settings.UpperLimit = strParam[1];

                    if (strParam[0].toLowerCase() == 'transition')
                        Slideshow.Settings.Transition = strParam[1];



                });
            }
            if (!Slideshow.Control.PauseMessage && Slideshow.Settings.Pause)
                Slideshow.Methods._createPauseMessage();

            if (Slideshow.Control.Titlebar) {
                Slideshow.Control.Titlebar.setStyle({
                    position: 'absolute',
                    bottom: 0
                });
                Slideshow.Control.Titlebar.show();
            }

        },

        _startExecuter: function() {

            if (Slideshow.Settings.Speed != 0) {
                Slideshow.Control.Executer = new PeriodicalExecuter(function(pe) {
                    Slideshow.Methods._rotate();
                }, Slideshow.Settings.Speed);
            }
        },

        _rotate: function() {

            var images = Slideshow.Control.Images.All;
            var image = Slideshow.Control.Images;

            image.Active == images.last() ?
				image.Next = images.first() :
				image.Next = images[images.indexOf(image.Active) + 1];

            if (Slideshow.Settings.UpperLimit != 1) {
                Slideshow.Methods._swap(image.Active, image.Next);
                Slideshow.Settings.UpperLimit--;
            }

        },

        _swap: function(current, next) {

            /* opera failsafe */
            Slideshow.Methods._setImageStyles(current);

            if (Slideshow.Settings.Fade && !Slideshow.Browser.IE6) {
                new Effect.Fade(current, {
                    duration: Slideshow.Settings.Transition
                });
                new Effect.Appear(next, {
                    duration: Slideshow.Settings.Transition
                });
            } else {
                current.hide();
                next.show();
            }

            if (Slideshow.Control.Titlebar)
                Slideshow.Methods._updateCaption(next);

            Slideshow.Control.Images.Active = next;

        },

        _updateCaption: function(image) {

            var titlebar = null;
            if (Slideshow.Control.Titlebar)
                titlebar = Slideshow.Control.Titlebar;
            else
                return;

            if (titlebar.down(0))
                titlebar.removeChild(titlebar.down(0))

            var captionContainer = $(document.createElement('span'));
            var captionText = $(document.createTextNode(image.readAttribute('alt')));
            captionContainer.appendChild(captionText);

            titlebar.appendChild(captionContainer);

        },

        _createPauseMessage: function() {

            var PauseMessage = $(document.createElement('div'));
            var message = document.createTextNode('paused');
            PauseMessage.setAttribute('id', 'slideshow-pause');
            PauseMessage.appendChild(message);

            PauseMessage.setStyle({
                top: '0',
                right: '0',
                position: 'absolute'
            });

            PauseMessage.hide();
            Slideshow.Control.Container.appendChild(PauseMessage);
            Slideshow.Control.PauseMessage = PauseMessage;

        },

        _mouseOverHandler: function(e) {
            e.stopPropagation();
            if (Slideshow.Control.Executer)
                Slideshow.Control.Executer.stop();
            Slideshow.Control.PauseMessage.show();
        },

        _mouseOutHandler: function(e) {
            e.stopPropagation();
            if (Slideshow.Control.Executer)
                Slideshow.Methods._startExecuter();
            Slideshow.Control.PauseMessage.hide();
        },

        _mouseClickHandler: function(e) {
            e.stopPropagation();
            if (Slideshow.Control.Executer)
                Slideshow.Control.Executer.stop();
            if (Slideshow.Control.PauseMessage)
                Slideshow.Control.PauseMessage.hide();
            Slideshow.Methods._rotate();
            if (Slideshow.Control.Executer)
                Slideshow.Methods._startExecuter();
        }
    }
};