jQuery.fn.fancyZoom = function(options){
  
  var options   = options || {};
  var directory = options && options.directory ? options.directory : 'images';
  var zooming   = false;
  
//For browser pop-up margin settings
  //Mozilla
  var leftMargin = 60;
  var topMargin = 435;  
  
  if(navigator.userAgent.indexOf("MSIE")!=-1)
  {
	  if(navigator.userAgent.indexOf("MSIE 6.0")!=-1)
	  {
		  	topMargin=topMargin+(55);	   
	  }
	 
	  else
	  {
	  		topMargin=topMargin+(47);	   
	  }
  }
  else if(navigator.userAgent.indexOf("Opera")!=-1)
  {	  
	  topMargin=topMargin+(-6);	  
  }
  else if(navigator.userAgent.indexOf("Safari")!=-1)
  {
	  topMargin=topMargin+(-7);	    
  }
  else if(navigator.userAgent.indexOf("Chrome")!=-1)
  {
	  topMargin=topMargin+(0);	    
  }
  else if(navigator.userAgent.indexOf("Firefox")!=-1)
  {
	  topMargin=topMargin+(0);	    
  }
  
  if ($('#zoom').length == 0) {
    var ext = $.browser.msie ? 'gif' : 'png';
    var html = '<div id="zoom" style="display:none;opacity:0.90;vertical-align:text-top;"> '
                 +' <table id="zoom_table" style="border:none; width:100%; height:100%;" cellpadding="0" cellspacing="0"> '                  
                  +'    <tr> '
                  +'      <td align="right" style="background:#F3F4CD;"><div style="margin-right:10px;margin-top:7px;vertical-align:top" ><a href="#" title="Close" id="zoom_close" > '
                  +'  		<img src="' + directory + '/closebox.' + ext + '" alt="Close" style="border:none; margin:0; padding:0;" /> '
                  +'		</a></div><td/> '
                  +'    </tr> '
                  +'    <tr style="background-color:#F3F4CD"> '
                  +'      <td class="popupmain" style="vertical-align:top;background-color:#F3F4CD"> '
				  +'        <div id="div_content" > '
                  +'            <div id="zoom_content" style="vertical-align:text-top"> '
                  +'            </div> '
				  +'        </div> '
                  +'      </td>'                       
                  +'    </tr>'                  
                  +'</table>'
                +'</div>';
                
    $('body').append(html);    
   
    $(document).keyup(function(event){
        if (event.keyCode == 27 && $('#zoom:visible').length > 0) hide();
    });
    
    $('#zoom_close').click(hide);
  }
  
  var zoom          = $('#zoom');
  var zoom_table    = $('#zoom_table');
  var zoom_close    = $('#zoom_close');
  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 (navigator.appName.indexOf("Microsoft")!=-1) 
	  {
		if(parseInt(document.body.offsetWidth)<=714)
		{
			if(navigator.userAgent.indexOf("MSIE 6.0")!=-1)
			  {
				leftMargin = 40;	   
			  }
			
			  {
				leftMargin = 60;
			  }
		}
		else
		{			
			if(navigator.userAgent.indexOf("MSIE 6.0")!=-1)
			  {
				leftMargin = Math.floor((parseInt(document.body.offsetWidth)-714)/2+(-17));		;	   
			  }
			 
			  else
			  {
				leftMargin = Math.floor((parseInt(document.body.offsetWidth)-714)/2+(9));		
			  }
		}
	  }
	  else
	  {
		  if(parseInt(window.innerWidth)<=714)
		  {
			  	 if(navigator.userAgent.indexOf("Safari")!=-1)
				  {		
					  if(navigator.userAgent.indexOf("Version/3.")!=-1){
						  leftMargin=52;	  
					  }
				  }
				  else
				  {
					leftMargin = 60;
				  }
		  }
		  else
		  {
			leftMargin = Math.floor((parseInt(window.innerWidth)-714)/2+(-1));		
		  }
	  }  
	  
	  if(navigator.userAgent.indexOf("MSIE")!=-1)
	  {		  
		   leftMargin=leftMargin+(0);
	  }
	  else if(navigator.userAgent.indexOf("Opera")!=-1)
	  {	  		  
		  leftMargin=leftMargin+(-2);
	  }
	  else if(navigator.userAgent.indexOf("Safari")!=-1)
	  {		
	  	  if(navigator.userAgent.indexOf("Version/3.")!=-1){
			  leftMargin=leftMargin+(8);	  
		  }
		  else{			  
			  leftMargin=leftMargin+(-2);	  
		  }
	  }
	  else if(navigator.userAgent.indexOf("Chrome")!=-1)
	  {		  
		  leftMargin=leftMargin+(-3);	  
	  }
	  else if(navigator.userAgent.indexOf("Firefox")!=-1)
	  {
		  leftMargin=leftMargin+(0);    
	  }
	  
    if (zooming) return false;
		zooming         = true;
		var content_div = $($(this).attr('href'));		
		if(navigator.appName=="Microsoft Internet Explorer")
		{
			var content_div_href=$(this).attr('href');
			var popupid="";			
			var index = content_div_href.indexOf("#");
			content_div=content_div_href.substring(index,content_div_href.length);				
		}		
		
  		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              = 355;//for pop-up width
		if(navigator.userAgent.indexOf("Safari")!=-1)
		{
			width              = 355;
		}
		else  if(navigator.userAgent.indexOf("MSIE")!=-1)
	  	{
			width              = 356;			
		}
		else if(navigator.userAgent.indexOf("Opera")!=-1)
		  {	  		  
			 width              = 357;
		  }
		var height             = 150;
		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 curTop;
		var curLeft;
		if( navigator.userAgent.indexOf("Chrome")!=-1)
		{
			curTop             = e.clientY+window.document.body.scrollTop;
			curLeft            = e.clientX+window.document.body.scrollLeft;
		}
		else if (navigator.userAgent.indexOf("MSIE")!=-1) 
		{					
									
				curTop             = e.clientY+window.document.documentElement.scrollTop;			
				curLeft            = e.clientX+window.document.documentElement.scrollLeft;
			
		}
		else if(navigator.userAgent.indexOf("Firefox")!=-1)
		{
			curTop             = e.clientY+window.document.documentElement.scrollTop;
			curLeft            = e.clientX+window.document.documentElement.scrollLeft;
		}
		else if(navigator.userAgent.indexOf("Opera")!=-1 || navigator.userAgent.indexOf("Safari")!=-1)
		{
			curTop             = e.clientY+window.document.body.scrollTop;
			curLeft            = e.clientX+window.document.body.scrollLeft;
		}
		zoom_close.attr('curTop', curTop);
		zoom_close.attr('curLeft', curLeft);
		zoom_close.attr('scaleImg', options.scaleImg ? 'true' : 'false');
		
		var tempCurLeft = parseInt(curLeft)-leftMargin;
		var tempCurTop = parseInt(curTop)-topMargin;
		
		curTop=curTop-(tempCurTop%83);
		
		var contentDivHTML = "";
		if(navigator.appName=="Microsoft Internet Explorer")
		{	
			contentDivHTML = $(content_div).html();
		}
		else
		{
			contentDivHTML = content_div.html();
		}
		var rem =Math.floor(tempCurLeft/91);
		if(rem>=5)
		{
			curLeft =curLeft-(tempCurLeft%91)-((rem-4)*91);
		}
		else
		{
			curLeft =curLeft-(tempCurLeft%91);
		}
		var absCurTop = parseInt(curTop)-topMargin;
		var topDev = Math.floor(absCurTop/83);		
		if(contentDivHTML.indexOf("popupimg")!=-1 )
		{
				height=300;
			if(navigator.userAgent.indexOf("Safari")!=-1)
			{
				width              = 358;
			}
			
		}
		if(topDev>2 && (intervalMaxCount-4)<topDev)
		{			
			if(contentDivHTML.indexOf("popupimg")!=-1 )
			{
				curTop=((intervalMaxCount-5)*83)+topMargin;				
			}
			else
			{
				curTop=((intervalMaxCount-4)*83)+topMargin;			
			}			
		}		
		
		$('#zoom').hide().css({
				position	: 'absolute',
				top				: curTop + 'px',
				left			: curLeft + 'px',
				width     : '1px'
			});
    
		fixBackgroundsForIE();
		zoom_close.hide();
		
		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').animate({
		  top     : curTop + 'px',
		  left    : curLeft + 'px',
		  opacity : "show",
		  width   : width
		}, 500, null, function() {
		  if (options.scaleImg != true) {		
				zoom_content.html(contentDivHTML);			
			}
				unfixBackgroundsForIE();
				zoom_close.show();
				zooming = false;
		})		
		popupIntervalId=window.setInterval("adjustPopUpHeight()",700);
		return false;
  }
  
  function hide() {
	if(statusInd!=""){		
		document.getElementById(statusInd).style.height ="0px";
		document.getElementById(statusInd).style.visibility="hidden";		
	}
    if (zooming) return false;
		zooming         = true;
	  $('#zoom').unbind('click');
		fixBackgroundsForIE();
		if (zoom_close.attr('scaleImg') != 'true') {
  		zoom_content.html('');
		}
		zoom_close.hide();
		$('#zoom').animate({
      top     : zoom_close.attr('curTop') + 'px',
      left    : zoom_close.attr('curLeft') + 'px',
      opacity : "hide",
      width   : '1px'	  
    }, 500, null, function() {
      if (zoom_close.attr('scaleImg') == 'true') {
    		zoom_content.html('');
  		}
      unfixBackgroundsForIE();
			zooming = false;
    });
	var zoom_table = document.getElementById("zoom_table");
	var totalRows = zoom_table.rows.length;
	for(i=(zoom_table.rows.length-1);i>=2;i--)
	{		
		zoom_table.deleteRow(i);
	}
	vRem=0;
    return false;
  }
  
  function switchBackgroundImagesTo(to) {
    $('#zoom_table td').each(function(i) {
      var bg = $(this).css('background-image').replace(/\.(png|gif|none)\"\)$/, '.' + to + '")');
      $(this).css('background-image', bg);
    });
    var close_img = zoom_close.children('img');
    var new_img = close_img.attr('src').replace(/\.(png|gif|none)$/, '.' + to);
    close_img.attr('src', new_img);
  }
  
  function fixBackgroundsForIE() {
    if ($.browser.msie && parseFloat($.browser.version) >= 6) {
      switchBackgroundImagesTo('gif'); 
    }
	}
  
  function unfixBackgroundsForIE() {
    if ($.browser.msie && $.browser.version >= 6) {
      switchBackgroundImagesTo('png'); 
    }
	}	
}
