/**
 * jQuery bxSlider v3.0
 * http://bxslider.com
 *
 * Copyright 2010, Steven Wanderski
 * http://stevenwanderski.com
 *
 * Free to use and abuse under the MIT license.
 * http://www.opensource.org/licenses/mit-license.php
 * 
 */
(function ($) {
        $.fn.bxSlider = function (options) {
                var defaults = {
                        mode: 'horizontal',
                        infiniteLoop: true,
                        hideControlOnEnd: false,
                        controls: true,
                        speed: 500,
                        easing: 'swing',
                        pager: false,
                        pagerSelector: null,
                        pagerType: 'full',
                        pagerLocation: 'bottom',
                        pagerShortSeparator: '/',
                        pagerActiveClass: 'pager-active',
                        nextText: 'next',
                        nextImage: '',
                        nextSelector: null,
                        prevText: 'prev',
                        prevImage: '',
                        prevSelector: null,
                        captions: false,
                        captionsSelector: null,
                        auto: false,
                        autoDirection: 'next',
                        autoControls: false,
                        autoControlsSelector: null,
                        autoStart: true,
                        autoHover: false,
                        autoDelay: 0,
                        pause: 3000,
                        startText: 'start',
                        startImage: '',
                        stopText: 'stop',
                        stopImage: '',
                        ticker: false,
                        tickerSpeed: 5000,
                        tickerDirection: 'next',
                        tickerHover: false,
                        wrapperClass: 'bx-wrapper',
                        startingSlide: 0,
                        displaySlideQty: 1,
                        moveSlideQty: 1,
                        randomStart: false,
                        onBeforeSlide: function () {},
                        onAfterSlide: function () {},
                        onLastSlide: function () {},
                        onFirstSlide: function () {},
                        onNextSlide: function () {},
                        onPrevSlide: function () {},
                        buildPager: null
                }
                var options = $.extend(defaults, options);
                var base = this;
                var $parent = '';
                var $origElement = '';
                var $children = '';
                var $outerWrapper = '';
                var $firstChild = '';
                var childrenWidth = '';
                var childrenOuterWidth = '';
                var wrapperWidth = '';
                var wrapperHeight = '';
                var $pager = '';
                var interval = '';
                var $autoControls = '';
                var $stopHtml = '';
                var $startContent = '';
                var $stopContent = '';
                var autoPlaying = true;
                var loaded = false;
                var childrenMaxWidth = 0;
                var childrenMaxHeight = 0;
                var currentSlide = 0;
                var origLeft = 0;
                var origTop = 0;
                var origShowWidth = 0;
                var origShowHeight = 0;
                var tickerLeft = 0;
                var tickerTop = 0;
                var isWorking = false;
                var firstSlide = 0;
                var lastSlide = $children.length - 1;
                this.goToSlide = function (number, stopAuto) {
                        if (!isWorking) {
                                isWorking = true;
                                currentSlide = number;
                                options.onBeforeSlide(currentSlide, $children.length, $children.eq(currentSlide));
                                if (typeof (stopAuto) == 'undefined') {
                                        var stopAuto = true;
                                }
                                if (stopAuto) {
                                        if (options.auto) {
                                                base.stopShow(true);
                                        }
                                }
                                slide = number;
                                if (slide == firstSlide) {
                                        options.onFirstSlide(currentSlide, $children.length, $children.eq(currentSlide));
                                }
                                if (slide == lastSlide) {
                                        options.onLastSlide(currentSlide, $children.length, $children.eq(currentSlide));
                                }
                                if (options.mode == 'horizontal') {
                                        $parent.animate({
                                                'left': '-' + getSlidePosition(slide, 'left') + 'px'
                                        }, options.speed, options.easing, function () {
                                                isWorking = false;
                                                options.onAfterSlide(currentSlide, $children.length, $children.eq(currentSlide));
                                        });
                                } else if (options.mode == 'vertical') {
                                        $parent.animate({
                                                'top': '-' + getSlidePosition(slide, 'top') + 'px'
                                        }, options.speed, options.easing, function () {
                                                isWorking = false;
                                                options.onAfterSlide(currentSlide, $children.length, $children.eq(currentSlide));
                                        });
                                } else if (options.mode == 'fade') {
                                        setChildrenFade();
                                }
                                checkEndControls();
                                if (options.moveSlideQty > 1) {
                                        number = Math.floor(number / options.moveSlideQty);
                                }
                                makeSlideActive(number);
                                showCaptions();
                        }
                }
                this.goToNextSlide = function (stopAuto) {
                        if (typeof (stopAuto) == 'undefined') {
                                var stopAuto = true;
                        }
                        if (stopAuto) {
                                if (options.auto) {
                                        base.stopShow(true);
                                }
                        }
                        if (!options.infiniteLoop) {
                                if (!isWorking) {
                                        var slideLoop = false;
                                        currentSlide = (currentSlide + (options.moveSlideQty));
                                        if (currentSlide <= lastSlide) {
                                                checkEndControls();
                                                options.onNextSlide(currentSlide, $children.length, $children.eq(currentSlide));
                                                base.goToSlide(currentSlide);
                                        } else {
                                                currentSlide -= options.moveSlideQty;
                                        }
                                }
                        } else {
                                if (!isWorking) {
                                        isWorking = true;
                                        var slideLoop = false;
                                        currentSlide = (currentSlide + options.moveSlideQty);
                                        if (currentSlide > lastSlide) {
                                                currentSlide = currentSlide % $children.length;
                                                slideLoop = true;
                                        }
                                        options.onNextSlide(currentSlide, $children.length, $children.eq(currentSlide));
                                        options.onBeforeSlide(currentSlide, $children.length, $children.eq(currentSlide));
                                        if (options.mode == 'horizontal') {
                                                var parentLeft = (options.moveSlideQty * childrenOuterWidth);
                                                $parent.animate({
                                                        'left': '-=' + parentLeft + 'px'
                                                }, options.speed, options.easing, function () {
                                                        isWorking = false;
                                                        if (slideLoop) {
                                                                $parent.css('left', '-' + getSlidePosition(currentSlide, 'left') + 'px');
                                                        }
                                                        options.onAfterSlide(currentSlide, $children.length, $children.eq(currentSlide));
                                                });
                                        } else if (options.mode == 'vertical') {
                                                var parentTop = (options.moveSlideQty * childrenMaxHeight);
                                                $parent.animate({
                                                        'top': '-=' + parentTop + 'px'
                                                }, options.speed, options.easing, function () {
                                                        isWorking = false;
                                                        if (slideLoop) {
                                                                $parent.css('top', '-' + getSlidePosition(currentSlide, 'top') + 'px');
                                                        }
                                                        options.onAfterSlide(currentSlide, $children.length, $children.eq(currentSlide));
                                                });
                                        } else if (options.mode == 'fade') {
                                                setChildrenFade();
                                        }
                                        if (options.moveSlideQty > 1) {
                                                makeSlideActive(Math.ceil(currentSlide / options.moveSlideQty));
                                        } else {
                                                makeSlideActive(currentSlide);
                                        }
                                        showCaptions();
                                }
                        }
                }
                this.goToPreviousSlide = function (stopAuto) {
                        if (typeof (stopAuto) == 'undefined') {
                                var stopAuto = true;
                        }
                        if (stopAuto) {
                                if (options.auto) {
                                        base.stopShow(true);
                                }
                        }
                        if (!options.infiniteLoop) {
                                if (!isWorking) {
                                        var slideLoop = false;
                                        currentSlide = currentSlide - options.moveSlideQty;
                                        if (currentSlide < 0) {
                                                currentSlide = 0;
                                                if (options.hideControlOnEnd) {
                                                        $('.bx-prev', $outerWrapper).hide();
                                                }
                                        }
                                        checkEndControls();
                                        options.onPrevSlide(currentSlide, $children.length, $children.eq(currentSlide));
                                        base.goToSlide(currentSlide);
                                }
                        } else {
                                if (!isWorking) {
                                        isWorking = true;
                                        var slideLoop = false;
                                        currentSlide = (currentSlide - (options.moveSlideQty));
                                        if (currentSlide < 0) {
                                                negativeOffset = (currentSlide % $children.length);
                                                if (negativeOffset == 0) {
                                                        currentSlide = 0;
                                                } else {
                                                        currentSlide = ($children.length) + negativeOffset;
                                                }
                                                slideLoop = true;
                                        }
                                        options.onPrevSlide(currentSlide, $children.length, $children.eq(currentSlide));
                                        options.onBeforeSlide(currentSlide, $children.length, $children.eq(currentSlide));
                                        if (options.mode == 'horizontal') {
                                                var parentLeft = (options.moveSlideQty * childrenOuterWidth);
                                                $parent.animate({
                                                        'left': '+=' + parentLeft + 'px'
                                                }, options.speed, options.easing, function () {
                                                        isWorking = false;
                                                        if (slideLoop) {
                                                                $parent.css('left', '-' + getSlidePosition(currentSlide, 'left') + 'px');
                                                        }
                                                        options.onAfterSlide(currentSlide, $children.length, $children.eq(currentSlide));
                                                });
                                        } else if (options.mode == 'vertical') {
                                                var parentTop = (options.moveSlideQty * childrenMaxHeight);
                                                $parent.animate({
                                                        'top': '+=' + parentTop + 'px'
                                                }, options.speed, options.easing, function () {
                                                        isWorking = false;
                                                        if (slideLoop) {
                                                                $parent.css('top', '-' + getSlidePosition(currentSlide, 'top') + 'px');
                                                        }
                                                        options.onAfterSlide(currentSlide, $children.length, $children.eq(currentSlide));
                                                });
                                        } else if (options.mode == 'fade') {
                                                setChildrenFade();
                                        }
                                        if (options.moveSlideQty > 1) {
                                                makeSlideActive(Math.ceil(currentSlide / options.moveSlideQty));
                                        } else {
                                                makeSlideActive(currentSlide);
                                        }
                                        showCaptions();
                                }
                        }
                }
                this.goToFirstSlide = function (stopAuto) {
                        if (typeof (stopAuto) == 'undefined') {
                                var stopAuto = true;
                        }
                        base.goToSlide(firstSlide, stopAuto);
                }
                this.goToLastSlide = function () {
                        if (typeof (stopAuto) == 'undefined') {
                                var stopAuto = true;
                        }
                        base.goToSlide(lastSlide, stopAuto);
                }
                this.getCurrentSlide = function () {
                        return currentSlide;
                }
                this.getSlideCount = function () {
                        return $children.length;
                }
                this.stopShow = function (changeText) {
                        clearInterval(interval);
                        if (typeof (changeText) == 'undefined') {
                                var changeText = true;
                        }
                        if (changeText && options.autoControls) {
                                $autoControls.html($startContent).removeClass('stop').addClass('start');
                                autoPlaying = false;
                        }
                }
                this.startShow = function (changeText) {
                        if (typeof (changeText) == 'undefined') {
                                var changeText = true;
                        }
                        setAutoInterval();
                        if (changeText && options.autoControls) {
                                $autoControls.html($stopContent).removeClass('start').addClass('stop');
                                autoPlaying = true;
                        }
                }
                this.stopTicker = function (changeText) {
                        $parent.stop();
                        if (typeof (changeText) == 'undefined') {
                                var changeText = true;
                        }
                        if (changeText && options.ticker) {
                                $autoControls.html($startContent).removeClass('stop').addClass('start');
                                autoPlaying = false;
                        }
                }
                this.startTicker = function (changeText) {
                        if (options.mode == 'horizontal') {
                                if (options.tickerDirection == 'next') {
                                        var stoppedLeft = parseInt($parent.css('left'));
                                        var remainingDistance = (origShowWidth + stoppedLeft) + $children.eq(0).width();
                                } else if (options.tickerDirection == 'prev') {
                                        var stoppedLeft = -parseInt($parent.css('left'));
                                        var remainingDistance = (stoppedLeft) - $children.eq(0).width();
                                }
                                var finishingSpeed = (remainingDistance * options.tickerSpeed) / origShowWidth;
                                moveTheShow(tickerLeft, remainingDistance, finishingSpeed);
                        } else if (options.mode == 'vertical') {
                                if (options.tickerDirection == 'next') {
                                        var stoppedTop = parseInt($parent.css('top'));
                                        var remainingDistance = (origShowHeight + stoppedTop) + $children.eq(0).height();
                                } else if (options.tickerDirection == 'prev') {
                                        var stoppedTop = -parseInt($parent.css('top'));
                                        var remainingDistance = (stoppedTop) - $children.eq(0).height();
                                }
                                var finishingSpeed = (remainingDistance * options.tickerSpeed) / origShowHeight;
                                moveTheShow(tickerTop, remainingDistance, finishingSpeed);
                                if (typeof (changeText) == 'undefined') {
                                        var changeText = true;
                                }
                                if (changeText && options.ticker) {
                                        $autoControls.html($stopContent).removeClass('start').addClass('stop');
                                        autoPlaying = true;
                                }
                        }
                }
                this.initShow = function () {
                        $parent = $(this);
                        $origElement = $parent.clone();
                        $children = $parent.children();
                        $outerWrapper = '';
                        $firstChild = $parent.children(':first');
                        childrenWidth = $firstChild.width();
                        childrenMaxWidth = 0;
                        childrenOuterWidth = $firstChild.outerWidth();
                        childrenMaxHeight = 0;
                        wrapperWidth = getWrapperWidth();
                        wrapperHeight = getWrapperHeight();
                        isWorking = false;
                        $pager = '';
                        currentSlide = 0;
                        origLeft = 0;
                        origTop = 0;
                        interval = '';
                        $autoControls = '';
                        $stopHtml = '';
                        $startContent = '';
                        $stopContent = '';
                        autoPlaying = true;
                        loaded = false;
                        origShowWidth = 0;
                        origShowHeight = 0;
                        tickerLeft = 0;
                        tickerTop = 0;
                        firstSlide = 0;
                        lastSlide = $children.length - 1;
                        $children.each(function (index) {
                                if ($(this).outerHeight() > childrenMaxHeight) {
                                        childrenMaxHeight = $(this).outerHeight();
                                }
                                if ($(this).outerWidth() > childrenMaxWidth) {
                                        childrenMaxWidth = $(this).outerWidth();
                                }
                        });
                        if (options.randomStart) {
                                var randomNumber = Math.floor(Math.random() * $children.length);
                                currentSlide = randomNumber;
                                origLeft = childrenOuterWidth * (options.moveSlideQty + randomNumber);
                                origTop = childrenMaxHeight * (options.moveSlideQty + randomNumber);
                        } else {
                                currentSlide = options.startingSlide;
                                origLeft = childrenOuterWidth * (options.moveSlideQty + options.startingSlide);
                                origTop = childrenMaxHeight * (options.moveSlideQty + options.startingSlide);
                        }
                        initCss();
                        if (options.pager && !options.ticker) {
                                if (options.pagerType == 'full') {
                                        showPager('full');
                                } else if (options.pagerType == 'short') {
                                        showPager('short');
                                }
                        }
                        if (options.controls && !options.ticker) {
                                setControlsVars();
                        }
                        if (options.auto || options.ticker) {
                                if (options.autoControls) {
                                        setAutoControlsVars();
                                }
                                if (options.autoStart) {
                                        setTimeout(function () {
                                                base.startShow(true);
                                        }, options.autoDelay);
                                } else {
                                        base.stopShow(true);
                                }
                                if (options.autoHover && !options.ticker) {
                                        setAutoHover();
                                }
                        }
                        if (options.moveSlideQty > 1) {
                                makeSlideActive(Math.ceil(currentSlide / options.moveSlideQty));
                        } else {
                                makeSlideActive(currentSlide);
                        }
                        checkEndControls();
                        if (options.captions) {
                                showCaptions();
                        }
                        options.onAfterSlide(currentSlide, $children.length, $children.eq(currentSlide));
                }
                this.destroyShow = function () {
                        clearInterval(interval);
                        $('.bx-next, .bx-prev, .bx-pager, .bx-auto', $outerWrapper).remove();
                        $parent.unwrap().unwrap().removeAttr('style');
                        $parent.children().removeAttr('style').not('.pager').remove();
                        $children.removeClass('pager');
                }
                this.reloadShow = function () {
                        base.destroyShow();
                        base.initShow();
                }

                function initCss() {
                        setChildrenLayout(options.startingSlide);
                        if (options.mode == 'horizontal') {
                                $parent.wrap('<div class="' + options.wrapperClass + '" style="width:' + wrapperWidth + 'px; position:relative;"></div>').wrap('<div class="bx-window" style="position:relative; overflow:hidden; width:' + wrapperWidth + 'px;"></div>').css({
                                        width: '999999px',
                                        position: 'relative',
                                        left: '-' + (origLeft) + 'px'
                                });
                                $parent.children().css({
                                        width: childrenWidth,
                                        'float': 'left',
                                        listStyle: 'none'
                                });
                                $outerWrapper = $parent.parent().parent();
                                $children.addClass('pager');
                        } else if (options.mode == 'vertical') {
                                $parent.wrap('<div class="' + options.wrapperClass + '" style="width:' + childrenMaxWidth + 'px; position:relative;"></div>').wrap('<div class="bx-window" style="width:' + childrenMaxWidth + 'px; height:' + wrapperHeight + 'px; position:relative; overflow:hidden;"></div>').css({
                                        height: '999999px',
                                        position: 'relative',
                                        top: '-' + (origTop) + 'px'
                                });
                                $parent.children().css({
                                        listStyle: 'none',
                                        height: childrenMaxHeight
                                });
                                $outerWrapper = $parent.parent().parent();
                                $children.addClass('pager');
                        } else if (options.mode == 'fade') {
                                $parent.wrap('<div class="' + options.wrapperClass + '" style="width:' + childrenMaxWidth + 'px; position:relative;"></div>').wrap('<div class="bx-window" style="height:' + childrenMaxHeight + 'px; width:' + childrenMaxWidth + 'px; position:relative; overflow:hidden;"></div>');
                                $parent.children().css({
                                        listStyle: 'none',
                                        position: 'absolute',
                                        top: 0,
                                        left: 0,
                                        zIndex: 98
                                });
                                $outerWrapper = $parent.parent().parent();
                                $children.not(':eq(' + currentSlide + ')').fadeTo(0, 0);
                                $children.eq(currentSlide).css('zIndex', 99);
                        }
                        if (options.captions && options.captionsSelector == null) {
                                $outerWrapper.append('<div class="bx-captions"></div>');
                        }
                }

                function setChildrenLayout() {
                        if (options.mode == 'horizontal' || options.mode == 'vertical') {
                                var $prependedChildren = getArraySample($children, 0, options.moveSlideQty, 'backward');
                                $.each($prependedChildren, function (index) {
                                        $parent.prepend($(this));
                                });
                                var totalNumberAfterWindow = ($children.length + options.moveSlideQty) - 1;
                                var pagerExcess = $children.length - options.displaySlideQty;
                                var numberToAppend = totalNumberAfterWindow - pagerExcess;
                                var $appendedChildren = getArraySample($children, 0, numberToAppend, 'forward');
                                if (options.infiniteLoop) {
                                        $.each($appendedChildren, function (index) {
                                                $parent.append($(this));
                                        });
                                }
                        }
                }

                function setControlsVars() {
                        if (options.nextImage != '') {
                                nextContent = options.nextImage;
                                nextType = 'image';
                        } else {
                                nextContent = options.nextText;
                                nextType = 'text';
                        }
                        if (options.prevImage != '') {
                                prevContent = options.prevImage;
                                prevType = 'image';
                        } else {
                                prevContent = options.prevText;
                                prevType = 'text';
                        }
                        showControls(nextType, nextContent, prevType, prevContent);
                }

                function setAutoInterval() {
                        if (options.auto) {
                                if (!options.infiniteLoop) {
                                        if (options.autoDirection == 'next') {
                                                interval = setInterval(function () {
                                                        currentSlide += options.moveSlideQty;
                                                        if (currentSlide > lastSlide) {
                                                                currentSlide = currentSlide % $children.length;
                                                        }
                                                        base.goToSlide(currentSlide, false);
                                                }, options.pause);
                                        } else if (options.autoDirection == 'prev') {
                                                interval = setInterval(function () {
                                                        currentSlide -= options.moveSlideQty;
                                                        if (currentSlide < 0) {
                                                                negativeOffset = (currentSlide % $children.length);
                                                                if (negativeOffset == 0) {
                                                                        currentSlide = 0;
                                                                } else {
                                                                        currentSlide = ($children.length) + negativeOffset;
                                                                }
                                                        }
                                                        base.goToSlide(currentSlide, false);
                                                }, options.pause);
                                        }
                                } else {
                                        if (options.autoDirection == 'next') {
                                                interval = setInterval(function () {
                                                        base.goToNextSlide(false);
                                                }, options.pause);
                                        } else if (options.autoDirection == 'prev') {
                                                interval = setInterval(function () {
                                                        base.goToPreviousSlide(false);
                                                }, options.pause);
                                        }
                                }
                        } else if (options.ticker) {
                                options.tickerSpeed *= 10;
                                $('.pager', $outerWrapper).each(function (index) {
                                        origShowWidth += $(this).width();
                                        origShowHeight += $(this).height();
                                });
                                if (options.tickerDirection == 'prev' && options.mode == 'horizontal') {
                                        $parent.css('left', '-' + (origShowWidth + origLeft) + 'px');
                                } else if (options.tickerDirection == 'prev' && options.mode == 'vertical') {
                                        $parent.css('top', '-' + (origShowHeight + origTop) + 'px');
                                }
                                if (options.mode == 'horizontal') {
                                        tickerLeft = parseInt($parent.css('left'));
                                        moveTheShow(tickerLeft, origShowWidth, options.tickerSpeed);
                                } else if (options.mode == 'vertical') {
                                        tickerTop = parseInt($parent.css('top'));
                                        moveTheShow(tickerTop, origShowHeight, options.tickerSpeed);
                                }
                                if (options.tickerHover) {
                                        setTickerHover();
                                }
                        }
                }

                function moveTheShow(leftCss, distance, speed) {
                        if (options.mode == 'horizontal') {
                                if (options.tickerDirection == 'next') {
                                        $parent.animate({
                                                'left': '-=' + distance + 'px'
                                        }, speed, 'linear', function () {
                                                $parent.css('left', leftCss);
                                                moveTheShow(leftCss, origShowWidth, options.tickerSpeed);
                                        });
                                } else if (options.tickerDirection == 'prev') {
                                        $parent.animate({
                                                'left': '+=' + distance + 'px'
                                        }, speed, 'linear', function () {
                                                $parent.css('left', leftCss);
                                                moveTheShow(leftCss, origShowWidth, options.tickerSpeed);
                                        });
                                }
                        } else if (options.mode == 'vertical') {
                                if (options.tickerDirection == 'next') {
                                        $parent.animate({
                                                'top': '-=' + distance + 'px'
                                        }, speed, 'linear', function () {
                                                $parent.css('top', leftCss);
                                                moveTheShow(leftCss, origShowHeight, options.tickerSpeed);
                                        });
                                } else if (options.tickerDirection == 'prev') {
                                        $parent.animate({
                                                'top': '+=' + distance + 'px'
                                        }, speed, 'linear', function () {
                                                $parent.css('top', leftCss);
                                                moveTheShow(leftCss, origShowHeight, options.tickerSpeed);
                                        });
                                }
                        }
                }

                function setAutoControlsVars() {
                        if (options.startImage != '') {
                                startContent = options.startImage;
                                startType = 'image';
                        } else {
                                startContent = options.startText;
                                startType = 'text';
                        }
                        if (options.stopImage != '') {
                                stopContent = options.stopImage;
                                stopType = 'image';
                        } else {
                                stopContent = options.stopText;
                                stopType = 'text';
                        }
                        showAutoControls(startType, startContent, stopType, stopContent);
                }

                function setAutoHover() {
                        $outerWrapper.find('.bx-window').hover(function () {
                                if (autoPlaying) {
                                        base.stopShow(false);
                                }
                        }, function () {
                                if (autoPlaying) {
                                        base.startShow(false);
                                }
                        });
                }

                function setTickerHover() {
                        $parent.hover(function () {
                                if (autoPlaying) {
                                        base.stopTicker(false);
                                }
                        }, function () {
                                if (autoPlaying) {
                                        base.startTicker(false);
                                }
                        });
                }

                function setChildrenFade() {
                        $children.not(':eq(' + currentSlide + ')').fadeTo(options.speed, 0).css('zIndex', 98);
                        $children.eq(currentSlide).css('zIndex', 99).fadeTo(options.speed, 1, function () {
                                isWorking = false;
                                if (jQuery.browser.msie) {
                                        $children.eq(currentSlide).get(0).style.removeAttribute('filter');
                                }
                                options.onAfterSlide(currentSlide, $children.length, $children.eq(currentSlide));
                        });
                };

                function makeSlideActive(number) {
                        if (options.pagerType == 'full' && options.pager) {
                                $('a', $pager).removeClass(options.pagerActiveClass);
                                $('a', $pager).eq(number).addClass(options.pagerActiveClass);
                        } else if (options.pagerType == 'short' && options.pager) {
                                $('.bx-pager-current', $pager).html(currentSlide + 1);
                        }
                }

                function showControls(nextType, nextContent, prevType, prevContent) {
                        var $nextHtml = $('<a href="" class="bx-next"></a>');
                        var $prevHtml = $('<a href="" class="bx-prev"></a>');
                        if (nextType == 'text') {
                                $nextHtml.html(nextContent);
                        } else {
                                $nextHtml.html('<img src="' + nextContent + '" />');
                        }
                        if (prevType == 'text') {
                                $prevHtml.html(prevContent);
                        } else {
                                $prevHtml.html('<img src="' + prevContent + '" />');
                        }
                        if (options.prevSelector) {
                                $(options.prevSelector).append($prevHtml);
                        } else {
                                $outerWrapper.append($prevHtml);
                        }
                        if (options.nextSelector) {
                                $(options.nextSelector).append($nextHtml);
                        } else {
                                $outerWrapper.append($nextHtml);
                        }
                        $nextHtml.click(function () {
                                base.goToNextSlide();
                                return false;
                        });
                        $prevHtml.click(function () {
                                base.goToPreviousSlide();
                                return false;
                        });
                }

                function showPager(type) {
                        var pagerQty = $children.length;
                        if (options.moveSlideQty > 1) {
                                if ($children.length % options.moveSlideQty != 0) {
                                        pagerQty = Math.ceil($children.length / options.moveSlideQty);
                                } else {
                                        pagerQty = $children.length / options.moveSlideQty;
                                }
                        }
                        var pagerString = '';
                        if (options.buildPager) {
                                for (var i = 0; i < pagerQty; i++) {
                                        pagerString += options.buildPager(i, $children.eq(i * options.moveSlideQty));
                                }
                        } else if (type == 'full') {
                                for (var i = 1; i <= pagerQty; i++) {
                                        pagerString += '<a href="" class="pager-link pager-' + i + '">' + i + '</a>';
                                }
                        } else if (type == 'short') {
                                pagerString = '<span class="bx-pager-current">' + (options.startingSlide + 1) + '</span> ' + options.pagerShortSeparator + ' <span class="bx-pager-total">' + $children.length + '<span>';
                        }
                        if (options.pagerSelector) {
                                $(options.pagerSelector).append(pagerString);
                                $pager = $(options.pagerSelector);
                        } else {
                                var $pagerContainer = $('<div class="bx-pager"></div>');
                                $pagerContainer.append(pagerString);
                                if (options.pagerLocation == 'top') {
                                        $outerWrapper.prepend($pagerContainer);
                                } else if (options.pagerLocation == 'bottom') {
                                        $outerWrapper.append($pagerContainer);
                                }
                                $pager = $('.bx-pager', $outerWrapper);
                        }
                        $pager.children().click(function () {
                                if (options.pagerType == 'full') {
                                        var slideIndex = $pager.children().index(this);
                                        if (options.moveSlideQty > 1) {
                                                slideIndex *= options.moveSlideQty;
                                        }
                                        base.goToSlide(slideIndex);
                                }
                                return false;
                        });
                }

                function showCaptions() {
                        var caption = $('img', $children.eq(currentSlide)).attr('title');
                        if (caption != '') {
                                if (options.captionsSelector) {
                                        $(options.captionsSelector).html(caption);
                                } else {
                                        $('.bx-captions', $outerWrapper).html(caption);
                                }
                        } else {
                                if (options.captionsSelector) {
                                        $(options.captionsSelector).html(' ');
                                } else {
                                        $('.bx-captions', $outerWrapper).html(' ');
                                }
                        }
                }

                function showAutoControls(startType, startContent, stopType, stopContent) {
                        $autoControls = $('<a href="" class="bx-start"></a>');
                        if (startType == 'text') {
                                $startContent = startContent;
                        } else {
                                $startContent = '<img src="' + startContent + '" />';
                        }
                        if (stopType == 'text') {
                                $stopContent = stopContent;
                        } else {
                                $stopContent = '<img src="' + stopContent + '" />';
                        }
                        if (options.autoControlsSelector) {
                                $(options.autoControlsSelector).append($autoControls);
                        } else {
                                $outerWrapper.append('<div class="bx-auto"></div>');
                                $('.bx-auto', $outerWrapper).html($autoControls);
                        }
                        $autoControls.click(function () {
                                if (options.ticker) {
                                        if ($(this).hasClass('stop')) {
                                                base.stopTicker();
                                        } else if ($(this).hasClass('start')) {
                                                base.startTicker();
                                        }
                                } else {
                                        if ($(this).hasClass('stop')) {
                                                base.stopShow(true);
                                        } else if ($(this).hasClass('start')) {
                                                base.startShow(true);
                                        }
                                }
                                return false;
                        });
                }

                function checkEndControls() {
                        if (!options.infiniteLoop && options.hideControlOnEnd) {
                                if (currentSlide == firstSlide) {
                                        $('.bx-prev', $outerWrapper).hide();
                                } else {
                                        $('.bx-prev', $outerWrapper).show();
                                }
                                if (currentSlide == lastSlide) {
                                        $('.bx-next', $outerWrapper).hide();
                                } else {
                                        $('.bx-next', $outerWrapper).show();
                                }
                        }
                }

                function getSlidePosition(number, side) {
                        if (side == 'left') {
                                var position = $('.pager', $outerWrapper).eq(number).position().left;
                        } else if (side == 'top') {
                                var position = $('.pager', $outerWrapper).eq(number).position().top;
                        }
                        return position;
                }

                function getWrapperWidth() {
                        var wrapperWidth = $firstChild.outerWidth() * options.displaySlideQty;
                        return wrapperWidth;
                }

                function getWrapperHeight() {
                        var wrapperHeight = $firstChild.outerHeight() * options.displaySlideQty;
                        return wrapperHeight;
                }

                function getArraySample(array, start, length, direction) {
                        var sample = [];
                        var loopLength = length;
                        var startPopulatingArray = false;
                        if (direction == 'backward') {
                                array = $.makeArray(array);
                                array.reverse();
                        }
                        while (loopLength > 0) {
                                $.each(array, function (index, val) {
                                        if (loopLength > 0) {
                                                if (!startPopulatingArray) {
                                                        if (index == start) {
                                                                startPopulatingArray = true;
                                                                sample.push($(this).clone());
                                                                loopLength--;
                                                        }
                                                } else {
                                                        sample.push($(this).clone());
                                                        loopLength--;
                                                }
                                        } else {
                                                return false;
                                        }
                                });
                        }
                        return sample;
                }
                this.each(function () {
                        base.initShow();
                });
                return this;
        }
        jQuery.fx.prototype.cur = function () {
                if (this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null)) {
                        return this.elem[this.prop];
                }
                var r = parseFloat(jQuery.css(this.elem, this.prop));
                return r;
        }
})(jQuery);
