function imageZoomSetSizes( targetImage ){
	targetImage.originalImageWidth = parseInt(targetImage.width);
	targetImage.originalImageHeight = parseInt(targetImage.height);
	targetImage.style.position = 'absolute';
	scaleW = parseInt((100 * parseInt(document.getElementById('frame_'+targetImage.id).style.width)) / targetImage.originalImageWidth);
	scaleH = parseInt((100 * parseInt(document.getElementById('frame_'+targetImage.id).style.height)) / targetImage.originalImageHeight);
	if ( scaleW > scaleH ) targetImage.minScale = scaleH;
	else targetImage.minScale = scaleW;
	if ( targetImage.minScale > 100 ) targetImage.minScale = 100;
	
	if ( scaleW > scaleH ) targetImage.currentScale = scaleH;
	else targetImage.currentScale = scaleW;
	
	imageZoomPosition( targetImage, 0, 0, false );
}


function f_imageZoomEvents_h( imageHandler, event ){
	if ( !event ) event = window.event;
	targetImage = event.target;
	if ( !targetImage ) targetImage = event.srcElement;
	
	if ( event.type == "mouseout" && !document.currentZoomImage ) {
		targetImage.style.cursor = "";
	} else if ( event.type == "mouseover" ) {
		targetImage.style.cursor = "move";
	} else if ( event.type == "mousedown" ) {
		targetImage.style.cursor = "move";
		document.currentZoomImage = targetImage;
		targetImage.mouseOffsetX = event.clientX;
		targetImage.mouseOffsetY = event.clientY;
		targetImage.startingX = parseInt(targetImage.style.left);
		targetImage.startingY = parseInt(targetImage.style.top);
		imageZoomRegisterEvent(event, 'mousemove', imageZoomMove);
		imageZoomRegisterEvent(event, 'mouseup', imageZoomMoveEnd);
		
	}
	imageZommCancelPropagation(event);
	if ( event.preventDefault ) event.preventDefault();
	else event.returnValue=false; return false;
}

function imageZoomMove( event ){
	if ( !event ) event = window.event;
	targetImage = event.target;
	if ( !targetImage ) targetImage = event.srcElement;

	if ( !event ) { event = window.event; }
	var newPositionLeft = document.currentZoomImage.startingX + (event.clientX - document.currentZoomImage.mouseOffsetX);
	var newPositionTop = document.currentZoomImage.startingY + (event.clientY - document.currentZoomImage.mouseOffsetY);
	imageZoomPosition( document.currentZoomImage, newPositionLeft, newPositionTop, false );
	if ( event.preventDefault ) event.preventDefault();
	else event.returnValue=false; return false;
	imageZommCancelPropagation(event);
}

	
function imageZoomMoveEnd( event ){
	if ( !event ) event = window.event;
	imageZoomUnRegisterEvent(event, 'mousemove', imageZoomMove);
	imageZoomUnRegisterEvent(event, 'mouseup', imageZoomMoveEnd);
	document.currentZoomImage = '';
	if ( event.preventDefault ) event.preventDefault();
	else event.returnValue=false; return false;
	imageZommCancelPropagation(event);
}					


function imageZoomZoom( event, imageId, zooming ){
	if ( !event ) event = window.event;
	targetImage = event.target;
	if ( !targetImage ) targetImage = event.srcElement;

	if ( event.type == "mouseout" ) {
		targetImage.style.cursor = "";
		clearTimeout(document.currentTimeout);
	} else if ( event.type == "mouseup" ) {
		targetImage.style.cursor = "";
		clearTimeout(document.currentTimeout);
	} else if ( event.type == "mousedown" ) {
		document.currentTimeout = setTimeout("imageZoomZooming('" + imageId + "', '" + zooming + "', '" + 0 + "')", 30);
  	} else if ( event.type == "mouseover" ){
		targetImage.style.cursor = "pointer";
  	}
	imageZommCancelPropagation(event);
}

function imageZoomZooming( imageId, zooming, factor ){
	zoomImage = document.getElementById(imageId);
	
	if ( zooming == "in" ) newScale = zoomImage.currentScale + parseInt(1 * (1+(factor/10)));
	else newScale = zoomImage.currentScale - parseInt(1 * (1+(factor/10)));
	factor = parseInt(factor) + 1;
	imageZoomPosition(zoomImage, parseInt(zoomImage.style.left), parseInt(zoomImage.style.top), newScale);
	document.currentTimeout = setTimeout("imageZoomZooming('" + imageId + "', '" + zooming + "', '" + factor + "')", 30);
}


function imageZoomPosition( image, left, top, newScale ){
	scale = newScale;
	if ( !scale ) scale = image.currentScale;
	if ( scale > 100 ) scale = 100;
	else if ( scale < image.minScale ) scale = image.minScale;
	imageWidth = parseInt((image.originalImageWidth * scale) / 100);
	imageHeight = parseInt((image.originalImageHeight * scale) / 100);
	frameWidth = parseInt(document.getElementById('frame_'+image.id).style.width);
	frameHeight = parseInt(document.getElementById('frame_'+image.id).style.height);

	if ( frameWidth >= imageWidth ){
		minLeft = parseInt((frameWidth - imageWidth) / 2);
		maxLeft = minLeft;
		if ( newScale ) left = parseInt(frameWidth/2 - ((imageWidth * parseInt(frameWidth/2 - parseInt(image.style.left)))/parseInt(image.style.width)));
	} else {
		minLeft = frameWidth - imageWidth;
		maxLeft = 0;
		if ( newScale ) left = parseInt(frameWidth/2) - ((imageWidth * parseInt(frameWidth/2 + Math.abs(parseInt(image.style.left))))/parseInt(image.style.width));
	}


	if ( frameHeight >= imageHeight ){
		minTop = parseInt((frameHeight - imageHeight) / 2);
		maxTop = minTop;
		if ( newScale ) top = parseInt(frameHeight/2 - ((imageHeight * parseInt(frameHeight/2 - parseInt(image.style.top)))/parseInt(image.style.height)));
	} else {
		minTop = frameHeight - imageHeight;
		maxTop = 0;
		if ( newScale ) top = parseInt(frameHeight/2) - ((imageHeight * parseInt(frameHeight/2 + Math.abs(parseInt(image.style.top))))/parseInt(image.style.height));
	}
	
	if ( left >= maxLeft ) left = maxLeft;
	else if ( left < minLeft ) left = minLeft;
	if ( top >= maxTop ) top = maxTop;
	else if ( top < minTop ) top = minTop;
	image.style.left = left+"px";
	image.style.top = top+"px";
	image.style.width = imageWidth+"px";
	image.style.height = imageHeight+"px";
	image.currentScale = scale;
	
}					


function imageZoomRegisterEvent( event, eventType, callback ){
	if ( !event ) event = window.event;
	switch ( eventType ) {
	  case "mousemove":
	  	if ( document.addEventListener ) document.addEventListener("mousemove", callback, true);
	  	else if ( document.attachEvent ) document.attachEvent("onmousemove", callback);
	  	else document.onmousemove = callback;
		break;
	  case "mouseup":
	  	if ( document.addEventListener ) document.addEventListener("mouseup", callback, true);
	  	else if ( document.attachEvent ) document.attachEvent("onmouseup", callback);
	  	else document.onMouseUpHandler = callback;
		break;
	  case "mousedown":
	  	if ( document.addEventListener ) document.addEventListener("mousedown", callback, true);
	  	else if ( document.attachEvent ) document.attachEvent("onmousedown", callback);
	  	else document.onMouseDownHandler = callback;
		break;
	  case "mouseover":
	  	if ( document.addEventListener ) document.addEventListener("mouseover", callback, true);
	  	else if ( document.attachEvent ) document.attachEvent("onmouseover", callback);
	  	else document.onMouseOverHandler = callback;
		break;
	}
}


function imageZoomUnRegisterEvent( event, eventType, callback ){
	if ( !event ) event = window.event;
	switch ( eventType ) {
	  case "mousemove":
	  	if ( document.removeEventListener ) document.removeEventListener("mousemove", callback, true);
	  	else if ( document.detachEvent ) document.detachEvent("onmousemove", callback);
	  	else document.onmousemove = null;
		break;
	  case "mouseup":
	  	if ( document.removeEventListener ) document.removeEventListener("mouseup", callback, true);
	  	else if ( document.detachEvent ) document.detachEvent("onmouseup", callback);
	  	else document.onMouseUpHandler = null;
		break;
	  case "mousedown":
	  	if ( document.removeEventListener ) document.removeEventListener("mousedown", callback, true);
	  	else if ( document.detachEvent ) document.detachEvent("onmousedown", callback);
	  	else document.onMouseDownHandler = null;
		break;
	  case "mouseover":
	  	if ( document.removeEventListener ) document.removeEventListener("mouseover", callback, true);
	  	else if ( document.detachEvent ) document.detachEvent("onmouseover", callback);
	  	else document.onMouseOverHandler = null;
		break;
	}
}

function imageZommCancelPropagation(event){
	if ( event ) {
		if ( document.all ) window.event.cancelBubble=true;
		else event.stopPropagation();
	}
}