Subversion Repositories SmartDukaan

Rev

Blame | Last modification | View Log | RSS feed

/*
 *      jQuery OwlCarousel v1.21
 *
 *      Copyright (c) 2013 Bartosz Wojciechowski
 *      http://www.owlgraphic.com/owlcarousel
 *
 *      Licensed under MIT
 *
 */


// Object.create function
if ( typeof Object.create !== "function" ) {
        Object.create = function( obj ) {
                function F() {};
                F.prototype = obj;
                return new F();
        };
}
(function( $, window, document, undefined ) {

        var Carousel = {
                init :function(options, el){
                        var base = this;
                        base.options = $.extend({}, $.fn.owlCarousel.options, options);
                        var elem = el;
                        var $elem = $(el);
                        base.$elem = $elem;
                        base.loadContent()
                },

                loadContent : function(){
                        var base = this;

                        if (typeof base.options.beforeInit === "function") {
                                base.options.beforeInit.apply(this,[base.$elem]);
                        }

                        if (typeof base.options.jsonPath === "string") {
                                var url = base.options.jsonPath;

                                function getData(data) {
                                        if (typeof base.options.jsonSuccess === "function") {
                                                base.options.jsonSuccess.apply(this,[data]);
                                        } else {
                                                var content = "";
                                                for(var i in data["owl"]){
                                                        content += data["owl"][i]["item"];
                                                }
                                                base.$elem.html(content);
                                        }
                                        base.logIn();
                                }
                                $.getJSON(url,getData);
                        } else {
                                base.logIn();
                        }
                },

                logIn : function(){
                        var base = this;

                        base.baseClass();

                        base.$elem
                        .css({opacity: 0})

                        base.checkTouch();
                        base.support3d();

                        base.wrapperWidth = 0;
                        base.currentSlide = 0; //Starting Position

                        base.userItems = base.$elem.children();
                        base.itemsAmount = base.userItems.length;
                        base.wrapItems();

                        base.owlItems = base.$elem.find(".owl-item");
                        base.owlWrapper = base.$elem.find(".owl-wrapper");

                        base.orignalItems = base.options.items;
                        base.playDirection = "next";

                        base.checkVisible;

                        //setTimeout(function(){
                        base.onStartup();
                        //},0);
                        base.customEvents();

                },

                onStartup : function(){
                        var base = this;
                        base.updateItems();
                        base.calculateAll();
                        base.buildControls();
                        base.updateControls();
                        base.response();
                        base.moveEvents();
                        base.stopOnHover();
                        if(base.options.autoPlay === true){
                                base.options.autoPlay = 5000;
                        }
                        base.play();
                        base.$elem.find(".owl-wrapper").css("display","block")

                        if(!base.$elem.is(":visible")){
                                base.watchVisibility();
                        } else {
                                setTimeout(function(){
                                        base.$elem.animate({opacity: 1},200);
                                },10);
                        }
                        base.onstartup = false;
                        base.eachMoveUpdate();
                        if (typeof base.options.afterInit === "function") {
                                base.options.afterInit.apply(this,[base.$elem]);
                        }
                },

                eachMoveUpdate : function(){
                        var base = this;
                        base.lazyLoad();
                        base.autoHeight();
                        if(base.options.singleItem === true){
                                base.addActiveClass();
                        }
                        if (typeof base.options.afterAction === "function") {
                                base.options.afterAction.apply(this);
                        }
                },

                updateVars : function(){
                        var base = this;
                        base.watchVisibility();
                        base.updateItems();
                        base.calculateAll();
                        base.updatePosition();
                        base.updateControls();
                        base.eachMoveUpdate();
                },

                reload : function(elements){
                        var base = this;
                        setTimeout(function(){
                                base.updateVars();
                        },0)
                },

                watchVisibility : function(){
                        var base = this;
                        clearInterval(base.checkVisible);
                        if(!base.$elem.is(":visible")){
                                base.$elem.css({opacity: 0});
                                clearInterval(base.autoPlaySpeed);
                        } else {
                                return false;
                        }
                        base.checkVisible = setInterval(function(){
                                if (base.$elem.is(":visible")) {
                                        base.reload();
                                        base.$elem.animate({opacity: 1},200);
                                        clearInterval(base.checkVisible);
                                }
                        }, 500);
                },

                wrapItems : function(){
                        var base = this;
                        base.userItems.wrapAll("<div class=\"owl-wrapper\">").wrap("<div class=\"owl-item\"></div>");
                        base.$elem.find(".owl-wrapper").wrap("<div class=\"owl-wrapper-outer\">");
                        base.wrapperOuter = base.$elem.find(".owl-wrapper-outer");
                        base.$elem.css("display","block");
                },

                baseClass : function(){
                        var base = this;
                        var hasBaseClass = base.$elem.hasClass(base.options.baseClass);
                        var hasThemeClass = base.$elem.hasClass(base.options.theme);

                        if(!hasBaseClass){
                                base.$elem.addClass(base.options.baseClass);
                        }

                        if(!hasThemeClass){
                                base.$elem.addClass(base.options.theme);
                        }
                },

                updateItems : function(){
                        var base = this;

                        if(base.options.responsive === false){
                                return false;
                        }

                        if(base.options.singleItem === true){
                                base.options.items = base.orignalItems = 1;
                                base.options.itemsDesktop = false;
                                base.options.itemsDesktopSmall = false;
                                base.options.itemsTablet = false;
                                base.options.itemsMobile = false;
                                return false;
                        }

                        var width = $(window).width();

                        if(width > (base.options.itemsDesktop[0] || base.orignalItems) ){
                                 base.options.items = base.orignalItems
                        }

                        if(width <= base.options.itemsDesktop[0] && base.options.itemsDesktop !== false){
                                base.options.items = base.options.itemsDesktop[1];
                        }

                        if(width <= base.options.itemsDesktopSmall[0] && base.options.itemsDesktopSmall !== false){
                                base.options.items = base.options.itemsDesktopSmall[1];
                        }

                        if(width <= base.options.itemsTablet[0]  && base.options.itemsTablet !== false){
                                base.options.items = base.options.itemsTablet[1];
                        }

                        if(width <= base.options.itemsMobile[0] && base.options.itemsMobile !== false){
                                base.options.items = base.options.itemsMobile[1];
                        }

                        //if number of items is less than declared
                        if(base.options.items > base.itemsAmount){
                                base.options.items = base.itemsAmount;
                        }
                },

                response : function(){
                        var base = this,
                                smallDelay;
                        if(base.options.responsive !== true){
                                return false
                        }
                        $(window).resize(function(){
                                if(base.options.autoPlay !== false){
                                        clearInterval(base.autoPlaySpeed);
                                }
                                clearTimeout(smallDelay)
                                smallDelay = setTimeout(function(){
                                        base.updateVars();
                                },base.options.responsiveRefreshRate);
                        })
                },

                updatePosition : function(){
                        var base = this;

                        if(base.support3d === true){
                                if(base.positionsInArray[base.currentSlide] > base.maximumPixels){
                                        base.transition3d(base.positionsInArray[base.currentSlide]);
                                } else {
                                        base.transition3d(0);
                                        base.currentSlide = 0;
                                }
                        } else{
                                if(base.positionsInArray[base.currentSlide] > base.maximumPixels){
                                        base.css2slide(base.positionsInArray[base.currentSlide]);
                                } else {
                                        base.css2slide(0);
                                        base.currentSlide = 0;
                                }
                        }
                        if(base.options.autoPlay !== false){
                                base.checkAp();
                        }
                },

                appendItemsSizes : function(){
                        var base = this;

                        var roundPages = 0;
                        var lastItem = base.itemsAmount - base.options.items;

                        base.owlItems.each(function(index){
                                $(this)
                                .css({"width": base.itemWidth})
                                .data("owl-item",Number(index));

                                if(index % base.options.items === 0 || index === lastItem){
                                        if(!(index > lastItem)){
                                                roundPages +=1;
                                        }
                                }
                                $(this).data("owl-roundPages",roundPages);
                        });
                },

                appendWrapperSizes : function(){
                        var base = this;
                        var width = 0;

                        var width = base.owlItems.length * base.itemWidth;

                        base.owlWrapper.css({
                                "width": width*2,
                                "left": 0
                        });
                        base.appendItemsSizes();
                },

                calculateAll : function(){
                        var base = this;
                        base.calculateWidth();
                        base.appendWrapperSizes();
                        base.loops();
                        base.max();
                },

                calculateWidth : function(){
                        var base = this;
                        base.itemWidth = Math.round(base.$elem.width()/base.options.items)
                },

                max : function(){
                        var base = this;
                        base.maximumSlide = base.itemsAmount - base.options.items;
                        var maximum = (base.itemsAmount * base.itemWidth) - base.options.items * base.itemWidth;
                                maximum = maximum * -1
                        base.maximumPixels = maximum;
                        return maximum;
                },

                min : function(){
                        return 0;
                },

                loops : function(){
                        var base = this;

                        base.positionsInArray = [0];
                        var elWidth = 0;

                        for(var i = 0; i<base.itemsAmount; i++){
                                elWidth += base.itemWidth;
                                base.positionsInArray.push(-elWidth)
                        }
                },

                buildControls : function(){
                        var base = this;
                        if(base.options.navigation === true || base.options.pagination === true){
                                base.owlControls = $("<div class=\"owl-controls\"/>").toggleClass("clickable", !base.isTouch).appendTo(base.$elem);
                        }
                        if(base.options.pagination === true){
                                base.buildPagination();
                        }
                        if(base.options.navigation === true){
                                base.buildButtons();
                        }
                },

                buildButtons : function(){
                        var base = this;
                        var buttonsWrapper = $("<div class=\"owl-buttons\"/>")
                        base.owlControls.append(buttonsWrapper);

                        base.buttonPrev = $("<div/>",{
                                "class" : "owl-prev",
                                "html" : base.options.navigationText[0] || ""
                                });

                        base.buttonNext = $("<div/>",{
                                "class" : "owl-next",
                                "html" : base.options.navigationText[1] || ""
                                });

                        buttonsWrapper
                        .append(base.buttonPrev)
                        .append(base.buttonNext);

                        buttonsWrapper.on(base.getEvent(), "div[class^=\"owl\"]", function(event){
                                event.preventDefault();
                                if($(this).hasClass("owl-next")){
                                        base.next();
                                } else{
                                        base.prev();
                                }
                        })
                },

                getEvent : function(){
                        var base = this;
                        if (base.isTouch === true){
                                return "touchend.owlControls";
                        } else {
                                return "click.owlControls";
                        }
                },

                buildPagination : function(){
                        var base = this;

                        base.paginationWrapper = $("<div class=\"owl-pagination\"/>");
                        base.owlControls.append(base.paginationWrapper);

                        base.paginationWrapper.on(base.getEvent(), ".owl-page", function(event){
                                event.preventDefault();
                                if(Number($(this).data("owl-page")) !== base.currentSlide){
                                        base.goTo( Number($(this).data("owl-page")), true);
                                }
                        });
                },

                updatePagination : function(){
                        var base = this;
                        if(base.options.pagination === false){
                                return false;
                        }

                        base.paginationWrapper.html("");

                        var counter = 0;
                        var lastPage = base.itemsAmount - base.itemsAmount % base.options.items;

                        for(var i = 0; i<base.itemsAmount; i++){
                                if(i % base.options.items === 0){
                                        counter +=1;
                                        if(lastPage === i){
                                                var lastItem = base.itemsAmount - base.options.items;
                                        }
                                        var paginationButton = $("<div/>",{
                                                "class" : "owl-page"
                                                });
                                        var paginationButtonInner = $("<span></span>",{
                                                "text": base.options.paginationNumbers === true ? counter : "",
                                                "class": base.options.paginationNumbers === true ? "owl-numbers" : ""
                                        });
                                        paginationButton.append(paginationButtonInner);

                                        paginationButton.data("owl-page",lastPage === i ? lastItem : i);
                                        paginationButton.data("owl-roundPages",counter);

                                        base.paginationWrapper.append(paginationButton);
                                }
                        }
                        base.checkPagination();
                },
                checkPagination : function(){
                        var base = this;

                        base.paginationWrapper.find(".owl-page").each(function(i,v){
                                if($(this).data("owl-roundPages") === $(base.owlItems[base.currentSlide]).data("owl-roundPages") ){
                                        base.paginationWrapper
                                                .find(".owl-page")
                                                .removeClass("active");
                                        $(this).addClass("active");
                                }
                        });
                },

                checkNavigation : function(){
                        var base = this;

                        if(base.options.navigation === false){
                                return false;
                        }
                        if(base.options.goToFirstNav === false){
                                if(base.currentSlide === 0 && base.maximumSlide === 0){
                                        base.buttonPrev.addClass("disabled");
                                        base.buttonNext.addClass("disabled");
                                } else if(base.currentSlide === 0 && base.maximumSlide !== 0){
                                        base.buttonPrev.addClass("disabled");
                                        base.buttonNext.removeClass("disabled");
                                } else if (base.currentSlide === base.maximumSlide){
                                        base.buttonPrev.removeClass("disabled");
                                        base.buttonNext.addClass("disabled");
                                } else if(base.currentSlide !== 0 && base.currentSlide !== base.maximumSlide){
                                        base.buttonPrev.removeClass("disabled");
                                        base.buttonNext.removeClass("disabled");
                                }
                        }
                },

                updateControls : function(){
                        var base = this;
                        base.updatePagination();
                        base.checkNavigation();
                        if(base.owlControls){
                                if(base.options.items === base.itemsAmount){
                                        base.owlControls.hide();
                                } else {
                                        base.owlControls.show();
                                }
                        }
                },

                destroyControls : function(){
                        var base = this;
                        if(base.owlControls){
                                base.owlControls.remove();
                        }
                },

                next : function(speed){
                        var base = this;
                        base.currentSlide += base.options.scrollPerPage === true ? base.options.items : 1;
                        if(base.currentSlide > base.maximumSlide + (base.options.scrollPerPage == true ? (base.options.items - 1) : 0)){
                                if(base.options.goToFirstNav === true){
                                        base.currentSlide = 0;
                                        speed = "goToFirst";
                                } else {
                                        base.currentSlide = base.maximumSlide;
                                        return false;
                                }
                        }
                        base.goTo(base.currentSlide,speed);
                },

                prev : function(speed){
                        var base = this;
                        if(base.options.scrollPerPage === true && base.currentSlide > 0 && base.currentSlide < base.options.items){
                                base.currentSlide = 0
                        } else {
                        base.currentSlide -= base.options.scrollPerPage === true ? base.options.items : 1;
                        }
                        if(base.currentSlide < 0){
                                if(base.options.goToFirstNav === true){
                                        base.currentSlide = base.maximumSlide;
                                        speed = "goToFirst"
                                } else {
                                        base.currentSlide =0;
                                        return false;
                                }
                        }
                        base.goTo(base.currentSlide,speed);
                },

                goTo : function(position,pagination){
                        var base = this;

                        if(typeof base.options.beforeMove === "function") {
                                base.options.beforeMove.apply(this);
                        }
                        if(position >= base.maximumSlide){
                                position = base.maximumSlide;
                        }
                        else if( position <= 0 ){
                                position = 0;
                        }
                        base.currentSlide = position;

                        var goToPixel = base.positionsInArray[position];

                        if(base.support3d === true){
                                base.isCss3Finish = false;

                                if(pagination === true){
                                        base.swapTransitionSpeed("paginationSpeed");
                                        setTimeout(function() {
                                                base.isCss3Finish = true;
                                        }, base.options.paginationSpeed);

                                } else if(pagination === "goToFirst" ){
                                        base.swapTransitionSpeed(base.options.goToFirstSpeed);
                                        setTimeout(function() {
                                                base.isCss3Finish = true;
                                        }, base.options.goToFirstSpeed);

                                } else {
                                        base.swapTransitionSpeed("slideSpeed");
                                        setTimeout(function() {
                                                base.isCss3Finish = true;
                                        }, base.options.slideSpeed);
                                }
                                base.transition3d(goToPixel);
                        } else {
                                if(pagination === true){
                                        base.css2slide(goToPixel, base.options.paginationSpeed);
                                } else if(pagination === "goToFirst" ){
                                        base.css2slide(goToPixel, base.options.goToFirstSpeed);
                                } else {
                                        base.css2slide(goToPixel, base.options.slideSpeed);
                                }
                        }
                        if(base.options.pagination === true){
                                base.checkPagination();
                        }
                        if(base.options.navigation === true){
                                base.checkNavigation();
                        }
                        if(base.options.autoPlay !== false){
                                base.checkAp();
                        }
                        base.eachMoveUpdate();
                        if(typeof base.options.afterMove === "function") {
                                base.options.afterMove.apply(this);
                        }
                },

                stop: function(){
                        var base = this;
                        base.apStatus = "stop";
                        clearInterval(base.autoPlaySpeed);
                },

                checkAp : function(){
                        var base = this;
                        if(base.apStatus !== "stop"){
                                base.play();
                        }
                },

                play : function(){
                        var base = this;
                        base.apStatus = "play";
                        if(base.options.autoPlay === false){
                                return false;
                        }
                        clearInterval(base.autoPlaySpeed);
                        base.autoPlaySpeed = setInterval(function(){
                                if(base.currentSlide < base.maximumSlide && base.playDirection === "next"){
                                        base.next(true);
                                } else if(base.currentSlide === base.maximumSlide){
                                        if(base.options.goToFirst === true){
                                                base.goTo(0,"goToFirst");
                                        } else{
                                                base.playDirection = "prev";
                                                base.prev(true);
                                        }
                                } else if(base.playDirection === "prev" && base.currentSlide > 0){
                                        base.prev(true);
                                } else if(base.playDirection === "prev" && base.currentSlide === 0){
                                        base.playDirection = "next";
                                        base.next(true);
                                }
                        },base.options.autoPlay);
                },

                swapTransitionSpeed : function(action){
                        var base = this;
                        if(action === "slideSpeed"){
                                base.owlWrapper.css(base.addTransition(base.options.slideSpeed));
                        } else if(action === "paginationSpeed" ){
                                base.owlWrapper.css(base.addTransition(base.options.paginationSpeed));
                        } else if(typeof action !== "string"){
                                base.owlWrapper.css(base.addTransition(action));
                        }
                },

                addTransition : function(speed){
                        var base = this;
                        return {
                                "-webkit-transition": "all "+ speed +"ms ease",
                                "-moz-transition": "all "+ speed +"ms ease",
                                "-o-transition": "all "+ speed +"ms ease",
                                "transition": "all "+ speed +"ms ease"
                        };
                },

                removeTransition : function(){
                        return {
                                "-webkit-transition": "",
                                "-moz-transition": "",
                                "-o-transition": "",
                                "transition": ""
                        };
                },

                doTranslate : function(pixels){
                        return {
                                "-webkit-transform": "translate3d("+pixels+"px, 0px, 0px)",
                                "-moz-transform": "translate3d("+pixels+"px, 0px, 0px)",
                                "-o-transform": "translate3d("+pixels+"px, 0px, 0px)",
                                "-ms-transform": "translate3d("+pixels+"px, 0px, 0px)",
                                "transform": "translate3d("+pixels+"px, 0px,0px)"
                        };
                },

                transition3d : function(value){
                        var base = this;
                        base.owlWrapper.css(base.doTranslate(value));
                },

                css2move : function(value){
                        var base = this;
                        base.owlWrapper.css({"left" : value})
                },

                css2slide : function(value,speed){
                        var base = this;

                        base.isCssFinish = false;
                        base.owlWrapper.stop(true,true).animate({
                                "left" : value
                        }, {
                                duration : speed || base.options.slideSpeed ,
                                complete : function(){
                                        base.isCssFinish = true;
                                }
                        });
                },

                support3d : function(){
                                var base = this;

                                var sTranslate3D = "translate3d(0px, 0px, 0px)";
                                 var eTemp = document.createElement("div");
                                eTemp.style.cssText = "  -moz-transform:"    + sTranslate3D +
                                                                          "; -ms-transform:"     + sTranslate3D +
                                                                          "; -o-transform:"      + sTranslate3D +
                                                                          "; -webkit-transform:" + sTranslate3D +
                                                                          "; transform:"         + sTranslate3D;
                                var rxTranslate = /translate3d\(0px, 0px, 0px\)/g;
                                var asSupport = eTemp.style.cssText.match(rxTranslate);
                                var bHasSupport = (asSupport !== null && asSupport.length === 1);
                                base.support3d = bHasSupport
                                return bHasSupport;
                },

                checkTouch : function(){
                        var base = this;
                        base.isTouch = ("ontouchstart" in document.documentElement);
                },

                moveEvents : function(){
                        var base = this;
                        if(base.options.mouseDraggable || base.isTouch === true){
                                base.eventTypes();
                                base.gestures();
                                base.disabledEvents();
                        }
                },

                eventTypes : function(){
                var base = this;
                var types;

                base.ev_types = {};

                if(base.isTouch) {
                types = [
                        "touchstart.owl",
                        "touchmove.owl",
                        "touchend.owl"
                        ];
                } else{
                types = [
                        "mousedown.owl",
                        "mousemove.owl",
                        "mouseup.owl"
                        ];
                }
                base.ev_types["start"] = types[0];
                base.ev_types["move"] = types[1];
                base.ev_types["end"] = types[2];
                },

                disabledEvents :  function(){
                        var base = this;
                        if(base.isTouch !== true){
                                base.$elem.on("dragstart.owl","img", function(event) { event.preventDefault();});
                                base.$elem.bind("mousedown.disableTextSelect", function() {return false;});
                        }
                },

                gestures : function(){
                        var base = this;

                        var locals = {
                                offsetX : 0,
                                offsetY : 0,
                                baseElWidth : 0,
                                relativePos : 0,
                                position: null,
                                minSwipe : null,
                                maxSwipe: null,
                                sliding : null,
                                targetElement : null
                        }

                        base.isCssFinish = true;

                        function getTouches(event){
                                if(base.isTouch === true){
                                        return {
                                                x : event.touches[0].pageX,
                                                y : event.touches[0].pageY
                                        }
                                } else {
                                        if(event.pageX !== undefined){
                                                return {
                                                        x : event.pageX,
                                                        y : event.pageY
                                                }
                                        } else {
                                                return {
                                                        x : event.clientX,
                                                        y : event.clientY
                                                }
                                        }
                                }
                        }

                        function swapEvents(type){
                                if(type === "on"){
                                        $(document).on(base.ev_types["move"], dragMove);
                                        $(document).on(base.ev_types["end"], dragEnd);
                                } else if(type === "off"){
                                        $(document).off(base.ev_types["move"]);
                                        $(document).off(base.ev_types["end"]);
                                }
                        }
                        function dragStart(event) {
                                var event = event.originalEvent || event || window.event;

                                if(base.isCssFinish === false){
                                        return false;
                                }
                                if(base.isCss3Finish === false){
                                        return false;
                                }

                                if(base.options.autoPlay !== false){
                                        clearInterval(base.autoPlaySpeed);
                                }

                                if(base.isTouch !== true && !base.owlWrapper.hasClass("grabbing")){
                                        base.owlWrapper.addClass("grabbing")
                                }

                                base.newPosX = 0;
                                base.newRelativeX = 0;

                                $(this).css(base.removeTransition());

                                var position = $(this).position();
                                locals.relativePos = position.left;
                                
                                locals.offsetX = getTouches(event).x - position.left;
                                locals.offsetY = getTouches(event).y - position.top;

                                swapEvents("on");

                                locals.sliding = false;
                                locals.targetElement = event.target || event.srcElement;
                        }

                        function dragMove(event){
                                var event = event.originalEvent || event || window.event;

                                base.newPosX = getTouches(event).x- locals.offsetX;
                                base.newPosY = getTouches(event).y - locals.offsetY;
                                base.newRelativeX = base.newPosX - locals.relativePos;

                                if(base.newRelativeX > 8 || base.newRelativeX < -8 && base.isTouch === true){
                                        event.preventDefault ? event.preventDefault() : event.returnValue = false;
                                        locals.sliding = true;
                                }

                                if((base.newPosY > 10 || base.newPosY < -10) && locals.sliding === false){
                                         $(document).off("touchmove.owl");
                                }

                                var minSwipe = function(){
                                        return  base.newRelativeX / 5;
                                }
                                var maxSwipe = function(){
                                        return  base.maximumPixels + base.newRelativeX / 5;
                                }

                                base.newPosX = Math.max(Math.min( base.newPosX, minSwipe() ), maxSwipe() );
                                if(base.support3d === true){
                                        base.transition3d(base.newPosX);
                                } else {
                                        base.css2move(base.newPosX);
                                }
                        }

                        var dragEnd = function(event){
                                var event = event.originalEvent || event || window.event;
                                event.target = event.target || event.srcElement;

                                if(base.isTouch !== true){
                                        base.owlWrapper.removeClass("grabbing");
                                }

                                swapEvents("off");

                                if(base.newPosX !== 0){
                                        var newPosition = base.getNewPosition();
                                        base.goTo(newPosition);
                                        if(locals.targetElement === event.target && base.isTouch !== true){
                                                $(event.target).on("click.disable", function(ev){
                                                        ev.stopImmediatePropagation()
                                                        ev.stopPropagation();
                                                        ev.preventDefault();
                                                        $(event.target).off("click.disable");
                                                });
                                        var handlers = $._data(event.target, "events")["click"];
                                        var owlStopEvent = handlers.pop();
                                        handlers.splice(0, 0, owlStopEvent);
                                        }
                                }
                        }
                        base.$elem.on(base.ev_types["start"], ".owl-wrapper", dragStart); 
                },

                clearEvents : function(){
                        var base = this;
                        base.$elem.off(".owl");
                        $(document).off(".owl");
                },

                getNewPosition : function(){
                        var base = this,
                                newPosition;

                        var newPosition = base.improveClosest();

                        if(newPosition>base.maximumSlide){
                                base.currentSlide = base.maximumSlide;
                                newPosition  = base.maximumSlide;
                        } else if( base.newPosX >=0 ){
                                newPosition = 0;
                                base.currentSlide = 0;
                        }
                        return newPosition;
                },

                improveClosest : function(){
                        var base = this;
                        var array = base.positionsInArray;
                        var goal = base.newPosX;
                        var closest = null;
                        $.each(array, function(i,v){
                                if( goal - (base.itemWidth/20) > array[i+1] && goal - (base.itemWidth/20)< v && base.moveDirection() === "left") {
                                        closest = v;
                                        base.currentSlide = i;
                                } 
                                else if (goal + (base.itemWidth/20) < v && goal + (base.itemWidth/20) > array[i+1] && base.moveDirection() === "right"){
                                        closest = array[i+1];
                                        base.currentSlide = i+1;
                                }
                        });
                        return base.currentSlide;
                },

                moveDirection : function(){
                        var base = this,
                                direction;
                        if(base.newRelativeX < 0 ){
                                direction = "right"
                                base.playDirection = "next"
                        } else {
                                direction = "left"
                                base.playDirection = "prev"
                        }
                        return direction
                },

                customEvents : function(){
                        var base = this;
                        base.$elem.on("owl.next",function(){
                                base.next();
                        });
                        base.$elem.on("owl.prev",function(){
                                base.prev();
                        });
                        base.$elem.on("owl.play",function(event,speed){
                                base.options.autoPlay = speed;
                                base.play();
                                base.hoverStatus = "play";
                        });
                        base.$elem.on("owl.stop",function(){
                                base.stop();
                                base.hoverStatus = "stop";
                        });
                },
                
                stopOnHover : function(){
                        var base = this;
                        if(base.options.stopOnHover === true && base.isTouch === false && base.options.autoPlay !== false){
                                base.$elem.on("mouseover", function(){
                                        base.stop();
                                });
                                base.$elem.on("mouseout", function(){
                                        if(base.hoverStatus !== "stop"){
                                                base.play();
                                        }
                                });
                        }
                },

                lazyLoad : function(){
                        var base = this;

                        if(base.options.lazyLoad === false){
                                return false;
                        }

                        for(var i=0; i<base.itemsAmount; i++){
                                var item = $(base.owlItems[i]),
                                        itemNumber = item.data("owl-item"),
                                        lazyImg = item.find(".lazyOwl"),
                                        follow;

                                if(item.data("owl-loaded") === undefined){
                                        lazyImg.hide();
                                        item.addClass("loading").data("owl-loaded","checked");
                                } else if(item.data("owl-loaded") === "loaded"){
                                        continue;
                                }

                                if(base.options.lazyFollow === true){
                                        follow = itemNumber >= base.currentSlide;
                                }else {
                                        follow = true;
                                }

                                if(follow && itemNumber < base.currentSlide + base.options.items){
                                        item.data("owl-loaded", "loaded");

                                        var link = lazyImg.data("src");
                                        if(link){
                                                lazyImg[0].src = link;
                                                lazyImg.removeAttr("data-src");
                                        }

                                        lazyImg.fadeIn(200);
                                        item.removeClass("loading");
                                }
                        }
                },

                autoHeight : function(){
                        var base = this;
                        if(base.options.autoHeight === true){
                                var itemHeight = $(base.owlItems[base.currentSlide]).css("height");
                                base.wrapperOuter.css("height",itemHeight);

                                setTimeout(function(){
                                        if(itemHeight !== $(base.owlItems[base.currentSlide]).css("height")){
                                                base.wrapperOuter.css("height",itemHeight);
                                        }
                                },400);

                                setTimeout(function(){
                                        if(!base.wrapperOuter.hasClass("autoHeight")){
                                                base.wrapperOuter.addClass("autoHeight");
                                        }
                                },0);
                        }
                },
                addActiveClass : function(){
                        var base = this;
                        $(base.owlItems).removeClass('active');
                        $(base.owlItems[base.currentSlide]).addClass('active');
                }

        };


        $.fn.owlCarousel = function( options ){
                return this.each(function() {
                        var carousel = Object.create( Carousel );
                        carousel.init( options, this );
                        $.data( this, "owlCarousel", carousel );
                });
        };

        $.fn.owlCarousel.options = {

                items : 5,
                itemsDesktop : [1199,4],
                itemsDesktopSmall : [979,3],
                itemsTablet: [768,2],
                itemsMobile : [479,1],
                singleItem:false,

                slideSpeed : 200,
                paginationSpeed : 800,

                autoPlay : false,
                stopOnHover : false,
                goToFirst : true,
                goToFirstSpeed : 1000,

                navigation : false,
                navigationText : ["prev","next"],
                goToFirstNav : true,
                scrollPerPage : false,

                pagination : true,
                paginationNumbers: false,

                responsive: true,
                responsiveRefreshRate : 200,

                baseClass : "owl-carousel",
                theme : "owl-theme",

                lazyLoad : false,
                lazyFollow : true,

                autoHeight : false,

                jsonPath : false,
                jsonSuccess : false,

                mouseDraggable : true,

                beforeInit : false,
                afterInit : false,
                beforeMove: false,
                afterMove: false,
                afterAction : false
        };
})( jQuery, window, document );