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