/* search support functions - must call the ajax_search.asp function - puts results into
with id "resultsarea" - called from a button named "searchbutton" */ var rRoads = new Array(); var rFeatures = new Array(); var rPoints = new Array(); function ScrubDupes(arr) { var ret = new Array(); for (l=0;l0) { e.x = avgx/count; e.y = avgy/count; } ret.push(e); } return ret; } function Result(layer,x,y,metadata,ref,match,caption,number,cc,pri,icon) { this.layer = layer; this.x = x; this.y = y; this.metadata = metadata; this.ref = ref; this.match = match; this.caption = caption; this.number = number; this.metadata_ext = ""; this.cc = cc; this.icon = icon; this.pri = pri; } function GetRoadDesc(str,number) { var p = str.split(","); var number_bit = ""; if (number>0) { number_bit = String(number)+" "; } // rname = toPC(p[5]) + " " + toPC(p[6]); rname = p[0]; // if (toPC(p[7]).length > rname.length) rname = toPC(p[7]); var arCity = toPC(p[2]); var arProv = toPC(p[p.length-1]); var arSub = toPC(p[1]); var arR=""; // formerly... if (toPC(p[12]).length>0) arR += "(Formerly "+toPC(p[12])+")
"; arR += arSub; if (arCity!=arSub) arR += ", " + arCity; arR += "
" + arProv; var ret = "" + number_bit + rname + "
" + arR +""; return ret; } function GetPointDesc(str) { var p = str.split(";"); ret = "" + toPC(p[0]) + "
(" +toPC(p[1])+ ") " + toPC(p[2]) + ", "+ toPC(p[3]) +""; return ret; } function GetPointDescAd(str) { var p = str.split(";"); ret = ""; return ret; } function GetCaption(ent,which) { arr = ent.metadata_ext.match(/\[(.*?)\]\{(.*?)\}/g); // arr = null; if (!isNull(arr)) { // var p = ent.metadata.split(";"); desc = MetaPopup(ent.caption, ent.metadata_ext, ent.ref, "search"); } else { var desc = ""; switch (which) { case "road" : var p = ent.metadata.split(","); // rname = toPC(p[5]) + " " + toPC(p[6]); rname = p[0]; // if (toPC(p[7]).length > rname.length) rname = toPC(p[7]); // formerly... if (p[8].length>0 && p[8].length<6) rname += " ("+p[8]+")"; desc = rname + ", " + toPC(p[2]) + ", "+ toPC(p[p.length-1]); break; case "feature" : desc = GetFeatureDescRaw(ent.metadata,ent.layer); break; case "point" : if (ent.pri) { var p = ent.metadata.split(";"); desc = "Name: " + toPC(p[0]) + "
Classification: " +toPC(p[1])+ "
Location: " + toPC(p[2]) + ", "+ toPC(p[3]); } else { var p = ent.metadata.split(";"); desc = "Name: " + toPC(p[0]) + "
Classification: " +toPC(p[1])+ "
Location: " + toPC(p[2]) + ", "+ toPC(p[3]); } break; } } return desc; } function CMPresults(a,b) { if (a.pri>b.pri) return -1; if (a.pri0) matcha+=25; if (b.number>0) matchb+=25; if (matcha>matchb) return -1; if (matchab.caption) return 1; return 0; } function MakeResultsPane(r, which) { var vDiv = document.createElement("div"); vDiv.id = "pane_"+which; var vTable = document.createElement("table"); vDiv.appendChild(vTable); vTable.style.width="100%" r.sort(CMPresults); for (l=0;l"+GetPointDescAd(r[l].metadata, r[l])+""; } else { desc = GetPointDesc(r[l].metadata, r[l]); } break; } vCell.innerHTML = desc; vCell = vRow.insertCell(-1); vCell.vAlign = "middle"; vCell.innerHTML = "" } return vDiv; } function ClickTabRoads() { getObj("pane_road").style.display="inline"; getObj("pane_feature").style.display="none"; getObj("pane_point").style.display="none"; getObj("tab_road").className="search_tabSelected"; getObj("tab_feature").className="search_tabNotSelected"; getObj("tab_point").className="search_tabNotSelected"; } function ClickTabFeatures() { getObj("pane_road").style.display="none"; getObj("pane_feature").style.display="inline"; getObj("pane_point").style.display="none"; getObj("tab_road").className="search_tabNotSelected"; getObj("tab_feature").className="search_tabSelected"; getObj("tab_point").className="search_tabNotSelected"; } function ClickTabPoints() { getObj("pane_road").style.display="none"; getObj("pane_feature").style.display="none"; getObj("pane_point").style.display="inline"; getObj("tab_road").className="search_tabNotSelected"; getObj("tab_feature").className="search_tabNotSelected"; getObj("tab_point").className="search_tabSelected"; } var searchMarkerLayer = null; function set () { var result = {}; for (var i = 0; i < arguments.length; i++) result[arguments[i]] = true; return result; } Result.prototype.ClickResult = function(event, element) { // need to put a marker up if (searchMarkerLayer==null) { searchMarkerLayer=myMap.AddLayer("point",60,"searchmarker"); searchMarkerLayer.SetDefaultAnchor("center","center"); } else { searchMarkerLayer.RemoveAllPoints (); } caption = "Search Result
"+this.caption+"
"; if (!isUndefined(this.metadata_ext)) { if (this.metadata_ext.match(/\[(.*?)\]\{(.*?)\}/g)!=null) caption = this.caption; } var pt = searchMarkerLayer.AddPoint(this.x,this.y,caption,"searchmarker"); pt.SetStyle("biglabel") pt.SetClickBehaviour("toggle_all_biglabel"); pt.SetIcon("http://www.streetmaps.co.za/icon_small/0.png"); pt.SetIconAnchor("center","center"); pt.SetLabelAnchor("iconcenter","iconcenter"); myMap.JumpTo(this.x,this.y,0.005); } function AJAX_Search(dat,internal) { var isInternal=isUndefined(internal)?false:internal; gWait.Stop(); if (dat.results==null) return; if (dat.results.type!="search") { alert("AJAX Error"); return; } savedSearch = dat; var maxRoad=0; var maxFeature=0; var maxPoint=0; var count100; for (l=0;lmaxRoad) maxRoad=match; if (match>maxAll) { maxAll = match; maxTab = 'r'; } } else if (layer in set(12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28)) { r.caption = GetCaption(r,"feature"); rFeatures.push(r); if (match>maxFeature) maxFeature=match; if (match>maxAll) { maxAll = match; maxTab = 'f'; } } else if (layer in set(19)) { r.metadata_ext = item.metadata_ext; r.caption = GetCaption(r,"point"); rPoints.push(r); if (match>maxPoint) maxPoint=match; if (match>maxAll) { maxAll = match; maxTab = 'p'; } } } rRoads = ScrubDupes(rRoads); rFeatures = ScrubDupes(rFeatures); showFeatures = false; showRoads = false; showPoints = false; // if there's only one match in any of the options, jump there - it's probably correct if (!isInternal) { if (rRoads.length==1 && maxTab=='r') { rRoads[0].ClickResult(null,null); showRoads = true; } else if (rFeatures.length==1 && maxTab=='f') { rFeatures[0].ClickResult(null,null); showFeatures = true; } else if (rPoints.length==1 && maxTab=='p') { rPoints[0].ClickResult(null,null); showPoints = true; } } if (maxFeature>maxRoad && maxFeature>maxPoint) { showFeatures = true; } if (!showPoints && !showFeatures && !showRoads) { // nothing selected yet, let's find something if (rRoads.length>0) { showRoads=true; } else if (rFeatures.length>0) { showFeatures=true; } else if (rPoints.length>0) { showPoints=true; } else { showRoads = true; } } // if features has the max match, go there selRoads = showRoads?"search_tabSelected":"search_tabNotSelected"; selFeatures = showFeatures?"search_tabSelected":"search_tabNotSelected"; selPoints = showPoints?"search_tabSelected":"search_tabNotSelected"; visRoads = showRoads?"inline":"none"; visFeatures = showFeatures?"inline":"none"; visPoints = showPoints?"inline":"none"; // create the search results pane var vTable = document.createElement("table"); var vDiv = getObj("resultsarea"); vDiv.appendChild(vTable); vTable.className = "search_findTab"; vTable.cellSpacing = 0; vTable.cellPadding = 3; vTable.style.height = "100%"; var vRow = vTable.insertRow(-1); var vCell = vRow.insertCell(-1); vCell.className = selRoads; vCell.innerHTML = "Roads ("+String(rRoads.length)+")"; vCell.onclick = ClickTabRoads; vCell.align="center"; vCell.id = "tab_road"; vCell = vRow.insertCell(-1); vCell.className = selFeatures; vCell.innerHTML = "Areas ("+String(rFeatures.length)+")"; vCell.onclick = ClickTabFeatures; vCell.align="center"; vCell.id = "tab_feature"; vCell = vRow.insertCell(-1); vCell.className = selPoints; vCell.innerHTML = "Places ("+String(rPoints.length)+")"; vCell.onclick = ClickTabPoints; vCell.align="center"; vCell.id = "tab_point"; vRow = vTable.insertRow(-1); vCell = vRow.insertCell(-1); vCell.colSpan = 3; vCell.style.height = "50%"; var vScroller = document.createElement("div"); vScroller.style.overflowX = "hidden"; vScroller.style.overflowY = "auto"; vScroller.style.position = "static"; vScroller.style.height=getObj("resultsarea").clientHeight - 30; vCell.appendChild(vScroller); var vRes = MakeResultsPane(rRoads,"road"); vRes.style.display = visRoads; vScroller.appendChild(vRes); vRes = MakeResultsPane(rFeatures,"feature"); vRes.style.display = visFeatures; vScroller.appendChild(vRes); vRes = MakeResultsPane(rPoints,"point"); vRes.style.display = visPoints; vScroller.appendChild(vRes); getObj("searchbutton").disabled=false; } var aLayers = new Array ( new MapLayer(12, "Park", "0","2"), new MapLayer(13, "Water", "0","1,2"), new MapLayer(14, "River", "0","1,2"), new MapLayer(15, "Region", "0","1"), new MapLayer(16, "City", "0","3"), new MapLayer(17, "Suburb", "0","2,5"), new MapLayer(19, "Place", "0","1") ); function MapLayer(id,description,line1,line2) { this.id = id; this.description = description; this.line1 = line1; this.line2 = line2; } function GetFeatureDesc(str,layer) { var fields = str.split(";"); for (lc=0;lc0) l1=l1+", "; l1=l1+fields[l1s[l1l]*1]; } l2s = ly.line2.split(","); var l2 = ""; for (l2l=0;l2l0) l2=l2+", "; l2=l2+fields[l2s[l2l]*1]; } ret = "" +toPC(l1)+ "
(" +ly.description+ ") " +toPC(l2)+ ""; } } return ret; } function GetFeatureDescRaw(str,layer) { var fields = str.split(";"); for (lc=0;lc0) l1=l1+", "; l1=l1+fields[l1s[l1l]*1]; } l2s = ly.line2.split(","); var l2 = ""; for (l2l=0;l2l0) l2=l2+", "; l2=l2+fields[l2s[l2l]*1]; } ret = toPC(l1)+ "(" +ly.description+ ")" +toPC(l2); } } return ret; }