﻿// JScript File

function doClick(buttonName,e)
{
    //the purpose of this function is to allow the enter key to 
    //point to the correct button to click.
    var key;
    if(window.event)
        key = window.event.keyCode;     //IE
    else
        key = e.which;     //firefox
    if (key == 13)
    {
    //Get the button the user wants to have clicked
        var btn = document.getElementById(buttonName);
        if (btn != null)
        { //If we find the button click it
            btn.click();
            event.keyCode = 0
        }
    }
}

        var key1 = 'ABQIAAAAGbe15MnqXib6_AaXgHErgxRsROQRoIwy6oyws6FuiOM8dwVGcxT4PV59tKtGC1JTW4yxbegtlyBwQw';
        var key2 = 'ABQIAAAAGbe15MnqXib6_AaXgHErgxSwjfvWQ-isB4Rz4D7GZAmS-xEErxQEqveaiCBNZdetB1hDaqHBggK21Q';
        var myKey = key2;
        if (window.location.host == 'www.gmapplus.com' || window.location.host== 'gmapplus.com') {
          myKey = key1;
        }
        else {
          myKey = key2;
        }
        var scriptTag = '<' + 'script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=' + myKey + '">'+'<'+'/script>';
        document.write(scriptTag); 

        var map ;   
        var lastpoint;
        var lastclick = "" ;	
        //var myCurrentMarker = new GMarker(new GPoint(0,0));
        var myCurrentMarker;
        function initialize() {
          if (GBrowserIsCompatible()) {
            map = new GMap2(document.getElementById("map_canvas"));
            var latlng = new GLatLng(40.036040,-98.977512) ; // Memphis Airport
            map.setCenter(latlng,4);
            //map.addControl(new GSmallMapControl());
            map.addControl(new GLargeMapControl());
            map.addControl(new GMapTypeControl());            
            map.enableScrollWheelZoom();
            GEvent.addListener(map,"click", function(overlay,point) {
              if (overlay)
              {
              } else if (point) 
              {
               checkclick(point) ;
              }
               //checkclick(point) ;              
            });
            //map.addOverlay(myCurrentMarker);
       }     

       function createMarker(point) 
       {
         var marker = new GMarker(point);  
         var message = ["This","is","the","secret","message"];  
         marker.value = point.toString();  
         GEvent.addListener(marker, "click", function() {
             var myHtml = "<table><tr><td style='color:#4D85C5;font-family:Verdana;font-size:10pt;'>" + point.x.toString().substr(0,10)+", " +point.y.toString().substr(0,9)+ "</td></tr></table>";    
             map.openInfoWindowHtml(point, myHtml);  });               
             return marker;
        }
       
       function checkclick (point)
       {
        if ( lastclick != point )
        {
         lastclick = point ;
        var TextLongitude = document.getElementById("TextLongitude");
        var tempStr = "";
        tempStr = point.x.toString();
        if(tempStr.length > 10){
            tempStr = tempStr.substr(0,10);
        }
        TextLongitude.value = tempStr;
        var TextLatitude = document.getElementById("TextLatitude");
        tempStr = point.y.toString();
        if(tempStr.length > 9){
            tempStr = tempStr.substr(0,9);
        }        
        TextLatitude.value = tempStr;
        if(myCurrentMarker==null){
        }
        else{
            map.removeOverlay(myCurrentMarker);        
        }        
        myCurrentMarker = createMarker(point);
        map.addOverlay(myCurrentMarker);
        }
       }
               
        var TextLongitude = document.getElementById("TextLongitude");
        TextLongitude.focus();
        }
        
        function ButtonClientSubmit_onclick() {
            window.status = "Getting reverse geocoding values ...";
            var TDMsg = document.getElementById("TDMsg");
            var TextLongitude = document.getElementById("TextLongitude");
            var TextLatitude = document.getElementById("TextLatitude");
            if(TextLongitude.value=="" | TextLatitude.value==""){
                TDMsg.innerHTML="Invalid longitude or/and latitude!";
                window.status = "";
                return;
            }
            var SelectBndyType = document.getElementById("SelectBndyType");
            var TDDetail = document.getElementById("TDDetail");
            TDDetail.innerHTML="<table style='width: 90%; background-color: #FFFFFF;'> <tr valign='middle'> <td> <img src='images/loadinfo_net.gif' alt='processing...' /> </td> <td> Processing... </td> </tr> </table>";            
            RS.Execute("XYQuery.aspx","ServerSideReturn",TextLongitude.value,TextLatitude.value,SelectBndyType.options[SelectBndyType.selectedIndex].value,updateMap);
            window.status = "";
        }
        
        function updateMap(result){
            var TDDetail = document.getElementById("TDDetail");                        
            var TDMsg = document.getElementById("TDMsg");
            if(result==""){
                TDMsg.innerHTML="No data found!";
                TDDetail.innerHTML="";           
                return;
            }            
            TDMsg.innerHTML="";
            var TextLongitude = document.getElementById("TextLongitude");
            var TextLatitude = document.getElementById("TextLatitude");
            var SelectBndyType = document.getElementById("SelectBndyType");                
            var returnAry = new Array();
            returnAry = result.split("+");
            // This is the no boundary or do not want to show bndy conditions
            if (returnAry.length<7){
                var addressStreet = returnAry[0];      
                var addressCity = returnAry[1];      
                var addressState = returnAry[2];      
                var addressZipcode = returnAry[3];
                var htmlStr=""; 
                htmlStr+="<table style='width: 95%; border-top-style: ridge; border-right-style: ridge; border-left-style: ridge; border-bottom-style: ridge;'>";
                htmlStr+="<tr style='background-color: #aaaaaa;'><td>"+SelectBndyType.options[SelectBndyType.selectedIndex].text+" Polygon</td></tr><tr><td align='center'><a href='#'>No Polygon was found! Only USA data is available. USA longitude is negative and latitude is positive.<br/><span style='color: #ff0000'>Or just click on map to get them.</span></div></a></td></tr>"
                htmlStr+="<tr style='background-color: #aaaaaa;'><td>You gave</td></tr><tr><td align='center'><a href='#'>"+TextLongitude.value+", "+TextLatitude.value+"</a></td></tr>"
                htmlStr+="</table>";
                TDDetail.innerHTML = htmlStr;   
                TextLongitude.focus(); 
                map.clearOverlays();
                map.addOverlay(myCurrentMarker);                                   
                return;
            }
            
            var addressStreet = returnAry[0];      
            var addressCity = returnAry[1];      
            var addressState = returnAry[2];      
            var addressZipcode = returnAry[3];   
            var xValue = TextLongitude.value;    
            var yValue = TextLatitude.value;    
            
            if (SelectBndyType.value=="City"){
                var returnCityName = returnAry[6];
                var returnState = returnAry[7];
                var returnCityFips = returnAry[8];
                var returnAreaMi = returnAry[9];  
                var htmlStr=""; 
                htmlStr+="<table style='width: 95%; border-top-style: ridge; border-right-style: ridge; border-left-style: ridge; border-bottom-style: ridge;'>";
                htmlStr+="<tr style='background-color: #aaaaaa;'><td>You gave</td></tr><tr><td align='center'><a href='#'>"+xValue+", "+yValue+"</a></td></tr>"
                htmlStr+="<tr style='background-color: #aaaaaa;'><td>City Name</td></tr><tr><td align='center'><a href='#'>"+returnCityName+"</a></td></tr>"
                htmlStr+="<tr style='background-color: #aaaaaa;'><td>State</td></tr><tr><td align='center'><a href='#'>"+returnState+"</a></td></tr>"
                htmlStr+="<tr style='background-color: #aaaaaa;'><td>City Fips</td></tr><tr><td align='center'><a href='#'>"+returnCityFips+"</a></td></tr>"
                htmlStr+="<tr style='background-color: #aaaaaa;'><td>Area (Mile)</td></tr><tr><td align='center'><a href='#'>"+returnAreaMi+"</a></td></tr>"
                htmlStr+="</table>";                
                TDDetail.innerHTML = htmlStr;     
            }
            else if(SelectBndyType.value=="Zip") {
                var returnZipcode = returnAry[6];
                var returnState = returnAry[7];
                var returnCity = returnAry[8];
                var returnAreaMi = returnAry[9]; 
                var htmlStr="";
                htmlStr+="<table style='width: 95%; border-top-style: ridge; border-right-style: ridge; border-left-style: ridge; border-bottom-style: ridge;'>";
                htmlStr+="<tr style='background-color: #aaaaaa;'><td>You gave</td></tr><tr><td align='center'><a href='#'>"+xValue+", "+yValue+"</a></td></tr>"
                htmlStr+="<tr style='background-color: #aaaaaa;'><td>Zip Code</td></tr><tr><td align='center'><a href='#'>"+returnZipcode+"</a></td></tr>"
                htmlStr+="<tr style='background-color: #aaaaaa;'><td>State</td></tr><tr><td align='center'><a href='#'>"+returnState+"</a></td></tr>"
                htmlStr+="<tr style='background-color: #aaaaaa;'><td>City</td></tr><tr><td align='center'><a href='#'>"+returnCity+"</a></td></tr>"
                htmlStr+="<tr style='background-color: #aaaaaa;'><td>Area (Mile)</td></tr><tr><td align='center'><a href='#'>"+returnAreaMi+"</a></td></tr>"
                htmlStr+="</table>";
                TDDetail.innerHTML = htmlStr;
            }
            else if(SelectBndyType.value=="County") {
                var returnCountyName = returnAry[6];
                var returnState = returnAry[7];
                var returnFips = returnAry[8];
                var returnAreaMi = returnAry[9]; 
                var htmlStr="";
                htmlStr+="<table style='width: 95%; border-top-style: ridge; border-right-style: ridge; border-left-style: ridge; border-bottom-style: ridge;'>";
                htmlStr+="<tr style='background-color: #aaaaaa;'><td>You gave</td></tr><tr><td align='center'><a href='#'>"+xValue+", "+yValue+"</a></td></tr>"
                htmlStr+="<tr style='background-color: #aaaaaa;'><td>County Name</td></tr><tr><td align='center'><a href='#'>"+returnCountyName+"</a></td></tr>"
                htmlStr+="<tr style='background-color: #aaaaaa;'><td>State</td></tr><tr><td align='center'><a href='#'>"+returnState+"</a></td></tr>"
                htmlStr+="<tr style='background-color: #aaaaaa;'><td>Fips</td></tr><tr><td align='center'><a href='#'>"+returnFips+"</a></td></tr>"
                htmlStr+="<tr style='background-color: #aaaaaa;'><td>Area (Mile)</td></tr><tr><td align='center'><a href='#'>"+returnAreaMi+"</a></td></tr>"
                htmlStr+="</table>";
                TDDetail.innerHTML = htmlStr;
            }
            else if(SelectBndyType.value=="SchoolDistrict") {
                var returnDistrictName = returnAry[6];
                var returnState = returnAry[7];
                var returnFips = returnAry[8];
                var returnAreaMi = returnAry[9]; 
                var htmlStr="";
                htmlStr+="<table style='width: 95%; border-top-style: ridge; border-right-style: ridge; border-left-style: ridge; border-bottom-style: ridge;'>";
                htmlStr+="<tr style='background-color: #aaaaaa;'><td>You gave</td></tr><tr><td align='center'><a href='#'>"+xValue+", "+yValue+"</a></td></tr>"
                htmlStr+="<tr style='background-color: #aaaaaa;'><td>District</td></tr><tr><td align='center'><a href='#'>"+returnDistrictName+"</a></td></tr>"
                htmlStr+="<tr style='background-color: #aaaaaa;'><td>State</td></tr><tr><td align='center'><a href='#'>"+returnState+"</a></td></tr>"
                htmlStr+="<tr style='background-color: #aaaaaa;'><td>Fips</td></tr><tr><td align='center'><a href='#'>"+returnFips+"</a></td></tr>"
                htmlStr+="<tr style='background-color: #aaaaaa;'><td>Area (Mile)</td></tr><tr><td align='center'><a href='#'>"+returnAreaMi+"</a></td></tr>"
                htmlStr+="</table>";
                TDDetail.innerHTML = htmlStr;
            }
            else if(SelectBndyType.value=="CensusTract") {
                var returnCensusTrackName = returnAry[6];
                var returnState = returnAry[7];
                var returnFips = returnAry[8];
                var returnAreaMi = returnAry[9]; 
                var htmlStr="";
                htmlStr+="<table style='width: 95%; border-top-style: ridge; border-right-style: ridge; border-left-style: ridge; border-bottom-style: ridge;'>";
                htmlStr+="<tr style='background-color: #aaaaaa;'><td>You gave</td></tr><tr><td align='center'><a href='#'>"+xValue+", "+yValue+"</a></td></tr>"
                htmlStr+="<tr style='background-color: #aaaaaa;'><td>State</td></tr><tr><td align='center'><a href='#'>"+returnState+"</a></td></tr>"
                htmlStr+="<tr style='background-color: #aaaaaa;'><td>Fips</td></tr><tr><td align='center'><a href='#'>"+returnFips+"</a></td></tr>"
                htmlStr+="<tr style='background-color: #aaaaaa;'><td>Area (Mile)</td></tr><tr><td align='center'><a href='#'>"+returnAreaMi+"</a></td></tr>"
                htmlStr+="</table>";
                TDDetail.innerHTML = htmlStr;
            }            
            var returnCenterX = returnAry[10];
            var returnCenterY = returnAry[11];
            var returnRecommendGmapLevel = returnAry[12];
            var returnGeom = returnAry[13];            

            map.clearOverlays();            
//            var geomAry = new Array();
//            geomAry = returnGeom.split("|");
//            var XY = new Array();
//            var points = [] ;
//            for (var i = 0; i < geomAry.length; i++)
//            {
//                XY = geomAry[i].split(",");
//                points.push( new GLatLng(parseFloat(XY[1]),parseFloat(XY[0])) ) ;
//            }
//            map.addOverlay( new GPolygon(points,"#f33f00", 1, 1, "#ff0000", 0.2) ) ;   
//            

            var polylineEncoder = new PolylineEncoder();
            var geom = new String();
            geom = returnAry[13];
            if(geom!=""){
                var polys = new Array();            
                polys = geom.split("))|((");            
                for (var j = 0; j < polys.length; j++) //polygons
                {            
                    var lines = [];
                    var returnGeomAry = new Array();
                    returnGeomAry = polys[j].split(")|(")//one polygon may contains holes
                    for (var k = 0; k < returnGeomAry.length; k++){                    
                        var returnGeom = returnGeomAry[k];
                        var geomAry = new Array();
                        geomAry = returnGeom.split("|");
                        var XY = new Array();
                        var points = [] ;
                        for (var i = 0; i < geomAry.length; i++)
                        {
                            XY = geomAry[i].split(",");
                            points.push( new GLatLng(parseFloat(XY[1]),parseFloat(XY[0])) ) ;
                        }
                        var result = polylineEncoder.dpEncode(points); 
                        lines.push({color: "#ff0000", weight: 2, opacity: 0.8, points: result.encodedPoints, levels: "PNONP", zoomFactor: 2, numLevels: 18 });
                    }
                    var poly1 = new GPolygon.fromEncoded({ polylines: lines, fill: true, color: "#ff0000", opacity: 0.4, outline: true});
                    map.addOverlay(poly1);                
                }//end of overlay polygons loop            
            }            

            
//            var blueIcon = new GIcon(G_DEFAULT_ICON);
//            blueIcon.image = "http://www.google.com/intl/en_us/mapfiles/ms/micons/blue-dot.png";            
//            blueIcon.iconSize = new GSize(35, 35);
            var point_center = new GLatLng(parseFloat(TextLatitude.value),parseFloat(TextLongitude.value));
//            var marker_center = new GMarker(point_center);
//            GEvent.addListener(marker_center, "click", function() {
//                marker_center.openInfoWindowHtml('<table style="color: #4D85C5; "><tr><TD>'+ xValue +","+yValue+'</TD></TR></TABLE>');
//                });
//            map.addOverlay(marker_center);
			var label = "XYInfo";
			var tabInfo = new Array();
			tabInfo="Address|CensusInfo|SchoolDist|AreaCode|Other".split("|");
			tabs = new Array();
			var tabsStr=returnAry[14];
			for (var j = 0; j < tabInfo.length; j++) {
				var tabLabel = tabInfo[j];
				var tabHtml = getTagValue(tabInfo[j],tabsStr);
				if ((j==0) && (tabInfo.length > 2)){
					tabHtml = '<div style="width:'+tabInfo.length*88+'px">' + tabHtml + '</div>';
				}
				tabs.push(new GInfoWindowTab(tabLabel,tabHtml));
			}
			var marker = createTabbedMarker(point_center,label,tabs);
			map.addOverlay(marker);
			marker.openInfoWindowTabsHtml(marker.tabs);

            if(SelectBndyType.value=="County"){
                if(map.getZoom()<6){
                map.setCenter(new GLatLng(parseFloat(yValue),parseFloat(xValue)), parseInt(returnRecommendGmapLevel)-1); 
                }
            }
            else {
                if(map.getZoom()<8){
                map.setCenter(new GLatLng(parseFloat(yValue),parseFloat(xValue)), parseInt(returnRecommendGmapLevel)-1); 
                }            
            }
//            TextLongitude.value="";    
//            TextLatitude.value="";    
            TextLongitude.focus();                         
        }
    function getTagValue(tagName,infos){
        var tagValue="";
        var mytagName=new String;
        mytagName=tagName;
        var myInfos=new String;
        myInfos=infos;
        var startIndex;
        var endIndex;
        var length;
        startIndex=myInfos.indexOf("<"+mytagName+">");
        endIndex=myInfos.indexOf("</"+mytagName+">");
        length=mytagName.length+2;
        if (startIndex < endIndex)
        {
            tagValue = myInfos.substring(startIndex + length, endIndex);
        }
        return tagValue;
    }
    
    function createTabbedMarker(point,label,tabs) {
	    var marker = new GMarker(point);
	    marker.tabs = tabs;        
	    GEvent.addListener(marker, "click", function() {
		    marker.openInfoWindowTabsHtml(marker.tabs);
	    });
	    return marker;
    }  
        