(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);c.data("initialAjaxContentLoaded",false);c.data("enabled",true);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(f){var g=f.pageX-(this.offsetLeft+c.data("motherElementOffset"));c.data("scrollXPos",Math.round((g/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("enabled")){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(f){var g=c.data("scrollingHotSpotLeft").innerWidth()-(f.pageX-c.data("motherElementOffset"));c.data("scrollXPos",Math.round((g/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("enabled")){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.ajaxContentURL.length>0){d.replaceContent(b.ajaxContentURL);}else{d.recalculateScrollableArea();}if(b.hiddenOnStart){d.hide();}if((b.autoScroll.length>0)&&!(b.hiddenOnStart)&&(b.ajaxContentURL.length<=0)){d.startAutoScroll();}},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(b){var c=this.element;if(b!==undefined){c.data("scrollingHotSpotLeft").fadeTo(b,0,function(){c.data("scrollingHotSpotLeft").removeClass("scrollingHotSpotLeftVisible");});c.data("scrollingHotSpotRight").fadeTo(b,0,function(){c.data("scrollingHotSpotRight").removeClass("scrollingHotSpotRightVisible");});}else{c.data("scrollingHotSpotLeft").removeClass("scrollingHotSpotLeftVisible");c.data("scrollingHotSpotLeft").removeAttr("style");c.data("scrollingHotSpotRight").removeClass("scrollingHotSpotRightVisible");c.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(b,h){var c=this,g=this.element,d=this.options,f=0,e=false;switch(b){case"first":g.data("scrollXPos",0);c._trigger("movedToFirstElement");break;case"start":g.data("scrollableArea").children(d.countOnlyClass).each(function(){if((d.startAtElementId.length>0)&&((a(this).attr("id"))===d.startAtElementId)){g.data("startingPosition",f);e=true;}f=f+a(this).outerWidth(true);});g.data("scrollXPos",g.data("startingPosition"));c._trigger("movedToStartElement");break;case"last":g.data("scrollXPos",g.data("scrollableAreaWidth"));c._trigger("movedToLastElement");break;case"number":if(!(isNaN(h))){g.data("scrollableArea").children(d.countOnlyClass).each(function(i){if(i===(h-1)){g.data("scrollXPos",f);}f=f+a(this).outerWidth(true);});}c._trigger("movedToElementNumber",null,{elementNumber:h});break;default:break;}g.data("scrollWrapper").scrollLeft(g.data("scrollXPos"));c._showHideHotSpots();},addContent:function(d,e){var c=this,b=this.element;a.get(d,function(f){if(e==="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 d=0,c=false,b=this.options,e=this.element,f=this;e.data("scrollableArea").children(b.countOnlyClass).each(function(){if((b.startAtElementId.length>0)&&((a(this).attr("id"))===b.startAtElementId)){e.data("startingPosition",d);c=true;}d=d+a(this).outerWidth(true);});if(!(c)){e.data("startAtElementId","");}e.data("scrollableAreaWidth",d);e.data("scrollableArea").width(e.data("scrollableAreaWidth"));e.data("scrollWrapper").scrollLeft(e.data("startingPosition"));e.data("scrollXPos",e.data("startingPosition"));if(!(e.data("initialAjaxContentLoaded"))){if((b.autoScroll.length>0)&&!(b.hiddenOnStart)&&(b.ajaxContentURL.length>0)){f.startAutoScroll();e.data("initialAjaxContentLoaded",true);}}},stopAutoScroll:function(){var b=this,c=this.element;clearInterval(c.data("autoScrollInterval"));c.data("autoScrollInterval",null);b._showHideHotSpots();b._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);}else{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.length>0)&&(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.length>0)&&(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 b=this,c=this.element;c.data("scrollableArea").html(c.data("originalElements"));b.recalculateScrollableArea();b.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();},enable:function(){var b=this.element;b.data("enabled",true);},disable:function(){var b=this.element;clearInterval(b.data("autoScrollInterval"));clearInterval(b.data("rightScrollInterval"));clearInterval(b.data("leftScrollInterval"));clearInterval(b.data("hideHotSpotBackgroundsInterval"));b.data("enabled",false);},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);
