(function($){

    var currentSlide = 0;
    var slideInterval;
    var $container;
    var containerWidth;
    var containerHeight;
    var titleWidth;
    var slides;
    var delay;
    var fadeDuration;


    window.homeSlideShow = function(params)
    {
        var params = params || {};

        containerWidth = params.width || 1000;
        containerHeight = params.height || 300;
        slides = params.slides || [];
        titleWidth = params.titleWidth || 280;
        delay = params.delay || 3000;
        fadeDuration = params.fadeDuration || 'slow';

        if (slides.length == 0)
            return;

        $container = $('#' + params.containerId);
        if ($container.length == 0)
            $container = $('<div class="slideshow"></div>').appendTo(document.body);

        $container.css({
                            'width': containerWidth + 'px',
                            'height': containerHeight + 'px'
                    });

        createSlideShow();

        return this;
    }


    function createSlideShow()
    {
        //~ var titleHeight = parseInt(containerHeight / slides.length);
        //~ var titleLastHeight = containerHeight - (titleHeight * (slides.length - 1));
        //~ var titleLeft = containerWidth - titleWidth;
        //~ var titleTop = 0;

        //~ for (var i = 0; i < slides.length; i++)
        //~ {
            //~ $('<div class="slideshow-slide-title"><span></span></div>')
                //~ .attr('slideIndex', i)
                //~ .css({
                        //~ 'top': titleTop + 'px',
                        //~ 'left': titleLeft + 'px',
                        //~ 'width': titleWidth + 'px',
                        //~ 'height': ((i != slides.length - 1) ? titleHeight : titleLastHeight) + 'px'
                    //~ })
                //~ .click(function() {
                        //~ changeSlide(parseInt(this.getAttribute('slideIndex')));
                    //~ })
                //~ .find('span')
                //~ .text(slides[i].title)
                //~ .end()
                //~ .appendTo($container);

            //~ titleTop += titleHeight;
        //~ }



        //~ var $titles = $('.slideshow-slide-title', $container);
        //~ var $titleLast = $titles.last();

        //~ $titles.not(':first').each(function() {
            //~ var titlePos = $(this).position();
            //~ $('<div class="slideshow-title-horiz-sep"></div>')
                //~ .css({
                        //~ 'top': (titlePos.top - 1) + 'px',
                        //~ 'left': titlePos.left + 'px',
                        //~ 'width': titleWidth + 'px'
                    //~ })
                //~ .insertAfter(this);
        //~ })



        //~ var descTop = $titleLast.position().top;
        //~ var descLeft = 0;
        //~ var descWidth = containerWidth - titleWidth;
        //~ var descHeight = $titleLast.height();

        //~ var $desc = $('<div class="slideshow-slide-desc"><span></span></div>')
            //~ .click(function() {
                    //~ goUrl(this.getAttribute('link'));
                //~ })
            //~ .css({
                    //~ 'top': descTop + 'px',
                    //~ 'left': descLeft + 'px',
                    //~ 'width': descWidth + 'px',
                    //~ 'height': descHeight + 'px'
                //~ })
            //~ .appendTo($container);



        //~ $('<div class="slideshow-title-vert-sep"></div>')
            //~ .css({
                    //~ 'top': descTop + 'px',
                    //~ 'left': (descLeft + descWidth - 2) + 'px',
                    //~ 'height': descHeight + 'px'
                //~ })
            //~ .insertAfter($desc);


        var descHeight = 40;
        var descTop = containerHeight - descHeight;
        var descLeft = 0;
        var descWidth = containerWidth;

        var $desc = $('<div class="slideshow-slide-desc"><span></span></div>')
            .click(function() {
                    goUrl(this.getAttribute('link'));
                })
            .css({
                    'top': descTop + 'px',
                    'left': descLeft + 'px',
                    'width': descWidth + 'px',
                    'height': descHeight + 'px'
                })
            .appendTo($container);


        changeSlide(currentSlide);
    }



    function changeSlide(index)
    {
        stop();

        var cursor = slides[index].url ? 'pointer' : 'default';
        var $currentSlide = $('.slideshow-slide-img', $container).stop().css('opacity', 1);


        $('.slideshow-slide-title', $container)
            .removeClass('slideshow-slide-active')
            .eq(index)
            .addClass('slideshow-slide-active');


        if (slides[index].desc.length == 0)
        {
            $('.slideshow-slide-desc, .slideshow-title-vert-sep', $container)
                .hide();
        }
        else
        {
            $('.slideshow-slide-desc', $container)
                .attr('link', slides[index].url)
                .css('cursor', cursor)
                .find('span')
                .text(slides[index].desc)
                .end()
                .show();
            $('.slideshow-title-vert-sep', $container)
                .show()
        }


        $('<img class="slideshow-slide-img">')
            .attr({
                    'src': slides[index].img,
                    'link': slides[index].url
                })
            .css({
                    'left': 0 + 'px',
                    'top': 0 + 'px',
                    'width': containerWidth + 'px',
                    'height': containerHeight + 'px',
                    'cursor': cursor
                })
            .click(function() {
                    goUrl(this.getAttribute('link'));
                })
            .hide()
            .appendTo($container)
            .fadeIn(fadeDuration, function() {
                    $currentSlide.remove();
                    currentSlide = index;
                    start();
                });
    }


    function changeCurrentSlide()
    {
        var nextSlide = currentSlide + 1;
        if (nextSlide >= slides.length)
            nextSlide = 0;

        changeSlide(nextSlide);
    }


    function start()
    {
        slideInterval = setInterval(changeCurrentSlide, delay);
    }


    function stop()
    {
        clearInterval(slideInterval);
    }


    function goUrl(url)
    {
        if (url)
            location.href = url;
    }


})(jQuery);

