{"version":3,"file":"threesixty.6d5729.js","mappings":"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","sources":["webpack://clorox-intl/./js/src/plugins/threesixty.js"],"sourcesContent":["/*global $, window, CanvasLoader, jQuery, alert, requestAnimationFrame, cancelAnimationFrame */\r\n/*jslint browser:true, devel:true */\r\n\r\n/*!\r\n * 360 degree Image Slider v1.0.8\r\n * http://gaurav.jassal.me/lab\r\n *\r\n * Copyright 2013, gaurav@jassal.me\r\n * Dual licensed under the MIT or GPL Version 3 licenses.\r\n *\r\n */\r\n\r\n(function ($) {\r\n  'use strict';\r\n   /**\r\n   * @class ThreeSixty\r\n   * **The ThreeSixty slider class**.\r\n   *\r\n   * This as jQuery plugin to create 360 degree product image slider.\r\n   * The plugin is full customizable with number of options provided. The plugin\r\n   * have the power to display images in any angle 360 degrees. This feature can be\r\n   * used successfully in many use cases e.g. on an e-commerce site to help customers\r\n   * look products in detail, from any angle they desire.\r\n   *\r\n   * **Features**\r\n   *\r\n   * - Smooth Animation\r\n   * - Plenty of option parameters for customization\r\n   * - Api interaction\r\n   * - Simple mouse interaction\r\n   * - Custom behavior tweaking\r\n   * - Support for touch devices\r\n   * - Easy to integrate\r\n   * - No flash\r\n   *\r\n   * Example code:\r\n   *      var product1 = $('.product1').ThreeSixty({\r\n   *        totalFrames: 72,\r\n   *        endFrame: 72,\r\n   *        currentFrame: 1,\r\n   *        imgList: '.threesixty_images',\r\n   *        progress: '.spinner',\r\n   *        imagePath:'/assets/product1/',\r\n   *        filePrefix: 'ipod-',\r\n   *        ext: '.jpg',\r\n   *        height: 265,\r\n   *        width: 400,\r\n   *        navigation: true\r\n   *      });\r\n   * **Note:** There are loads other options that you can override to customize\r\n   * this plugin.\r\n\r\n   * @extends jQuery\r\n   * @singleton\r\n   * @param {String} [el] jQuery selector string for the parent container\r\n   * @param {Object} [options] An optional config object\r\n   *\r\n   * @return this\r\n   */\r\n\r\n  $.ThreeSixty = function (el, options) {\r\n    // To avoid scope issues, use 'base' instead of 'this'\r\n    // to reference this class from internal events and functions.\r\n    var base = this, AppCongif, frames = [], VERSION = '1.0.7';\r\n\r\n    // Access to jQuery and DOM versions of element\r\n    /**\r\n     * @property {$el}\r\n     * jQuery Dom node attached to the slider inherits all jQuery public functions.\r\n     */\r\n\r\n    base.$el = $(el);\r\n    base.el = el;\r\n\r\n    // Add a reverse reference to the DOM object\r\n    base.$el.data('ThreeSixty', base);\r\n\r\n    /**\r\n     * @method init\r\n     * The function extends the user options with default settings for the\r\n     * slider and initilize the slider.\r\n     * **Style Override example**\r\n     *\r\n     *      var product1 = $('.product1').ThreeSixty({\r\n     *        totalFrames: 72,\r\n     *        endFrame: 72,\r\n     *        currentFrame: 1,\r\n     *        imgList: '.threesixty_images',\r\n     *        progress: '.spinner',\r\n     *        imagePath:'/assets/product1/',\r\n     *        filePrefix: 'ipod-',\r\n     *        ext: '.jpg',\r\n     *        height: 265,\r\n     *        width: 400,\r\n     *        navigation: true,\r\n     *        styles: {\r\n     *          border: 2px solide #b4b4b4,\r\n     *          background: url(http://example.com/images/loader.gif) no-repeat\r\n     *        }\r\n     *      });\r\n     * @return this\r\n     */\r\n    base.init = function () {\r\n      AppCongif = $.extend({}, $.ThreeSixty.defaultOptions, options);\r\n      if (!AppCongif.parallel) {\r\n        base.loadImages();\r\n      }\r\n      if(AppCongif.disableSpin) {\r\n\t\t\t\tAppCongif.currentFrame = 1;\r\n\t\t\t\tAppCongif.endFrame = 1;\r\n      }\r\n      base.initProgress();\r\n    };\r\n\r\n    /**\r\n     * @method initProgress\r\n     * @private\r\n     * This function setup the progress indicator styles.\r\n     * If you want to overreide the default styles of the progress indicator\r\n     * you need to pass the css styles in the styles property in plugin options.\r\n     *\r\n     */\r\n    base.initProgress = function() {\r\n      base.$el.css({\r\n        width: AppCongif.width + 'px',\r\n        //height: AppCongif.height + 'px',\r\n        //'background-image': 'none !important'\r\n      }).css(AppCongif.styles);\r\n\r\n      if(AppCongif.responsive) {\r\n         base.$el.css({ width: '100%' });\r\n      }\r\n      base.$el.find(AppCongif.progress).css({\r\n        marginTop: ((AppCongif.height / 2) - 15) + 'px'\r\n      });\r\n\r\n      base.$el.find(AppCongif.progress).fadeIn('slow');\r\n\r\n      base.$el.find(AppCongif.imgList).hide();\r\n    };\r\n\r\n    /**\r\n     * @method loadImages\r\n     * @private\r\n     * The function asynchronously loads images and inject into the slider.\r\n     */\r\n    base.loadImages = function() {\r\n      var li, imageName, image, host;\r\n      li = document.createElement('li');\r\n      imageName = AppCongif.images[AppCongif.loadedImages] + (($.browser.msie) ? '?' + new Date().getTime() : '');\r\n      image = $('<img>').attr('src', imageName).addClass('previous-image').appendTo(li);\r\n\r\n      frames.push(image);\r\n\r\n      base.$el.find(AppCongif.imgList).append(li);\r\n\r\n      $(image).load(function () {\r\n        base.imageLoaded();\r\n      });\r\n    };\r\n    /**\r\n     * @method loadImages\r\n     * @private\r\n     * The function gets triggers once the image is loaded. We also update\r\n     * the progress percentage in this function.\r\n     */\r\n    base.imageLoaded = function () {\r\n      AppCongif.loadedImages += 1;\r\n      $(AppCongif.progress + ' span').text(Math.floor(AppCongif.loadedImages / AppCongif.totalFrames * 100) + '%');\r\n      if (AppCongif.loadedImages >= AppCongif.totalFrames) {\r\n        if(AppCongif.disableSpin) {\r\n          frames[0].removeClass('previous-image').addClass('current-image');\r\n        }\r\n        $(AppCongif.progress).fadeOut('slow', function () {\r\n          $(this).hide();\r\n          $(AppCongif.preview).css('opacity', 0);\r\n          base.showImages();\r\n          base.showNavigation();\r\n        });\r\n      } else {\r\n        base.loadImages();\r\n      }\r\n    };\r\n\r\n    /**\r\n     * @method loadImages\r\n     * @private\r\n     * This function is called when all the images are loaded.\r\n     * **The function does following operations**\r\n     * - Removes background image placeholder\r\n     * - Displays the 360 images\r\n     * - Initilizes mouse intraction events\r\n     */\r\n    base.showImages = function () {\r\n      //base.$el.find('.txtC').fadeIn();\r\n      base.$el.find(AppCongif.imgList).fadeIn();\r\n      base.ready = true;\r\n      AppCongif.ready = true;\r\n\r\n      if (AppCongif.drag) {\r\n        base.initEvents();\r\n      }\r\n      base.refresh();\r\n      base.initPlugins();\r\n\r\n      AppCongif.onReady();\r\n    };\r\n\r\n    /**\r\n     * The function to initilize external plugin\r\n     */\r\n    base.initPlugins = function () {\r\n      $.each(AppCongif.plugins, function(i, plugin) {\r\n        if(typeof $[plugin] === 'function') {\r\n          $[plugin].call(base, base.$el, AppCongif);\r\n        } else {\r\n          throw new Error(plugin + ' not available.');\r\n        }\r\n      });\r\n    };\r\n\r\n    /**\r\n     * @method showNavigation\r\n     * Creates a navigation panel if navigation is set to true in the\r\n     * settings.\r\n     */\r\n    base.showNavigation = function() {\r\n      if (AppCongif.navigation && !AppCongif.navigation_init) {\r\n        var nav_bar, next, previous, play_stop;\r\n\r\n        nav_bar = $('<div/>').attr('class', 'threesixty-nav-bar');\r\n\r\n        next = $('<a/>').attr({\r\n          'href': '#',\r\n          'class': 'threesixty-next'\r\n        }).html('next');\r\n\r\n        previous = $('<a/>').attr({\r\n          'href': '#',\r\n          'class': 'threesixty-previous'\r\n        }).html('previous');\r\n\r\n        if ( AppCongif.startAutoplay ) \r\n            var play_stop_class = 'threesixty-stop';\r\n        else\r\n            var play_stop_class = 'threesixty-play';\r\n\r\n        play_stop = $('<a/>').attr({\r\n          'href': '#',\r\n          'class': play_stop_class\r\n        }).html('play');\r\n\r\n        nav_bar.append(previous);\r\n        nav_bar.append(play_stop);\r\n        nav_bar.append(next);\r\n\r\n        base.$el.prepend(nav_bar);\r\n\r\n        next.bind('mousedown touchstart', base.next);\r\n        previous.bind('mousedown touchstart', base.previous);\r\n        play_stop.bind('mousedown touchstart', base.play_stop);\r\n        AppCongif.navigation_init = true;\r\n      }\r\n    };\r\n\r\n    /**\r\n     * @method play_stop\r\n     * @private\r\n     * Function toggles the autoplay rotation of 360 slider\r\n     * @param {Object} [event] jQuery events object.\r\n     *\r\n     */\r\n\r\n    base.play_stop = function(event) {\r\n      event.preventDefault();\r\n\r\n      if (!AppCongif.autoplay) {\r\n        AppCongif.autoplay = true;\r\n        AppCongif.play = setInterval(base.moveToNextFrame, AppCongif.interval);\r\n        $(event.currentTarget).removeClass('threesixty-play').addClass('threesixty-stop');\r\n      } else {\r\n        AppCongif.autoplay = false;\r\n        $(event.currentTarget).removeClass('threesixty-stop').addClass('threesixty-play');\r\n        clearInterval(AppCongif.play);\r\n        AppCongif.play = null;\r\n      }\r\n    };\r\n\r\n    /**\r\n     * @method next\r\n     * Using this function you can rotate 360 to next 5 frames.\r\n     * @param {Object} [event] jQuery events object.\r\n     *\r\n     */\r\n\r\n    base.next = function(event) {\r\n      if (event) { event.preventDefault(); }\r\n      AppCongif.endFrame -= 5;\r\n      base.refresh();\r\n    };\r\n\r\n    /**\r\n     * @method previous\r\n     * Using this function you can rotate 360 to previous 5 frames.\r\n     * @param {Object} [event] jQuery events object.\r\n     *\r\n     */\r\n    base.previous = function(event) {\r\n      if (event) { event.preventDefault(); }\r\n      AppCongif.endFrame += 5;\r\n      base.refresh();\r\n    };\r\n\r\n    /**\r\n     * @method play\r\n     * You are start the auto rotaion for the slider with this function.\r\n     *\r\n     */\r\n    base.play = function(id) {\r\n      if (!AppCongif.autoplay) {\r\n        AppCongif.autoplay = true;\r\n        AppCongif.play = setInterval(base.moveToNextFrame, AppCongif.interval);\r\n      }\r\n    };\r\n\r\n    /**\r\n     * @method stop\r\n     * You can stop the auto rotation of the 360 slider with this function.\r\n     *\r\n     */\r\n\r\n    base.stop = function() {\r\n      if (AppCongif.autoplay) {\r\n        AppCongif.autoplay = false;\r\n        clearInterval(AppCongif.play);\r\n        AppCongif.play = null;\r\n      }\r\n    };\r\n\r\n    /**\r\n     * @method endFrame\r\n     * @private\r\n     * Function animates to previous frame\r\n     *\r\n     */\r\n    base.moveToNextFrame = function () {\r\n      if (AppCongif.autoplayDirection === 1) {\r\n        AppCongif.endFrame -= 1;\r\n      } else {\r\n        AppCongif.endFrame += 1;\r\n      }\r\n      base.refresh();\r\n    };\r\n\r\n    /**\r\n     * @method gotoAndPlay\r\n     * @public\r\n     * Function animates to previous frame\r\n     *\r\n     */\r\n    base.gotoAndPlay = function (n) {\r\n      if( AppCongif.disableWrap ) {\r\n        AppCongif.endFrame = n;\r\n        base.refresh();\r\n      } else {\r\n        // Since we could be looped around grab the multiplier\r\n        var multiplier = Math.ceil(AppCongif.endFrame / AppCongif.totalFrames);\r\n        if(multiplier === 0) {\r\n          multiplier = 1;\r\n        }\r\n\r\n        // Figure out the quickest path to the requested frame\r\n        var realEndFrame = (multiplier > 1) ?\r\n          AppCongif.endFrame - ((multiplier - 1) * AppCongif.totalFrames) :\r\n          AppCongif.endFrame;\r\n\r\n        var currentFromEnd = AppCongif.totalFrames - realEndFrame;\r\n\r\n        // Jump past end if it's faster\r\n        var newEndFrame = 0;\r\n        if(n - realEndFrame > 0) {\r\n          // Faster to move the difference ahead?\r\n          if(n - realEndFrame < realEndFrame + (AppCongif.totalFrames - n)) {\r\n            newEndFrame = AppCongif.endFrame + (n - realEndFrame);\r\n          } else {\r\n            newEndFrame = AppCongif.endFrame - (realEndFrame + (AppCongif.totalFrames - n));\r\n          }\r\n        } else {\r\n            // Faster to move the distance back?\r\n            if(realEndFrame - n < currentFromEnd + n) {\r\n              newEndFrame = AppCongif.endFrame - (realEndFrame - n);\r\n            } else {\r\n              newEndFrame = AppCongif.endFrame + (currentFromEnd + n);\r\n            }\r\n        }\r\n\r\n        // Now set the end frame\r\n        if(realEndFrame !== n) {\r\n          AppCongif.endFrame = newEndFrame;\r\n          base.refresh();\r\n        }\r\n      }\r\n    };\r\n\r\n\r\n    /**\r\n     * @method initEvents\r\n     * @private\r\n     * Function initilizes all the mouse and touch events for 360 slider movement.\r\n     *\r\n     */\r\n    base.initEvents = function () {\r\n      base.$el.bind('mousedown touchstart touchmove touchend mousemove click', function (event) {\r\n\r\n        // magnific popup fix\r\n        if ( $(event.target).hasClass(\"threesixty-mfp-anchor\") || $(event.target).hasClass(\"mfp-close\") ) {\r\n          return;\r\n        }\r\n\r\n        event.preventDefault();\r\n\r\n        if ((event.type === 'mousedown' && event.which === 1) || event.type === 'touchstart') {\r\n          AppCongif.pointerStartPosX = base.getPointerEvent(event).pageX;\r\n          AppCongif.dragging = true;\r\n          if (AppCongif.autoplay) {\r\n            AppCongif.stopped = true;\r\n            base.stop();\r\n          }\r\n        } else if (event.type === 'touchmove') {\r\n          base.trackPointer(event);\r\n        } else if (event.type === 'touchend') {\r\n          AppCongif.dragging = false;\r\n          if (AppCongif.stopped) {\r\n            AppCongif.stopped = false;\r\n            base.play();\r\n          }\r\n        }\r\n        if (event.type === 'click' && !base.browser.isIE()) {\r\n          base.$el.removeClass('threesixty-hand-open').addClass('threesixty-hand-closed');\r\n        }\r\n      });\r\n\r\n      $(document).bind('mouseup', function (event) {\r\n        //event.preventDefault();\r\n        AppCongif.dragging = false;\r\n        if (AppCongif.stopped) {\r\n          AppCongif.stopped = false;\r\n          base.play();\r\n        }\r\n        $(this).removeClass('threesixty-hand-open');\r\n        $(this).removeClass('threesixty-hand-closed');\r\n      });\r\n\r\n      $(document).bind('mousemove', function (event) {\r\n        if (AppCongif.dragging) {\r\n          event.preventDefault();\r\n          if(!base.browser.isIE() && AppCongif.showCursor) {\r\n            base.$el.removeClass('threesixty-hand-open').addClass('threesixty-hand-closed');\r\n          }\r\n        } else {\r\n          if(!base.browser.isIE() && AppCongif.showCursor) {\r\n            base.$el.removeClass('threesixty-hand-closed').addClass('threesixty-hand-open');\r\n          }\r\n        }\r\n        base.trackPointer(event);\r\n\r\n      });\r\n    };\r\n\r\n    /**\r\n     * @method getPointerEvent\r\n     * @private\r\n     * Function returns touch pointer events\r\n     *\r\n     * @params {Object} [event]\r\n     */\r\n    base.getPointerEvent = function (event) {\r\n      return event.originalEvent.targetTouches ? event.originalEvent.targetTouches[0] : event;\r\n    };\r\n\r\n    /**\r\n     * @method trackPointer\r\n     * @private\r\n     * Function calculates the distance between the start pointer and end pointer/\r\n     *\r\n     * @params {Object} [event]\r\n     */\r\n    base.trackPointer = function (event) {\r\n      if (AppCongif.ready && AppCongif.dragging) {\r\n        AppCongif.pointerEndPosX = base.getPointerEvent(event).pageX;\r\n        if (AppCongif.monitorStartTime < new Date().getTime() - AppCongif.monitorInt) {\r\n          AppCongif.pointerDistance = AppCongif.pointerEndPosX - AppCongif.pointerStartPosX;\r\n          if(AppCongif.pointerDistance > 0){\r\n          AppCongif.endFrame = AppCongif.currentFrame + Math.ceil((AppCongif.totalFrames - 1) * AppCongif.speedMultiplier * (AppCongif.pointerDistance / base.$el.width()));\r\n          }else{\r\n          AppCongif.endFrame = AppCongif.currentFrame + Math.floor((AppCongif.totalFrames - 1) * AppCongif.speedMultiplier * (AppCongif.pointerDistance / base.$el.width()));\r\n          }\r\n\r\n          if( AppCongif.disableWrap ) {\r\n            AppCongif.endFrame = Math.min(AppCongif.totalFrames - (AppCongif.zeroBased ? 1 : 0), AppCongif.endFrame);\r\n            AppCongif.endFrame = Math.max((AppCongif.zeroBased ? 0 : 1), AppCongif.endFrame);\r\n          }\r\n          base.refresh();\r\n          AppCongif.monitorStartTime = new Date().getTime();\r\n          AppCongif.pointerStartPosX = base.getPointerEvent(event).pageX;\r\n        }\r\n      }\r\n    };\r\n\r\n    /**\r\n     * @method refresh\r\n     * @public\r\n     * Function refeshes the timer and set interval for render cycle.\r\n     *\r\n     */\r\n\r\n    base.refresh = function () {\r\n      if (AppCongif.ticker === 0) {\r\n        AppCongif.ticker = setInterval(base.render, Math.round(1000 / AppCongif.framerate));\r\n      }\r\n    };\r\n\r\n     /**\r\n     * @method refresh\r\n     * @private\r\n     * Function render the animation frames on the screen with easing effect.\r\n     */\r\n\r\n    base.render = function () {\r\n      var frameEasing;\r\n      if (AppCongif.currentFrame !== AppCongif.endFrame) {\r\n\r\n        frameEasing = AppCongif.endFrame < AppCongif.currentFrame ? Math.floor((AppCongif.endFrame - AppCongif.currentFrame) * 0.1) : Math.ceil((AppCongif.endFrame - AppCongif.currentFrame) * 0.1);\r\n        base.hidePreviousFrame();\r\n        AppCongif.currentFrame += frameEasing;\r\n        base.showCurrentFrame();\r\n        base.$el.trigger('frameIndexChanged', [base.getNormalizedCurrentFrame(), AppCongif.totalFrames]);\r\n      } else {\r\n        window.clearInterval(AppCongif.ticker);\r\n        AppCongif.ticker = 0;\r\n      }\r\n    };\r\n\r\n    /**\r\n     * @method hidePreviousFrame\r\n     * @private\r\n     * Function hide the previous frame in the animation loop.\r\n     */\r\n\r\n    base.hidePreviousFrame = function () {\r\n      if (undefined!==frames[base.getNormalizedCurrentFrame()]) \r\n        frames[base.getNormalizedCurrentFrame()].removeClass('current-image').addClass('previous-image');\r\n    };\r\n\r\n    /**\r\n     * @method showCurrentFrame\r\n     * @private\r\n     * Function shows the current frame in the animation loop.\r\n     */\r\n    base.showCurrentFrame = function () {\r\n      if (undefined!==frames[base.getNormalizedCurrentFrame()]) \r\n        frames[base.getNormalizedCurrentFrame()].removeClass('previous-image').addClass('current-image');\r\n    };\r\n\r\n    /**\r\n     * @method getNormalizedCurrentFrame\r\n     * @private\r\n     * Function normalize and calculate the current frame once the user release the mouse and release touch event.\r\n     */\r\n\r\n    base.getNormalizedCurrentFrame = function () {\r\n      var c, e;\r\n\r\n      if ( !AppCongif.disableWrap ) {\r\n        c = Math.ceil(AppCongif.currentFrame % AppCongif.totalFrames);\r\n        if (c < 0) {\r\n          c += (AppCongif.totalFrames - 1);\r\n        }\r\n      } else {\r\n        c = Math.min(AppCongif.currentFrame, AppCongif.totalFrames - (AppCongif.zeroBased ? 1 : 0));\r\n        e = Math.min(AppCongif.endFrame, AppCongif.totalFrames - (AppCongif.zeroBased ? 1 : 0));\r\n        c = Math.max(c, (AppCongif.zeroBased ? 0 : 1));\r\n        e = Math.max(e, (AppCongif.zeroBased ? 0 : 1));\r\n        AppCongif.currentFrame = c;\r\n        AppCongif.endFrame = e;\r\n      }\r\n\r\n      return c;\r\n    };\r\n    /**\r\n     * Function to return with zero padding.\r\n     */\r\n    base.zeroPad = function (num) {\r\n        function pad(number, length) {\r\n          var str = number.toString();\r\n          if(AppCongif.zeroPadding) {\r\n            while (str.length < length) {\r\n                str = '0' + str;\r\n            }\r\n          }\r\n          return str;\r\n        }\r\n\r\n        var approximateLog = Math.log(AppCongif.totalFrames) / Math.LN10;\r\n        var roundTo = 1e3;\r\n        var roundedLog = Math.round(approximateLog * roundTo) / roundTo;\r\n        var numChars = Math.floor(roundedLog) + 1;\r\n        return pad(num, numChars);\r\n    };\r\n\r\n    base.browser = {};\r\n\r\n    /**\r\n     * Function to detect if the brower is IE\r\n     * @return {boolean}\r\n     *\r\n     * http://msdn.microsoft.com/en-gb/library/ms537509(v=vs.85).aspx\r\n     */\r\n    base.browser.isIE = function () {\r\n      var rv = -1;\r\n      if (navigator.appName === 'Microsoft Internet Explorer')\r\n      {\r\n        var ua = navigator.userAgent;\r\n        var re  = new RegExp('MSIE ([0-9]{1,}[\\\\.0-9]{0,})');\r\n        if (re.exec(ua) !== null){\r\n          rv = parseFloat( RegExp.$1 );\r\n        }\r\n      }\r\n\r\n      return rv !== -1;\r\n    };\r\n    base.init();\r\n  };\r\n\r\n  $.ThreeSixty.defaultOptions = {\r\n    /**\r\n     * @cfg {Boolean} dragging [dragging=false]\r\n     * @private\r\n     * Private propery contains a flags if users is in dragging mode.\r\n     */\r\n    dragging: false,\r\n    /**\r\n     * @cfg {Boolean} ready [ready=false]\r\n     * @private\r\n     * Private propery is set to true is all assets are loading and application is\r\n     * ready to render 360 slider.\r\n     */\r\n    ready: false,\r\n    /**\r\n     * @cfg {Number} pointerStartPosX\r\n     * @private\r\n     * private property mouse pointer start x position when user starts dragging slider.\r\n     */\r\n    pointerStartPosX: 0,\r\n    /**\r\n     * @cfg {Number} pointerEndPosX\r\n     * @private\r\n     * private property mouse pointer start x position when user end dragging slider.\r\n     */\r\n    pointerEndPosX: 0,\r\n    /**\r\n     * @cfg {Number} pointerDistance\r\n     * @private\r\n     * private property contains the distance between the pointerStartPosX and pointerEndPosX\r\n     */\r\n    pointerDistance: 0,\r\n    /**\r\n     * @cfg {Number} monitorStartTime\r\n     * @private\r\n     * private property contains time user took in dragging mouse from pointerStartPosX and pointerEndPosX\r\n     */\r\n    monitorStartTime: 0,\r\n    monitorInt: 10,\r\n    /**\r\n     * @cfg {Number} ticker\r\n     * @private\r\n     * Timer event that renders the 360\r\n     */\r\n    ticker: 0,\r\n    /**\r\n     * @cfg {Number} speedMultiplier\r\n     * This property controls the sensitivity for the 360 slider\r\n     */\r\n    speedMultiplier: 7,\r\n    /**\r\n     * @cfg {Number} totalFrames\r\n     * Set total number for frames used in the 360 rotation\r\n     */\r\n    totalFrames: 180,\r\n    /**\r\n     * @cfg {Number} currentFrame\r\n     * Current frame of the slider.\r\n     */\r\n    currentFrame: 0,\r\n    /**\r\n     * @cfg {Array} endFrame\r\n     * Private perperty contains information about the end frame when user slides the slider.\r\n     */\r\n    endFrame: 0,\r\n    /**\r\n     * @cfg {Number} loadedImages\r\n     * Private property contains count of loaded images.\r\n     */\r\n    loadedImages: 0,\r\n    /**\r\n     * @cfg {Array} framerate\r\n     * Set framerate for the slider animation\r\n     */\r\n    framerate: 60,\r\n    /**\r\n     * @cfg {String} domains\r\n     * Set comma seprated list of all parallel domain from where 360 assets needs to be loaded.\r\n     */\r\n    domains: null,\r\n    /**\r\n     * @cfg {String} domain\r\n     * Domain from where assets needs to be loaded. Use this propery is you want to load all assets from\r\n     * single domain.\r\n     */\r\n    domain: '',\r\n    /**\r\n     * @cfg {Boolean} parallel\r\n     * Set to true if you want to load assets from parallel domain. Default false\r\n     */\r\n    parallel: false,\r\n    /**\r\n     * @cfg {Number} queueAmount\r\n     * Set number of calls to be made on parallel domains.\r\n     */\r\n    queueAmount: 8,\r\n    /**\r\n     * @cfg {Number} idle\r\n     * Mouse Inactivite idle time in seconds. If set more than 0 will auto spine the slider\r\n     */\r\n    idle: 0,\r\n    /**\r\n     * @cfg {String} filePrefix\r\n     * Prefix for the image file name before the numeric value.\r\n     */\r\n    filePrefix: '',\r\n    /**\r\n     * @cfg {String} ext [ext=.png]\r\n     * Slider image extension.\r\n     */\r\n    ext: 'png',\r\n    /**\r\n     * @cfg {Object} height [300]\r\n     * Height of the slider\r\n     */\r\n    height: 300,\r\n    /**\r\n     * @cfg {Number} width [300]\r\n     * Width of the slider\r\n     */\r\n    width: 300,\r\n\r\n    /**\r\n     * @cfg {Object} styles\r\n     * CSS Styles for the 360 slider\r\n     */\r\n    styles: {},\r\n    /**\r\n     * @cfg {Boolean} navigation[false]\r\n     * State if navigation controls are visible or not.\r\n     */\r\n    navigation: false,\r\n    /**\r\n     * @cfg {Boolean} autoplay[false]\r\n     * Autoplay the 360 animation\r\n     */\r\n    autoplay: false,\r\n    /**\r\n     * @cfg {number} autoplayDirection [1]\r\n     * Direction for autoplay the 360 animation. 1 for right spin, and -1 for left spin.\r\n     */\r\n    autoplayDirection: 1,\r\n    /**\r\n     * Property to disable auto spin\r\n     * @type {Boolean}\r\n     */\r\n    disableSpin: false,\r\n    /**\r\n     * Property to disable infinite wrap\r\n     * @type {Boolean}\r\n     */\r\n    disableWrap: false,\r\n    /**\r\n     * Responsive width\r\n     * @type {Boolean}\r\n     */\r\n    responsive: false,\r\n    /**\r\n     * Zero Padding for filenames\r\n     * @type {Boolean}\r\n     */\r\n    zeroPadding: false,\r\n    /**\r\n     * Zero based for image filenames starting at 0\r\n     * @type {Boolean}\r\n     */\r\n     zeroBased: false,\r\n    /**\r\n     * @type {Array}\r\n     * List of plugins\r\n     */\r\n    plugins: [],\r\n    /**\r\n     * @type {Boolean}\r\n     * Show hand cursor on drag\r\n     */\r\n    showCursor: false,\r\n    /**\r\n     * @cfg {Boolean} drag\r\n     * Set it to false if you want to disable mousedrag or touch events\r\n     */\r\n    drag : true,\r\n    /**\r\n     * @cfg {Function} onReady\r\n     * Callback triggers once all images are loaded and ready to render on the screen\r\n     */\r\n    startAutoplay: false,\r\n    interval: 40,\r\n\r\n    onReady : function() {}\r\n\r\n\r\n  };\r\n\r\n\r\n  $.fn.ThreeSixty = function (options) {\r\n    return Object.create(new $.ThreeSixty(this, options));\r\n  };\r\n\r\n}(jQuery));\r\n\r\n/**\r\n *\r\n * Object.create method for perform as a fallback if method not available.\r\n * The syntax just takes away the illusion that JavaScript uses Classical Inheritance.\r\n */\r\nif (typeof Object.create !== 'function') {\r\n  Object.create = function (o) {\r\n\t\t'use strict';\r\n    function F() {}\r\n    F.prototype = o;\r\n    return new F();\r\n  };\r\n}\r\n\r\n\r\n(function($) {\r\n  'use strict';\r\n  $.ThreeSixtyFullscreen = function(el, options) {\r\n    var plugin = this,\r\n      $el = el,\r\n      opts = options,\r\n      $button = $('<a href=\\'#\\'>Fullscreen</a>'),\r\n      isFullscreen = false,\r\n      pfx = ['webkit', 'moz', 'ms', 'o', ''];\r\n\r\n    // Attach event to the plugin\r\n    $button.bind('click', function(event) {\r\n      plugin.onClickHandler.apply(this, event);\r\n    });\r\n\r\n    /**\r\n     * Set styles for the plugin interface.\r\n     * @return {Object} this\r\n     */\r\n    plugin.setStyles = function() {\r\n      $button.css({\r\n        'z-index': 12,\r\n        'display': 'block',\r\n        'position': 'absolute',\r\n        'background': 'url(img/fs.png) no-repeat',\r\n        'width': '20px',\r\n        'height': '20px',\r\n        'text-indent': '-99999px',\r\n        'right': '5px',\r\n        'bottom': '5px',\r\n        'background-position': '0px -20px'\r\n      });\r\n      return this;\r\n    };\r\n\r\n    plugin.RunPrefixMethod = function(obj, method) {\r\n      var p = 0,\r\n        m, t;\r\n      while (p < pfx.length && !obj[m]) {\r\n        m = method;\r\n        if (pfx[p] === '') {\r\n          m = m.substr(0, 1).toLowerCase() + m.substr(1);\r\n        }\r\n        m = pfx[p] + m;\r\n        t = typeof obj[m];\r\n        if (t !== 'undefined') {\r\n          pfx = [pfx[p]];\r\n          return (t === 'function' ? obj[m]() : obj[m]);\r\n        }\r\n        p++;\r\n      }\r\n    };\r\n    /**\r\n     * Initilize the fullscreen plugin\r\n     * @param  {Object} opt override options\r\n     */\r\n    plugin.init = function() {\r\n      plugin.setStyles();\r\n      $el.prepend($button);\r\n    };\r\n\r\n    plugin.onClickHandler = function(e) {\r\n      var elem;\r\n      if (typeof $el.attr('id') !== 'undefined') {\r\n        elem = document.getElementById($el.attr('id'));\r\n      } else if (typeof $el.parent().attr('id') !== 'undefined') {\r\n        elem = document.getElementById($el.parent().attr('id'));\r\n      } else {\r\n        return false;\r\n      }\r\n\r\n      plugin.toggleFullscreen(elem);\r\n    };\r\n\r\n    plugin.toggleButton = function() {\r\n      if (isFullscreen) {\r\n        $button.css({\r\n          'background-position': '0px 0px'\r\n        });\r\n      } else {\r\n        $button.css({\r\n          'background-position': '0px -20px'\r\n        });\r\n      }\r\n    };\r\n\r\n    plugin.toggleFullscreen = function(elem) {\r\n      if (plugin.RunPrefixMethod(document, 'FullScreen') || plugin.RunPrefixMethod(document, 'IsFullScreen')) {\r\n        plugin.RunPrefixMethod(document, 'CancelFullScreen');\r\n      }\r\n      else {\r\n        plugin.RunPrefixMethod(elem, 'RequestFullScreen');\r\n      }\r\n      plugin.toggleButton();\r\n    };\r\n    plugin.init();\r\n  };\r\n}(jQuery));"],"names":["$","ThreeSixty","el","options","AppCongif","base","this","frames","$el","data","init","extend","defaultOptions","parallel","loadImages","disableSpin","currentFrame","endFrame","initProgress","css","width","styles","responsive","find","progress","marginTop","height","fadeIn","imgList","hide","li","imageName","image","document","createElement","images","loadedImages","browser","msie","Date","getTime","attr","addClass","appendTo","push","append","load","imageLoaded","text","Math","floor","totalFrames","removeClass","fadeOut","preview","showImages","showNavigation","ready","drag","initEvents","refresh","initPlugins","onReady","each","plugins","i","plugin","Error","call","navigation","navigation_init","nav_bar","next","previous","play_stop","html","startAutoplay","play_stop_class","prepend","bind","event","preventDefault","autoplay","currentTarget","clearInterval","play","setInterval","moveToNextFrame","interval","id","stop","autoplayDirection","gotoAndPlay","n","disableWrap","multiplier","ceil","newEndFrame","realEndFrame","currentFromEnd","target","hasClass","type","which","pointerStartPosX","getPointerEvent","pageX","dragging","stopped","trackPointer","isIE","showCursor","originalEvent","targetTouches","pointerEndPosX","monitorStartTime","monitorInt","pointerDistance","speedMultiplier","min","zeroBased","max","ticker","render","round","framerate","frameEasing","hidePreviousFrame","showCurrentFrame","trigger","getNormalizedCurrentFrame","window","undefined","c","e","zeroPad","num","approximateLog","log","LN10","roundedLog","number","length","str","toString","zeroPadding","pad","rv","navigator","appName","ua","userAgent","RegExp","exec","parseFloat","$1","domains","domain","queueAmount","idle","filePrefix","ext","fn","Object","create","jQuery","o","F","prototype","ThreeSixtyFullscreen","$button","pfx","onClickHandler","apply","setStyles","RunPrefixMethod","obj","method","m","t","p","substr","toLowerCase","_typeof","elem","getElementById","parent","toggleFullscreen","toggleButton"],"sourceRoot":""}