{"version":3,"file":"threesixty.6d5729.js","mappings":";6TAYC,SAAUA,GACT,aA+CAA,EAAEC,WAAa,SAAUC,EAAIC,GAG3B,IAAiBC,EAAbC,EAAOC,KAAiBC,EAAS,GAQrCF,EAAKG,IAAMR,EAAEE,GACbG,EAAKH,GAAKA,EAGVG,EAAKG,IAAIC,KAAK,aAAcJ,GA2B5BA,EAAKK,KAAO,YACVN,EAAYJ,EAAEW,OAAO,CAAC,EAAGX,EAAEC,WAAWW,eAAgBT,IACvCU,UACbR,EAAKS,aAEJV,EAAUW,cACfX,EAAUY,aAAe,EACzBZ,EAAUa,SAAW,GAEnBZ,EAAKa,cACP,EAUAb,EAAKa,aAAe,WAClBb,EAAKG,IAAIW,IAAI,CACXC,MAAOhB,EAAUgB,MAAQ,OAGxBD,IAAIf,EAAUiB,QAEdjB,EAAUkB,YACVjB,EAAKG,IAAIW,IAAI,CAAEC,MAAO,SAEzBf,EAAKG,IAAIe,KAAKnB,EAAUoB,UAAUL,IAAI,CACpCM,UAAarB,EAAUsB,OAAS,EAAK,GAAM,OAG7CrB,EAAKG,IAAIe,KAAKnB,EAAUoB,UAAUG,OAAO,QAEzCtB,EAAKG,IAAIe,KAAKnB,EAAUwB,SAASC,MACnC,EAOAxB,EAAKS,WAAa,WAChB,IAAIgB,EAAIC,EAAWC,EACnBF,EAAKG,SAASC,cAAc,MAC5BH,EAAY3B,EAAU+B,OAAO/B,EAAUgC,eAAkBpC,EAAEqC,QAAQC,KAAQ,KAAM,IAAIC,MAAOC,UAAY,IACxGR,EAAQhC,EAAE,SAASyC,KAAK,MAAOV,GAAWW,SAAS,kBAAkBC,SAASb,GAE9EvB,EAAOqC,KAAKZ,GAEZ3B,EAAKG,IAAIe,KAAKnB,EAAUwB,SAASiB,OAAOf,GAExC9B,EAAEgC,GAAOc,MAAK,WACZzC,EAAK0C,aACP,GACF,EAOA1C,EAAK0C,YAAc,WACjB3C,EAAUgC,cAAgB,EAC1BpC,EAAEI,EAAUoB,SAAW,SAASwB,KAAKC,KAAKC,MAAM9C,EAAUgC,aAAehC,EAAU+C,YAAc,KAAO,KACpG/C,EAAUgC,cAAgBhC,EAAU+C,aACnC/C,EAAUW,aACXR,EAAO,GAAG6C,YAAY,kBAAkBV,SAAS,iBAEnD1C,EAAEI,EAAUoB,UAAU6B,QAAQ,QAAQ,WACpCrD,EAAEM,MAAMuB,OACR7B,EAAEI,EAAUkD,SAASnC,IAAI,UAAW,GACpCd,EAAKkD,aACLlD,EAAKmD,gBACP,KAEAnD,EAAKS,YAET,EAWAT,EAAKkD,WAAa,WAEhBlD,EAAKG,IAAIe,KAAKnB,EAAUwB,SAASD,SACjCtB,EAAKoD,OAAQ,EACbrD,EAAUqD,OAAQ,EAEdrD,EAAUsD,MACZrD,EAAKsD,aAEPtD,EAAKuD,UACLvD,EAAKwD,cAELzD,EAAU0D,SACZ,EAKAzD,EAAKwD,YAAc,WACjB7D,EAAE+D,KAAK3D,EAAU4D,SAAS,SAASC,EAAGC,GACpC,GAAwB,mBAAdlE,EAAEkE,GAGV,MAAM,IAAIC,MAAMD,EAAS,mBAFzBlE,EAAEkE,GAAQE,KAAK/D,EAAMA,EAAKG,IAAKJ,EAInC,GACF,EAOAC,EAAKmD,eAAiB,WACpB,GAAIpD,EAAUiE,aAAejE,EAAUkE,gBAAiB,CACtD,IAAIC,EAASC,EAAMC,EAAUC,EAc7B,GAZAH,EAAUvE,EAAE,UAAUyC,KAAK,QAAS,sBAEpC+B,EAAOxE,EAAE,QAAQyC,KAAK,CACpB,KAAQ,IACR,MAAS,oBACRkC,KAAK,QAERF,EAAWzE,EAAE,QAAQyC,KAAK,CACxB,KAAQ,IACR,MAAS,wBACRkC,KAAK,YAEHvE,EAAUwE,cACX,IAAIC,EAAkB,uBAElBA,EAAkB,kBAE1BH,EAAY1E,EAAE,QAAQyC,KAAK,CACzB,KAAQ,IACR,MAASoC,IACRF,KAAK,QAERJ,EAAQ1B,OAAO4B,GACfF,EAAQ1B,OAAO6B,GACfH,EAAQ1B,OAAO2B,GAEfnE,EAAKG,IAAIsE,QAAQP,GAEjBC,EAAKO,KAAK,uBAAwB1E,EAAKmE,MACvCC,EAASM,KAAK,uBAAwB1E,EAAKoE,UAC3CC,EAAUK,KAAK,uBAAwB1E,EAAKqE,WAC5CtE,EAAUkE,iBAAkB,CAC9B,CACF,EAUAjE,EAAKqE,UAAY,SAASM,GACxBA,EAAMC,iBAED7E,EAAU8E,UAKb9E,EAAU8E,UAAW,EACrBlF,EAAEgF,EAAMG,eAAe/B,YAAY,mBAAmBV,SAAS,mBAC/D0C,cAAchF,EAAUiF,MACxBjF,EAAUiF,KAAO,OAPjBjF,EAAU8E,UAAW,EACrB9E,EAAUiF,KAAOC,YAAYjF,EAAKkF,gBAAiBnF,EAAUoF,UAC7DxF,EAAEgF,EAAMG,eAAe/B,YAAY,mBAAmBV,SAAS,mBAOnE,EASArC,EAAKmE,KAAO,SAASQ,GACfA,GAASA,EAAMC,iBACnB7E,EAAUa,UAAY,EACtBZ,EAAKuD,SACP,EAQAvD,EAAKoE,SAAW,SAASO,GACnBA,GAASA,EAAMC,iBACnB7E,EAAUa,UAAY,EACtBZ,EAAKuD,SACP,EAOAvD,EAAKgF,KAAO,SAASI,GACdrF,EAAU8E,WACb9E,EAAU8E,UAAW,EACrB9E,EAAUiF,KAAOC,YAAYjF,EAAKkF,gBAAiBnF,EAAUoF,UAEjE,EAQAnF,EAAKqF,KAAO,WACNtF,EAAU8E,WACZ9E,EAAU8E,UAAW,EACrBE,cAAchF,EAAUiF,MACxBjF,EAAUiF,KAAO,KAErB,EAQAhF,EAAKkF,gBAAkB,WACe,IAAhCnF,EAAUuF,kBACZvF,EAAUa,UAAY,EAEtBb,EAAUa,UAAY,EAExBZ,EAAKuD,SACP,EAQAvD,EAAKuF,YAAc,SAAUC,GAC3B,GAAIzF,EAAU0F,YACZ1F,EAAUa,SAAW4E,EACrBxF,EAAKuD,cACA,CAEL,IAAImC,EAAa9C,KAAK+C,KAAK5F,EAAUa,SAAWb,EAAU+C,aACxC,IAAf4C,IACDA,EAAa,GAIf,IAOIE,EAPAC,EAAgBH,EAAa,EAC/B3F,EAAUa,UAAa8E,EAAa,GAAK3F,EAAU+C,YACnD/C,EAAUa,SAERkF,EAAiB/F,EAAU+C,YAAc+C,EAOzCD,EAHDJ,EAAIK,EAAe,EAEjBL,EAAIK,EAAeA,GAAgB9F,EAAU+C,YAAc0C,GAC9CzF,EAAUa,UAAY4E,EAAIK,GAE1B9F,EAAUa,UAAYiF,GAAgB9F,EAAU+C,YAAc0C,IAIzEK,EAAeL,EAAIM,EAAiBN,EACvBzF,EAAUa,UAAYiF,EAAeL,GAErCzF,EAAUa,UAAYkF,EAAiBN,GAKxDK,IAAiBL,IAClBzF,EAAUa,SAAWgF,EACrB5F,EAAKuD,UAET,CACF,EASAvD,EAAKsD,WAAa,WAChBtD,EAAKG,IAAIuE,KAAK,2DAA2D,SAAUC,GAG5EhF,EAAEgF,EAAMoB,QAAQC,SAAS,0BAA4BrG,EAAEgF,EAAMoB,QAAQC,SAAS,eAInFrB,EAAMC,iBAEc,cAAfD,EAAMsB,MAAwC,IAAhBtB,EAAMuB,OAA+B,eAAfvB,EAAMsB,MAC7DlG,EAAUoG,iBAAmBnG,EAAKoG,gBAAgBzB,GAAO0B,MACzDtG,EAAUuG,UAAW,EACjBvG,EAAU8E,WACZ9E,EAAUwG,SAAU,EACpBvG,EAAKqF,SAEiB,cAAfV,EAAMsB,KACfjG,EAAKwG,aAAa7B,GACM,aAAfA,EAAMsB,OACflG,EAAUuG,UAAW,EACjBvG,EAAUwG,UACZxG,EAAUwG,SAAU,EACpBvG,EAAKgF,SAGU,UAAfL,EAAMsB,MAAqBjG,EAAKgC,QAAQyE,QAC1CzG,EAAKG,IAAI4C,YAAY,wBAAwBV,SAAS,0BAE1D,IAEA1C,EAAEiC,UAAU8C,KAAK,WAAW,SAAUC,GAEpC5E,EAAUuG,UAAW,EACjBvG,EAAUwG,UACZxG,EAAUwG,SAAU,EACpBvG,EAAKgF,QAEPrF,EAAEM,MAAM8C,YAAY,wBACpBpD,EAAEM,MAAM8C,YAAY,yBACtB,IAEApD,EAAEiC,UAAU8C,KAAK,aAAa,SAAUC,GAClC5E,EAAUuG,UACZ3B,EAAMC,kBACF5E,EAAKgC,QAAQyE,QAAU1G,EAAU2G,YACnC1G,EAAKG,IAAI4C,YAAY,wBAAwBV,SAAS,4BAGpDrC,EAAKgC,QAAQyE,QAAU1G,EAAU2G,YACnC1G,EAAKG,IAAI4C,YAAY,0BAA0BV,SAAS,wBAG5DrC,EAAKwG,aAAa7B,EAEpB,GACF,EASA3E,EAAKoG,gBAAkB,SAAUzB,GAC/B,OAAOA,EAAMgC,cAAcC,cAAgBjC,EAAMgC,cAAcC,cAAc,GAAKjC,CACpF,EASA3E,EAAKwG,aAAe,SAAU7B,GACxB5E,EAAUqD,OAASrD,EAAUuG,WAC/BvG,EAAU8G,eAAiB7G,EAAKoG,gBAAgBzB,GAAO0B,MACnDtG,EAAU+G,kBAAmB,IAAI5E,MAAOC,UAAYpC,EAAUgH,aAChEhH,EAAUiH,gBAAkBjH,EAAU8G,eAAiB9G,EAAUoG,iBAC9DpG,EAAUiH,gBAAkB,EAC/BjH,EAAUa,SAAWb,EAAUY,aAAeiC,KAAK+C,MAAM5F,EAAU+C,YAAc,GAAK/C,EAAUkH,iBAAmBlH,EAAUiH,gBAAkBhH,EAAKG,IAAIY,UAExJhB,EAAUa,SAAWb,EAAUY,aAAeiC,KAAKC,OAAO9C,EAAU+C,YAAc,GAAK/C,EAAUkH,iBAAmBlH,EAAUiH,gBAAkBhH,EAAKG,IAAIY,UAGrJhB,EAAU0F,cACZ1F,EAAUa,SAAWgC,KAAKsE,IAAInH,EAAU+C,aAAe/C,EAAUoH,UAAY,EAAI,GAAIpH,EAAUa,UAC/Fb,EAAUa,SAAWgC,KAAKwE,IAAKrH,EAAUoH,UAAY,EAAI,EAAIpH,EAAUa,WAEzEZ,EAAKuD,UACLxD,EAAU+G,kBAAmB,IAAI5E,MAAOC,UACxCpC,EAAUoG,iBAAmBnG,EAAKoG,gBAAgBzB,GAAO0B,OAG/D,EASArG,EAAKuD,QAAU,WACY,IAArBxD,EAAUsH,SACZtH,EAAUsH,OAASpC,YAAYjF,EAAKsH,OAAQ1E,KAAK2E,MAAM,IAAOxH,EAAUyH,YAE5E,EAQAxH,EAAKsH,OAAS,WACZ,IAAIG,EACA1H,EAAUY,eAAiBZ,EAAUa,UAEvC6G,EAAc1H,EAAUa,SAAWb,EAAUY,aAAeiC,KAAKC,MAAsD,IAA/C9C,EAAUa,SAAWb,EAAUY,eAAuBiC,KAAK+C,KAAqD,IAA/C5F,EAAUa,SAAWb,EAAUY,eACxKX,EAAK0H,oBACL3H,EAAUY,cAAgB8G,EAC1BzH,EAAK2H,mBACL3H,EAAKG,IAAIyH,QAAQ,oBAAqB,CAAC5H,EAAK6H,4BAA6B9H,EAAU+C,gBAEnFgF,OAAO/C,cAAchF,EAAUsH,QAC/BtH,EAAUsH,OAAS,EAEvB,EAQArH,EAAK0H,kBAAoB,gBACnBK,IAAY7H,EAAOF,EAAK6H,8BAC1B3H,EAAOF,EAAK6H,6BAA6B9E,YAAY,iBAAiBV,SAAS,iBACnF,EAOArC,EAAK2H,iBAAmB,gBAClBI,IAAY7H,EAAOF,EAAK6H,8BAC1B3H,EAAOF,EAAK6H,6BAA6B9E,YAAY,kBAAkBV,SAAS,gBACpF,EAQArC,EAAK6H,0BAA4B,WAC/B,IAAIG,EAAGC,EAgBP,OAdMlI,EAAU0F,aAMduC,EAAIpF,KAAKsE,IAAInH,EAAUY,aAAcZ,EAAU+C,aAAe/C,EAAUoH,UAAY,EAAI,IACxFc,EAAIrF,KAAKsE,IAAInH,EAAUa,SAAUb,EAAU+C,aAAe/C,EAAUoH,UAAY,EAAI,IACpFa,EAAIpF,KAAKwE,IAAIY,EAAIjI,EAAUoH,UAAY,EAAI,GAC3Cc,EAAIrF,KAAKwE,IAAIa,EAAIlI,EAAUoH,UAAY,EAAI,GAC3CpH,EAAUY,aAAeqH,EACzBjI,EAAUa,SAAWqH,IAVrBD,EAAIpF,KAAK+C,KAAK5F,EAAUY,aAAeZ,EAAU+C,cACzC,IACNkF,GAAMjI,EAAU+C,YAAc,GAW3BkF,CACT,EAIAhI,EAAKkI,QAAU,SAAUC,GAWrB,IAAIC,EAAiBxF,KAAKyF,IAAItI,EAAU+C,aAAeF,KAAK0F,KAExDC,EAAa3F,KAAK2E,MADR,IACca,GADd,IAGd,OAdA,SAAaI,EAAQC,GACnB,IAAIC,EAAMF,EAAOG,WACjB,GAAG5I,EAAU6I,YACX,KAAOF,EAAID,OAASA,GAChBC,EAAM,IAAMA,EAGlB,OAAOA,CACT,CAMOG,CAAIV,EADIvF,KAAKC,MAAM0F,GAAc,EAE5C,EAEAvI,EAAKgC,QAAU,CAAC,EAQhBhC,EAAKgC,QAAQyE,KAAO,WAClB,IAAIqC,GAAM,EACV,GAA0B,gCAAtBC,UAAUC,QACd,CACE,IAAIC,EAAKF,UAAUG,UAEC,OADV,IAAIC,OAAO,gCACdC,KAAKH,KACVH,EAAKO,WAAYF,OAAOG,IAE5B,CAEA,OAAe,IAARR,CACT,EACA9I,EAAKK,MACP,EAEAV,EAAEC,WAAWW,eAAiB,CAM5B+F,UAAU,EAOVlD,OAAO,EAMP+C,iBAAkB,EAMlBU,eAAgB,EAMhBG,gBAAiB,EAMjBF,iBAAkB,EAClBC,WAAY,GAMZM,OAAQ,EAKRJ,gBAAiB,EAKjBnE,YAAa,IAKbnC,aAAc,EAKdC,SAAU,EAKVmB,aAAc,EAKdyF,UAAW,GAKX+B,QAAS,KAMTC,OAAQ,GAKRhJ,UAAU,EAKViJ,YAAa,EAKbC,KAAM,EAKNC,WAAY,GAKZC,IAAK,MAKLvI,OAAQ,IAKRN,MAAO,IAMPC,OAAQ,CAAC,EAKTgD,YAAY,EAKZa,UAAU,EAKVS,kBAAmB,EAKnB5E,aAAa,EAKb+E,aAAa,EAKbxE,YAAY,EAKZ2H,aAAa,EAKZzB,WAAW,EAKZxD,QAAS,GAKT+C,YAAY,EAKZrD,MAAO,EAKPkB,eAAe,EACfY,SAAU,GAEV1B,QAAU,WAAY,GAMxB9D,EAAEkK,GAAGjK,WAAa,SAAUE,GAC1B,OAAOgK,OAAOC,OAAO,IAAIpK,EAAEC,WAAWK,KAAMH,GAC9C,CAED,CArzBA,CAqzBCkK,QAO2B,mBAAlBF,OAAOC,SAChBD,OAAOC,OAAS,SAAUE,GAC1B,aACE,SAASC,IAAK,CAEd,OADAA,EAAEC,UAAYF,EACP,IAAIC,CACb,GAID,SAASvK,GACR,aACAA,EAAEyK,qBAAuB,SAASvK,EAAIC,GACpC,IAAI+D,EAAS5D,KACXE,EAAMN,EAENwK,EAAU1K,EAAE,8BAEZ2K,EAAM,CAAC,SAAU,MAAO,KAAM,IAAK,IAGrCD,EAAQ3F,KAAK,SAAS,SAASC,GAC7Bd,EAAO0G,eAAeC,MAAMvK,KAAM0E,EACpC,IAMAd,EAAO4G,UAAY,WAajB,OAZAJ,EAAQvJ,IAAI,CACV,UAAW,GACX,QAAW,QACX,SAAY,WACZ,WAAc,4BACd,MAAS,OACT,OAAU,OACV,cAAe,WACf,MAAS,MACT,OAAU,MACV,sBAAuB,cAElBb,IACT,EAEA4D,EAAO6G,gBAAkB,SAASC,EAAKC,GAGrC,IAFA,IACEC,EAAGC,EADDC,EAAI,EAEDA,EAAIT,EAAI7B,SAAWkC,EAAIE,IAAI,CAOhC,GANAA,EAAID,EACW,KAAXN,EAAIS,KACNF,EAAIA,EAAEG,OAAO,EAAG,GAAGC,cAAgBJ,EAAEG,OAAO,IAIpC,eADVF,EAACI,EAAUP,EADXE,EAAIP,EAAIS,GAAKF,KAIX,OADAP,EAAM,CAACA,EAAIS,IACG,aAAND,EAAmBH,EAAIE,KAAOF,EAAIE,GAE5CE,GACF,CACF,EAKAlH,EAAOxD,KAAO,WACZwD,EAAO4G,YACPtK,EAAIsE,QAAQ4F,EACd,EAEAxG,EAAO0G,eAAiB,SAAStC,GAC/B,IAAIkD,EACJ,QAA8B,IAAnBhL,EAAIiC,KAAK,MAClB+I,EAAOvJ,SAASwJ,eAAejL,EAAIiC,KAAK,WACnC,SAAuC,IAA5BjC,EAAIkL,SAASjJ,KAAK,MAGlC,OAAO,EAFP+I,EAAOvJ,SAASwJ,eAAejL,EAAIkL,SAASjJ,KAAK,MAGnD,CAEAyB,EAAOyH,iBAAiBH,EAC1B,EAEAtH,EAAO0H,aAAe,WAMlBlB,EAAQvJ,IAAI,CACV,sBAAuB,aAG7B,EAEA+C,EAAOyH,iBAAmB,SAASH,GAC7BtH,EAAO6G,gBAAgB9I,SAAU,eAAiBiC,EAAO6G,gBAAgB9I,SAAU,gBACrFiC,EAAO6G,gBAAgB9I,SAAU,oBAGjCiC,EAAO6G,gBAAgBS,EAAM,qBAE/BtH,EAAO0H,cACT,EACA1H,EAAOxD,MACT,CACD,CAjGA,CAiGC2J","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 = $('').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 = $('
').attr('class', 'threesixty-nav-bar');\r\n\r\n next = $('').attr({\r\n 'href': '#',\r\n 'class': 'threesixty-next'\r\n }).html('next');\r\n\r\n previous = $('').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 = $('').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 = $('Fullscreen'),\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":""}