﻿var map;
var marker, startMarker, stopMarker;
var directions;
var gmarkers = [];

function initializeMap() {
    if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map"));
        if (l1 != 0 && l2 != 0) {
            map.setCenter(new GLatLng(l2, l1), z);
        }
        else {
            map.setCenter(new GLatLng(37.98395, 23.72892), 15);
        }
        map.setUIToDefault();
        GEvent.addListener(map, "zoomend", function() {
            refreshMap();
        });
        GEvent.addListener(map, "moveend", function() {
            refreshMap();
        });
    }
}
function preloadImages() {
    $("<img>").attr("src", "/images/right.png");
}
function findAddress() {
    $(".gresults").slideUp();
    $("#gloader").show();
    mapservice.Geocode($(".addresstxt").val(),onGeocodeSucceded);
}
function findAddress1() {
    $(".gresults2").slideUp();
    $("#gloader1").show();
    mapservice.Geocode($(".addresstxt1").val(), onGeocodeSucceded1);
}
function findAddress2() {
    $(".gresults2").slideUp();
    $("#gloader2").show();
    mapservice.Geocode($(".addresstxt2").val(), onGeocodeSucceded2);
}
function onGeocodeSucceded(result) {
    $("#gloader").hide();
    if (result.length == 0) {
        $(".gresults").slideUp();
        $("#resultlist").html("<font color='red'>Δεν βρέθηκαν αποτελέσματα</font>");
        $(".gresults").slideDown();
    }
    else if (result.length == 1) {
        $(".addresstxt").val(result[0].Address);
        focusMap(result[0].Lng,result[0].Lat);
    }
    else {
        var content="";
        for (var i = 0; i < result.length; i++) {
            content += "<a href=\"javascript:resultClicked(" + result[i].Lng + "," + result[i].Lat + ",'" + result[i].Address + "')\">" + result[i].Address + "</a><br/>";
        }
        $(".gresults").slideUp();
        $("#resultlist").html(content);
        $(".gresults").slideDown();
    }
}
function onGeocodeSucceded1(result) {
    $("#gloader1").hide();
    if (result.length == 0) {
        $(".gresults2").slideUp();
        $("#resultlist2").html("<font color='red'>Δεν βρέθηκαν αποτελέσματα</font>");
        $(".gresults2").slideDown();
    }
    else if (result.length == 1) {
        $(".addresstxt1").val(result[0].Address);
        focusMap1(result[0].Lng, result[0].Lat);
    }
    else {
        var content = "";
        for (var i = 0; i < result.length; i++) {
            content += "<a href=\"javascript:resultClicked1(" + result[i].Lng + "," + result[i].Lat + ",'" + result[i].Address + "')\">" + result[i].Address + "</a><br/>";
        }
        $(".gresults2").slideUp();
        $("#resultlist2").html(content);
        $(".gresults2").slideDown();
    }
}
function onGeocodeSucceded2(result) {
    $("#gloader2").hide();
    if (result.length == 0) {
        $(".gresults2").slideUp();
        $("#resultlist2").html("<font color='red'>Δεν βρέθηκαν αποτελέσματα</font>");
        $(".gresults2").slideDown();
    }
    else if (result.length == 1) {
        $(".addresstxt2").val(result[0].Address);
        focusMap2(result[0].Lng, result[0].Lat);
    }
    else {
        var content = "";
        for (var i = 0; i < result.length; i++) {
            content += "<a href=\"javascript:resultClicked2(" + result[i].Lng + "," + result[i].Lat + ",'" + result[i].Address + "')\">" + result[i].Address + "</a><br/>";
        }
        $(".gresults2").slideUp();
        $("#resultlist2").html(content);
        $(".gresults2").slideDown();
    }
}
function resultClicked(lng, lat,address) {
    $(".gresults").slideUp();
    focusMap(lng, lat);
    $(".addresstxt").val(address);
}
function resultClicked1(lng, lat, address) {
    $(".gresults2").slideUp();
    focusMap1(lng, lat);
    $(".addresstxt1").val(address);
}
function resultClicked2(lng, lat, address) {
    $(".gresults2").slideUp();
    focusMap2(lng, lat);
    $(".addresstxt2").val(address);
}
function focusMap(lng, lat) {
    var point = new GLatLng(lat, lng);
    if (marker!=null) map.removeOverlay(marker);
    marker = new GMarker(point);
    map.addOverlay(marker);
    map.panTo(point);
}
function focusMap1(lng, lat) {
    if (startMarker != null) map.removeOverlay(startMarker);
    startMarker = createMarker(lng,lat,"/images/dd-start.png");
    map.addOverlay(startMarker);
    map.panTo(new GLatLng(lat, lng));
    if (startMarker && stopMarker) $("#route").fadeIn();
}
function focusMap2(lng, lat) {
    if (stopMarker != null) map.removeOverlay(stopMarker);
    stopMarker = createMarker(lng, lat, "/images/dd-end.png");
    map.addOverlay(stopMarker);
    map.panTo(new GLatLng(lat, lng));
    if (startMarker && stopMarker) $("#route").fadeIn();
}
function getPOISubcategories() {
    $("#poiloader").show();
    var parentid = $("#scategories").val();
    mapservice.GetPOISubcategories(parentid, onGetPOISubcateriesSucceded);
}
function onGetPOISubcateriesSucceded(list) {
    var content = "";
    for (var i = 0; i < list.length; i++) {
        content += "<input type='checkbox' class='chkpoi' id='chk" + list[i].Id + "' onclick='loadPOIs(this," + list[i].Id + ")' />" + list[i].Name + "<br/>";
    }
    $("#poisub").html(content);
    $("#poiloader").hide();
}
function createMarker(lng, lat, image) {
    var point = new GLatLng(lat, lng);
    var xicon = new GIcon(G_DEFAULT_ICON);
    xicon.image = image;
    var markerOptions = { icon: xicon };
    return new GMarker(point, markerOptions);
}
function getDirections() {
    if (directions) directions.clear();
    directions = new GDirections(map,document.getElementById("mapdirections"));
    directions.load("from: " + startMarker.getLatLng().lat() + "," + startMarker.getLatLng().lng() + " to: " + stopMarker.getLatLng().lat() + "," + stopMarker.getLatLng().lng());
    GEvent.addListener(directions, "addoverlay", function() {
        $("#mapdirections").slideDown();
    });
}
function loadPOIs(sender,layerId) {
    if (sender.checked) {
        $("#poiloader").show();
        var distance = map.getCenter().distanceFrom(map.getBounds().getNorthEast());
        mapservice.GetPOIByCentroid(map.getCenter().lng(), map.getCenter().lat(), distance, layerId, onPOILoaded);
    }
    else {
        hideLayer(layerId);
    }
}
function onPOILoaded(result) {
    if (result.length == 0) {
        $("#poiloader").hide();
        return;
    }
    if (!$("#chk" + result[0].LayerId).attr("checked")) {
        $("#poiloader").hide();
        return;
    }
    var pois = result;
    for (var i = 0; i < pois.length; i++) {
        addPOI(pois[i]);
    }
    $("#poiloader").hide();
}
function addPOI(poi) {
    var marker = createMarkerEx(poi.Lng, poi.Lat, poi.Icon, poi.Description, poi.LayerId);
    if (marker!=null) map.addOverlay(marker);
}
function refreshMap()
{
    $(".chkpoi:checked").each(function() {
        $("#poiloader").show();
        var distance = map.getCenter().distanceFrom(map.getBounds().getNorthEast());
        mapservice.GetPOIByCentroid(map.getCenter().lng(), map.getCenter().lat(), distance, this.id.replace("chk", ""), onPOILoaded);
    });
}
function createIcon(image) {
    var icon = new GIcon();
    icon.image = image;
    icon.shadow = "/icons/shadow-marker_red.png";
    icon.iconSize = new GSize(32.0, 32.0);
    icon.shadowSize = new GSize(49.0, 32.0);
    icon.iconAnchor = new GPoint(16.0, 16.0);
    icon.infoWindowAnchor = new GPoint(16.0, 16.0);
    return icon;
}
function createMarkerEx(lng, lat, image, html, layerId) {
    if (markerExists(lng, lat, layerId)) return null;
    var point = new GLatLng(lat, lng);
    var xicon = createIcon(image);
    var markerOptions = { icon: xicon };
    var marker = new GMarker(point, markerOptions);
    marker.layerId = layerId;
    GEvent.addListener(marker, "click", function() {
      marker.openInfoWindowHtml(html);
    });
    gmarkers.push(marker);
    return marker;
}
function hideLayer(layerId) {
    for (var i=0; i<gmarkers.length; i++) {
      if (gmarkers[i].layerId == layerId) {
          gmarkers[i].hide();
      }
    }
    map.closeInfoWindow();
}
function markerExists(lng,lat,layerId) {
    for (var i = 0; i < gmarkers.length; i++) {
        if (gmarkers[i].getLatLng().lng() == lng && gmarkers[i].getLatLng().lat() == lat && gmarkers[i].layerId == layerId) {
            gmarkers[i].show();
            return true;
        }
    }
    return false;
}
function initializeTabs() {
    var tabContainers = $('div.tabs > div');
    tabContainers.hide().filter(':first').show();
    $('div.tabs ul.tabNavigation a').click(function() {
        tabContainers.hide();
        tabContainers.filter(this.hash).show();
        $('div.tabs ul.tabNavigation a').removeClass('selected');
        $(this).addClass('selected');
        return false;
    }).filter(':first').click();
}
function togglePanel() {
    $("#left").toggle();
    $(window).trigger("resize");
    if ($("#left").css("display") == "none") {
        $("#imgToggle").attr("src", "/images/toggle-off-map.png");
    }
    else {
        $("#imgToggle").attr("src", "/images/toggle-on-map.png");
    }
}
function linkMap() {
   // $("#txtlink").val("http://maps.in2life.gr/?ll=" + map.getCenter().lat() + "," + map.getCenter().lng() + "&z=" + map.getZoom());
    $("#txtlink").val("http://dev.maps.gr/?ll=" + map.getCenter().lat() + "," + map.getCenter().lng() + "&z=" + map.getZoom());
    $("#txtlink").show();
    $("#txtlink").animate({width:"400px"},1500);
}
$(window).resize(function() {
    var m = $("#map");
    var l = $("#left");
    var f = $("#footer");
    var hd = $("#header");
    var t = $("#toolbar");
    var th = parseInt(t.height());
    var h = parseInt($(window).height());
    var w = parseInt($(window).width());
    var lw = parseInt(l.width());
    var fh = parseInt(f.height());
    var hdw = parseInt(hd.width());
    var hdh = parseInt(hd.height());
    var d1 = $("#address");
    var d2 = $("#routediv");
    var d3 = $("#poidiv");
    if (l.css("display") == "none") { m.css("left", 0); lw = 0; }
    else { m.css("left", parseInt(l.css("left")) + lw); }
    t.css("left", m.css("left"));
    var mw = (w - lw);
    var mh = (h - fh - hdh - th);
    m.css("top", hdh + th);
    t.width(mw);
    m.width(mw);
    m.height(mh);
    l.height(mh);
    f.width(w);
    hd.width(w);
    d1.height(th+mh-310);
    d2.height(d1.height());
    d3.height(d1.height());
    map.checkResize();
});



