var map;
var geocoder;
var point;
var results;
var markers;
var tooltips;
var country;

var route;
var distanceResponse;
var directionsDisplay;
var html;

var maxlat;
var minlat;
var maxlon;
var minlon;

var iconCenter;
var iconResult;
var icon1;

var globaltemp;

google.load('search', '1');

results = Array();      // Array met alle resultaten uit de Google Local Search
markers = Array();      // Array met alle markers van resultaten
tooltips = Array();     // Array met alle teksten voor tooltips
country = "";
    
    function checkPost(base, what, where){
        if(where.length > 0){
             // Er wordt gezocht op een specifieke locatie. Redirecten, zodat juiste URL wordt opgepikt door Google en AdSense.
             if(what.length > 0){
                window.location = base+what+"/"+where;
             } else {
                window.location = base+"city/"+where;
             }
             return false;
        } else {
            //Er wordt gezocht op de landkaart. Niet redirecten, maar de zoekopdracht direct uitvoeren.
             activateStack(2,false); 
             zoeken(what, where); 
             return false;
        }
    }
    
    function centerSearch(where){
        if(point) point.setMap();
        geocoder.geocode( { 'address': where + ", " + country}, function(results, status) {
          if (status == google.maps.GeocoderStatus.OK) {
            var marker = new google.maps.Marker({
                map: map, 
                position: results[0].geometry.location,
                title: where,
                icon: iconCenter
            });
            point = marker;
            map.setCenter(point.position);
          }});
    }
    
    function zoeken(what, where){
        if(point) point.setMap();
        if(where.length > 0){
            geocoder.geocode( { 'address': where + ", " + country}, function(results, status) {
              if (status == google.maps.GeocoderStatus.OK) {
                var marker = new google.maps.Marker({
                    map: map, 
                    position: results[0].geometry.location,
                    title: where,
                    icon: iconCenter
                });
                point = marker;
                doSearch(what);
              } else {
                alert("The location can not be found: " + status);
              }
            });
        } else {
            point = new google.maps.Marker({
                map: map, 
                position: map.getCenter(),
                icon: iconCenter
            });
            doSearch(what);
        }
    }
    
    function doSearch(what){
      map.setCenter(point.position);
      
      results = Array();

      // Create a LocalSearch instance.
      localSearch = new google.search.LocalSearch();
      localSearch.setNoHtmlGeneration();
      localSearch.setResultSetSize(8);
      
      // Set searchComplete as the callback function when a search is complete. The
      // localSearch object will have results in it.
      localSearch.setSearchCompleteCallback(this, toonResultaten);

      localSearch.setCenterPoint(point.position);
      // Specify search quer(ies)
      localSearch.execute(what); 
    }

    function toonResultaten() {
        page = localSearch.cursor.currentPageIndex;
        if(page == 0) html = "";

        var container1 = getElement("stackbox2_first10");
        var container2 = getElement("stackbox2_next");

        if(page == 0){
            deleteResults();  
            maxlon = null;
            maxlat = null;
            minlat = null;
            minlon = null;
        }
        
          if (localSearch.results && localSearch.results.length > 0) {
            for (var j = 0; j < localSearch.results.length; j++) {
              var teller = (page * 8) + j;
              html += "<DIV id='topblok" + teller + "' class='topblok' onmouseover='changeBackground(\"topblok" + teller + "\", \"#FFFFFF\"); showLayer(\"subblok" + teller + "\"); showTooltip(markers[" + teller + "], false);' onmouseout='changeBackground(\"topblok" + teller + "\", \"#e4e4e4\"); hideLayer(\"subblok" + teller + "\"); hideTooltip(markers[" + teller + "]);'>";
              html += "<div class='itemteller'>"+ (teller + 1) + "</div>";
              html += "<span class='itemheader'><a href='" + localSearch.results[j].url +"' target='_blank'>" + localSearch.results[j].titleNoFormatting + "</a></span>";
              html += "<br>" + localSearch.results[j].streetAddress + ", <i>" + localSearch.results[j].city + "</i>";
              html += "<div id='subblok" + teller + "' class='subblok' style='display:none'>";
              if(localSearch.results[j].addressLines[1]) html += localSearch.results[j].addressLines[1];
              for(k in localSearch.results[j].phoneNumbers) html += "<BR/>Tel: " + localSearch.results[j].phoneNumbers[k].number;
              html += "</div>";
              html += "</div>";
                            
              if(!maxlat || localSearch.results[j].lat > maxlat) maxlat = localSearch.results[j].lat;
              if(!minlat || localSearch.results[j].lat < minlat) minlat = localSearch.results[j].lat;
              if(!maxlon || localSearch.results[j].lng > maxlon) maxlon = localSearch.results[j].lng;
              if(!minlon || localSearch.results[j].lng < minlon) minlon = localSearch.results[j].lng;
                
                var marker = new google.maps.Marker({
                    map: map, 
                    position: new google.maps.LatLng(localSearch.results[j].lat, localSearch.results[j].lng),
                    naam: localSearch.results[j].titleNoFormatting,
                    teller: teller,
                    icon: iconLo,
                    tooltiptext : "<strong>"+ localSearch.results[j].titleNoFormatting +"</strong><br>" + localSearch.results[j].streetAddress + " <i>" + localSearch.results[j].city + "</i>",
                    url: localSearch.results[j].url
                });
                
                google.maps.event.addListener(marker, 'mouseover', function() {
                    changeBackground("topblok" + this.teller, "#FFFFFF");
                    showLayer("subblok" + this.teller);
                    focusLayer("topblok" + this.teller);
                    showTooltip(this, true);
                });
                google.maps.event.addListener(marker, 'mouseout', function() {
                    changeBackground("topblok" + this.teller, "#e4e4e4");
                    hideLayer("subblok" + this.teller);
                    hideTooltip(this);
                });
                /*
                google.maps.event.addListener(marker, 'click', function() {
                   activateStack(3, true); 
                   loadPopup(this.url);
                });
                */
                markers.push(marker);  
                if(teller == 9) {
                    container1.innerHTML = html;
                    html = "";
                }
            }
          }
        
        if(page == localSearch.cursor.pages.length - 1){
            html += "<p><a href='" + localSearch.cursor.moreResultsUrl + "' target='_blank'>via Google</a></p>";
            html += "<div id='branding'  style='float: left;'></div><br/>";
            container2.innerHTML = html;
            
            // Include the required Google branding. 
            // Note that getBranding is called on google.search.Search
            google.search.Search.getBranding('branding');    
            
            if(maxlon < 0 && minlon < 0){
                temp = minlon;
                minlon = maxlon;
                maxlon = temp;
            }
            map.fitBounds(new google.maps.LatLngBounds(new google.maps.LatLng(minlat, minlon) , new google.maps.LatLng(maxlat,maxlon)));
            
            google.maps.event.clearListeners(map, 'dragend');
            google.maps.event.addListener(map, 'dragend', function() {
                    checkUpdate();
                });
                
        } else {
            localSearch.gotoPage(page + 1);
        }
      }      
    
      function deleteResults(){
          for(i in markers){
              markers[i].setMap();
          }
          markers = Array();
      }
          
  function getElement(whichLayer)
    {
        if (document.getElementById) {
            // this is the way the standards work
            return document.getElementById(whichLayer);
        } else if (document.all) {
            // this is the way old msie versions work
            return document.all[whichLayer];
        } else if (document.layers) {
            // this is the way nn4 works
            return document.layers[whichLayer];
        } else {
            return document.getElementById(whichLayer);
        }
    }

    function getCheckedValue(radioObj) {
        if(!radioObj)
            return "";
        var radioLength = radioObj.length;
        if(radioLength == undefined)
            if(radioObj.checked)
                return radioObj.value;
            else
                return "";
        for(var i = 0; i < radioLength; i++) {
            if(radioObj[i].checked) {
                return radioObj[i].value;
            }
        }
        return "";
    }    

  function checkUpdate(){
      if(getElement("check_move").checked == true){
          getElement("search_where").value = "";
          zoeken(getElement("search_what").value, getElement("search_where").value);
      }
  }
  
  function checkFirstSearch(loc){
      //Start searching if what is available
      what = getElement("search_what").value;
      where = getElement("search_where").value;
      if(what.length > 0){
          if(document.URL.search("show_all") > 1){
            //Keep stack 1 open
          } else {
            activateStack(2,false);
          }
          zoeken(what,where);  
      } else if(where.length > 0){
          centerSearch(where);
      }
  }
    
  function initialize(lat, lon, zoom, domainCountry) {
    geocoder = new google.maps.Geocoder();
    country = domainCountry;
    
    var myLatlng = new google.maps.LatLng(lat, lon);

    var myOptions = {
      zoom: zoom,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    }
    map = new google.maps.Map(document.getElementById("map"), myOptions);
    directionsDisplay = new google.maps.DirectionsRenderer();

    iconCenter = new google.maps.MarkerImage('http://data.weetmeer.nl/images/locatie.png', new google.maps.Size(32, 32), new google.maps.Point(0,0), new google.maps.Point(16, 16));
    iconResult = new google.maps.MarkerImage('http://www.weetwaar.nl/images/marker0.png', new google.maps.Size(12, 12), new google.maps.Point(0,0), new google.maps.Point(6, 6));
    iconLo = new google.maps.MarkerImage('http://www.weetwaar.nl/images/marker.png', new google.maps.Size(20,20), new google.maps.Point(0,0), new google.maps.Point(10,10));
    iconHi = new google.maps.MarkerImage('http://www.weetwaar.nl/images/markerhi.png', new google.maps.Size(20,20), new google.maps.Point(0,0), new google.maps.Point(10,10));
  
  // Detect users location
  // Try W3C Geolocation (Preferred)
  if(navigator.geolocation) {
    browserSupportFlag = true;
    navigator.geolocation.getCurrentPosition(function(position) {
      initialLocation = new google.maps.LatLng(position.coords.latitude,position.coords.longitude);
      map.setCenter(initialLocation,12);
      checkFirstSearch(initialLocation);
    }, function() {
      handleNoGeolocation(lat, lon, browserSupportFlag);
    });
  // Try Google Gears Geolocation
  } else if (google.gears) {
    browserSupportFlag = true;
    var geo = google.gears.factory.create('beta.geolocation');
    geo.getCurrentPosition(function(position) {
      initialLocation = new google.maps.LatLng(position.latitude,position.longitude);
      map.setCenter(initialLocation,12);
      checkFirstSearch(initialLocation);
    }, function() {
      handleNoGeoLocation(lat, lon, browserSupportFlag);
    });
  // Browser doesn't support Geolocation
  } else {
    browserSupportFlag = false;
    handleNoGeolocation(lat, lon, browserSupportFlag);
  }
  
  function handleNoGeolocation(errorFlag) {
      var myLatLng = new google.maps.LatLng(lat, lon);
      map.setCenter(myLatLng);
      checkFirstSearch();
  }
  
}    

function showTooltip(marker, mapevent) {
    globaltemp = marker;
      var tooltip = getElement("tooltip");
      
        marker.setIcon(iconHi);
      
        var scale = Math.pow(2, map.getZoom());
        var nw = new google.maps.LatLng(
            map.getBounds().getNorthEast().lat(),
            map.getBounds().getSouthWest().lng()
        );
        var worldCoordinateNW = map.getProjection().fromLatLngToPoint(nw);
        var worldCoordinate = map.getProjection().fromLatLngToPoint(marker.position);
        var pixelOffset = new google.maps.Point(
            Math.floor((worldCoordinate.x - worldCoordinateNW.x) * scale),
            Math.floor((worldCoordinate.y - worldCoordinateNW.y) * scale)
        );      
      
      //var point = googlemap.getCurrentMapType().getProjection().fromLatLngToPixel(googlemap.getBounds().getSouthWest(),googlemap.getZoom());
      //var offset = googlemap.getCurrentMapType().getProjection().fromLatLngToPixel(marker.getPoint(),googlemap.getZoom());
      tooltip.innerHTML = marker.tooltiptext;

      tooltip.style.display = "block";
      if(mapevent){
        tooltip.style.left = (pixelOffset.x + 10) + "px";
        tooltip.style.top = (pixelOffset.y + 20) + "px";
      } else {
        tooltip.style.left = (pixelOffset.x) + "px";
        tooltip.style.top = (pixelOffset.y) + "px";
      }
      //tooltip.style.left = (Math.floor(offset.x - point.x) + 20) + "px";
      //tooltip.style.top = (Math.floor(360 - (point.y - offset.y)) + 30) + "px";
}

function hideTooltip(marker) {
  var tooltip = getElement("tooltip");
  tooltip.style.display = "none";
  marker.setIcon(iconLo);
}  

function focusLayer(txt){
    var element = getElement(txt);
    element.scrollIntoView(true);
    element.focus();
    element.blur();
}

function loadPopup(url){
    var container =  getElement("stackbox3");
    html = "<div class='subtab groen'>Details</div>"; 
    html += "<div><iframe id='iframe'></iframe></div>";
    container.innerHTML = html;
    getElement("iframe").src = url;
}

// ----------------------- RESIZE GEDEELTE ------------------------------- //

window.onresize = doResize;

function doResize(){
    var screenheight;
 
     // the more standards compliant browsers (mozilla/netscape/opera/IE7) use window.innerWidth and window.innerHeight
     if (typeof window.innerHeight != 'undefined')
     {
          screenheight = window.innerHeight
     }
     
    // IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)
     else if (typeof document.documentElement != 'undefined'
         && typeof document.documentElement.clientHeight !=
         'undefined' && document.documentElement.clientHeight != 0)
     {
           screenheight = document.documentElement.clientHeight
     }
     
     // older versions of IE
     else
     {
           screenheight = document.getElementsByTagName('body')[0].clientHeight
     }                                                                          

     if(screenheight > 400){
     
        var baseheight = screenheight - 100;
        
        var mapfull = getElement("map");
        var mapcontainer = getElement("mapcontainer");
        var container2 = getElement("container2");
        var container3 = getElement("container3");
        var stackcontainer = getElement("stackcontainer");
        var stackbox1 = getElement("stackbox1");
        var stackbox2 = getElement("stackbox2");
        var stackbox3 = getElement("stackbox3");
        var stackbox4 = getElement("stackbox4");
         
        container2.style.height = (baseheight - 0) + "px";
        stackcontainer.style.height = (baseheight - 0) + "px";
        stackbox1.style.height = (baseheight - 55) + "px";
        stackbox2.style.height = (baseheight - 55) + "px";
        stackbox3.style.height = (baseheight - 55) + "px";
        stackbox4.style.height = (baseheight - 55) + "px";
        container3.style.height = (baseheight - 40) + "px";
        mapcontainer.style.height = baseheight + "px";
        mapfull.style.height = baseheight + "px";
     }
}


function activateStack(nr, printLoading)
{
    if(nr == 2){
        var container2 = getElement("container2");
        var container3 = getElement("container3");
        container2.style.display = "block";
        container3.style.marginRight = "350px";
    }
    
    var stack1 = getElement("stackbox1");
    var stack2 = getElement("stackbox2");
    var stack3 = getElement("stackbox3");
    var stack4 = getElement("stackbox4");
    stack1.style.display = "none";
    stack2.style.display = "none";
    stack3.style.display = "none";
    stack4.style.display = "none";

    var activestack = getElement("stackbox"+nr);
    var activetab = getElement("stacktab"+nr);
    if(printLoading) activestack.innerHTML = "<img src='images/loading.gif' align='absmiddle'> De gegevens worden geladen...";
    activestack.style.display = "block";
    activetab.style.display = "block";
    
    if(nr == 2){
        setContainer2Width(350);
    } else {
        setContainer2Width(500);
    }
}

function toggleContainer2(){
    var container2 = document.getElementById("container2");
    var container3 = document.getElementById("container3");
    var togglebutton = document.getElementById("togglebutton");
    if(container2.style.display == "none"){
        container2.style.display = "block";
        setContainer2Width(350);
        togglebutton.style.backgroundImage = "url('http://test.weetwaar.nl/images/togglebutton1.png')";
    } else {
        container2.style.display = "none";
        container3.style.marginRight = "0px";
        togglebutton.style.backgroundImage = "url('http://test.weetwaar.nl/images/togglebutton2.png')";
    }
}

function setContainer2Width(width){
    var container2 = document.getElementById("container2");
    var container3 = document.getElementById("container3");
    var toptabbox = getElement("toptabbox");
    var stack = getElement("stackcontainer");
    var stack1 = getElement("stackbox1");
    var stack2 = getElement("stackbox2");
    var stack3 = getElement("stackbox3");
    var stack4 = getElement("stackbox4");
    var tab = getElement("stacktab1");

    widthpx = width + "px";
    toppx = (width - 10) + "px";
    stackpx = (width - 9) + "px";
    tabpx = (width - 237) + "px";
    
    container3.style.marginRight = widthpx;
    container2.style.width = widthpx;
    stack.style.width = widthpx;

    toptabbox.style.width = toppx;
    tab.style.width = tabpx;
    stack1.style.width = stackpx;
    stack2.style.width = stackpx;
    stack3.style.width = stackpx;
    stack4.style.width = stackpx;
    
}

function pause(millis) 
{
var date = new Date();
var curDate = null;

do { curDate = new Date(); } 
while(curDate-date < millis);
} 


function setLocation(name, value, field){
    // homemarker.setPoint(point, 13);
    var address = value + ", Amsterdam, The Netherlands";
    var result;
    var teller = 0;
    document.formWW.locatie.value = "Bezig met zoeken...";
    
    result = geocoder.getLatLng(address, function(point){ 
        if (!point) { 
            alert("Het adres of de postcode '" + value + "' kan niet gevonden worden in Amsterdam"); 
            document.formWW.locatie.value = "";
        } else {
            document.formWW.locatie.value = value + ":"+ point;
            createCookie(name, value + ":"+ point,"730"); 
        } 
    });
    
    while(document.formWW.locatie.value == "Bezig met zoeken..." && teller <= 20){
        pause(500);
        if(teller == 2) alert("Uw locatie wordt aangepast naar: "+field.value);
        field.value = document.formWW.locatie.value;
        teller++;
    }
    return result;
}
 
 
function weetwaarScore(name, score){
    for(i=1; i<=5; i++){
        var img = "star" + name + i;
        document.images[img].src = "images/marker"+ i +"off.png";
    }
    var img = "star" + name + score;
    document.images[img].src = "images/marker"+ score +".png";

    document.form1.elements[name].selectedIndex = score - 1;
}   
