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


  if (jQuery('#zoom').length == 0) {
    var ext = jQuery.browser.msie ? 'gif' : 'png';
    var html = '<div id="zoom" style="display:none;"> \
                  <table id="zoom_table" style="border-collapse:collapse; width:100%; height:100%;"> \
                    <tbody> \
                      <tr> \
                        <td class="tl" style="background:url(' + directory + '/tl.' + ext + ') 0 0 no-repeat; width:20px; height:20px; overflow:hidden;" /> \
                        <td class="tm" style="background:url(' + directory + '/tm.' + ext + ') 0 0 repeat-x; height:20px; overflow:hidden;" /> \
                        <td class="tr" style="background:url(' + directory + '/tr.' + ext + ') 100% 0 no-repeat; width:20px; height:20px; overflow:hidden;" /> \
                      </tr> \
                      <tr> \
                        <td class="ml" style="background:url(' + directory + '/ml.' + ext + ') 0 0 repeat-y; width:20px; overflow:hidden;" /> \
                        <td class="mm" style="background:#fff; vertical-align:top; padding:10px;"> \
                          <div id="zoom_content"> \
                          </div> \
                        </td> \
                        <td class="mr" style="background:url(' + directory + '/mr.' + ext + ') 100% 0 repeat-y;  width:20px; overflow:hidden;" /> \
                      </tr> \
                      <tr> \
                        <td class="bl" style="background:url(' + directory + '/bl.' + ext + ') 0 100% no-repeat; width:20px; height:20px; overflow:hidden;" /> \
                        <td class="bm" style="background:url(' + directory + '/bm.' + ext + ') 0 100% repeat-x; height:20px; overflow:hidden;" /> \
                        <td class="br" style="background:url(' + directory + '/br.' + ext + ') 100% 100% no-repeat; width:20px; height:20px; overflow:hidden;" /> \
                      </tr> \
                    </tbody> \
                  </table> \
                  <a href="#" title="Close" id="zoom_close" style="position:absolute; top:0; right:0;"> \
                    <img src="' + directory + '/closebox.' + ext + '" alt="Close" style="border:none; margin:0; padding:0;" /> \
                  </a> \
                </div> \
               <div id="zoom_mask"></div>';
                
    jQuery('body').append(html);    
    

    // modal box dialog
    //jQuery('html').click(function(e){if(jQuery(e.target).parents('#zoom:visible').length == 0) hide();});
    
    
    jQuery(document).keyup(function(event){
        if (event.keyCode == 27 && jQuery('#zoom:visible').length > 0) hide();
    });
    
    jQuery('#zoom_close').click(hide);
    
    jQuery('#zoom_mask').css('opacity', 0.4);
    
  }
  
  var zoom          = jQuery('#zoom');
  var zoom_table    = jQuery('#zoom_table');
  var zoom_close    = jQuery('#zoom_close');
  var zoom_content  = jQuery('#zoom_content');
  var middle_row    = jQuery('td.ml,td.mm,td.mr'); 
  
  this.each(function(i) {
      
      

    if (options.ajaxInHref==undefined){
        jQuery(jQuery(this).attr('href')).hide();
     }else{
         jQuery(this).attr('hrefajax',jQuery(this).attr('href'));
         jQuery(this).attr('href',options.ajaxInHref);
     }
    

    if(options.AjaxUrl!=undefined || options.evalAjaxUrl!=undefined || options.ajaxInHref!=undefined){
    	jQuery(this).click(ajaxRun);
    }else{
        
    	jQuery(this).click(show);
    }

  });
 

  return this;
  
  function ajaxRun(e){	  
	//console.debug(eval(options.disable));
	if (!eval(options.disable)){
		
	  if(options.evalAjaxUrl!=undefined){
		  options.AjaxUrl=eval(options.evalAjaxUrl);
	  }          
         
         if(jQuery(e.currentTarget).attr('hrefajax')!=undefined){             
		  options.AjaxUrl = jQuery(e.currentTarget).attr('hrefajax'); 
	  }

          var anchor = jQuery(e.currentTarget).attr('href'); 
                if (anchor.charAt(0)!='#'){
                        var anchor_array = anchor.split('#');	//dedicace IE6 !
                        anchor = '#' + anchor_array[1];
                }
        
	 var content_div = jQuery(anchor);

	// submitFonction(null,content_div.attr('id'),options.AjaxUrl,show,e);
	 
	 mouseWaitingOn();
	 jQuery.ajax({
		  url: options.AjaxUrl,
		  success: function(data) {
		 	mouseWaitingOff();
		 	content_div.html(data);
		 	jQuery(e.currentTarget).attr('href',anchor);
		 	show(e);
		  }
		});
	
	}
  }
  
  function show(e) {
	  	    
	 if (zooming) return false;
		zooming         = true;
		//var content_div = jQuery(jQuery(this).attr('href'));		//marche poa avac l'ajax!!!
		//var content_div = jQuery(jQuery(e.target).attr('href'));	//marche avec ajax et non ajax mais pas avec anchor image
		
		var anchor = jQuery(e.currentTarget).attr('href');
		 
		  
		if (anchor.charAt(0)!='#'){
			var anchor_array = anchor.split('#');	//dedicace IE6 !
			anchor = '#' + anchor_array[1];
		}
		
		var content_div = jQuery(anchor);	//ok!!
		//console.debug(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()) + 60;
  		if (width>900) width=900;
		var height             = (zoom_height || content_div.height()) + 60;
		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             = e.pageY;
		var curLeft            = e.pageX;
		
		
		zoom_close.attr('curTop', curTop);
		zoom_close.attr('curLeft', curLeft);
		zoom_close.attr('scaleImg', options.scaleImg ? 'true' : 'false');
		
		if (curTop==undefined){
			curTop=0;
			curLeft=0;
		}
    jQuery('#zoom').hide().css({
			position	: 'absolute',
			top				: curTop + 'px',
			left			: curLeft + 'px',
			width     : '1px',
			height    : '1px'
		});
   
    fixBackgroundsForIE();
   
    zoom_close.hide();
   
    
    

    if (options.closeOnClick) {
      jQuery('#zoom').click(hide);
    }
  
    
	if (options.scaleImg) {
	zoom_content.html(content_div.html());
	jQuery('#zoom_content img').css('width', '100%');
	} else {
	  zoom_content.html('');
	}
	

    jQuery('#zoom').animate({
      top     : newTop + 'px',
      left    : newLeft + 'px',
      opacity : "show",
      width   : width,
      height  : height
    }, 500, null, function() {
      if (options.scaleImg != true) {
    		zoom_content.html(content_div.html());
	    	
    		//jQuery("#"+zoom_content.attr('id')+" form, #"+zoom_content.attr('id')+" div.AficheErreur, #"+zoom_content.attr('id')+" div.responseFormAjax, #"+zoom_content.attr('id')+" input, #"+zoom_content.attr('id')+" a").each(function(i){
    		jQuery("#"+zoom_content.attr('id')+" form, #"+zoom_content.attr('id')+" div,#"+zoom_content.attr('id')+" input, #"+zoom_content.attr('id')+" a, #"+zoom_content.attr('id')+" img").each(function(i){
	    		idNode=this.id;
	    		addonTag ='_zoomCopy';
	    		if ( addonTag == idNode.substr(idNode.length-addonTag.length,addonTag.length) ){
	    			//this.id = idNode.substr(0,idNode.length-addonTag.length);
	    		}else{
	    			this.id += addonTag;
	    		}
	    		
	    	});
    		
  		}
			unfixBackgroundsForIE();
			zoom_close.show();
			zooming = false;
    });
    
    
  
    //if (options.modal == true) {    	
	    var maskHeight = jQuery(document).height();
	    var maskWidth = jQuery(window).width();
	    jQuery('#zoom_mask').css({'width':maskWidth,'height':maskHeight});
	    jQuery('#zoom_mask').fadeIn(1000);   
	    jQuery('#zoom_mask').fadeTo("slow",0.4); 
    //}
    
    if (options.jsCodeAfter != undefined) {
    	setTimeout('eval('+'\'' +options.jsCodeAfter + '\')',1000);
    }
 
   
    
    
    return false;
  }
  
  
  function hide() {
    if (zooming) return false;
		zooming         = true;
	  jQuery('#zoom').unbind('click');
		fixBackgroundsForIE();
		if (zoom_close.attr('scaleImg') != 'true') {
  		zoom_content.html('');
		}
		zoom_close.hide();
		
		curTop = zoom_close.attr('curTop');
		curLeft = zoom_close.attr('curLeft');
		if (curTop==undefined){
			curTop=0;
			curLeft=0;
		}
		
		jQuery('#zoom').animate({
      top     :  curTop + 'px',
      left    :  curLeft + 'px',
      opacity : "hide",
      width   : '1px',
      height  : '1px'
    }, 500, null, function() {
	    if (zoom_close.attr('scaleImg') == 'true') {
	    	zoom_content.html('');
	  	}
	    
	    if (zoom_close.attr('scaleImg') == 'false') {
			/*jQuery("#"+zoom_content.attr('id')+" form, #"+zoom_content.attr('id')+" div.AficheErreur, #"+zoom_content.attr('id')+" div.responseFormAjax").each(function(i){
				idNode=this.id;
				addonTag ='_zoomCopy';
				if ( addonTag == idNode.substr(idNode.length-addonTag.length,addonTag.length) ){
					this.id = idNode.substr(0,idNode.length-addonTag.length);
				}	    		
			});*/
	    }
      

	    
		unfixBackgroundsForIE();
		zooming = false;
    });
		
	jQuery('#zoom_mask, .window').hide();
		 
    return false;
  }
  
  function switchBackgroundImagesTo(to) {
    jQuery('#zoom_table td').each(function(i) {
      var bg = jQuery(this).css('background-image').replace(/\.(png|gif|none)\"\)$/, '.' + to + '")');
      jQuery(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 (jQuery.browser.msie && parseFloat(jQuery.browser.version) >= 7) {
      switchBackgroundImagesTo('gif'); 
    }
	}
  
  function unfixBackgroundsForIE() {
    if (jQuery.browser.msie && jQuery.browser.version >= 7) {
      switchBackgroundImagesTo('png'); 
    }
	}
 
  
}
