﻿/*!
* Time limit JavaScript Library v1.0.0
* http://mrzzcn.diandian.com/
*
* Copyright 2011, Mrzzcn
* Copyright 2011, The Dojo Foundation
* Released under the MIT, BSD, and GPL Licenses.
*
* Date: Fri Oct 14 16:18:33 2011 -9711
*/
(function ($) {

    $.fn.PictureRotation = function (options) {
        $.OtherFunction.debug(this);
        var settings = new Array();
        $.extend(settings, $.fn.PictureRotation.defaults, options);
        // 显示窗口
        var showWindow = $(this);
        // 显示窗口ID
        if (showWindow.attr("id") == undefined || showWindow.attr("id") == "") {
            var id = $.OtherFunction.getRandomID();
            showWindow.attr("id", id);
        }
        // 显示窗口标识
        settings.switchExpression = "#" + showWindow.attr("id");
        // 是否正在执行动画---暂未启用
        settings.moving = false;

        // 轮换图片列表
        var switchItmes = showWindow.children().eq(0).children();
        // 轮换图片数量
        var itemscount = switchItmes.length;
        // 设置轮换图片的方向属性
        for (var i = 0; i < itemscount; i++) {
            switchItmes.eq(i).css("left", i * switchItmes.width());
        }
        // 设置图片容器宽度
        showWindow.children().css("width", switchItmes.width() * itemscount);

        // 分页容器ID
        var pageid = $.OtherFunction.getRandomID();
        // 分页容器
        var $pages;

        // 数字分页
        if (settings.menutype == $.fn.PictureRotation.defaults.menutype) {
            var pageHtml = "<div id=\"" + pageid + "\" class=\"" + settings.numMenu.pageClass + "\" style=\"" + settings.numMenu.pageStyle + "\" >";
            for (var i = 1; i <= itemscount; i++) {
                var page = "<a href=\"#\" ptzz=\"" + i + "\" class=\"" + settings.numMenu.itemClass + "\">" + i + "</a>";
                pageHtml += page;
            }
            pageHtml += "</div>";
            showWindow.append(pageHtml);
            settings.menuExpression = "div[id*='" + pageid + "']>a";
            $pages = showWindow.children("div." + settings.numMenu.pageClass).children("a");
        }
        else {
            // 页面内其他导航方式
            $pages = $(settings.menuExpression);
            $pages.each(function () {
                $(this).attr("ptzz", $(this).index() + 1);
            });

        }
        // 初始化导航选中第一项
        $pages.filter("[ptzz='1']").addClass(settings.menuActive);
        // 导航事件
        $pages.each(function (index) {
            $(this).hover(
            function () {
                var _self = this;
                // 停止事件
                clearTimeout($.fn.PictureRotation.mousemoveEvents[index]);
                // 当鼠标进入超过 0.2 秒, 展开菜单, 并记录到线程 ID 中
                $.fn.PictureRotation.mousemoveEvents[index] = setTimeout(function () {
                    settings.timeToNext = 0;
                    $.OtherFunction.active(settings, $(_self).attr("ptzz"));
                }, 200);
                settings.mousein = true;
            },
            function () { settings.mousein = false; }
            );
        });
        // 初始化导航选中第一项
        showWindow.children("div." + settings.numMenu.pageClass).children("a[ptzz='1']").addClass(settings.menuActive);

        // 鼠标进入事件
        if (settings.mouseinstop) {
            showWindow.hover(
        function () { settings.mousein = true; },
        function () { settings.mousein = false; }
        );
        }
        // 阻止导航的点击事件
        $(settings.menuExpression).click(function () {
            return !settings.clearClick;
        });
        // 自动播放
        if (settings.autoPlay) {
            setInterval(function () {
                if ((settings.mouseinstop && (!settings.mousein)) || (!settings.mouseinstop)) {
                    settings.timeToNext = settings.timeToNext + 100;
                    if (settings.timeToNext == (settings.speed + settings.delay)) {
                        settings.timeToNext = 0;
                        var currentIndex = $pages.filter("." + settings.menuActive).attr("ptzz");
                        currentIndex = parseInt(currentIndex);
                        var next = currentIndex + 1;
                        if (next > $pages.length) { next = 1; }
                        $.OtherFunction.active(settings, next);
                    }
                }
            }, 100);
        }
        return $(this);
    };

    $.OtherFunction = {
        // debugging    
        debug: function ($obj) {
            if (window.console && window.console.log)
                window.console.log('hilight selection count: ' + $obj.size());
        },
        getRandomID: function () {
            var date = new Date();
            var id = date.getHours() + "" + date.getMinutes() + "" + date.getSeconds() + date.getMilliseconds();
            var r = Math.random();
            return id + "" + r;
        },
        clearMoving: function () {

        },
        play: function ($obj, animate, time) {
            $obj.animate(animate, time / 2).animate({}, time / 2);
        },
        autoPaly: function ($items, options) {

        },
        active: function (options, index) {
            var $pages = $(options.menuExpression);
            var $container = $(options.switchExpression).children().first();
            var currentIndex = $pages.filter("." + options.menuActive).attr("ptzz");
            var count = $container.children("div").length;
            if (currentIndex == undefined) {
                currentIndex = count;
            }
            currentIndex = parseInt(currentIndex);
            var next = index;
            if (currentIndex == next) { return false; }
            if (next > count) { next = 1; }
            var width = $container.children("div").width();
            var left = -(index - 1) * width;
            if (options.movieType == "move") {
                $container.animate({ left: left }, options.speed).delay(options.delay).animate({}, options.delay);
            }
            else if (options.movieType == "switch") {
                $container.css("left", left + "px");
                $container.children("div").hide().eq(index - 1).fadeIn(options.speed).delay(options.delay).animate({}, options.delay);
            }
            $pages.removeClass(options.menuActive);
            $pages.filter("[ptzz='" + next + "']").addClass(options.menuActive);
        }

    };
    $.fn.PictureRotation.timeToNext = 100;
    $.fn.PictureRotation.moving = false;
    $.fn.PictureRotation.mousemoveEvents = [];
    // 插件的defaults
    $.fn.PictureRotation.defaults = {
        hascaption: true,
        menutype: "num",
        menuActive: "active",
        menuExpression: "",
        speed: 1000,
        delay: 1000,
        timeToNext: 100,
        numMenu: { pageClass: "paging", pageStyle: "", itemClass: "" },
        movieType: "move",
        mouseinstop: false,
        mousein: false,
        cycleback: true,
        cyclehtml: "",
        autoPlay: true,
        clearClick: true
    };

})(jQuery);    
