var BoxColor ="#006633" // "#000000";	// color of box
var BoxSize = 1;	// box line width;


// Global vars
var iWidth = 400;	// image width (default)
var iHeight = 300;	// image height (default)
var hspc = 0;		// horizontal image offset
var vspc = 0;		// vertical image offset
var ovBoxSize = 2;	// Zoombox line width;
var zbMapImage = "MapImage"; // default

var MODE_BOX = 1;
var currMode = MODE_BOX;

var zooming = false;

var mouseX=0;
var mouseY=0;
var x1=0;
var y1=0;
var x2=0;
var y2=0;
var zleft=0;
var zright=0;
var ztop=0;
var zbottom=0;


// Global vars for browser type and version
var isNav = (navigator.appName.indexOf("Netscape")>=0);
var isNav4 = false;
var isIE4 = false;
var is5up = false;

if (isNav) {
	if (parseFloat(navigator.appVersion)<5) {
		isNav4=true;
	} else {
		is5up = true;
	}
} else {
	isIE4=true;
	if (navigator.appVersion.indexOf("MSIE")>0) {
		isIE4 = false;
		is5up = true;
	}
}

function initZoomBox(iMapWidth, iMapHeight, MapImageName)
{
		iWidth = iMapWidth;
		iHeight = iMapHeight;
		zbMapImage = MapImageName;
		
		// zoom/selection box
		content = '<img name="zoomImageTop" src="pixel.gif" width=1 height=1>';
		createLayer("zoomBoxTop",0,0,iWidth,iHeight,false,content);
		content = '<img name="zoomImageLeft" src="pixel.gif" width=1 height=1>';
		createLayer("zoomBoxLeft",0,0,iWidth,iHeight,false,content);
		content = '<img name="zoomImageRight" src="pixel.gif" width=1 height=1>';
		createLayer("zoomBoxRight",0,0,iWidth,iHeight,false,content);
		content = '<img name="zoomImageBottom" src="pixel.gif" width=1 height=1>';
		createLayer("zoomBoxBottom",0,0,iWidth,iHeight,false,content);

		content = '<img name="MeasureImageBottom" src="pixel.gif" width=1 height=1>';
		createLayer("MeasureImageBottom",0,0,iWidth,iHeight,false,content);

		// set zoom box color
		setLayerBackgroundColor("zoomBoxTop", BoxColor);
		setLayerBackgroundColor("zoomBoxLeft", BoxColor);
		setLayerBackgroundColor("zoomBoxRight", BoxColor);
		setLayerBackgroundColor("zoomBoxBottom", BoxColor);

		setLayerBackgroundColor("MeasureImageBottom", "#FF3333");

		if (isNav) {
			document.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE | Event.MOUSEUP);
		}

		document.onmousedown = mapTool;
		document.onmouseup = chkMouseUp;
		document.onmousemove = getMouse;

		updateZoomBoxCursor();
	
}

function setZoomBoxMode(mode)
{
	// Seems to be unused ..... Ahmed
	if ( mode == MODE_BOX)
	{
		currMode = mode;
		updateZoomBoxCursor();
	} else 
	{
		alert("Other Mode")
	}
}


/****************************************************************************************
DHTML layer functions
****************************************************************************************/

// Create a DHTML layer
function createLayer(name, inleft, intop, width, height, visible, content) {
	  var layer;
	  if (isNav4) {
	    document.writeln('<layer name="' + name + '" left=' + inleft + ' top=' + intop + ' width=' + width + ' height=' + height +	' visibility=' + (visible ? '"show"' : '"hide"') +  '>');
	    document.writeln(content);
	    document.writeln('</layer>');
	  } else {
	    document.writeln('<div id="' + name + '" style="position:absolute;  left:' + inleft + 'px; top:' + intop + 'px; width:' + width + 'px; height:' + height + 'px;' + '; z-index:0; visibility:' + (visible ? 'visible;' : 'hidden;'));
	    document.writeln(content);
	    document.writeln('</div>');
		
	  }
}

// get the layer object called "name"
function getLayer(name) {
	  if (isNav4)
	    return(document.layers[name]);
	  else if (isIE4) {
	    layer = eval('document.all.' + name + '.style');
	    return(layer);
	  } else if (is5up) {
		var theObj = document.getElementById(name);
		return theObj.style
	  }
	  else
	    return(null);
}

function isVisible(name) {
	  var layer = getLayer(name);
	  if (layer != null) {
		  if (isNav && layer.visibility == "show")
		    return(true);
		  if (isIE && layer.visibility == "visible")
		    return(true);
	  }
	  return(false);
}

// move layer to x,y
function moveLayer(name, x, y) {
	var layer = getLayer(name);
	if (layer != null) {
		if (isNav4)
		layer.moveTo(x, y);
		else {
			// layer.left = x + 2 + "px";
			// layer.top  = y +2 + "px";

			layer.left = x + "px";
			layer.top  = y  + "px";
		}
	}
}

// set layer background color
function setLayerBackgroundColor(name, color) {
	var layer = getLayer(name);
    if (layer != null) {
		if (isNav4)
		layer.bgColor = color;
		else
		layer.backgroundColor = color;
	}
}

// toggle layer to invisible
function hideLayer(name) {
	var layer = getLayer(name);
	if (layer != null) {
		if (isNav4)
		layer.visibility = "hide";
		else
			 layer.visibility = "hidden";
	}
}

// toggle layer to visible
function showLayer(name) {
	var layer = getLayer(name);
	if (layer != null) {
		if (isNav4)
		layer.visibility = "show";
		else
		 layer.visibility = "visible";
	}
}

// clip layer display to clipleft, cliptip, clipright, clipbottom
	// Not working with Mozilla Milestone 12 (Nav5)
function clipLayer(name, clipleft, cliptop, clipright, clipbottom) {
	  var layer = getLayer(name);
	  if (layer == null) return;
	  if (isNav4) {
		    layer.clip.left   = clipleft;
		    layer.clip.top    = cliptop;
		    layer.clip.right  = clipright;
		    layer.clip.bottom = clipbottom;
	  }
	  else {
		    layer.clip = 'rect(' + cliptop + ' ' +  clipright + ' ' + clipbottom + ' ' + clipleft +')';
	  }
}

function boxIt(theLeft,theTop,theRight,theBottom) {
		
		clipLayer("zoomBoxTop",theLeft,theTop,theRight,theTop+ovBoxSize);
		clipLayer("zoomBoxLeft",theLeft,theTop,theLeft+ovBoxSize,theBottom);
		clipLayer("zoomBoxRight",theRight-ovBoxSize,theTop,theRight,theBottom);
		clipLayer("zoomBoxBottom",theLeft,theBottom-ovBoxSize,theRight,theBottom);
		
		//clipLayer("MeasureImageBottom",theLeft,theBottom-ovBoxSize,theRight,theBottom); 

		showLayer("zoomBoxTop");
		showLayer("zoomBoxLeft");
		showLayer("zoomBoxRight");
		showLayer("zoomBoxBottom");

		//showLayer("MeasureImageBottom");
		
}


/****************************************************************************************
Navigation functions - used to resize zoom box
****************************************************************************************/

// get cursor location
function getImageXY(e) {
	if (isNav) {
		mouseX=e.pageX;
		mouseY=e.pageY;
	} else {
		mouseX=event.clientX + document.body.scrollLeft-2;		
		mouseY=event.clientY + document.body.scrollTop-2;
	}
	// subtract offsets from page left and top
	mouseX = mouseX-hspc;
	mouseY = mouseY-vspc;

}


// start zoom in
function startZoomBox(e) {
	getImageXY(e);
	// keep it within the MapImage
	if ((mouseX<iWidth) && (mouseY<iHeight)) {
		
		if (zooming) {
			stopZoomBox(e);
		} else {
			x1=mouseX;
			y1=mouseY
			x2=x1+1;
			y2=y1+1;
			zleft=x1;
			ztop=y1;
			zbottom=y1;
			zright=x1
			boxIt(x1,y1,x2,y2);
			zooming=true;

		}
	}
	return false;

}

// stop zoom box display
function stopZoomBox(e) {
	zooming=false;

	if ( (zright <zleft+2) && (ztop < zbottom+2) )
	{
		zright = zleft;
		zbottom = ztop;
	}

	hideLayer("zoomBoxTop");
	hideLayer("zoomBoxLeft");
	hideLayer("zoomBoxRight");
	hideLayer("zoomBoxBottom");
	window.scrollTo(0,0);

	return true;
}

// get the coords at mouse position

function getMouse(e) {
	 window.status="";
	 getImageXY(e);

	 if (mouseX>iWidth)
	  mouseX = iWidth - 1;
	 if (mouseY>iHeight)
	  mouseY = iHeight - 1;
	 if (mouseX<=0)
	  mouseX = 1;
	 if (mouseY<=0)
	  mouseY = 1;


	 if (zooming) {
	  x2=mouseX;
	  y2=mouseY;
	  setClip();

			// Not Yet Implemented -- Ahmed
			//StrMeasure(mouseX,mouseY);


  return false;
 }


 return true;
}



// clip zoom box layer to mouse coords
function setClip() {
		
		// If not Zoom IN the Exit
		if ((top.main.MapForm.Command.value!="ZoomIn") && (top.main.MapForm.Command.value!="ZoomOut") && (top.main.MapForm.Command.value!="ZOOMIN") && (top.main.MapForm.Command.value!="ZOOMOUT"))
			{return;}

	var tempX=x1;
	var tempY=y1;
	if (x1>x2) {
		zright=x1;
		zleft=x2;
	} else {
		zleft=x1;
		zright=x2;
	}
	if (y1>y2) {
		zbottom=y1;
		ztop=y2;
	} else {
		ztop=y1;
		zbottom=y2;
	}

	if ((x1 != x2) && (y1 != y2)) {
		boxIt(zleft,ztop,zright,zbottom);
	}
}

//-------- Adding Splash Image ------ Ahmed Saad
function ShowSplash(){ 
	MouseClicked = 1
	// Must Set Condition for Showing the Splash Image
	showhideInfor('SplashIMG')
}

function showhideInfor(TheElem) { // --------Show Hide Div By Sending The Name ; Ahmed Saad------
		if (document.all) { //IS IE 4 or 5 (or 6 beta)
			if (document.all(TheElem).style.display == "none"){
				eval( "document.all(TheElem).style.display = 'block'");
			} else {
				eval( "document.all(TheElem).style.display = 'none'");
			}
		}
		if (document.layers) { //IS NETSCAPE 4 or below
			if (document.layers[TheElem].display == "none"){
				document.layers[TheElem].display = "block";
			} else {
				document.layers[TheElem].display = "none";
			}
		}
		if (document.getElementById && !document.all) {
			maxWorking = document.getElementById(TheElem);
			if (maxWorking.style.display == "none"){
				maxWorking.style.display = "blcok";
				} else {
				maxWorking.style.display = "none";
			}
		}
	}

/****************************************************************************************
Click/Mouse functions - used to catch mouse button events
****************************************************************************************/

// check for mouseup
function chkMouseUp(e) { //---Ahmed Saad
//ShowSplash()

if ((currMode == MODE_BOX) && (zooming)) {
		stopZoomBox(e);

if (zleft == zright && ztop == zbottom)
			onZoomXY(zleft, ztop);
		else
			onZoomBox(zleft, ztop, zright, zbottom);
	}

	return false;
}

// perform appropriate action with mapTool
function mapTool (e) {
	// check mouse left button
	var button;
	if (document.layers) { button = e.which; }
	else 
	{	
		if (!isNav)
			button = event.button;
		else
			button = (e.button == 0 ? 1 : 0);			
	}

	// alert(event.button)  ... 2=left-button ... 1=right-button
	if( button != 1)  return;

	// adjust left-top
	onResize();

	getImageXY(e);

	if ( (currMode == MODE_BOX) && (!zooming) && (mouseX>=0)
		 && (mouseX<iWidth) && (mouseY>=0) && (mouseY<iHeight)) {
		startZoomBox(e);
		return false;
	} else if (zooming) {
		getMouse(e);
		stopZoomBox(e);
	}

	return false;
}


function onResize()
{	
	

	var MapImg = document.images[zbMapImage];
	if (MapImg == null) return;

	if( document.all)
	{
		// Yes --------
		vspc = 0; //custom values
		hspc = 0;
		var element = MapImg;

		do
		{	
			hspc += element.offsetLeft;
			vspc += element.offsetTop;
		}
		while( (element = element.offsetParent))
	}
	else
	{
		hspc = MapImg.x;
		vspc = MapImg.y;
	}

	moveLayer( "zoomBoxTop", hspc, vspc);
	moveLayer( "zoomBoxLeft", hspc, vspc);
	moveLayer( "zoomBoxRight", hspc, vspc);
	moveLayer( "zoomBoxBottom", hspc, vspc);

	moveLayer( "MeasureImageBottom", hspc, vspc);

}

function updateZoomBoxCursor()
{
  if (!is5up) return;

  var MapImg = document.images[zbMapImage];
  if (MapImg == null) return;
	
  switch (currMode)
  {
    case MODE_BOX:
		//alert("BOX")
		MapImg.style.cursor = "crosshair";
		break;
	default:
		//alert("Selecting")
		MapImg.style.cursor = "default";
  }
}


