(function(e){e.widget("thomaskahn.smoothDivScroll",{options:{scrollingHotSpotLeft:"div.scrollingHotSpotLeft",scrollingHotSpotRight:"div.scrollingHotSpotRight",scrollableArea:"div.scrollableArea",scrollWrapper:"div.scrollWrapper",hiddenOnStart:false,ajaxContentURL:"",countOnlyClass:"",scrollStep:15,scrollInterval:10,mouseDownSpeedBooster:3,autoScroll:"",autoScrollDirection:"right",autoScrollStep:5,autoScrollInterval:10,visibleHotSpots:"",hotSpotsVisibleTime:5,startAtElementId:""},_create:function(){var c=
this,a=this.options,b=this.element;b.data("scrollWrapper",b.find(a.scrollWrapper));b.data("scrollingHotSpotRight",b.find(a.scrollingHotSpotRight));b.data("scrollingHotSpotLeft",b.find(a.scrollingHotSpotLeft));b.data("scrollableArea",b.find(a.scrollableArea));b.data("speedBooster",1);b.data("motherElementOffset",b.offset().left);b.data("scrollXPos",0);b.data("hotSpotWidth",b.find(a.scrollingHotSpotLeft).width());b.data("scrollableAreaWidth",0);b.data("startingPosition",0);b.data("rightScrollInterval",
null);b.data("leftScrollInterval",null);b.data("autoScrollInterval",null);b.data("hideHotSpotBackgroundsInterval",null);b.data("previousScrollLeft",0);b.data("pingPongDirection","right");b.data("getNextElementWidth",true);b.data("swapAt",null);b.data("startAtElementHasNotPassed",true);b.data("swappedElement",null);b.data("originalElements",b.data("scrollableArea").children(a.countOnlyClass));b.data("visible",true);b.data("initialAjaxContentLoaded",false);b.data("enabled",true);b.data("scrollWrapper").scrollLeft(b.data("startingPosition"));
if(a.autoScroll!=="always")switch(a.visibleHotSpots){case "always":c.showHotSpotBackgrounds();break;case "onstart":c.showHotSpotBackgrounds();b.data("hideHotSpotBackgroundsInterval",setTimeout(function(){c.hideHotSpotBackgrounds("slow")},a.hotSpotsVisibleTime*1E3));break;default:break}b.data("scrollingHotSpotRight").bind("mousemove",function(d){d=d.pageX-(this.offsetLeft+b.data("motherElementOffset"));b.data("scrollXPos",Math.round(d/b.data("hotSpotWidth")*a.scrollStep));b.data("scrollXPos")===Infinity&&
b.data("scrollXPos",0)});b.data("scrollingHotSpotRight").bind("mouseover",function(){if(a.autoScroll==="onstart"&&b.data("autoScrollInterval")!==null){clearInterval(b.data("autoScrollInterval"));b.data("autoScrollInterval",null);c._trigger("autoScrollIntervalStopped")}b.data("rightScrollInterval",setInterval(function(){if(b.data("scrollXPos")>0&&b.data("enabled")){b.data("scrollWrapper").scrollLeft(b.data("scrollWrapper").scrollLeft()+b.data("scrollXPos")*b.data("speedBooster"));c._showHideHotSpots()}},
a.scrollInterval));c._trigger("mouseOverRightHotSpot")});b.data("scrollingHotSpotRight").bind("mouseout",function(){clearInterval(b.data("rightScrollInterval"));b.data("scrollXPos",0)});b.data("scrollingHotSpotRight").bind("mousedown",function(){b.data("speedBooster",a.mouseDownSpeedBooster)});e("body").bind("mouseup",function(){b.data("speedBooster",1)});b.data("scrollingHotSpotLeft").bind("mousemove",function(d){d=b.data("scrollingHotSpotLeft").innerWidth()-(d.pageX-b.data("motherElementOffset"));
b.data("scrollXPos",Math.round(d/b.data("hotSpotWidth")*a.scrollStep));b.data("scrollXPos")===Infinity&&b.data("scrollXPos",0)});b.data("scrollingHotSpotLeft").bind("mouseover",function(){if(a.autoScroll==="onstart"&&b.data("autoScrollInterval")!==null){clearInterval(b.data("autoScrollInterval"));b.data("autoScrollInterval",null);c._trigger("autoScrollIntervalStopped")}b.data("leftScrollInterval",setInterval(function(){if(b.data("scrollXPos")>0&&b.data("enabled")){b.data("scrollWrapper").scrollLeft(b.data("scrollWrapper").scrollLeft()-
b.data("scrollXPos")*b.data("speedBooster"));c._showHideHotSpots()}},a.scrollInterval));c._trigger("mouseOverLeftHotSpot")});b.data("scrollingHotSpotLeft").bind("mouseout",function(){clearInterval(b.data("leftScrollInterval"));b.data("scrollXPos",0)});b.data("scrollingHotSpotLeft").bind("mousedown",function(){b.data("speedBooster",a.mouseDownSpeedBooster)});e(window).bind("resize",function(){a.hiddenOnStart||c._showHideHotSpots();c._trigger("windowResized")});a.ajaxContentURL.length>0?c.replaceContent(a.ajaxContentURL):
c.recalculateScrollableArea();a.hiddenOnStart&&c.hide();a.autoScroll.length>0&&!a.hiddenOnStart&&a.ajaxContentURL.length<=0&&c.startAutoScroll()},showHotSpotBackgrounds:function(c){var a=this,b=this.element;if(c!==undefined){b.data("scrollingHotSpotLeft").css("opacity","0.0");b.data("scrollingHotSpotRight").css("opacity","0.0");b.data("scrollingHotSpotLeft").addClass("scrollingHotSpotLeftVisible");b.data("scrollingHotSpotRight").addClass("scrollingHotSpotRightVisible");b.data("scrollingHotSpotLeft").fadeTo(c,
0.35);b.data("scrollingHotSpotRight").fadeTo(c,0.35)}else{b.data("scrollingHotSpotLeft").addClass("scrollingHotSpotLeftVisible");b.data("scrollingHotSpotLeft").removeAttr("style");b.data("scrollingHotSpotRight").addClass("scrollingHotSpotRightVisible");b.data("scrollingHotSpotRight").removeAttr("style")}a._showHideHotSpots()},hideHotSpotBackgrounds:function(c){var a=this.element;if(c!==undefined){a.data("scrollingHotSpotLeft").fadeTo(c,0,function(){a.data("scrollingHotSpotLeft").removeClass("scrollingHotSpotLeftVisible")});
a.data("scrollingHotSpotRight").fadeTo(c,0,function(){a.data("scrollingHotSpotRight").removeClass("scrollingHotSpotRightVisible")})}else{a.data("scrollingHotSpotLeft").removeClass("scrollingHotSpotLeftVisible");a.data("scrollingHotSpotLeft").removeAttr("style");a.data("scrollingHotSpotRight").removeClass("scrollingHotSpotRightVisible");a.data("scrollingHotSpotRight").removeAttr("style")}},_showHideHotSpots:function(){},moveToElement:function(c,a){var b=this,d=this.element,f=this.options,g=0,h=false;
switch(c){case "first":d.data("scrollXPos",0);b._trigger("movedToFirstElement");break;case "start":d.data("scrollableArea").children(f.countOnlyClass).each(function(){if(f.startAtElementId.length>0&&e(this).attr("id")===f.startAtElementId){d.data("startingPosition",g);h=true}g+=e(this).outerWidth(true)});d.data("scrollXPos",d.data("startingPosition"));b._trigger("movedToStartElement");break;case "last":d.data("scrollXPos",d.data("scrollableAreaWidth"));b._trigger("movedToLastElement");break;case "number":isNaN(a)||
d.data("scrollableArea").children(f.countOnlyClass).each(function(i){i===a-1&&d.data("scrollXPos",g);g+=e(this).outerWidth(true)});b._trigger("movedToElementNumber",null,{elementNumber:a});break;default:break}d.data("scrollWrapper").scrollLeft(d.data("scrollXPos"));b._showHideHotSpots()},addContent:function(c,a){var b=this,d=this.element;e.get(c,function(f){a==="first"?d.data("scrollableArea").children(":first").before(f):d.data("scrollableArea").children(":last").after(f);b.recalculateScrollableArea();
b._showHideHotSpots()})},replaceContent:function(c){var a=this,b=this.element;b.data("scrollableArea").load(c,function(){a.recalculateScrollableArea();a.moveToElement("first");a._showHideHotSpots();b.data("startingPosition",0)})},recalculateScrollableArea:function(){var c=0,a=false,b=this.options,d=this.element,f=this;d.data("scrollableArea").children(b.countOnlyClass).each(function(){if(b.startAtElementId.length>0&&e(this).attr("id")===b.startAtElementId){d.data("startingPosition",c);a=true}c+=e(this).outerWidth(true)});
a||d.data("startAtElementId","");d.data("scrollableAreaWidth",c);d.data("scrollableArea").width(d.data("scrollableAreaWidth"));if(!d.data("initialAjaxContentLoaded"))if(b.autoScroll.length>0&&!b.hiddenOnStart&&b.ajaxContentURL.length>0){f.startAutoScroll();d.data("initialAjaxContentLoaded",true)}},stopAutoScroll:function(){var c=this,a=this.element;clearInterval(a.data("autoScrollInterval"));a.data("autoScrollInterval",null);c._showHideHotSpots();c._trigger("autoScrollStopped")},startAutoScroll:function(){var c=
this,a=this.element,b=this.options;c._showHideHotSpots();clearInterval(a.data("autoScrollInterval"));a.data("autoScrollInterval",null);c._trigger("autoScrollStarted");a.data("autoScrollInterval",setInterval(function(){if(!a.data("visible")||a.data("scrollableAreaWidth")<=a.data("scrollWrapper").innerWidth()){clearInterval(a.data("autoScrollInterval"));a.data("autoScrollInterval",null)}else{a.data("previousScrollLeft",a.data("scrollWrapper").scrollLeft());switch(b.autoScrollDirection){case "right":a.data("scrollWrapper").scrollLeft(a.data("scrollWrapper").scrollLeft()+
b.autoScrollStep);if(a.data("previousScrollLeft")===a.data("scrollWrapper").scrollLeft()){c._trigger("autoScrollRightLimitReached");clearInterval(a.data("autoScrollInterval"));a.data("autoScrollInterval",null);c._trigger("autoScrollIntervalStopped")}break;case "left":a.data("scrollWrapper").scrollLeft(a.data("scrollWrapper").scrollLeft()-b.autoScrollStep);if(a.data("previousScrollLeft")===a.data("scrollWrapper").scrollLeft()){c._trigger("autoScrollLeftLimitReached");clearInterval(a.data("autoScrollInterval"));
a.data("autoScrollInterval",null);c._trigger("autoScrollIntervalStopped")}break;case "backandforth":a.data("pingPongDirection")==="right"?a.data("scrollWrapper").scrollLeft(a.data("scrollWrapper").scrollLeft()+b.autoScrollStep):a.data("scrollWrapper").scrollLeft(a.data("scrollWrapper").scrollLeft()-b.autoScrollStep);if(a.data("previousScrollLeft")===a.data("scrollWrapper").scrollLeft())if(a.data("pingPongDirection")==="right"){a.data("pingPongDirection","left");c._trigger("autoScrollRightLimitReached")}else{a.data("pingPongDirection",
"right");c._trigger("autoScrollLeftLimitReached")}break;case "endlessloopright":if(a.data("getNextElementWidth")){if(b.startAtElementId.length>0&&a.data("startAtElementHasNotPassed")){a.data("swapAt",e("#"+b.startAtElementId).outerWidth(true));a.data("startAtElementHasNotPassed",false)}else a.data("swapAt",a.data("scrollableArea").children(":first").outerWidth(true));a.data("getNextElementWidth",false)}a.data("scrollWrapper").scrollLeft(a.data("scrollWrapper").scrollLeft()+b.autoScrollStep);if(a.data("swapAt")<=
a.data("scrollWrapper").scrollLeft()){a.data("swappedElement",a.data("scrollableArea").children(":first").detach());a.data("scrollableArea").append(a.data("swappedElement"));a.data("scrollWrapper").scrollLeft(a.data("scrollWrapper").scrollLeft()-a.data("swappedElement").outerWidth(true));a.data("getNextElementWidth",true)}break;case "endlessloopleft":if(a.data("getNextElementWidth")){if(b.startAtElementId.length>0&&a.data("startAtElementHasNotPassed")){a.data("swapAt",e("#"+b.startAtElementId).outerWidth(true));
a.data("startAtElementHasNotPassed",false)}else a.data("swapAt",a.data("scrollableArea").children(":first").outerWidth(true));a.data("getNextElementWidth",false)}a.data("scrollWrapper").scrollLeft(a.data("scrollWrapper").scrollLeft()-b.autoScrollStep);if(a.data("scrollWrapper").scrollLeft()==0){a.data("swappedElement",a.data("scrollableArea").children(":last").detach());a.data("scrollableArea").prepend(a.data("swappedElement"));a.data("scrollWrapper").scrollLeft(a.data("scrollWrapper").scrollLeft()+
a.data("swappedElement").outerWidth(true));a.data("getNextElementWidth",true)}break;default:break}}},b.autoScrollInterval))},restoreOriginalElements:function(){var c=this,a=this.element;a.data("scrollableArea").html(a.data("originalElements"));c.recalculateScrollableArea();c.moveToElement("first")},show:function(){var c=this.element;c.data("visible",true);c.show()},hide:function(){var c=this.element;c.data("visible",false);c.hide()},enable:function(){this.element.data("enabled",true)},disable:function(){var c=
this.element;clearInterval(c.data("autoScrollInterval"));clearInterval(c.data("rightScrollInterval"));clearInterval(c.data("leftScrollInterval"));clearInterval(c.data("hideHotSpotBackgroundsInterval"));c.data("enabled",false)},destroy:function(){var c=this.element;clearInterval(c.data("autoScrollInterval"));clearInterval(c.data("rightScrollInterval"));clearInterval(c.data("leftScrollInterval"));clearInterval(c.data("hideHotSpotBackgroundsInterval"));c.data("scrollingHotSpotRight").unbind("mouseover");
c.data("scrollingHotSpotRight").unbind("mouseout");c.data("scrollingHotSpotRight").unbind("mousedown");c.data("scrollingHotSpotLeft").unbind("mouseover");c.data("scrollingHotSpotLeft").unbind("mouseout");c.data("scrollingHotSpotLeft").unbind("mousedown");c.data("scrollableArea").html(c.data("originalElements"));c.data("scrollableArea").removeAttr("style");c.data("scrollingHotSpotRight").removeAttr("style");c.data("scrollingHotSpotLeft").removeAttr("style");c.data("scrollWrapper").scrollLeft(0);c.data("scrollingHotSpotLeft").removeClass("scrollingHotSpotLeftVisible");
c.data("scrollingHotSpotRight").removeClass("scrollingHotSpotRightVisible");c.data("scrollingHotSpotRight").hide();c.data("scrollingHotSpotLeft").hide();e.Widget.prototype.destroy.apply(this,arguments)}})})(jQuery);

