﻿ // Specify the virtual directory name. Use "" if only hostname used i.e http://maps.afrigis.co.za
 var virtualDirName = "DataCatalogue";
 
 var SearchString  = "";
 var JSON_LUCENE_URL = "GenericLuceneSearch.aspx";
 
 $(document).ready(function(){
        var loc1 = window.location;
        var loc = loc1.href.split("/");
        if(loc[loc.length-1] == "GeoCodingInterface.aspx")
        initAGMap();
 $("#btnSearch").click(function(){
       executeSearch();
  
   });
//   $("#btnPostalSearch").click(function(){
//       var _url = JSON_POSTAL_SEARCH_URL;
//        _url = _url + ""+$("#txtPostalCode")[0].value;
//        $.getJSON(_url,
//                function(json)
//                {
//                    RecievePostalresults(json);
//                }
//            );
//   
//   });
 
 
   
});

  function PostalSearch()
   {
    var _url = JSON_POSTAL_SEARCH_URL;
        _url = _url + ""+$("#txtPostalCode")[0].value;
        $.getJSON(_url,
                function(json)
                {
                    RecievePostalresults(json);
                }
            );
   }
    function RecievePostalresults(Result)
   {  
      var elHtml = "";
     document.getElementById("_postalSearch").innerHTML ="";
     document.getElementById("_mapContainer").style.display ="none";
     document.getElementById("btnSubmit").style.display ="none";
     var oLucene = eval("("+Result+")");
     var w = document.createElement('div');
     if(oLucene.PostalResults.length < 1)
       {
        elHtml += "<a class='SearchResultLink' href='javascript:{};'>No Results Found</a>";
       }
       for(var i =0;i < oLucene.PostalResults.length;i++)
       {
                elHtml += "<a class='SearchResultLink' href='javascript:{};' onclick='ShowOnMap(\""+oLucene.PostalResults[i].Suburb+"\",\""+oLucene.PostalResults[i].Latitude+"\",\""+oLucene.PostalResults[i].Longitude+"\")'>"+oLucene.PostalResults[i].Suburb+"</a><br/>";
       }
       w.innerHTML = elHtml;
       document.getElementById("_postalSearch").appendChild(w);
       
   }
function BuildObject(Address,Lat,Lon)
{
   var _objectString = "{AddressObject:{address:\""+Address+"\",latitude:"+Lat+",longtitude:"+Lon+"}}";
   var _object = eval("("+_objectString+")");
   eval(CALLBACKFUNCTION)(_object);
}
function BackToSearch()
{
                if(TRANSITION == 0)
               {
                    $("div#_SearchCont").css("display","");
                    $("div#_searchResults").css("display","none");
               }
               if(TRANSITION == 1)
               {
                    $("div#_SearchCont").fadeIn("slow");
                    $("div#_searchResults").fadeOut("slow");
               }
               if(TRANSITION == 2)
               {
                    //$("div#_SearchCont").hide();
                    $("div#_searchResults").slideUp("slow");


               }
}
/*function ShowOnMap(Suburb,lat,lon)
{
    document.getElementById("_postalSearch").innerHTML ="";
    document.getElementById("_mapContainer").style.display ="";
    document.getElementById("btnSubmit").style.display ="";
    if(g_map == null)
    {  
        g_map = new AGMap(document.getElementById("_mapContainer"));
    }
    var icon1 = new DraggableIcon("http://maps.afrigis.co.za/msjsapi121/Images/3Dpin_afrigispointofinterest32.png","oDrag");
    
    g_map.CentreAndScale(parseFloat(lat),parseFloat(lon),10);
    g_map.AddDraggableIcon(icon1,parseFloat(lat),parseFloat(lon),-5,-32,"DragIcon","");
        
}*/
  function GetStats()
  {
     var _url = "JSONStats.aspx?";
         _url = _url + "&RandomID=" + Math.random();        
        $.getJSON(_url,
                function(json)
                {
                    RecieveStats(json);
                }
            );
  }
    function GetStatsQA()
  {
     var _url = "JSONStatsQA.aspx?";
         _url = _url + "&RandomID=" + Math.random();        
        $.getJSON(_url,
                function(json)
                {
                    RecieveStats(json);
                }
            );
  }
 function executeSearch()
  {
        
       SearchString = $("#ctl00_ctl00_masterContentPlaceHolder_mpContentPlaceHolder_txtSearchText")[0].value;
        var _url = JSON_LUCENE_URL+"?";
        _url = _url + "SearchText=" + SearchString;
        _url = _url + "&Index="//+document.getElementById("ctl00_ctl00_masterContentPlaceHolder_mpContentPlaceHolder_drpSearchType").value;
        _url = _url + "&RandomID=" + Math.random();        
        $.getJSON(_url,
                function(json)
                {
                    ReceiveResults(json);
                }
            );
  }
  
  function  ReceiveResults(Result)
   {
     
       document.getElementById("_searchResults").innerHTML ="";
       var oLucene = Result;
       var w = document.createElement('div');
       var elHtml = "";
       if(oLucene.Results.Record == null)
       {
        elHtml += "<a class='SearchResultLink' href='javascript:{};'>No Results Found</a>";
       }
       else
       {
           var _style = "divalt";
           for(var i =0;i < oLucene.Results.Record.length;i++)
           {
                    
                    elHtml += "<div class='"+_style+"'><a class='SearchResultLink'>"+oLucene.Results.Record[i].ADDRESS_DETAILS+"</a><br/><a class='SearchResultLink'>";
                    
                    /*if(document.getElementById("ctl00_ctl00_masterContentPlaceHolder_mpContentPlaceHolder_drpSearchType").value == "Buildings")
                    {
                        elHtml += "<div style='padding-top:4px;padding-bottom:4px;'><span class='SearchResultSpan' onclick='ShowOnMap(\""+oLucene.Results.Record[i].ADDRESS_DETAILS+"\",\""+oLucene.Results.Record[i].Latitude+"\",\""+oLucene.Results.Record[i].Longitude+"\")'>View On Map</span><span style='margin-left:270px;'><strong>Confidence Level:</strong>"+oLucene.Results.Record[i].ConfidenceLevel+"</span></div>";
                    }
                    else if(document.getElementById("ctl00_ctl00_masterContentPlaceHolder_mpContentPlaceHolder_drpSearchType").value == "NAD")
                    {
                       elHtml += "<div style='padding-top:4px;padding-bottom:4px;'><span class='SearchResultSpan' onclick='ShowOnMap(\""+oLucene.Results.Record[i].ADDRESS_DETAILS+"\",\""+oLucene.Results.Record[i].LATITUDE+"\",\""+oLucene.Results.Record[i].LONGITUDE+"\")'>View On Map</span><span style='margin-left:90px;'><strong>Confidence Level:</strong>"+oLucene.Results.Record[i].ConfidenceLevel+"</span><span><strong>  Matching Percentage:</strong> "+oLucene.Results.Record[i].MatchingPercentage+" %</span></div>";
                    }
                    else*/
                    //{
                        elHtml +="<div style='padding-top:2px;padding-bottom:2px;'><span class='SearchResultSpan' onclick='ShowOnMap(\""+oLucene.Results.Record[i].ADDRESS_DETAILS+"\",\""+oLucene.Results.Record[i].Latitude+"\",\""+oLucene.Results.Record[i].Longitude+"\")'>View On Map</span></div>";
                    //}
                    elHtml +="</a></div>";
                    
                    if(_style == "divalt")
                        _style = "divorig";
                    else
                        _style = "divalt";
           }
       }
       //document.getElementById("spnSearch").innerHTML = "Search Results From "+document.getElementById("ctl00_ctl00_masterContentPlaceHolder_mpContentPlaceHolder_drpSearchType").value+" Index";
       w.innerHTML = elHtml;
       document.getElementById("_searchResults").appendChild(w);
        
   }
   
   
  function ShowOnMap(Suburb,lat,lon)
{
        //$("#ShowOnMap").css("display","");
        //document.getElementById("_spnSelectedText").innerHTML = Suburb;
        /*g_map.RemoveAllObjects();
        g_map.AddPoint("http://maps.afrigis.co.za/msjsapi/Images/3Dpin_afrigispointofinterest32.png","img1", parseFloat(lat), parseFloat(lon),-5,-32, "Search Result", Suburb);
        g_map.CentreAndScale(parseFloat(lat),parseFloat(lon),10);*/
        g_map.removeGroupOverlay("infoMarker");
        CloseRecInfoClick();
        var oLatLng = new AGCoord(parseFloat(lat), parseFloat(lon));
        var oIcon = new AGIcon();
        oIcon.image = FromVirtualPath("Images/3Dpin_afrigispointofinterest32.png");
        oIcon.iconSize = new AGSize(32, 32);
        oIcon.iconAnchor = new AGPoint(-5, -32);        
        oIcon.infoDisplayAnchor = new AGPoint(5, -32);
        var oNewMarkerOptions = new AGMarkerOptions(oIcon);
        var oMarker = new AGMarker(oLatLng, oNewMarkerOptions);
        g_map.addOverlay(oMarker, "infoMarker");
        var oInfoDisplayOpts = new AGInfoDisplayOptions();
        oInfoDisplayOpts.width = 150;
        oInfoDisplayOpts.height = 150;
        oMarker.bindInfoDisplayHTML(Suburb, oInfoDisplayOpts);
        /*AGEvent.addListener(oMarker, "onclick", function(oLatLng)
            {
                oMarker.openInfoDisplayHTML(Suburb, oInfoDisplayOpts);
            });*/        
        g_map.centreAndScale(oLatLng, 17);
}

 /************ ADDED BY QUINTON ***************/
var singleMapClickListener = null;
var tileLayer = null;    
 
     function InitDMSLayers()
     {
        var oDmsOptions = new AGDMSOptions();
        oDmsOptions.mapServerUrl = "http://ms1.afrigis.co.za/mapserver/im.aspx";
        oDmsOptions.layers = "AG_CAD_ERVEN,AG_NAD";
        oDmsOptions.styles = "Polygon_SCHEME,Point_SCHEME";
        
        oDmsOptions.transparency = 100;
        var dmsReqManager = new AGDMSRequestManager(oDmsOptions);
        
        tileLayer = new AGTileLayerOverlay(100,dmsReqManager);
        g_map.addOverlay(tileLayer);
     }
     
     function InitControls() 
     {
        //Move the map buttons into position
        var oBtns = document.getElementById("selectionControlsContainerLS");
        var oSearch = document.getElementById("searchContainerLS");
	    var oSearchChild = document.getElementById("searchContainerChildLS");
	    var oMapContainer = document.getElementById("MapPlaceHolder");
	    var oSearchControls = document.getElementById("searchControlsContainerLS");
	    var oRevealContent = document.getElementById("revealContentDivLS");
        var oRecordInfo = document.getElementById("recordInfoContainerLS");

	   
	    document.getElementById("busyLoadingImageLS").style.backgroundImage = 'url(' + FromVirtualPath("Images/loader.gif") + ')';
	   
	    oMapContainer.appendChild(oBtns);
	    oMapContainer.appendChild(oSearch);
	    oMapContainer.appendChild(oRecordInfo);
	    oSearch.appendChild(oSearchControls);
	    oSearch.appendChild(oRevealContent);
	   
	    oSearch.style.height = "10px";
	   
        InitSearchLayer();
	    
	    //Make visible
	    oBtns.style.visibility = "visible";
        oSearch.style.visibility = "visible";
	    oSearchChild.style.visibility = "visible";
	    oRevealContent.style.visibility = "visible";
	    oSearchControls.style.visibility = "visible";
     }
    
     function AddLayerToDD(dropDownMenuName, displayName, layerName, isSelected) 
     {
        var newOption = document.createElement("option");
        document.getElementById(dropDownMenuName).options.add(newOption);
        newOption.innerHTML = displayName;
        newOption.value = layerName;
        newOption.selected = isSelected;
     }    
     
     function GetCoordinateFromMapClick() 
     {
        //g_map.GetCoordinateFromMap(true, "GetClickedPoint");
        AGEvent.clearListeners(g_map, "onclick");
        singleMapClickListener = AGEvent.addListener(g_map, "onclick", function(oOverlay, coordinates){
            if(coordinates)
            {
                var latitude = coordinates.latitude();
                var longitude = coordinates.longitude();            
                var layerName = document.getElementById("selLayerLS").value;
                var selectedIndex = document.getElementById("selLayerLS").selectedIndex;             
                var layerDisplayName = document.getElementById("selLayerLS").options[selectedIndex].text;
                var oLatLng = new AGCoord(latitude, longitude);
                var pixels = g_map.getPointFromVisibleArea(oLatLng);
                var oBoundingBox = g_map.getBoundingBox();
                var oSouthWestCoords = oBoundingBox.getSouthWest();
                var oNorthEastCoords = oBoundingBox.getNorthEast();
                var boundingBox = oSouthWestCoords.longitude() + "," + oSouthWestCoords.latitude() + "," + oNorthEastCoords.longitude() + "," + oNorthEastCoords.latitude();
                var dimensions = g_map.getSize();
                document.getElementById("recordInfoAlignmentLS").innerHTML = "Loading...";
                //alert((_clickedCoordinate[0].Latitude).toString() + " : " + (_clickedCoordinate[0].Longitude).toString());
                //GetJSONData("GetLayerInfo.aspx", "parseJSON", latitude, longitude, layerName);
                g_map.removeGroupOverlay("infoMarker");
                GetJSONData("GetLayerInfo.aspx", "parseJSON", pixels.x, pixels.y, boundingBox, dimensions.width, dimensions.height, layerName);
                var oIcon = new AGIcon();
                oIcon.image = FromVirtualPath("Images/3Dpin_afrigispointofinterest32.png");
                oIcon.iconSize = new AGSize(32, 32);
                oIcon.iconAnchor = new AGPoint(-5, -32);
                var oNewMarkerOptions = new AGMarkerOptions(oIcon);
                g_map.addOverlay(new AGMarker(oLatLng, oNewMarkerOptions), "infoMarker");
                //g_map.AddPoint("http://maps.afrigis.co.za/msjsapi/Images/3Dpin_afrigispointofinterest32.png","img1", latitude, longitude,-5,-32, layerDisplayName, "Layer info displayed on the right.");                
            }    
        });        
     }
     function GetJSONData(url, callBackName, iPixel, jPixel, boundingBox, width, height, layerName)
     {                
            if (url.indexOf("?") > -1)
                url += "&jsonp=" 
            else
                url += "?jsonp=" 
            url += callBackName + "&";
            url += "i="
            url += iPixel.toString() + "&";
            url += "j="
            url += jPixel.toString() + "&";
            url += "bb="
            url += boundingBox + "&";
            url += "width="
            url += width + "&";
            url += "height="
            url += height + "&";
            url += "layer=";
            url += layerName + "&";
            url += new Date().getTime().toString(); // prevent caching        
            
            var script = document.createElement("script");        
            script.setAttribute("src",url);
            script.setAttribute("type","text/javascript");                
            document.body.appendChild(script);
     }        

     function parseJSON(JSONText)
     {
            //var JSONText = "{'layer':'AG_NAD','attributes':[{'name':'AG_NAD_ID','value':473051},{'name':'ACCURACY','value':0},{'name':'STR_NUMBER','value':4},{'name':'STR_NAME','value':'GIRDLER'},{'name':'STR_TYPE','value':'STREET'},{'name':'STREET','value':'GIRDLER STREET'},{'name':'X','value':28.247850000000000},{'name':'Y','value':-25.739040000000000},{'name':'AG_SUB_ID','value':13776},{'name':'AG_SUB_CDE','value':'000635-013776'},{'name':'SUBURB','value':'COLBYN'},{'name':'POSTCODE','value':'0083'},{'name':'AG_SGTN_ID','value':32272},{'name':'SGTOWN','value':'Colbyn'},{'name':'AG_TOWN_ID','value':635},{'name':'TOWN','value':'PRETORIA'},{'name':'AG_MUN_ID','value':228},{'name':'MUN_CODE','value':'TSH'},{'name':'S12_NAME','value':'City of Tshwane'},{'name':'MUNIC','value':'Pretoria'},{'name':'AG_PROV_ID','value':3},{'name':'PROVINCE','value':'GAUTENG'},{'name':'SOURCE','value':'Original NAD'},{'name':'UPDATED','value':'20071106'}]}";
            var obj = eval( "(" + JSONText + ")");
            //var objCloseButton = document.getElementById("recordInfoCloseBtnContainer").style.visibility = "visible";
            document.getElementById("recordInfoContainerLS").style.visibility = "visible";
            document.getElementById("recordInfoAlignmentLS").innerHTML = ConstructRecordTableHTML(obj);
     } 
        
     function ConstructRecordTableHTML(obj)
     {
            var lat = 0, lon = 0;                       
        	var recTbl = "<table id=\"tblRecordInfo\">";
        	recTbl += "<thead><tr class=\"recTblTitle\"><td colspan=\"2\">Layer: " + obj.layer + "<img id=\"imgCloseButton\" src=\"" + FromVirtualPath("Images/CloseButton1.jpg") + "\" onclick=\"CloseRecInfoClick()\"/></tr>";
			recTbl += "<tr><td class=\"nameColHead\">Name:</td><td class=\"valueColHead\">Value:</td></tr></thead>";
			//create the body
			recTbl += "<tbody>";

			//For each record value, construct table rows
			for (i = 0; i < obj.attributes.length; i++)
			{
			    if (obj.attributes[i].name == "CENTROIDX")
			    {
			        lon = parseFloat(obj.attributes[i].value);
			    }
			    if (obj.attributes[i].name == "CENTROIDY")
			    {
			        lat = parseFloat(obj.attributes[i].value);
			    }
				recTbl += "<tr><td class=\"nameCol\">" + obj.attributes[i].name + "</td><td class=\"valueCol\">" + obj.attributes[i].value + "</td></tr>";
			}

			//Close the body
			recTbl += "</tbody>";
        	//close the table
        	recTbl += "</table>";
        	
        	if (lat != 0 && lon != 0)
        	{
                g_map.removeGroupOverlay("infoMarker");
                var oLatLng = new AGCoord(lat, lon);
                var oIcon = new AGIcon();
                oIcon.image = FromVirtualPath("Images/3Dpin_afrigispointofinterest32.png");
                oIcon.iconSize = new AGSize(32, 32);
                oIcon.iconAnchor = new AGPoint(-5, -32);
                var oNewMarkerOptions = new AGMarkerOptions(oIcon);
                g_map.addOverlay(new AGMarker(oLatLng, oNewMarkerOptions), "infoMarker");
        	    
        	}

        	return recTbl;
     }
        
     function CloseRecInfoClick() 
     {
            if (singleMapClickListener != null)
            {
                AGEvent.removeListener(singleMapClickListener);
            }            
            document.getElementById("recordInfoContainerLS").style.visibility = "hidden";
            document.getElementById("recordInfoAlignmentLS").innerHTML = "";
            g_map.removeGroupOverlay("infoMarker");
     }
        
     function ChangeViewableSearchContent() 
     {
            var toValue;
            var btnReveal = document.getElementById("contentBarLS");
            if (isExtended)
            {
                toValue = 10;
                isExtended = false;
                btnReveal.setAttribute("src", FromVirtualPath("Images/ContentBarDown.gif"));
            }    
            else
            {
                toValue = 80;
                isExtended = true;
                btnReveal.setAttribute("src", FromVirtualPath("Images/ContentBarUp.gif"));
            }
            var attribute = {height: {to:toValue}};
            var dropdownMenu = new YAHOO.util.Anim('searchContainerLS', attribute, 0.5);
            dropdownMenu.animate();
            isOpen = false;
            SetSHRButtonDisplay();
            SetCRButtonDisplay();
     }
        
     function GetResults() 
     {
            document.getElementById("busyLoadingImageLS").style.visibility = "visible";
            var searchText = document.getElementById("txtSearchLS").value;
            var searchLayer = document.getElementById("selSearchLayerLS").value;
            var url = "GetSearchResults.aspx";
            
            url += "?jsonp=JSONResults";
            url += "&searchText=";
            url += searchText;
            url += "&searchLayer=";
            url += searchLayer;
            url += "&" + new Date().getTime().toString();
            
            var script = document.createElement("script");        
            script.setAttribute("src",url);
            script.setAttribute("type","text/javascript");                
            document.body.appendChild(script);            
     }
                
     function JSONResults(objResult)
     {
		    var i;
		    var result = "";
		    var oResultsContainer = document.getElementById("resultsContainerDivLS");
		    oResultsContainer.innerHTML = "";
		    var obj = eval("(" + objResult + ")");
		    result = "<h5 class='reduceBlockSpacing'>Results found:</h5>"
		    if (obj.results.length != 0)
		    { 
		        for(i = 0;i < obj.results.length; i++)
		        {
		            result += "<a class=\"result\" onclick=\"ZoomMap("+ obj.results[i].lat + ", " + obj.results[i].lon + ", " + obj.results[i].zoom + ")\">" + obj.results[i].description + "</a>";
		            if(i < obj.results.length-1)
		                result += "<br />";
		        }
		    }
		    else
		        result += "<h5>No results found.</h5>";
            oResultsContainer.innerHTML = result;
            document.getElementById("busyLoadingImageLS").style.visibility = "hidden";
		    var attribute = {height: {to: 250}};
		    var dropdownMenu = new YAHOO.util.Anim('searchContainerLS', attribute, 0.5);
		    dropdownMenu.animate();
		    isResults = true;
		    isOpen = true;
            SetSHRButtonDisplay();
            SetCRButtonDisplay();
     }
        
     function ZoomMap(lat, lon, zoom)
     {
            var attribute = {height: {to: 10}};
            var btnReveal = document.getElementById("contentBarLS");
            var dropdownMenu = new YAHOO.util.Anim('searchContainerLS', attribute, 0.5);
            //g_map.CentreAndScale(lat, lon, zoom);     
            g_map.centreAndScale(new AGCoord(lat, lon), zoom);
            dropdownMenu.animate();
            isExtended = false;
            btnReveal.setAttribute("src", FromVirtualPath('Images/ContentBarDown.gif'));
            isOpen = false;
            SetSHRButtonDisplay();
     }
        
     function ShowHideResults()
     {
            var toValue;
            var buttonSHR = document.getElementById("btnShowHideResultsLS");
            
            if (!isOpen & isResults)
            {
                toValue = 250;            
		        isOpen = true;
		        buttonSHR.value = "Hide";
		    }
		    else
		    {
		        toValue = 80;
		        isOpen = false;
		        buttonSHR.value = "Show";
		    }
            var attribute = {height: {to: toValue}};
            var dropdownMenu = new YAHOO.util.Anim('searchContainerLS', attribute, 0.5);
   	        dropdownMenu.animate();
     }
        
     function ClearResults() 
     {            
            var searchBox = document.getElementById("txtSearchLS");
            if (searchBox.value != "" | isResults)
            {            
   		        var attribute = {height: {to: 80}};
		        var dropdownMenu = new YAHOO.util.Anim('searchContainerLS', attribute, 0.5);
		        dropdownMenu.animate();
                document.getElementById("resultsContainerDivLS").innerHTML = "";
                searchBox.value = "";
                isResults = false;
                isOpen = false;
                SetCRButtonDisplay();
                SetSHRButtonDisplay();
            }
            searchBox.focus();
     }
        
     function SetSHRButtonDisplay()
     {
            var buttonSHR = document.getElementById("btnShowHideResultsLS");
            
            if (isResults)
                buttonSHR.disabled = false;
            else
                buttonSHR.disabled = true;
            if (isOpen)
                buttonSHR.value = "Hide";
            else
                buttonSHR.value = "Show";
     }

     function SetCRButtonDisplay() 
     {
            var searchBox = document.getElementById("txtSearchLS");
            var buttonCR = document.getElementById("btnClearResultsLS");

            if (searchBox.value != "" | isResults)
                buttonCR.disabled = false;
            else
                buttonCR.disabled = true;     
     }        
        
     function CheckKeyPressed(e)
     {
            var unicode = e.keyCode? e.keyCode : e.charCode;

            if (unicode == 13)
            {
                GetResults();
                return false;  
            }                
     }
     
     function FromVirtualPath(relativePath)
     {
        var absPath = new String(document.URL);
        var pos =  absPath.indexOf("/", 7);
        if (pos == -1)
        {
            pos = absPath.length;
        }
        var hostname = absPath.substring(0, pos);
        return hostname + "/" + virtualDirName + "/" + relativePath;
        
     }
     
/************ END: ADDED BY QUINTON ***************/
