/*
*    Copyright [2011] [wisemapping]
*
*   Licensed under WiseMapping Public License, Version 1.0 (the "License").
*   It is basically the Apache License, Version 2.0 (the "License") plus the
*   "powered by wisemapping" text requirement on every single page;
*   you may not use this file except in compliance with the License.
*   You may obtain a copy of the license at
*
*       http://www.wisemapping.org/license
*
*   Unless required by applicable law or agreed to in writing, software
*   distributed under the License is distributed on an "AS IS" BASIS,
*   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*   See the License for the specific language governing permissions and
*   limitations under the License.
*/

/*
var _START_TRANSITION_TIME = 2000;
var _WAITING_PERIOD = 2800;
var _TRANSITION_TIME = 800;

slideShow = {
    init: function (options) {
        // init default options
        this.options = Object.extend({
            startTransitionTime: _START_TRANSITION_TIME,
            waitingPeriod: _WAITING_PERIOD,
            transitionTime: _TRANSITION_TIME
        }, options || {});
        this.scanScreen();
        this.img = new Element('img').injectInside(this.screen);

        var nextEffect = this.nextEffect.bind(this);

        this.imgEffect = this.img.effect('opacity', { duration: this.options.startTransitionTime, onComplete: nextEffect }).hide();
        this.steps = 0;
        this.nextEffect();

    },
    scanScreen: function () {
        var el = $E('img[rel]', $(window.body));
        el.rel = el.getProperty('rel');
        el.srcs = el.getProperty('srcs');
        if (el.rel.test('^slideShow', 'i'))
        {
            var parent = el.getParent();
            el.remove();
            var aDim = el.rel.match(/[0-9.]+(px|%)/g);
            var width = "500px";
            var height = "200px";
            if (aDim && aDim[0])
            {
                var w = aDim[0].toInt();
                if (w > 0)
                    width = w;
            }
            if (aDim && aDim[1])
            {
                var h = aDim[1].toInt();
                if (h > 0)
                    height = h;
            }
            this.screen = new Element('div').setProperties({width:width, height:height}).injectInside(parent);
            if (el.srcs)
                this.screen.srcs = el.srcs;
        }
    },
    nextEffect: function () {
        switch (this.steps++)
                {
            case 0:
                if (this.showing)
                    this.imgEffect.options.duration = this.options.transitionTime;
                var srcs = this.screen.srcs.split(',');
                if (!$defined(this.index))
                {
                    this.index = 0;
                }
                else
                {
                    this.index++;
                    if (this.index >= srcs.length)
                        this.index = 0;
                }
                this.img.src = srcs[this.index];
                this.showing = true;
                this.imgEffect.start(0, 1);
                break;
            case 1:
                this.nextEffect.delay(this.options.waitingPeriod, this);
                break;
            case 2:
                this.steps = 0;
                this.imgEffect.start(1, 0);
                break;
        }
    }
};

window.onDomReady(slideShow.init.bind(slideShow));
*/
var SlideShow = new Class({
    options: {
        id: 'SlideShow',
        startTransitionTime: 2000,
        waitingPeriod: 6000,
        transitionTime: 800
    },

    initialize: function(el, options) {
        // init default options
        this.setOptions(options);
        this.container = el;
        this.buildScreen();

        var nextEffect = this.nextEffect.bind(this);

        this.imgEffect = this.container.effect('opacity', { duration: this.options.startTransitionTime, onComplete: nextEffect }).hide();
        this.steps = 0;
        this.nextEffect();

    },
    buildScreen: function () {
        this.container.rel = this.container.getProperty('rel');
        this.container.srcs = this.container.getProperty('srcs');
        if (this.container.rel.test('^slideShow', 'i'))
        {
            var aDim = this.container.rel.match(/[0-9.]+(px|%)/g);
            var width = "500px";
            var height = "200px";
            if (aDim && aDim[0])
            {
                var w = aDim[0].toInt();
                if (w > 0)
                    width = w;
            }
            if (aDim && aDim[1])
            {
                var h = aDim[1].toInt();
                if (h > 0)
                    height = h;
            }
            this.container.setProperties({width:width, height:height});
            if (this.container.srcs)
                this.srcs = this.container.srcs.split(',');
        }
    },
    nextEffect: function () {
        switch (this.steps++)
                {
            case 0:
                if (this.showing)
                    this.imgEffect.options.duration = this.options.transitionTime;
                if (!$defined(this.index))
                {
                    this.index = 0;
                }
                else
                {
                    this.index++;
                    if (this.index >= this.srcs.length)
                        this.index = 0;
                    var firstElem = this.container.getFirst();
                    firstElem.remove();
                    firstElem.setStyle('display', 'none');
                    firstElem.injectInside(this.slidesContainer);
                }

                var nextElem = $(this.srcs[this.index]);
                if (!$defined(this.slidesContainer))
                    this.slidesContainer = nextElem.getParent();
                nextElem.injectInside(this.container);
                nextElem.setStyle('display', 'block');
                this.showing = true;
                this.imgEffect.start(0, 1);
                break;
            case 1:
                this.nextEffect.delay(this.options.waitingPeriod, this);
                break;
            case 2:
                this.steps = 0;
                this.imgEffect.start(1, 0);
                break;
        }
    }
});
SlideShow.implement(new Options);
