(function($){
	$.fn.fancyZoom = function(options){
		var options	 = options || {};
		var directory = options && options.directory ? options.directory : 'images';
		var zooming	 = false;

		if ($('#zoom').length == 0) {
			var ext = $.browser.msie ? 'gif' : 'png';
			var html = '<div id="zoom" style="display:none;"><div id="zoom_content"></div></div>';

			$('body').append(html);
			$('html').click(function(e){if($(e.target).parents('#zoom:visible').length == 0) hide();});
			$(document).keyup(function(event){
					if (event.keyCode == 27 && $('#zoom:visible').length > 0) hide();
			});
		}

		var zoom					= $('#zoom');
		var zoom_content	= $('#zoom_content');
		var middle_row		= $('td.ml,td.mm,td.mr');

		this.each(function(i) {
			$($(this).attr('href')).hide();
			$(this).click(show);
		});

		return this;

		function show(e) {
			if (zooming) return false;
			zooming				 = true;
			var img = $(this).attr('rel');
			var img_div = document.createElement('img')
			img_div.src = img;
			content_div = $(img_div).wrap('<div class="content_div"/>').parent();

			//$('body').append(content_div)
			var zoom_width	= options.width;
			var zoom_height = options.height;
	
			var width			 = window.innerWidth || (window.document.documentElement.clientWidth || window.document.body.clientWidth);
			var height			= window.innerHeight || (window.document.documentElement.clientHeight || window.document.body.clientHeight);
			var x					 = window.pageXOffset || (window.document.documentElement.scrollLeft || window.document.body.scrollLeft);
			var y					 = window.pageYOffset || (window.document.documentElement.scrollTop || window.document.body.scrollTop);
			var window_size = {'width':width, 'height':height, 'x':x, 'y':y}
	
			var width							= (zoom_width || content_div.width());
			var height						 = (zoom_height || content_div.height());
			var d									= window_size;
	
			// ensure that newTop is at least 0 so it doesn't hide close button
			var newTop						 = Math.max((d.height/2) - (height/2) + y, 0);
			var newLeft						= (d.width/2) - (width/2);
			var newTop						 = $('#contents').position().top - 50;
			var newLeft						= window_size.width/2 - 120;
	
			// var curTop						 = e.pageY;
			// 
			// var curTop						 = -100;
			// var curLeft						= e.pageX;

			var curTop						 = $('#contents').position().top;
			var curLeft						= window_size.width/2;
	
			$('#zoom').removeClass('active').hide().css({
				position	: 'absolute',
				top				: curTop + 'px',
				left			: curLeft + 'px',
				width		 : '1px',
				height		: '1px'
			});
	
			if (options.closeOnClick) {
				$('#zoom').click(hide);
			}
	
			if (options.scaleImg) {
				zoom_content.html(content_div.html());
				$('#zoom_content img').css('width', '100%');
			} else {
//					zoom_content.html('');
			}
	
			$('#zoom').addClass('active').animate({
				top		 : newTop + 'px',
				left		: newLeft + 'px',
				opacity : "show",
				width	 : width,
				height	: height
				}, 200, null, function() {
					if (options.scaleImg != true) {
						zoom_content.html(content_div.html());
					}
					//unfixBackgroundsForIE();
					//zoom_close.show();
					zooming = false;
			});
			return false;
		}

		function hide() {
			if (zooming) return false;
			zooming				 = true;
			$('#zoom').unbind('click');
			//fixBackgroundsForIE();
			// if (zoom_close.attr('scaleImg') != 'true') {
			// 				zoom_content.html('');
			// 			}
			//zoom_close.hide();
			var width			 = window.innerWidth || (window.document.documentElement.clientWidth || window.document.body.clientWidth);
			var height			= window.innerHeight || (window.document.documentElement.clientHeight || window.document.body.clientHeight);
			var x					 = window.pageXOffset || (window.document.documentElement.scrollLeft || window.document.body.scrollLeft);
			var y					 = window.pageYOffset || (window.document.documentElement.scrollTop || window.document.body.scrollTop);
			var window_size = {'width':width, 'height':height, 'x':x, 'y':y}
			var curTop						 = $('#contents').position().top;
			var curLeft						= window_size.width/2;

			$('#zoom').removeClass('active').animate({
				top		 : curTop + 'px',
				left		: curLeft + 'px',
				opacity : "hide",
				width	 : '1px',
				height	: '1px'
			}, 200, null, function() {
				// if (zoom_close.attr('scaleImg') == 'true') {
				// 					zoom_content.html('');
				// 				}
				//unfixBackgroundsForIE();
				zooming = false;
			});
			return false;
		}
	}
})(jQuery);
