/*
 *
 * 
 */

jQuery.fn.myfancyzoom = function(options) {
	
	settings = jQuery.extend({
	     directory: "images/",
	     onDisplay: function(){},
	     onDisplayed: function(){},
	     onClose: function(){},
	     onClosed: function(){},
	     height:'',
	     width:'',
	     x:'',
	     y:'',
	     z:'100'
	  }, options);
	
	var imagesPNG = ['tl.png','tm.png','tr.png','ml.png','mr.png','bl.png','bm.png','br.png'];
	var imagesGIF = ['tl.gif','tm.gif','tr.gif','ml.gif','mr.gif','bl.gif','bm.gif','br.gif'];
	if ($.browser.msie)
		var images = imagesGIF;
	else
		var images = imagesPNG;
	
	return this.each(function(){
		jQuery(jQuery(this).attr('href')).hide();
		jQuery(this).unbind('click');
		jQuery(this).click(function(event){
			event.preventDefault();
			settings.onDisplay(this);
			showLightBox(this);
			
		});
	});
	
	function showLightBox(el)
	{
		var rid=Math.floor(Math.random()*10000)+'_';
		var content=jQuery(jQuery(el).attr('href')).show().clone(true);
		jQuery(jQuery(el).attr('href')).after('<div id="'+rid+'place_holder"/>').remove();
		
		var zoomTable = document.createElement('div');
		jQuery(zoomTable).attr('id', rid+'zoom_holder').append('<table/>');
		jQuery(zoomTable).appendTo('body').css({'position':'absolute','opacity':'0'}).find('table:eq(0)').attr('id', rid+'zoom_table').css({'border-collapse':'collapse','visibility':'hidden'})
					.append('<tr/>').find('tr:eq(0)')
						.append('<td/>').find('td:eq(0)').css({'background-attachment':'scroll','background-color':'transparent','background-image':'url('+settings.directory+images[0]+')','background-position':'0 0','background-repeat':'no-repeat','height':'20px','overflow-x':'hidden','overflow-y':'hidden','width':'20px','border-collapse':'collapse'}).parent()
						.append('<td/>').find('td:eq(1)').css({'background-attachment':'scroll','background-color':'transparent','background-image':'url('+settings.directory+images[1]+')','background-position':'0 0','background-repeat':'repeat-x','height':'20px','overflow-x':'hidden','overflow-y':'hidden','border-collapse':'collapse'}).parent()
						.append('<td/>').find('td:eq(2)').css({'background-attachment':'scroll','background-color':'transparent','background-image':'url('+settings.directory+images[2]+')','background-position':'100% 0','background-repeat':'no-repeat','height':'20px','overflow-x':'hidden','overflow-y':'hidden','width':'20px','border-collapse':'collapse'}).parent()
					.parent().append('<tr/>').find('tr:eq(1)')
						.append('<td/>').find('td:eq(0)').css({'background-attachment':'scroll','background-color':'transparent','background-image':'url('+settings.directory+images[3]+')','background-position':'0 0','background-repeat':'repeat-y','overflow-x':'hidden','overflow-y':'hidden','width':'20px','border-collapse':'collapse'}).parent()
						.append('<td/>').find('td:eq(1)').css({'background-attachment':'scroll','background-color':'transparent','background-image':'none','background-color':'white','background-position':'0 0','background-repeat':'repeat','overflow-x':'hidden','overflow-y':'hidden','border-collapse':'collapse','padding':'10px','vertical-align':'top'}).append('<div/>').find('div:eq(0)').attr('id', rid+'zoom_content').css({'visibility':'hidden'}).append(content).append('&nbsp').parent().parent()
						.append('<td/>').find('td:eq(2)').css({'background-attachment':'scroll','background-color':'transparent','background-image':'url('+settings.directory+images[4]+')','background-position':'100% 0','background-repeat':'repeat-y','overflow-x':'hidden','overflow-y':'hidden','width':'20px','border-collapse':'collapse'}).parent()
					.parent().append('<tr/>').find('tr:eq(2)')
						.append('<td/>').find('td:eq(0)').css({'background-attachment':'scroll','background-color':'transparent','background-image':'url('+settings.directory+images[5]+')','background-position':'0 100%','background-repeat':'no-repeat','height':'20px','overflow-x':'hidden','overflow-y':'hidden','width':'20px','border-collapse':'collapse'}).parent()
						.append('<td/>').find('td:eq(1)').css({'background-attachment':'scroll','background-color':'transparent','background-image':'url('+settings.directory+images[6]+')','background-position':'0 100%','background-repeat':'repeat-x','height':'20px','overflow-x':'hidden','overflow-y':'hidden','border-collapse':'collapse'}).parent()
						.append('<td/>').find('td:eq(2)').css({'background-attachment':'scroll','background-color':'transparent','background-image':'url('+settings.directory+images[7]+')','background-position':'100% 100%','background-repeat':'no-repeat','height':'20px','overflow-x':'hidden','overflow-y':'hidden','width':'20px','border-collapse':'collapse'}).parent();
		
		var winWidth	= jQuery(window).width();
		var winHeight	= jQuery(window).height();
		var width		= jQuery(zoomTable).find('table:eq(0)').find('tr:eq(1)').find('td:eq(1)').find('div:eq(0)').width();
		var height		= jQuery(zoomTable).find('table:eq(0)').find('tr:eq(1)').find('td:eq(1)').find('div:eq(0)').height();
		
	
		
		
		var newWidth = winWidth/4*3;
		if (newWidth<width)
			width=newWidth+'px';
		if (settings.width!='')
			width=settings.width;
		jQuery(zoomTable).find('table:eq(0)').find('tr:eq(1)').find('td:eq(1)').find('div:eq(0)').width(width);
		if (settings.height!='')
			jQuery(zoomTable).find('table:eq(0)').find('tr:eq(1)').find('td:eq(1)').find('div:eq(0)').height(settings.height);
		
		
		width=jQuery(zoomTable).find('table:eq(0)').find('tr:eq(1)').find('td:eq(1)').find('div:eq(0)').width();
		height = jQuery(zoomTable).find('table:eq(0)').find('tr:eq(1)').find('td:eq(1)').find('div:eq(0)').height();
		
		
		$('#'+rid+'zoom_content').parent().width(width);
		$('#'+rid+'zoom_content').width(width+100);
		$('#'+rid+'zoom_content').width(width);
		
		var x = ((winWidth-width-40)/2);
		var y = ((winHeight-height-40)/2)+$(window).scrollTop();
		if (y<0)y=0;
		var linkWidth = jQuery(el).width();
		var linkHeight = jQuery(el).height();
		var offset = jQuery(el).offset();
		var linkX = offset.left;
		var linkY = offset.top;
		jQuery(zoomTable).find('table:eq(0)').find('tr:eq(1)').find('td:eq(1)').find('div').hide();
		
		
		jQuery(zoomTable).css({'top':linkY+'px', 'left':linkX+'px'}); 
		jQuery(zoomTable).find('table:eq(0)').css({'visibility':'visible'});
		jQuery(zoomTable).find('table:eq(0)').find('tr:eq(1)').find('td:eq(1)').find('div:eq(0)').css({'width':linkWidth+'px', 'height':linkHeight+'px'});
		
		
		
		jQuery(zoomTable).find('table:eq(0)').find('tr:eq(1)').find('td:eq(1)').find('div:eq(0)').animate({'width':width+'px', 'height':height+'px'}, 500,'swing');
		jQuery(zoomTable).animate({'top':y+'px', 'left':x+'px', 'opacity':'1'}, 500,'swing',function(){
			jQuery(zoomTable).css({'visibility':'visible'});
			jQuery(zoomTable).find('table:eq(0)').find('tr:eq(1)').find('td:eq(1)').find('div').show().css({'visibility':'visible'});
			jQuery(zoomTable).find('table:eq(0)').find('tr:eq(1)').find('td:eq(1)').find('div:eq(0)').show().css({'overflow-y':'auto'});
			
			jQuery(zoomTable).append('<a/>').find('a:eq(0)').attr('href','#').addClass('close_link').click(function(event){closeZoom(event,this,el)}).attr('id', rid+'close_link').css({'position':'absolute','top':'0px', 'left':'0px'}).append('<img/>').find('img:eq(0)').attr('src',settings.directory+'closebox.png').css({'margin-left':'0px', 'margin-right':'0px','border-width':'0px'});
			settings.onDisplayed();
		});
	}
	
	function closeZoom(event,el,linkEl)
	{
		var rid = parseInt(jQuery(el).attr('id'));
		event.preventDefault();
		var content=jQuery(el).parent().find('table:eq(0)').find('tr:eq(1)').find('td:eq(1)').find('div:eq(0)').contents().css({'visibility':'visible','display':'none'});
		$('#'+rid+'_place_holder').after(content).remove();
		
		jQuery(el).parent().find('table:eq(0)').find('tr:eq(1)').find('td:eq(1)').find('div').show().css({'visibility':'hidden'});
		
		var offset = jQuery(linkEl).offset();
		var linkX = offset.left;
		var linkY = offset.top;
		
		jQuery(el).parent().animate({'opacity':'0px', 'top':linkY+'px', 'left':linkX+'px'}, 500,'swing',function(){jQuery(this).remove()});
		jQuery(el).parent().find('table:eq(0)').find('tr:eq(1)').find('td:eq(1)').find('div:eq(0)').animate({'width':'0px', 'height':'0px'}, 500,'swing');
		
	}
};
