var mapleft, maptop, mapright, mapbottom, mapwidth, mapheight;
var scrollX, scrollY, click1X, click1Y, click2X, click2Y, geo1X, geo1Y, geo2X, geo2Y;
var isNavigating = false;
var rectCreated;
var URLString;

// initialize the dragging of a rectangle on the map
function initMap(mw, mh, imgNam) {
	mapwidth = mw;	
	mapheight = mh;
	ImageName = imgNam;
	setNavEventCapture();
	document.onmousedown = startIt;
	document.onmousemove = dragIt;
	document.onmouseup = stopIt;
	
	if (bw.dom && bw.ie) {
		imgObj = document.getElementById(imgNam);
		if (imgObj) {
			imgObj.oncontextmenu = function(){return false};
		}
	}
	
}

// for compatibility with NS

function setNavEventCapture() {
	if (!bw.ie && !bw.dom) {
		document.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE | Event.MOUSEUP)
	}
}

function hideddrivetip() {
}
// start dragging the mouse while mousedown
function startIt(evt) {


	if (bw.ie && (window.event.srcElement.tagName != "IMG" && window.event.srcElement.id != "mapIMG")) { 
		return true;
	}
	if (!bw.ie && (evt.target.tagName != "IMG" && evt.target.id != "mapIMG")) { //  || evt.target.tagName == "DIV" || evt.target.tagName == "TD"
		return true;
	}
	if (bw.ie && (window.event.srcElement.tagName == "AREA" || window.event.srcElement.tagName == "A")) {
		return true;
	}
	if (!bw.ie && (evt.target.tagName == "AREA" || evt.target.tagName == "A")) {
		return true;
	}

	
	hideddrivetip();
	
	if (GetPos(ImageName)) {
		click1X = 0;
		click1Y = 0;
		isNavigating = false;
		rectCreated = false;
		if (bw.ie) {
			click1X = window.event.clientX + scrollX
			click1Y = window.event.clientY + scrollY
		} else {
			click1X = evt.pageX
			click1Y = evt.pageY
		}
		if (click1X >= mapleft && click1X <= mapright && click1Y >= maptop && click1Y <= mapbottom) {
			isNavigating = true;
			return false
		} else {
			return true
		}
	} else {
		return false;
	}
}

function createRect() {
	rectCreated = true
	var obj = null;
    if (bw.dom) {       
		obj =  document.getElementById("popUpRect");
	} else if (!bw.ie && !bw.dom) {
		obj = document.popupRect.style;
	}
	if (bw.ie && !bw.opera) {
		obj.style.background = "#ffffff";
	}
	obj.style.top = click1Y;
	obj.style.left = click1X;       
	obj.style.width = 1;
	obj.style.height = 1;
	obj.style.visibility = "visible";
}

function deleteRect()  {
	click1X = 0;
	click1Y = 0;
	isNavigating = false;
	rectCreated = false;
	document.getElementById("popUpRect").style.visibility = "hidden";	
}

// execute while dragging the rectangle
function dragIt(evt) {
	if (isNavigating && !rectCreated)
		createRect();
		if (isNavigating == true) { // first click was inside the map
			if (bw.ie && bw.dom) {
				offsetX = window.event.clientX + scrollX;
				offsetY = window.event.clientY + scrollY;
				if (offsetX >= mapleft && offsetX <= mapright) { // mouse is over the map
				if (offsetX >= click1X) {  // mouse moves	right
					document.all.popUpRect.style.left = click1X + 3 ;
					document.all.popUpRect.style.width = offsetX - click1X;
				} else if (offsetX < click1X) { // mouse moves left
					if (offsetX < 0){ offsetX = 0; }
					document.all.popUpRect.style.left = offsetX - 3;
					document.all.popUpRect.style.width = click1X - offsetX;
				}
			} else if (bw.ie) { // mouse is not over the map
				if (offsetX >= click1X) { // mouse moves right
					document.all.popUpRect.style.left = click1X;
					document.all.popUpRect.style.width = mapright - click1X;
				} else if (offsetX < click1X) { // mouse moves left
					document.all.popUpRect.style.left = mapleft;
					document.all.popUpRect.style.width = click1X - mapleft;
				}
			}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// vertical
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
		if (offsetY >= maptop && offsetY <= mapbottom) { // mouse is over the map
			if (offsetY >= click1Y) { // mouse moves down
			   document.all.popUpRect.style.top = click1Y;
			   document.all.popUpRect.style.height = offsetY - click1Y;
			} else if (offsetY < click1Y) { // mouse moves up
			   document.all.popUpRect.style.top = offsetY - 3
			   document.all.popUpRect.style.height = click1Y - offsetY;
			}
		} else { // mouse is not over the map
			if (offsetY >= click1Y) { // mouse moves down
				document.all.popUpRect.style.top = click1Y;
				document.all.popUpRect.style.height = mapbottom - click1Y;
			} else if (offsetY < click1Y) { // mouse moves up
				document.all.popUpRect.style.top = maptop
				document.all.popUpRect.style.height = click1Y - maptop ;
			}
		}
		return false
	} else if (!bw.ie && bw.dom) {
		  offsetX = evt.pageX
		  offsetY = evt.pageY
		//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
		// horizontal
		//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
		if (offsetX >= mapleft && offsetX <= mapright) { // mouse is over the map
			if (offsetX >= click1X) { // mouse moves	right
				document.getElementById("popUpRect").style.left = click1X;
				document.getElementById("popUpRect").style.width = offsetX - click1X;
			} else if (offsetX < click1X) { // mouse moves left
				if (offsetX < 0){offsetX = 0}
				document.getElementById("popUpRect").style.left = offsetX;
				document.getElementById("popUpRect").style.width = click1X - offsetX;
			}
		} else { // mouse is not over the map
			if (offsetX >= click1X) { // mouse moves right
			   document.getElementById("popUpRect").style.left = click1X;
			   document.getElementById("popUpRect").style.width = mapright - click1X - 3;
			} else if (offsetX < click1X) { // mouse moves left
				document.getElementById("popUpRect").style.left = mapleft;
				document.getElementById("popUpRect").style.width = click1X - mapleft;
			}
		}
		//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
		// vertical
		//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
		if (offsetY >= maptop && offsetY <= mapbottom) { // mouse is over the map
			if (offsetY >= click1Y) { // mouse moves down
				document.getElementById("popUpRect").style.top = click1Y;
				document.getElementById("popUpRect").style.height = offsetY - click1Y;
			} else if (offsetY < click1Y) { // mouse moves up
				document.getElementById("popUpRect").style.top = offsetY;
				document.getElementById("popUpRect").style.height = click1Y - offsetY;
			}
		} else { // mouse is not over the map
			if (offsetY >= click1Y) { // mouse moves down
				document.getElementById("popUpRect").style.top = click1Y;
				document.getElementById("popUpRect").style.height = mapbottom - click1Y - 3;
			} else if (offsetY < click1Y) { // mouse moves up
				document.getElementById("popUpRect").style.top = maptop;
				document.getElementById("popUpRect").style.height = click1Y - maptop;
			}
		}
		return false
	}
	} else { // first click was outside the map
		return true
	}
}


// fires when mouseup: calculate the dragged rectangle and requests a new page
function stopIt(evt) {
	if (isNavigating == true) {
		if (bw.ie) {
			evt = window.event
			click2X = window.event.clientX + scrollX
			click2Y = window.event.clientY + scrollY
			if (click2X >= mapleft && click2X <= mapright && click2Y >= maptop && click2Y <= mapbottom) {
				//
		    } else {
				if (click2X < mapleft) {click2X = mapleft}
		    	else if (click2X > mapright) {click2X = mapright}
			    if (click2Y < maptop) {click2Y = maptop}
			    else if (click2Y > mapbottom) {click2Y = mapbottom}
		    }
		} else if (!bw.ie) {
			click2X = evt.pageX
			click2Y = evt.pageY
			if (click2X >= mapleft && click2X <= mapright && click2Y >= maptop && click2Y <= mapbottom) {
				//
			} else {
 				if (click2X < mapleft) {click2X = mapleft} else if (click2X > mapright) {click2X = mapright}
				if (click2Y < maptop)  {click2Y = maptop}  else if (click2Y > mapbottom) {click2Y = mapbottom}
		    }
		} 
		geo1X = click1X - mapleft;
		geo2X = click2X - mapleft;
		geo1Y = click1Y - maptop;
		geo2Y = click2Y - maptop;
		SetBoundingBox(evt, geo1X,geo1Y,geo2X,geo2Y);
		
		
		isNavigating = false
		document.forms[0].task.value = 'zoom';
		document.forms[0].submit();
	}
}

function SetBoundingBox(evt, x1, y1, x2, y2) {
	frm = document.forms[0];	
	
	rect = frm["boundingbox"].value.split("_");
	
	_x1 = parseFloat(rect[0]); 
	_y1 = parseFloat(rect[1]); 
	_x2 = parseFloat(rect[2]); 
	_y2 = parseFloat(rect[3]);
	
	w = _x2 - _x1; 
	h = _y1 - _y2;
	var __x1, __y1, __x2, __y2;
	switch(evt.button) {
		case 0: 
		case 1: {
			fx = (x2 - x1) / mapwidth;
			fy = (y2 - y1) / mapheight;
			if (fx > 0.05 && fy > 0.05) { // zoomrect
				__x1 = (x1 *  w / mapwidth ) + _x1;
				__y1 = _y1 - (y1 * h / mapheight);
				__x2 = (x2 *  w / mapwidth ) + _x1;
				__y2 = _y1 - (y2 * h / mapheight);
			} else { // center
				x = (x1 + x2)/2;
				y = (y1 + y2)/2;
				fx = w/mapwidth;
				fy = h/mapheight;
				__x1 = _x1 + x*fx - w/2;
				__x2 = _x1 + x*fx + w/2;
				__y1 = _y1 - y*fy + h/2;
				__y2 = _y1 - y*fy - h/2;
			}
			break;
		}
		case 2: {
			__x1 = _x1 - w/2;
			__y1 = _y1 + h/2;
							
			__x2 = _x2 + w/2;
			__y2 = _y2 - h/2;
			break;
		}
	}

	
	frm["boundingbox"].value = Math.round(__x1) + "_" + Math.round(__y1) + "_" + Math.round(__x2) + "_" + Math.round(__y2);
	

}



function GetPos(objName)
{
	var obj = null;
	if (bw.dom) {
		obj = document.getElementById(objName);
	} else if (bw.ie) {
		obj = document.all[objName];
	} else {
		obj = eval('document.' + objName);
	}

	mapleft = 0;
	maptop = 0;
	
	scrollY = document.body.scrollTop;
	scrollX = document.body.scrollLeft;
	if (!obj) {
		return false;
	}
		
	while (obj.offsetParent != null) {
		maptop += obj.offsetTop;
		mapleft += obj.offsetLeft;
		obj = obj.offsetParent;
	}

	mapleft += obj.offsetLeft;
	maptop += obj.offsetTop;
	mapright = mapwidth + mapleft;
	mapbottom = mapheight + maptop;
	

	return true;
}



