﻿var map;
var bounds;

var min_zoom = 14;
var max_zoom = 15;

var def_kat_img = Array();

def_kat_img[1] = "atm.png";
def_kat_img[2] = "restaurant.png";
def_kat_img[3] = "church2.png";
def_kat_img[4] = "car.png";
def_kat_img[5] = "parking.png";
def_kat_img[6] = "postal.png";
def_kat_img[7] = "theater.png";
def_kat_img[8] = "supermarket.png";
def_kat_img[9] = "tools.png";
def_kat_img[10] = "soccer.png";
def_kat_img[11] = "gazstation.png";
def_kat_img[12] = "university.png";
def_kat_img[13] = "doctor.png";

function ClearMap() {
    var t = document.getElementById("map_q");
    
    var f = document.getElementById("map_find");
    
    if (f != null) {
        if (f.parentNode != null) {
            f.style.display="none";
        }
    }
}

function TextualZoomControl() {}

function GoogleEngine() {
    if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map"));

        map.Zoom = parseInt($('defZoom').value);
        map.setCenter(new GLatLng($('defCenter').value.split(",")[0], $('defCenter').value.split(",")[1]), parseInt($('defZoom').value));

        var mapTypeControl = new GMapTypeControl();
        var topRight = new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(10, 10));
        map.addControl(mapTypeControl, topRight);

        if ($('map') != null) {
            var r = $$('.hidRodzaj')[0].value;

            GEvent.addListener(map, "zoomend", function (old_level, new_level) {
                if ((r != "4") && (r != "5")) {
                    if (new_level > max_zoom) {
                        map.zoomOut();
                    }
                }
            });

            LoadDefaultMarkers();

            var fittest = true;

            if ($$('.hidFitMap')[0]) {
                if ($$('.hidFitMap')[0].value == '0') {
                    fittest = false;
                }
            }

            if (fittest) fitMap(map);

            TextualZoomControl.prototype = new GControl();

            TextualZoomControl.prototype.initialize = function (map) {
                var container = document.createElement("span");

                var zoomDiv = document.createElement("input");
                zoomDiv.id = "_zoom_level";
                zoomDiv.style.display = "block";
                zoomDiv.style.width = "26px";
                zoomDiv.style.height = "24px";
                zoomDiv.style.textAlign = "center";
                zoomDiv.style.marginLeft = "13px";
                zoomDiv.style.fontWeight = "bold";
                zoomDiv.style.color = "#3E3E3E";
                zoomDiv.style.backgroundColor = "#D6D6D6";
                zoomDiv.style.border = "2px solid #fff";

                container.appendChild(zoomDiv);

                zoomDiv.value = map.Zoom;

                var zoomInDiv = document.createElement("img");
                zoomInDiv.style.cursor = "pointer";
                zoomInDiv.src = "img/plus.png";

                container.appendChild(zoomInDiv);

                GEvent.addDomListener(zoomInDiv, "click", function () {
                    map.zoomIn();

                    $('_zoom_level').value = map.getZoom();

                    TogglePoiPanel(map.getZoom());

                    UpdateMarkers(map.getZoom());
                });

                container.appendChild(document.createElement("br"));

                var zoomOutDiv = document.createElement("img");
                zoomOutDiv.style.cursor = "pointer";
                zoomOutDiv.src = "img/minus.png";

                container.appendChild(zoomOutDiv);

                GEvent.addDomListener(zoomOutDiv, "click", function () {
                    map.zoomOut();

                    $('_zoom_level').value = map.getZoom();

                    TogglePoiPanel(map.getZoom());

                    UpdateMarkers(map.getZoom());
                });

                map.getContainer().appendChild(container);

                return container;
            }

            TextualZoomControl.prototype.getDefaultPosition = function () {
                return new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(7, 7));
            }

            map.addControl(new TextualZoomControl());

            GEvent.addListener(map, "dblclick", function () {
                $('_zoom_level').value = map.getZoom();

                TogglePoiPanel(map.getZoom());

                UpdateMarkers(map.getZoom());
            });

            GEvent.addListener(map, "dragend", function () {
                UpdateMarkers(map.getZoom());
            });

            $$('img.imgKat').each(function (e) {
                if ($('katIMG' + e.getAttribute("rel")).value == "") {
                    e.src = "webicon.ashx?virgoLib." + def_kat_img[e.getAttribute("rel")];
                }
            });
       }
    }
}

function LoadDefaultMarkers() {
    if ($$('.hidMarkers')[0].value != "") {
        var markers = $$('.hidMarkers')[0].value.split('|');

        var point;
        var mark;
        var icon;
        var marker;

        for (var i = 0; i < markers.length; i++) {
            mark = markers[i].replace("(", "").replace(")", "");

            point = new GLatLng(mark.split(";")[2].replace(",", "."), mark.split(";")[3].replace(",", "."));

            icon1 = new GIcon();
            icon1.image = "img/marker_" + mark.split(";")[1] + ".png"
            icon1.shadow = "img/shadow.png";
            icon1.iconSize = new GSize(20, 34);
            icon1.shadowSize = new GSize(37, 34);
            icon1.iconAnchor = new GPoint(6, 20);
            icon1.infoWindowAnchor = new GPoint(5, 1);

            markerOptions = { icon: icon1 };

            marker = new GMarker(point, markerOptions);

            marker.id = "marker_" + mark.split(";")[0].gsub(" ","_") + "_" + i;

            addInfoWindow(marker, mark.split(";")[4]);

            map.addOverlay(marker);
        }
    }
}

function fitMap(map) {
   var p = $$('.hidPoints')[0].value;

   var lat = 0.0;
   var lng = 0.0;
   bounds = new GLatLngBounds();
   var points;
   
   if ((p != null) && (p != "")) {
           points = p.split("|");
           
           for (var i=0; i< points.length; i++) {
              if (points[i] != "") {
                  lat = rtrim(ltrim(points[i],"("),")").split(",")[0];
                  lng = rtrim(ltrim(points[i],"("),")").split(",")[1];

                  bounds.extend(new GLatLng(lat, lng));
              }
           }
           
           var zoom = map.getBoundsZoomLevel(bounds);
           map.setZoom(zoom > 13 ? 13 : zoom);
           map.setCenter(bounds.getCenter());
    }
   }

   function UpdateMarkers(zoom) {
       if (zoom >= min_zoom) {
           LoadPOI();
       } else {
           ClearMarkers();
           LoadDefaultMarkers();
       }
   }

   function TogglePoiPanel(zoom) {
       if ($('chktgall')) {
           if (zoom >= min_zoom) {
               $$('#poipanel input[type=checkbox]').each(function (e) {
                   e.removeAttribute('disabled');
               });
               $('chktgall').removeAttribute('disabled');
           } else {
               $$('#poipanel input[type=checkbox]').each(function (e) {
                   e.setAttribute('disabled', 'disabled');
               });
               $('chktgall').setAttribute('disabled', 'disabled');
           }
       }
   }

function togglePoiKat(id) {
    if ($('poiKats').value.indexOf("," + id + ",") != -1) {
        removePoiKat(id);
    } else {
        addPoiKat(id);
    }

    UpdateMarkers(map.getZoom());
}

function ToggleAll(chk) {
    $$('#poipanel input[type=checkbox]').each(function (e) {
        e.checked = chk.checked;

        if (chk.checked) {
            addPoiKat(e.value);
        } else {
            removePoiKat(e.value);
        }
    });

    UpdateMarkers(map.getZoom());
}

function addPoiKat(id) {
    if ($('poiKats').value.indexOf("," + id + ",") == -1) {
        if ($('poiKats').value == "") $('poiKats').value = ",";
        $('poiKats').value += id + ",";
    }
}

function removePoiKat(id) {
    if ($('poiKats').value.indexOf("," + id + ",") != -1) {
        $('poiKats').value = $('poiKats').value.replace("," + id + ",", ",");
    }
}

function LoadPOI() {
    var kat_id = $('poiKats').value;
    LoadKat(kat_id);
}

function ClearMarkers() {
    map.clearOverlays();
}

function LoadKat(kat_id) {
    var sw = map.getBounds().getSouthWest();
    var ne = map.getBounds().getNorthEast();

    GDownloadUrl('webpoi.ashx?k=' + kat_id + "&sw=" + sw + "&ne=" + ne, function (data, responseCode) {
        ClearMarkers();
        LoadDefaultMarkers();
        LoadKatAjax(kat_id, data);
    });
}

function LoadKatAjax(kat_id, data) {

    eval(data);

    if ((poi != null) && (poi.length > 0)) {
        var tab = poi.split("|");

        var p = "";
        var lat = "";
        var lon = "";
        var point;
        var marker;
        var icon1;
        var katgid;
        var img = "";

        if ((tab != null) && (tab.length > 0)) {
            for (var i = 0; i < tab.length; i++) {
                p = tab[i].gsub("(", "").gsub(")", "").gsub("undefined", "");

                lat = parseFloat(p.split(";")[1].replace(",", "."));
                lon = parseFloat(p.split(";")[2].replace(",", "."));

                point = new GLatLng(lat, lon);

                icon1 = new GIcon();

                katgid = p.split(";")[4];

                if (katgid != "") img = $('katIMG' + katgid).value;

                if (img != "") {
                    icon1.image = img;
                } else {
                    icon1.image = "webicon.ashx?virgoLib." + def_kat_img[katgid];
                }

                icon1.iconSize = new GSize(20, 20);
                icon1.iconAnchor = new GPoint(6, 20);
                icon1.infoWindowAnchor = new GPoint(5, 1);

                markerOptions = { icon: icon1 };

                marker = new GMarker(point, markerOptions);

                marker.id = "marker_" + p.split(";")[0].gsub(" ","_") + "_" + i;

                addPOIInfoWindow(marker, p.split(";")[5] + "<br />" + p.split(";")[3]);

                map.addOverlay(marker);
            }
        }
    }
}

function addInfoWindow(marker, info) {
    GEvent.addListener(marker, "click", function () {
        //marker.openInfoWindowHtml(formatWindow(info.gsub("undefined", "")));
        marker.openExtInfoWindow(
        map,
        "gmaps_marker",
        formatWindow(info.gsub("undefined", "")),
        { beakOffset: 3 }
        );
    });
}

function addPOIInfoWindow(marker, info) {
    GEvent.addListener(marker, "click", function () {
        //marker.openInfoWindowHtml(formatPOIWindow(info.gsub("undefined", "")), { maxWidth: '250' });
        marker.openExtInfoWindow(
        map,
        "gmaps_marker_poi",
        formatPOIWindow(info.gsub("undefined", "")),
        { beakOffset: 3, maxWidth: '250' }
        );
    });
}

function formatWindow(input) {
    return "<iframe src=\"" + input +  "\" style=\"width:300px;height:140px;border-width:0px;\" frameborder=0></iframe>";
}

function formatPOIWindow(input) {
    return input;
}
