var iframe;

instanceGetMouseXY();
instancePan();
instanceNavigatorOnClick();
instanceUpdateNavigator();
instanceUpdateIFrame();
instanceZoomIn();
instanceZoomOut();
instanceDefaultImageValues();
instanceGetTop();
instanceGetLeft();
instanceSetIFrameSource();
instanceGetImageIFrame();

// Detect if the browser is IE or not.
// If it is not IE, we assume that the browser is NS.
IE = document.all?true:false;

// Set-up to use getMouseXY function onMouseMove
document.onmousemove = getMouseXY;

// Temporary variables to hold mouse x-y pos.s
var tempX = 0
var tempY = 0

// Main function to retrieve mouse x-y pos.s
function instanceGetMouseXY() {
	if( typeof getMouseXY == 'undefined' ) {
		getMouseXY = function(e) {
			if (IE) { // grab the x-y pos.s if browser is IE
				tempX = event.clientX + document.body.scrollLeft;
				tempY = event.clientY + document.body.scrollTop;
			} else {  // grab the x-y pos.s if browser is NS
				tempX = e.pageX;
				tempY = e.pageY;
			}  
			// catch possible negative values in NS4
			if (tempX < 0) { tempX = 0 }
			if (tempY < 0) { tempY = 0 }
			// show the position values in the form named Show
			// in the text fields named MouseX and MouseY
			return false;
		};
	}
}

function instancePan() {
	if( typeof pan == 'undefined' ) {
		pan = function(img_name) {
//			alert(img_name);
		    var iframe=getImageIFrame(img_name);
			var x = getLeft(iframe);
			var y = getTop(iframe);
			var imageX = tempX - x;
			var imageY = tempY - y;
		    setIFrameSource(iframe, img_name+'/pan?x='+imageX+'&y='+imageY);
		    return false;
		};
	}
}

function instanceNavigatorOnClick() {
	if( typeof navigatorOnClick == 'undefined' ) {
		navigatorOnClick = function(navigator_name, img_name) {
			var x = getLeft(document.getElementById( navigator_name ) );
			var y = getTop(document.getElementById( navigator_name ) );
		    var iframe=getImageIFrame(img_name);
			var scale = iframe.width/document[navigator_name].width;
			var imageX = Math.round( (tempX - x) * scale );
			var imageY = Math.round( (tempY - y) * scale );
			setIFrameSource(iframe, img_name + '/navigate?navigate=y&x=' + imageX + '&y=' + imageY);
	    	return false;
		};
	}
}

function instanceUpdateNavigator() {
	if( typeof updateNavigator == 'undefined' ) {
		updateNavigator = function(navigator_name, img_name) {
			//alert('doing');
			if( document.getElementById( navigator_name ) != null ) {
			    document.getElementById( navigator_name ).src = img_name + '/updatenavigator?updatenavigator=y&time=' + new Date().getTime();
			}
		    return false;
		};
	}
}

function instanceUpdateIFrame() {
	if( typeof updateIFrame == 'undefined' ) {
		updateIFrame = function(iframe_name, img_name) {
			if( document.getElementById( iframe_name ) != null ) {
			    document.getElementById( iframe_name ).src = img_name + '/zoom?zoom=0&time=' + new Date().getTime();
			}
		    return false;
		};
	}
}

function instanceZoomIn() {
	if( typeof zoomIn == 'undefined' ) {
		zoomIn = function(img_name) {
		    var iframe=getImageIFrame(img_name);
		    setIFrameSource(iframe,img_name+'/zoom?zoom=1&time='+new Date().getTime());
		    return false;
		};
	}
}

function instanceZoomOut() {
	if( typeof zoomOut == 'undefined' ) {
		zoomOut = function(img_name) {
		    var iframe=getImageIFrame(img_name);
			setIFrameSource(iframe,img_name+'/zoom?zoom=-1&time='+new Date().getTime());
			return false;
		};
	}
}

function instanceDefaultImageValues() {
	if( typeof defaultImageValues == 'undefined' ) {
		defaultImageValues = function( img_name ) {
		    var iframe=getImageIFrame(img_name);
		    setIFrameSource(iframe,img_name+'/scale?width=600&time='+new Date().getTime());
			return false;
		};
	}
}

function instanceGetTop() {
	if( typeof getTop == 'undefined' ) {
		getTop = function(obj){
			var curtop = 0;
			if( obj.offsetParent ) {
				while( obj.offsetParent ) {
					curtop += obj.offsetTop
					obj = obj.offsetParent;
				}
			} else {
				if( obj.y ) {
					curtop += obj.y;
				}
			}
			return curtop;
		};
	}
}

function instanceGetLeft() {
	if( typeof getLeft == 'undefined' ) {
		getLeft = function(obj) {
			var curleft = 0;
			if( obj.offsetParent ) {
				while( obj.offsetParent ) {
					curleft += obj.offsetLeft
					obj = obj.offsetParent;
				}
			} else { 
				if( obj.x ) {
					curleft += obj.x;
				}
			}
			return curleft;
		};
	}
}

function instanceSetIFrameSource() {
	if( typeof setIFrameSource == 'undefined' ) {
		setIFrameSource = function(iframe, source){
			if( IE ) {
				//iframe.contentWindow.location.href=source;
				iframe.contentWindow.document.getElementById("iframepicture").src='../'+source;
			}else{
				//iframe.src=source;
				iframe.contentWindow.document.getElementById("iframepicture").src='../'+source;
			}
		};
	}
}

function instanceGetImageIFrame() {
	if( typeof getImageIFrame == 'undefined' ) {
		getImageIFrame = function(img_name){
			return document.getElementById(img_name+"_img_frame");
		};
	}
}

