var slides = new Array();
var nbPreloadSlide = 3;
var currentPosition = 0;
var oldPosition = 0;
var slideImgWidth = 600;
var slideDescWidth = 300;
var numberOfSlides = $('#products_cnt .thumb').length;
var slidesImg = $('.pict_cnt .slide');
var slidesDesc = $('.desc_cnt .slide');
var fopen = false;
var products = false;
var rq_pending=null;
var document_root_url = document.location.href;

// gére le traking des page appelé en ajax (pages articles)
function pushTrackPageview(page, title) {
	if ( typeof( gtag ) != "undefined" ) {
		gtag('event', 'page_view', {
			page_title: title,
			page_location: page
		});
	}
	// if ( typeof( ga ) != "undefined" ) {
	// 	ga('send', {
	// 		  'hitType': 'pageview',
	// 		  'page': page,
	// 		  'title': title
	// 	});
	// 	//# Ancien code google analytics
	// 	//_gaq.push(['_trackPageview', page]);
	// }
}

$(document).ready(function() {
	//OnResize do positionateSlide
	window.onresize = function(event) {
		 positionateSlide(currentPosition+1);
	};
	// Animate Close IMG Product content
	$("#product_cnt .close img").hover(function () {
		$(this).stop().animate({rotate: '90deg'}, 500, 'easeInOutQuad');
	},function () {
		$(this).stop().animate({rotate: '-90deg'}, 500, 'easeInOutQuad');
    });  
	// Remove scrollbar in JS
	$('.slidesContainer').css('overflow', 'hidden');
	// Wrap all .slides with #slideInner div
	slidesImg.wrapAll('<div id="slideImgInner"></div>').css({
		'float' : 'left',
		'width' : slideImgWidth
  	});
	// Wrap all .slides with #slideInner div
	slidesDesc.wrapAll('<div id="slideDescInner"></div>').css({
	    'float' : 'left',
	    'width' : slideDescWidth
	});
	// Set buttons text
	if (app_language == 'fr') {
		prev_text = "Photo précédente";
		next_text = "Photo suivante";
	}else {
		prev_text = "Previous picture";
		next_text = "Next picture";
	} 

	//$('#slideDescInner').css('width', slideDescWidth * numberOfSlides);
	//$('#slideImgInner').css('width', slideImgWidth * numberOfSlides);
	  
	// Insert left and right arrow controls in the DOM
	$('.desc_cnt .nav .bt_cnt')
	    .prepend('<button class="control" id="leftControl" title="'+prev_text+'" />')
	    .append('<span class="current"></span><span class="sep">/</span><span class="nbslide">'+numberOfSlides+'</span>')
	    .append('<button class="control" id="rightControl" title="'+next_text+'" />');
	
	initProductControls();
});

function initProductControls(){
	$('#product_cnt .control').bind('click', function(){
	  	if (!rq_pending) {
    		eval($('#thumb'+currentPosition+' .control').attr('onclick').replace("return false;", ""));
    		history.replaceState(document_root_url, document.title, $('#thumb'+currentPosition+' .control').attr('href'));
    		pushTrackPageview($('#thumb'+currentPosition+' .control').attr('href'), $('#thumb'+currentPosition+' .title').html());
    	}
	  });
}

function determineNewPosition(el){
	oldPosition = currentPosition;
	if ( $(el).attr('id')=='rightControl') {
		currentPosition = currentPosition+1;
	}else if ($(el).attr('id')=='leftControl') { 
		currentPosition = currentPosition-1;
	}else {
		currentPosition = parseInt($(el).attr('id'));
	}
}

function manageMoreImg(el){
		if (el == null)el=$('.slideMorePictsInner');

		$('.slidesContainer').css('overflow', 'hidden');
		$(el).each(function() {
		  var slideMorePictsInner = this;
		  var slidePictPosition=0;
		  var numberOfSlidesPict = parseInt($(slideMorePictsInner).find('.slidepict').length);
		  $(this).css('width', slideImgWidth * parseInt(numberOfSlidesPict));
		  
		  $(this)
		    .prepend('<button class="pcontrol left" title="'+prev_text+'" style="position:absolute; top: 218px; left: 20px; z-index:10;"/>')
		    .append('<button class="pcontrol right" title="'+next_text+'" style="position:absolute; top: 218px; right: 20px; z-index:10;"/>');
		  	
		  	if(numberOfSlidesPict==1){ $(this).find('.pcontrol').hide(); }
		  	if(slidePictPosition==0){ $(this).find('.left').hide(); }
		  	$(this).find('.pcontrol')
		    .bind('click', function(){
		    	if ( $(this).attr('class')=='pcontrol right') {
			    	slidePictPosition = slidePictPosition+1; 
			    }else if ($(this).attr('class')=='pcontrol left') { 
			    	slidePictPosition = slidePictPosition-1;
			    }
		    	
		    	$(slideMorePictsInner).find('img').each(function(){
		    		$(this).attr('src', $(this).attr('data-original'));
		    	});
		    	if(slidePictPosition==0){ $(slideMorePictsInner).find('.left').hide(); }
			    else{ $(slideMorePictsInner).find('.left').show();}
			    // Hide right arrow if position is last slide
			    if(slidePictPosition==numberOfSlidesPict-1){ $(slideMorePictsInner).find('.right').hide(); } 
			    else{ $(slideMorePictsInner).find('.right').show();}
		    	
		    	$(slideMorePictsInner).stop().transition({
		    		'marginLeft' : slideImgWidth*(-slidePictPosition)
		    	}, 500, 'in-out');
		    
		    });
		  
	  });
}

function manageControls(position){
    if(position==0){ 
    	$('#leftControl').hide();
    	if (!$('#leftControl.disable').size()) {
    		$('#leftControl').after('<button class="disable" id="leftControl" />');
    	}
    }else{ 
    	$('#leftControl.disable').remove(); 
    	$('#leftControl').show();
    }
    // Hide right arrow if position is last slide
    if(position==numberOfSlides-1){
    	$('#rightControl').hide(); 
    	if (!$('#rightControl.disable').size())
    		$('#rightControl').after('<button class="disable" id="rightControl" />');
    }else{
    	$('#rightControl.disable').remove(); 
    	$('#rightControl').show();
    }
} 


function positionateSlide(id)
 {
	var pos=0;
	var modulo = Math.round($("#grid-container").width() / $(".thumb").width());
	
	if (numberOfSlides < modulo) {
		$( "#thumb"+(numberOfSlides-1)).after( $('#product_cnt') );
	}else {
		if (id % modulo == (modulo - 1)) {
			$( "#thumb"+id ).after( $('#product_cnt') );
		}else {	
			calc =  Math.floor(numberOfSlides/modulo) * modulo;
			if (id >= calc) {
				pos= calc-1;	
			}else {
				pos = (parseInt(id)+modulo-1-(parseInt(id)%modulo));
			}
			$( "#thumb"+pos ).after( $('#product_cnt') );
		}
	}
	
 }

function createListToken(id, nextPrev){
	var tokens = new Array();
	if (id == null) {
		var max = currentPosition + nbPreloadSlide;
		var min = currentPosition + 1;
		if (nextPrev == -1) {
			var min = currentPosition - nbPreloadSlide;
			var max = currentPosition - 1;
		}
	}else {
		var min = id - nbPreloadSlide;
		var max = id + nbPreloadSlide;
	}
	if (min < 0) min = 0;
	if (max > (numberOfSlides-1)) max = numberOfSlides-1;
	for (i=min;i<=max;i++) {
		if (slides == null || slides[$('#thumb'+i).attr('token')] == null) 
			tokens.push(createToken($('#thumb'+i).attr('token'), i));
	}
	return tokens;
}

function createToken(token, pos){
	var obj = new Object();
	obj.token = token;
	obj.pos = pos;
	return obj;
}

function openContainer(){
	 $('#product_cnt').stop().animate({ height: '454px'}, 500, 'easeInOutQuad');
	  fopen=true;
	  scroll_offset = ($(window).height() - 454)/2;
	  $('html, body').animate({scrollTop: $("#product_cnt").offset().top - scroll_offset}, 100, 'easeInOutQuad');
}

function overlaySelectedElem(){
	$('.overselect').remove();
	if (app_language == 'fr') {
		  os_txt = "Article séléctionné";
	}else {
		  os_txt = "Selected article";
	}
	$("<div class='overselect' id='over"+currentPosition+"'>"+os_txt+"</div>").hide().appendTo($('#thumb'+currentPosition)).fadeIn();
}

function showProductCnt(id, token, el) {
	var tokens = new Array();
	
	if ((id == "rightControl" || id == "leftControl") && rq_pending == null) {
		
		rq_pending = 1;
		if (id == "rightControl") var sign=1;
		else var sign=-1;
		
		var notMoreThanOne=0;
		var notTwice=0;
		$('#slideImgInner,  #slideDescInner').stop().transition({
			  'marginLeft' : function (index, value) {
				  if (parseInt(value)%$(this).children().width()) return false;
				  if (notTwice == 0) {
					  // Determine new position before end of the slide
					  determineNewPosition(el);
			  
					  		  

					  $('.desc_cnt .current').html((currentPosition+1));
					  overlaySelectedElem();
					  notTwice=1;
				  }
				  return parseInt(value) - ($(this).children().width() * sign); 
			  }
		}, 500, 'in-out', function () {
			if (notMoreThanOne == 1) return false;
					
			manageControls(currentPosition);
			tokens = createListToken(null, sign);
			if (tokens.length > 0) {
				manageItemsOnNavigation(token, tokens, el);
			}else {
				// No slide to load
				rq_pending=null;
			}
			notMoreThanOne = 1;
		});
		
	}else {
		delete slides;
		slides = new Array();
		id = parseInt(id);
		$('.desc_cnt .current').html((id+1));
		tokens = createListToken(id);
		
		initItemsOnThumbClick(token, tokens);
	}
	
	return false;
}

function hideProductCnt() {
	fopen = false;
	$('.overselect').remove();
	$('#product_cnt').stop().animate({ height: '0px'}, 500, 'easeInOutQuad');
	if (Modernizr.history) {
		history.replaceState( document_root_url, document.title,  document_root_url);
	}
}

function manageItemsOnNavigation(token, tokens, el){	 
	jQuery.ajax({
	  type: 'POST',
	  dataType: 'json',
	  url: '/'+app_language+'/catalogue/product/'+token,
	  data: {
		ajax: true,
		token:token,
		tokens:JSON.stringify(tokens),
		referer:app_actionReferer
	  }, 
	  success: function(data, textStatus, jqXHR) {
		 
		  for (var i=0; i < data.length; i++){
			 if ($(el).attr('id') == 'rightControl') {
				 $(data[i].html[0]).appendTo('#product_cnt #slideImgInner');			
				 $(data[i].html[1]).appendTo('#product_cnt #slideDescInner');
				 var flag_sign=1;
			 }else {
				 $(data[i].html[0]).prependTo('#product_cnt #slideImgInner');
				 $(data[i].html[1]).prependTo('#product_cnt #slideDescInner');
				 var flag_sign=-1;
			 }
			 slides[data[i].token] = 1;
			 
			 var current = $("#product_cnt #slideImgInner .slide[token='"+data[i].token+"']");
			 //Swipe box loaded items only
			 $(current).find(".swipebox").swipebox();
			 manageMoreImg($(current).find(".slideMorePictsInner"));
			 
		  }
		  
		  if ($(el).attr('id') == 'leftControl') {
			  $('#slideImgInner,  #slideDescInner').css({
				  'marginLeft' : function (index, value) {
					  if (parseInt(value)%$(this).children().width()) return false;
					  return parseInt(value) - $(this).children().width(); 
				  }
			  });
		  }
		  
		  rq_pending=null;
		  
		  var nbSlide = $('#product_cnt #slideImgInner .slide').length;
		  
		  $('#slideImgInner').css('width', slideImgWidth * nbSlide);
		  $('#slideDescInner').css('width', slideDescWidth * nbSlide);
	  },
	  error: function(jqXHR, textStatus, errorThrown) {
		  rq_pending=null;
		  console.log(textStatus);
	  }
	});
}

function initItemsOnThumbClick(token, tokens){
		$('#product_cnt .pict_cnt .medium_loader').show();
		rq_pending = 1;		 
		jQuery.ajax({
		  type: 'POST',
		  dataType: 'json',
		  url: '/'+app_language+'/catalogue/product/'+token,
		  data: {
			ajax: true,
			token:token,
			tokens:JSON.stringify(tokens),
			referer:app_actionReferer
		  }, 
		  success: function(data, textStatus, jqXHR) {
			  $('#product_cnt #slideImgInner').empty().removeAttr('style');
			  $('#product_cnt #slideDescInner').empty().removeAttr('style');
			  for (var i=0; i < data.length; i++){
				  if (data[i].token == token) {
					  var slideCurrentPosition = i;
					  currentPosition = data[i].pos; 
				  }
				  slides[data[i].token] = 1;
				  $(data[i].html[0]).appendTo('#product_cnt #slideImgInner');			
				  $(data[i].html[1]).appendTo('#product_cnt #slideDescInner');
			  }

			  //swipeBox all preload items
			  $("#product_cnt #slideImgInner").find(".swipebox").swipebox();
			  
			  var current = $("#product_cnt #slideImgInner .slide[token='"+data[slideCurrentPosition].token+"']");
			  $(current).find('img').hide();
			  $(current).find('img:first').one('load', function() {
				  $(current).find('img').show(); 
				  $('#product_cnt .pict_cnt .medium_loader').hide();
			  });	
			  
			  var nbSlide = $('#product_cnt #slideImgInner .slide').length;
			  //Set the new size of the slide container
			  $('#slideImgInner').css('width', slideImgWidth * nbSlide);
			  $('#slideDescInner').css('width', slideDescWidth * nbSlide);
			  //Apply the margin on the current element
			  $('#slideImgInner').css({
			        'marginLeft' : slideImgWidth*(-slideCurrentPosition)
			  });
	    	  $('#slideDescInner').css({
			        'marginLeft' : slideDescWidth*(-slideCurrentPosition)
			  });
	    	  manageControls(currentPosition);
			  manageMoreImg(null);
	    	  //hide loader de merde
	    	 
	    	  positionateSlide(currentPosition);
	    	  // Open the container
	    	  openContainer();

	    	  overlaySelectedElem();
	    	  
	    	  history.replaceState(document_root_url, document.title, $('#thumb'+currentPosition+' .control').attr('href'));
	    	  pushTrackPageview($('#thumb'+currentPosition+' .control').attr('href'), $('#thumb'+currentPosition+' .title').html());
				
			rq_pending=null;
		  },
		  error: function(jqXHR, textStatus, errorThrown) {
			  rq_pending=null;
			  console.log(textStatus);
		  }
		});
}
