/**
 * @author DIO5 aka Dieter Orens
 * @version 0.1
 *
 * A simple plugin to show a magnifier effect on images, falls back as link to a larger image.
 *
 */
(function($){
    $.fn.magnify = function(options){
        var settings = {
            lensWidth: 160,
            lensHeight: 160,
            link: true
        }
        
        var opts = $.extend(settings, options);
		
        return this.each(function(){
           
		   var $a = $(this).click(function(){
                return false;
            });
            var $img = $("img", this);
         		
			//var $fuck = $(new Image());
			//$fuck.attr('src', $img.attr('src'));
			
          	//$fuck.load(function(){
				
				var $largeImage = $(new Image());
				var $lens = $("<div id='dio-lens' style='display:hidden; overflow:hidden; position:absolute;'></div>");
				var $sensor = $("<div id='dio-sensor' style='position:absolute;'></div>");
				var $loader = $("<div id='dio-loader'>loading</div>").css({
					width: settings.lensWidth,
					height: settings.lensHeight
				});
				
				$largeImage.attr('src', $a[0].href);
				
				if (settings.link) {
					$sensor.click(function(){
						window.location = $a[0].href;
					})
				}
				
				$lens.append($loader);
				
				$largeImage.load(function(){
					loadCallback();
				});
				
				if($largeImage[0].complete)
				{
					loadCallback();
				}
				
				function loadCallback()
				{
					$lens.append($largeImage);
					$loader.remove();
			
				}
				
				$('body').append($lens).append($sensor);
				
				$lens.css({
					width: settings.lensWidth,
					height: settings.lensHeight
				});
				
				$sensor.css({
					width: $("#TB_window img").width() + "px",
					height:  $("#TB_window img").height()  + "px",
					top: $("#TB_window img").offset().top + "px",
					left: $("#TB_window img").offset().left + "px",
					backgroundColor: '#fff',
					opacity: '0'
				}).mousemove(function(e){
				
					$lens.css({
						left: parseInt(e.pageX - (settings.lensWidth * .5)) + "px",
						top: parseInt(e.pageY - (settings.lensHeight * .5)) + "px"
					}).show();
					var scale = {};
					scale.x = $largeImage.width() / $img.width();
					scale.y = $largeImage.height() / $img.height();
					
					var left = -scale.x * Math.abs((e.pageX - $img.offset().left)) + settings.lensWidth / 2 + "px";
					var top = -scale.y * Math.abs((e.pageY - $img.offset().top)) + settings.lensHeight / 2 + "px";
					
					$largeImage.css({
						position: 'absolute',
						left: left,
						top: top
					});
				}).mouseout(function(){
					$lens.hide();
				});
			//});
        });
    }
})(jQuery);

