var ie4 = (document.all && !document.getElementById) ? true : false;
var ie5 = (document.all && document.getElementById) ? true : false;
var ns6 = (!document.all && document.getElementById) ? true : false;
var ns4 = (document.layers) ? true : false;

var pan_mouseDownX = -1, pan_mouseUpX = -1, pan_mouseDownY = -1, pan_mouseUpY = -1;
var pan_handlerFunction = null;
var pan_started = false, pan_dragActive = false;
var pan_bgLyr, pan_mapLyr;
var pan_mapLeft, pan_mapTop, pan_xmax, pan_ymax;

function PanTool (mapLyrID, mapLeft, mapTop, mapWidth, mapHeight) {
	pan_mapLeft = mapLeft;
	pan_mapTop = mapTop;
	pan_xmax = mapLeft + mapWidth;
	pan_ymax = mapTop + mapHeight;
	
	var	pan_bgLyrContent = '<img border=0  src="images/spacer.gif" vspace="0" hspace="0"' +
				' width=' + mapWidth + ' height=' + mapHeight + 
				' style="POSITON:ABSOLUTE; LEFT:' + mapLeft + '; TOP: ' + mapTop + 
				' ;cursor:move' +
				';">';
	createLayer('pan_bgLyr', null, mapLeft, mapTop, mapWidth, mapHeight, pan_bgLyrContent, '', 'hidden');

	if (ie4 || ie5) {
		pan_bgLyr = document.all['pan_bgLyr'];
	} else if (ns6) {
		pan_bgLyr = document.getElementById('pan_bgLyr');
	} else if (ns4) {
		pan_bgLyr = document.layers['pan_bgLyr'];
		pan_bgLyr.captureEvents(Event.MOUSEDOWN | Event.MOUSEUP | Event.MOUSEMOVE);
	}
	pan_mapLyr = new DynLayer(mapLyrID);

    pan_bgLyr.onmousedown = pantoolMouseDown;
    pan_bgLyr.onmouseup = pantoolMouseUp;
    pan_bgLyr.onmousemove = pantoolMouseMove;

	this.addListener = pantoolAddListener;
	this.start = pantoolStart;
	this.stop = pantoolStop;
	this.reset = pantoolReset;
	this.getMouseDownX = pantoolGetMouseDownX;
	this.getMouseDownY = pantoolGetMouseDownY;
	this.getMouseUpX = pantoolGetMouseUpX;
	this.getMouseUpY = pantoolGetMouseUpY;
	this.hideMapLayer = pantoolHideMapLayer;
	this.showMapLayer = pantoolShowMapLayer;
}

function pantoolStart() {
	pantoolShowHiddenBgLyr (true);
	pan_started = true;
}
function pantoolStop () {
	pantoolShowHiddenBgLyr (false);
	pan_started = false;
}
function pantoolReset () {
	if (pan_mouseDownX != pan_mouseUpX || pan_mouseDownY != pan_mouseUpY) {
		pan_mapLyr.moveTo (pan_mapLeft, pan_mapTop);
		pan_mapLyr.clipTo(0, pan_xmax, pan_ymax, 0);
	}
	pan_mouseDownX = -1;
	pan_mouseDownY = -1;
	pan_mouseUpX = -1;
	pan_mouseUpY = -1;
}
function pantoolHideMapLayer () {
	pan_mapLyr.hide();
}
function pantoolShowMapLayer () {
	pan_mapLyr.show();
}
function pantoolShowHiddenBgLyr (show) {
	if (ie4 || ie5 || ns6) {
		pan_bgLyr.style.visibility = (show)? 'visible' : 'hidden';
	} else if (ns4) {
		pan_bgLyr.visibility = (show) ? 'show' : 'hide'; 
	} 
}
function pantoolAddListener (handlerFunction) {
	if (handlerFunction != null || handlerFunction != '') {
		pan_handlerFunction = handlerFunction;
		if (pan_handlerFunction.lastIndexOf(')') == -1) {
			pan_handlerFunction += '()';
		} 
	}
}

function pantoolPanMap (x, y) {
	var dx, dy;
	dx = x - pan_mouseDownX;
	dy = y - pan_mouseDownY;
		
	pan_mapLyr.hide();
	pan_mapLyr.clipInit();
				
	if (dx > 0 && dy > 0) {
		pan_mapLyr.clipTo(pan_mapTop-pan_mouseDownY, pan_xmax-pan_mapLeft-dx, pan_ymax-pan_mapTop-dy, pan_mapLeft-pan_mouseDownX);
	} else if (dx > 0 && dy < 0) {
		pan_mapLyr.clipTo(-dy, pan_xmax-pan_mapLeft-dx, pan_ymax, pan_mapLeft-pan_mouseDownX);
	} else if (dx < 0 && dy > 0) {
		pan_mapLyr.clipTo(pan_mapTop-pan_mouseDownY, pan_xmax-pan_mapLeft, pan_ymax-pan_mapTop-dy, -dx);
	} else {
		pan_mapLyr.clipTo(-dy, pan_xmax-pan_mapLeft, pan_ymax-pan_mapTop, -dx);						
	}
	pan_mapLyr.moveTo(pan_mapLeft + dx, pan_mapTop + dy);
	pan_mapLyr.show();

}

function pantoolGetMouseDownX () {
	return (pan_mouseDownX-pan_mapLeft);
}
function pantoolGetMouseDownY () {
	return (pan_mouseDownY-pan_mapTop);
}
function pantoolGetMouseUpX () {
	return (pan_mouseUpX-pan_mapLeft);
}
function pantoolGetMouseUpY () {
	return (pan_mouseUpY-pan_mapTop);
}

function pantoolMouseOnMap (x, y) {
	if (x < pan_mapLeft || x > pan_xmax || y < pan_mapTop && y > pan_ymax) {
		return false;
	}
	return true;
} 
function pantoolMouseDown (e) {
	if ((ns4 && e.which == 1) || (ns6 && e.button == 0) || ((ie4 || ie5) && window.event.button == 1)) {
    	var x = (ns4 || ns6)? e.pageX : event.x;
        var y = (ns4 || ns6)? e.pageY : event.y+document.body.scrollTop;
		if (pan_started) {
			pan_mouseDownX = x;
			pan_mouseDownY = y;
			pan_dragActive = true;
		}
		return false;
	}
	return true;

}
function pantoolMouseUp (e) {
	if ((ns4 && e.which == 1) || (ns6 && e.button == 0) || ((ie4 || ie5) && window.event.button == 1)) {
    	var x = (ns4 || ns6)? e.pageX : event.x;
        var y = (ns4 || ns6)? e.pageY : event.y+document.body.scrollTop;		
		if (pan_started) {
			pan_mouseUpX = x;
			pan_mouseUpY = y;
			if (pan_handlerFunction != null) {
				eval(pan_handlerFunction);
			}
			pan_dragActive = false;
		}
		return false;
	}
	return true;
}
function pantoolMouseMove (e) {
	if ((ns4 && e.which == 1) || (ns6 && e.button == 0) || ((ie4 || ie5) && window.event.button == 1)) {
    	var x = (ns4 || ns6)? e.pageX : event.x;
        var y = (ns4 || ns6)? e.pageY : event.y+document.body.scrollTop;	
		
		if ((ie4 || ie5) && !pantoolMouseOnMap(x, y)) return false;
		if (pan_started && pan_dragActive) {
			pantoolPanMap(x,y);
		}
		return false;
	}
	return true;	

}
