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