/*
 * 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).
 */
(function($)
{

	    $.fn.jqzoom = function(options)
	    {
	    	// Ajout du test sur le navigateur safari : si safari, pas de zoom
	    	if(!$.browser.safari){	    	
	        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,
				showEffect: 'show',
				hideEffect: 'hide',
				fadeinSpeed: 'fast',
				fadeoutSpeed: 'slow',
				preloadImages :true, //Preload largeimage first time?
				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 enterElement=false;
	
	
				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(){deactivate();return false;});
	
				//se settato alwaysOn attivo lo Zoom e lo mostro.
				$(this).mouseenter(function(e){
					enterElement=e.relatedTarget!=null;
					
				});
				
				//attivo al mouseover
				$(this).hover(function(e)
				{
					if(enterElement){
						mousepos.x = e.pageX;
						mousepos.y	= e.pageY;
						activate();
					}
				},function()
				{
					if(enterElement){
						deactivate();
					}
				});
	
				
				
				//ALWAYS ON
				if(settings.alwaysOn)
				{
					setTimeout(function(){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');
	
						//se non c� creo l'oggetto largeimage
						if (!largeimage || $.browser.safari) {
							largeimage = new Largeimage( a[0].href );
						}
						//se l'immagine grande non � stata caricata la carico
						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 = true;//HFK
						$(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');
						//resetto il parametro che mi dice che � la prima volta che mostor lo zoom
						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();
					}
				}
				
				
				// [[STD : quand l'image zoom ne peut pas etre chargee
				var onerrorpass = false;
				this.node.onerror = function()
				{
					if (onerrorpass === false) {					
						this.src = "/style1/images/commun/nozoom.jpg";
						$(this).height("396");
						$(this).width("556");
						onerrorpass = true;
					}
				}
				// STD]]
				
				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()
			{
				//HFK //Dont reinsert if existant
				if($(".jqZoomWindow").length==0)
				{
	
					if ( !this.node.firstChild )
							this.node.appendChild( largeimage.node );
		
					if(settings.title)
					{
						ZoomTitleObj.loadtitle();
					}
		
					document.body.appendChild( this.node );
		
				}
				
				switch(settings.showEffect)
				{
					case 'show':
						$(".jqZoomWindow").show();
					break;
					case 'fadein':
						$(".jqZoomWindow").fadeIn(settings.fadeinSpeed);
					break;
					default:
						$(".jqZoomWindow").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').hide();
					break;
					case 'fadeout':
						$('.jqZoomWindow').fadeOut(settings.fadeoutSpeed);
					break;
					default:
						$('.jqZoomWindow').hide();
					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()
				{
					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;
			}
	
			});
	    } // fin du test sur le navigateur
	}
	})(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;
	}
