
includeScript("http://api.map24.com/ajax/1.2/?init=default");



var markers = new Array();

var townName;
var deelgemeentes; 
var addToStreet;  // wordt toegevoegd aan straatnaam waarnaar je zoekt. Extern opgegeven. Is de naam van de gemeente.
var zoomFar = 7000;
var zoomClose = 500;
                                   
var map = null;
var mrcContainer = null;

var prevEnabledMarker;
var prevDocId;
var imageURL;
var streetname;

var borderCoordsTmp = new Array();
var polyColor;

var expectedResult;
var found;

var mapWidth = 400;
var mapHeight = 400;

function goMap24()
{
  mrcContainer =  new Map24.Webservices.Request.MapletRemoteControl();

	map = Map24.Webservices.getMap24Application({
	  AppKey: "FJX5725cb421bdc8fbb6c1790f6dabc8X13",
	  MapArea: document.getElementById("maparea"),
    Maptype: "JAVA",
	  MapWidth: mapWidth,
	  MapHeight: mapHeight,
	  MRC: mrcContainer
  	});
  	 
  // add overzicht
  var table = document.getElementById("markerlist");
  var row = table.insertRow(-1);
  cell = row.insertCell(-1);
  cell.innerHTML = "<a style=\"cursor: pointer\" onclick=\"moveToObject('myPolygon')\">Overzicht</a>";

  // add markers to list
  var cnt=0;
  for (i=0; i<markers.length; i++)
  {
    addLocation(i);
  }

  // voeg grenzen van gemeente toe aan kaart  
  addPolygonOverlay();

  map.Webservices.sendRequest( mrcContainer );
 

  // plaats camera in "overzicht"-standpunt
  moveToObject('myPolygon');
}

// help-funtie om een extern javascript bestand te importeren
function includeScript(script_filename) {
    var html_doc = document.getElementsByTagName('head').item(0);
    var js = document.createElement('script');
    js.setAttribute('language', 'javascript');
    js.setAttribute('type', 'text/javascript');
    js.setAttribute('src', script_filename);
    html_doc.appendChild(js);
    return false;
}

// voeg toe  <body onload="goMap24()">
function setBodyOnLoad() {
    var browserName=navigator.appName;
    
    if (browserName == "Microsoft Internet Explorer")
    {
      var body_tag = document.getElementsByTagName('body').item(0);
      body_tag.setAttribute('onload', function () { goMap24(); return false; });
    }
    else
    {
      var html_doc = document.getElementsByTagName('head').item(0);
      var js = document.createElement('script');
      html_doc.appendChild(js);
      js.setAttribute('language', 'javascript');
      js.setAttribute('type', 'text/javascript');
      js.innerHTML = "goMap24();";
    }   
}

// om grenzen van de gemeente extern toe te voegen
function addPolygonCoord( lon, lat )
{
  borderCoordsTmp.push({   Lon: lon,
                           Lat: lat  });
}
// om kleur van grenzen in te stellen
function setPolyColor ( r, g, b, a )
{
  polyColor = { R:r, G:g, B:b, A:a  };  
}


// zoek een locatie op, en beweeg camera naar daar. Werkt voor meerdere deelgemeentes.
function geocode( addressString ){

  expectedResult = addressString;
  found = false;
  
  // remove old results
  var container = document.getElementById('results');
  for (i=container.childNodes.length-1; i>=0;i--)
  {
    container.removeChild(container.childNodes[i]);   
  }
  
  // zoek voor elke deelgemeente
  for (var i=0;i<deelgemeentes.length;i++)
  {
    streetname = addressString + ' ' + deelgemeentes[i];
    map.Webservices.sendRequest(        
      new Map24.Webservices.Request.MapSearchFree(map, {
        SearchText: streetname,
        MaxNoOfAlternatives: 1
      })
    );
  }

  // callback functie voor als een resultaat gevonden wordt  
  map.onMapSearchFree = function( event ){
    
    for (i=0;i<event.Alternatives.length;i++)
    {
      var alternative = event.Alternatives[i];
      
      if (alternative.PropertiesMajor['City'] == townName && alternative.PropertiesMajor["Street"] != "")
      {
        /*
        var item = document.createElement("div");
        item.innerHTML = "<a onclick='moveTo' style='cursor:pointer'>" +
                        alternative.PropertiesMajor["Street"] +
                        "</a>";
        document.getElementById("results").appendChild(item);
        */
        if ( alternative.PropertiesMajor["Street"].toLowerCase() == expectedResult.toLowerCase() )
        {
          
          //item.innerHTML += " x"; 
          if (!found)
          {
            flyTo(alternative);
            found=true;
          }
        }
      }
    }
  }
  
}


// zoek een locatie op, en beweeg camera naar daar. Werkt voor meerdere deelgemeentes.
function geocodeFuzzy( addressString ){

  map.Webservices.sendRequest(        
    new Map24.Webservices.Request.MapSearchFree(map, {
      SearchText: addressString,
      MaxNoOfAlternatives: 1
    })
  );
  
  // callback functie voor als een resultaat gevonden wordt  
  map.onMapSearchFree = function( event ){
    flyTo(event.Alternatives[0]);
  }
  
}






// beweeg de camera naar gevonden SearchAlternative
function flyTo(firstResult)
{
  streetname = firstResult.PropertiesMajor["Street"];
  town =  firstResult.PropertiesMajor["City"];
  var lon = firstResult.Coordinate.Longitude;
  var lat = firstResult.Coordinate.Latitude;
          
  if (streetname == "")
  {
    document.getElementById("noresult").style.display = "inline";
  }
  else
  {
    document.getElementById("noresult").style.display = "none";
    mrcContainer.push(
      new Map24.Webservices.MRC.DeclareMap24Label({
        Anchor: "CENTER",
        Coordinate: new Map24.Coordinate( lon, lat ),
        Color: new Map24.Color( { R:0, G:0, B:0, A:255 } ),
        BgColor: new Map24.Color( { R:255, G:255, B:255, A:200 } ),
        BorderColor: new Map24.Color( { R:200, G:0, B:0, A:255 } ),
        MapObjectID: "locationMarker",
        Text: streetname
      })
    );

      
    // toon marker
    mrcContainer.push(
      new Map24.Webservices.MRC.ControlMapObject({
        Control: "ENABLE",
        MapObjectIDs: "locationMarker"
      })
    ); 
              
    mrcContainer.push(
      new Map24.Webservices.MRC.SetMapView({
        Coordinates: new Map24.Coordinate( lon, lat ),
        ClippingWidth: new Map24.Webservices.ClippingWidth(
          { MinimumWidth: zoomClose }              
        )
      })
    );
    map.Webservices.sendRequest( mrcContainer );
    prevEnabledMarker = -1;
  }
}


// Grenzen van de gemeente aanduiden 
function addPolygonOverlay(){
  //var mrcContainer = new Map24.Webservices.Request.MapletRemoteControl( map );
  
  var borderCoords = new Array();
  
  for (i=0; i<borderCoordsTmp.length; i++)
  {
    borderCoords.push( new Map24.Coordinate( borderCoordsTmp[i].Lon, borderCoordsTmp[i].Lat ) );  
  }
  
  mrcContainer.push(
    new Map24.Webservices.MRC.DeclareMap24Polygon({
      MapObjectID: "myPolygon",
      Coordinates: new Map24.Webservices.CoordinatesArray( borderCoords ),
      FillColor: new Map24.Color( polyColor.R, polyColor.G, polyColor.B, polyColor.A )
    })
  );
  mrcContainer.push( new Map24.Webservices.MRC.ControlMapObject({
    Control: 'ENABLE',
    MapObjectIDs: 'myPolygon'
    }) );
  //mrcContainer.push( genSetMapView( 4500, 'myPolygon' ) );
  map.Webservices.sendRequest( mrcContainer );
}



function show3D()
{
  mrcContainer.push( new Map24.Webservices.MRC.ControlComponent({Component: 'M3D', Control: 'SHOW'}) );
  map.Webservices.sendRequest( mrcContainer );  
}

function show2D()
{
  mrcContainer.push( new Map24.Webservices.MRC.ControlComponent({Component: 'M3D', Control: 'HIDE'}) );
  map.Webservices.sendRequest( mrcContainer );
}

// Voeg marker toe aan kaartje en aan lijst
function addLocation(index)
{
/*
  // speciaal geval voor "holstenen": met tooltip
  if (index == 2)
  {
    mrcContainer.push(
      new Map24.Webservices.MRC.DeclareMap24Location({
        MapObjectID: "marker" + index,
        Coordinate: new Map24.Coordinate( markers[index].longitude, markers[index].lattitude ),
        SymbolID: 10281,
        Events: addToolTip()
      })
    );
  }
  else
  {
  */
    mrcContainer.push(
        new Map24.Webservices.MRC.DeclareMap24Location({
        MapObjectID: "marker" + index,
        Coordinate: new Map24.Coordinate( markers[index].longitude, markers[index].lattitude ),
        LogoURL: markers[index].img,
        SymbolID: 10281
      })
    );
  //}
  

  var table = document.getElementById("markerlist");
  var row = table.insertRow(-1);
  var cell = row.insertCell(-1);
  
  cell.innerHTML = "<a style=\"cursor: pointer\" onclick='moveToLocation(" + index + ");'>" + "<span style=\"font-size:8px\"> &gt; </span>" + markers[index].label + "</a>";
}


function addToolTip()
{    
  index = 2;
  
  var events = new Array();
  
  events.push(
    new Map24.Webservices.MapObjectEvent({
      ID: "OnMouseOver",
      Commands: new Map24.Webservices.CommandsArray(
        new Map24.Webservices.MRC.DeclareMap24HTMLObject({ 
                        MapObjectID: "tooltip"+index,
                        Coordinate: new Map24.Coordinate( markers[index].longitude, markers[index].lattitude ),            
                        HTML: //"<div style=\"width:410px;padding-left:210px;padding-bottom:210px\">"+
                              "<div style=\"width:400px;height:216px;font-family:verdana;font-size:10pt;padding:0px;margin:0px;background-color:#FFFFFF; border: solid 1px #000000; \">"+
                              "<div style=\"align:right;padding-right:7px;background-color:rgb(255,110,10);color:white;height:14px\">"+
                              "<a href=\"control:disable\" style=\"font-size:10px;color:white;text-decoration:none\">close</a>"+
                              "</div>"+
                              "<div style=\"height:190px;overflow:scroll;padding-left:10px;padding-top:3px;padding-right:10px;\">"+
                              "<h1>De Holstenen</h1>"+
                              "<div style=\"float:left\"><img src=\"users.pandora.be/jwijnants/bert/holsteen.jpg\" /></div>"+
                              "De welbefaamde <i>vreemde</i> stenen die stammen uit de oertijd. De legende vertelt dat de neanderthalers hun pijlpunten slepen op deze stenen. Vandaar de soms erg diepe uithollingen.<br/>" +
                              //"</div>"+
                              "</div>"+
                              "</div>"
                              }),
        new Map24.Webservices.MRC.ControlMapObject({
                        Control: 'ENABLE',
                        MapObjectIDs: 'tooltip'+index })
      )
    })
  )
  return events;
}

function moveToLocation(index)
{
  
// verberg vorige getoonde marker   
  // als vorige een marker was zonder co�rdinaten
  if (prevEnabledMarker == -1)
  {
    mrcContainer.push(
      new Map24.Webservices.MRC.ControlMapObject({
        Control: "DISABLE",
        MapObjectIDs: "locationMarker"
      })
    ); 
  }
  // als vorige met co�rdinaten was
  else if (prevEnabledMarker != null)
  {
    mrcContainer.push(
      new Map24.Webservices.MRC.ControlMapObject({
        Control: "DISABLE",
        MapObjectIDs: "marker" + prevEnabledMarker
      })
    ); 
  }
  prevEnabledMarker = index;
    
  // voeg marker toe als geen co�rdinaten gegeven zijn maar plaatsnaam
  if ( markers[index].longitude == null || markers[index].lattitude == null )
  {
    map.Webservices.sendRequest(        
      new Map24.Webservices.Request.MapSearchFree(map, {
        SearchText: markers[index].location,
        MaxNoOfAlternatives: 1
      })
    );
    
    // icoontje voor marker instellen. als null wordt een rood vlagske gebruikt
    imageURL = markers[index].img; 
    
    map.onMapSearchFree = function( event ){
      var firstResult = event.Alternatives[0];
      var lon = firstResult.Coordinate.Longitude;
      var lat = firstResult.Coordinate.Latitude;
      
      if (imageURL == null)
      {          
        mrcContainer.push(
          new Map24.Webservices.MRC.DeclareMap24Location({
            MapObjectID: "locationMarker",
            Coordinate: new Map24.Coordinate( lon, lat ),
            SymbolID: 10281
          })
        );
      }
      else
      {
        mrcContainer.push(
          new Map24.Webservices.MRC.DeclareMap24Location({
            MapObjectID: "locationMarker",
            Coordinate: new Map24.Coordinate( lon, lat ),
            LogoURL: imageURL,
            SymbolID: 10286
          })
        );
      }
      
      // toon marker
      mrcContainer.push(
        new Map24.Webservices.MRC.ControlMapObject({
          Control: "ENABLE",
          MapObjectIDs: "locationMarker"
        })
      ); 

      // beweeg camera naar postie van marker
      mrcContainer.push(
        new Map24.Webservices.MRC.SetMapView({
        Coordinates: new Map24.Coordinate( lon, lat ),
        ClippingWidth: new Map24.Webservices.ClippingWidth( { MinimumWidth: zoomClose })
        })
      );
      map.Webservices.sendRequest( mrcContainer );
      prevEnabledMarker = -1;
    }
    
    // toon info-venster
    var id = markers[index].id;
    if (prevDocId != null)
      document.getElementById("info"+prevDocId).style.display = "none";
    document.getElementById("info"+id).style.display = "block";
    prevDocId = id;
  }
   
  // toon marker en ga naar daar als co�rdinaten meegegeven zijn 
  else
  { 
    // toon marker
    mrcContainer.push(
      new Map24.Webservices.MRC.ControlMapObject({
        Control: "ENABLE",
        MapObjectIDs: "marker" + index
      })
    ); 
  
    // beweeg camera naar postie van marker
    mrcContainer.push(
      new Map24.Webservices.MRC.SetMapView({
      Coordinates: new Map24.Coordinate( markers[index].longitude, markers[index].lattitude ),
      ClippingWidth: new Map24.Webservices.ClippingWidth( { MinimumWidth: zoomClose })
      })
    );
    map.Webservices.sendRequest( mrcContainer );
  }
}


function moveToObject(objectId)
{
  mrcContainer.push(
    new Map24.Webservices.MRC.SetMapView({
    MapObjectIDs: objectId,
    ClippingWidth: new Map24.Webservices.ClippingWidth( { MinimumWidth: zoomClose })
    })
  )
  map.Webservices.sendRequest( mrcContainer );
}
   


