(function($){
    var ver = "2.10";
    var ie6 = $.browser.msie && /MSIE 6.0/.test(navigator.userAgent);
    $.fn.cycle = function(options){
        return this.each(function(){
            options = options ||
            {};
            if (options.constructor == String) {
                switch (options) {
                    case "stop":
                        if (this.cycleTimeout) {
                            clearTimeout(this.cycleTimeout)
                        }
                        this.cycleTimeout = 0;
                        return;case "pause":
                        this.cyclePause = 1;
                        return;case "resume":
                        this.cyclePause = 0;
                        return;default:
                        options = {
                            fx: options
                        }
                }
            }
            var $cont = $(this);
            var $slides = options.slideExpr ? $(options.slideExpr, this) : $cont.children();
            var els = $slides.get();
            if (els.length < 2) {
                return
            }
            var opts = $.extend({}, $.fn.cycle.defaults, options ||
            {}, $.metadata ? $cont.metadata() : $.meta ? $cont.data() : {});
            if (opts.autostop) {
                opts.countdown = opts.autostopCount || els.length
            }
            opts.before = opts.before ? [opts.before] : [];
            opts.after = opts.after ? [opts.after] : [];
            opts.after.unshift(function(){
                opts.busy = 0
            });
            if (ie6 && opts.cleartype && !opts.cleartypeNoBg) {
                clearTypeFix($slides)
            }
            var cls = this.className;
            var w = parseInt((cls.match(/w:(\d+)/) || [])[1]) || opts.width;
            var h = parseInt((cls.match(/h:(\d+)/) || [])[1]) || opts.height;
            opts.timeout = parseInt((cls.match(/t:(\d+)/) || [])[1]) || opts.timeout;
            if ($cont.css("position") == "static") {
                $cont.css("position", "relative")
            }
            if (w) {
                $cont.width(w)
            }
            if (h && h != "auto") {
                $cont.height(h)
            }
            if (opts.random) {
                opts.randomMap = [];
                for (var i = 0; i < els.length; i++) {
                    opts.randomMap.push(i)
                }
                opts.randomMap.sort(function(a, b){
                    return Math.random() - 0.5
                });
                opts.randomIndex = 0;
                opts.startingSlide = opts.randomMap[0]
            }
            else {
                if (opts.startingSlide >= els.length) {
                    opts.startingSlide = 0
                }
            }
            var first = opts.startingSlide || 0;
            $slides.css("position", "absolute").hide().each(function(i){
                var z = first ? i >= first ? els.length - (i - first) : first - i : els.length - i;
                $(this).css("z-index", z)
            });
            $(els[first]).show();
            if (opts.fit && w) {
                $slides.width(w)
            }
            if (opts.fit && h && h != "auto") {
                $slides.height(h)
            }
            if (opts.pause) {
                $cont.hover(function(){
                    this.cyclePause = 1
                }, function(){
                    this.cyclePause = 0
                })
            }
            var init = $.fn.cycle.transitions[opts.fx];
            if ($.isFunction(init)) {
                init($cont, $slides, opts)
            }
            $slides.each(function(){
                var $el = $(this);
                this.cycleH = (opts.fit && h) ? h : $el.height();
                this.cycleW = (opts.fit && w) ? w : $el.width()
            });
            opts.cssBefore = opts.cssBefore ||
            {};
            opts.animIn = opts.animIn ||
            {};
            opts.animOut = opts.animOut ||
            {};
            $slides.not(":eq(" + first + ")").css(opts.cssBefore);
            if (opts.cssFirst) {
                $($slides[first]).css(opts.cssFirst)
            }
            if (opts.timeout) {
                if (opts.speed.constructor == String) {
                    opts.speed = {
                        slow: 600,
                        fast: 200
                    }[opts.speed] || 400
                }
                if (!opts.sync) {
                    opts.speed = opts.speed / 2
                }
                while ((opts.timeout - opts.speed) < 250) {
                    opts.timeout += opts.speed
                }
            }
            if (opts.easing) {
                opts.easeIn = opts.easeOut = opts.easing
            }
            if (!opts.speedIn) {
                opts.speedIn = opts.speed
            }
            if (!opts.speedOut) {
                opts.speedOut = opts.speed
            }
            opts.slideCount = els.length;
            opts.currSlide = first;
            if (opts.random) {
                opts.nextSlide = opts.currSlide;
                if (++opts.randomIndex == els.length) {
                    opts.randomIndex = 0
                }
                opts.nextSlide = opts.randomMap[opts.randomIndex]
            }
            else {
                opts.nextSlide = opts.startingSlide >= (els.length - 1) ? 0 : opts.startingSlide + 1
            }
            var e0 = $slides[first];
            if (opts.before.length) {
                opts.before[0].apply(e0, [e0, e0, opts, true])
            }
            if (opts.after.length > 1) {
                opts.after[1].apply(e0, [e0, e0, opts, true])
            }
            if (opts.click && !opts.next) {
                opts.next = opts.click
            }
            if (opts.next) {
                $(opts.next).bind("click", function(){
                    return advance(els, opts, opts.rev ? -1 : 1)
                })
            }
            if (opts.prev) {
                $(opts.prev).bind("click", function(){
                    return advance(els, opts, opts.rev ? 1 : -1)
                })
            }
            if (opts.pager) {
                buildPager(els, opts)
            }
            if (opts.timeout) {
                this.cycleTimeout = setTimeout(function(){
                    go(els, opts, 0, !opts.rev)
                }, opts.timeout + (opts.delay || 0))
            }
        })
    };
    function go(els, opts, manual, fwd){
        if (opts.busy) {
            return
        }
        var p = els[0].parentNode, curr = els[opts.currSlide], next = els[opts.nextSlide];
        if (p.cycleTimeout === 0 && !manual) {
            return
        }
        if (!manual && !p.cyclePause && ((opts.autostop && (--opts.countdown <= 0)) || (opts.nowrap && !opts.random && opts.nextSlide < opts.currSlide))) {
            return
        }
        if (manual || !p.cyclePause) {
            if (opts.before.length) {
                $.each(opts.before, function(i, o){
                    o.apply(next, [curr, next, opts, fwd])
                })
            }
            var after = function(){
                if ($.browser.msie && opts.cleartype) {
                    this.style.removeAttribute("filter")
                }
                $.each(opts.after, function(i, o){
                    o.apply(next, [curr, next, opts, fwd])
                })
            };
            if (opts.nextSlide != opts.currSlide) {
                opts.busy = 1;
                if (opts.fxFn) {
                    opts.fxFn(curr, next, opts, after, fwd)
                }
                else {
                    if ($.isFunction($.fn.cycle[opts.fx])) {
                        $.fn.cycle[opts.fx](curr, next, opts, after)
                    }
                    else {
                        $.fn.cycle.custom(curr, next, opts, after)
                    }
                }
            }
            if (opts.random) {
                opts.currSlide = opts.nextSlide;
                if (++opts.randomIndex == els.length) {
                    opts.randomIndex = 0
                }
                opts.nextSlide = opts.randomMap[opts.randomIndex]
            }
            else {
                var roll = (opts.nextSlide + 1) == els.length;
                opts.nextSlide = roll ? 0 : opts.nextSlide + 1;
                opts.currSlide = roll ? els.length - 1 : opts.nextSlide - 1
            }
            if (opts.pager) {
                $(opts.pager).find("a").removeClass("activeSlide").filter("a:eq(" + opts.currSlide + ")").addClass("activeSlide")
            }
        }
        if (opts.timeout) {
            p.cycleTimeout = setTimeout(function(){
                go(els, opts, 0, !opts.rev)
            }, opts.timeout)
        }
    }
    function advance(els, opts, val){
        var p = els[0].parentNode, timeout = p.cycleTimeout;
        if (timeout) {
            clearTimeout(timeout);
            p.cycleTimeout = 0
        }
        opts.nextSlide = opts.currSlide + val;
        if (opts.nextSlide < 0) {
            if (opts.nowrap) {
                return false
            }
            opts.nextSlide = els.length - 1
        }
        else {
            if (opts.nextSlide >= els.length) {
                if (opts.nowrap) {
                    return false
                }
                opts.nextSlide = 0
            }
        }
        if (opts.prevNextClick && typeof opts.prevNextClick == "function") {
            opts.prevNextClick(val > 0, opts.nextSlide, els[opts.nextSlide])
        }
        go(els, opts, 1, val >= 0);
        return false
    }
    function buildPager(els, opts){
        var $p = $(opts.pager);
        $.each(els, function(i, o){
            var $a = (typeof opts.pagerAnchorBuilder == "function") ? $(opts.pagerAnchorBuilder(i, o)) : $('<a href="#">' + (i + 1) + "</a>");
            if ($a.parents("body").length == 0) {
                $a.appendTo($p)
            }
            $a.bind("click", function(){
                opts.nextSlide = i;
                var p = els[0].parentNode, timeout = p.cycleTimeout;
                if (timeout) {
                    clearTimeout(timeout);
                    p.cycleTimeout = 0
                }
                if (typeof opts.pagerClick == "function") {
                    opts.pagerClick(opts.nextSlide, els[opts.nextSlide])
                }
                go(els, opts, 1, !opts.rev);
                return false
            })
        });
        $p.find("a").filter("a:eq(" + opts.startingSlide + ")").addClass("activeSlide")
    }
    function clearTypeFix($slides){
        function hex(s){
            var s = parseInt(s).toString(16);
            return s.length < 2 ? "0" + s : s
        }
        function getBg(e){
            for (; e && e.nodeName.toLowerCase() != "html"; e = e.parentNode) {
                var v = $.css(e, "background-color");
                if (v.indexOf("rgb") >= 0) {
                    var rgb = v.match(/\d+/g);
                    return "#" + hex(rgb[0]) + hex(rgb[1]) + hex(rgb[2])
                }
                if (v && v != "transparent") {
                    return v
                }
            }
            return "#ffffff"
        }
        $slides.each(function(){
            $(this).css("background-color", getBg(this))
        })
    }
    $.fn.cycle.custom = function(curr, next, opts, cb){
        var $l = $(curr), $n = $(next);
        $n.css(opts.cssBefore);
        var fn = function(){
            $n.animate(opts.animIn, opts.speedIn, opts.easeIn, cb)
        };
        $l.animate(opts.animOut, opts.speedOut, opts.easeOut, function(){
            if (opts.cssAfter) {
                $l.css(opts.cssAfter)
            }
            if (!opts.sync) {
                fn()
            }
        });
        if (opts.sync) {
            fn()
        }
    };
    $.fn.cycle.transitions = {
        fade: function($cont, $slides, opts){
            $slides.not(":eq(" + opts.startingSlide + ")").css("opacity", 0);
            opts.before.push(function(){
                $(this).show()
            });
            opts.animIn = {
                opacity: 1
            };
            opts.animOut = {
                opacity: 0
            };
            opts.cssAfter = {
                display: "none"
            }
        }
    };
    $.fn.cycle.ver = function(){
        return ver
    };
    $.fn.cycle.defaults = {
        fx: "fade",
        timeout: 4000,
        speed: 1000,
        speedIn: null,
        speedOut: null,
        click: null,
        next: null,
        prev: null,
        prevNextClick: null,
        pager: null,
        pagerClick: null,
        pagerAnchorBuilder: null,
        before: null,
        after: null,
        easing: null,
        easeIn: null,
        easeOut: null,
        shuffle: null,
        animIn: null,
        animOut: null,
        cssBefore: null,
        cssAfter: null,
        fxFn: null,
        height: "auto",
        startingSlide: 0,
        sync: 1,
        random: 0,
        fit: 0,
        pause: 0,
        autostop: 0,
        delay: 0,
        slideExpr: null,
        cleartype: 0,
        nowrap: 0
    }
})(jQuery);
jQuery.fn.cycle.transitions.scrollUp = function($cont, $slides, opts){
    $cont.css("overflow", "hidden");
    opts.before.push(function(curr, next, opts){
        jQuery(this).show();
        opts.cssBefore.top = next.offsetHeight;
        opts.animOut.top = 0 - curr.offsetHeight
    });
    opts.cssFirst = {
        top: 0
    };
    opts.animIn = {
        top: 0
    };
    opts.cssAfter = {
        display: "none"
    }
};
jQuery.fn.cycle.transitions.scrollDown = function($cont, $slides, opts){
    $cont.css("overflow", "hidden");
    opts.before.push(function(curr, next, opts){
        jQuery(this).show();
        opts.cssBefore.top = 0 - next.offsetHeight;
        opts.animOut.top = curr.offsetHeight
    });
    opts.cssFirst = {
        top: 0
    };
    opts.animIn = {
        top: 0
    };
    opts.cssAfter = {
        display: "none"
    }
};
jQuery.fn.cycle.transitions.scrollLeft = function($cont, $slides, opts){
    $cont.css("overflow", "hidden");
    opts.before.push(function(curr, next, opts){
        jQuery(this).show();
        opts.cssBefore.left = next.offsetWidth;
        opts.animOut.left = 0 - curr.offsetWidth
    });
    opts.cssFirst = {
        left: 0
    };
    opts.animIn = {
        left: 0
    }
};
jQuery.fn.cycle.transitions.scrollRight = function($cont, $slides, opts){
    $cont.css("overflow", "hidden");
    opts.before.push(function(curr, next, opts){
        jQuery(this).show();
        opts.cssBefore.left = 0 - next.offsetWidth;
        opts.animOut.left = curr.offsetWidth
    });
    opts.cssFirst = {
        left: 0
    };
    opts.animIn = {
        left: 0
    }
};
jQuery.fn.cycle.transitions.scrollHorz = function($cont, $slides, opts){
    $cont.css("overflow", "hidden").width();
    opts.before.push(function(curr, next, opts, fwd){
        jQuery(this).show();
        var currW = curr.offsetWidth, nextW = next.offsetWidth;
        opts.cssBefore = fwd ? {
            left: nextW
        } : {
            left: -nextW
        };
        opts.animIn.left = 0;
        opts.animOut.left = fwd ? -currW : currW;
        $slides.not(curr).css(opts.cssBefore)
    });
    opts.cssFirst = {
        left: 0
    };
    opts.cssAfter = {
        display: "none"
    }
};
jQuery.fn.cycle.transitions.scrollVert = function($cont, $slides, opts){
    $cont.css("overflow", "hidden");
    opts.before.push(function(curr, next, opts, fwd){
        jQuery(this).show();
        var currH = curr.offsetHeight, nextH = next.offsetHeight;
        opts.cssBefore = fwd ? {
            top: -nextH
        } : {
            top: nextH
        };
        opts.animIn.top = 0;
        opts.animOut.top = fwd ? currH : -currH;
        $slides.not(curr).css(opts.cssBefore)
    });
    opts.cssFirst = {
        top: 0
    };
    opts.cssAfter = {
        display: "none"
    }
};
jQuery.fn.cycle.transitions.slideX = function($cont, $slides, opts){
    opts.animIn = {
        width: "show"
    };
    opts.animOut = {
        width: "hide"
    }
};
jQuery.fn.cycle.transitions.slideY = function($cont, $slides, opts){
    opts.animIn = {
        height: "show"
    };
    opts.animOut = {
        height: "hide"
    }
};
jQuery.fn.cycle.transitions.shuffle = function($cont, $slides, opts){
    var w = $cont.css("overflow", "visible").width();
    $slides.css({
        left: 0,
        top: 0
    });
    opts.before.push(function(){
        jQuery(this).show()
    });
    opts.speed = opts.speed / 2;
    opts.random = 0;
    opts.shuffle = opts.shuffle ||
    {
        left: -w,
        top: 15
    };
    opts.els = [];
    for (var i = 0; i < $slides.length; i++) {
        opts.els.push($slides[i])
    }
    for (var i = 0; i < opts.startingSlide; i++) {
        opts.els.push(opts.els.shift())
    }
    opts.fxFn = function(curr, next, opts, cb, fwd){
        var $el = fwd ? jQuery(curr) : jQuery(next);
        $el.animate(opts.shuffle, opts.speedIn, opts.easeIn, function(){
            fwd ? opts.els.push(opts.els.shift()) : opts.els.unshift(opts.els.pop());
            if (fwd) {
                for (var i = 0, len = opts.els.length; i < len; i++) {
                    jQuery(opts.els[i]).css("z-index", len - i)
                }
            }
            else {
                var z = jQuery(curr).css("z-index");
                $el.css("z-index", parseInt(z) + 1)
            }
            $el.animate({
                left: 0,
                top: 0
            }, opts.speedOut, opts.easeOut, function(){
                jQuery(fwd ? this : curr).hide();
                if (cb) {
                    cb()
                }
            })
        })
    }
};
jQuery.fn.cycle.transitions.turnUp = function($cont, $slides, opts){
    opts.before.push(function(curr, next, opts){
        jQuery(this).show();
        opts.cssBefore.top = next.cycleH;
        opts.animIn.height = next.cycleH
    });
    opts.cssFirst = {
        top: 0
    };
    opts.cssBefore = {
        height: 0
    };
    opts.animIn = {
        top: 0
    };
    opts.animOut = {
        height: 0
    };
    opts.cssAfter = {
        display: "none"
    }
};
jQuery.fn.cycle.transitions.turnDown = function($cont, $slides, opts){
    opts.before.push(function(curr, next, opts){
        jQuery(this).show();
        opts.animIn.height = next.cycleH;
        opts.animOut.top = curr.cycleH
    });
    opts.cssFirst = {
        top: 0
    };
    opts.cssBefore = {
        top: 0,
        height: 0
    };
    opts.animOut = {
        height: 0
    };
    opts.cssAfter = {
        display: "none"
    }
};
jQuery.fn.cycle.transitions.turnLeft = function($cont, $slides, opts){
    opts.before.push(function(curr, next, opts){
        jQuery(this).show();
        opts.cssBefore.left = next.cycleW;
        opts.animIn.width = next.cycleW
    });
    opts.cssBefore = {
        width: 0
    };
    opts.animIn = {
        left: 0
    };
    opts.animOut = {
        width: 0
    };
    opts.cssAfter = {
        display: "none"
    }
};
jQuery.fn.cycle.transitions.turnRight = function($cont, $slides, opts){
    opts.before.push(function(curr, next, opts){
        jQuery(this).show();
        opts.animIn.width = next.cycleW;
        opts.animOut.left = curr.cycleW
    });
    opts.cssBefore = {
        left: 0,
        width: 0
    };
    opts.animIn = {
        left: 0
    };
    opts.animOut = {
        width: 0
    };
    opts.cssAfter = {
        display: "none"
    }
};
jQuery.fn.cycle.transitions.zoom = function($cont, $slides, opts){
    opts.cssFirst = {
        top: 0,
        left: 0
    };
    opts.cssAfter = {
        display: "none"
    };
    opts.before.push(function(curr, next, opts){
        jQuery(this).show();
        opts.cssBefore = {
            width: 0,
            height: 0,
            top: next.cycleH / 2,
            left: next.cycleW / 2
        };
        opts.animIn = {
            top: 0,
            left: 0,
            width: next.cycleW,
            height: next.cycleH
        };
        opts.animOut = {
            width: 0,
            height: 0,
            top: curr.cycleH / 2,
            left: curr.cycleW / 2
        }
    })
};
jQuery.fn.cycle.transitions.fadeZoom = function($cont, $slides, opts){
    opts.before.push(function(curr, next, opts){
        opts.cssBefore = {
            width: 0,
            height: 0,
            opacity: 1,
            left: next.cycleW / 2,
            top: next.cycleH / 2,
            zIndex: 1
        };
        opts.animIn = {
            top: 0,
            left: 0,
            width: next.cycleW,
            height: next.cycleH
        }
    });
    opts.animOut = {
        opacity: 0
    };
    opts.cssAfter = {
        zIndex: 0
    }
};

