/*
 * jQuery SmoothDivScroll 1.0
 *
 * Copyright (c) 2010 Thomas Kahn
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://www.maaki.com/thomas/SmoothDivScroll/
 *
 * Depends:
 * jquery.ui.widget.js
 *
 */
(function($){$.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:"onstart",hotSpotsVisibleTime:5,startAtElementId:""},_create:function(){var self=this,o=this.options,el=this.element;
el.data("scrollWrapper",el.find(o.scrollWrapper));
el.data("scrollingHotSpotRight",el.find(o.scrollingHotSpotRight));
el.data("scrollingHotSpotLeft",el.find(o.scrollingHotSpotLeft));
el.data("scrollableArea",el.find(o.scrollableArea));
el.data("speedBooster",1);
el.data("motherElementOffset",el.offset().left);
el.data("scrollXPos",0);
el.data("hotSpotWidth",el.find(o.scrollingHotSpotLeft).width());
el.data("scrollableAreaWidth",0);
el.data("startingPosition",0);
el.data("rightScrollInterval",null);
el.data("leftScrollInterval",null);
el.data("autoScrollInterval",null);
el.data("hideHotSpotBackgroundsInterval",null);
el.data("previousScrollLeft",0);
el.data("pingPongDirection","right");
el.data("getNextElementWidth",true);
el.data("swapAt",null);
el.data("startAtElementHasNotPassed",true);
el.data("swappedElement",null);
el.data("originalElements",el.data("scrollableArea").children(o.countOnlyClass));
el.data("visible",true);
self.recalculateScrollableArea();
el.data("scrollWrapper").scrollLeft(el.data("startingPosition"));
if(o.autoScroll!=="always"){switch(o.visibleHotSpots){case"always":self.showHotSpotBackgrounds();
break;
case"onstart":self.showHotSpotBackgrounds();
el.data("hideHotSpotBackgroundsInterval",setTimeout(function(){self.hideHotSpotBackgrounds("slow")},(o.hotSpotsVisibleTime*1000)));
break;
default:break}}el.data("scrollingHotSpotRight").bind("mousemove",function(e){var x=e.pageX-(this.offsetLeft+el.data("motherElementOffset"));
el.data("scrollXPos",Math.round((x/el.data("hotSpotWidth"))*o.scrollStep));
if(el.data("scrollXPos")===Infinity){el.data("scrollXPos",0)}});
el.data("scrollingHotSpotRight").bind("mouseover",function(){if((o.autoScroll==="onstart"&&el.data("autoScrollInterval")!==null)){clearInterval(el.data("autoScrollInterval"));
el.data("autoScrollInterval",null);
self._trigger("autoScrollIntervalStopped")}el.data("rightScrollInterval",setInterval(function(){if(el.data("scrollXPos")>0){el.data("scrollWrapper").scrollLeft(el.data("scrollWrapper").scrollLeft()+(el.data("scrollXPos")*el.data("speedBooster")));
self._showHideHotSpots()}},o.scrollInterval));
self._trigger("mouseOverRightHotSpot")});
el.data("scrollingHotSpotRight").bind("mouseout",function(){clearInterval(el.data("rightScrollInterval"));
el.data("scrollXPos",0)});
el.data("scrollingHotSpotRight").bind("mousedown",function(){el.data("speedBooster",o.mouseDownSpeedBooster)});
$("body").bind("mouseup",function(){el.data("speedBooster",1)});
el.data("scrollingHotSpotLeft").bind("mousemove",function(e){var x=el.data("scrollingHotSpotLeft").innerWidth()-(e.pageX-el.data("motherElementOffset"));
el.data("scrollXPos",Math.round((x/el.data("hotSpotWidth"))*o.scrollStep));
if(el.data("scrollXPos")===Infinity){el.data("scrollXPos",0)}});
el.data("scrollingHotSpotLeft").bind("mouseover",function(){if((o.autoScroll==="onstart"&&el.data("autoScrollInterval")!==null)){clearInterval(el.data("autoScrollInterval"));
el.data("autoScrollInterval",null);
self._trigger("autoScrollIntervalStopped")}el.data("leftScrollInterval",setInterval(function(){if(el.data("scrollXPos")>0){el.data("scrollWrapper").scrollLeft(el.data("scrollWrapper").scrollLeft()-(el.data("scrollXPos")*el.data("speedBooster")));
self._showHideHotSpots()}},o.scrollInterval));
self._trigger("mouseOverLeftHotSpot")});
el.data("scrollingHotSpotLeft").bind("mouseout",function(){clearInterval(el.data("leftScrollInterval"));
el.data("scrollXPos",0)});
el.data("scrollingHotSpotLeft").bind("mousedown",function(){el.data("speedBooster",o.mouseDownSpeedBooster)});
$(window).bind("resize",function(){if(!(o.hiddenOnStart)){self._showHideHotSpots()}self._trigger("windowResized")});
if(o.autoScroll!==""&&!(o.hiddenOnStart)){self.startAutoScroll()}if(o.hiddenOnStart){self.hide()}},showHotSpotBackgrounds:function(fadeSpeed){var self=this,el=this.element;
if(fadeSpeed!==undefined){el.data("scrollingHotSpotLeft").css("opacity","0.0");
el.data("scrollingHotSpotRight").css("opacity","0.0");
el.data("scrollingHotSpotLeft").addClass("scrollingHotSpotLeftVisible");
el.data("scrollingHotSpotRight").addClass("scrollingHotSpotRightVisible");
el.data("scrollingHotSpotLeft").fadeTo(fadeSpeed,0.35);
el.data("scrollingHotSpotRight").fadeTo(fadeSpeed,0.35)}else{el.data("scrollingHotSpotLeft").addClass("scrollingHotSpotLeftVisible");
el.data("scrollingHotSpotLeft").removeAttr("style");
el.data("scrollingHotSpotRight").addClass("scrollingHotSpotRightVisible");
el.data("scrollingHotSpotRight").removeAttr("style")}self._showHideHotSpots()},hideHotSpotBackgrounds:function(fadeSpeed){var el=this.element;
if(fadeSpeed!==undefined){el.data("scrollingHotSpotLeft").fadeTo(fadeSpeed,0.0,function(){el.data("scrollingHotSpotLeft").removeClass("scrollingHotSpotLeftVisible")});
el.data("scrollingHotSpotRight").fadeTo(fadeSpeed,0.0,function(){el.data("scrollingHotSpotRight").removeClass("scrollingHotSpotRightVisible")})}else{el.data("scrollingHotSpotLeft").removeClass("scrollingHotSpotLeftVisible");
el.data("scrollingHotSpotLeft").removeAttr("style");
el.data("scrollingHotSpotRight").removeClass("scrollingHotSpotRightVisible");
el.data("scrollingHotSpotRight").removeAttr("style")}},_showHideHotSpots:function(){var self=this,el=this.element,o=this.options;
if(o.autoScroll!=="always"){if(el.data("scrollableAreaWidth")<=(el.data("scrollWrapper").innerWidth())){el.data("scrollingHotSpotLeft").hide();
el.data("scrollingHotSpotRight").hide()}else if(el.data("scrollWrapper").scrollLeft()===0){el.data("scrollingHotSpotLeft").hide();
el.data("scrollingHotSpotRight").show();
self._trigger("scrollLeftLimitReached");
clearInterval(el.data("leftScrollInterval"));
el.data("leftScrollInterval",null)}else if(el.data("scrollableAreaWidth")<=(el.data("scrollWrapper").innerWidth()+el.data("scrollWrapper").scrollLeft())){el.data("scrollingHotSpotLeft").show();
el.data("scrollingHotSpotRight").hide();
self._trigger("scrollRightLimitReached");
clearInterval(el.data("rightScrollInterval"));
el.data("rightScrollInterval",null)}else{el.data("scrollingHotSpotLeft").show();
el.data("scrollingHotSpotRight").show()}}else{el.data("scrollingHotSpotLeft").hide();
el.data("scrollingHotSpotRight").hide()}},moveToElement:function(moveTo,elementNumber){var self=this,el=this.element,o=this.options,tempScrollableAreaWidth=0,foundStartAtElement=false;
switch(moveTo){case"first":el.data("scrollXPos",0);
self._trigger("movedToFirstElement");
break;
case"start":el.data("scrollableArea").children(o.countOnlyClass).each(function(){if((o.startAtElementId.length!==0)&&(($(this).attr("id"))===o.startAtElementId)){el.data("startingPosition",tempScrollableAreaWidth);
foundStartAtElement=true}tempScrollableAreaWidth=tempScrollableAreaWidth+$(this).outerWidth(true)});
el.data("scrollXPos",el.data("startingPosition"));
self._trigger("movedToStartElement");
break;
case"last":el.data("scrollXPos",el.data("scrollableAreaWidth"));
self._trigger("movedToLastElement");
break;
case"number":if(!(isNaN(elementNumber))){el.data("scrollableArea").children(o.countOnlyClass).each(function(index){if(index===(elementNumber-1)){el.data("scrollXPos",tempScrollableAreaWidth)}tempScrollableAreaWidth=tempScrollableAreaWidth+$(this).outerWidth(true)})}self._trigger("movedToElementNumber",null,{"elementNumber":elementNumber});
break;
default:break}el.data("scrollWrapper").scrollLeft(el.data("scrollXPos"));
self._showHideHotSpots()},addContent:function(ajaxContentURL,addWhere){var self=this,el=this.element;
$.get(ajaxContentURL,function(data){if(addWhere==="first"){el.data("scrollableArea").children(":first").before(data)}else{el.data("scrollableArea").children(":last").after(data)}self.recalculateScrollableArea();
self._showHideHotSpots()})},replaceContent:function(ajaxContentURL){var self=this,el=this.element;
el.data("scrollableArea").load(ajaxContentURL,function(){self.recalculateScrollableArea();
self.moveToElement("first");
self._showHideHotSpots();
el.data("startingPosition",0)})},recalculateScrollableArea:function(){var tempScrollableAreaWidth=0,foundStartAtElement=false,o=this.options,el=this.element;
el.data("scrollableArea").children(o.countOnlyClass).each(function(){if((o.startAtElementId.length!==0)&&(($(this).attr("id"))===o.startAtElementId)){el.data("startingPosition",tempScrollableAreaWidth);
foundStartAtElement=true}tempScrollableAreaWidth=tempScrollableAreaWidth+$(this).outerWidth(true)});
if(!(foundStartAtElement)){el.data("startAtElementId","")}el.data("scrollableAreaWidth",tempScrollableAreaWidth);
el.data("scrollableArea").width(el.data("scrollableAreaWidth"))},stopAutoScroll:function(){var self=this,el=this.element;
clearInterval(el.data("autoScrollInterval"));
el.data("autoScrollInterval",null);
self._showHideHotSpots();
self._trigger("autoScrollStopped")},startAutoScroll:function(){var self=this,el=this.element,o=this.options;
self._showHideHotSpots();
clearInterval(el.data("autoScrollInterval"));
el.data("autoScrollInterval",null);
self._trigger("autoScrollStarted");
el.data("autoScrollInterval",setInterval(function(){if(!(el.data("visible"))||(el.data("scrollableAreaWidth")<=(el.data("scrollWrapper").innerWidth()))){clearInterval(el.data("autoScrollInterval"));
el.data("autoScrollInterval",null)}el.data("previousScrollLeft",el.data("scrollWrapper").scrollLeft());
switch(o.autoScrollDirection){case"right":el.data("scrollWrapper").scrollLeft(el.data("scrollWrapper").scrollLeft()+o.autoScrollStep);
if(el.data("previousScrollLeft")===el.data("scrollWrapper").scrollLeft()){self._trigger("autoScrollRightLimitReached");
clearInterval(el.data("autoScrollInterval"));
el.data("autoScrollInterval",null);
self._trigger("autoScrollIntervalStopped")}break;
case"left":el.data("scrollWrapper").scrollLeft(el.data("scrollWrapper").scrollLeft()-o.autoScrollStep);
if(el.data("previousScrollLeft")===el.data("scrollWrapper").scrollLeft()){self._trigger("autoScrollLeftLimitReached");
clearInterval(el.data("autoScrollInterval"));
el.data("autoScrollInterval",null);
self._trigger("autoScrollIntervalStopped")}break;
case"backandforth":if(el.data("pingPongDirection")==="right"){el.data("scrollWrapper").scrollLeft(el.data("scrollWrapper").scrollLeft()+(o.autoScrollStep))}else{el.data("scrollWrapper").scrollLeft(el.data("scrollWrapper").scrollLeft()-(o.autoScrollStep))}if(el.data("previousScrollLeft")===el.data("scrollWrapper").scrollLeft()){if(el.data("pingPongDirection")==="right"){el.data("pingPongDirection","left");
self._trigger("autoScrollRightLimitReached")}else{el.data("pingPongDirection","right");
self._trigger("autoScrollLeftLimitReached")}}break;
case"endlessloopright":if(el.data("getNextElementWidth")){if((o.startAtElementId!=="")&&(el.data("startAtElementHasNotPassed"))){el.data("swapAt",$("#"+o.startAtElementId).outerWidth(true));
el.data("startAtElementHasNotPassed",false)}else{el.data("swapAt",el.data("scrollableArea").children(":first").outerWidth(true))}el.data("getNextElementWidth",false)}el.data("scrollWrapper").scrollLeft(el.data("scrollWrapper").scrollLeft()+o.autoScrollStep);
if(el.data("swapAt")<=el.data("scrollWrapper").scrollLeft()){el.data("swappedElement",el.data("scrollableArea").children(":first").detach());
el.data("scrollableArea").append(el.data("swappedElement"));
el.data("scrollWrapper").scrollLeft(el.data("scrollWrapper").scrollLeft()-el.data("swappedElement").outerWidth(true));
el.data("getNextElementWidth",true)}break;
case"endlessloopleft":if(el.data("getNextElementWidth")){if((o.startAtElementId!=="")&&(el.data("startAtElementHasNotPassed"))){el.data("swapAt",$("#"+o.startAtElementId).outerWidth(true));
el.data("startAtElementHasNotPassed",false)}else{el.data("swapAt",el.data("scrollableArea").children(":first").outerWidth(true))}el.data("getNextElementWidth",false)}el.data("scrollWrapper").scrollLeft(el.data("scrollWrapper").scrollLeft()-o.autoScrollStep);
if(el.data("scrollWrapper").scrollLeft()===0){el.data("swappedElement",el.data("scrollableArea").children(":last").detach());
el.data("scrollableArea").prepend(el.data("swappedElement"));
el.data("scrollWrapper").scrollLeft(el.data("scrollWrapper").scrollLeft()+el.data("swappedElement").outerWidth(true));
el.data("getNextElementWidth",true)}break;
default:break}},o.autoScrollInterval))},restoreOriginalElements:function(){var self=this,el=this.element;
el.data("scrollableArea").html(el.data("originalElements"));
self.recalculateScrollableArea();
self.moveToElement("first")},show:function(){var el=this.element;
el.data("visible",true);
el.show()},hide:function(){var el=this.element;
el.data("visible",false);
el.hide()},destroy:function(){var el=this.element;
clearInterval(el.data("autoScrollInterval"));
clearInterval(el.data("rightScrollInterval"));
clearInterval(el.data("leftScrollInterval"));
clearInterval(el.data("hideHotSpotBackgroundsInterval"));
el.data("scrollingHotSpotRight").unbind("mouseover");
el.data("scrollingHotSpotRight").unbind("mouseout");
el.data("scrollingHotSpotRight").unbind("mousedown");
el.data("scrollingHotSpotLeft").unbind("mouseover");
el.data("scrollingHotSpotLeft").unbind("mouseout");
el.data("scrollingHotSpotLeft").unbind("mousedown");
el.data("scrollableArea").html(el.data("originalElements"));
el.data("scrollableArea").removeAttr("style");
el.data("scrollingHotSpotRight").removeAttr("style");
el.data("scrollingHotSpotLeft").removeAttr("style");
el.data("scrollWrapper").scrollLeft(0);
el.data("scrollingHotSpotLeft").removeClass("scrollingHotSpotLeftVisible");
el.data("scrollingHotSpotRight").removeClass("scrollingHotSpotRightVisible");
el.data("scrollingHotSpotRight").hide();
el.data("scrollingHotSpotLeft").hide();
$.Widget.prototype.destroy.apply(this,arguments)}})})(jQuery);

