jQuery(document).ready(function($){

  var NectarQuickViewState = {
    ajaxLoaded: false,
    sizeSet: false
  };

  $('body').on('click','ul.products li.product a.nectar_quick_view',function(e){

    e.preventDefault();

    var $quickViewBox = $('.nectar-quick-view-box');
    var $product_id = $(this).data('product-id');

    //exit if no ID passed
    if(typeof $product_id === 'undefined') { return; }

    quickView($(this).parents('li.product'), 'open');

    //empty old product info
    $quickViewBox.find('.inner-content').empty();


    //get product info
    $.ajax({
      type: 'POST',
      url: nectarLove.ajaxurl,
      data: {
        'action': 'nectar_woo_get_product',
        'product_id':  $product_id
    },
    success: function(response) {

      NectarQuickViewState.ajaxLoaded = true;

      $quickViewBox.find('.inner-content').html(response);

      //store variation starting attr
      $vari_startingImage = ($quickViewBox.find('.nectar-product-slider div.carousel-cell:first img').length > 0) ? $quickViewBox.find('.nectar-product-slider div.carousel-cell:first img').attr('src') : '';


      //select2
      if($('body[data-fancy-form-rcs="1"]').length > 0) {
        select2Init();

        //z index fix
        $select2_css = '.select2-container { z-index: 99999; }';
        var head = document.head || document.getElementsByTagName('head')[0];
  			var style = document.createElement('style');

  			style.type = 'text/css';
  			if (style.styleSheet){
  			  style.styleSheet.cssText = $select2_css;
  			} else {
  			  style.appendChild(document.createTextNode($select2_css));
  			}
  			$(style).attr('id','quickview-select-2-zindex');
  			head.appendChild(style);

      }

      //slide BG Cover
      if($('.nectar-quick-view-box[data-image-sizing="cropped"]').length > 0) {
        flickitySlideCover();
      }

      //variations
      if ( typeof wc_add_to_cart_variation_params !== 'undefined' ) {
  			$( '.variations_form' ).each( function() {
  				$( this ).wc_variation_form();
  			});
  		}

      //quantity
      quantityButtons();

      var newWidthTimeout = ( NectarQuickViewState.sizeSet == true ) ? 0 : 200;

      setTimeout(function(){

        $('.nectar-quick-view-box').addClass('fully-open');

        $('.nectar-quick-view-box-backdrop').addClass('visible');
        $('.nectar-quick-view-box').addClass('animate-width').transition({
             'left': productQV_Left+'px',
             'width': productQV_Width+'px',
          }, 550, 'cubic-bezier(.55,0,.1,1)' ,function(){

          //init flickity
          $pageDots = true;
          if($('.nectar-quick-view-box .nectar-product-slider .carousel-cell').length == 1) {
            $pageDots = false;
          }
          $carousel = $('.nectar-quick-view-box .nectar-product-slider').flickity({
            contain: true,
            lazyLoad: false,
            imagesLoaded: true,
            percentPosition: true,
            prevNextButtons: false,
            pageDots: $pageDots,
            resize: true,
            setGallerySize: true,
            wrapAround: true,
            accessibility: false
          });

          //show quick view content
          $('.nectar-quick-view-box .preview_image').hide();
          $('.nectar-quick-view-box').addClass('add-content');
          $('.nectar-quick-view-box').addClass('fixedPos');

        });

        // Trigger for custom events.
        $(window).trigger('nectar_quickview_init');

      }, newWidthTimeout);


    } // success


  }); //ajax


}); //quick view click



$('body').on('click','.nectar-quick-view-box-backdrop, .nectar-quick-view-box .close',function(e){
  e.preventDefault();
  if( $('.nectar-quick-view-box.fully-open').length > 0 ) {
     quickView($('.product.open-nectar-quick-view'),'close');
  }
});

var $startingImage, $carousel, productQV_Width, productQV_Left, newHeight;

function quickView(el,state) {

    NectarQuickViewState.ajaxLoaded = false;
    NectarQuickViewState.sizeSet = false;

    var viewportWidth = window.innerWidth;
    var viewportHeight = window.innerHeight;

    if( el.find('.background-color-expand').length == 0 || 
        state == 'close' || 
        (el.find('.background-color-expand').length > 0 && el.find('.background-color-expand').css('display') == 'none') ) {
        
			var topSelected = el.offset().top - $(window).scrollTop(),
			leftSelected = el.offset().left,
			widthSelected = el.find('img').width(),
			heightSelected = el.find('img').height();
    } else {

      var expansionAmt = 40;
      if( nectarOptions && nectarOptions.woo_minimal_product_effect && nectarOptions.woo_minimal_product_effect === 'image_zoom' ) {
        expansionAmt = 0;
      }

      var topSelected = el.offset().top - $(window).scrollTop() - (expansionAmt/2),
			leftSelected = el.offset().left - (expansionAmt/2),
			widthSelected = el.width() + expansionAmt,
			heightSelected = el.height() + expansionAmt;

    }

    var aspectRatio = parseInt(el.find('.product-wrap img').height()) / parseInt(el.find('.product-wrap img').width());

    var endingWidth = 425;

    if(aspectRatio < 1.1) { endingWidth = 550; }
    if(aspectRatio > 1.5) { endingWidth = 350; }

    newHeight = Math.floor(aspectRatio*endingWidth);
    var endingTop = (viewportHeight - newHeight)/2;
		var endingLeft = (viewportWidth - endingWidth)/2;

		productQV_Width = endingWidth + 475;
		productQV_Left = (viewportWidth - productQV_Width)/2;


    if(state == 'open') {

      //copy image
      var productImg = el.find('.product-wrap img:first').clone();
      $('.nectar-quick-view-box .preview_image').show().html(productImg);


      if( el.find('.background-color-expand').length > 0 && el.find('.background-color-expand').css('display') != 'none' ) {
        
        $('.nectar-quick-view-box .preview_image').css({
          "top": expansionAmt/2 + 'px',
          "left": expansionAmt/2 + 'px',
          "width": el.find('.product-wrap img').width(),
          "height": el.find('.product-wrap img').height()
        });
        
        $('.nectar-quick-view-box .inner-wrap').css('background-color',el.find('.background-color-expand').css('background-color'));
        

      } else {
        $('.nectar-quick-view-box').addClass('box-shadow-trans');
      }


      $('.nectar-quick-view-box').css({
          "position": 'fixed',
          "transform": '',
          'opacity': '1',
          "top": topSelected,
          "left": leftSelected,
          "width": widthSelected,
          "height": heightSelected
      });


      //hide item and show the quick view
      setTimeout(function(){
        el.addClass('no-trans').addClass('open-nectar-quick-view');
        el.trigger('mouseleave');
        $('.nectar-quick-view-box').addClass('visible');
        $('.nectar-quick-view-box-backdrop').css({'visibility': 'visible', 'z-index': '10000', 'pointer-events': 'all'});
      },75);



      //show loading
      setTimeout(function(){
        $('.nectar-quick-view-box').addClass('loading-vis');
      },575);


     setTimeout(function(){

          if(el.find('.background-color-expand').length > 0 && el.find('.background-color-expand').css('display') != 'none' ) {

            $('.nectar-quick-view-box .preview_image').transition({
              "top": '-2px',
              "left": '-2px',
              "height": "calc(100% + 4px)"
            }, 800, 'cubic-bezier(.55,0,.1,1)');
          }

          //animate size
          $('.nectar-quick-view-box').transition({
            'top': endingTop+ 'px',
            'left': endingLeft+'px',
            'width': (endingWidth - 1) + 'px',
            'height': newHeight + 'px'
          }, 750, 'cubic-bezier(.55,0,.1,1)');

          NectarQuickViewState.sizeSet = true;

      },125);


  } else {

     //close
      $('.nectar-quick-view-box').removeClass('fully-open');
      el.removeClass('no-trans');
      $('.nectar-quick-view-box-backdrop').removeClass('visible');

      if($('head #quickview-select-2-zindex').length > 0) {
        $('head #quickview-select-2-zindex').remove();
      }

      $('.nectar-quick-view-box').transition({
        'scale': '0.85',
        'opacity': '0'
      }, 300, 'cubic-bezier(.2,.75,.5,1)', function(){
        el.removeClass('open-nectar-quick-view');
        $startingImage = ($('.nectar-product-slider .flickity-slider .carousel-cell:first-child > img').length > 0) ? $('.nectar-product-slider .flickity-slider .carousel-cell:first-child > img').attr('src') : '';
        $('.nectar-quick-view-box-backdrop').css({'visibility': 'hidden',  'z-index': '-1', 'pointer-events': 'none'});
        $('.nectar-quick-view-box').removeClass('visible').removeClass('add-content').removeClass('loading-vis').removeClass('animate-width').removeClass('fixedPos');
      });

  }


} //quickview function


function resizePos() {
  $('.nectar-quick-view-box.fixedPos').css({
    'left': ($(window).width() - $('.nectar-quick-view-box').width())/2,
    'top': ($(window).height() - $('.nectar-quick-view-box').height())/2
  });
}

$(window).on('resize',resizePos);


function flickitySlideCover() {

  $('.nectar-quick-view-box div.images img').css({
    'height': (parseInt($('.nectar-quick-view-box').height()) + 4) + 'px'
  });

  //set imgs as BGs
  $('.nectar-quick-view-box .carousel-cell').each(function(){

    var $storedImgSrc = $(this).find('img').css('visibility','hidden').attr('src');


    if(typeof newHeight != 'undefined') {
      $(this).find('img').css({
        'height': newHeight + 4
      });
    }

    $(this).css({
      'background-image': 'url(' + $storedImgSrc + ')',
      'background-size': 'cover',
      'background-position': 'center'
    });

  });

}


//variation support
var $vari_startingImage = '';

$('body').on('blur','.nectar-quick-view-box select[name*="attribute_"]', function(){

  var $that = $(this);
  var attr_data = $('.variations_form').data('product_variations');
  var $parent_quick_view = $(this).parents('.nectar-quick-view-box');

  if($that.val().length > 0) {

    //give woo time to update img
    setTimeout(function(){

      $(attr_data).each(function(i, el){

        if(el.image && el.image.src) {


          if(el.image.src == $parent_quick_view.find('.flickity-slider div.carousel-cell:first a > img').attr('src')){

             if(el.image.url){

                $parent_quick_view.find('.flickity-slider div.carousel-cell:first').css('background-image','url(' + el.image.src + ')');
                $carousel.flickity( 'select', 0, true, false );

              } // if found img url

          } // if the sources match

        } // if img source exists

      });	//loop through attrs

    },30);

} else {

  //reset to original
  $parent_quick_view.find('.flickity-slider div.carousel-cell:first').css('background-image','url(' + $vari_startingImage + ')');

}

}); //blur variation





$('body').on('change','.nectar-quick-view-box select[name*="attribute_"]', function(){


     //keep classes from default hidden btn and full width btn the same
     if($('.nectar-quick-view-box .product .product > .single_add_to_cart_button_wrap .single_add_to_cart_button').length > 0) {
       setTimeout(function(){
          var addToCartClasses = $('.nectar-quick-view-box .summary-content .single_add_to_cart_button').attr('class');
          $('.nectar-quick-view-box .product .product > .single_add_to_cart_button_wrap .single_add_to_cart_button').attr('class',addToCartClasses);
       },290);

     }

}); //blur variation 2



function select2Init() {
  $('.nectar-quick-view-box select' ).each( function() {

    $( this ).select2({
      minimumResultsForSearch: 7,
      width: '100%'
    });

  });

}




// Quantity buttons
function quantityButtons() {

    if($('.nectar-quick-view-box .plus').length == 0) {

      $('.nectar-quick-view-box div.quantity:not(.buttons_added), .nectar-quick-view-box td.quantity:not(.buttons_added)' ).addClass( 'buttons_added' ).append( '<input type="button" value="+" class="plus" />' ).prepend( '<input type="button" value="-" class="minus" />' );

    }

    //also move add to cart button
    setTimeout(function(){
        var addToCartBtnText = $('.nectar-quick-view-box .summary-content .single_add_to_cart_button').text();
        var addToCartBtnClasses = ($('.nectar-quick-view-box .summary-content .single_add_to_cart_button[class]').length > 0) ? $('.nectar-quick-view-box .summary-content .single_add_to_cart_button').attr('class') : '';
        var productViewFullBtn = $('.nectar-quick-view-box .nectar-full-product-link').clone();

        $('.nectar-quick-view-box .product .product').append('<div class="single_add_to_cart_button_wrap" />');

        $('.nectar-quick-view-box .product .product .single_add_to_cart_button_wrap').append('<a class="single_add_to_cart_button button"><span>'+ addToCartBtnText +'</span></a>').append(productViewFullBtn);

        //bind click to original button
        $('.nectar-quick-view-box .product .product .single_add_to_cart_button_wrap > .single_add_to_cart_button').attr('class',addToCartBtnClasses).on('click',function(e){
          e.preventDefault(e);
          // ensure variations are set.
          if( $('.nectar-quick-view-box .summary-content .single_add_to_cart_button.wc-variation-selection-needed').length == 0 ) {
            $('.nectar-quick-view-box .summary-content .single_add_to_cart_button').last().trigger('click');
          }
        });

    },150);
}





});
