﻿var map = null;
var tooltip;
var agentStart = 0;
var agentLat = null;
var agentLng = null;
var houseStart = 0;
var houseLat = null;
var houseLng = null;

// === Some cookie parameters ===
var cookiename = "mapinfo";  // name for this cookie
var expiredays = 7;          // number of days before cookie expiry


// === Look for the cookie ===
if (document.cookie.length > 0) {
    cookieStart = document.cookie.indexOf(cookiename + "=");
    if (cookieStart != -1) {
        cookieStart += cookiename.length + 1;
        cookieEnd = document.cookie.indexOf(";", cookieStart);
        if (cookieEnd == -1) {
            cookieEnd = document.cookie.length;
        }
        cookietext = document.cookie.substring(cookieStart, cookieEnd);
        // == split the cookie text and create the variables ==
        bits = cookietext.split("|");
        lat = parseFloat(bits[0]);
        lng = parseFloat(bits[1]);
        zoom = parseInt(bits[2]);
        maptype = parseInt(bits[3]);
    }
}

// === Set the cookie before exiting ===
function setCookie() {
    maptype = 0;
    for (var i = 0; i < map.getMapTypes().length; i++) {
        if (map.getCurrentMapType() == map.getMapTypes()[i]) {
            maptype = i;
        }
    }
    var cookietext = cookiename + "=" + map.getCenter().lat() + "|" + map.getCenter().lng() + "|" + map.getZoom() + "|" + maptype;
    if (expiredays) {
        var exdate = new Date();
        exdate.setDate(exdate.getDate() + expiredays);
        cookietext += ";expires=" + exdate.toGMTString();
    }
    // == write the cookie ==
    document.cookie = cookietext;
    // == Call GUnload() on exit ==
    GUnload();
}

function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for (var i = 0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ') c = c.substring(1, c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
    }
    return null;
}

function initAgent(lat, lng) {
    if ((lat != null) && (lng != null)) {
        agentStart = 1;
        agentLat = lat;
        agentLng = lng;
    }
    initialize();
}

function initHouse(lat, lng) {
    if ((lat != null) && (lng != null)) {
        houseStart = 1;
        houseLat = lat;
        houseLng = lng;
    }
    initialize();
}

function initialize() {
    
    if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById('map'));
        map.enableDoubleClickZoom();

        /*
        var x = readCookie(cookiename);

        if (x) {
        map.setCenter(new GLatLng(lat, lng), zoom, map.getMapTypes()[maptype]);
        } else {
        map.setCenter(new GLatLng(52.494487, 5.592041), 7);
        }
        */

        var agenticon = new GIcon();
        agenticon.image = "/assets/mijnmakelaar/maps/images/mm.png";
        agenticon.iconSize = new GSize(35, 49);
        agenticon.iconAnchor = new GPoint(20, 40);
        agenticon.infoWindowAnchor = new GPoint(13, 1);

        var icon = new GIcon();
        icon.image = "/assets/mijnmakelaar/maps/images/single-house.png";
        icon.iconSize = new GSize(22, 29);
        icon.iconAnchor = new GPoint(0, 20);
        icon.infoWindowAnchor = new GPoint(5, 1);

        var activeIcon = new GIcon();
        activeIcon.image = "/assets/mijnmakelaar/maps/images/single-house-mouseover.png";
        activeIcon.iconSize = new GSize(22, 29);
        activeIcon.iconAnchor = new GPoint(0, 20);
        activeIcon.infoWindowAnchor = new GPoint(5, 1);

        map.addControl(new TextualZoomControl());
        //extra controls (maptype)
        //map.addControl(new ExtMapTypeControl());

        //minimap
        map.addControl(new GOverviewMapControl());

        tooltip = document.createElement("div");
        document.getElementById("map").appendChild(tooltip);
        tooltip.style.visibility = "hidden";

        try {

            if (adata.agents != null) {
                for (var a = 0; a < adata.agents.length; a++) {
                    //for (var a in adata.agents) {
                    try {
                        var amarker = CreateNewAgentMarker(map,
			        adata.agents[a].id,
			        adata.agents[a].page_id,
			        adata.agents[a].agent_name,
			        adata.agents[a].latitude,
			        adata.agents[a].longitude,
			        adata.agents[a].streetname,
			        adata.agents[a].streetnr,
			        adata.agents[a].streetnrextension,
			        adata.agents[a].zipcode,
			        adata.agents[a].city,
			        agenticon);

                        map.addOverlay(amarker);
                    }
                    catch (x) { }
                }

            }
        }
        catch (z) { }

        var sidebarList = document.getElementById('markerList');

        try {
            var markers = [];
            if (data.houses != null) {
                for (var i = 0; i < data.houses.length; i++) {
                    //for (var i in data.houses) {
                    try {
                        var marker = CreateNewMarker(map,
				    data.houses[i].id,
				    data.houses[i].latitude,
				    data.houses[i].longitude,
				    data.houses[i].streetname,
				    data.houses[i].streetnr,
				    data.houses[i].streetnrextension,
				    data.houses[i].zipcode,
				    data.houses[i].city,
				    data.houses[i].price,
				    data.houses[i].house_image,
				    sidebarList,
				    data.houses.length,
				    icon);

                        markers.push(marker);
                    }
                    catch (x) { }
                }
            }
            var markerCluster = new MarkerClusterer(map, markers, { 'zoomOnClick': true });
        }
        catch (p) { }


        var skipCenter = 0;
        try {
            if (agentStart == 1) {
                map.setCenter(new GLatLng(agentLat, agentLng), 12);

                //add clean agent marker
                var acmarker = CreateNewCleanMarker(map,
			        agentLat,
			        agentLng,
			        agenticon);

                map.addOverlay(acmarker);
                skipCenter = 1;
            }
            if (houseStart == 1) {
                map.setCenter(new GLatLng(houseLat, houseLng), 11);

                //add clean house marker
                var cmarker = CreateNewCleanMarker(map,
			        houseLat,
			        houseLng,
			        activeIcon);

                map.addOverlay(cmarker);
                skipCenter = 1;
            }
        }
        catch (u) { }

        if (skipCenter == 0) {
            //geocoder = new GClientGeocoder();
//            if ((queryString('city') != "") || (queryString('zipcode') != "")) {
//                if (queryString('zipcode') != "") {
//                    showAddress(queryString('zipcode') + ", The Netherlands");
//                }
//                else {
//                    if (queryString('city') != "") {
//                        showAddress(queryString('city'));
//                    }
//                }
//            }
//            else {
                map.setCenter(new GLatLng(52.494487, 5.592041), 7);
//            }
        }
    }
}

var childCount = 0;
var itemCount = 0;

function CreateNewMarker(map, id, lat, lng, streetname, streetnr, streetext, zipcode, city, price, image, list, listsize, icon) {
    var latlng = new GLatLng(lat, lng);
    var marker = new GMarker(latlng, { icon: icon });
    marker.value = id;
    childCount++;

    if (childCount <= listsize) {
        if (childCount <= 28) {
            itemCount++;
            if (document.getElementById("houseitem" + itemCount)) {
                var sidebarLink = document.getElementById("houseitem" + itemCount);
                if (image != "") {
                    image = image.replace("height=94", "height=65");
                }
                sidebarLink.innerHTML = "<img src=\"" + image + "\" height=\"65\" /><strong title=\"" + city + "\">" + city + "</strong><span style=\"color:#00AEEF\">" + formatMoney(price, '&euro; ', '.', ',') + "</span>";
                var mclick = GEvent.callback(marker, function() { markerClick(id, marker, lat, lng) });
                GEvent.addDomListener(sidebarLink, 'click', mclick);
            }
        }
    }

    marker.tooltip = "<div class=\"tooltip\"><span>" + streetname + " " + streetnr + "" + streetext + ", " + city + ", <strong>" + formatMoney(price, '&euro; ', '.', ',') + "</strong></span></div>";

    GEvent.addListener(marker, 'click', function() {
        marker.openExtInfoWindow(
                        map,
                          "custom_info_window",
                          "<div style=\"padding-left: 10px;font-size: 11px!important\">Laden...</div>",
                          {
                              ajaxUrl: "/MapsPopupData.aspx?p1=" + this.value + "",
                              beakOffset: 3
                          }
                        );

    });

    GEvent.addListener(marker, "mouseover", function() {
        showTooltip(marker);
        marker.setImage('/assets/mijnmakelaar/maps/images/single-house-mouseover.png');
    });
    GEvent.addListener(marker, "mouseout", function() {
        tooltip.style.visibility = "hidden";
        marker.setImage('/assets/mijnmakelaar/maps/images/single-house.png');
    });


    return marker
}

function CreateNewAgentMarker(map, id, page_id, agent_name, lat, lng, streetname, streetnr, streetext, zipcode, city, icon) {
    var latlng = new GLatLng(lat, lng);
    var marker = new GMarker(latlng, { icon: icon });
    marker.value = id;

    marker.tooltip = "<div class=\"tooltip\"><span><strong>" + agent_name + "</strong></span></div>";

    GEvent.addListener(marker, 'click', function() {

        marker.openExtInfoWindow(
                        map,
                          "custom_info_window",
                          "<div style=\"padding-left: 10px;font-size: 11px!important\">Laden...</div>",
                          {
                              ajaxUrl: "/MapsPopupAgentsData.aspx?a=" + this.value + "&aname=" + agent_name + "&astreet=" + streetname + "&astreetnr=" + streetnr + "&astreetnrext=" + streetext + "&azipcode=" + zipcode + "&acity=" + city + "&pageid=" + page_id + "",
                              beakOffset: 3
                          }
                        );
    });

    GEvent.addListener(marker, "mouseover", function() {
        showTooltip(marker);
    });
    GEvent.addListener(marker, "mouseout", function() {
        tooltip.style.visibility = "hidden";
    });

    return marker
}

function CreateNewCleanMarker(map, lat, lng, icon) {
    var latlng = new GLatLng(lat, lng);
    var marker = new GMarker(latlng, { icon: icon });

    return marker
}

//marker (in sidebar) click handler
function markerClick(id, marker, lat, lng) {
    //close the current popup
    map.closeExtInfoWindow();
    map.setCenter(new GLatLng(lat, lng), 15);
    marker.openExtInfoWindow(
            map,
              "custom_info_window",
              "<div style=\"padding-left: 10px;font-size: 11px!important\">Laden...</div>",
              {
                  ajaxUrl: "/MapsPopupData.aspx?p1=" + id + "",
                  beakOffset: 3
              }
            );
}

//marker (in html) click handler
function markerHtmlClick(lat, lng) {
    //close the current popup
    map.closeExtInfoWindow();
    map.setCenter(new GLatLng(lat, lng), 16);

    var icon = new GIcon();
    icon.image = "/assets/mijnmakelaar/maps/images/single-house-mouseover.png";
    icon.iconSize = new GSize(22, 29);
    icon.iconAnchor = new GPoint(0, 20);
    icon.infoWindowAnchor = new GPoint(5, 1);

    var latlng = new GLatLng(lat, lng);
    var cmarker = new GMarker(latlng, { icon: icon });
    map.clearOverlays();
    map.addOverlay(cmarker);
}

function showTooltip(marker) {
    tooltip.innerHTML = marker.tooltip;
    var point = map.getCurrentMapType().getProjection().fromLatLngToPixel(map.getBounds().getSouthWest(), map.getZoom());
    var offset = map.getCurrentMapType().getProjection().fromLatLngToPixel(marker.getPoint(), map.getZoom());
    var anchor = marker.getIcon().iconAnchor;
    var width = marker.getIcon().iconSize.width;
    var pos = new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(offset.x - point.x - anchor.x + width, -offset.y + point.y + anchor.y - 19));

    pos.apply(tooltip);
    tooltip.style.visibility = "visible";

}

function isThousands(position) {
    if (Math.floor(position / 3) * 3 == position) return true;
    return false;
};

function formatMoney(theNumber, theCurrency, theThousands, theDecimal) {
    var theDecimalDigits =
        Math.round((theNumber * 100) - (Math.floor(theNumber) * 100));
    theDecimalDigits = "" + (theDecimalDigits + "0").substring(0, 2);
    theNumber = "" + Math.floor(theNumber);
    var theOutput = theCurrency;
    for (x = 0; x < theNumber.length; x++) {
        theOutput += theNumber.substring(x, x + 1);
        if (isThousands(theNumber.length - x - 1) && (theNumber.length - x - 1
        != 0)) {
            theOutput += theThousands;
        };
    };
    theOutput += theDecimal + "-";
    //theOutput += theDecimal + theDecimalDigits;
    return theOutput;
};


function showAddress(address) {
    if (geocoder) {
        geocoder.getLatLng(
          address.replace('%20', ' '),
          function(point) {
              if (!point) {
                  map.setCenter(new GLatLng(52.494487, 5.592041), 7);
              } else {
                  map.setCenter(point, 12);
              }
          }
        );
    }
}
function queryString(parameter) {
    var loc = location.search.substring(1, location.search.length);
    var param_value = false;

    var params = loc.split("&");
    for (i = 0; i < params.length; i++) {
        param_name = params[i].substring(0, params[i].indexOf('='));
        if (param_name == parameter) {
            param_value = params[i].substring(params[i].indexOf('=') + 1)
        }
    }
    if (param_value) {
        return param_value;
    }
    else {
        return false;
    }
}
