/**
 * @version 	$Id: jquery.fpss.js 651 2011-08-23 11:04:12Z joomlaworks $
 * @package 	Frontpage Slideshow
 * @author 		JoomlaWorks http://www.joomlaworks.gr
 * @copyright Copyright (c) 2006 - 2011 JoomlaWorks Ltd. All rights reserved.
 * @license 	Commercial - This code cannot be redistributed without permission from JoomlaWorks Ltd.
 */

var $FPSS = jQuery.noConflict();

(function ($) {
    $.fpss = function (h, i) {
        var j = this;
        var k = $(h);
        j.init = function (d) {
            j.settings = $.extend({
                autoStart: true,
                transitionTime: 1000,
                interval: 6000,
                timer: false,
                effect: 'crossfade',
                event: 'click',
                textEffect: 'slideDown',
                textEffectTransitionTime: 300,
                next: 0,
                lavalamp: true,
                playLabel: 'Play',
                pauseLabel: 'Pause'
            }, d);
            j.wrapper = k.find('.slides');
            j.navigationWrapper = k.find('.navigation-wrapper');
            j.navigationElements = k.find('.navigation-button');
            j.slides = k.find('.slide');
            j.settings.current = j.slides.length - 1;
            j.buttons = k.find('.navigation-button a');
            j.nextButton = k.find('.navigation-next a');
            j.previousButton = k.find('.navigation-previous a');
            j.controlButton = k.find('.navigation-control a');
            j.texts = k.find('.slidetext');
            j.textsOriginalPositions = new Array();
            j.textsTargetPositions = new Array();
            j.timer = $('.fpssTimer');
            j.navigationBackground = k.find('.navigation-background');
            j.height = parseInt(k.css('height'));
            if (j.navigationBackground.length == 0 || j.navigationElements.length == 0) {
                j.settings.lavalamp = false;
            }
            if (j.timer.length == 0) {
                j.settings.timer = false;
            }
            if (j.texts.length == 0) {
                j.settings.textEffect = false;
            }
            if ($.browser.msie) {
                $('body').addClass('fpssIsIE' + parseInt($.browser.version))
            }
            if (j.settings.effect == 'crossfade') {
                j.slides.css({
                    'position': 'absolute',
                    'opacity': 0
                });
                $(j.slides[j.settings.next]).css({
                    'opacity': 1
                });
                j.slides.each(function (a) {
                    $(this).css('z-index', (j.slides.length) + 1 - a)
                })
            } else if (j.settings.effect == 'carouselVertical') {
                j.wrapper.css('position', 'absolute');
                j.slides.css('position', 'relative');
            } else {
                j.wrapper.css('position', 'absolute');
                j.slides.css('position', 'absolute');
                j.slides.each(function (a) {
                    $(this).css('left', (a) * (k.find('.slides-wrapper').width()) + 'px')
                })
            }
            if (j.settings.textEffect) {
                if (k.hasClass('textEffectSlideRight')) {
                    j.settings.textEffectOrientation = 'slideRight';
                } else if (k.hasClass('textEffectSlideDown')) {
                    j.settings.textEffectOrientation = 'slideDown';
                } else if (k.hasClass('textEffectSlideLeft')) {
                    j.settings.textEffectOrientation = 'slideLeft';
                } else {
                    j.settings.textEffectOrientation = 'slideUp';
                }
                j.texts.each(function (a) {
                    var b = $(this).position();
                    $(this).css({
                        'top': b.top,
                        'left': b.left,
                        'right': 'auto',
                        'bottom': 'auto'
                    });
                    j.textsOriginalPositions[a] = b;
                    var c = {};
                    if (j.settings.textEffectOrientation == 'slideDown') {
                        c.top = -$(this).outerHeight();
                        c.left = b.left
                    } else if (j.settings.textEffectOrientation == 'slideUp') {
                        c.top = $(this).parent().outerHeight();
                        c.left = b.left
                    } else if (j.settings.textEffectOrientation == 'slideLeft') {
                        c.top = b.top;
                        c.left = $(this).parent().outerWidth();
                    } else if (j.settings.textEffectOrientation == 'slideRight') {
                        c.top = b.top;
                        c.left = -$(this).outerWidth();
                    }
                    j.textsTargetPositions[a] = c;
                    if (a != j.settings.next) {
                        $(this).css('top', j.textsTargetPositions[a].top);
                        $(this).css('left', j.textsTargetPositions[a].left);
                    }
                })
            }
            if (j.settings.lavalamp) {
                var e = $(j.navigationElements[j.settings.next]).width();
                var f = $(j.navigationElements[j.settings.next]).height();
                var g = $(j.navigationElements[j.settings.next]).position();
                $(j.navigationBackground).css({
                    'width': e,
                    'height': f,
                    'top': g.top,
                    'left': g.left
                })
            } else {
                j.navigationBackground.remove()
            }
            j.buttons.bind(j.settings.event, function (a) {
                a.preventDefault();
                j.navigate(j.navigationElements.index($(this).parent()))
            });
            if (j.settings.event == 'mouseover') {
                j.buttons.bind('click', function (a) {
                    a.preventDefault();
                    window.location.href = $(this).attr('href')
                })
            }
            j.nextButton.bind('click', function (a) {
                a.preventDefault();
                j.navigate('next');
            });
            j.previousButton.bind('click', function (a) {
                a.preventDefault();
                j.navigate('previous');
            });
            j.controlButton.bind('click', function (a) {
                a.preventDefault();
                if ($(this).parent().hasClass('fpssPause')) {
                    j.clear();
                    $(this).html(j.settings.playLabel)
                } else {
                    j.navigate('next');
                    $(this).html(j.settings.pauseLabel)
                }
                $(this).parent().toggleClass('fpssPlay');
                $(this).parent().toggleClass('fpssPause')
            });
            k.find('.slide-loading').delay(j.settings.transitionTime).fadeOut(j.settings.transitionTime, function () {
                $(this).remove()
            });
            if (j.settings.autoStart) {
                j.navigate(j.settings.next)
            } else {
                j.settings.current = j.settings.next;
                if (j.controlButton) {
                    j.controlButton.html(j.settings.playLabel).parent().removeClass('fpssPause').addClass('fpssPlay')
                }
            }
        };
        j.navigate = function (a) {
            if (a == 'next') {
                if (j.settings.current < (j.slides.length - 1)) {
                    j.settings.next = j.settings.current + 1;
                } else {
                    j.settings.next = 0;
                }
            } else if (a == 'previous') {
                if (j.settings.current > 0) {
                    j.settings.next = j.settings.current - 1;
                } else {
                    j.settings.next = j.slides.length - 1;
                }
            } else {
                j.settings.next = a
            }
            if (j.settings.current != j.settings.next && j.settings.next != -1) {
                j.clear();
                j.effect();
                if (j.settings.lavalamp) {
                    j.lavalamp()
                } else {
                    j.setActive()
                }
            }
        };
        j.effect = function () {
            if (j.settings.effect == 'crossfade') {
                var a = j.crossfade;
            } else {
                var a = j.carousel;
            }
            if (j.settings.textEffect) {
                var b = {};
                b['top'] = j.textsTargetPositions[j.settings.current].top;
                b['left'] = j.textsTargetPositions[j.settings.current].left;
                $(j.texts[j.settings.current]).animate(b, j.settings.textEffectTransitionTime, a)
            } else {
                a()
            }
        };
        j.crossfade = function () {
            $(j.slides[j.settings.current]).animate({
                'opacity': 0,
                'z-index': 89
            }, j.settings.transitionTime);
            j.settings.current = j.settings.next;
            $(j.slides[j.settings.next]).animate({
                'opacity': 1,
                'z-index': 90
            }, j.settings.transitionTime, j.callback)
        };
        j.carousel = function () {
            var a = $(j.slides[j.settings.next]).position();
            $(j.wrapper).animate({
                'top': -a.top,
                'left': -a.left
            }, j.settings.transitionTime, j.callback);
            j.settings.current = j.settings.next;
        };
        j.callback = function () {
            if (j.settings.textEffect) {
                var a = {};
                a['top'] = j.textsOriginalPositions[j.settings.next].top;
                a['left'] = j.textsOriginalPositions[j.settings.next].left;
                $(j.texts[j.settings.next]).animate(a, j.settings.textEffectTransitionTime)
            }
            if (j.controlButton && $(j.controlButton).parent().hasClass('fpssPlay')) {
                return
            }
            j.loop = setInterval(function () {
                j.navigate('next')
            }, j.settings.interval);
            if (j.settings.timer) {
                $(j.timer).css({
                    'width': 0,
                    'opacity': 1
                });
                $(j.timer).animate({
                    'width': '100%'
                }, j.settings.interval, 'linear', function () {
                    $(this).animate({
                        'opacity': 0
                    }, 400)
                })
            }
        };
        j.lavalamp = function () {
            j.navigationElements.removeClass('active');
            var a = $(j.navigationElements[j.settings.next]).position();
            $(j.navigationBackground).animate({
                'top': a.top + j.navigationWrapper.scrollTop(),
                'left': a.left,
                'width': $(j.navigationElements[j.settings.next]).width(),
                'height': $(j.navigationElements[j.settings.next]).height()
            }, j.settings.transitionTime, j.setActive)
        };
        j.setActive = function () {
            j.navigationElements.removeClass('active');
            $(j.navigationElements[j.settings.next]).addClass('active');
        };
        j.clear = function () {
            j.slides.stop(true, true);
            j.texts.stop(true, false);
            j.timer.stop(true, true);
            j.wrapper.stop(true, false);
            j.navigationBackground.stop(true, false);
            if (typeof (j.loop) != 'undefined') {
                clearInterval(j.loop)
            }
        };
        j.init(i)
    };
    $.fn.fpss = function (b) {
        return this.each(function () {
            if (undefined === $(this).data('fpss')) {
                var a = new $.fpss(this, b);
                $(this).data('fpss', a);
            }
        })
    }
})(jQuery);
