﻿var geoNamesUrl = "http://ws.geonames.org/findNearbyPostalCodesJSON?radius=10&maxRows=20";
var myMap;
var baseIcon;
var positionLat;
var positionLng;
var positionMarker;
var request;
var placeMarkers = [];
var htmls = [];
var innerHtml = "";
var bounds;

// definiáljuk a térkép középpontját 
var centerPoint = new GLatLng(47.42808726171425, 19.13818359375);

// 
function myLoad() {
    if (GBrowserIsCompatible()) {
        createBaseIcon();
        setupMap();
    }
    else {
        alert("Ez a böngésző nem kompatibilis a Google Maps API-val.");
    }
}

// létrehoz egy alapikont
function createBaseIcon() {
    // létrehozunk egy GIcon objektumot
    baseIcon = new GIcon();
    // és megadjuk a tulajdonságait:
    // árnyék képe
    baseIcon.shadow = 'http://www.google.com/mapfiles/shadow50.png';
    // az ikon mérete
    baseIcon.iconSize = new GSize(20, 34);
    // az árnyék mérete
    baseIcon.shadowSize = new GSize(37, 34);
    // az ikon relatív pozíciója
    baseIcon.iconAnchor = new GPoint(9, 34);
    // az info ablak relatív pozíciója
    baseIcon.infoWindowAnchor = new GPoint(9, 2);
}

// beállítja a térképet
function setupMap() {
    // létrehozunk egy GMap2 objektumot, 
    // amelyet a <div id="myMap" /> elemben fogunk megjeleníteni, de
    // nem mindig van jelen a <div id="myMap" /> elem
    if (document.getElementById("myMap")) {
        myMap = new GMap2(document.getElementById("myMap"));    
        // a térképhez hozzáadjuk a GLargeMapControl vezérlőt,
        // amivel nagyítani/kicsinyíteni, eltolni 
        // és eredeti pozíciójára visszahozni lehet a térképet
        myMap.addControl(new GLargeMapControl());
        // a térkéhez hozzáadjuk a GMapTypeControl vezérlőt 
        // amivel kiválaszthatjuk a térkép típusát
        myMap.addControl(new GMapTypeControl());
        // megjelenítjük a térképet a definiált középponttal, 7-es zoommal és normál típussal
        myMap.setCenter(centerPoint, 7, G_NORMAL_MAP);
        var omc = new GOverviewMapControl();
        myMap.addControl(omc);
        GEvent.addListener(myMap, 'click', mapClick);
        // myMap.clearOverlays();
    }	
}

// a térkép click eseményénak kezelője
function mapClick(overlay, latlng) {
    // ha a térképre kattintunk és nem a jelzőre, infoablakra vagy vezérlôkre
    if (latlng) {
        createPositionMarker(latlng);
    }
}

// létrehoz egy jelzőt (marker)
function createPositionMarker(latlng) {
    // töröljük az esetleg jelenlevő jelzőket
    myMap.clearOverlays();
    divList.innerHTML = "";
    innerHtml = "";
    positionLat = latlng.lat();
    positionLng = latlng.lng()
    // létrehozunk egy jelzőt
    var positionMarkerIcon = new GIcon(baseIcon);
    positionMarkerIcon.image = '../imgs/yellow.png';
    positionMarker = new GMarker(latlng, positionMarkerIcon);

    // hozzáadjuk a jelzőt térképhez	
    myMap.addOverlay(positionMarker);
    getPositionData();

    //		GEvent.addListener(positionMarker, 'click',newVisitorMarkerClick);
}

function getPositionData() {
    var url = "../_srv/findnearbypostalcode-proxy.aspx" + "?lat=" + positionLat + "&lng=" + positionLng;
    // létrehozunk egy XMLHttpRequest objektumot
    request = GXmlHttp.create();
    // lekérdezzük a JSON szolgáltatást
    request.open('GET', url, true);
    request.onreadystatechange = ProcessResponse;
    request.send(null);
}

// feldolgozza a választ
function ProcessResponse() {
    // ha minden rendben van
    if (request.readyState == 4) {
        if (request.status == 200) {
            // tároljuk a lekérdezett XML dokumentumot
            var oJSON = eval('(' + request.responseText + ')');
            var postalCodes = oJSON.postalCodes;
            if (postalCodes) {
                var divList = document.getElementById("divList");
                if (postalCodes.length > 0) {

                    // létrehozunk egy GLatLngBounds objektumot
                    bounds = new GLatLngBounds();
                    placeMarkers = [];
                    for (var p = 0; p < postalCodes.length; p++) {
                        var postalCode = postalCodes[p].postalCode;
                        var countryCode = postalCodes[p].countryCode;
                        var placeName = postalCodes[p].placeName;
                        var lat = parseFloat(postalCodes[p].lat);
                        var lng = parseFloat(postalCodes[p].lng);
                        placeMarkers[p] = createPlaceMarker(postalCode, countryCode, placeName, lat, lng, p)
                    }
                    divList.innerHTML = "<ul>" + innerHtml + "</ul>";
                    myMap.setZoom(myMap.getBoundsZoomLevel(bounds));
                    var clat = (bounds.getNorthEast().lat() + bounds.getSouthWest().lat()) / 2;
                    var clng = (bounds.getNorthEast().lng() + bounds.getSouthWest().lng()) / 2;
                    myMap.setCenter(new GLatLng(clat, clng));
                }
                else {
                    divList.innerHTML = "<b>Nincsenek adatok!</b>";
                }
            }
            else {
                alert("A http://ws.geonames.org/findNearbyPostalCodesJSON szolgáltatással valami nincs renden vagy éppen frissítik az adatbázist.\nKérlek próbáld meg később.");
            }
        }
    }
}

// létrehozza a helységek jelzőit
function createPlaceMarker(postalCode, countryCode, placeName, lat, lng, p) {
    var markerIcon = new GIcon(baseIcon);
    markerIcon.image = '../imgs/red.png';
    markerIcon.iconSize = new GSize(20, 34);
    markerIcon.shadowSize = new GSize(37, 34);
    var markerPosition = new GLatLng(lat, lng);
    bounds.extend(markerPosition);
    var marker = new GMarker(markerPosition, markerIcon);
    myMap.addOverlay(marker);
    var html = "<table><tr>" +
                    "<td align='right'><b>Ország</b>:</td>" +
                    "<td align='left'>" + countryCode + "</td>" +
                    "</tr><tr>" +
                    "<td align='right'><b>Helység</b>:</td>" +
                    "<td align='left'>" + placeName + "</td>" +
                    "</tr><tr>" +
                    "<td align='right'><b>Irányítószám</b>:</td>" +
                    "<td align='left'>" + postalCode + "</td>" +
                    "</tr></table>";
    htmls[p] = html;
    GEvent.addListener(marker, 'click', function() {
        marker.openInfoWindowHtml(html);
    });
    innerHtml += "<li><a href='javascript:myClick(" + p + ")'>" + placeName + "</a>: " + postalCode + "</li>";
    return marker;
}

function myClick(p) {
    placeMarkers[p].openInfoWindowHtml(htmls[p]);
}

// visszaállítja a térképet
function resetMap() {
    var divList = document.getElementById("divList");
    divList.innerHTML = "";
    innerHtml = "";
    myMap.clearOverlays();
    myMap.setCenter(centerPoint, 7, G_NORMAL_MAP);
}
