(function(){
	jQuery.fn.frescaZoom = function(){

		$("div#mainImageCont").unbind('mousemove');
		$("div#mainImageCont").unbind('hover');
		$("div#zoomCont").unbind('mouseover');
		$("div#zoomCont, div#mouseWindow, img#zoomProductImg, img#mainImageCont, iframe#zoomFrame").remove();
		$(this).wrap("<div id='mainImageCont'></div>");
		$("<div id='zoomCont'></div>").css({"position":"absolute", "top":"-5000px"}).appendTo("div#mainImageCont");
		$("<div id='mouseWindow'></div>").appendTo("div#mainImageCont");
		var imageSrc = $(this).attr('src');
		var newSrc = $(this).attr('src').replace("/catalog/","/catalogfull/");
		newSrc = newSrc.replace("b.jpg","f.jpg");
		$("<img id='zoomProductImg'>").attr("src", newSrc).appendTo($("div#zoomCont"));	
		$("<iframe id='zoomFrame' frameBorder='0'></iframe>").css({"display":"block", "width":$("div#zoomCont").width(), "height":$("div#zoomCont").height()}).prependTo($("div#zoomCont"));
		if($("img#zoomProductImg").height()>100){ // image has already loaded
			handleZoom();
		} else {
			$("img#zoomProductImg").load(function(){ // preload image									
				handleZoom();
			});
		}
	};
})(jQuery);

function handleZoom(){
	//var imageRatio = parseFloat($("img#zoomProductImg").height()) / parseFloat($("img#mainProductImage").height());
	//var maximumX = -(parseFloat($("img#zoomProductImg").width()) - parseFloat($("div#zoomCont").width()));
	//var maximumY = -(parseFloat($("img#zoomProductImg").height()) - parseFloat($("div#zoomCont").height()));
	
	//alert(imageRatio+ '-' +maximumX + '-' + maximumY);
	
	var imageRatio = 5.25;
	var maximumX = -700;
	var maximumY = -650;
	$("div#mouseWindow").css({"height":(400/imageRatio + 'px'), "width":(350/imageRatio + 'px')}).hide();			
	$("div#zoomCont").hide().css({"position":"absolute", "top":"0px"});
	
	$("div#mainImageCont").mousemove(function(e){
		var yPosition = this.offsetTop;
		var xPosition = this.offsetLeft;		
		var parentElement = this.offsetParent;
		while (parentElement != null){
			yPosition += parentElement.offsetTop;
			xPosition += parentElement.offsetLeft;
			parentElement = parentElement.offsetParent;
		}		
		var mouseXPosition = (e.pageX - xPosition - 175);
		var mouseYPosition = (e.pageY - yPosition - 200);	
		var zoomXPosition = -(e.pageX - xPosition - 175) * imageRatio;
		var zoomYPosition = -(e.pageY - yPosition - 200) * imageRatio;				
		if(zoomXPosition > 0){
			zoomXPosition = 0;
			mouseXPosition = 0;
		}
		else if(zoomXPosition < maximumX){
			mouseXPosition = -maximumX/imageRatio;				
			zoomXPosition = maximumX;
		}
		if(zoomYPosition > 0){
			mouseYPosition = 0;
			zoomYPosition = 0;
		}
		else if(zoomYPosition < maximumY){
			mouseYPosition = -maximumY/imageRatio;
			zoomYPosition = maximumY;
		}
		$("img#zoomProductImg").css({"top":zoomYPosition, "left":zoomXPosition});
		//$("div#mouseWindow").css({"top":mouseYPosition, "left":mouseXPosition});

	});
		
	var zoomed = false;
	$("div#mainImageCont, div#productImageInstructions").hover(function(){
		$(this).css("color","#333");
	},function(){
		$(this).css("color","#666");
	}).click(function(e){	
		if(zoomed){
			$("div#mouseWindow").hide();
			$("div#zoomCont").hide(); 

			//$("div#zoomCont").shadowDestroy();

			$("div#productImageInstructions").html(zoomInText);
			zoomed = false;
			return false;
		}
		else {
//			$("div#altViewImg").removeClass("withShadow").removeShadow();
//			$("div#altViewCont").css("display","none");
			$("div#zoomCont").show();

			//$("div#zoomCont").shadow();

			$("div#mouseWindow").show();
			$("div#productImageInstructions").html(zoomOutText);
			zoomed = true;
			$("div#mainImageCont").hover(function(){},function(){
				$("div#mouseWindow").hide();
				$("div#zoomCont").hide(); 
				
				//$("div#zoomCont").shadowDestroy();
				
				$("div#productImageInstructions").html(zoomInText);
				zoomed = false;
			});
			return false;
		}
	}).css("cursor","pointer");	
}

$(document).ready(function(){
	window.zoomInText = "Click to zoom";
	window.zoomOutText = "Click to revert";
	$("div#productImageInstructions").html(zoomInText);
});
