
var rRoads = new Array();
var rFeatures = new Array();
var rPoints = new Array();


function ScrubDupes(arr)
{
    var ret = new Array();
    for (l=0;l<arr.length;l++) {
        e = arr[l];
        count = 0;
        avgx = 0;
        avgy = 0;
        for (l2=0;l2<arr.length;l2++) {
            if (l!=l2 && (arr[l].caption == arr[l2].caption) && (arr[l].number==arr[l2].number)) {
                count = count + 1;
                avgx += e.x*1;
                avgy += e.y*1;
                arr.splice(l2,1);
                if (l2!=0) l2--;
            }
        }

        if (count>0) {
            e.x = avgx/count;
            e.y = avgy/count;
        }
        
        ret.push(e);
    }
    return ret;
}


function Result(layer,x,y,metadata,ref,match,caption,number,cc)
{
	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;
}


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]);
  //if (toPC(p[7]).length > rname.length) rname = toPC(p[7]);
  
  rname =p[5] + " " + p[6];
 // if (p[7].length > rname.length) rname = p[7];
  
  var arCity = p[1];
  var arProv = p[0];
  var arSub =  p[2];
  var 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]);
	ret = p[0] + ",(" + p[1]+ ") " + p[2] + ", "+ p[3];
	return ret;
}



function GetCaption(ent,which)
{
	arr = null;
	if (!isNull(arr)) {
		var p = ent.metadata.split(";");
		desc = MetaPopup(p[0], ent.metadata_ext, ent.ref, "search");
	} else {
	    var desc = "";
			switch (which) {
			case "road" :
		        var p = ent.metadata.split(";");
		        rname = p[5] + " " + p[6];
		        //if (p[7].length > rname.length) rname = p[7];
		        desc = rname + ", " + p[1] + ", "+ p[0];
				break;
			case "feature" :
				desc = GetFeatureDescRaw(ent.metadata,ent.layer);
				break;
			case "point" :
		        var p = ent.metadata.split(";");
	        	desc = "Name: " + p[0] + ",Classification: " +p[1]+ ",Location: " + p[2] + ", "+ p[3];
				break;
		}
	}
	return desc;
}

function CMPresults(a,b)
{
	matcha = a.match;
	matchb = b.match;
	if (a.pri>b.pri) return 1;
	if (a.pri<b.pri) return -1;
	if (a.number>0) matcha+=25;
	if (b.number>0) matchb+=25;
	if (matcha>matchb) return -1;
	if (matcha<matchb) return 1;
	if (a.caption<b.caption) return -1;
	if (a.caption>b.caption) return 1;
	return 0;
}
	
var aLayers = new Array (
	new MapLayer(5, "Park", "0","2"),
	new MapLayer(6, "Water", "0","1,2"),
	new MapLayer(7, "River", "0","1,2"),
	new MapLayer(8, "Region", "0","1"),
	new MapLayer(9, "City", "0","3"),
	new MapLayer(10, "Suburb", "0","2,5"),
	new MapLayer(12, "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;lc<aLayers.length;lc++) {
		ly=aLayers[lc];
		if (ly.id==layer) {
			l1s = ly.line1.split(",");
			var l1 = "";
			for (l1l=0;l1l<l1s.length;l1l++) {
				if (l1.length>0) l1=l1+", ";
				l1=l1+fields[l1s[l1l]*1];
			}

			l2s = ly.line2.split(",");
			var l2 = "";
			for (l2l=0;l2l<l2s.length;l2l++) {
				if (l2.length>0) l2=l2+", ";
				l2=l2+fields[l2s[l2l]*1];
			}

			ret = l1+ ",(" +ly.description+ ") " +l2;
		}
	}
	return ret;
}


function GetFeatureDescRaw(str,layer)
{
	var fields = str.split(";");
	
	for (lc=0;lc<aLayers.length;lc++) {
		ly=aLayers[lc];
		if (ly.id==layer) {
			l1s = ly.line1.split(",");
			var l1 = "";
			for (l1l=0;l1l<l1s.length;l1l++) {
				if (l1.length>0) l1=l1+", ";
				l1=l1+fields[l1s[l1l]*1];
			}

			l2s = ly.line2.split(",");
			var l2 = "";
			for (l2l=0;l2l<l2s.length;l2l++) {
				if (l2.length>0) l2=l2+", ";
				l2=l2+fields[l2s[l2l]*1];
			}

			ret = l1+ "(" +ly.description+ ")" +l2;
		}
	}
	return ret;
}



function highlight(b, div)
{
    if (b) {
        div.style.backgroundColor = backgroundColor;      
    } else {
        div.style.backgroundColor = '#FFFFFF';
    }
}



        
function returnedresults(data) {
        var html = "";
        var maxRoad = 0;
        var maxFeature = 0;
        var maxPoint = 0;
        var count100;

        rRoads = new Array();
        rFeatures = new Array();
        rPoints = new Array();



        for (l = 0; l < data.results.match.length; l++) {
            var item = data.results.match[l];
            var layer = item.layer * 1;
            var x = item.x;
            var y = item.y;
            var metadata = item.metadata;
            var ref = item.ref;
            var marker_x = item.marker_x;
            var marker_y = item.marker_y;
            var number = item.number;
            var match = item.match;
            var r = new Result(layer, marker_x, marker_y, metadata, ref, match, "", number, item.cc);

            if (match == 100) count100++;
            var maxTab = 'r';
            var maxAll = -1;


            if (((layer >= 0) && (layer <= 4)) || (layer == 6) || (layer == 14) || (layer == 15)) {
                r.caption = GetCaption(r, "road");
                rRoads.push(r);
                if (match > maxRoad) maxRoad = match;
                if (match > maxAll) {
                    maxAll = match;
                    maxTab = 'r';
                }
            } else if ((layer >= 5) && (layer <= 11)) {
                r.caption = GetCaption(r, "feature");
                rFeatures.push(r);
                if (match > maxFeature) maxFeature = match;
                if (match > maxAll) {
                    maxAll = match;
                    maxTab = 'f';
                }
            } else if (layer == 12) {
                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);

        rRoads.sort(CMPresults);
        rFeatures.sort(CMPresults);
        rPoints.sort(CMPresults);
html = ''
//you just need to make this generate html as you require...
        for (i = 0; i < rRoads.length; i++) {
           // html = html + "<div id='tempResults_" + String(rRoads[i].ref) + "' onmouseover='highlight(true,this)' onmouseout='highlight(false,this)' onclick='setPoint(" + jsprefix + "mapAreaObject,\"" + prefix + "\",\"" + rRoads[i].x + "\",\"" + rRoads[i].y + "\",\"" + rRoads[i].ref + "\", this)'>" + GetRoadDesc(rRoads[i].metadata, rRoads[i].number) + "</div>"
             html += '<tr><TD class="fntwhite"><li></td><td class="fntwhite"><a href="#"  onclick="getroute('+rRoads[i].x +','+rRoads[i].y +')" class="fntwhite">' + GetRoadDesc(rRoads[i].metadata, rRoads[i].number) + '</font></a></td></tr>'
            
        }

        for (i = 0; i < rFeatures.length; i++) {
            //html = html + "<div id='tempResults_" + String(rFeatures[i].ref) + "' onmouseover='highlight(true,this)' onmouseout='highlight(false,this)' onclick='setPoint(" + jsprefix + "mapAreaObject,\"" + prefix + "\",\"" + rFeatures[i].x + "\",\"" + rFeatures[i].y + "\",\"" + rFeatures[i].ref + "\", this)'>" + GetFeatureDesc(rFeatures[i].metadata, rFeatures[i].layer); +"</div>"
            html += '<tr><TD class="fntwhite"><li></td><td class="fntwhite"><a href="#"  onclick="getroute('+rFeatures[i].x +','+rFeatures[i].y +')" class="fntwhite">' + GetFeatureDesc(rFeatures[i].metadata, rFeatures[i].layer) + '</font></a></td></tr>'
        }

        for (i = 0; i < rPoints.length; i++) {
            //html = html + "<div id='tempResults_" + String(rPoints[i].ref) + "' onmouseover='highlight(true,this)' onmouseout='highlight(false,this)' onclick='setPoint(" + jsprefix + "mapAreaObject,\"" + prefix + "\",\"" + rPoints[i].x + "\",\"" + rPoints[i].y + "\",\"" + rPoints[i].ref + "\", this)'>" + GetPointDesc(rPoints[i].metadata); +"</div>"
             html += '<tr><TD  class="fntwhite"><li></td><td><a href="#"  onclick="getroute('+rPoints[i].x +','+rPoints[i].y +')" class="fntwhite">' + GetPointDesc(rPoints[i].metadata) + '</font></a></td></tr>'
        }
        
//      then put the html somewhere.   

if(html=='') {
    document.getElementById("roadresults").innerHTML = "Cannot find Road, Please try again";     
    return false;
}
html = '<table><tr><td colspan=2 valign=top class="fntwhite"><b>Click on a road below to get Directions.</B><hr ></td></tr>' + html +'</table>'
document.getElementById("roadresults").innerHTML = html;     
}
//NIcks stuff from here

function getroads(){
    
    var to_x
    var to_y
    var roads = getObj("getroads");
    if (roads.value==''){
        alert("Please enter a road")
        return false;
    }
    geturl()
  
}    

var scriptHistory = new Array();
var scriptCounter = 1;
var pageTracker = null;

function jsonCleanUp()
{
    while (scriptHistory.length > 30) {        
        var obj = scriptHistory[0];
        document.getElementsByTagName('head')[0].removeChild(obj); 
        scriptHistory.splice(0,1);
    }
}
function jsonFunction(url)
{ 
   
//    var milisecTime = new Date().getTime();
 //  url = url + "&time= " + milisecTime + "&counter=" + scriptCounter + 
  //  alert(url)
    scriptCounter++;
    
	jscript = document.createElement("script");
	jscript.setAttribute("type", "text/javascript");
	jscript.setAttribute("src", url);
	
	document.getElementsByTagName('head')[0].appendChild(jscript);
    scriptHistory.push(jscript);	
}
window.setInterval("jsonCleanUp()",10000);

function getroute(x,y)
{
    sel = getObj("officelist");
    if (sel.selectedIndex == -1) {
        alert("Please select a Branch")
        return false;
    }
    var ptInfo = points[sel.selectedIndex];
    var to_x=ptInfo.x;
    var to_y=ptInfo.y;
    var from_x = x;
    var from_y = y;
    var URL = "http://www.streetmaps.co.za/ajax_route.asp?key=ENQHDFEVSHHTOOOBVLTBFPCDDSIQAWOH&x1=" +from_x +"&y1="+from_y+"&x2=" +to_x +"&y2="+to_y+"&fmt=js&jscb=setRoute"
    document.getElementById("roadresults").innerHTML = 'Loading Route...'; 
    
    myMap.ShowRoute(from_x*1,from_y*1,to_x*1,to_y*1,myMap)
    myMap.ZoomBounds(from_x,from_y,to_x,to_y);
    myMap.Init();
    
    jsonFunction(URL)
}
function getprintroute(from_x,from_y,to_x,to_y)
{
    var URL = "http://www.streetmaps.co.za/ajax_route.asp?key=ENQHDFEVSHHTOOOBVLTBFPCDDSIQAWOH&x1=" +from_x +"&y1="+from_y+"&x2=" +to_x +"&y2="+to_y+"&fmt=js&jscb=setRoute"
    document.getElementById("roadresults").innerHTML = 'Loading Route...'; 
    jsonFunction(URL)
}

function setRoute(data) 
{
   var dirResults = data.results.route;
   var showresults =""
   var splitdata
   var roadname
   var totdist 
   
   for (var i = 0; i < dirResults.length; ++i)
    {
        
        splitdata = dirResults[i].data.split("|")
        roadname = splitdata[1]
        roadname = roadname.replace(/N&#124;/g,"")
        roadname = roadname.replace(/F&#124;/g,"")
        roadname = roadname.replace(/R&#124;/g,"")
        roadname = roadname.replace(/C&#124;/g,"")
        roadname = roadname.replace(/E&#124;/g,"")
        roadname = roadname.replace(/S&#124;/,"")
        totdist = splitdata[3]
        showresults += "<tr><Td class='fntwhite' valign=top>" + dirResults[i].step + "</td><td class='fntwhite'>"+ splitdata[0] + " " +  roadname +" travel for " + splitdata[2]+" </td></tr>"
    }

    
    var startroute = "<tr><td colspan=2 class='fntwhite'><B>Start : " + data.results.start.data +"&nbsp;</b><hr></td></tr>";
    var endroute = "<tr><td colspan=2 class='fntwhite'><hr><B> End  : " + data.results.end.data +",<BR>Total Distance : " + totdist +"</b></td></tr>";
    var ptintbutt  = "<tr><td colspan=2 align=right class='fntwhite'>[<a class='fntwhite' target='_blank' href='print.asp?data=" +data.results.id.data +"'>PRINT</a>]</td></tr>";
    if (location.href.indexOf("print.asp")!=-1){
        ptintbutt = '';
    }
    showresults = "<table>" + ptintbutt + startroute +showresults + endroute +"</table>"
    document.getElementById("roadresults").innerHTML = showresults; 
    
    
   
}
function setStatus(data) 
{
 
    var RoadResults = data.results.match;
    var showresults =""
    for (var i = 0; i < RoadResults.length; ++i)
    {
          showresults += '<a href="#" title='+ RoadResults[i].type +' onclick="getroute('+RoadResults[i].x+','+RoadResults[i].y+')"><font color="<%= fontcolor%>">' + RoadResults[i].desc + '</font></a><br>'
    }
    document.getElementById("roadresults").innerHTML = showresults;
}

function geturl()
{
    var road= document.getElementById("getroads").value;
    document.getElementById("roadresults").innerHTML = 'Loading Roads....';
    //alert("http://www.streetmaps.co.za/ajax_search.asp?key=ENQHDFEVSHHTOOOBVLTBFPCDDSIQAWOH&s1=" + road +"&fmt=js&jscb=returnedresults&raw=1") 
    jsonFunction("http://www.streetmaps.co.za/ajax_search.asp?key=ENQHDFEVSHHTOOOBVLTBFPCDDSIQAWOH&s1=" + road +"&fmt=js&jscb=returnedresults&raw=1")

}
