var zoomDragRatio = 0; //0-9
var zoomImg = false;
var zoomConfig = {};
function initImageZoom()
{
	if($('#zoomBtn').size() > 0)
	{
		$('#zoomBtn').show().click(function(){onZoomClick($(this)); return false;});
	}
}

function onZoomClick(atag)
{
	//add zoom tool
	window.scroll(0, 0);
	$('body > .wrap').css('visibility', 'hidden');
	$('body').css('overflow', 'hidden');
	$('body').append($('body #zoomtool'));
	$('#zoomtool').show().toggleClass('preloading', true);
	$('#zoombox').hide();
	$('#zclose').click(function(){closeZoom(); return false;});
	
	if(atag && atag.attr('href') != "")
	{
		//if zoom image already on stage and not same source
		if(zoomImg && zoomImg.attr('src') != atag.attr('href'))
		{
			$("#zoomtool #zoomholder img").remove();
			zoomImg = false;
		}
		
		//if zoom image laoded
		if(!zoomImg)
		{
			//else load
			$("#zoomtool #zoomscaled img").remove();
			$("#zoomtool #zoomholder img").remove();
			var timg = new Image();
			var timg = $(timg);
			timg.load(function(){onZoomImageLoaded($(this));});
			timg.attr('src', atag.attr('href'));
		}
		else
		{
			//else already loaded
			onZoomImageLoaded(zoomImg);
		}
	}
}

function onZoomImageLoaded(tmpimg)
{
	if(tmpimg != undefined)
	{
		zoomImg = tmpimg;
	}
	
	var sh 	= $("#focus_img img").height();
	var sw 	= $("#focus_img img").width();
	//add scalled image
	if($("#zoomtool #zoomscaled img").size() == 0)
	{
		$("#zoomtool #zoomscaled").html($('#focus_img').html());
	}
	
	//add full image
	if($("#zoomtool #zoomholder img").size() == 0)
	{
		$("#zoomtool #zoomholder").append(zoomImg);
	}

	if(sh > 0 && sw > 0)
	{
		$('#zoomtool').toggleClass('preloading', false);
		$('#zoombox').show();

		//process dimensions
		zoomDragRatio = zoomImg.width()/sw;
		var zdw = sw/zoomDragRatio;
		var zdh = sh/zoomDragRatio;
		zoomConfig = {maxx:sw, maxy:sh, minx:0, miny:0, zdh:zdh, zdw: zdw};
		
		//add full image to zoom holder
		$("#zoomtool #zoomholder").height(sh);
		
		//add zoom drag, and add drag funct to drag
		if($("#zoomtool #zoomscaled #zoomDrag").size() == 0)
		{
			$("#zoomtool #zoomscaled").append('<div id="zoomDrag" style="width:'+zdw+'px; height:'+zdh+'px; top: -1000px;"></div>');
		}
		//.draggable({containment: "#zoomscaled", scroll: false,  drag: function(event, ui){onZoomDragged(event, ui)}});
		$("#zoomtool #zoomscaled #zoomDrag").css('top', -1000);
		$("#zoomtool #zoomscaled").mousemove(function(e){onZoomMouseMove(e);});
		$("#zoomtool #zoomscaled").mouseout(function(){$("#zoomtool #zoomscaled #zoomDrag").css('top', -1000);});
		
		//center box
		$('#zoombox').height(sh+40).css('margin-top', -(sh/2));
	}
}

function onZoomMouseMove(e)
{
	var p = $("#zoomtool #zoomscaled").offset();
	var x = e.pageX-p.left;
	var y = e.pageY-p.top;
	positionZoom(x, y);
}

function positionZoom(x, y)
{
	x-= $("#zoomtool #zoomscaled #zoomDrag").width()/2;
	y-= $("#zoomtool #zoomscaled #zoomDrag").height()/2;
	
	if(x < zoomConfig.minx-(zoomConfig.zdw/2)){x = zoomConfig.minx-(zoomConfig.zdw/2);}else if(x > zoomConfig.maxx-(zoomConfig.zdw/2)){x=zoomConfig.maxx-(zoomConfig.zdw/2);}
	if(y < zoomConfig.miny-(zoomConfig.zdh/2)){y = zoomConfig.miny-(zoomConfig.zdh/2);}else if(y > zoomConfig.maxy-(zoomConfig.zdh/2)){y=zoomConfig.maxy-(zoomConfig.zdh/2);}
		
	$('#zoomDrag').css({left: x, top: y});
	
	if(x < 0){x = 0;}else if(x > zoomConfig.maxx-zoomConfig.zdw){x=zoomConfig.maxx-zoomConfig.zdw;}
	if(y < 0){y = 0;}else if(y > zoomConfig.maxy-zoomConfig.zdh){y=zoomConfig.maxy-zoomConfig.zdh;}
	
	x = -x*zoomDragRatio;
	y = -y*zoomDragRatio;
	$("#zoomtool #zoomholder img").css({left:x, top:y});
}

function onZoomDragged(event, ui)
{
	var drag = $("#zoomtool #zoomscaled #zoomDrag").position();
	var l = drag.left*zoomDragRatio;
	var t = drag.top*zoomDragRatio;
	$("#zoomtool #zoomholder img").css({left:-l, top:-t});
}

function closeZoom()
{
	$('#zclose').unbind('click');
	$("#zoomtool #zoomscaled").unbind('mousemove').unbind('mouseout');
	$('#zoomtool').hide();
	$('body').css('overflow', '');
	$('body > .wrap').css('visibility', '');
}
