/*
  * JQZoom Evolution 1.0.1 - Javascript Image magnifier
  *
  * Copyright (c) Engineer Renzi Marco(www.mind-projects.it)
  *
  * $Date: 12-12-2008
  *
  *	ChangeLog:
  *
  * $License : GPL,so any change to the code you should copy and paste this section,and would be nice to report this to me(renzi.mrc@gmail.com).
  */
var JQEvent = {};
JQEvent.ACTIVATE = 'JQ-ACTIVATE';
JQEvent.DEACTIVATE = 'JQ-DEACTIVATE';

(function($)
{
  $.fn.jqzoom = function(options)
  {
    var settings = {
      zoomType: 'standard', //standard/reverse/innerzoom
      zoomWidth: 200,		//zoomed width default width
      zoomHeight: 200,		//zoomed div default width
      xOffset: 10,		//zoomed div default offset
      yOffset: 0,
      position: "right" ,//zoomed div default position,offset position is to the right of the image
      lens:true, //zooming lens over the image,by default is 1;
      lensReset : false,
      imageOpacity: 0.2,
      title : true,
      alwaysOn: false,
      startOpened: false,
      showEffect: 'show',
      hideEffect: 'hide',
      fadeinSpeed: 'fast',
      fadeoutSpeed: 'slow',
      preloadImages :true,
      showPreload: true,
      preloadText : 'Loading zoom',
      preloadPosition : 'center'   //bycss
    };

  //extending options
  options = options || {};
  $.extend(settings, options);


  return this.each(function()
  {
    var a = $(this);
    var aTitle = a.attr('title'); //variabile per memorizzare il titolo href
    $(a).removeAttr('title');
    $(a).css('outline-style','none');


  var img = $("img", this);
  var imageTitle = img.attr('title');
  img.removeAttr('title');	//variabile per memorizzare il titolo immagine


  var smallimage = new Smallimage( img );
  var smallimagedata = {};
  //imageborder
  var btop = 0;
  var bleft = 0;

  var loader = null;     //variabile per memorizzare oggetto loader
  loader = new Loader();

  var ZoomTitle = (trim(aTitle).length > 0) ? aTitle :
  (trim(imageTitle).length > 0) ? imageTitle : null;  //setting zoomtitle
  var ZoomTitleObj = new zoomTitle();

  var largeimage = new Largeimage( a[0].href );

  var lens = new Lens();
  var lensdata = {};
  //lensborder



  var largeimageloaded = false;
  var scale = {}; //rapporto tra immagine grande e piccola scale.x/scale.y
  var stage = null; // quadrato che mostra l'immagine ingrandita
  var running = false; // running = true quando si verifica l'evento che mostra lo zoom(adesso mouseover).
  var mousepos = {};
  var firstime = 0;
  var preloadshow = false;
  var isMouseDown = false;
  var dragstatus = false
  //loading smallimagedata
  smallimage.loadimage();

  //ritorna false al click dell href
  $(this).click(function(){return false;});

  //se settato alwaysOn attivo lo Zoom e lo mostro.

  //attivo al mouseover
  $(this).hover(function(e)
  {
    mousepos.x = e.pageX;
    mousepos.y	= e.pageY;
    activate();
  },function()
  {
    deactivate();
  });


  //ALWAYS ON
  if(settings.alwaysOn)
  {
    setTimeout(function(){activate();},150);
  }

  // Start opened
  jQuery(document).bind(JQEvent.ACTIVATE, function(){
    activate();
  });

  jQuery(document).bind(JQEvent.DEACTIVATE, function(){
    deactivate();
  });

  if(settings.startOpened){
    var jq_timeout = setTimeout(function(){
      clearTimeout(jq_timeout);
      activate();
    }, 150);
  }

  function activate()
  {

  if ( !running ) {

  //finding border
  smallimage.findborder();

  running = true;

  //rimuovo il titolo al mouseover
  imageTitle = img.attr('title');
  img.removeAttr('title');
  aTitle = a.attr('title');
  $(a).removeAttr('title');

  if (!largeimage || $.browser.safari) {
    largeimage = new Largeimage( a[0].href );
  }

  if(!largeimageloaded || $.browser.safari)
  {
    largeimage.loadimage();
  }else
  {
  //after preload
    if(settings.zoomType != 'innerzoom')
    {
      stage = new Stage();
      stage.activate();
    }
    lens = new Lens;
    lens.activate();
  }

  //hack per MAC
/*	if($.browser.safari)
  {
    if(settings.zoomType != 'innerzoom') //se innerzoom non mostro la finestra dello zoom
    {
      stage = new Stage();
      stage.activate();
    }
    if($('div.jqZoomPup').length <= 0)
    {
    lens = new Lens();
    }
    //if(settings.zoomType == 'innerzoom'){lens = new Lens()};
    lens.activate();
    (settings.alwaysOn) ? lens.center() : lens.setposition(null);
  }
  */
  a[0].blur();
  //alert($('div.jqZoomPup').length);
  return false;
}




  }

  function deactivate()
  {
    if(settings.zoomType == 'reverse' &&  !settings.alwaysOn)
    {
      img.css({'opacity' : 1});
    }

  if(!settings.alwaysOn)
  {
    //resetting parameters
    running = false;
    largeimageloaded = false;
    $(lens.node).unbind('mousemove');
    lens.remove();
    if($('div.jqZoomWindow').length >0)
    {
      stage.remove();
    }
    if($('div.jqZoomTitle').length > 0)
    {
      ZoomTitleObj.remove();
    }
    //resetting title
    img.attr('title',imageTitle);
    a.attr('title',aTitle);
    $().unbind();

  a.unbind('mousemove');
  firstime = 0;
  //remove ieiframe
  if(jQuery('.zoom_ieframe').length > 0)
  {
    jQuery('.zoom_ieframe').remove();
  }
}else
{
  if(settings.lensReset)
  {
    switch(settings.zoomType)
    {
      case 'innerzoom':
      largeimage.setcenter();
      break;
      default:
      lens.center();
      break;
    }
  }
}

  //non so se serve da provare
  if(settings.alwaysOn)
  {
    activate();
  }
};





  //smallimage
  function Smallimage( image )
  {
    this.node = image[0];

  this.loadimage = function() {
    this.node.src = image[0].src;
  };
  this.findborder = function()
  {
    var bordertop = '';
    bordertop = $(img).css('border-top-width');
    btop = '';
    var borderleft = '';
    borderleft = $(img).css('border-left-width');
    bleft = '';
    /*if($.browser.msie)
    {
      var temp = bordertop.split(' ');

  bordertop = temp[1];
  var temp = borderleft.split(' ');
  borderleft = temp[1];
}*/

  if(bordertop)
  {
    for(i=0;i<3;i++)
    {
      var x = [];
      x = bordertop.substr(i,1);

  if(isNaN(x) == false)
  {
    btop = btop +''+ bordertop.substr(i,1);
  }else
  {
    break;
  }
}
}

  if(borderleft)
  {
    for(i=0;i<3;i++)
    {
      if(!isNaN(borderleft.substr(i,1)))
      {
        bleft = bleft + borderleft.substr(i,1)
      }else
      {
        break;
      }
    }
  }
  btop = (btop.length > 0) ? eval(btop) : 0;
  bleft = (bleft.length > 0) ? eval(bleft) : 0;


  }
  this.node.onload = function()
  {
    //setto il cursor e la posizione dell'href


  a.css({'cursor':'crosshair','display':'block'});

  if(a.css('position')!= 'absolute' && a.parent().css('position'))
  {
    a.css({'cursor':'crosshair','position':'relative','display':'block'});
  }
  if(a.parent().css('position') != 'absolute')
  {
    a.parent().css('position','relative');
    //a.css('position','relative');
  }
  else{
  //a.css('position','relative');
  }
  if($.browser.safari || $.browser.opera)
  {
    $(img).css({position:'absolute',top:'0px',left:'0px'});
  }
  /*if(a.css('position')!= 'absolute' && a.parent().css('position'))
  {
    a.css({'cursor':'crosshair','position':'relative','display':'block'});
  }
  if(a.parent().css('position') != 'absolute')
  {
    alert('in');
    a.parent().css('position','relative');
    //a.css('position','relative');
  }
  else{
  //a.css('position','relative');
  }*/



  /*
  if(a.parent().css('position') != 'relative' && a.css('position') != 'absolute')
  {
  a.css({'cursor':'crosshair','position':'relative','display':'block'});
  }*/

  //al docuemnt ready viene caricato l'src quindi viene azionato l'onload e carico tutti i dati
  smallimagedata.w = $( this ).width();
  smallimagedata.h = $( this ).height();


  //non viene fatta assegnazione alla variabile globale
  smallimagedata.h = $( this ).height();
  smallimagedata.pos = $( this ).offset();
  smallimagedata.pos.l = $( this ).offset().left;
  smallimagedata.pos.t = $( this ).offset().top;
  smallimagedata.pos.r = smallimagedata.w + smallimagedata.pos.l;
  smallimagedata.pos.b = smallimagedata.h + smallimagedata.pos.t;

  //per sicurezza setto l'altezza e la width dell'href
  a.height(smallimagedata.h);
  a.width(smallimagedata.w);


  //PRELOAD IMAGES
  if(settings.preloadImages)
  {
    largeimage.loadimage();
  }



  };



  return this;
};



  //Lens
  function Lens()
  {


  //creating element and adding class
  this.node = document.createElement("div");
  $(this.node).addClass('jqZoomPup');

  this.node.onerror = function() {
    $( lens.node ).remove();
    lens = new Lens();
    lens.activate() ;
  };




  //funzione privata per il caricamento dello zoom
  this.loadlens = function()
  {


  switch(settings.zoomType)
  {
    case 'reverse':
      this.image = new Image();
      this.image.src = smallimage.node.src; // fires off async
      this.node.appendChild( this.image );
      $( this.node ).css({'opacity' : 1});
    break;
    case 'innerzoom':

  this.image = new Image();
  this.image.src = largeimage.node.src; // fires off async
  this.node.appendChild( this.image );
  $( this.node ).css({'opacity' : 1});
break
default:
break;
}



  switch(settings.zoomType)
  {
    case 'innerzoom':
      lensdata.w = smallimagedata.w;
      lensdata.h = smallimagedata.h;
    break;
    default:
      lensdata.w = (settings.zoomWidth)/scale.x;
      lensdata.h = (settings.zoomHeight)/scale.y;
    break;
  }

  $( this.node ).css({
    width: lensdata.w + 'px',
    height: lensdata.h + 'px',
    position: 'absolute',
    /*cursor: 'crosshair',*/
    display: 'none',
    //border: '1px solid blue'
    borderWidth: 1+'px'
  });
  a.append(this.node);
  }
  return this;
};

  Lens.prototype.activate = function()
  {
    //carico la lente
    this.loadlens();

  switch(settings.zoomType)
  {
    case 'reverse':
      img.css({'opacity' : settings.imageOpacity});

  (settings.alwaysOn) ? lens.center() : lens.setposition(null);
  //lens.center();
  //bindo ad a il mousemove della lente
  a.bind( 'mousemove', function(e)
  {
    mousepos.x = e.pageX;
    mousepos.y = e.pageY;
    lens.setposition( e );
  });
break;
case 'innerzoom':

  //	lens = new Lens();
  //	lens.activate();

  $( this.node ).css({top : 0 ,left: 0});
    if(settings.title)
  {
    ZoomTitleObj.loadtitle();
  }

  largeimage.setcenter();

  a.bind( 'mousemove', function(e)
  {
    mousepos.x = e.pageX;
    mousepos.y = e.pageY;
    largeimage.setinner( e );

  /*if(settings.zoomType == 'innerzoom' && running)
  {
    $(a).mousemove(function(){
      if($('div.jqZoomPup').length <= 0)
      {
        lens = new Lens();
        lens.activate();
      }
    });
  }*/

  /*if($('div.jqZoomPup').length <= 0)
    {
      lens = new Lens();
      lens.activate();
    }*/

  });
break;
default:
  /*$(document).mousemove(function(e){
  if(isMouseDown && dragstatus != false){
  lens.setposition( e );
  }
  });
  lens.center()


  dragstatus = 'on'
  $(document).mouseup(function(e){
  if(isMouseDown && dragstatus != false){
    isMouseDown = false;
    dragstatus = false;

  }
  });

  $(this.node).mousedown(function(e){
  $('div.jqZoomPup').css("cursor", "move");
  $(this.node).css("position", "absolute");

  // set z-index
    $(this.node).css("z-index", parseInt( new Date().getTime()/1000 ));
    if($.browser.safari)
    {
      $(a).css("cursor", "move");
    }
    isMouseDown    = true;
    dragstatus = 'on';
    lens.setposition( e );
    });
    */


  (settings.alwaysOn) ? lens.center() : lens.setposition(null);

  //bindo ad a il mousemove della lente
  $(a).bind( 'mousemove', function(e)
  {

  mousepos.x = e.pageX;
  mousepos.y = e.pageY;
  lens.setposition( e );
});

  break;
}


  return this;
};

  Lens.prototype.setposition = function( e)
  {


  if(e)
  {
    mousepos.x = e.pageX;
    mousepos.y	= e.pageY;
  }

  if(firstime == 0)
  {
    var lensleft = (smallimagedata.w)/2 - (lensdata.w)/2 ;
    var lenstop = (smallimagedata.h)/2 - (lensdata.h)/2 ;
  //ADDED

  $('div.jqZoomPup').show()
  if(settings.lens)
  {
    this.node.style.visibility = 'visible';
  }
  else
  {
    this.node.style.visibility = 'hidden';
    $('div.jqZoomPup').hide();
  }
  //ADDED
  firstime = 1;

  }else
  {
    var lensleft = mousepos.x - smallimagedata.pos.l - (lensdata.w)/2 ;
    var lenstop = mousepos.y - smallimagedata.pos.t -(lensdata.h)/2 ;
  }


  //a sinistra
  if(overleft())
  {
    lensleft = 0  + bleft;
  }else
  //a destra
  if(overright())
  {
    if($.browser.msie)
    {
    lensleft = smallimagedata.w - lensdata.w  + bleft + 1  ;
    }else
    {
    lensleft = smallimagedata.w - lensdata.w  + bleft - 1  ;
    }


  }

  //in alto
  if(overtop())
  {
    lenstop = 0 + btop ;
  }else
  //sotto
  if(overbottom())
  {

  if($.browser.msie)
  {
  lenstop = smallimagedata.h - lensdata.h  + btop + 1 ;
  }else
  {
  lenstop = smallimagedata.h - lensdata.h - 1 + btop  ;
  }

  }
  lensleft = parseInt(lensleft);
  lenstop = parseInt(lenstop);

  //setto lo zoom ed un eventuale immagine al centro
  $('div.jqZoomPup',a).css({top: lenstop,left: lensleft });

  if(settings.zoomType == 'reverse')
  {
    $('div.jqZoomPup img',a).css({'position': 'absolute','top': -( lenstop - btop +1) ,'left': -(lensleft - bleft +1)  });
  }

  this.node.style.left = lensleft + 'px';
  this.node.style.top = lenstop + 'px';

  //setto l'immagine grande
  largeimage.setposition();

  function overleft() {
    return mousepos.x - (lensdata.w +2*1)/2  - bleft < smallimagedata.pos.l;
  }

  function overright() {

  return mousepos.x + (lensdata.w + 2* 1)/2  > smallimagedata.pos.r + bleft ;
}

  function overtop() {
    return mousepos.y - (lensdata.h + 2* 1)/2  - btop < smallimagedata.pos.t;
  }

  function overbottom() {
    return mousepos.y + (lensdata.h + 2* 1)/2    > smallimagedata.pos.b + btop;
  }

  return this;
};


  //mostra la lente al centro dell'immagine
  Lens.prototype.center = function()
  {
    $('div.jqZoomPup',a).css('display','none');
    var lensleft = (smallimagedata.w)/2 - (lensdata.w)/2 ;
    var lenstop = (smallimagedata.h)/2 - (lensdata.h)/2;
    this.node.style.left = lensleft + 'px';
    this.node.style.top = lenstop + 'px';
    $('div.jqZoomPup',a).css({top: lenstop,left: lensleft });

  if(settings.zoomType == 'reverse')
  {
    /*if($.browser.safari){
      alert('safari');
      alert(2*bleft);
      $('div.jqZoomPup img',a).css({'position': 'absolute','top': -( lenstop - btop +1) ,'left': -(lensleft - 2*bleft)  });
    }else
    {*/
      $('div.jqZoomPup img',a).css({'position': 'absolute','top': -(lenstop - btop + 1) ,'left': -( lensleft  - bleft +1)   });
    //}
  }

  largeimage.setposition();
  if($.browser.msie)
  {
    $('div.jqZoomPup',a).show();
  }else
  {
    setTimeout(function(){$('div.jqZoomPup').fadeIn('fast');},10);
  }
};


  //ritorna l'offset
  Lens.prototype.getoffset = function() {
    var o = {};
    o.left = parseInt(this.node.style.left) ;
    o.top =  parseInt(this.node.style.top) ;
    return o;
  };

  //rimuove la lente
  Lens.prototype.remove = function()
  {

  if(settings.zoomType == 'innerzoom')
  {
    $('div.jqZoomPup',a).fadeOut('fast',function(){/*$('div.jqZoomPup img').remove();*/$(this).remove();});
  }else
  {
    //$('div.jqZoomPup img').remove();
    $('div.jqZoomPup',a).remove();
  }
};

  Lens.prototype.findborder = function()
  {
    var bordertop = '';
    bordertop = $('div.jqZoomPup').css('borderTop');
    //alert(bordertop);
    lensbtop = '';
    var borderleft = '';
    borderleft = $('div.jqZoomPup').css('borderLeft');
    lensbleft = '';
    if($.browser.msie)
    {
      var temp = bordertop.split(' ');

  bordertop = temp[1];
  var temp = borderleft.split(' ');
  borderleft = temp[1];
}

  if(bordertop)
  {
    for(i=0;i<3;i++)
    {
      var x = [];
      x = bordertop.substr(i,1);

  if(isNaN(x) == false)
  {
    lensbtop = lensbtop +''+ bordertop.substr(i,1);
  }else
  {
    break;
  }
}
}

  if(borderleft)
  {
    for(i=0;i<3;i++)
    {
      if(!isNaN(borderleft.substr(i,1)))
      {
        lensbleft = lensbleft + borderleft.substr(i,1)
      }else
      {
        break;
      }
    }
  }


  lensbtop = (lensbtop.length > 0) ? eval(lensbtop) : 0;
  lensbleft = (lensbleft.length > 0) ? eval(lensbleft) : 0;
}

  //LARGEIMAGE
  function Largeimage( url )
  {
    this.url = url;
    this.node = new Image();

  /*if(settings.preloadImages)
  {
    preload.push(new Image());
  preload.slice(-1).src = url ;
  }*/

  this.loadimage = function()
  {


  if(!this.node)
  this.node = new Image();

  this.node.style.position = 'absolute';
  this.node.style.display = 'none';
  this.node.style.left = '-5000px';
  this.node.style.top = '10px';
  loader = new Loader();

  if(settings.showPreload && !preloadshow)
  {
    loader.show();
    preloadshow = true;
  }

  document.body.appendChild( this.node );
  this.node.src = this.url; // fires off async
}

  this.node.onload = function()
  {
    this.style.display = 'block';
    var w = Math.round($(this).width());
    var	h = Math.round($(this).height());

  this.style.display = 'none';

  //setting scale
  scale.x = (w / smallimagedata.w);
  scale.y = (h / smallimagedata.h);





  if($('div.preload').length > 0)
  {
    $('div.preload').remove();
  }

  largeimageloaded = true;

  if(settings.zoomType != 'innerzoom' && running){
    stage = new Stage();
    stage.activate();
  }

  if(running)
  {
  //alert('in');
  lens = new Lens();

  lens.activate() ;

  }
  //la attivo

  if($('div.preload').length > 0)
  {
    $('div.preload').remove();
  }
}
return this;
}


  Largeimage.prototype.setposition = function()
  {
    this.node.style.left = Math.ceil( - scale.x * parseInt(lens.getoffset().left) + bleft) + 'px';
  this.node.style.top = Math.ceil( - scale.y * parseInt(lens.getoffset().top) +btop) + 'px';
  };

  //setto la posizione dell'immagine grande nel caso di innerzoom
  Largeimage.prototype.setinner = function(e) {
    this.node.style.left = Math.ceil( - scale.x * Math.abs(e.pageX - smallimagedata.pos.l)) + 'px';
  this.node.style.top = Math.ceil( - scale.y * Math.abs(e.pageY - smallimagedata.pos.t)) + 'px';
  $('div.jqZoomPup img',a).css({'position': 'absolute','top': this.node.style.top,'left': this.node.style.left  });
  };


  Largeimage.prototype.setcenter = function() {
    this.node.style.left = Math.ceil(- scale.x * Math.abs((smallimagedata.w)/2)) + 'px';
  this.node.style.top = Math.ceil( - scale.y * Math.abs((smallimagedata.h)/2)) + 'px';


  $('div.jqZoomPup img',a).css({'position': 'absolute','top': this.node.style.top,'left': this.node.style.left  });
};


  //STAGE
  function Stage()
  {

  var leftpos = smallimagedata.pos.l;
  var toppos = smallimagedata.pos.t;
  //creating element and class
  this.node = document.createElement("div");
  $(this.node).addClass('jqZoomWindow');

  $( this.node )
    .css({
      position: 'absolute',
      width: Math.round(settings.zoomWidth) + 'px',
      height: Math.round(settings.zoomHeight) + 'px',
      display: 'none',
      zIndex: 10000,
      overflow: 'hidden'
    });

  //fa il positionamento
  switch(settings.position)
  {
    case "right":

  leftpos = (smallimagedata.pos.r + Math.abs(settings.xOffset) + settings.zoomWidth < screen.width)
  ? (smallimagedata.pos.l + smallimagedata.w + Math.abs(settings.xOffset))
  : (smallimagedata.pos.l - settings.zoomWidth - Math.abs(settings.xOffset));

  topwindow = smallimagedata.pos.t + settings.yOffset + settings.zoomHeight;
  toppos = (topwindow < screen.height && topwindow > 0)
  ?  smallimagedata.pos.t + settings.yOffset
  :  smallimagedata.pos.t;

  break;
  case "left":

  leftpos = (smallimagedata.pos.l - Math.abs(settings.xOffset) - settings.zoomWidth > 0)
  ? (smallimagedata.pos.l - Math.abs(settings.xOffset) - settings.zoomWidth)
  : (smallimagedata.pos.l + smallimagedata.w + Math.abs(settings.xOffset));

  topwindow = smallimagedata.pos.t + settings.yOffset + settings.zoomHeight;
  toppos = (topwindow < screen.height && topwindow > 0)
  ?  smallimagedata.pos.t + settings.yOffset
  :  smallimagedata.pos.t;

  break;
  case "top":

  toppos = (smallimagedata.pos.t - Math.abs(settings.yOffset) - settings.zoomHeight > 0)
  ? (smallimagedata.pos.t - Math.abs(settings.yOffset) - settings.zoomHeight)
  : (smallimagedata.pos.t + smallimagedata.h + Math.abs(settings.yOffset));


  leftwindow = smallimagedata.pos.l + settings.xOffset + settings.zoomWidth;
  leftpos = (leftwindow < screen.width && leftwindow > 0)
  ? smallimagedata.pos.l + settings.xOffset
  : smallimagedata.pos.l;

  break;
  case "bottom":


  toppos = (smallimagedata.pos.b + Math.abs(settings.yOffset) + settings.zoomHeight < $('body').height())
  ? (smallimagedata.pos.b + Math.abs(settings.yOffset))
  : (smallimagedata.pos.t - settings.zoomHeight - Math.abs(settings.yOffset));


  leftwindow = smallimagedata.pos.l + settings.xOffset + settings.zoomWidth;
  leftpos = (leftwindow < screen.width && leftwindow > 0)
  ? smallimagedata.pos.l + settings.xOffset
  : smallimagedata.pos.l;

  break;
  default:

  leftpos = (smallimagedata.pos.l + smallimagedata.w + settings.xOffset + settings.zoomWidth < screen.width)
  ? (smallimagedata.pos.l + smallimagedata.w + Math.abs(settings.xOffset))
  : (smallimagedata.pos.l - settings.zoomWidth - Math.abs(settings.xOffset));

  toppos = (smallimagedata.pos.b + Math.abs(settings.yOffset) + settings.zoomHeight < screen.height)
  ? (smallimagedata.pos.b + Math.abs(settings.yOffset))
  : (smallimagedata.pos.t - settings.zoomHeight - Math.abs(settings.yOffset));

  break;
}

  this.node.style.left = leftpos + 'px';
  this.node.style.top = toppos + 'px';
  return this;
}


  Stage.prototype.activate = function()
  {

  if ( !this.node.firstChild )
    this.node.appendChild( largeimage.node );


  if(settings.title)
  {
    ZoomTitleObj.loadtitle();
  }



  document.body.appendChild( this.node );


  switch(settings.showEffect)
  {
    case 'show':
      $(this.node).show();
    break;
    case 'fadein':
      $(this.node).fadeIn(settings.fadeinSpeed);
    break;
    default:
      $(this.node).show();
    break;
  }

  $(this.node).show();

  if ($.browser.msie && $.browser.version < 7) {
  this.ieframe = $('<iframe class="zoom_ieframe" frameborder="0" src="#"></iframe>')
    .css({ position: "absolute", left:this.node.style.left,top:this.node.style.top,zIndex: 99,width:settings.zoomWidth,height:settings.zoomHeight })
    .insertBefore(this.node);
    };


  largeimage.node.style.display = 'block';
}

  Stage.prototype.remove = function() {
    switch(settings.hideEffect)
    {
      case 'hide':
        $('.jqZoomWindow').remove();
      break;
      case 'fadeout':
        $('.jqZoomWindow').fadeOut(settings.fadeoutSpeed);
      break;
      default:
        $('.jqZoomWindow').remove();
      break;
    }
  }

  function zoomTitle()
  {

  this.node =  jQuery('<div />')
    .addClass('jqZoomTitle')
    .html('' + ZoomTitle +'');

  this.loadtitle = function()
  {
    if(settings.zoomType == 'innerzoom')
    {
      $(this.node)
      .css({position: 'absolute',
        top: smallimagedata.pos.b +3,
        left: (smallimagedata.pos.l+1),
        width:smallimagedata.w
        })
      .appendTo('body');
    }else
    {
      $(this.node).appendTo(stage.node);
    }
  };
}

  zoomTitle.prototype.remove = function() {
    $('.jqZoomTitle').remove();
  }


  function Loader()
  {

  this.node = document.createElement("div");
  $(this.node).addClass('preload');
  $(this.node).html(settings.preloadText);//appendo il testo

  $(this.node )
    .appendTo("body")
    .css('visibility','hidden');



  this.show = function()
  {
    if(!smallimagedata.pos){
      return this;
    }
    switch(settings.preloadPosition)
    {
      case 'center':
        loadertop =  smallimagedata.pos.t + (smallimagedata.h - $(this.node ).height())/2;
        loaderleft = smallimagedata.pos.l + (smallimagedata.w - $(this.node ).width())/2;
      break;
      default:
      var loaderoffset = this.getoffset();
      loadertop = !isNaN(loaderoffset.top) ? smallimagedata.pos.t + loaderoffset.top : smallimagedata.pos.t + 0;
      loaderleft = !isNaN(loaderoffset.left) ? smallimagedata.pos.l + loaderoffset.left : smallimagedata.pos.l + 0;
      break;
    }

  //setting position
  $(this.node).css({
    top: loadertop  ,
    left: loaderleft ,
    position: 'absolute',
    visibility:'visible'
    });
}
return this;
}

  Loader.prototype.getoffset = function()
  {
    var o = null;
    o = $('div.preload').offset();
    return o;
  }

  });
}
})(jQuery);

  function trim(stringa)
  {
    while (stringa.substring(0,1) == ' '){
      stringa = stringa.substring(1, stringa.length);
    }
    while (stringa.substring(stringa.length-1, stringa.length) == ' '){
      stringa = stringa.substring(0,stringa.length-1);
    }
    return stringa;
  }