
 var J = jQuery.noConflict();
 var loaded=false;
//To do after loading HTML
J(document).ready(function(){
	ImagesEnlarge.setAnimationStatus(0);
	ImagesEnlarge.setExtendZoomStatus(1);
	ImagesEnlarge.init();
	loaded=true;
	
});

ImagesEnlarge = {
	settings: {
		useExtendedZoom:0,
		interval:0,
		shadowDistance:1,
		shadowTransparency:.2,
		allImageHolder:'featured-products_block_center',
		loaderImage:'/resource/image/loader.gif',
		useAnimation:1,//make it zero if you dont want to animate
		imageArray:[],
		hrefHolder:{index:'a.product_image', otherpages:'a.product_img_link', indexBlock:'#featured-products_block_center .ajax_block_product', otherBlock:'#product_list div.center_block'}
	},
	imgHolderDiv:"<div id='msImageShadow' onmouseover='ImagesEnlarge.hideDivs();'></div><div id='msBigImageHolder' class='border' style='display:none' onmouseover='ImagesEnlarge.hideDivs();'></div>",
	init: function() {
		J('body').append(this.imgHolderDiv);
		//set div style
		this.alterAttributes();
	},
	getCurrentSourceID: function() {
		var currentpage = J('body').attr('id');
		var pageid;
		var srcBlock;
		if(currentpage=='index') {
			pageid = this.settings.hrefHolder.index;
			srcBlock = this.settings.hrefHolder.indexBlock;
		} else {
			pageid = this.settings.hrefHolder.otherpages;
			srcBlock = this.settings.hrefHolder.otherBlock;
		}
		return {aBlock:pageid, sourceBlock:srcBlock};
	},
	getImagePath: function(path) {
		var extract = path.split("/");
		var sPath = "";
		for(var i=0;i<extract.length-1;i++) {
			sPath+=extract[i]+"/";
		}
		return sPath;
	},
	setID: function(id, path) {
		var sID = id;

		var sPath = path.replace('\\','/');
		
		var imgPath = this.getImagePath(sPath);
		var extract = sPath.split("/");
		var imgName = extract[extract.length-1];

		var largeImg = imgPath+imgName.substr(0,2)+"1200x900.jpg";


		ImagesEnlarge.settings.imageArray[sID] = {small:largeImg, home:largeImg, large:largeImg, thickbox:largeImg};
		//console.debug("ImagesEnlarge.settings.imageArray[sID] " + ImagesEnlarge.settings.imageArray[sID].large);
	},
	getID:function(id) {
		return ImagesEnlarge.settings.imageArray[id];
	},
	alterAttributes: function() {
		//var blocks = J('');
		var sourceBlock = this.getCurrentSourceID();
		var blocks = J(sourceBlock.sourceBlock);
		var total = blocks.length;
		if(total>0) {
			if(ImagesEnlarge.settings.useAnimation==1) {
				J("#msBigImageHolder").css({position:'absolute', float:'right', top:'30%', left:'50%'});
				J("#msImageShadow").css({position:'absolute', float:'right', top:'30%', left:'50%'});
			}	
			var sourceA = sourceBlock.aBlock;
			
			for(var iCount=0;iCount<total;iCount++) {
			
				var currentBlock = blocks[iCount];
				var id = "product_list_"+iCount;
				currentBlock.id = id;
				
				var currentA = J("#"+id+ " "+sourceA)[0];
				if(currentA){
					var aID = "zoomer_"+iCount;
					currentA.id = aID;
					
					var imgTag = currentA.firstChild;
					
					var imgName = J(imgTag).attr("src");
					
					this.setID(aID, imgName);
				}
				//set clip
				//var sClipDiv = "<div id='clip_'"+iCount+" class='msClip'></div>";
				//J(aID).before(sClipDiv);
				
				//set method
				J("#"+aID).bind('mouseenter', this.showSmallImage);
				if(ImagesEnlarge.settings.useExtendedZoom==1) {
					J("#"+aID).bind('mousemove', this.showClipedImage);
				}
				
				J("#"+aID).bind('mouseleave',function() {
					J("#product-page-zoom-indicator").css({'display':'none'});
					ImagesEnlarge.hideDivs();
				});

			}
			
		}
	},
	hideDivs: function() {
		J("#msImageShadow").hide("fast");												  
		J("#msBigImageHolder").hide("fast");	
	},
	hideOtherPluginDivs: function() {
		//this section hides other divs if you've already used suleman's modules.
		//Add to cart extended : http://www.marghoobsuleman.com/node/75
		if(J('#moreTags').length>0)
			J('#moreTags').hide("fast");
	},
	showClipedImage: function(e) {
		var targetHolder  = "#product_image_big";
		var src = "#msBigImageHolder";
		var imgHolder = "#imgHolder";
		var zoomIndicator = "#product-page-zoom-indicator";
		var tagerHolderPosition = J(targetHolder).position();
		var posCliper = {left:tagerHolderPosition.left - e.pageX, top:tagerHolderPosition.top - e.pageY}

	  	var ratio = 205; // initial set to 232.5581395
	  	var xPos = ((posCliper.left) * ratio) / 100;
	  	var yPos = ((posCliper.top) * ratio) / 100;
	  	
	  	var indicatorWidth = J(zoomIndicator).width();
	  	var indicatorHeight = J(zoomIndicator).height();
	  	var imageWidth = J(targetHolder).width();
	  	var imageHeight = J(targetHolder).height();
	  	var zoomFactor = 3;
	  	
	  	// On fait en sorte que l'indicateur de zoom ne déborde pas des bords verticaux de l'image
	  	if (e.pageX > tagerHolderPosition.left+indicatorWidth/2 && e.pageX < tagerHolderPosition.left+imageWidth-indicatorWidth/2){
	  		J(zoomIndicator).css({left: e.pageX-indicatorWidth/2+'px'});
	  		J(imgHolder).css({left: '-'+(e.pageX-tagerHolderPosition.left-indicatorWidth/2)*zoomFactor+'px'});
	  	}
	  	else if (e.pageX > tagerHolderPosition.left && e.pageX <= tagerHolderPosition.left+indicatorWidth/2){
	  		J(zoomIndicator).css({left: tagerHolderPosition.left+'px'});
	  		J(imgHolder).css({left: '0px'});
	  	}
	  	else if (e.pageX >= tagerHolderPosition.left+imageWidth-indicatorWidth/2 && e.pageX < tagerHolderPosition.left+imageWidth){
	  		J(zoomIndicator).css({left: tagerHolderPosition.left+imageWidth-indicatorWidth+'px'});
	  		J(imgHolder).css({left: '-'+(imageWidth-indicatorWidth)*zoomFactor+'px'});
	  	}
	  	
	  	// On fait en sorte que l'indicateur de zoom ne déborde pas des bords horizontaux de l'image
	  	if (e.pageY > tagerHolderPosition.top+indicatorHeight/2 && e.pageY < tagerHolderPosition.top+imageHeight-indicatorHeight/2){
	  		J(zoomIndicator).css({top: e.pageY-indicatorHeight/2+'px'});
	  		J(imgHolder).css({top:'-'+(e.pageY-tagerHolderPosition.top-indicatorHeight/2)*zoomFactor+'px'});	
	  	}
	  	else if (e.pageY > tagerHolderPosition.top && e.pageY <= tagerHolderPosition.top+indicatorHeight/2){
	  		J(zoomIndicator).css({top: tagerHolderPosition.top+'px'});
	  		J(imgHolder).css({top:'0px'});
	  	}
	  	else if (e.pageY >= tagerHolderPosition.top+imageHeight-indicatorHeight/2 && e.pageY < tagerHolderPosition.top+imageHeight){
	  		J(zoomIndicator).css({top: tagerHolderPosition.top+imageHeight-indicatorHeight+'px'});
	  		J(imgHolder).css({top:'-'+(imageHeight-indicatorHeight)*zoomFactor+'px'});
	  	}
	  	
	  	// On désactive le système de zoom dès que le pointeur de la souris sort de l'image
	  	if (e.pageX < tagerHolderPosition.left || e.pageX > tagerHolderPosition.left+imageWidth 
	  		|| e.pageY < tagerHolderPosition.top || e.pageY > tagerHolderPosition.top+imageHeight){
	  		J(zoomIndicator).css({'display':'none'});
			ImagesEnlarge.hideDivs();
	  	} 
	},
	getImageName: function(id) {
		var oImgNames = ImagesEnlarge.getID(id);
		var imgName = oImgNames.large
		if(ImagesEnlarge.settings.useExtendedZoom==1) {
			imgName = oImgNames.thickbox;
		}
		return imgName;
	},
	showSmallImage: function() {
		J("#product-page-zoom-indicator").css({'display':'block'});

		//hides other divs if you've already used suleman's modules.
		ImagesEnlarge.hideOtherPluginDivs();
		//start code
		var imgHTML = "<div class='border' style='position:absolute; background-color:#ffffff' id='imgLoader'><img src='"+ImagesEnlarge.settings.loaderImage+"' border='0' /></div>";
		J("#msBigImageHolder").html(imgHTML);
		
		var getImage = ImagesEnlarge.getImageName(this.id);
		imgHTML += "<div id='imgHolder'><img id='bigImg' src='"+getImage+"' border='0' class='border' hspace='10' vspace='10' /></div>";
		J("#msBigImageHolder").html(imgHTML);
		ImagesEnlarge.checkImageLoad();
		var xy = J(this).offset();
		var height = 0;
		var width = J(this).width();
		J("#msBigImageHolder").css({'position':'absolute'})
		if(ImagesEnlarge.settings.useAnimation==1) {
			if(J('body').attr('id')=='index'){
				J("#msBigImageHolder").css( {'left':(xy.left+width+width)+'px', 'top':(xy.top-height)+'px'})
				J("#msImageShadow").css( {'left':(xy.left+width+width)+'px', 'top':(xy.top-height)+'px'})
			}
			J("#msBigImageHolder").show("fast", function(e) {
												J("#msBigImageHolder").animate( {'left':(xy.left+width)+'px', 'top':(xy.top+height)+'px'}, { queue:false, duration:500}, 'slow');
												/*
												var topPos = xy.top+height;
												var leftPos = xy.left+width;
												 if((J("#msBigImageHolder").width()+leftPos)>J(window).width()) {leftPos = leftPos - width - J("#msBigImageHolder").width() - 20;}
												   J("#msBigImageHolder").animate( {'left':(leftPos)+'px', 'top':(topPos)+'px'}, { queue:false, duration:500 } )
													*/   
													   });
				J("#msImageShadow").show("fast", function(e) {
													J("#msImageShadow").css({'opacity':ImagesEnlarge.settings.shadowTransparency});
													J("#msImageShadow").animate( {'left':(xy.left+width+ImagesEnlarge.settings.shadowDistance)+'px', 'top':(xy.top+height+ImagesEnlarge.settings.shadowDistance)+'px'}, { queue:false, duration:500} )																			  
														  });

		} else {
			J("#msBigImageHolder").css({'left':(xy.left+width)+'px', 'top':15+(xy.top+height)+'px'});
			J("#msBigImageHolder").show("fast");
			
			J("#msImageShadow").css({'opacity':ImagesEnlarge.settings.shadowTransparency,'left':(xy.left+width+ImagesEnlarge.settings.shadowDistance)+'px', 'top':15+(xy.top+height+ImagesEnlarge.settings.shadowDistance)+'px'});
			J("#msImageShadow").show("fast");
		}
	},
	getImageStatus: function() {
		var img = J("#msBigImageHolder #bigImg")[0];
		if(img.complete==true) {
			J('#imgLoader').hide();
			clearInterval(ImagesEnlarge.settings.interval);
		} else {
			//console.debug("2 " + img.complete)
		}
	},
	checkImageLoad: function() {
		ImagesEnlarge.settings.interval = setInterval(ImagesEnlarge.getImageStatus, 500);
		
	},
	setAnimationStatus: function(status) {
		ImagesEnlarge.settings.useAnimation = parseInt(status);
	},
	setExtendZoomStatus: function(extendedZoom) {
		ImagesEnlarge.settings.useExtendedZoom = parseInt(extendedZoom);
	}
}