/*

 * 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)

    {

        var settings = {

            zoomType: 'standard', //standard/reverse/innerzoom

            zoomWidth: 330,		//zoomed width default width

            zoomHeight: 330,		//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 : false,

			alwaysOn: false,

			showEffect: 'show',

			hideEffect: 'hide',

			fadeinSpeed: 'fast',

			fadeoutSpeed: 'slow',

			preloadImages :true,

			showPreload: true,

			preloadText : 'Laddar zoom',

			preloadPosition : 'center'   //bycss

        };



			//extending options

			options = options || {};

        	$.extend(settings, options);





		return this.each(function()

		{

			var a = $(this);

			var aTitle = ""; //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);

			}





			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 = 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');

					//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();

				}

			}

			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('');



			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;

		}



		});

	}

})(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;

	}