{"version":3,"sources":["Content/jSpritespin/spritespin.modified.js"],"names":["factory","moduleName","ccs_define","moduleExport","window","ccsJq","$","Spin","SpriteSpin","name","namespace","modEvents","padNumber","num","length","pad","String","clamp","value","min","max","wrap","size","prevent","e","preventDefault","bind","target","event","func","unbind","detectSubsampling","img","canvas","context","iw","width","height","document","createElement","getContext","fillStyle","fillRect","drawImage","dat","getImageData","data","err","console","log","apply","arguments","message","stack","mods","device","test","navigator","userAgent","toLowerCase","defaults","source","undefined","frames","framesX","lanes","module","behavior","renderer","lane","frame","frameTime","animate","reverse","loop","stopFrame","wrapLane","sense","senseLane","orientation","onInit","onProgress","onLoad","onFrame","onDraw","sourceArray","path","opts","fStart","fEnd","lStart","lEnd","digits","i","j","temp","result","replace","push","measureSource","images","image","Image","src","naturalSize","sourceWidth","sourceHeight","frameWidth","frameHeight","Math","floor","framesY","ceil","resetInput","startX","startY","currentX","currentY","oldX","oldY","dX","dY","dW","ddX","ddY","ddW","updateInput","touches","originalEvent","clientX","clientY","clickframe","clicklane","ndX","ndY","nddX","nddY","updateFrame","Number","animation","stopAnimation","trigger","clearInterval","setAnimation","setInterval","ignore","setModules","mod","error","setLayout","attr","css","-ms-user-select","-moz-user-select","-khtml-user-select","-webkit-user-select","user-select","w","innerWidth","h","innerHeight","position","overflow","top","left","bottom","right","stage","hide","setEvents","boot","addClass","count","tick","progress","loaded","total","percent","round","complete","onload","onabort","onerror","load","show","removeClass","create","options","$this","extend","find","each","this","empty","append","destroy","removeData","registerModule","Api","extendApi","methods","key","api","prototype","hasOwnProperty","fn","spritespin","obj","isPlaying","isLooping","toggleAnimation","startAnimation","currentFrame","skipFrames","step","nextFrame","prevFrame","playTo","force","nearest","a","b","c","abs","click","half","pos","offset","mouseup","touchend","dragStart","dragging","dragEnd","drag","dFrame","dLane","angle","PI","sn","sin","cs","cos","x","y","scrollBy","mousedown","mousemove","mouseleave","touchstart","touchmove","touchcancel","call","onDrag","delta","d","s","snap","scaleWidth","scaleHeight","sourceIsSprite","background-image","clearRect","background","join","background-repeat","-webkit-background-size","-moz-background-size","-o-background-size","background-size","appendTo","index","background-position","drawSprite","drawFrames","Module","gallery","offsets","speed","opacity","oldFrame","stop","scale"],"mappings":"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","file":"spritespin.modified.min.js","sourcesContent":["/*! SpriteSpin - v3.1.5\r\n* Copyright (c) 2014 ; Licensed */\r\n\r\n(function (factory) {\r\n\tvar moduleName = \"jqSpitespin\";\r\n\r\n\tif (typeof ccs_define === \"function\") {\r\n\t\tccs_define(moduleName, [\"jquery\"], factory);\r\n\t\treturn;\r\n\t}\r\n\r\n\tvar moduleExport = factory(window.ccsJq);\r\n\tif (typeof moduleExport !== \"undefined\") {\r\n\t\twindow[moduleName] = moduleExport;\r\n\t}\r\n}\r\n(function (ccsJq) {\r\n\r\n(function ($) {\r\n\t\"use strict\";\r\n\r\n\t// The SpriteSpin object. This object wraps the core logic of SpriteSpin\r\n\tvar Spin = window.SpriteSpin = {};\r\n\r\n\t// The namespace that is used for data storage and events\r\n\tvar name = Spin.namespace = 'spritespin';\r\n\r\n\t// Event names that are recognized by SpriteSpin. A module may implement any of these and they will be bound\r\n\t// to the target element on which the plugin is called.\r\n\tvar modEvents = [\r\n\t 'mousedown', 'mousemove', 'mouseup', 'mouseenter', 'mouseover', 'mouseleave', 'dblclick',\r\n\t 'touchstart', 'touchmove', 'touchend', 'touchcancel',\r\n\t 'selectstart', 'gesturestart', 'gesturechange', 'gestureend'];\r\n\r\n\t// Collection of modules that can be used to extend the functionality of SpriteSpin.\r\n\tSpin.mods = {};\r\n\r\n\tSpin.device = (/android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(navigator.userAgent.toLowerCase()));\r\n\r\n\t// Default set of SpriteSpin options. This also represents the majority of data attributes that are used during the\r\n\t// lifetime of a SpriteSpin instance. The data is stored inside the target DOM element on which the plugin is called.\r\n\tSpin.defaults = {\r\n\t\tsource: undefined, // Stitched source image or array of files\r\n\t\twidth: undefined, // actual display width\r\n\t\theight: undefined, // actual display height\r\n\t\tframes: undefined, // Total number of frames\r\n\t\tframesX: undefined, // Number of frames in one row of sprite sheet (if source is a spritesheet)\r\n\t\tlanes: 1,\r\n\r\n\t\tmodule: '360', // The presentation module to use\r\n\t\tbehavior: 'drag', // The interaction module to use\r\n\t\trenderer: 'canvas', // The rendering mode to use\r\n\r\n\t\tlane: 0, //\r\n\t\tframe: 0, // Initial (and current) frame number\r\n\t\tframeTime: 40, // Time between updates. Set to 40 which is 25 frames per second\r\n\t\tanimate: true, // Runs animation\r\n\t\treverse: false, // If true animation is played backward\r\n\t\tloop: true, // Loops the animation\r\n\t\tstopFrame: 0, // Stops the animation at this frame if loop is disabled\r\n\r\n\t\twrap: true, // Same as 'loop' but for user interaction\r\n\t\twrapLane: false, //\r\n\t\tsense: 1, // Interaction sensitivity used by behavior implementations\r\n\t\tsenseLane: undefined, // Interaction sensitivity used by behavior implementations\r\n\t\torientation: 'horizontal', //\r\n\r\n\t\tonInit: undefined, // Occurs when plugin has been initialized, but before loading the source files\r\n\t\tonProgress: undefined, // Occurs when any source file has been loaded\r\n\t\tonLoad: undefined, // Occurs when all source files have been loaded\r\n\t\tonFrame: undefined, // Occurs when the frame number has been updated (e.g. during animation)\r\n\t\tonDraw: undefined // Occurs when all update is complete and frame can be drawn\r\n\t};\r\n\r\n\t// Internal Helper Functions\r\n\t// ----------\r\n\r\n\t// converts the given number to string and pads it to match at least the given length.\r\n\t// The pad value is added in front of the string. This padNumber(4, 5, 0) would convert 4 to '00004'\r\n\tfunction padNumber(num, length, pad) {\r\n\t\tnum = String(num);\r\n\t\twhile (num.length < length) {\r\n\t\t\tnum = String(pad) + num;\r\n\t\t}\r\n\t\treturn num;\r\n\t}\r\n\r\n\t// clamps the given value by the given min and max values\r\n\tfunction clamp(value, min, max) {\r\n\t\treturn (value > max ? max : (value < min ? min : value));\r\n\t}\r\n\r\n\tfunction wrap(value, min, max, size) {\r\n\t\twhile (value > max) { value -= size; }\r\n\t\twhile (value < min) { value += size; }\r\n\t\treturn value;\r\n\t}\r\n\r\n\t// prevents default action on the given event\r\n\tfunction prevent(e) {\r\n\t\te.preventDefault();\r\n\t\treturn false;\r\n\t}\r\n\r\n\tfunction log() {\r\n\t\tif (window.console && window.console.log) {\r\n\t\t\twindow.console.log.apply(window.console, arguments);\r\n\t\t}\r\n\t}\r\n\r\n\t// Binds on the given target and event the given function.\r\n\t// The SpriteSpin namespace is attached to the event name\r\n\tfunction bind(target, event, func) {\r\n\t\tif (func) {\r\n\t\t\ttarget.bind(event + '.' + name, func);\r\n\t\t}\r\n\t}\r\n\r\n\t// Unbinds all SpriteSpin events from given target element\r\n\tfunction unbind(target) {\r\n\t\ttarget.unbind('.' + name);\r\n\t}\r\n\r\n\t// Loads a set of image files. Yields the progress and the completion of the load operation.\r\n\tfunction load(opts) {\r\n\t\t// convert opts.source to an array of strings\r\n\t\tvar src = (typeof opts.source === 'string') ? [opts.source] : opts.source;\r\n\t\tvar i, count = 0, img, images = [];\r\n\t\tvar tick = function () {\r\n\t\t\tcount += 1;\r\n\t\t\tif (typeof opts.progress === 'function') {\r\n\t\t\t\topts.progress({\r\n\t\t\t\t\tloaded: count,\r\n\t\t\t\t\ttotal: src.length,\r\n\t\t\t\t\tpercent: Math.round((count / src.length) * 100)\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tif (count === images.length && typeof opts.complete === 'function') {\r\n\t\t\t\topts.complete(images);\r\n\t\t\t}\r\n\t\t};\r\n\t\tfor (i = 0; i < src.length; i += 1) {\r\n\t\t\timg = new Image();\r\n\t\t\timages.push(img);\r\n\t\t\t// currently no care about error or aborting transfers\r\n\t\t\timg.onload = img.onabort = img.onerror = tick;\r\n\t\t\timg.src = src[i];\r\n\t\t}\r\n\t}\r\n\r\n\t// taken from https://github.com/stomita/ios-imagefile-megapixel\r\n\tfunction detectSubsampling(img, size) {\r\n\t\tvar iw = (size || img).width;\r\n\t\tvar ih = (size || img).height;\r\n\t\tvar canvas, context;\r\n\t\t// subsampling may happen over megapixel image\r\n\t\tif (iw * ih > 1024 * 1024) {\r\n\t\t\tcanvas = document.createElement('canvas');\r\n\t\t\tif (!canvas || !canvas.getContext || !canvas.getContext('2d')) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tcanvas.width = canvas.height = 1;\r\n\t\t\tcontext = canvas.getContext('2d');\r\n\t\t\tcontext.fillStyle = \"FF00FF\";\r\n\t\t\tcontext.fillRect(0, 0, 1, 1);\r\n\t\t\tcontext.drawImage(img, -iw + 1, 0);\r\n\t\t\t// subsampled image becomes half smaller in rendering size.\r\n\t\t\t// check color value to confirm image is covering edge pixel or not.\r\n\t\t\t// if color is the magenta color as set by the rectangle before the image was drawn, the image is subsampled\r\n\t\t\ttry {\r\n\t\t\t\tvar dat = context.getImageData(0, 0, 1, 1).data;\r\n\t\t\t\treturn (dat[0] === 255) && (dat[1] === 0) && (dat[2] === 255);\r\n\t\t\t}\r\n\t\t\tcatch (err) {\r\n\t\t\t\t// avoids cross origin exception for chrome when code runs without a server\r\n\t\t\t\tlog(err.message, err.stack);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tfunction naturalSize(image) {\r\n\t\tvar img = new Image();\r\n\t\timg.src = image.src;\r\n\t\treturn { width: img.width, height: img.height };\r\n\t}\r\n\r\n\t// Public Helper Functions\r\n\t// ----------\r\n\r\n\t// Generates an array of source strings\r\n\t// - path is a source string where the frame number of the file name is exposed as '{frame}'\r\n\t// - start indicates the first frame number\r\n\t// - end indicates the last frame number\r\n\t// - digits is the number of digits used in the file name for the frame number\r\n\t//\r\n\t// example:\r\n\t// sourceArray('http://example.com/image_{frame}.jpg, { frame: [1, 3], digits: 2 })\r\n\t// // -> [ 'http://example.com/image_01.jpg', 'http://example.com/image_02.jpg', 'http://example.com/image_03.jpg' ]\r\n\tSpin.sourceArray = function (path, opts) {\r\n\t\tvar fStart = 0, fEnd = 0, lStart = 0, lEnd = 0, digits = opts.digits || 2;\r\n\t\tif (opts.frame) {\r\n\t\t\tfStart = opts.frame[0];\r\n\t\t\tfEnd = opts.frame[1];\r\n\t\t}\r\n\t\tif (opts.lane) {\r\n\t\t\tlStart = opts.lane[0];\r\n\t\t\tlEnd = opts.lane[1];\r\n\t\t}\r\n\t\tvar i, j, temp, result = [];\r\n\t\tfor (i = lStart; i <= lEnd; i += 1) {\r\n\t\t\tfor (j = fStart; j <= fEnd; j += 1) {\r\n\t\t\t\ttemp = path.replace(\"{lane}\", padNumber(i, digits, 0));\r\n\t\t\t\ttemp = temp.replace(\"{frame}\", padNumber(j, digits, 0));\r\n\t\t\t\tresult.push(temp);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn result;\r\n\t};\r\n\r\n\t// Measures the image frames that are used in the given data object\r\n\tSpin.measureSource = function (data) {\r\n\t\tvar img = data.images[0];\r\n\t\tvar size = naturalSize(img);\r\n\r\n\t\tif (data.images.length === 1) {\r\n\r\n\t\t\tdata.sourceWidth = size.width;\r\n\t\t\tdata.sourceHeight = size.height;\r\n\t\t\tif (detectSubsampling(img, size)) {\r\n\t\t\t\tdata.sourceWidth /= 2;\r\n\t\t\t\tdata.sourceHeight /= 2;\r\n\t\t\t}\r\n\r\n\t\t\t// calculate the number of frames packed in a row\r\n\t\t\t// assume tightly packed images without any padding pixels\r\n\t\t\tdata.framesX = data.framesX || data.frames;\r\n\r\n\t\t\t// calculate size of a single frame\r\n\t\t\tif (!data.frameWidth || !data.frameHeight) {\r\n\t\t\t\tif (data.framesX) {\r\n\t\t\t\t\tdata.frameWidth = Math.floor(data.sourceWidth / data.framesX);\r\n\t\t\t\t\tvar framesY = Math.ceil((data.frames * data.lanes) / data.framesX);\r\n\t\t\t\t\tdata.frameHeight = Math.floor(data.sourceHeight / framesY);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdata.frameWidth = size.width;\r\n\t\t\t\t\tdata.frameHeight = size.height;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tdata.sourceWidth = data.frameWidth = size.width;\r\n\t\t\tdata.sourceHeight = data.frameHeight = size.height;\r\n\t\t\tif (detectSubsampling(img, size)) {\r\n\t\t\t\tdata.sourceWidth = data.frameWidth = size.width / 2;\r\n\t\t\t\tdata.sourceHeight = data.frameHeight = size.height / 2;\r\n\t\t\t}\r\n\t\t\tdata.frames = data.frames || data.images.length;\r\n\t\t}\r\n\t};\r\n\r\n\t// Resets the input state of the SpriteSpin data.\r\n\tSpin.resetInput = function (data) {\r\n\t\tdata.startX = data.startY = undefined; // initial touch/click position\r\n\t\tdata.currentX = data.currentY = undefined; // touch/click position in current frame\r\n\t\tdata.oldX = data.oldY = undefined; // touch/click position in last frame\r\n\t\tdata.dX = data.dY = data.dW = 0; // drag direction from start to current frame\r\n\t\tdata.ddX = data.ddY = data.ddW = 0; // drag direction from previous to current frame\r\n\t};\r\n\r\n\t// Updates the input state of the SpriteSpin data using the given mouse or touch event.\r\n\tSpin.updateInput = function (e, data) {\r\n\t\t// jQuery Event normalization does not preserve the 'event.touches'\r\n\t\t// try to grab touches from the original event\r\n\t\tif (e.touches === undefined && e.originalEvent !== undefined) {\r\n\t\t\te.touches = e.originalEvent.touches;\r\n\t\t}\r\n\r\n\t\t// cache positions from previous frame\r\n\t\tdata.oldX = data.currentX;\r\n\t\tdata.oldY = data.currentY;\r\n\r\n\t\t// get current touch or mouse position\r\n\t\tif (e.touches !== undefined && e.touches.length > 0) {\r\n\t\t\tdata.currentX = e.touches[0].clientX;\r\n\t\t\tdata.currentY = e.touches[0].clientY;\r\n\t\t} else {\r\n\t\t\tdata.currentX = e.clientX;\r\n\t\t\tdata.currentY = e.clientY;\r\n\t\t}\r\n\r\n\t\t// Cache the initial click/touch position and store the frame number at which the click happened.\r\n\t\t// Useful for different behavior implementations. This must be restored when the click/touch is released.\r\n\t\tif (data.startX === undefined || data.startY === undefined) {\r\n\t\t\tdata.startX = data.currentX;\r\n\t\t\tdata.startY = data.currentY;\r\n\t\t\tdata.clickframe = data.frame;\r\n\t\t\tdata.clicklane = data.lane;\r\n\t\t}\r\n\r\n\t\t// Calculate the vector from start position to current pointer position.\r\n\t\tdata.dX = data.currentX - data.startX;\r\n\t\tdata.dY = data.currentY - data.startY;\r\n\r\n\t\t// Calculate the vector from last frame position to current pointer position.\r\n\t\tdata.ddX = data.currentX - data.oldX;\r\n\t\tdata.ddY = data.currentY - data.oldY;\r\n\r\n\t\tdata.ndX = data.dX / data.width;\r\n\t\tdata.ndY = data.dY / data.height;\r\n\r\n\t\tdata.nddX = data.ddX / data.width;\r\n\t\tdata.nddY = data.ddY / data.height;\r\n\t};\r\n\r\n\t// Updates the frame number of the SpriteSpin data. Performs an auto increment if no frame number is given.\r\n\tSpin.updateFrame = function (data, frame, lane) {\r\n\r\n\t\tif (frame !== undefined) {\r\n\t\t\tdata.frame = Number(frame);\r\n\t\t} else if (data.animation) {\r\n\t\t\tdata.frame += (data.reverse ? -1 : 1);\r\n\t\t}\r\n\r\n\t\tif (data.animation) {\r\n\t\t\t// wrap the frame value to fit in range [0, data.frames]\r\n\t\t\tdata.frame = wrap(data.frame, 0, data.frames - 1, data.frames);\r\n\t\t\t// stop animation if loop is disabled and the stopFrame is reached\r\n\t\t\tif (!data.loop && (data.frame === data.stopFrame)) {\r\n\t\t\t\tdata.animate = false;\r\n\t\t\t\tSpin.stopAnimation(data);\r\n\t\t\t}\r\n\t\t} else if (data.wrap) {\r\n\t\t\t// wrap/clamp the frame value to fit in range [0, data.frames]\r\n\t\t\tdata.frame = wrap(data.frame, 0, data.frames - 1, data.frames);\r\n\t\t} else {\r\n\t\t\tdata.frame = clamp(data.frame, 0, data.frames - 1);\r\n\t\t}\r\n\t\tif (lane !== undefined) {\r\n\t\t\tdata.lane = lane;\r\n\t\t\tdata.lane = clamp(data.lane, 0, data.lanes - 1);\r\n\t\t}\r\n\r\n\t\tdata.target.trigger(\"onFrame\", data);\r\n\t\tdata.target.trigger(\"onDraw\", data);\r\n\t};\r\n\r\n\t// Stops the running animation on given SpriteSpin data.\r\n\tSpin.stopAnimation = function (data) {\r\n\t\tif (data.animation) {\r\n\t\t\twindow.clearInterval(data.animation);\r\n\t\t\tdata.animation = null;\r\n\t\t}\r\n\t};\r\n\r\n\t// Starts animation on given SpriteSpin data if animation is enabled.\r\n\tSpin.setAnimation = function (data) {\r\n\t\tSpin.stopAnimation(data);\r\n\t\tif (data.animate) {\r\n\t\t\tdata.animation = window.setInterval(function () {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tSpin.updateFrame(data);\r\n\t\t\t\t} catch (ignore) {\r\n\t\t\t\t\t// The try catch block is a hack for Opera Browser\r\n\t\t\t\t\t// Opera sometimes rises an exception here and\r\n\t\t\t\t\t// stops performing the script\r\n\t\t\t\t}\r\n\t\t\t}, data.frameTime);\r\n\t\t}\r\n\t};\r\n\r\n\t// Reads the module names on given SpriteSpin data and adds actual module implementations.\r\n\tSpin.setModules = function (data) {\r\n\t\tvar i, name, mod;\r\n\t\tfor (i = 0; i < data.mods.length; i += 1) {\r\n\t\t\tname = data.mods[i];\r\n\t\t\tif (typeof name === 'string') {\r\n\t\t\t\tmod = Spin.mods[name];\r\n\t\t\t\tif (!mod) {\r\n\t\t\t\t\t$.error(\"No module found with name \" + name);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdata.mods[i] = mod;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Applies css attributes to layout the SpriteSpin containers.\r\n\tSpin.setLayout = function (data) {\r\n\t\t// disable selection\r\n\t\tdata.target\r\n\t\t .attr('unselectable', 'on')\r\n\t\t .css({\r\n\t\t \t'-ms-user-select': 'none',\r\n\t\t \t'-moz-user-select': 'none',\r\n\t\t \t'-khtml-user-select': 'none',\r\n\t\t \t'-webkit-user-select': 'none',\r\n\t\t \t'user-select': 'none'\r\n\t\t });\r\n\r\n\t\tvar w = Math.floor(data.width || data.frameWidth || data.target.innerWidth());\r\n\t\tvar h = Math.floor(data.height || data.frameHeight || data.target.innerHeight());\r\n\t\tdata.target.css({\r\n\t\t\twidth: w,\r\n\t\t\theight: h,\r\n\t\t\tposition: 'relative',\r\n\t\t\toverflow: 'hidden'\r\n\t\t});\r\n\r\n\t\tvar css = {\r\n\t\t\twidth: '100%',\r\n\t\t\theight: '100%',\r\n\t\t\ttop: 0,\r\n\t\t\tleft: 0,\r\n\t\t\tbottom: 0,\r\n\t\t\tright: 0,\r\n\t\t\tposition: 'absolute'\r\n\t\t};\r\n\t\tdata.stage.css(css).hide();\r\n\t\tif (data.canvas) {\r\n\t\t\tdata.canvas[0].width = w;\r\n\t\t\tdata.canvas[0].height = h;\r\n\t\t\tdata.canvas.css(css).hide();\r\n\t\t}\r\n\t};\r\n\r\n\t// Binds all SpriteSpin events on the target element of the given SpriteSpin data.\r\n\tSpin.setEvents = function (data) {\r\n\t\tvar i, j, mod, target = data.target;\r\n\r\n\t\t// Clear all SpriteSpin events on the target element\r\n\t\tunbind(target);\r\n\r\n\t\t// disable all default browser behavior on the following events\r\n\t\tfor (j = 0; j < modEvents.length; j += 1) {\r\n\t\t\tbind(target, modEvents[j], prevent);\r\n\t\t}\r\n\r\n\t\t// Bind module functions to SpriteSpin events\r\n\t\tfor (i = 0; i < data.mods.length; i += 1) {\r\n\t\t\tmod = data.mods[i];\r\n\r\n\t\t\tfor (j = 0; j < modEvents.length; j += 1) {\r\n\t\t\t\tbind(target, modEvents[j], mod[modEvents[j]]);\r\n\t\t\t}\r\n\r\n\t\t\t// bind\r\n\t\t\tbind(target, 'onInit', mod.onInit);\r\n\t\t\tbind(target, 'onLoad', mod.onLoad);\r\n\t\t\tbind(target, 'onFrame', mod.onFrame);\r\n\t\t\tbind(target, 'onDraw', mod.onDraw);\r\n\t\t}\r\n\r\n\t\t// bind auto start function to load event.\r\n\t\tbind(target, 'onLoad', function (e, data) {\r\n\t\t\tSpin.setAnimation(data);\r\n\t\t});\r\n\r\n\t\t// bind all user events that have been passed on initialization\r\n\t\tbind(target, 'onInit', data.onInit);\r\n\t\tbind(target, 'onProgress', data.onProgress);\r\n\t\tbind(target, 'onLoad', data.onLoad);\r\n\t\tbind(target, 'onFrame', data.onFrame);\r\n\t\tbind(target, 'onDraw', data.onDraw);\r\n\t};\r\n\r\n\t// Performs the first time boot process: module initialization, layouting, event binding etc.\r\n\tSpin.boot = function (data) {\r\n\t\tSpin.setModules(data);\r\n\t\tSpin.setLayout(data);\r\n\t\tSpin.setEvents(data);\r\n\t\tdata.target.addClass('loading').trigger('onInit', data);\r\n\t\tload({\r\n\t\t\tsource: data.source,\r\n\t\t\tprogress: function (progress) {\r\n\t\t\t\tdata.target.trigger('onProgress', progress);\r\n\t\t\t},\r\n\t\t\tcomplete: function (images) {\r\n\t\t\t\tdata.images = images;\r\n\t\t\t\tSpin.measureSource(data);\r\n\t\t\t\tdata.stage.show();\r\n\t\t\t\tdata.target\r\n\t\t\t\t .removeClass('loading')\r\n\t\t\t\t .trigger('onLoad', data)\r\n\t\t\t\t .trigger('onFrame', data)\r\n\t\t\t\t .trigger('onDraw', data);\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n\r\n\r\n\t// SpriteSpin constructor\r\n\tSpin.create = function (options) {\r\n\t\tvar $this = options.target;\r\n\t\tvar data = $this.data(name);\r\n\r\n\t\tif (!data) {\r\n\t\t\t// SpriteSpin is not initialized\r\n\t\t\t// Create default settings object and extend with given options\r\n\t\t\tdata = $.extend({}, Spin.defaults, options);\r\n\r\n\t\t\t// ensure that there is anything set as a source\r\n\t\t\tdata.source = data.source || [];\r\n\r\n\t\t\t// if image tags are contained inside this DOM element\r\n\t\t\t// use these images as the source files\r\n\t\t\t$this.find('img').each(function () {\r\n\t\t\t\tdata.source.push($(this).attr('src'));\r\n\t\t\t});\r\n\r\n\t\t\t// build inner html\r\n\t\t\t//