\");\r\n\t\t\t\tel.data(\"scrollableArea\", el.find(\".\" + o.scrollableAreaClass));\r\n\t\t\t}\r\n\r\n\t\t\t// Put the right and left hot spot back into the scroller again\r\n\t\t\t// or create them if they where not present from the beginning.\r\n\t\t\tif (el.data(\"scrollingHotSpotRight\").length === 0) {\r\n\t\t\t\tel.prepend(\"
\");\r\n\t\t\t\tel.data(\"scrollingHotSpotRight\", el.find(\".\" + o.scrollingHotSpotRightClass));\r\n\t\t\t} else {\r\n\t\t\t\tel.prepend(el.data(\"scrollingHotSpotRight\"));\r\n\t\t\t}\r\n\r\n\t\t\tif (el.data(\"scrollingHotSpotLeft\").length === 0) {\r\n\t\t\t\tel.prepend(\"
\");\r\n\t\t\t\tel.data(\"scrollingHotSpotLeft\", el.find(\".\" + o.scrollingHotSpotLeftClass));\r\n\t\t\t} else {\r\n\t\t\t\tel.prepend(el.data(\"scrollingHotSpotLeft\"));\r\n\t\t\t}\r\n\r\n\r\n\t\t\t// Create variables in the element data storage\r\n\t\t\tel.data(\"speedBooster\", 1);\r\n\t\t\tel.data(\"scrollXPos\", 0);\r\n\t\t\tel.data(\"hotSpotWidth\", el.data(\"scrollingHotSpotLeft\").innerWidth());\r\n\t\t\tel.data(\"scrollableAreaWidth\", 0);\r\n\t\t\tel.data(\"startingPosition\", 0);\r\n\t\t\tel.data(\"rightScrollingInterval\", null);\r\n\t\t\tel.data(\"leftScrollingInterval\", null);\r\n\t\t\tel.data(\"autoScrollingInterval\", null);\r\n\t\t\tel.data(\"hideHotSpotBackgroundsInterval\", null);\r\n\t\t\tel.data(\"previousScrollLeft\", 0);\r\n\t\t\tel.data(\"pingPongDirection\", \"right\");\r\n\t\t\tel.data(\"getNextElementWidth\", true);\r\n\t\t\tel.data(\"swapAt\", null);\r\n\t\t\tel.data(\"startAtElementHasNotPassed\", true);\r\n\t\t\tel.data(\"swappedElement\", null);\r\n\t\t\tel.data(\"originalElements\", el.data(\"scrollableArea\").children(o.countOnlyClass));\r\n\t\t\tel.data(\"visible\", true);\r\n\t\t\tel.data(\"enabled\", true);\r\n\t\t\tel.data(\"scrollableAreaHeight\", el.data(\"scrollableArea\").height());\r\n\t\t\tel.data(\"scrollerOffset\", el.offset());\r\n\t\t\tel.data('autoscrollingWasRunning',false);\r\n\r\n\t\t\t/*****************************************\r\n\t\t\tSET UP EVENTS FOR TOUCH SCROLLING\r\n\t\t\t*****************************************/\r\n\t\t\tif (o.touchScrolling && el.data(\"enabled\")) {\r\n\t\t\t\t// Use jquery.kinetic.js for touch scrolling\r\n\t\t\t\t// Vertical scrolling disabled\r\n\t\t\t\tel.data(\"scrollWrapper\").kinetic({\r\n\t\t\t\t\ty: false,\r\n\t\t\t\t\tmoved: function (settings) {\r\n\t\t\t\t\t\tif (o.manualContinuousScrolling) {\r\n\t\t\t\t\t\t\tif (el.data(\"scrollWrapper\").scrollLeft() <= 0) {\r\n\t\t\t\t\t\t\t\tself._checkContinuousSwapLeft();\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tself._checkContinuousSwapRight();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Callback\r\n\t\t\t\t\t\tself._trigger(\"touchMoved\");\r\n\t\t\t\t\t},\r\n\t\t\t\t\tstopped: function (settings) {\r\n\t\t\t\t\t\t// Stop any ongoing animations\r\n\t\t\t\t\t\tel.data(\"scrollWrapper\").stop(true, false);\r\n\r\n\t\t\t\t\t\t// Stop any ongoing auto scrolling\r\n\t\t\t\t\t\tself.stopAutoScrolling();\r\n\r\n\t\t\t\t\t\t// Callback\r\n\t\t\t\t\t\tself._trigger(\"touchStopped\");\r\n },\r\n filterTarget: o.filterTarget\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t/*****************************************\r\n\t\t\t SET UP EVENTS FOR AUTOSCROLL PAUSING\r\n\t\t\t *****************************************/\r\n\t\t\t\t// Mouseover scrollWrapper\r\n\t\t\tel.data(\"scrollWrapper\").bind(\"mouseover\", function () {\r\n\t\t\t\tif (o.autoScrollingPauseOnHover && el.data(\"autoScrollingInterval\") !== null) {\r\n\t\t\t\t\t// Stop any ongoing auto scrolling\r\n\t\t\t\t\tself.stopAutoScrolling();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t// Mouseout scrollWrapper\r\n\t\t\tel.data(\"scrollWrapper\").bind(\"mouseout\", function () {\r\n\t\t\t\tif (o.autoScrollingPauseOnHover && el.data('autoscrollingWasRunning')) {\r\n\t\t\t\t\t// Stop any ongoing auto scrolling\r\n\t\t\t\t\tself.startAutoScrolling();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t/*****************************************\r\n\t\t\tSET UP EVENTS FOR SCROLLING RIGHT\r\n\t\t\t*****************************************/\r\n\t\t\t// Check the mouse X position and calculate\r\n\t\t\t// the relative X position inside the right hotspot\r\n\t\t\tel.data(\"scrollingHotSpotRight\").bind(\"mousemove\", function (e) {\r\n\t\t\t\tif (o.hotSpotScrolling) {\r\n\t\t\t\t\tvar x = e.pageX - $(this).offset().left;\r\n\t\t\t\t\tel.data(\"scrollXPos\", Math.round((x / el.data(\"hotSpotWidth\")) * o.hotSpotScrollingStep));\r\n\r\n\t\t\t\t\t// If the position is less then 1, it's set to 1\r\n\t\t\t\t\tif (el.data(\"scrollXPos\") === Infinity || el.data(\"scrollXPos\") < 1) {\r\n\t\t\t\t\t\tel.data(\"scrollXPos\", 1);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t// Mouseover right hotspot - scrolling\r\n\t\t\tel.data(\"scrollingHotSpotRight\").bind(\"mouseover\", function () {\r\n\t\t\t\tif (o.hotSpotScrolling) {\r\n\t\t\t\t\t// Stop any ongoing animations\r\n\t\t\t\t\tel.data(\"scrollWrapper\").stop(true, false);\r\n\r\n\t\t\t\t\t// Stop any ongoing auto scrolling\r\n\t\t\t\t\tself.stopAutoScrolling();\r\n\r\n\t\t\t\t\t// Start the scrolling interval\r\n\t\t\t\t\tel.data(\"rightScrollingInterval\", setInterval(function () {\r\n\t\t\t\t\t\tif (el.data(\"scrollXPos\") > 0 && el.data(\"enabled\")) {\r\n\t\t\t\t\t\t\tel.data(\"scrollWrapper\").scrollLeft(el.data(\"scrollWrapper\").scrollLeft() + (el.data(\"scrollXPos\") * el.data(\"speedBooster\")));\r\n\r\n\t\t\t\t\t\t\tif (o.manualContinuousScrolling) {\r\n\t\t\t\t\t\t\t\tself._checkContinuousSwapRight();\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tself._showHideHotSpots();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, o.hotSpotScrollingInterval));\r\n\r\n\t\t\t\t\t// Callback\r\n\t\t\t\t\tself._trigger(\"mouseOverRightHotSpot\");\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t// Mouseout right hotspot - stop scrolling\r\n\t\t\tel.data(\"scrollingHotSpotRight\").bind(\"mouseout\", function () {\r\n\t\t\t\tif (o.hotSpotScrolling) {\r\n\t\t\t\t\tclearInterval(el.data(\"rightScrollingInterval\"));\r\n\t\t\t\t\tel.data(\"scrollXPos\", 0);\r\n\r\n\t\t\t\t\t// Easing out after scrolling\r\n\t\t\t\t\tif (o.easingAfterHotSpotScrolling && el.data(\"enabled\")) {\r\n\t\t\t\t\t\tel.data(\"scrollWrapper\").animate({ scrollLeft: el.data(\"scrollWrapper\").scrollLeft() + o.easingAfterHotSpotScrollingDistance }, { duration: o.easingAfterHotSpotScrollingDuration, easing: o.easingAfterHotSpotScrollingFunction });\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\r\n\t\t\t// mousedown right hotspot (add scrolling speed booster)\r\n\t\t\tel.data(\"scrollingHotSpotRight\").bind(\"mousedown\", function () {\r\n\t\t\t\tel.data(\"speedBooster\", o.hotSpotMouseDownSpeedBooster);\r\n\t\t\t});\r\n\r\n\t\t\t// mouseup anywhere (stop boosting the scrolling speed)\r\n\t\t\t$(\"body\").bind(\"mouseup\", function () {\r\n\t\t\t\tel.data(\"speedBooster\", 1);\r\n\t\t\t});\r\n\r\n\t\t\t/*****************************************\r\n\t\t\tSET UP EVENTS FOR SCROLLING LEFT\r\n\t\t\t*****************************************/\r\n\t\t\t// Check the mouse X position and calculate\r\n\t\t\t// the relative X position inside the left hotspot\r\n\t\t\tel.data(\"scrollingHotSpotLeft\").bind(\"mousemove\", function (e) {\r\n\t\t\t\tif (o.hotSpotScrolling) {\r\n\t\t\t\t\tvar x = el.data(\"hotSpotWidth\") - (e.pageX - $(this).offset().left);\r\n\r\n\t\t\t\t\tel.data(\"scrollXPos\", Math.round((x / el.data(\"hotSpotWidth\")) * o.hotSpotScrollingStep));\r\n\r\n\t\t\t\t\t// If the position is less then 1, it's set to 1\r\n\t\t\t\t\tif (el.data(\"scrollXPos\") === Infinity || el.data(\"scrollXPos\") < 1) {\r\n\t\t\t\t\t\tel.data(\"scrollXPos\", 1);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t// Mouseover left hotspot\r\n\t\t\tel.data(\"scrollingHotSpotLeft\").bind(\"mouseover\", function () {\r\n\t\t\t\tif (o.hotSpotScrolling) {\r\n\t\t\t\t\t// Stop any ongoing animations\r\n\t\t\t\t\tel.data(\"scrollWrapper\").stop(true, false);\r\n\r\n\t\t\t\t\t// Stop any ongoing auto scrolling\r\n\t\t\t\t\tself.stopAutoScrolling();\r\n\r\n\t\t\t\t\tel.data(\"leftScrollingInterval\", setInterval(function () {\r\n\t\t\t\t\t\tif (el.data(\"scrollXPos\") > 0 && el.data(\"enabled\")) {\r\n\t\t\t\t\t\t\tel.data(\"scrollWrapper\").scrollLeft(el.data(\"scrollWrapper\").scrollLeft() - (el.data(\"scrollXPos\") * el.data(\"speedBooster\")));\r\n\r\n\t\t\t\t\t\t\tif (o.manualContinuousScrolling) {\r\n\t\t\t\t\t\t\t\tself._checkContinuousSwapLeft();\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tself._showHideHotSpots();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, o.hotSpotScrollingInterval));\r\n\r\n\t\t\t\t\t// Callback\r\n\t\t\t\t\tself._trigger(\"mouseOverLeftHotSpot\");\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t// mouseout left hotspot\r\n\t\t\tel.data(\"scrollingHotSpotLeft\").bind(\"mouseout\", function () {\r\n\t\t\t\tif (o.hotSpotScrolling) {\r\n\t\t\t\t\tclearInterval(el.data(\"leftScrollingInterval\"));\r\n\t\t\t\t\tel.data(\"scrollXPos\", 0);\r\n\r\n\t\t\t\t\t// Easing out after scrolling\r\n\t\t\t\t\tif (o.easingAfterHotSpotScrolling && el.data(\"enabled\")) {\r\n\t\t\t\t\t\tel.data(\"scrollWrapper\").animate({ scrollLeft: el.data(\"scrollWrapper\").scrollLeft() - o.easingAfterHotSpotScrollingDistance }, { duration: o.easingAfterHotSpotScrollingDuration, easing: o.easingAfterHotSpotScrollingFunction });\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t// mousedown left hotspot (add scrolling speed booster)\r\n\t\t\tel.data(\"scrollingHotSpotLeft\").bind(\"mousedown\", function () {\r\n\t\t\t\tel.data(\"speedBooster\", o.hotSpotMouseDownSpeedBooster);\r\n\t\t\t});\r\n\r\n\t\t\t/*****************************************\r\n\t\t\tSET UP EVENT FOR MOUSEWHEEL SCROLLING\r\n\t\t\t*****************************************/\r\n\t\t\tel.data(\"scrollableArea\").mousewheel(function (event, delta, deltaX, deltaY) {\r\n\r\n\t\t\t\tif (el.data(\"enabled\") && o.mousewheelScrolling.length > 0) {\r\n\t\t\t\t\tvar pixels;\r\n\r\n\t\t\t\t\t// Can be either positive or negative\r\n\t\t\t\t\t// Is multiplied/inverted by minus one since you want it to scroll\r\n\t\t\t\t\t// left when moving the wheel down/right and right when moving the wheel up/left\r\n\t\t\t\t\tif (o.mousewheelScrolling === \"vertical\" && deltaY !== 0) {\r\n\t\t\t\t\t\t// Stop any ongoing auto scrolling if it's running\r\n\t\t\t\t\t\tself.stopAutoScrolling();\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\tpixels = Math.round((o.mousewheelScrollingStep * deltaY) * -1);\r\n\t\t\t\t\t\tself.move(pixels);\r\n\t\t\t\t\t} else if (o.mousewheelScrolling === \"horizontal\" && deltaX !== 0) {\r\n\t\t\t\t\t\t// Stop any ongoing auto scrolling if it's running\r\n\t\t\t\t\t\tself.stopAutoScrolling();\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\tpixels = Math.round((o.mousewheelScrollingStep * deltaX) * -1);\r\n\t\t\t\t\t\tself.move(pixels);\r\n\t\t\t\t\t} else if (o.mousewheelScrolling === \"allDirections\") {\r\n\t\t\t\t\t\t// Stop any ongoing auto scrolling if it's running\r\n\t\t\t\t\t\tself.stopAutoScrolling();\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\tpixels = Math.round((o.mousewheelScrollingStep * delta) * -1);\r\n\t\t\t\t\t\tself.move(pixels);\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t// Capture and disable mousewheel events when the pointer\r\n\t\t\t// is over any of the hotspots\r\n\t\t\tif (o.mousewheelScrolling) {\r\n\t\t\t\tel.data(\"scrollingHotSpotLeft\").add(el.data(\"scrollingHotSpotRight\")).mousewheel(function (event) {\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t/*****************************************\r\n\t\t\tSET UP EVENT FOR RESIZING THE BROWSER WINDOW\r\n\t\t\t*****************************************/\r\n\t\t\t$(window).bind(\"resize\", function () {\r\n\t\t\t\tself._showHideHotSpots();\r\n\t\t\t\tself._trigger(\"windowResized\");\r\n\t\t\t});\r\n\r\n\t\t\t/*****************************************\r\n\t\t\tFETCHING CONTENT ON INITIALIZATION\r\n\t\t\t*****************************************/\r\n\t\t\t// If getContentOnLoad is present in the options,\r\n\t\t\t// sort out the method and parameters and get the content\r\n\r\n\t\t\tif (!(jQuery.isEmptyObject(o.getContentOnLoad))) {\r\n\t\t\t\tself[o.getContentOnLoad.method](o.getContentOnLoad.content, o.getContentOnLoad.manipulationMethod, o.getContentOnLoad.addWhere, o.getContentOnLoad.filterTag);\r\n\t\t\t}\r\n\r\n\t\t\t// Should it be hidden on start?\r\n\t\t\tif (o.hiddenOnStart) {\r\n\t\t\t\tself.hide();\r\n\t\t\t}\r\n\r\n\t\t\t/*****************************************\r\n\t\t\tAUTOSCROLLING\r\n\t\t\t*****************************************/\r\n\t\t\t// The $(window).load event handler is used because the width of the elements are not calculated\r\n\t\t\t// properly until then, at least not in Google Chrome. The start of the auto scrolling and the\r\n\t\t\t// setting of the hotspot backgrounds is started here as well for the same reason.\r\n\t\t\t// If the auto scrolling is not started in $(window).load, it won't start because it\r\n\t\t\t// will interpret the scrollable areas as too short.\r\n\t\t\t$(window).on('load', function () {\r\n\r\n\t\t\t\t// If scroller is not hidden, recalculate the scrollable area\r\n\t\t\t\tif (!(o.hiddenOnStart)) {\r\n\t\t\t\t\tself.recalculateScrollableArea();\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Autoscrolling is active\r\n\t\t\t\tif ((o.autoScrollingMode.length > 0) && !(o.hiddenOnStart)) {\r\n\t\t\t\t\tself.startAutoScrolling();\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// If the user wants to have visible hotspot backgrounds,\r\n\t\t\t\t// here is where it's taken care of\r\n\t\t\t\tif (o.autoScrollingMode !== \"always\") {\r\n\r\n\t\t\t\t\tswitch (o.visibleHotSpotBackgrounds) {\r\n\t\t\t\t\t\tcase \"always\":\r\n\t\t\t\t\t\t\tself.showHotSpotBackgrounds();\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"onStart\":\r\n\t\t\t\t\t\t\tself.showHotSpotBackgrounds();\r\n\t\t\t\t\t\t\tel.data(\"hideHotSpotBackgroundsInterval\", setTimeout(function () {\r\n\t\t\t\t\t\t\t\tself.hideHotSpotBackgrounds(250);\r\n\t\t\t\t\t\t\t}, o.hotSpotsVisibleTime));\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"hover\":\r\n\t\t\t\t\t\t\tel.mouseenter(function (event) {\r\n\t\t\t\t\t\t\t\tif (o.hotSpotScrolling) {\r\n\t\t\t\t\t\t\t\t\tevent.stopPropagation();\r\n\t\t\t\t\t\t\t\t\tself.showHotSpotBackgrounds(250);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}).mouseleave(function (event) {\r\n\t\t\t\t\t\t\t\tif (o.hotSpotScrolling) {\r\n\t\t\t\t\t\t\t\t\tevent.stopPropagation();\r\n\t\t\t\t\t\t\t\t\tself.hideHotSpotBackgrounds(250);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tself._showHideHotSpots();\r\n\r\n\t\t\t\tself._trigger(\"setupComplete\");\r\n\r\n\t\t\t});\r\n\r\n\t\t},\r\n\t\t/**********************************************************\r\n\t\t_init\r\n\t\t**********************************************************/\r\n\t\t// When the contents of the scrollable area is changed outside the widget,\r\n\t\t// the widget must be reinitilaized.\r\n\t\t// This code is run every time the widget is called without arguments\r\n\t\t _init: function () {\r\n\t\t\tvar self = this, el = this.element;\r\n\r\n\t\t\t// Recalculate the total width of the elements inside the scrollable area\r\n\t\t\tself.recalculateScrollableArea();\r\n\r\n\t\t\t// Determine which hotspots to show\r\n\t\t\tself._showHideHotSpots();\r\n\r\n\t\t\t// Trigger callback\r\n\t\t\tself._trigger(\"initializationComplete\");\r\n\t\t},\r\n\t\t/**********************************************************\r\n\t\tOverride _setOption and handle altered options\r\n\t\t**********************************************************/\r\n\t\t_setOption: function (key, value) {\r\n\t\t\tvar self = this, o = this.options, el = this.element;\r\n\r\n\t\t\t// Update option\r\n\t\t\to[key] = value;\r\n\r\n\t\t\tif (key === \"hotSpotScrolling\") {\r\n\t\t\t\t// Handler if the option hotSpotScrolling is altered\r\n\t\t\t\tif (value === true) {\r\n\t\t\t\t\tself._showHideHotSpots();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tel.data(\"scrollingHotSpotLeft\").hide();\r\n\t\t\t\t\tel.data(\"scrollingHotSpotRight\").hide();\r\n\t\t\t\t}\r\n\t\t\t} else if (key === \"autoScrollingStep\" ||\r\n\t\t\t// Make sure that certain values are integers, otherwise\r\n\t\t\t// they will summon bad spirits in the plugin\r\n\t\t\t\tkey === \"easingAfterHotSpotScrollingDistance\" ||\r\n\t\t\t\tkey === \"easingAfterHotSpotScrollingDuration\" ||\r\n\t\t\t\tkey === \"easingAfterMouseWheelScrollingDuration\") {\r\n\t\t\t\to[key] = parseInt(value, 10);\r\n\t\t\t} else if (key === \"autoScrollingInterval\") {\r\n\t\t\t\t// Handler if the autoScrollingInterval is altered\r\n\t\t\t\to[key] = parseInt(value, 10);\r\n\t\t\t\tself.startAutoScrolling();\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\t/**********************************************************\r\n\t\tHotspot functions\r\n\t\t**********************************************************/\r\n\t\tshowHotSpotBackgrounds: function (fadeSpeed) {\r\n\r\n\t\t\t// Alter the CSS (SmoothDivScroll.css) if you want to customize\r\n\t\t\t// the look'n'feel of the visible hotspots\r\n\t\t\tvar self = this, el = this.element, o = this.options;\r\n\r\n\r\n\t\t\t// Fade in the hotspot backgrounds\r\n\t\t\tif (fadeSpeed !== undefined) {\r\n\t\t\t\t// Before the fade-in starts, we need to make sure the opacity is zero\r\n\t\t\t\t//el.data(\"scrollingHotSpotLeft\").add(el.data(\"scrollingHotSpotRight\")).css(\"opacity\", \"0.0\");\r\n\r\n\t\t\t\tel.data(\"scrollingHotSpotLeft\").addClass(o.scrollingHotSpotLeftVisibleClass);\r\n\t\t\t\tel.data(\"scrollingHotSpotRight\").addClass(o.scrollingHotSpotRightVisibleClass);\r\n\r\n\t\t\t\t// Fade in the hotspots\r\n\t\t\t\tel.data(\"scrollingHotSpotLeft\").add(el.data(\"scrollingHotSpotRight\")).fadeTo(fadeSpeed, 0.35);\r\n\t\t\t}\r\n\t\t\t// Don't fade, just show them\r\n\t\t\telse {\r\n\r\n\t\t\t\t// The left hotspot\r\n\t\t\t\tel.data(\"scrollingHotSpotLeft\").addClass(o.scrollingHotSpotLeftVisibleClass);\r\n\t\t\t\tel.data(\"scrollingHotSpotLeft\").removeAttr(\"style\");\r\n\r\n\t\t\t\t// The right hotspot\r\n\t\t\t\tel.data(\"scrollingHotSpotRight\").addClass(o.scrollingHotSpotRightVisibleClass);\r\n\t\t\t\tel.data(\"scrollingHotSpotRight\").removeAttr(\"style\");\r\n\t\t\t}\r\n\r\n\t\t\tself._showHideHotSpots();\r\n\r\n\t\t},\r\n\t\thideHotSpotBackgrounds: function (fadeSpeed) {\r\n\t\t\tvar el = this.element, o = this.options;\r\n\r\n\t\t\t// Fade out the hotspot backgrounds\r\n\t\t\tif (fadeSpeed !== undefined) {\r\n\r\n\t\t\t\t// Fade out the left hotspot\r\n\t\t\t\tel.data(\"scrollingHotSpotLeft\").fadeTo(fadeSpeed, 0.0, function () {\r\n\t\t\t\t\tel.data(\"scrollingHotSpotLeft\").removeClass(o.scrollingHotSpotLeftVisibleClass);\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// Fade out the right hotspot\r\n\t\t\t\tel.data(\"scrollingHotSpotRight\").fadeTo(fadeSpeed, 0.0, function () {\r\n\t\t\t\t\tel.data(\"scrollingHotSpotRight\").removeClass(o.scrollingHotSpotRightVisibleClass);\r\n\t\t\t\t});\r\n\r\n\t\t\t}\r\n\t\t\t// Don't fade, just hide them\r\n\t\t\telse {\r\n\t\t\t\tel.data(\"scrollingHotSpotLeft\").removeClass(o.scrollingHotSpotLeftVisibleClass).removeAttr(\"style\");\r\n\t\t\t\tel.data(\"scrollingHotSpotRight\").removeClass(o.scrollingHotSpotRightVisibleClass).removeAttr(\"style\");\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\t// Function for showing and hiding hotspots depending on the\r\n\t\t// offset of the scrolling\r\n\t\t_showHideHotSpots: function () {\r\n\t\t\tvar self = this, el = this.element, o = this.options;\r\n\r\n\t\t\t// Hot spot scrolling is not enabled so show no hot spots\r\n\t\t\tif (!(o.hotSpotScrolling)) {\r\n\t\t\t\tel.data(\"scrollingHotSpotLeft\").hide();\r\n\t\t\t\tel.data(\"scrollingHotSpotRight\").hide();\r\n\t\t\t} else {\r\n\r\n\t\t\t\t// If the manual continuous scrolling option is set show both\r\n\t\t\t\tif (o.hotSpotScrolling && o.autoScrollingMode !== \"always\" && el.data(\"autoScrollingInterval\") !== null) {\r\n\t\t\t\t\tel.data(\"scrollingHotSpotLeft\").show();\r\n\t\t\t\t\tel.data(\"scrollingHotSpotRight\").show();\r\n\t\t\t\t}\r\n\t\t\t\t// Autoscrolling not set to always and hotspot scrolling enabled.\r\n\t\t\t\t// Regular hot spot scrolling.\r\n\t\t\t\telse if (o.autoScrollingMode !== \"always\" && o.hotSpotScrolling) {\r\n\t\t\t\t\t// If the scrollable area is shorter than the scroll wrapper, both hotspots\r\n\t\t\t\t\t// should be hidden\r\n\t\t\t\t\tif (el.data(\"scrollableAreaWidth\") <= (el.data(\"scrollWrapper\").innerWidth())) {\r\n\t\t\t\t\t\tel.data(\"scrollingHotSpotLeft\").hide();\r\n\t\t\t\t\t\tel.data(\"scrollingHotSpotRight\").hide();\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// When you can't scroll further left the left scroll hotspot should be hidden\r\n\t\t\t\t\t// and the right hotspot visible.\r\n\t\t\t\t\telse if (el.data(\"scrollWrapper\").scrollLeft() === 0) {\r\n\t\t\t\t\t\tel.data(\"scrollingHotSpotLeft\").hide();\r\n\t\t\t\t\t\tel.data(\"scrollingHotSpotRight\").show();\r\n\t\t\t\t\t\t// Callback\r\n\t\t\t\t\t\tself._trigger(\"scrollerLeftLimitReached\");\r\n\t\t\t\t\t\t// Clear interval\r\n\t\t\t\t\t\tclearInterval(el.data(\"leftScrollingInterval\"));\r\n\t\t\t\t\t\tel.data(\"leftScrollingInterval\", null);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// When you can't scroll further right\r\n\t\t\t\t\t// the right scroll hotspot should be hidden\r\n\t\t\t\t\t// and the left hotspot visible\r\n\t\t\t\t\telse if (el.data(\"scrollableAreaWidth\") <= (el.data(\"scrollWrapper\").innerWidth() + el.data(\"scrollWrapper\").scrollLeft())) {\r\n\t\t\t\t\t\tel.data(\"scrollingHotSpotLeft\").show();\r\n\t\t\t\t\t\tel.data(\"scrollingHotSpotRight\").hide();\r\n\t\t\t\t\t\t// Callback\r\n\t\t\t\t\t\tself._trigger(\"scrollerRightLimitReached\");\r\n\t\t\t\t\t\t// Clear interval\r\n\t\t\t\t\t\tclearInterval(el.data(\"rightScrollingInterval\"));\r\n\t\t\t\t\t\tel.data(\"rightScrollingInterval\", null);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// If you are somewhere in the middle of your\r\n\t\t\t\t\t// scrolling, both hotspots should be visible\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tel.data(\"scrollingHotSpotLeft\").show();\r\n\t\t\t\t\t\tel.data(\"scrollingHotSpotRight\").show();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t// If auto scrolling is set to always, there should be no hotspots\r\n\t\t\t\telse {\r\n\t\t\t\t\tel.data(\"scrollingHotSpotLeft\").hide();\r\n\t\t\t\t\tel.data(\"scrollingHotSpotRight\").hide();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\r\n\t\t},\r\n\t\t// Function for calculating the scroll position of a certain element\r\n\t\t_setElementScrollPosition: function (method, element) {\r\n\t\t\tvar el = this.element, o = this.options, tempScrollPosition = 0;\r\n\r\n\t\t\tswitch (method) {\r\n\t\t\t\tcase \"first\":\r\n\t\t\t\t\tel.data(\"scrollXPos\", 0);\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tcase \"start\":\r\n\t\t\t\t\t// Check to see if there is a specified start element in the options\r\n\t\t\t\t\t// and that the element exists in the DOM\r\n\t\t\t\t\tif (o.startAtElementId !== \"\") {\r\n\t\t\t\t\t\tif (el.data(\"scrollableArea\").has(\"#\" + o.startAtElementId)) {\r\n\t\t\t\t\t\t\ttempScrollPosition = $(\"#\" + o.startAtElementId).position().left;\r\n\t\t\t\t\t\t\tel.data(\"scrollXPos\", tempScrollPosition);\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn false;\r\n\t\t\t\tcase \"last\":\r\n\t\t\t\t\tel.data(\"scrollXPos\", (el.data(\"scrollableAreaWidth\") - el.data(\"scrollWrapper\").innerWidth()));\r\n\t\t\t\t\treturn true;\r\n\t\t\t\tcase \"number\":\r\n\t\t\t\t\t// Check to see that an element number is passed\r\n\t\t\t\t\tif (!(isNaN(element))) {\r\n\t\t\t\t\t\ttempScrollPosition = el.data(\"scrollableArea\").children(o.countOnlyClass).eq(element - 1).position().left;\r\n\t\t\t\t\t\tel.data(\"scrollXPos\", tempScrollPosition);\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn false;\r\n\t\t\t\tcase \"id\":\r\n\t\t\t\t\t// Check that an element id is passed and that the element exists in the DOM\r\n\t\t\t\t\tif (element.length > 0) {\r\n\t\t\t\t\t\tif (el.data(\"scrollableArea\").has(\"#\" + element)) {\r\n\t\t\t\t\t\t\ttempScrollPosition = $(\"#\" + element).position().left;\r\n\t\t\t\t\t\t\tel.data(\"scrollXPos\", tempScrollPosition);\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn false;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\r\n\t\t},\r\n\t\t/**********************************************************\r\n\t\tJumping to a certain element\r\n\t\t**********************************************************/\r\n\t\tjumpToElement: function (jumpTo, element) {\r\n\t\t\tvar self = this, el = this.element;\r\n\r\n\t\t\t// Check to see that the scroller is enabled\r\n\t\t\tif (el.data(\"enabled\")) {\r\n\t\t\t\t// Get the position of the element to scroll to\r\n\t\t\t\tif (self._setElementScrollPosition(jumpTo, element)) {\r\n\t\t\t\t\t// Jump to the element\r\n\t\t\t\t\tel.data(\"scrollWrapper\").scrollLeft(el.data(\"scrollXPos\"));\r\n\t\t\t\t\t// Check the hotspots\r\n\t\t\t\t\tself._showHideHotSpots();\r\n\t\t\t\t\t// Trigger the right callback\r\n\t\t\t\t\tswitch (jumpTo) {\r\n\t\t\t\t\t\tcase \"first\":\r\n\t\t\t\t\t\t\tself._trigger(\"jumpedToFirstElement\");\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"start\":\r\n\t\t\t\t\t\t\tself._trigger(\"jumpedToStartElement\");\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"last\":\r\n\t\t\t\t\t\t\tself._trigger(\"jumpedToLastElement\");\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"number\":\r\n\t\t\t\t\t\t\tself._trigger(\"jumpedToElementNumber\", null, { \"elementNumber\": element });\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"id\":\r\n\t\t\t\t\t\t\tself._trigger(\"jumpedToElementId\", null, { \"elementId\": element });\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t/**********************************************************\r\n\t\tScrolling to a certain element\r\n\t\t**********************************************************/\r\n\t\tscrollToElement: function (scrollTo, element) {\r\n\t\t\tvar self = this, el = this.element, o = this.options, autoscrollingWasRunning = false;\r\n\r\n\t\t\tif (el.data(\"enabled\")) {\r\n\t\t\t\t// Get the position of the element to scroll to\r\n\t\t\t\tif (self._setElementScrollPosition(scrollTo, element)) {\r\n\t\t\t\t\t// Stop any ongoing auto scrolling\r\n\t\t\t\t\tif (el.data(\"autoScrollingInterval\") !== null) {\r\n\t\t\t\t\t\tself.stopAutoScrolling();\r\n\t\t\t\t\t\tautoscrollingWasRunning = true;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Stop any other running animations\r\n\t\t\t\t\t// (clear queue but don't jump to the end)\r\n\t\t\t\t\tel.data(\"scrollWrapper\").stop(true, false);\r\n\r\n\t\t\t\t\t// Do the scolling animation\r\n\t\t\t\t\tel.data(\"scrollWrapper\").animate({\r\n\t\t\t\t\t\tscrollLeft: el.data(\"scrollXPos\")\r\n\t\t\t\t\t}, { duration: o.scrollToAnimationDuration, easing: o.scrollToEasingFunction, complete: function () {\r\n\t\t\t\t\t\t// If auto scrolling was running before, start it again\r\n\t\t\t\t\t\tif (autoscrollingWasRunning) {\r\n\t\t\t\t\t\t\tself.startAutoScrolling();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tself._showHideHotSpots();\r\n\r\n\t\t\t\t\t\t// Trigger the right callback\r\n\t\t\t\t\t\tswitch (scrollTo) {\r\n\t\t\t\t\t\t\tcase \"first\":\r\n\t\t\t\t\t\t\t\tself._trigger(\"scrolledToFirstElement\");\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tcase \"start\":\r\n\t\t\t\t\t\t\t\tself._trigger(\"scrolledToStartElement\");\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tcase \"last\":\r\n\t\t\t\t\t\t\t\tself._trigger(\"scrolledToLastElement\");\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tcase \"number\":\r\n\t\t\t\t\t\t\t\tself._trigger(\"scrolledToElementNumber\", null, { \"elementNumber\": element });\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tcase \"id\":\r\n\t\t\t\t\t\t\t\tself._trigger(\"scrolledToElementId\", null, { \"elementId\": element });\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\tmove: function (pixels) {\r\n\t\t\tvar self = this, el = this.element, o = this.options;\r\n\t\t\t// clear queue, move to end\r\n\t\t\tel.data(\"scrollWrapper\").stop(true, true);\r\n\r\n\t\t\t// Only run this code if it's possible to scroll left or right,\r\n\t\t\tif ((pixels < 0 && el.data(\"scrollWrapper\").scrollLeft() > 0) || (pixels > 0 && el.data(\"scrollableAreaWidth\") > (el.data(\"scrollWrapper\").innerWidth() + el.data(\"scrollWrapper\").scrollLeft())) || o.manualContinuousScrolling ) {\r\n\r\n var scrollLength = el.data(\"scrollableArea\").width() - el.data(\"scrollWrapper\").width();\r\n var sOffset = el.data(\"scrollWrapper\").scrollLeft() + pixels;\r\n\r\n if( sOffset < 0 ) { // Swap last element to be the first one if scroll out of the left edge of view\r\n\r\n var forceSwapElementLeft = function(){\r\n el.data(\"swappedElement\", el.data(\"scrollableArea\").children(\":last\").detach());\r\n el.data(\"scrollableArea\").prepend(el.data(\"swappedElement\"));\r\n el.data(\"scrollWrapper\").scrollLeft(el.data(\"scrollWrapper\").scrollLeft() + el.data(\"swappedElement\").outerWidth(true));\r\n };\r\n\r\n while(sOffset < 0 ){ // keep swap elements left until it has enough length for scrolling left\r\n forceSwapElementLeft();\r\n sOffset = el.data(\"scrollableArea\").children(\":first\").outerWidth(true) + sOffset;\r\n }\r\n\r\n } else if( sOffset - scrollLength > 0 ){ // Swap the first element to be the last one if scroll out of the right edge of view\r\n\r\n var forceSwapElementRight = function(){\r\n el.data(\"swappedElement\", el.data(\"scrollableArea\").children(\":first\").detach());\r\n el.data(\"scrollableArea\").append(el.data(\"swappedElement\"));\r\n var wrapperLeft = el.data(\"scrollWrapper\").scrollLeft();\r\n el.data(\"scrollWrapper\").scrollLeft(wrapperLeft - el.data(\"swappedElement\").outerWidth(true));\r\n };\r\n\r\n while( sOffset - scrollLength > 0 ){ // keep swap elements right until it has enough length for scrolling right\r\n forceSwapElementRight();\r\n sOffset = sOffset - el.data(\"scrollableArea\").children(\":last\").outerWidth(true);\r\n }\r\n\r\n }\r\n\r\n\t\t\t\tif (o.easingAfterMouseWheelScrolling) {\r\n\r\n el.data(\"scrollWrapper\").animate({ scrollLeft: el.data(\"scrollWrapper\").scrollLeft() + pixels }, { duration: o.easingAfterMouseWheelScrollingDuration, easing: o.easingAfterMouseWheelFunction, complete: function () {\r\n self._showHideHotSpots();\r\n if (o.manualContinuousScrolling) {\r\n if (pixels > 0) {\r\n self._checkContinuousSwapRight();\r\n } else {\r\n self._checkContinuousSwapLeft();\r\n }\r\n }\r\n }\r\n });\r\n\r\n\t\t\t\t} else {\r\n\t\t\t\t\tel.data(\"scrollWrapper\").scrollLeft(el.data(\"scrollWrapper\").scrollLeft() + pixels);\r\n\t\t\t\t\tself._showHideHotSpots();\r\n\r\n\t\t\t\t\tif (o.manualContinuousScrolling) {\r\n\t\t\t\t\t\tif (pixels > 0) {\r\n\t\t\t\t\t\t\tself._checkContinuousSwapRight();\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tself._checkContinuousSwapLeft();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t}\r\n\r\n },\r\n\t\t/**********************************************************\r\n\t\tAdding or replacing content\r\n\t\t**********************************************************/\r\n\t\t/* Arguments are:\r\n\t\tcontent - a valid URL to a Flickr feed - string\r\n\t\tmanipulationMethod - addFirst, addLast or replace (default) - string\r\n\t\t*/\r\n\t\tgetFlickrContent: function (content, manipulationMethod) {\r\n\t\t\tvar self = this, el = this.element;\r\n\r\n\t\t\t$.getJSON(content, function (data) {\r\n\t\t\t\t// small square - size is 75x75\r\n\t\t\t\t// thumbnail -> large - size is the longest side\r\n\t\t\t\tvar flickrImageSizes = [{ size: \"small square\", pixels: 75, letter: \"_s\" },\r\n\t\t\t\t\t\t\t\t\t\t{ size: \"thumbnail\", pixels: 100, letter: \"_t\" },\r\n\t\t\t\t\t\t\t\t\t\t{ size: \"small\", pixels: 240, letter: \"_m\" },\r\n\t\t\t\t\t\t\t\t\t\t{ size: \"medium\", pixels: 500, letter: \"\" },\r\n\t\t\t\t\t\t\t\t\t\t{ size: \"medium 640\", pixels: 640, letter: \"_z\" },\r\n\t\t\t\t\t\t\t\t\t\t{ size: \"large\", pixels: 1024, letter: \"_b\"}];\r\n\t\t\t\tvar loadedFlickrImages = [];\r\n\t\t\t\tvar imageIdStringBuffer = [];\r\n\t\t\t\tvar startingIndex;\r\n\t\t\t\tvar numberOfFlickrItems = data.items.length;\r\n\t\t\t\tvar loadedFlickrImagesCounter = 0;\r\n\r\n\t\t\t\t// Determine a plausible starting value for the\r\n\t\t\t\t// image height\r\n\t\t\t\tif (el.data(\"scrollableAreaHeight\") <= 75) {\r\n\t\t\t\t\tstartingIndex = 0;\r\n\t\t\t\t} else if (el.data(\"scrollableAreaHeight\") <= 100) {\r\n\t\t\t\t\tstartingIndex = 1;\r\n\t\t\t\t} else if (el.data(\"scrollableAreaHeight\") <= 240) {\r\n\t\t\t\t\tstartingIndex = 2;\r\n\t\t\t\t} else if (el.data(\"scrollableAreaHeight\") <= 500) {\r\n\t\t\t\t\tstartingIndex = 3;\r\n\t\t\t\t} else if (el.data(\"scrollableAreaHeight\") <= 640) {\r\n\t\t\t\t\tstartingIndex = 4;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstartingIndex = 5;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Put all items from the feed in an array.\r\n\t\t\t\t// This is necessary\r\n\t\t\t\t$.each(data.items, function (index, item) {\r\n\t\t\t\t\tloadFlickrImage(item, startingIndex);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tfunction loadFlickrImage(item, sizeIndex) {\r\n\t\t\t\t\tvar path = item.media.m;\r\n\t\t\t\t\tvar imgSrc = path.replace(\"_m\", flickrImageSizes[sizeIndex].letter);\r\n\t\t\t\t\tvar tempImg = $(\"
\").attr(\"src\", imgSrc);\r\n\r\n\t\t\t\t\ttempImg.load(function () {\r\n\t\t\t\t\t\t// Is it still smaller? Load next size\r\n\t\t\t\t\t\tif (this.height < el.data(\"scrollableAreaHeight\")) {\r\n\t\t\t\t\t\t\t// Load a bigger image, if possible\r\n\t\t\t\t\t\t\tif ((sizeIndex + 1) < flickrImageSizes.length) {\r\n\t\t\t\t\t\t\t\tloadFlickrImage(item, sizeIndex + 1);\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\taddImageToLoadedImages(this);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\taddImageToLoadedImages(this);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Finishing stuff to do when all images have been loaded\r\n\t\t\t\t\t\tif (loadedFlickrImagesCounter === numberOfFlickrItems) {\r\n\t\t\t\t\t\t\tswitch (manipulationMethod) {\r\n\t\t\t\t\t\t\t\tcase \"addFirst\":\r\n\t\t\t\t\t\t\t\t\t// Add the loaded content first in the scrollable area\r\n\t\t\t\t\t\t\t\t\tel.data(\"scrollableArea\").children(\":first\").before(loadedFlickrImages);\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\tcase \"addLast\":\r\n\t\t\t\t\t\t\t\t\t// Add the loaded content last in the scrollable area\r\n\t\t\t\t\t\t\t\t\tel.data(\"scrollableArea\").children(\":last\").after(loadedFlickrImages);\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\t\t// Replace the content in the scrollable area\r\n\t\t\t\t\t\t\t\t\tel.data(\"scrollableArea\").html(loadedFlickrImages);\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t// Recalculate the total width of the elements inside the scrollable area\r\n\t\t\t\t\t\t\tself.recalculateScrollableArea();\r\n\r\n\t\t\t\t\t\t\t// Determine which hotspots to show\r\n\t\t\t\t\t\t\tself._showHideHotSpots();\r\n\r\n\t\t\t\t\t\t\t// Trigger callback\r\n\t\t\t\t\t\t\tself._trigger(\"addedFlickrContent\", null, { \"addedElementIds\": imageIdStringBuffer });\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Add the loaded content first or last in the scrollable area\r\n\t\t\t\tfunction addImageToLoadedImages(imageObj) {\r\n\t\t\t\t\t// Calculate the scaled width\r\n\t\t\t\t\tvar widthScalingFactor = el.data(\"scrollableAreaHeight\") / imageObj.height;\r\n\t\t\t\t\tvar tempWidth = Math.round(imageObj.width * widthScalingFactor);\r\n\t\t\t\t\t// Set an id for the image - the filename is used as an id\r\n\t\t\t\t\tvar tempIdArr = $(imageObj).attr(\"src\").split(\"/\");\r\n\t\t\t\t\tvar lastElemIndex = (tempIdArr.length - 1);\r\n\t\t\t\t\ttempIdArr = tempIdArr[lastElemIndex].split(\".\");\r\n\t\t\t\t\t$(imageObj).attr(\"id\", tempIdArr[0]);\r\n\t\t\t\t\t// Set the height of the image to the height of the scrollable area and add the width\r\n\t\t\t\t\t$(imageObj).css({ \"height\": el.data(\"scrollableAreaHeight\"), \"width\": tempWidth });\r\n\t\t\t\t\t// Add the id of the image to the array of id's - this\r\n\t\t\t\t\t// is used as a parameter when the callback is triggered\r\n\t\t\t\t\timageIdStringBuffer.push(tempIdArr[0]);\r\n\t\t\t\t\t// Add the image to the array of loaded images\r\n\t\t\t\t\tloadedFlickrImages.push(imageObj);\r\n\r\n\t\t\t\t\t// Increment counter for loaded images\r\n\t\t\t\t\tloadedFlickrImagesCounter++;\r\n\t\t\t\t}\r\n\r\n\t\t\t});\r\n\t\t},\r\n\t\t/* Arguments are:\r\n\t\tcontent - a valid URL to an AJAX content source - string\r\n\t\tmanipulationMethod - addFirst, addLast or replace (default) - string\r\n\t\tfilterTag - a jQuery selector that matches the elements from the AJAX content\r\n\t\tsource that you want, for example \".myClass\" or \"#thisDiv\" or \"div\" - string\r\n\t\t*/\r\n\t\tgetAjaxContent: function (content, manipulationMethod, filterTag) {\r\n\t\t\tvar self = this, el = this.element;\r\n\t\t\t$.ajaxSetup({ cache: false });\r\n\r\n\t\t\t$.get(content, function (data) {\r\n\t\t\t\tvar filteredContent;\r\n\r\n\t\t\t\tif (filterTag !== undefined) {\r\n\t\t\t\t\tif (filterTag.length > 0) {\r\n\t\t\t\t\t\t// A bit of a hack since I can't know if the element\r\n\t\t\t\t\t\t// that the user wants is a direct child of body (= use filter)\r\n\t\t\t\t\t\t// or other types of elements (= use find)\r\n\t\t\t\t\t\tfilteredContent = $(\"
\").html(data).find(filterTag);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tfilteredContent = content;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tfilteredContent = data;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tswitch (manipulationMethod) {\r\n\t\t\t\t\tcase \"addFirst\":\r\n\t\t\t\t\t\t// Add the loaded content first in the scrollable area\r\n\t\t\t\t\t\tel.data(\"scrollableArea\").children(\":first\").before(filteredContent);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"addLast\":\r\n\t\t\t\t\t\t// Add the loaded content last in the scrollable area\r\n\t\t\t\t\t\tel.data(\"scrollableArea\").children(\":last\").after(filteredContent);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t// Replace the content in the scrollable area\r\n\t\t\t\t\t\tel.data(\"scrollableArea\").html(filteredContent);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Recalculate the total width of the elements inside the scrollable area\r\n\t\t\t\tself.recalculateScrollableArea();\r\n\r\n\t\t\t\t// Determine which hotspots to show\r\n\t\t\t\tself._showHideHotSpots();\r\n\r\n\t\t\t\t// Trigger callback\r\n\t\t\t\tself._trigger(\"addedAjaxContent\");\r\n\r\n\t\t\t});\r\n\t\t},\r\n\t\tgetHtmlContent: function (content, manipulationMethod, filterTag) {\r\n\t\t\tvar self = this, el = this.element;\r\n\r\n\t\t\t// No AJAX involved at all - just add raw HTML-content\r\n\t\t\t/* Arguments are:\r\n\t\t\tcontent - any raw HTML that you want - string\r\n\t\t\tmanipulationMethod - addFirst, addLast or replace (default) - string\r\n\t\t\tfilterTag - a jQuery selector that matches the elements from the AJAX content\r\n\t\t\tsource that you want, for example \".myClass\" or \"#thisDiv\" or \"div\" - string\r\n\t\t\t*/\r\n\t\t\tvar filteredContent;\r\n\t\t\tif (filterTag !== undefined) {\r\n\t\t\t\tif (filterTag.length > 0) {\r\n\t\t\t\t\t// A bit of a hack since I can't know if the element\r\n\t\t\t\t\t// that the user wants is a direct child of body (= use filter)\r\n\t\t\t\t\t// or other types of elements (= use find)\r\n\t\t\t\t\tfilteredContent = $(\"
\").html(content).find(filterTag);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tfilteredContent = content;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tfilteredContent = content;\r\n\t\t\t}\r\n\r\n\t\t\tswitch (manipulationMethod) {\r\n\t\t\t\tcase \"addFirst\":\r\n\t\t\t\t\t// Add the loaded content first in the scrollable area\r\n\t\t\t\t\tel.data(\"scrollableArea\").children(\":first\").before(filteredContent);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"addLast\":\r\n\t\t\t\t\t// Add the loaded content last in the scrollable area\r\n\t\t\t\t\tel.data(\"scrollableArea\").children(\":last\").after(filteredContent);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\t// Replace the content in the scrollable area\r\n\t\t\t\t\tel.data(\"scrollableArea\").html(filteredContent);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\t// Recalculate the total width of the elements inside the scrollable area\r\n\t\t\tself.recalculateScrollableArea();\r\n\r\n\t\t\t// Determine which hotspots to show\r\n\t\t\tself._showHideHotSpots();\r\n\r\n\t\t\t// Trigger callback\r\n\t\t\tself._trigger(\"addedHtmlContent\");\r\n\r\n\t\t},\r\n\t\t/**********************************************************\r\n\t\tRecalculate the scrollable area\r\n\t\t**********************************************************/\r\n\t\trecalculateScrollableArea: function () {\r\n\r\n\t\t\tvar tempScrollableAreaWidth = 0, foundStartAtElement = false, o = this.options, el = this.element;\r\n\r\n\t\t\t// Add up the total width of all the items inside the scrollable area\r\n\t\t\tel.data(\"scrollableArea\").children(o.countOnlyClass).each(function () {\r\n\t\t\t\t// Check to see if the current element in the loop is the one where the scrolling should start\r\n\t\t\t\tif ((o.startAtElementId.length > 0) && (($(this).attr(\"id\")) === o.startAtElementId)) {\r\n\t\t\t\t\tel.data(\"startingPosition\", tempScrollableAreaWidth);\r\n\t\t\t\t\tfoundStartAtElement = true;\r\n\t\t\t\t}\r\n\t\t\t\ttempScrollableAreaWidth = tempScrollableAreaWidth + $(this).outerWidth(true);\r\n\r\n\t\t\t});\r\n\r\n\t\t\t// If the element with the ID specified by startAtElementId\r\n\t\t\t// is not found, reset it\r\n\t\t\tif (!(foundStartAtElement)) {\r\n\t\t\t\tel.data(\"startAtElementId\", \"\");\r\n\t\t\t}\r\n\r\n\t\t\t// Set the width of the scrollable area\r\n\t\t\tel.data(\"scrollableAreaWidth\", tempScrollableAreaWidth);\r\n\t\t\tel.data(\"scrollableArea\").width(el.data(\"scrollableAreaWidth\"));\r\n\r\n\t\t\t// Move to the starting position\r\n\t\t\tel.data(\"scrollWrapper\").scrollLeft(el.data(\"startingPosition\"));\r\n\t\t\tel.data(\"scrollXPos\", el.data(\"startingPosition\"));\r\n\t\t},\r\n\t\t/**********************************************************\r\n\t\tGet current scrolling left offset\r\n\t\t**********************************************************/\r\n\t\tgetScrollerOffset: function () {\r\n\t\t\tvar el = this.element;\r\n\r\n\t\t\t// Returns the current left offset\r\n\t\t\t// Please remember that if the scroller is in continuous\r\n\t\t\t// mode, the offset is not that relevant anymore since\r\n\t\t\t// the plugin will swap the elements inside the scroller\r\n\t\t\t// around and manipulate the offset in this process.\r\n\t\t\treturn el.data(\"scrollWrapper\").scrollLeft();\r\n\t\t},\r\n\t\t/**********************************************************\r\n\t\tStopping, starting and doing the auto scrolling\r\n\t\t**********************************************************/\r\n\t\tstopAutoScrolling: function () {\r\n\t\t\tvar self = this, el = this.element;\r\n\r\n\t\t\tif (el.data(\"autoScrollingInterval\") !== null) {\r\n\t\t\t\tclearInterval(el.data(\"autoScrollingInterval\"));\r\n\t\t\t\tel.data(\"autoscrollingWasRunning\", true);\r\n\t\t\t\tel.data(\"autoScrollingInterval\", null);\r\n\r\n\t\t\t\t// Check to see which hotspots should be active\r\n\t\t\t\t// in the position where the scroller has stopped\r\n\t\t\t\tself._showHideHotSpots();\r\n\r\n\t\t\t\tself._trigger(\"autoScrollingStopped\");\r\n\t\t\t}\r\n\t\t},\r\n\t\t/**********************************************************\r\n\t\tStart Autoscrolling\r\n\t\t**********************************************************/\r\n\t\tstartAutoScrolling: function () {\r\n\t\t\tvar self = this, el = this.element, o = this.options;\r\n\r\n\t\t\tif (el.data(\"enabled\")) {\r\n\t\t\t\tself._showHideHotSpots();\r\n\r\n\t\t\t\t// Stop any running interval\r\n\t\t\t\tclearInterval(el.data(\"autoScrollingInterval\"));\r\n\t\t\t\tel.data(\"autoScrollingInterval\", null);\r\n\r\n\t\t\t\t// Callback\r\n\t\t\t\tself._trigger(\"autoScrollingStarted\");\r\n\r\n\t\t\t\t// Start interval\r\n\t\t\t\tel.data(\"autoScrollingInterval\", setInterval(function () {\r\n\r\n\t\t\t\t\t// If the scroller is not visible or\r\n\t\t\t\t\t// if the scrollable area is shorter than the scroll wrapper\r\n\t\t\t\t\t// any running auto scroll interval should stop.\r\n\t\t\t\t\tif (!(el.data(\"visible\")) || (el.data(\"scrollableAreaWidth\") <= (el.data(\"scrollWrapper\").innerWidth()))) {\r\n\t\t\t\t\t\t// Stop any running interval\r\n\t\t\t\t\t\tclearInterval(el.data(\"autoScrollingInterval\"));\r\n\t\t\t\t\t\tel.data(\"autoScrollingInterval\", null);\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\r\n\t\t\t\t\t\t// Store the old scrollLeft value to see if the scrolling has reached the end\r\n\t\t\t\t\t\tel.data(\"previousScrollLeft\", el.data(\"scrollWrapper\").scrollLeft());\r\n\r\n\t\t\t\t\t\tswitch (o.autoScrollingDirection) {\r\n\t\t\t\t\t\t\tcase \"right\":\r\n\r\n\t\t\t\t\t\t\t\tel.data(\"scrollWrapper\").scrollLeft(el.data(\"scrollWrapper\").scrollLeft() + o.autoScrollingStep);\r\n\t\t\t\t\t\t\t\tif (el.data(\"previousScrollLeft\") === el.data(\"scrollWrapper\").scrollLeft()) {\r\n\t\t\t\t\t\t\t\t\tself._trigger(\"autoScrollingRightLimitReached\");\r\n\t\t\t\t\t\t\t\t\tself.stopAutoScrolling();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase \"left\":\r\n\t\t\t\t\t\t\t\tel.data(\"scrollWrapper\").scrollLeft(el.data(\"scrollWrapper\").scrollLeft() - o.autoScrollingStep);\r\n\t\t\t\t\t\t\t\tif (el.data(\"previousScrollLeft\") === el.data(\"scrollWrapper\").scrollLeft()) {\r\n\t\t\t\t\t\t\t\t\tself._trigger(\"autoScrollingLeftLimitReached\");\r\n\t\t\t\t\t\t\t\t\tself.stopAutoScrolling();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase \"backAndForth\":\r\n\t\t\t\t\t\t\t\tif (el.data(\"pingPongDirection\") === \"right\") {\r\n\t\t\t\t\t\t\t\t\tel.data(\"scrollWrapper\").scrollLeft(el.data(\"scrollWrapper\").scrollLeft() + (o.autoScrollingStep));\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\tel.data(\"scrollWrapper\").scrollLeft(el.data(\"scrollWrapper\").scrollLeft() - (o.autoScrollingStep));\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t// If the scrollLeft hasnt't changed it means that the scrolling has reached\r\n\t\t\t\t\t\t\t\t// the end and the direction should be switched\r\n\t\t\t\t\t\t\t\tif (el.data(\"previousScrollLeft\") === el.data(\"scrollWrapper\").scrollLeft()) {\r\n\t\t\t\t\t\t\t\t\tif (el.data(\"pingPongDirection\") === \"right\") {\r\n\t\t\t\t\t\t\t\t\t\tel.data(\"pingPongDirection\", \"left\");\r\n\t\t\t\t\t\t\t\t\t\tself._trigger(\"autoScrollingRightLimitReached\");\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\tel.data(\"pingPongDirection\", \"right\");\r\n\t\t\t\t\t\t\t\t\t\tself._trigger(\"autoScrollingLeftLimitReached\");\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase \"endlessLoopRight\":\r\n\r\n\t\t\t\t\t\t\t\t// Do the auto scrolling\r\n\t\t\t\t\t\t\t\tel.data(\"scrollWrapper\").scrollLeft(el.data(\"scrollWrapper\").scrollLeft() + o.autoScrollingStep);\r\n\r\n\t\t\t\t\t\t\t\tself._checkContinuousSwapRight();\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tcase \"endlessLoopLeft\":\r\n\r\n\t\t\t\t\t\t\t\t// Do the auto scrolling\r\n\t\t\t\t\t\t\t\tel.data(\"scrollWrapper\").scrollLeft(el.data(\"scrollWrapper\").scrollLeft() - o.autoScrollingStep);\r\n\r\n\t\t\t\t\t\t\t\tself._checkContinuousSwapLeft();\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}, o.autoScrollingInterval));\r\n\t\t\t}\r\n\t\t},\r\n\t\t/**********************************************************\r\n\t\tCheck Continuos Swap Right\r\n\t\t**********************************************************/\r\n\t\t_checkContinuousSwapRight: function () {\r\n\t\t\tvar el = this.element, o = this.options;\r\n\r\n\t\t\t// Get the width of the first element. When it has scrolled out of view,\r\n\t\t\t// the element swapping should be executed. A true/false variable is used\r\n\t\t\t// as a flag variable so the swapAt value doesn't have to be recalculated\r\n\t\t\t// in each loop.\r\n\t\t\tif (el.data(\"getNextElementWidth\")) {\r\n\r\n\t\t\t\tif ((o.startAtElementId.length > 0) && (el.data(\"startAtElementHasNotPassed\"))) {\r\n\t\t\t\t\t// If the user has set a certain element to start at, set swapAt\r\n\t\t\t\t\t// to that element width. This happens once.\r\n\t\t\t\t\tel.data(\"swapAt\", $(\"#\" + o.startAtElementId).outerWidth(true));\r\n\t\t\t\t\tel.data(\"startAtElementHasNotPassed\", false);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t// Set swapAt to the first element in the scroller\r\n\t\t\t\t\tel.data(\"swapAt\", el.data(\"scrollableArea\").children(\":first\").outerWidth(true));\r\n\t\t\t\t}\r\n\t\t\t\tel.data(\"getNextElementWidth\", false);\r\n\t\t\t}\r\n\r\n\r\n\t\t\t// Check to see if the swap should be done\r\n\t\t\tif (el.data(\"swapAt\") <= el.data(\"scrollWrapper\").scrollLeft()) {\r\n\t\t\t\tel.data(\"swappedElement\", el.data(\"scrollableArea\").children(\":first\").detach());\r\n\t\t\t\tel.data(\"scrollableArea\").append(el.data(\"swappedElement\"));\r\n\t\t\t\tvar wrapperLeft = el.data(\"scrollWrapper\").scrollLeft();\r\n\t\t\t\tel.data(\"scrollWrapper\").scrollLeft(wrapperLeft - el.data(\"swappedElement\").outerWidth(true));\r\n\t\t\t\tel.data(\"getNextElementWidth\", true);\r\n\t\t\t}\r\n\t\t},\r\n\t\t/**********************************************************\r\n\t\tCheck Continuos Swap Left\r\n\t\t**********************************************************/\r\n\t\t_checkContinuousSwapLeft: function () {\r\n\t\t\tvar el = this.element, o = this.options;\r\n\r\n\t\t\t// Get the width of the first element. When it has scrolled out of view,\r\n\t\t\t// the element swapping should be executed. A true/false variable is used\r\n\t\t\t// as a flag variable so the swapAt value doesn't have to be recalculated\r\n\t\t\t// in each loop.\r\n\r\n\t\t\tif (el.data(\"getNextElementWidth\")) {\r\n\t\t\t\tif ((o.startAtElementId.length > 0) && (el.data(\"startAtElementHasNotPassed\"))) {\r\n\t\t\t\t\tel.data(\"swapAt\", $(\"#\" + o.startAtElementId).outerWidth(true));\r\n\t\t\t\t\tel.data(\"startAtElementHasNotPassed\", false);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tel.data(\"swapAt\", el.data(\"scrollableArea\").children(\":first\").outerWidth(true));\r\n\t\t\t\t}\r\n\r\n\t\t\t\tel.data(\"getNextElementWidth\", false);\r\n\t\t\t}\r\n\r\n\t\t\t// Check to see if the swap should be done\r\n\t\t\tif (el.data(\"scrollWrapper\").scrollLeft() === 0) {\r\n\r\n\t\t\t\tel.data(\"swappedElement\", el.data(\"scrollableArea\").children(\":last\").detach());\r\n\t\t\t\tel.data(\"scrollableArea\").prepend(el.data(\"swappedElement\"));\r\n\t\t\t\tel.data(\"scrollWrapper\").scrollLeft(el.data(\"scrollWrapper\").scrollLeft() + el.data(\"swappedElement\").outerWidth(true));\r\n\t\t\t\tel.data(\"getNextElementWidth\", true);\r\n\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\trestoreOriginalElements: function () {\r\n\t\t\tvar self = this, el = this.element;\r\n\r\n\t\t\t// Restore the original content of the scrollable area\r\n\t\t\tel.data(\"scrollableArea\").html(el.data(\"originalElements\"));\r\n\t\t\tself.recalculateScrollableArea();\r\n\t\t\tself.jumpToElement(\"first\");\r\n\t\t},\r\n\t\tshow: function () {\r\n\t\t\tvar el = this.element;\r\n\t\t\tel.data(\"visible\", true);\r\n\t\t\tel.show();\r\n\t\t},\r\n\t\thide: function () {\r\n\t\t\tvar el = this.element;\r\n\t\t\tel.data(\"visible\", false);\r\n\t\t\tel.hide();\r\n\t\t},\r\n\t\tenable: function () {\r\n\t\t\tvar el = this.element;\r\n\r\n\t\t\t// Enable touch scrolling\r\n\t\t\tif (this.options.touchScrolling) {\r\n\t\t\t\tel.data(\"scrollWrapper\").kinetic('attach');\r\n\t\t\t}\r\n\r\n\t\t\t// Set enabled to true\r\n\t\t\tel.data(\"enabled\", true);\r\n\t\t},\r\n\t\tdisable: function () {\r\n\t\t\tvar self = this, el = this.element;\r\n\r\n\t\t\t// Clear all running intervals\r\n\t\t\tself.stopAutoScrolling();\r\n\t\t\tclearInterval(el.data(\"rightScrollingInterval\"));\r\n\t\t\tclearInterval(el.data(\"leftScrollingInterval\"));\r\n\t\t\tclearInterval(el.data(\"hideHotSpotBackgroundsInterval\"));\r\n\r\n\t\t\t// Disable touch scrolling\r\n\t\t\tif (this.options.touchScrolling) {\r\n\t\t\t\tel.data(\"scrollWrapper\").kinetic('detach');\r\n\t\t\t}\r\n\r\n\t\t\t// Set enabled to false\r\n\t\t\tel.data(\"enabled\", false);\r\n\t\t},\r\n\t\tdestroy: function () {\r\n\t\t\tvar self = this, el = this.element;\r\n\r\n\t\t\t// Clear all running intervals\r\n\t\t\tself.stopAutoScrolling();\r\n\t\t\tclearInterval(el.data(\"rightScrollingInterval\"));\r\n\t\t\tclearInterval(el.data(\"leftScrollingInterval\"));\r\n\t\t\tclearInterval(el.data(\"hideHotSpotBackgroundsInterval\"));\r\n\r\n\t\t\t// Remove all element specific events\r\n\t\t\tel.data(\"scrollingHotSpotRight\").unbind(\"mouseover\");\r\n\t\t\tel.data(\"scrollingHotSpotRight\").unbind(\"mouseout\");\r\n\t\t\tel.data(\"scrollingHotSpotRight\").unbind(\"mousedown\");\r\n\r\n\t\t\tel.data(\"scrollingHotSpotLeft\").unbind(\"mouseover\");\r\n\t\t\tel.data(\"scrollingHotSpotLeft\").unbind(\"mouseout\");\r\n\t\t\tel.data(\"scrollingHotSpotLeft\").unbind(\"mousedown\");\r\n\r\n\t\t\tel.unbind(\"mousenter\");\r\n\t\t\tel.unbind(\"mouseleave\");\r\n\r\n\t\t\t// Remove all elements created by the plugin\r\n\t\t\tel.data(\"scrollingHotSpotRight\").remove();\r\n\t\t\tel.data(\"scrollingHotSpotLeft\").remove();\r\n\t\t\tel.data(\"scrollableArea\").remove();\r\n\t\t\tel.data(\"scrollWrapper\").remove();\r\n\r\n\t\t\t// Restore the original content of the scrollable area\r\n\t\t\tel.html(el.data(\"originalElements\"));\r\n\r\n\t\t\t// Call the base destroy function\r\n\t\t\t$.Widget.prototype.destroy.apply(this, arguments);\r\n\r\n\t\t}\r\n\r\n\r\n\t});\r\n})(jQuery);\r\n/* eslint-enable */\r\n"],"names":["$","widget","options","scrollingHotSpotLeftClass","scrollingHotSpotRightClass","scrollingHotSpotLeftVisibleClass","scrollingHotSpotRightVisibleClass","scrollableAreaClass","scrollWrapperClass","hiddenOnStart","getContentOnLoad","countOnlyClass","startAtElementId","hotSpotScrolling","hotSpotScrollingStep","hotSpotScrollingInterval","hotSpotMouseDownSpeedBooster","visibleHotSpotBackgrounds","hotSpotsVisibleTime","easingAfterHotSpotScrolling","easingAfterHotSpotScrollingDistance","easingAfterHotSpotScrollingDuration","easingAfterHotSpotScrollingFunction","mousewheelScrolling","mousewheelScrollingStep","easingAfterMouseWheelScrolling","easingAfterMouseWheelScrollingDuration","easingAfterMouseWheelScrollingFunction","manualContinuousScrolling","autoScrollingMode","autoScrollingDirection","autoScrollingStep","autoScrollingInterval","autoScrollingPauseOnHover","touchScrolling","scrollToAnimationDuration","scrollToEasingFunction","filterTarget","_create","self","this","o","el","element","data","find","length","detach","wrapInner","prepend","innerWidth","children","height","offset","kinetic","y","moved","settings","scrollLeft","_checkContinuousSwapLeft","_checkContinuousSwapRight","_trigger","stopped","stop","stopAutoScrolling","bind","startAutoScrolling","e","x","pageX","left","Math","round","Infinity","setInterval","_showHideHotSpots","clearInterval","animate","duration","easing","mousewheel","event","delta","deltaX","deltaY","pixels","preventDefault","move","add","window","jQuery","isEmptyObject","method","content","manipulationMethod","addWhere","filterTag","hide","on","recalculateScrollableArea","showHotSpotBackgrounds","setTimeout","hideHotSpotBackgrounds","mouseenter","stopPropagation","mouseleave","_init","_setOption","key","value","parseInt","fadeSpeed","undefined","addClass","fadeTo","removeAttr","removeClass","show","_setElementScrollPosition","tempScrollPosition","has","position","isNaN","eq","jumpToElement","jumpTo","elementNumber","elementId","scrollToElement","scrollTo","autoscrollingWasRunning","complete","wrapperLeft","scrollLength","width","sOffset","outerWidth","append","easingAfterMouseWheelFunction","getFlickrContent","getJSON","startingIndex","flickrImageSizes","size","letter","loadedFlickrImages","imageIdStringBuffer","numberOfFlickrItems","items","loadedFlickrImagesCounter","addImageToLoadedImages","imageObj","widthScalingFactor","tempWidth","tempIdArr","attr","split","css","push","each","index","item","loadFlickrImage","sizeIndex","path","media","m","imgSrc","replace","tempImg","load","before","after","html","addedElementIds","getAjaxContent","ajaxSetup","cache","get","filteredContent","getHtmlContent","tempScrollableAreaWidth","foundStartAtElement","getScrollerOffset","restoreOriginalElements","enable","disable","destroy","unbind","remove","Widget","prototype","apply","arguments"],"mappings":"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"}