/*------------------------------------------------------------------
	jquery.jZoomViewer.js 2009/10/01 Daniel Schneider, info@hd7b.de
	this file is part of the youexpress-cms
	copyright (c) 2009 HD7B-MEDIEN www.hd7b.de
  ----------------------------------------------------------------*/

jQuery.fn.jZoomViewer = function(options) {
  var settings = jQuery.extend(
    {scaleMulti: 2.66666, appendElem:"#page", width:350, height:300},
    options
  );
  jZoomViewerObj=$(this); 
  
  var magWidth=settings.width*settings.scaleMulti;
  var magHeight=settings.height*settings.scaleMulti;
  var lens_width=Math.round(settings.width/settings.scaleMulti);
  var lens_height=Math.round(settings.height/settings.scaleMulti);
  var viewerStatus=0;  
  
  jZoomViewerObj
  .mouseleave(function(e){  
    removeZoomView();
  })
  .mousemove(function(e){
    if(viewerStatus==0){
      createViewer();
    }
    if(viewerStatus==1){
      var x_pos=e.pageX-jZoomViewerObj.offset().left;
      var y_pos=e.pageY-jZoomViewerObj.offset().top;
      if(x_pos >= settings.width || y_pos >= settings.height){
        removeZoomView();
        return;
      }
      var mag_x_pos=-x_pos*settings.scaleMulti+x_pos;
      var mag_y_pos=-y_pos*settings.scaleMulti+y_pos;
      $("#magnifierArea_dropZoneTable").css(
        {"margin-left": mag_x_pos+"px", "margin-top": mag_y_pos+"px"}
      );    
      //magnifierLens
      var x_pos_lens=x_pos-lens_width/2;
      var y_pos_lens=y_pos-lens_height/2;
      $("#magnifierLens").css(
        {"top": y_pos_lens+"px", "left": x_pos_lens+"px"}    
      );
    }
  });
  
  function removeZoomView(){
    $("#magnifierArea").remove();
    $("#magnifierLens").remove();  
    viewerStatus=0;
  }
  
  function createViewer(){
    //console.info('create');
    var imgSrc=jZoomViewerObj.find("a").attr("href");
    $(settings.appendElem).append('<div id="magnifierArea"><table cellpadding="0" cellspacing="0" id="magnifierArea_dropZoneTable"><tr><td id="magnifierArea_dropZone"><img src="'+imgSrc+'" alt="" /></td></tr></table></div>');
    jZoomViewerObj.append('<div id="magnifierLens"></div>');
    $("#magnifierArea_dropZoneTable").css(
      {"height": magHeight+"px", "width": magWidth+"px"}
    );
    //magnifierLens
    $("#magnifierLens").css(
      {"opacity": 0.5, "height": lens_height+"px", "width": lens_width+"px"}
    );
    //hide lens on ie6
    if(jQuery.browser.msie && jQuery.browser.version=='6.0'){
      $("#magnifierLens").css({'display':'none'});
    }
    viewerStatus=1;
  }
  
};
