﻿var map;
var urlXML = "";
var urlDetail = "";
var detailParam1 = "";
var detailParam2 = "";
var detailParam3 = "";
var detailParam4 = "";
var detailLang = "";
var detailList = "";
var detailWeb = "";
var detailFrameHeight = "";
var detailFrameWidth = "";

var gMap = {

    /* GoogleMap Controls */
    GLargeMapCtrl: false,
    GMapTypeCtrl: false,
    GOverviewMapCtrl: false,
    GDblClickZoom: false,
    GScrollWheelZoom: false,

    /* Default settings */
    latDefault: 50.53088873891836,
    longDefault: 4.5318603515625,
    zoomDefault: 7,
    idMap: "map",

    _initGmap: function(firstload, urlx, urld, detailp1, detailp2, detailp3, detailp4, detaillang, detaillist, detailweb, detailfh, detailfw, notcompatible, zip) {
        if (GBrowserIsCompatible()) {
            map = new GMap2(document.getElementById(this.idMap));

            // Default postion and zoom
            map.setCenter(new GLatLng(this.latDefault, this.longDefault), this.zoomDefault);
			//if(zip != '') _centerOnZip(zip);

            // Navigation control
             map.addControl(new GLargeMapControl());

            // Map / Satellite / Hybrid
            if (this.GMapTypeCtrl)
            { map.addControl(new GMapTypeControl()); }

            //Small overview box
            if (this.GOverviewMapCtrl)
            { map.addControl(new GOverviewMapControl()); }

            // Double click zoom Control
            if (this.GDblClickZoom)
            { map.enableDoubleClickZoom(); }

            // Scroll zoom control
            if (this.GScrollWheelZoom)
            { map.enableScrollWheelZoom(); }

            if (!firstload) {
                urlXML = urlx;
                urlDetail = urld;
                detailParam1 = detailp1;
                detailParam2 = detailp2;
                detailParam3 = detailp3;
                detailParam4 = detailp4;
                detailLang = detaillang;
                detailList = detaillist;
                detailWeb = detailweb;
                detailFrameHeight = detailfh;
                detailFrameWidth = detailfw;

                this._getXmlMarker();	
                this._centerOnZip(zip + ' Belgium');
            }
        }
        else { alert(notcompatible); }
    },

    _getXmlMarker: function() {
        var request = GXmlHttp.create();
        latCenter = 0;
        lngCenter = 0;
        zoomCenter = 0;
        if (urlXML != "") {
            request.open("GET", urlXML, true);
            request.onreadystatechange = function() {
                if (request.readyState == 4) {
                    var xmlDoc = request.responseXML;
                    if (xmlDoc != null && xmlDoc.documentElement != null) {
                        // Obtain the array of markers
                        var x = xmlDoc.documentElement.getAttribute("x");
                        var y = xmlDoc.documentElement.getAttribute("y");
                        var zoom = xmlDoc.documentElement.getAttribute("zoom");
                        var showOverlayerRegion = "";

                        if (latCenter == 0 && lngCenter == 0 && zoomCenter == 0 && x != null && y != null && zoom != null) {
                            latCenter = parseFloat(y); lngCenter = parseFloat(x); zoomCenter = parseInt(zoom);
                            var regionName = xmlDoc.documentElement.getAttribute("name_" + detailLang.toLowerCase());

                            if (regionName != null)
                            { showOverlayerRegion = regionName; }
                        }

                        var markers = xmlDoc.documentElement.getElementsByTagName("Epf");

                        for (var i = 0; i < markers.length; i++) {
                            var agentID = markers[i].getElementsByTagName("Id")[0].firstChild.nodeValue;

                            // Parse array of markers
                            if (markers[i].getElementsByTagName("CoordinateX")[0].firstChild != null && markers[i].getElementsByTagName("CoordinateY")[0].firstChild != null && markers[i].getElementsByTagName("CoordinateX")[0].firstChild.nodeValue != "" && markers[i].getElementsByTagName("CoordinateY")[0].firstChild.nodeValue != "") {
                                // Coordinates exist
                                var lat = parseFloat(markers[i].getElementsByTagName("CoordinateY")[0].firstChild.nodeValue.replace(",", "."));
                                var lng = parseFloat(markers[i].getElementsByTagName("CoordinateX")[0].firstChild.nodeValue.replace(",", "."));

                                if (lat != 0 && lng != 0)
                                { gMap._createMarker(lat, lng, agentID); }

                                if (latCenter == 0 && lngCenter == 0 && zoomCenter == 0 && lat != 0 && lng != 0) {
                                    latCenter = lat; lngCenter = lng; zoomCenter = parseInt(9);
                                    //map.setCenter(new GLatLng(latCenter, lngCenter), zoomCenter);
                                }

                            }
                            else {
                                // Create coordinates from address
                                var street = markers[i].getElementsByTagName("Address")[0].firstChild.nodeValue;
                                var nr = "";
                                if (markers[i].getElementsByTagName("HouseNumber")[0].firstChild != null)
                                { nl = markers[i].getElementsByTagName("HouseNumber")[0].firstChild.nodeValue; }
                                var postalcode = markers[i].getElementsByTagName("ZipCode")[0].firstChild.nodeValue;
                                var city = markers[i].getElementsByTagName("City")[0].firstChild.nodeValue;
                                var country = markers[i].getElementsByTagName("Country")[0].firstChild.nodeValue;

                                gMap._searchAdress(street + " " + nr + ", " + postalcode + " " + city + ", " + country, agentID);
                            }
                        }

                        if (latCenter != 0 && lngCenter != 0 && zoomCenter != 0)
                        { //map.setCenter(new GLatLng(latCenter, lngCenter), zoomCenter); 
                        }

                        // Everything went perfect, show map
                        document.getElementById("map").style.display = "block";
                        document.getElementById("maperror").style.display = "none";

                        // If a region is showed, show message                        
                        if (showOverlayerRegion != "") {
                            document.getElementById("mapoverlayerText").innerHTML = overlayerMessage.replace("{0}", showOverlayerRegion);
                            document.getElementById("mapoverlayer").style.display = "block";
                        }
                        else
                        { document.getElementById("mapoverlayer").style.display = "none"; }
                    }
                    else {
                        //Error occured or no items could be found
                        document.getElementById("map").style.display = "block";
                        document.getElementById("maperror").style.display = "block";
                        document.getElementById("mapoverlayer").style.display = "none";
                    }
                }
            }
            request.send(null);
        }
        else {
            //Error no xml defined
            document.getElementById("map").style.display = "none";
            document.getElementById("maperror").style.display = "block";
            document.getElementById("mapoverlayer").style.display = "none";
        }

    },

    _createMarker: function(lat, lng, agentID) {
        var icon = new GIcon();
        icon.image = "/Style Library/SC/images/flag.png";
        icon.shadow = "/Style Library/SC/images/flagshadow.png";
        icon.iconSize = new GSize(38, 56);
        icon.shadowSize = new GSize(38, 56);
        icon.iconAnchor = new GPoint(18, 46);
        icon.infoWindowAnchor = new GPoint(19, 16);
        markerOptions = { icon: icon };

        var marker = new GMarker(new GLatLng(lat, lng), markerOptions);
        GEvent.addListener(marker, "click",
            function() {
                var paramweb = ""
                if (detailWeb != "")
                { paramweb = "&" + detailParam4 + "=" + detailWeb; }
                marker.openInfoWindowHtml("<iframe class=\"googleiframe\" width=\"" + detailFrameWidth + "\" height=\"" + detailFrameHeight + "\" frameborder=\"0\" src=\"" + urlDetail + "?" + detailParam1 + "=" + agentID + "&" + detailParam2 + "=" + detailLang + "&" + detailParam3 + "=" + detailList + paramweb + "\"></iframe>");
            }
        );
        map.addOverlay(marker);
    },

    _searchAdress: function(searchAddress, agentID) {
        var geocoder = new GClientGeocoder();
        geocoder.getLatLng(searchAddress,
            function(point) {
                if (point != null) {
                    var lat = point.lat();
                    var lng = point.lng();
                    if (lat != 0 && lng != 0)
                    { gMap._createMarker(lat, lng, agentID); }

                    if (latCenter == 0 && lngCenter == 0 && zoomCenter == 0 && lat != 0 && lng != 0) {
                        latCenter = lat; lngCenter = lng; zoomCenter = parseInt(9);
                        //map.setCenter(new GLatLng(latCenter, lngCenter), zoomCenter);
                    }

                }

            }
        );
    },

    _centerOnZip : function(zip) {
	    var geocoder = new GClientGeocoder();
        geocoder.getLatLng(zip,
            function(point) {
                if (point != null) {
                    var lat = point.lat();
                    var lng = point.lng();                    

                    if (lat != 0 && lng != 0) {                        
                        map.setCenter(new GLatLng(lat, lng), 9);
                    }

                }

            }
        );
    }
}