<%@ taglib uri='/WEB-INF/igeotemplates/jsp/tld/template.tld' prefix='igeo' %>
<%@ page import="org.deegree.framework.util.StringTools" %>

<%
	String portletID = request.getParameter( "PORTLETID" );
	String width = request.getParameter( "width" );
	String height = request.getParameter( "height" );
	
	String pid = StringTools.replace( portletID, "-", "", true );
%>

<html>
	<SCRIPT LANGUAGE="JavaScript1.2" TYPE="text/javascript" src="../javascript/igeoportal/dragbox.js"></SCRIPT>

	<SCRIPT LANGUAGE="JavaScript1.2" TYPE="text/javascript" src="../javascript/igeoportal/geometries.js"></SCRIPT>
	<SCRIPT LANGUAGE="JavaScript1.2" TYPE="text/javascript" src="../javascript/igeoportal/envelope.js"></SCRIPT>
	<SCRIPT LANGUAGE="JavaScript1.2" TYPE="text/javascript" src="../javascript/igeoportal/geotransform.js"></SCRIPT>
	<script LANGUAGE="JavaScript1.2" TYPE="text/javascript" src="../javascript/igeoportal/wz_jsgraphics.js"></script>
	<script LANGUAGE="JavaScript1.2" TYPE="text/javascript" src="../javascript/igeoportal/digitizer.js"></script>

	<script type="text/javascript">
		<!--
			var box = null;
			var digitizer = null;
			var isNav = navigator.appName.indexOf("Netscape") >= 0;
			var initX = 0;
			var initY = 0;
			var evnt = 0;
			
			// variables for drag&drop
			var isDragging = false;
			var grabbedX = 0;
			var grabbedY = 0;
			
			var firstDigitzPoint = true;
			
			function init() {

                parent.mapWindowPortlet<% out.print( portletID ); %>.setDocument( document );
				parent.mapWindowPortlet<% out.print( portletID ); %>.paint();
				if ( isNav ) {
					onmousemove = moveMouse;
					onmousedown = mouseDown;
					onmouseup = mouseUp;
					ondblclick = dblclick;
				} else {
					window.document.onmousemove = moveMouse;
					var layer = window.document.all[0];
					document.onmousedown = mouseDown;
					layer.onmouseup = mouseUp;
					layer.ondblclick = dblclick;
				}

				initDragBox(<%=width%>, <%=height%>, 0, 0, '#FF0000' );
				initMeasurementLine(<%=width%>, <%=height%>, 0, 0, '#FF0000' );				
				
			}		
			
			function kill() {
				removeDragBox();
				removeMeasurementLine();
			}	
			
			function initDragBox(layWidth, layHeight, hspc, vspc, zoomBoxColor) {
				removeDragBox();
				var db = parent.mapWindowPortlet<% out.print( portletID ); %>.dragBox;
				if ( db == null ) {
					box = new DragBox (layWidth, layHeight, hspc, vspc, zoomBoxColor);
					box.setDocument(document);					
					box.init();
					parent.mapWindowPortlet<% out.print( portletID ); %>.setDragBox(box);
				}
			}

			function initMeasurementLine(layWidth, layHeight, hspc, vspc, drawColor) {
			
				removeMeasurementLine();
				digitizer = parent.mapWindowPortlet<% out.print( portletID ); %>.digitizer;
				if ( digitizer == null ) {
					digitizer = new Digitizer(layWidth, layHeight, hspc, vspc, drawColor);
					digitizer.setDocument(document);					
					digitizer.init();
					parent.mapWindowPortlet<% out.print( portletID ); %>.setDigitizer( digitizer );
				}
			}
									
			function removeDragBox() {
				var db = parent.mapWindowPortlet<% out.print( portletID ); %>.dragBox;
				if ( db != null ) {
					db.kill();
					box = null;
				}
			}
			
			function removeMeasurementLine() {
				var digitizer = parent.mapWindowPortlet<% out.print( portletID ); %>.digitizer;
				if ( digitizer != null ) {
					digitizer.kill();
					digitizer = null;
				}
			}
			
			function clearDragBox() {
				var db = parent.mapWindowPortlet<% out.print( portletID ); %>.dragBox;
				if ( db != null ) {
					db.clear();
				}
			}
			
			function clearLine() {
			
				var digitizer = parent.mapWindowPortlet<% out.print( portletID ); %>.digitizer;
				if ( digitizer != null ) {
					digitizer.clear();
				}
			}
			
			function mouseDown(e) {

				if ( !isNav ) {
					// microsoft IE special!!!
					var layer = window.document.all[0];
					layer.setCapture();                
				}
				

				var mode = parent.mapWindowPortlet<% out.print( portletID ); %>.getMode() ;

				if ( mode.indexOf( 'ZOOMIN' ) > -1 ) {
					evnt = 0;
					var xy = getEventCoordinates(e);
					box.mapTool( xy[0], xy[1]);                
				} else if ( mode.indexOf( 'ZOOMOUT' ) > -1 ) {
					evnt = 1;
				} else if ( mode.indexOf( 'MOVE' ) > -1 ) {
					evnt = 2;
					var xy = getEventCoordinates(e);
					initX = xy[0];
					initY = xy[1];                
				} else if ( mode.indexOf(  'RECENTER' ) > -1 ) {
					isDragging = true;
					var xy = getEventCoordinates(e);
					grabbedX = xy[0];
					grabbedY = xy[1];
					evnt = 3;
				} else if ( mode.indexOf( 'FEATUREINFO' ) > -1 ) {
					evnt = 4;
				} else if ( mode.indexOf( 'ANNOTATE' ) > -1 ) {
					evnt = 5;
					
				} else if ( mode.indexOf( 'MEASURELEN' ) > -1 ) {			
					evnt = 6;
					var xy = getEventCoordinates(e);
					digitizer.startDigitize( xy[0], xy[1]);  
					if( firstDigitzPoint ){
						var bbox = parent.mapWindowPortlet<% out.print( portletID ); %>.getBoundingBox();
						var gt = new GeoTransform( bbox.minx, bbox.miny, bbox.maxx, bbox.maxy, 0, 0, 
								parent.mapWindowPortlet<% out.print( portletID ); %>.getWidth(), 
								parent.mapWindowPortlet<% out.print( portletID ); %>.getHeight() );
						
						setCurrentCoords( gt.getSourceX( xy[0] ), gt.getSourceY( xy[1] ) );							
						firstDigitzPoint = false;
					}
					 
				} else {
					evnt = -1;
				}
				
			}
			
			function mouseUp(e) {
			
				var bbox = parent.mapWindowPortlet<% out.print( portletID ); %>.getBoundingBox();
				var gt = new GeoTransform( bbox.minx, bbox.miny, bbox.maxx, bbox.maxy, 0, 0, 
							parent.mapWindowPortlet<% out.print( portletID ); %>.getWidth(), 
							parent.mapWindowPortlet<% out.print( portletID ); %>.getHeight() );

				if ( evnt == 0 ) {
					box.chkMouseUp( );					
					var zoombox = box.getZoomBox();
					if ( zoombox.maxx - zoombox.minx  < 5 || zoombox.ymax - zoombox.ymin < 5 ) {
						var x = gt.getSourceX( zoombox.minx );
						var y = gt.getSourceY( zoombox.miny );
						parent.mapWindowPortlet<% out.print( portletID ); %>.zoomByPoint( x, y, -25 );
					} else {
						var x1 = gt.getSourceX( zoombox.minx );
						var y1 = gt.getSourceY( zoombox.miny );
						var x2 = gt.getSourceX( zoombox.maxx );
						var y2 = gt.getSourceY( zoombox.maxy );
						if ( x1 > x2 ) {
							var t = x1;
							x1 = x2;
							x2 = t;
						}
						if ( y1 > y2 ) {
							var t = y1;
							y1 = y2;
							y2 = t;
						}
						var env = new Envelope( x1, y1, x2, y2 );
						parent.mapWindowPortlet<% out.print( portletID ); %>.setBoundingBox( env );						
					}
				} else if ( evnt == 1 ) {
					var xy = getEventCoordinates(e);
					var x = gt.getSourceX( xy[0] );
					var y = gt.getSourceY( xy[1] );
					parent.mapWindowPortlet<% out.print( portletID ); %>.zoomByPoint( x, y, 50 );
				} else 
				if ( evnt == 2 ) { // move
                    
                    var xy = getEventCoordinates(e);
                    var d = new Array( (xy[0] - initX),(xy[1] - initY) );                   
                    var xmin = gt.getSourceX( -1*d[0] );
                    var ymax = gt.getSourceY( -1*d[1] );
                    var mEnv = parent.mapWindowPortlet<% out.print( portletID ); %>.getBoundingBox();
                    var bb = new Envelope( xmin, ymax-(mEnv.maxy-mEnv.miny), xmin+ (mEnv.maxx-mEnv.minx), ymax );
                    parent.mapWindowPortlet<% out.print( portletID ); %>.setBoundingBox( bb );  
                    
				} else if ( evnt == 3 ) { // recenter
					var xy = getEventCoordinates( e ); 
					var x = gt.getSourceX( xy[0] );
					var y = gt.getSourceY( xy[1] );
					parent.mapWindowPortlet<% out.print( portletID ); %>.zoomByPoint( x, y, 0 );
				} else if ( evnt == 4 ) {
					var xy = getEventCoordinates(e); 
					parent.mapWindowPortlet<% out.print( portletID ); %>.doFeatureInfo( xy[0], xy[1] );
				} else if ( evnt == 5 ) {
				//	var xy = getEventCoordinates(e); 
				//	//parent.mapWindowPortlet<% out.print( portletID ); %>.doAnnotation( xy[0], xy[1] );
				//	parent.setAnnotationCoordinates( xy[0], xy[1] );
					
					
				} else if ( evnt == 6  ) {//MEASURE 
					digitizer.chkMouseUp( );		
					var xy = getEventCoordinates(e); 
					var gt = new GeoTransform( bbox.minx, bbox.miny, bbox.maxx, bbox.maxy, 0, 0, 
							parent.mapWindowPortlet<% out.print( portletID ); %>.getWidth(), 
							parent.mapWindowPortlet<% out.print( portletID ); %>.getHeight() );
					
					setCurrentCoords( gt.getSourceX( xy[0] ), gt.getSourceY( xy[1] ) );							
					
				}
				if ( !isNav ) {
					// microsoft IE special!!!
					var layer = window.document.all[0];
					layer.releaseCapture();
					document.onmousedown = mouseDown;
				}            
				
				if( evnt != 6 ){ //keep measurement state
					evnt = -1;
				}
			}
			
			function moveMouse(e) {
			   var bbox = parent.mapWindowPortlet<% out.print( portletID ); %>.getBoundingBox();

			   var xy = getEventCoordinates(e);
				 
			   if ( evnt == 0 ) {
                   if ( box != null ) {
						box.getMouse( xy[0], xy[1] );
				   } 
				} else  if ( evnt == 2 ) {
                   var k = 0;
						var hl = document.getElementById( "mapid0" ); 
						while ( hl != null ) {
							hl.style.left = xy[0] - initX;
							hl.style.top = xy[1] - initY;
							k++;
							hl = document.getElementById( "mapid" + k ); 
						}
               } else if ( evnt == 6 ) {
					digitizer.getMouse( xy[0], xy[1] );		
					digitizer.setDrawClosedPoly( drawClosed() );
					updateLengthDisplay( xy );
					
			   } 
				
				updateCoordsDisplay( xy );
			}
			
			function dblclick(e) {

				var bbox = parent.mapWindowPortlet<% out.print( portletID ); %>.getBoundingBox();
				var gt = new GeoTransform( bbox.minx, bbox.miny, bbox.maxx, bbox.maxy, 0, 0, 
							parent.mapWindowPortlet<% out.print( portletID ); %>.getWidth(), 
							parent.mapWindowPortlet<% out.print( portletID ); %>.getHeight() );

				setDigitizerValue( digitizer, gt );
				firstDigitzPoint = true;

			}
			
			function getEventCoordinates(e) {
				var x  = 0;
				var y  = 0;
				if ( this.isNav ) {
					x = e.layerX;
					y = e.layerY;
				} else {
					if ( evnt == 2 ) {
						x = window.event.screenX;
						y = window.event.screenY;
					} else {
						x = window.event.offsetX;
						y = window.event.offsetY;
					}
				}
				return new Array( x, y);
			}
						
			function updateCoordsDisplay( xy ){
				if( parent.setCoordsValue != null ){

					var bbox = parent.mapWindowPortlet<% out.print( portletID ); %>.getBoundingBox();
					var gt = new GeoTransform( bbox.minx, bbox.miny, bbox.maxx, bbox.maxy, 0, 0, 
								parent.mapWindowPortlet<% out.print( portletID ); %>.getWidth(), 
								parent.mapWindowPortlet<% out.print( portletID ); %>.getHeight() );
	
					var x = gt.getSourceX( xy[0] );
					var y = gt.getSourceY( xy[1] );			
				
					parent.setCoordsValue( x, y );
				}
			}
			
			function setCurrentCoords( x, y ){
				if( parent.setCurrentCoordsValues != null ){
					parent.setCurrentCoordsValues(  x, y );
				}
			}
			
			function updateLengthDisplay( xy ){
				if( parent.setPartialCoordsValue != null ){
					var bbox = parent.mapWindowPortlet<% out.print( portletID ); %>.getBoundingBox();
			
					var gt = new GeoTransform( bbox.minx, bbox.miny, bbox.maxx, bbox.maxy, 0, 0, 
					parent.mapWindowPortlet<% out.print( portletID ); %>.getWidth(), 
					parent.mapWindowPortlet<% out.print( portletID ); %>.getHeight() );

					var x = gt.getSourceX( xy[0] );
					var y = gt.getSourceY( xy[1] );
					
					parent.setPartialCoordsValue( x, y );	
					
				}						
			}
		
			function setDigitizerValue( dig, gt ) {
				if( parent.setDigitizer != null ){
					parent.setDigitizer( dig, gt );
				}
			}			
			
			function drawClosed(){
				if( parent.isMeasuringLength() != null ){
					return !parent.isMeasuringLength();
				}
				return false;
			}
			
		-->
	</script>
	<body onload="init();" onunload="kill();">

	</body>	
</html>