﻿(function ($) {
    $.fn.thslide = function (callerSettings) {
        var settings = $.extend({ navPreviousWrapper: '.thslide_nav_previous a', navNextWrapper: '.thslide_nav_next a', listWrapper: '.thslide_list ul', itemOffset: 100, itemVisible: 5, slideSpeedSlow: 600, slideSpeedFast: 200, infiniteScroll: 0, scrollOver: 0, debug: 0 }, callerSettings || {}); settings.navPreviousWrapper = $(this).find(settings.navPreviousWrapper); settings.navNextWrapper = $(this).find(settings.navNextWrapper); settings.listWrapper = $(this).find(settings.listWrapper); settings.totalItem = $(settings.listWrapper).find('li').length; settings.itemOffsetMax; settings.listMarginLeft; settings.slideSpeed; settings.easing; settings.locked = false; settings.scrollOn = false; settings.scrollTimer = 0; settings.navTimer; if (settings.totalItem > settings.itemVisible) { updateListMargin(settings); settings.itemOffsetMax = parseInt($(settings.listWrapper).find('li').length) * settings.itemOffset - (settings.itemVisible * settings.itemOffset); settings.itemOffsetMax = -parseInt(settings.itemOffsetMax); $(settings.navPreviousWrapper).click(function () { return false; }); $(settings.navNextWrapper).click(function () { return false; }); $(settings.navPreviousWrapper).mousedown(function () { window.clearTimeout(settings.navTimer); settings.scrollOn = true; settings.slideSpeed = settings.slideSpeedFast; settings.easing = "swing"; slideListPrevious(settings); }); $(settings.navNextWrapper).mousedown(function () { window.clearTimeout(settings.navTimer); settings.scrollOn = true; settings.slideSpeed = settings.slideSpeedFast; settings.easing = "swing"; slideListNext(settings); }); $(settings.navPreviousWrapper).mouseup(function () { settings.scrollOn = false; }); $(settings.navNextWrapper).mouseup(function () { settings.scrollOn = false; }); if (settings.scrollOver == 1) { $(settings.navPreviousWrapper).mouseover(function () { if (!settings.scrollOn) { settings.scrollOn = true; settings.slideSpeed = settings.slideSpeedSlow; settings.easing = "linear"; var functionCall = function () { slideListPrevious(settings); }; settings.navTimer = window.setTimeout(functionCall, settings.scrollTimer); } }); $(settings.navNextWrapper).mouseover(function () { if (!settings.scrollOn) { settings.scrollOn = true; settings.slideSpeed = settings.slideSpeedSlow; settings.easing = "linear"; var functionCall = function () { slideListNext(settings); }; settings.navTimer = window.setTimeout(functionCall, settings.scrollTimer); } }); $(settings.navPreviousWrapper).mouseout(function () { settings.scrollOn = false; }); $(settings.navNextWrapper).mouseout(function () { settings.scrollOn = false; }); } }
        return this;
    }; var slideListPrevious = function (settings) { if (!settings.locked && settings.scrollOn && ((parseInt(settings.listMarginLeft) + parseInt(settings.itemOffset) <= 0) || settings.infiniteScroll == 1)) { settings.locked = true; if (settings.infiniteScroll == 1) { updateListFromBeginning(settings, function () { slideListPreviousAction(settings); }); } else { slideListPreviousAction(settings); } } }; var slideListPreviousAction = function (settings) {
        var offsetUpdate = parseInt(settings.listMarginLeft) + parseInt(settings.itemOffset); if (settings.debug == 1) { console.log('offsetUpdate: ' + offsetUpdate); }
        $(settings.listWrapper).animate({ marginLeft: offsetUpdate }, settings.slideSpeed, settings.easing, function () {
            if (settings.infiniteScroll == 0) { updateListMargin(settings); }
            settings.locked = false; if (settings.scrollOn) { settings.easing = "linear"; slideListPrevious(settings); } 
        });
    }; var slideListNext = function (settings) {
        if (!settings.locked && settings.scrollOn && (((parseInt(settings.listMarginLeft) - parseInt(settings.itemOffset)) >= settings.itemOffsetMax) || settings.infiniteScroll == 1)) {
            settings.locked = true; var offsetUpdate = -parseInt(settings.itemOffset); if (settings.debug == 1) { console.log('offsetUpdate: ' + offsetUpdate); }
            $(settings.listWrapper).animate({ marginLeft: offsetUpdate }, settings.slideSpeed, settings.easing, function () {
                if (settings.infiniteScroll == 0) { updateListMargin(settings); } else { updateListFromEnd(settings, null); }
                settings.locked = false; if (settings.scrollOn) { settings.easing = "linear"; slideListNext(settings); } 
            });
        } 
    }; var initListItems = function (settings) {
        for (var i = 0; i < settings.totalItem; i++) { var pos = parseInt($(settings.listWrapper).find('li').length - 1) - parseInt(i); $(settings.listWrapper).find('li:eq(' + pos + ')').clone().insertBefore($(settings.listWrapper).find('li:first-child')).addClass('thslide_copy'); }
        resetListMargin(settings);
    }; var updateListFromBeginning = function (settings, callback) { var itemToMove = $(settings.listWrapper).find('li:last-child'); $(settings.listWrapper).find('li:first-child').before(itemToMove); $(settings.listWrapper).css('marginLeft', -parseInt(settings.itemOffset)); updateListMargin(settings); if (typeof callback == 'function') { return callback(); } }; var updateListFromEnd = function (settings, callback) { var itemToMove = $(settings.listWrapper).find('li:first-child'); $(settings.listWrapper).find('li:last-child').after(itemToMove); $(settings.listWrapper).css('marginLeft', 0); updateListMargin(settings); if (typeof callback == 'function') { return callback(); } }; var updateListMargin = function (settings) { settings.listMarginLeft = $(settings.listWrapper).css('marginLeft').split('px')[0]; }; var resetListMargin = function (settings) { $(settings.listWrapper).css('marginLeft', -parseInt(settings.itemOffset)); updateListMargin(settings); };
})(jQuery);
