var image_zoom = { 

	ACTIVE: false,
	THUMB_ID: false,
	THUMB_X: false,
	THUMB_Y: false,
	THUMB_WIDTH: false,
	THUMB_HEIGHT: false,
	IMAGE_ID: false,
	IMAGE_URL: false,
	IMAGE_X: false,
	IMAGE_Y: false,
	IMAGE_WIDTH: false,
	IMAGE_HEIGHT: false,
	PRELOAD_IMG: false,
	STEPS: 20,
	STEP_COUNT: 0,
	OBJ_ID_CONTEUR: 0,

	
	show:function(obj, url) {

		// chiude zoom se necessario
		if (this.ACTIVE) { this._deactivate(); }
		
		// assegna un id all'oggetto se necessario
		if (obj.getAttribute('id') == undefined) { 
			this.OBJ_ID_CONTEUR ++;
			obj.setAttribute('id',"_image_zoom_obj_id_" + this.OBJ_ID_CONTEUR); 
		}
		
		// posizione thumbnail
		var img_pos = AJAX.getElXY(obj);
		
		// variabili
		this.ACTIVE = true;
		this.THUMB_ID = obj.id;
		this.THUMB_WIDTH = obj.width;
		this.THUMB_HEIGHT = obj.height;
		this.THUMB_X = img_pos[0];
		this.THUMB_Y = img_pos[1];		
		this.IMAGE_URL = url;

		this.PRELOAD_IMG = new Image;
		this.PRELOAD_IMG.src = url;
		this.PRELOAD_IMG.onload = image_zoom._create_image;

	},
	
	_create_image:function(e) {
		
		// crea image
		var img = document.createElement('img');
		img.style.position = "absolute";
		img.style.left = image_zoom.THUMB_X + "px";
		img.style.top = image_zoom.THUMB_Y + "px";
		img.style.zIndex = 999;
		img.setAttribute('id',"_image_zoom_image_id_");

		image_zoom.IMAGE_ID = img.id;
		image_zoom.IMAGE_WIDTH = image_zoom.PRELOAD_IMG.width;
		image_zoom.IMAGE_HEIGHT = image_zoom.PRELOAD_IMG.height;
		img.width = image_zoom.THUMB_WIDTH;
		img.height = image_zoom.THUMB_HEIGHT;
		img.src = image_zoom.IMAGE_URL;
		img.onclick = image_zoom._zoom_out;
		img.style.opacity = 0;
		img.style.border = "2px white solid";
		
		var wsize = image_zoom._getWindowSizeXY();
		var wscroll = image_zoom._getScrollXY();
		
		image_zoom.IMAGE_X = Math.round(((wsize[0] - image_zoom.IMAGE_WIDTH) / 2) + wscroll[0]);
		image_zoom.IMAGE_Y = Math.round(((wsize[1] - image_zoom.IMAGE_HEIGHT) / 2) + wscroll[1]);
		if (image_zoom.IMAGE_X < 0) { image_zoom.IMAGE_X = 0; }
		if (image_zoom.IMAGE_Y < 0) { image_zoom.IMAGE_Y = 0; }
		
		
		var thumb_obj = AJAX.getEl(image_zoom.THUMB_ID);
		thumb_obj.parentNode.insertBefore(img, thumb_obj);		

		image_zoom._zoom_in();
		
	},

	_zoom_in:function() {
		var img = AJAX.getEl(image_zoom.IMAGE_ID);
		var left, top;
		image_zoom.STEP_COUNT ++;

		if (image_zoom.STEP_COUNT < image_zoom.STEPS) {
			img.width = image_zoom.THUMB_WIDTH + (Math.round((image_zoom.IMAGE_WIDTH - image_zoom.THUMB_WIDTH) / image_zoom.STEPS * image_zoom.STEP_COUNT));
			img.height = image_zoom.THUMB_HEIGHT + (Math.round((image_zoom.IMAGE_HEIGHT - image_zoom.THUMB_HEIGHT) / image_zoom.STEPS * image_zoom.STEP_COUNT));
			left = image_zoom.THUMB_X + (Math.round((image_zoom.IMAGE_X - image_zoom.THUMB_X) / image_zoom.STEPS * image_zoom.STEP_COUNT));
			top = image_zoom.THUMB_Y + (Math.round((image_zoom.IMAGE_Y - image_zoom.THUMB_Y) / image_zoom.STEPS * image_zoom.STEP_COUNT));
			img.style.left = left + "px";
			img.style.top = top + "px";
			img.style.opacity = 1/image_zoom.STEPS*image_zoom.STEP_COUNT;
			setTimeout("image_zoom._zoom_in()",10);
		} else if (image_zoom.STEP_COUNT == image_zoom.STEPS) {
			img.width = image_zoom.IMAGE_WIDTH;
			img.height = image_zoom.IMAGE_HEIGHT;
			img.style.left = image_zoom.IMAGE_X + "px";
			img.style.top = image_zoom.IMAGE_Y + "px";
			img.style.opacity = 1;
		}
	},
	
	_zoom_out:function() {
		var img = AJAX.getEl(image_zoom.IMAGE_ID);
		image_zoom.STEP_COUNT --;

		if (image_zoom.STEP_COUNT > 0) {
			img.width = image_zoom.THUMB_WIDTH + (Math.round((image_zoom.IMAGE_WIDTH - image_zoom.THUMB_WIDTH) / image_zoom.STEPS * image_zoom.STEP_COUNT));
			img.height = image_zoom.THUMB_HEIGHT + (Math.round((image_zoom.IMAGE_HEIGHT - image_zoom.THUMB_HEIGHT) / image_zoom.STEPS * image_zoom.STEP_COUNT));
			left = image_zoom.THUMB_X + (Math.round((image_zoom.IMAGE_X - image_zoom.THUMB_X) / image_zoom.STEPS * image_zoom.STEP_COUNT));
			top = image_zoom.THUMB_Y + (Math.round((image_zoom.IMAGE_Y - image_zoom.THUMB_Y) / image_zoom.STEPS * image_zoom.STEP_COUNT));
			img.style.left = left + "px";
			img.style.top = top + "px";
			img.style.opacity = 1/image_zoom.STEPS*image_zoom.STEP_COUNT;
			setTimeout("image_zoom._zoom_out()",10);
		} else if (image_zoom.STEP_COUNT == 0) {
			img.width = image_zoom.THUMB_WIDTH;
			img.height = image_zoom.THUMB_HEIGHT;
			img.style.left = image_zoom.THUMB_X + "px";
			img.style.top = image_zoom.THUMB_Y + "px";
			image_zoom._deactivate();
		}
	},
	
	_deactivate:function () {
		var img = AJAX.getEl(image_zoom.IMAGE_ID);
		var thumb = AJAX.getEl(image_zoom.THUMB_ID);

		thumb.parentNode.removeChild(img);

		image_zoom.ACTIVE= false;
		image_zoom.THUMB_ID= false;
		image_zoom.THUMB_X= false;
		image_zoom.THUMB_Y= false;
		image_zoom.THUMB_WIDTH= false;
		image_zoom.THUMB_HEIGHT= false;
		image_zoom.IMAGE_ID= false;
		image_zoom.IMAGE_URL= false;
		image_zoom.IMAGE_X = false;
		image_zoom.IMAGE_Y = false;
		image_zoom.IMAGE_WIDTH= false,
		image_zoom.IMAGE_HEIGHT= false;
		image_zoom.PRELOAD_IMG= false;
		image_zoom.STEPS= 10;
		image_zoom.STEP_COUNT= 0;
		image_zoom.OBJ_ID_CONTEUR= 0;
	
	},
	
	_getScrollXY:function() {
  	var scrOfX = 0, scrOfY = 0;
  	if( typeof( window.pageYOffset ) == 'number' ) {
   	 //Netscape compliant
   	 scrOfY = window.pageYOffset;
   	 scrOfX = window.pageXOffset;
  	} else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
   	 //DOM compliant
   	 scrOfY = document.body.scrollTop;
   	 scrOfX = document.body.scrollLeft;
 	 	} else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
   		//IE6 standards compliant mode
    	scrOfY = document.documentElement.scrollTop;
    	scrOfX = document.documentElement.scrollLeft;
  	}
  	
  	
  	return [ scrOfX, scrOfY ];
	},
	
	_getWindowSizeXY:function() {
		var myWidth = 0, myHeight = 0;
		if( typeof( window.innerWidth ) == 'number' ) {
		 //Non-IE
		 myWidth = window.innerWidth;
		 myHeight = window.innerHeight;
		} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
		 //IE 6+ in 'standards compliant mode'
		 myWidth = document.documentElement.clientWidth;
		 myHeight = document.documentElement.clientHeight;
		} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
		 //IE 4 compatible
		 myWidth = document.body.clientWidth;
		 myHeight = document.body.clientHeight;
		}
  	return [ myWidth, myHeight ];
	}
	
}




