﻿//  Google Maps
var map = null;
var geocoder = null;

// Standaardlocatie = Amsterdam
var latStart = 52.373922404495474;
var lonStart = 4.8909759521484375;
var zoomStart = 11;

// Maximaal uigezoomd
var zoomMin = 9;

var currentIds; // ID's zichtbaar op kaart
var mymarkers = new Array(); // Lijst van markers
var startAddress = ""; // Wordt gevuld als via querystring een startplaats wordt aangegeven

var complexenJson = null;
//var vheJson = null;

var sortStatus = "minhuur2_asc"; // Welke zoekinstelling is actief

var onMapMinHuur = 0; // Minimale huurprijs op de kaart zichtbaar
var onMapMaxHuur = 2000; // Maximale huurprijs op de kaart zichtbaar

var onMapMinOp = 0; // Minimale oppervlakte op de kaart zichtbaar
var onMapMaxOp = 200; // Maximale oppervlakte op de kaart zichtbaar

var mapFirstLoad = true; // Is Google Maps + markers al één keer geheel geladen?

// Zoekwaarden
var minRent = 0;
var maxRent = 100000;
var minSurface = 0;
var maxSurface = 100000;
var showAppartments = true;
var showHouses = true;
var numberOfBedrooms = 1;

// Aantal zichtbare
var complexZichtbaar = 0;

// Marker icoontjes
var markerImage = new google.maps.MarkerImage('/images/dwa/markerGroen.png',
    new google.maps.Size(28, 32),   // This marker is 20 pixels wide by 32 pixels tall.
    new google.maps.Point(0, 0),    // The origin for this image is 0,0.
    new google.maps.Point(14, 25)); // The anchor for this image is the base of the flagpole at 0,32.

var shadow = new google.maps.MarkerImage('/images/dwa/markerSchaduwTrans2.png',
    new google.maps.Size(30, 24),
    new google.maps.Point(0, 0),
    new google.maps.Point(8, 16));

var markerImageDeselect = new google.maps.MarkerImage('/images/dwa/markerDeSelect.png',
    new google.maps.Size(28, 32),
    new google.maps.Point(0, 0),
    new google.maps.Point(14, 25));

var markerImageSelect = new google.maps.MarkerImage('/images/dwa/markerSelect.png',
    new google.maps.Size(28, 32),
    new google.maps.Point(0, 0),
    new google.maps.Point(14, 25));

function seGLoad()
{
    // Geocodering
    geocoder = new google.maps.Geocoder(); 
    
    // Map instellingen
    var latlng = new google.maps.LatLng(latStart, lonStart); 
    var myOptions = { zoom: zoomStart, disableDefaultUI: true, center: latlng, mapTypeId: google.maps.MapTypeId.TERRAIN };
    
    // Map aanmaken
    map = new google.maps.Map(document.getElementById("googleMaps"), myOptions);

    // Markers plaatsen
    placeMarkers();

    // Beperk zoomniveau
    google.maps.event.addListener(map, 'zoom_changed', function() {
        if (map.getZoom() < zoomMin)
        {
            map.setZoom(zoomMin);
        }
    });
    
    // Event handler
    google.maps.event.addListener(map, 'idle', function() { drawResults(); });
    
    // Indien een startadres is ingevuld, dit meteen tonen
    if (startAddress != "" && geocoder)
    {
        zoekAdres(startAddress + ", nederland");
        
        try
        {
            // Zoek opdracht bijhouden in Google Analytics
            pageTracker._trackPageview("/woningaanbod/zoekactie/" + startAddress);
        }
        catch (err)
        {
            
        }
    }
}

function zoekAdres(address)
{ 
    if (geocoder)
    { 
        geocoder.geocode( { 'address': address}, function(results, status)
        {
            if (status == google.maps.GeocoderStatus.OK)
            {
                map.setCenter(results[0].geometry.location); 
            }
            else
            { 
                alert("Adres niet gevonden: " + status); 
            }
        }); 
    }
}

function placeMarkers()
{
    mymarkers = new Array();
    
    var glatUPD = new Array();
    glatUPD = glat;
    
    var glongUPD = new Array();
    glongUPD = glong;
    
    var HoofdComplexNaamUPD = new Array();
    HoofdComplexNaamUPD = HoofdComplexNaam;
    
    var HoofdComplexOnyxIdUPD = new Array();
    HoofdComplexOnyxIdUPD = HoofdComplexOnyxId;
    
    for (var i = 0; i < glat.length; i++)
    {
        var myLatlng = new google.maps.LatLng(glatUPD[i],glongUPD[i]);
        var marker = new google.maps.Marker({
            position: myLatlng, 
            map: map,
            shadow: shadow,
            icon: markerImage,
            title: HoofdComplexNaamUPD[i]
        });
        
        marker.vID = HoofdComplexOnyxIdUPD[i];
        marker.vNaam = HoofdComplexNaamUPD[i];
        marker.setZIndex(10);
        
        google.maps.event.addListener(marker, 'mouseover', function(event) {
            markerMouseOver(this.vID);
        });
        
        google.maps.event.addListener(marker, 'mouseout', function(event) {
            markerMouseOut(this.vID);
        });
        
        google.maps.event.addListener(marker, 'click', function(event) {
            markerClick(this.vID);
        });
        
        mymarkers.push(marker);
    }
}

function drawResults(forceUpdate)
{
    complexZichtbaar = 0;
            
    // Centrum van de kaart opvragen
    var center = map.getCenter();

    // Returns the viewport bounds. 
    var bounds = map.getBounds();
    
    // De markers binnen het zichtbare gedeelte opvragen
    var ids = "";
    if (bounds)
    {
        for (var i = 0; i < mymarkers.length; i++) 
        {
            var point = mymarkers[i].getPosition();
            
            if (bounds.contains(point))
            {
                ids += mymarkers[i].vID + ",";
            }
        }
    }
    
    // Unieke waarde voor in JSON URL's
    var uniqdate = new Date();
    var uniq = uniqdate.getTime();
    
    var mapChanged = false;
    
    // De JSON's alleen opnieuw ophalen als de markers
    // veranderd zijn (of er een update geforceerd wordt)
    if (currentIds != ids || forceUpdate)
    {
        // Loading DIV tonen
        $("#afdekDiv").show();
        
        mapChanged = true;
        currentIds = ids;
        
        var complexenJsonUrl = "/veAppartementenZoekerJSON.ashx?uniq=" + uniq + "&cids=" + ids + "&sort=" + sortStatus;
        complexenJson = function () {
            var json = null;
            $.ajax({
                'async': false,
                'global': false,
                'url': complexenJsonUrl,
                'dataType': "json",
                'success': function(data) {
                    json = data;
                }
            });
            return json;
        }();
        
        /*
        var vheJsonURL = "/veVHEZoekerJSON.ashx?uniq=" + uniq + "&cids=" + ids;
        vheJson = function () {
            var json = null;
            $.ajax({
                'async': false,
                'global': false,
                'url': vheJsonURL,
                'dataType': "json",
                'success': function(data) {
                    json = data;
                }
            });
            return json;
        }();
        */
    }
    
    onMapMinHuur = 100000;
    onMapMaxHuur = 0;
    
    onMapMinOp = 100000;
    onMapMaxOp = 0;
    
    //var TOT_vheBeschikbaarTotaal = 0;
    //var TOT_vheBeschikbaarNuTeHuur = 0;
    
    // HTML string met zoekresultaten
    var newHtml = "";
    
    if ($('#CB_soort_app').is(':checked'))
    {
        showAppartments = true;
    }
    else
    {
        showAppartments = false;
    }
    
    if ($('#CB_soort_won').is(':checked'))
    {
        showHouses = true;
    }
    else
    {
        showHouses = false;
    }
    
    if (showHouses == false && showAppartments == false) 
    {
        showAppartments = true;
        showHouses = true;
    }
    
    if ($('#CB_slaap1').is(':checked'))
    {
        numberOfBedrooms = 1;
    }
    else if ($('#CB_slaap2').is(':checked'))
    {
        numberOfBedrooms = 2;
    }
    else if ($('#CB_slaap3').is(':checked'))
    {
        numberOfBedrooms = 3;
    }
	
	// Cookies zetten
	setCookie("vestedaMinRent", minRent.toString());
	setCookie("vestedaMaxRent", maxRent.toString());
	setCookie("vestedaShowAppartments", showAppartments.toString());
	setCookie("vestedaShowHouses", showHouses.toString());
	setCookie("vestedaNumberOfBedrooms", numberOfBedrooms.toString());
	setCookie("vestedaMinSurface", minSurface.toString());
	setCookie("vestedaMaxSurface", maxSurface.toString());

    if (complexenJson != null)
    {
        $.each(complexenJson.complexen, function (i, complex)
        {
            if (complex.MinHuur1 > 0) onMapMinHuur = Math.min(onMapMinHuur, complex.MinHuur1);
            onMapMaxHuur = Math.max(onMapMaxHuur, complex.MaxHuur1);

            if (complex.WoonOppVan > 0) onMapMinOp = Math.min(onMapMinOp, complex.WoonOppVan);
            onMapMaxOp = Math.max(onMapMaxOp, complex.WoonOppTot);

            //var vheBeschikbaarTotaal = 0; // Binnen criteria
            //var vheBeschikbaarNuTeHuur = 0; // Binnen criteria

            //vhe.H = HoofdComplexOnyxId
            //vhe.P = VHEHuurprijs
            //vhe.O = VHEWoonOppervlak
            //vhe.S = VHEAantalSlaapkamers
            //vhe.T = VHENuTeHuur

            /*
            var foundVHE = false;
            
            $.each(vheJson.vhes, function(j, vhe)
            {
            if (complex.OnyxId == vhe.H)
            {
            foundVHE = true;
                    
            // Zit VHE binnen huurprijs?
            if (vhe.P >= minRent && vhe.P <= maxRent)
            {
            // Zit VHE binnen oppervlakte?
            if (vhe.O >= minSurface && vhe.O <= maxSurface)
            {
            // Zit VHE binnen slaapkamers?
            if (vhe.S >= numberOfBedrooms)
            {
            vheBeschikbaarTotaal++;
            if (vhe.T == 1) vheBeschikbaarNuTeHuur++;
            }
            }
            }
            }
            else if (foundVHE)
            {
            return false;
            }
            });
            
            TOT_vheBeschikbaarTotaal += vheBeschikbaarTotaal;
            TOT_vheBeschikbaarNuTeHuur += vheBeschikbaarNuTeHuur;
            */

            var complexIsVisible = true; // Initieel op true

            if (complexIsVisible)
            {
                // Controleren zichtbaarheid: huurprijs
                if ((complex.MaxHuur1 < minRent || complex.MinHuur1 > maxRent) && complex.MinHuur1 > 0)
                {
                    complexIsVisible = false;
                }
                else
                {
                    complexIsVisible = true;
                }
            }

            if (complexIsVisible)
            {
                // Controleren zichtbaarheid: oppervlakte
                if ((complex.WoonOppTot < minSurface || complex.WoonOppVan > maxSurface) && complex.WoonOppVan > 0)
                {
                    complexIsVisible = false;
                }
                else
                {
                    complexIsVisible = true;
                }
            }

            if (complexIsVisible)
            {
                // Controleren zichtbaarheid: woningtype
                if (showAppartments == false || showHouses == false)
                {
                    if ((complex.Apps == 0 && showAppartments) || (complex.Hous == 0 && showHouses))
                    {
                        complexIsVisible = false;
                    }
                    else
                    {
                        complexIsVisible = true;
                    }
                }
                else
                {
                    complexIsVisible = true;
                }
            }

            if (complexIsVisible)
            {
                // Controleren zichtbaarheid: slaapkamers
                if (complex.SlaapTot >= numberOfBedrooms || complex.SlaapVan == 0)
                {
                    complexIsVisible = true;
                }
                else
                {
                    complexIsVisible = false;
                }
            }

            if (complexIsVisible)
            {
                complexZichtbaar++;
                markerShowHide(complex.OnyxId, true);
            }
            else
            {
                markerShowHide(complex.OnyxId, false);
            }

            if (mapChanged)
            {
                // Nieuwe zichtbaarheid zetten
                complex.Visible = complexIsVisible;

                // Kaart is veranderd, dus HTML tekenen
                //newHtml += drawComplexHtml(complex, vheBeschikbaarTotaal, vheBeschikbaarNuTeHuur);
                newHtml += drawComplexHtml(complex, -1, -1);
            }
            else
            {
                // Kaart is niet veranderd dus alleen VHE info updaten
                //$("#vheDiv_" + complex.OnyxId).html("(" + vheBeschikbaarTotaal + " - " + vheBeschikbaarNuTeHuur + ")");

                // Blokken in of uitklappen
                if (complex.Visible) // Was zichtbaar
                {
                    if (!complexIsVisible) // Wordt onzichtbaar
                    {
                        // Inklappen
                        $("#complex" + complex.OnyxId).stop().animate({ height: "0px", opacity: 0.25 }, 700, function () { });
                    }
                }
                else // Was onzichtbaar
                {
                    if (complexIsVisible) // Wordt zichtbaar
                    {
                        // Uitklappen
                        $("#complex" + complex.OnyxId).stop().animate({ height: "138px", opacity: 1 }, 500, function () { });
                    }
                }

                // Nieuwe zichtbaarheid zetten
                complex.Visible = complexIsVisible;
            }
        });
    }
    
    if (mapChanged)
    {
        // Complexen in DIV tekenen
        $('#searchResultsContentTarget').html(newHtml);

        // Loading DIV verbergen
        setTimeout('$("#afdekDiv").hide()', 500);
    }

    // Sliders goedzetten
    if (!(onMapMinHuur == 100000 && onMapMaxHuur == 0)) dsSetMinMax(onMapMinHuur, onMapMaxHuur, 'huur');
    if (!(onMapMinOp == 100000 && onMapMaxOp == 0)) dsSetMinMax(onMapMinOp, onMapMaxOp, 'oppervlakte');

    mapFirstLoad = false;

    // "Geen resultaten" tonen indien niks gevonden
    if (complexZichtbaar == 0) $("#searchResultsNoResults").show();
    else $("#searchResultsNoResults").hide();
}

function getComplex(onyxId)
{
    var retComplex;
    
    if (complexenJson != null)
    {
        $.each(complexenJson.complexen, function(i, complex)
        {
            if (complex.OnyxId == onyxId)
            {
                retComplex = complex;
            }
        });
    }
    
    return retComplex;
}

function markerShowHide(theId, show)
{
    for (var i = 0; i < mymarkers.length; i++)
    {
        if (mymarkers[i].vID == theId)
        {
            if (show)
            {
                mymarkers[i].setIcon(markerImage);
                mymarkers[i].setClickable(true);
            }
            else
            {
                mymarkers[i].setZIndex(1);
                mymarkers[i].setIcon(markerImageDeselect);
                mymarkers[i].setClickable(false);
            }
        }
    }
}

function knopP(complexId, show)
{
    if (show) $("#btnP" + complexId).stop().animate({backgroundColor: "#5295cc"}, 50 );
    else $("#btnP" + complexId).stop().animate({backgroundColor: "#7fa2bf"}, 275 );
}

function clickP(complexId)
{
    //startSlideToPowerPage(complexId);
    startSlideToProject(complexId);
}

function complexSetHiLo(complexId, show)
{
    if (show)
    {        
        $("#complex" + complexId).stop().animate({backgroundColor: "#F0F0F0"}, 250 );
        $("#btn" + complexId).show().stop().animate({opacity: 1}, 75 );
        markerSetHiLo(complexId, true);
    }
    else
    {
        $("#complex" + complexId).stop().animate({backgroundColor: "#FFFFFF"}, 500 );
        $("#btn" + complexId).stop().animate({opacity: 0}, 150 );
        markerSetHiLo(complexId, false);
    }
}

function markerSetHiLo(complexId, goHi)
{
    for (var i = 0; i < mymarkers.length; i++)
    {
        if (mymarkers[i].vID == complexId)
        {
            var theComplex = getComplex(complexId);
            
            if (theComplex)
            {
                if (theComplex.Visible)
                {
                    if (goHi)
                    {
                        mymarkers[i].setZIndex(100000000);
                        mymarkers[i].setIcon(markerImageSelect);
                    }
                    else
                    {
                        mymarkers[i].setZIndex(10);
                        mymarkers[i].setIcon(markerImage); 
                    }
                }
            }
            
            break;
        }
    }
}

function markerMouseOver(theId)
{  
    complexSetHiLo(theId, true);
    markerSetHiLo(theId, true)
}

function markerMouseOut(theId)
{   
    complexSetHiLo(theId, false);
    markerSetHiLo(theId, false)
}

function markerClick(theId)
{
    var clickedComplex = getComplex(theId);
    var tel = 0;
    
    if (clickedComplex.Visible)//
    {
        $(".dwaProjectOverzichtOmvat").each(function(index)
        {
            var currentComplexId = $(this).attr("id").replace("complex", "");
            var currentComplex = getComplex(currentComplexId);
            if (currentComplex.OnyxId == theId) return false;
            if (currentComplex.Visible) tel++;
        });
        
        var top = tel * 138;
        scrollTo(top);
    }
}

function googleLeft()
{
    map.panBy(-100, 0);
}

function googleRight()
{
    map.panBy(100, 0);
}

function googleUp()
{
    map.panBy(0, -100);
}

function googleDown()
{
    map.panBy(0, 100);
}

function googleZoomIn()
{
    map.setZoom(map.getZoom() + 1);
}

function googleZoomOut()
{
    var newZoom = map.getZoom() - 1;
    if (newZoom < zoomMin) newZoom = zoomMin;
    map.setZoom(newZoom);
}

// Voor Google UI knoppen
function googleSwap(obj, swapBack)
{
    if (swapBack == true)
        obj.src = obj.src.replace("H.gif", ".gif");
    else
        obj.src = obj.src.replace(".gif", "H.gif");
}

function doSortResult(sortColumn)
{   
    // Alle buttons resetten
    $("#sortButton_project").attr("src", "/images/dwa/UZ_sort_project_off.gif");
    $("#sortButton_plaats").attr("src", "/images/dwa/UZ_sort_plaats_off.gif");
    $("#sortButton_wijk").attr("src", "/images/dwa/UZ_sort_wijk_off.gif");
    $("#sortButton_minhuur2").attr("src", "/images/dwa/UZ_sort_minhuur2_off.gif");
    
    if (sortStatus == sortColumn + "_asc")
    {
        sortStatus = sortColumn + "_desc";
        $("#sortButton_" + sortColumn).attr("src", "/images/dwa/UZ_sort_" + sortColumn + "_down.gif");
    }
    else
    {
        sortStatus = sortColumn + "_asc";
        $("#sortButton_" + sortColumn).attr("src", "/images/dwa/UZ_sort_" + sortColumn + "_up.gif");
    }
    
    drawResults(true);
}

function drawComplexHtml(complex, vheBeschikbaarTotaal, vheBeschikbaarNuTeHuur)
{
    var newHtml = "";
    
    if (!complex.Visible)
        newHtml += "<div class=\"dwaProjectOverzichtOmvat\" onmouseout=\"complexSetHiLo(" + complex.OnyxId + ", false);\" onmouseover=\"complexSetHiLo(" + complex.OnyxId + ", true);\" onclick=\"clickP(" + complex.OnyxId + ")\" id=\"complex" + complex.OnyxId + "\" style=\"height:0px;-moz-opacity:0.25;filter:alpha(opacity=25);opacity: 0.25;\">";
    else
        newHtml += "<div class=\"dwaProjectOverzichtOmvat\" onmouseout=\"complexSetHiLo(" + complex.OnyxId + ", false);\" onmouseover=\"complexSetHiLo(" + complex.OnyxId + ", true);\" onclick=\"clickP(" + complex.OnyxId + ")\" id=\"complex" + complex.OnyxId + "\">";

    newHtml += "<div class=\"projectFoto\">";
    newHtml += "<img class=\"dwaFoto\" src=\"/data/fotos/projectfotos/id" + complex.FotoId + "/w157h137_" + complex.FotoName + "\" name=\"seSoortMap=projectfotos&amp;seIdMap=id" + complex.FotoId + "&amp;seWidth=157&amp;seHeight=137&amp;seFileName=" + complex.FotoName + "\" onerror=\"seAfbeeldingError(this);\" />";
    if (complex.OpenHuis) newHtml += "<div class=\"openhuis\"></div>";
    newHtml += "</div>";
    
    newHtml += "<div class=\"dwaProjectOverzichtInner\">";
    newHtml += "<div class=\"dwaProjectOverzichtInnerInfo\"><b>" + complex.Naam + "</b><br />" + complex.Plaats +  " (" + complex.Wijk + ")";
    
    //if (complex.MinHuur1 > 0)
        //newHtml += "<div style=\"padding-top: 3px;\">in verhuur vanaf &euro; " + complex.MinHuur1 + "</div>";
    
    //if (complex.SlaapVan > 0)
        //newHtml += "<div style=\"padding-top: 3px;\">slaapkamers: " + complex.SlaapVan + " tot " + complex.SlaapTot + "</div>";
    
    //newHtml += "<div style=\"padding-top: 3px;\" id=\"vheDiv_" + complex.OnyxId + "\">(" + vheBeschikbaarTotaal + " - " + vheBeschikbaarNuTeHuur + ")</div>";
    
    newHtml += "</div>";
    
    if (complex.MinHuur2 > 0)
        newHtml += "<div class=\"dwaRent\">&euro; <span class=\"dwaRentNumber\">" + complex.MinHuur2 + "</span>,-</div>";
    
    newHtml += "</div>";
    
    newHtml += "<div class=\"dwaKnoppen\" id=\"btn" + complex.OnyxId + "\">";
    newHtml += "<div class=\"dwaKnopPrj\" onmouseout=\"knopP(" + complex.OnyxId + ", false);\" onmouseover=\"knopP(" + complex.OnyxId + ", true);\" id=\"btnP" + complex.OnyxId + "\" onclick=\"clickP(" + complex.OnyxId + ")\"></div>";
    newHtml += "</div>";
    
    newHtml += "</div>";
    
    if (!complex.Visible)
    {
        newHtml += "<script type=\"text/javascript\">markerShowHide(" + complex.OnyxId + ", false)</script>";
    }
    
    return newHtml;
}
