﻿// JScript File
/**************************************  Polygon related function ****************************************/
function wirePolySearchEvents(e) {

    try {	   
    
        document.getElementById('myMap').style.visibility="";
        document.getElementById('myMap').style.height="300px";
               
        document.getElementById('divListView').innerHTML = "";
        
        if (blnFirstLoad == 1) {
            map = new VEMap('myMap');
            map.LoadMap();            		    
        }
        //alert('in poly wire');
        blnFirstLoad = 0;
        document.getElementById("polyPoints").innerHTML = "";
        try { map.DeleteAllShapes(); } catch (ex) { }
        try { shapeLayer.DeleteAllShapes(); } catch (ex) { }
        try { lineLayer.DeleteAllShapes(); } catch (ex) { }
        try { polyPinLayer.DeleteAllShapes(); } catch (ex) { }
               
        //map.SetCenterAndZoom(new VELatLong(42.506976262, -83.3590871), 13);    
        map.AttachEvent("onmouseup",MouseUpHandler);
        map.AttachEvent("onmousedown",MouseDownHandler);
        map.AttachEvent("onmousemove",MouseMoveHandler);
        map.AttachEvent("onmouseover",MouseOverHandler);
                	
        //load shapelayer
        if (!lineLayer) {
            lineLayer = new VEShapeLayer();
            lineLayer.SetTitle("lineLayer");
            map.AddShapeLayer(lineLayer);
        }
        
        if (!polyPinLayer) {
            polyPinLayer = new VEShapeLayer();
		    polyPinLayer.SetTitle("PlyPushpin");
		    map.AddShapeLayer(polyPinLayer);
		}	
    } catch (e) {
	    alert("wirePolySearchEvents Error:" + e.message);
    }
}

function MouseUpHandler(e) {
    /*if (e.leftMouseButton && down==1) {
        down=0;        
        polyPoints.push(origin);
        polygonSearch();  
        X=0;
        Y=0;
    }*/
    
}
        
function MouseDownHandler(e) {
//    alert('in poly mousedown');
    if (e.leftMouseButton) {

	    var strPolyPoints = document.getElementById('polyPoints').innerText;
		
		X = e.mapX;
		Y = e.mapY;
		var intShpCount = polyPinLayer.GetShapeCount();
		var point = map.PixelToLatLong(new VEPixel(X, Y));
		var pin = new VEShape(VEShapeType.Pushpin, point);
		
        var clickedShape = map.GetShapeByID(e.elementID);
		if (clickedShape) {
		    var tmpID = clickedShape.GetID();
		    if (tmpID == strPolyOriginID) {					
		        
			    writePolyPoints(point);
				polyPoints.push(point);
				
				if (down == 1) {						
                    map.DetachEvent("onmouseup", MouseUpHandler);
					map.DetachEvent("onmousedown", MouseDownHandler);
					map.DetachEvent("onmousemove", MouseMoveHandler);
					map.DetachEvent("onmouseover", MouseOverHandler);
					/*map.AttachEvent("onmousedown", onMouseDown);
					map.AttachEvent("onmouseover", onMouseOver);
					map.DetachEvent("onmousedown", onMouseDown);
		            map.DetachEvent("onmouseover", onMouseOver);*/
		            
		            
					//drawPolyFromPoints();
					down = 0;
					X = 0;
					Y = 0;
					blnPolyInProg = false;						
			    }
			    
			    getTransparenSeeData('1');
				return;  //true;
            }
        }
        
        if (intShpCount >= 1) {
	        pin.SetCustomIcon("<span style='font-family:Arial; font-size:x-small;" +
            "color:Black;' >" +
            "<TABLE><TR><TD><img  height='16' width='16' src='Images/bul1.gif'></TD></TR></TABLE>" +
            "</span>");
		    pin.SetZIndex(9999, 9999);
		    polyPinLayer.AddShape(pin);
	    } else {
	        pin.SetCustomIcon("<span style='font-family:Arial; font-size:x-small;" +
               "color:Black;' >" +
               "<TABLE><TR><TD><img  alt='left-click to finish polygon' id='polyFirstPoint' style='height:35px;width:35px;' src='Images/bul2.gif'></TD></TR></TABLE>" +
               "</span>");
	        pin.SetZIndex(9999, 9999);
		    polyPinLayer.AddShape(pin);
		    strPolyOriginID = pin.GetID();
		    blnPolyInProg = true;		
        }

	    writePolyPoints(point);

	    if (down == 0) {
	        //intialize the map and variables.           
		    //lineLayer.DeleteAllShapes();
		    polyPoints = new Array(0);

		    origin = point;
		    polyPoints.push(origin);
            down = 1;
        }

	    //add the new point to the array
        polyPoints.push(point);
        return true;	
    }
}

function onMouseOver(e) {
	
	return true;
	
}

function mouseMoveOverride(e) {

	if (e.leftMouseButton == true) {
		return true;
	}
	
	return false;
}

function disableMousePan(boolSwitch) {

	if (boolSwitch) {
		map.AttachEvent("onmousemove", mouseMoveOverride);
	} else {
		map.DetachEvent("onmousemove", mouseMoveOverride);
	}
}

function onMouseDown(e) {
    //disableMousePan(false);
}

function MouseDownHandler_1(e) {

    if (e.rightMouseButton) {
        X = e.mapX;
        Y = e.mapY;
               
        var point = map.PixelToLatLong(new VEPixel(X,Y));
               
        if(down == 0) {   
            //intialize the map and variables.           
            if (!map) return;
            lineLayer.DeleteAllShapes(); 
            polyPoints = new Array(0);
                   
            origin = point;
            polyPoints.push(origin);
            down=1;
        }
                  
        //add the new point to the array
        polyPoints.push(point);
    
        return true;
    }
}
        
function MouseMoveHandler(e) {
	if (down == 1) {
		var x = e.mapX;
		var y = e.mapY;

		var dx = Math.abs(X) - Math.abs(x);
		var dy = Math.abs(Y) - Math.abs(y);

		//do not want to redraw polygon unless we move a significant amount
		if (Math.abs(dx) > 5 || Math.abs(dy) > 5) {
			var latlong = map.PixelToLatLong(new VEPixel(x, y));

			try {
				polyPoints.pop();
				polyPoints.push(latlong);
			} catch (exc) { }

			drawSearchPolygon();
		}
	}
}


function doMapClick(e) {
//    alert('in domap');
	var nX = e.mapX;
	var nY = e.mapY;
	var zoom = map.GetZoomLevel();
	var ll = map.PixelToLatLong(new VEPixel(e.mapX, e.mapY));
	var bBox = map.GetMapView();
	var CONTROL_MAP = 1;
	var intMapControl = CONTROL_MAP;
    
    var rectMapView; 
	rectMapView = map.GetMapView();
	var topLeft = rectMapView.TopLeftLatLong;	
	var bottomRight = rectMapView.BottomRightLatLong;
	var strPoints = "";

	strPoints += topLeft + "|" + topLeft.Latitude + "," + bottomRight.Longitude + "|"
                 + bottomRight + "|" + bottomRight.Latitude + "," + topLeft.Longitude + "|" + topLeft;

	$get("mapPoints").innerHTML = strPoints;
	
}
      
//****************************************************************************************************/

function onEndPan(e) {
    //alert('in pan' + e);
      

    try {

        //if ((!blnFirstLoad) && blnMapView) {
        //if ((!blnFirstLoad)) {
        if ($get('divAddressSrch').style.visibility !="" && $get('divSchoolDistSrch').style.visibility !="" && $get('divMLSSrch').style.visibility !="" && $get('divPolygonSrch').style.visibility !="") {
            //alert("in EndPan");    
	        //doMapClick(e);
    	    
	        var nX = e.mapX;
	        var nY = e.mapY;
	        var zoom = map.GetZoomLevel();
	        //alert('1');
	        //var ll = map.PixelToLatLong(new VEPixel(e.mapX, e.mapY));
	        //var bBox = map.GetMapView();
	        var CONTROL_MAP = 1;
	        var intMapControl = CONTROL_MAP;
            //alert('2')
            var rectMapView; 
	        rectMapView = map.GetMapView();
	        var topLeft = rectMapView.TopLeftLatLong;	
	        var bottomRight = rectMapView.BottomRightLatLong;
	        var strPoints = "";
//alert('3');
	        strPoints += topLeft + "|" + topLeft.Latitude + "," + bottomRight.Longitude + "|"
                         + bottomRight + "|" + bottomRight.Latitude + "," + topLeft.Longitude + "|" + topLeft;

	        $get("mapPoints").innerHTML = strPoints;
        	getTransparenSeeData('1');
	        //alert('in map click = ' + strPoints);
	    }
	
    } catch (ex) { 
        alert('in exc');
    }

}

function onEndZoom(e) {
    
   /* alert(blnFirstLoad);
    if (blnFirstLoad !=0 && blnMapView) {
        alert("in EndZOOM");
	    GetMapViewMatches();
	}*/
	
	
	try {

        //if ((!blnFirstLoad) && blnMapView) {
        //if ((!blnFirstLoad)) {
        if ($get('divAddressSrch').style.visibility !="" && $get('divSchoolDistSrch').style.visibility !="" && $get('divMLSSrch').style.visibility !="" && $get('divPolygonSrch').style.visibility !="") {
            //alert("in EndPan");    
	        //doMapClick(e);
    	    
	        var nX = e.mapX;
	        var nY = e.mapY;
	        var zoom = map.GetZoomLevel();
	        //alert('1');
	        //var ll = map.PixelToLatLong(new VEPixel(e.mapX, e.mapY));
	        //var bBox = map.GetMapView();
	        var CONTROL_MAP = 1;
	        var intMapControl = CONTROL_MAP;
            //alert('2')
            var rectMapView; 
	        rectMapView = map.GetMapView();
	        var topLeft = rectMapView.TopLeftLatLong;	
	        var bottomRight = rectMapView.BottomRightLatLong;
	        var strPoints = "";
//alert('3');
	        strPoints += topLeft + "|" + topLeft.Latitude + "," + bottomRight.Longitude + "|"
                         + bottomRight + "|" + bottomRight.Latitude + "," + topLeft.Longitude + "|" + topLeft;

	        $get("mapPoints").innerHTML = strPoints;
        	getTransparenSeeData('1');
	        //alert('in map click = ' + strPoints);
	    }
	
    } catch (ex) { 
        alert('in exc');
    }

}

//******************************************************************************/      
      
function ClearPolygon(){
    
    document.getElementById("polyPoints").innerText = "";	
    strPolyOriginID = "";	
	down = 0;
	X = 0;
	Y = 0;
	
	try { lineLayer.DeleteAllShapes(); } catch (ex) { }
	try { shapeLayer.DeleteAllShapes(); } catch (ex) { }	
	try { polyPinLayer.DeleteAllShapes(); } catch (ex) { }
   
    if (!lineLayer) {
	    lineLayer = new VEShapeLayer();
		map.AddShapeLayer(lineLayer);
    }

	wirePolySearchEvents();	
} 

function GetMapViewMatches() {
    //alert('in poly getmapviewmatches');
	var rectMapView; 
	rectMapView = map.GetMapView();
	var topLeft = rectMapView.TopLeftLatLong;	
	var bottomRight = rectMapView.BottomRightLatLong;
	var strPoints = "";
	             
    strPoints += topLeft + "|" + topLeft.Latitude + "," + bottomRight.Longitude + "|"
                 + bottomRight + "|" + bottomRight.Latitude + "," + topLeft.Longitude + "|" + topLeft;
//alert(strPoints);
	$get("mapPoints").innerHTML = strPoints;
	//alert('poly2');
	if (document.getElementById("hdnPageSource").value == "1") {
//	    alert('poly3');
	    getTransparenSeeData('1');
	} else {	    
	    //alert(varBrowser);
	    /*document.getElementById('PageFooter').style.display="";     
	    if (varBrowser != "IE")  document.getElementById('footer').style.top = "1200px";	    */
	    /*if (varBrowser == "IE")  {
	        document.getElementById('PageFooter').style.display="";     
	        document.getElementById('footer').style.display="";     
	    } else {
	        document.getElementById('PageFooter').style.display="none";     
	    } */  
	}
    
    if (!map) return;
	//map.DeleteAllShapes();

}

function drawPolygon() {
//    alert('in poly drawpoly');
    //remove the polygon that is on the map
    if (!map) return;
    lineLayer.DeleteAllShapes();
            
    //draw polyline if there is only two points in the array
    if(polyPoints.length<3) {
        var polygon = new VEShape(VEShapeType.Polyline, polyPoints);
    } else {
        //create a new polygon
        var polygon = new VEShape(VEShapeType.Polygon, polyPoints);
    }
            
    polygon.HideIcon();
            
    //draw the new polygon on the map
    lineLayer.AddShape(polygon); 
}

function drawSearchPolygon() {
    
	//remove the polygon that is on the map		
	if (!lineLayer) {
	    lineLayer = new VEShapeLayer();	    
	} else {
	    if (!map) return;
	    lineLayer.DeleteAllShapes();	    
	}

	//draw polyline if there is only two points in the array
	if (polyPoints.length < 3) {
		var polygon = new VEShape(VEShapeType.Polyline, polyPoints);
	} else {
		//create a new polygon
		var polygon = new VEShape(VEShapeType.Polygon, polyPoints);
	}

	polygon.HideIcon();

	//draw the new polygon on the map
	lineLayer.AddShape(polygon);
}

function popPolyPoint(e, flipBit) {
	if (flipBit) {
		e.style.width = "16px";
		e.style.height = "16px";
	} else {
		e.style.width = "16px";
		e.style.height = "16px";
	}
}

function MouseOverHandler(e) {
    if(down==1) {
        //disable popups when drawing polygon to make drawing the polygon easier
        return true;    
    }
}

function writePolyPoints(ll) {
	var content = document.getElementById('polyPoints');
	var strWork = content.innerText.replace(/^\s+|\s+$/g, "");
	var llText = ll;

	if (strWork == "") {
		content.innerHTML += ll.Latitude + "," + ll.Longitude;
	}
	else {
		content.innerHTML += "|" + ll.Latitude + "," + ll.Longitude;
	}
	
}

function polygonSearch(){
//    alert('in poly polygonsrach');
    if (map.GetShapeLayerCount() < 2) {
	    if (!lineLayer) {
		    lineLayer = new VEShapeLayer();
			lineLayer.SetTitle("lineLayer");
			map.AddShapeLayer(lineLayer);
		}
    }
	
    restorePoly();
	
    var lyr = map.GetShapeLayerByIndex(1);
		
	var nShapes = lyr.GetShapeCount();	
	var nLoop = 0;	
	var pointText = document.getElementById('polyPoints');
	var sPoints = pointText.innerHTML;	
	var points = new Array(nShapes);	
	var lstPoints = sPoints.split("|");
	
	//for each pin shape
	try {
	    for (nLoop = 0; nLoop <= nShapes - 1; nLoop++) {
		    shp = lyr.GetShapeByIndex(nLoop);  //get pin
		    var point = new VELatLong(shp.Latitude, shp.Longitude);
		    var pin = new VEShape(VEShapeType.Pushpin, point);
		    points[nLoop] = point;
		    var pt = lstPoints[nLoop].split(",");		
	    }
    } catch (ex) { }
}

function restorePoly() {
//    alert('in poly restorepolyn');
	var lyr = map.GetShapeLayerByIndex(1);	
	var nShapes = lyr.GetShapeCount();
	var nLoop = 0;	
	var pointText = document.getElementById('polyPoints');
	var sPoints = pointText.innerHTML;	
	var points = new Array(nShapes); 	
	var lstPoints = sPoints.split("|");

	//for each pin shape
	for (nLoop = 0; nLoop <= nShapes - 1; nLoop++) {
		shp = lyr.GetShapeByIndex(nLoop);  //get pin
		var point = new VELatLong(shp.Latitude, shp.Longitude);
		var pin = new VEShape(VEShapeType.Pushpin, point);
		points[nLoop] = point;
		var pt = lstPoints[nLoop].split(",");
	}
}
/****************************************** end Polygon related functions **********************************/
