/**
 * Slideshow Lite plugin for jQuery
 *
 * v0.5.3
 *
 * Copyright (c) 2009 Fred Wu
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 */

/**
 * Configuration options:
 *
 * pauseSeconds  float    number of seconds between each photo to be displayed
 * fadeSpeed     float    number of seconds for the fading transition, the value should not exceed 'pauseSeconds'
 * width         integer  width of the slideshow, in pixels
 * height        integer  height of the slideshow, in pixels
 * caption       boolean  display photo caption?
 * cssClass      string   name of the CSS class, defaults to 'slideshowlite'
 */








(function($) {
    $.fn.slideshow = function(options) {

        var defaults = {
            pauseSeconds: 10,
            fadeSpeed: 0.5,
            width: 1004,
            height:289,
            caption: true,
            cssClass: 'slideshowlite'
        };


        var options = $.extend(defaults, options);








        // ----------------------------------------
        // slideshow objects and variables
        // ----------------------------------------






        var target = this;

        var items = $(target).children("a");

        var instance;








        // ----------------------------------------
        // some mandontory styling
        // ----------------------------------------




        if (!$(this).hasClass(options.cssClass)) $(this).addClass(options.cssClass);


        $(this).css({

            width: options.width + "px",
            height: options.height + "px"
        });










        // ----------------------------------------
        // create anchor links to make the structure simpler for manupilation
        // ----------------------------------------





        $(this).children("img").wrap(document.createElement("a"));

        $(this).children("a").attr("target");










        // ----------------------------------------
        // add item sequence markups
        // ----------------------------------------




        var i = 1;
        $(this).children("a").each(function() {
            $(this).attr("rel", i++);
        });










        // ----------------------------------------
        // create pagination and caption
        // ----------------------------------------



        $(this).append("<ul></ul>");

        //$(this).append("<ol></ol>");

        var pagination = $(this).children("ul");

        var caption = $(this).children("ol");


        var i = 1;

        var j = 0;

        $(this).children("a").each(function() {

            caption.append("<li>" + $("#" + $(target).attr("id") + " img:nth(" + j++ + ")").attr("alt") + "</li>");

        });
        pagination.fadeTo(0, 1);

        caption.fadeTo(0, 0.6);

        caption.hide();







        // ----------------------------------------
        // shortcuts
        // ----------------------------------------



        var firstItem = $(target).children("a:first");

        var lastItem = $(target).children("a:last");

        var currentItem = firstItem;








        // ----------------------------------------
        // pagination highlight
        // ----------------------------------------



        var paginationHighlight = function(sequence) {
            pagination.children("li").children("a").removeClass("current");

            pagination.children("li").children("a:nth(" + sequence + ")").addClass("current");
        }








        // ----------------------------------------
        // caption
        // ----------------------------------------




        var showCaption = function(sequence) {
            caption.show();

            caption.children("li").hide();
            caption.children("li:nth(" + sequence + ")").fadeIn();
        }






        // ----------------------------------------
        // slideshow logic
        // ----------------------------------------



        var makeSlideshow = function() {







            // pagination click

            pagination.children("li").children("a").click(function() {
                if (!$(this).hasClass("current")) {




                    // select the current item after the pagination click


                    currentItem = $(target).children("a:nth(" + ($(this).text() - 1) + ")");
                    
                    currentItem.show();

                    startSlideshow();
                }
            });





            // pagination highlight



            paginationHighlight(currentItem.attr("rel") - 1);





            // show caption


            if (options.caption == true) {
                showCaption(currentItem.attr("rel") - 1);
            }





            // show the current slide


            currentItem.fadeIn(options.fadeSpeed * 1000, function() {
                $(target).children("a").hide();
                $(this).show().css("z-index", 1);
            });





            // prepare for the next slide

            // determines the next item (or we need to rewind to the first item?)


            if (currentItem.children("img").attr("src") == lastItem.children("img").attr("src")) {
                currentItem = firstItem;

                currentItem.css("z-index", 2);
            }

            else {

                currentItem = currentItem.next();
            }
        };


        var startSlideshow = function() {
            clearInterval(instance);
            makeSlideshow();

            instance = setInterval(makeSlideshow, options.pauseSeconds * 1000);
        };







        // ----------------------------------------
        // start the slideshow!
        // ----------------------------------------





        startSlideshow();

    };


})(jQuery);
