﻿
$(document).ready(function() {
    //LoadSearchMap();
});


function LoadSearchMap() {

    if (document.getElementById("dMiniMap").innerHTML == "") {
        sm_markers = new Array();
        MiniSearchMapLoad();
        DrawPolygon(minimapSearch, 1);

    }    
    if (document.getElementById("dMap").innerHTML == "") {
        
        sm_markers = new Array();
        MapLoad();
        DrawPolygon(mapSearch, 0);
    }
    else {
        //si hay ,mapa y hago un reload se borran los polígonos del mapa
        sm_markers = new Array();
        MapLoad();
        DrawPolygon(mapSearch, 0);
        
    }

    if (sm_poly != null && sm_poly != "undefined") {
        $('#lnkClearArea').attr('class', "show");
        $('#lnkEditMap').attr('class', "show");
        $('#lnkShowMap').attr('class', "hide");
    }
    else {
        $('#lnkShowMap').attr('class', "show");
        $('#lnkEditMap').attr('class', "hide");
    }
    
}

var sm_poly;
var sm_count = 0;
var sm_points = new Array();
var sm_markers = new Array();
var sm_icon_url = "http://labs.google.com/ridefinder/images/";
var sm_tooltip;
var sm_lineColor = "#0000af";
var sm_fillColor = "#335599";
var sm_lineWeight = 3;
var sm_lineOpacity = .8;
var sm_fillOpacity = .2;
var ArrayPoints = null;
var zoomControl;

function MapLoad() {
    sm_poly = undefined;
    sm_count = 0;
    sm_points = new Array();
    sm_markers = new Array();
    sm_lineColor = "#0000af";
    sm_fillColor = "#335599";
    sm_lineWeight = 3;
    sm_lineOpacity = .8;
    sm_fillOpacity = .2;

    if (GBrowserIsCompatible()) {
        mapSearch = new GMap2(document.getElementById("dMap"));
        mapSearch.enableScrollWheelZoom();
        mapSearch.addControl(new FCMapType());
        mapSearch.addControl(new FCMapZoom());

        var hierarchy = new GHierarchicalMapTypeControl();
        hierarchy.addRelationship(G_SATELLITE_MAP, G_HYBRID_MAP, "Labels", true);
        mapSearch.disableDoubleClickZoom();
        GEvent.addListener(mapSearch, "click", MapClick);
        GEvent.addListener(mapSearch, "moveend", SetZoomAndZoom);
        GEvent.addListener(mapSearch, "zoomend", SetZoomAndZoom); 
        if (document.getElementById("frm_gmap_Zoom").value != null && document.getElementById("frm_gmap_Zoom").value != "") {
            var longitudesX_Y_Center = document.getElementById("frm_gmap_Center").value.split(",");
            var PointXCenter = longitudesX_Y_Center[0].replace("(", "");
            var PointYCenter = longitudesX_Y_Center[1].replace(")", "");
            mapSearch.setCenter(new GLatLng(PointXCenter, PointYCenter), parseInt(document.getElementById("frm_gmap_Zoom").value))
        }
        else {
            mapSearch.setCenter(new GLatLng(40.36, -3.7), 6);
        }
                var letterSearch = 0;
        boundsSearch = new GLatLngBounds;
        $('.grid-table-row').each(function() {
            if ($(this).attr('x') != '' && $(this).attr('x') != '0' && ($(this).attr('sp') == null || $(this).attr('sp') == "undefined" || $(this).attr('sp') == "")) {
                var latlng = new GLatLng($(this).attr('y'), $(this).attr('x'));
                mapSearch.addOverlay(createMarkerSearch(latlng, letterSearch));
                letterSearch += 1;
            };
            
        });

        initalCenter = boundsSearch.getCenter();
        initalZoom = mapSearch.getBoundsZoomLevel(boundsSearch) - 1;
        mapSearch.setZoom(initalZoom);
        mapSearch.setCenter(initalCenter);
    }
}
// Creates a marker whose info window displays the letter corresponding
// to the given index.
function createMarkerSearch(point, index) {
    // Create a lettered icon for this point using our icon class
    baseIcon = new GIcon(G_DEFAULT_ICON);
    baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
    baseIcon.iconSize = new GSize(20, 34);
    baseIcon.shadowSize = new GSize(37, 34);
    baseIcon.iconAnchor = new GPoint(9, 34);
    var letter = String.fromCharCode("A".charCodeAt(0) + index);
    var imagepath = "/images/common/GlobeIcon_";
    var letteredIcon = new GIcon(baseIcon, imagepath + letter + ".png");
    markerOptions = { icon: letteredIcon };
    var marker = new GMarker(point, markerOptions);
    boundsSearch.extend(point);
    return marker;
};


function MapClick(overlay, point) {
    if (point == undefined) return;
    if (point) {
        sm_count++;
        if (sm_count % 2 != 0) {
            var icon = MapIcon(1);
        }
        else {
            var icon = MapIcon(0);
        }
    }
    var marker = new GMarker(point, { icon: icon, draggable: true, bouncy: false, dragCrossMove: true });
    mapSearch.addOverlay(marker);
    marker.content = sm_count;
    sm_markers.push(marker);
    
    GEvent.addListener(marker, "drag", function() { MapRefresh(mapSearch); });
    GEvent.addListener(marker, "click", function() {
        // Find out which marker to remove
        for (var n = 0; n < sm_markers.length; n++) {
            if (sm_markers[n] == marker) {
                mapSearch.removeOverlay(sm_markers[n]);
                break;
            }
        }
        sm_markers.splice(n, 1);
        if (sm_markers.length == 0) {
            sm_count = 0;
        }
        else {
            sm_count = sm_markers[sm_markers.length - 1].content;
            MapRefresh(mapSearch);
        }
    });
    MapRefresh(mapSearch);
}
function MapRefresh(mapToRefresh) {
    if (sm_poly != null && sm_poly != "undefined") {
        mapToRefresh.removeOverlay(sm_poly);
    }
    sm_points = new Array();
    sm_points.length = 0;
    for (i = 0; i < sm_markers.length; i++) {
        sm_points.push(sm_markers[i].getLatLng());
    }
    $("#divPolygon").val(sm_points.toString());
    sm_points.push(sm_markers[0].getLatLng());
    sm_poly = new GPolygon(sm_points, sm_lineColor, sm_lineWeight, sm_lineOpacity, sm_fillColor, sm_fillOpacity);
    mapToRefresh.addOverlay(sm_poly);
}
function MapIcon(type) {
    var icon = new GIcon();
    icon.image = "http://labs.google.com/ridefinder/images/mm_20_blue.png";
    icon.iconSize = new GSize(12, 20);
    icon.shadowSize = new GSize(22, 20);
    icon.iconAnchor = new GPoint(6, 20);
    icon.infoWindowAnchor = new GPoint(5, 1);
    return icon;
}

function MapFN(number)
{ number += ''; x = number.split('.'); x1 = x[0]; x2 = x.length > 1 ? '.' + x[1] : ''; var rgx = /(\d+)(\d{3})/; while (rgx.test(x1)) { x1 = x1.replace(rgx, '$1' + ',' + '$2'); } return x1 + x2; }
function MapClear() {
    ArrayPoints = null;
    $("#divPolygon").val("");
    mapSearch.clearOverlays(); 
    sm_points = new Array();
    sm_markers = new Array();
    minimapSearch.clearOverlays();

}

//pintamos el poplígono que el usuario había definido
function DrawPolygon(mapToDrawPolygon, bMinimap) {
    
    if ($("#divPolygon").val() != "") {
        if (document.getElementById("divPolygon").value.indexOf("(") >=0 ) {
            var PointsCleaned = $("#divPolygon").val();
            for (i = 1; i <= PointsCleaned.length; i++) {
                PointsCleaned = PointsCleaned.replace("(", "<");
                PointsCleaned = PointsCleaned.replace(")", ">");
            }
            PointsCleaned = PointsCleaned.replace(/>,/gi, "|");
            PointsCleaned = PointsCleaned.replace(/>/gi, "");
            PointsCleaned = PointsCleaned.replace(/</gi, "");
            PointsCleaned = PointsCleaned.replace(/ /gi, "");
            ArrayPoints = PointsCleaned.split("|");
        }
        else {
            ArrayPoints = document.getElementById("divPolygon").value.split("|");
        }
        boundsPolygon = new GLatLngBounds;
        if (ArrayPoints.length > 1) {
            for (i = 0; i < ArrayPoints.length; i++) {
                
                var _point;
                var Point0 = ArrayPoints[i];
                var longitudesX_Y_Point = Point0.split(",");
                var PointX = longitudesX_Y_Point[0];
                var PointY = longitudesX_Y_Point[1];
                var icon = MapIcon(1);
                _point = new GLatLng(PointX, PointY);
                boundsPolygon.extend(_point);
                var _marker = null;
                if (bMinimap == "1")
                    _marker = new GMarker(_point, { icon: icon});
                else 
                    _marker = new GMarker(_point, { icon: icon, draggable: true, bouncy: false, dragCrossMove: true });
                
                mapToDrawPolygon.addOverlay(_marker);
                _marker.content = i;
                sm_markers.push(_marker);

                if (bMinimap != "1") {
                    GEvent.addListener(_marker, "drag", function() { MapRefresh(mapToDrawPolygon); });
                    GEvent.addListener(_marker, "click", function() {
                        // Find out which marker to remove
                        for (var n = 0; n < sm_markers.length; n++) {
                            if (sm_markers[n] == _marker) {
                                mapToDrawPolygon.removeOverlay(sm_markers[n]);
                                break;
                            }
                        }
                        sm_markers.splice(n, 1);
                        if (sm_markers.length == 0) {
                            _count = 0;
                        }
                        else {
                            _count = sm_markers[sm_markers.length - 1].content;
                            MapRefresh(mapToDrawPolygon);
                        }
                    });
                }
             }
            MapRefresh(mapToDrawPolygon);
        }
            
        //centramos el minimapa
        if (document.getElementById("dMiniMap").innerHTML != "" && bMinimap=="1") {
            initalMiniMapCenter = boundsPolygon.getCenter();
            initalMiniMapZoom = mapToDrawPolygon.getBoundsZoomLevel(boundsPolygon)-1;
            mapToDrawPolygon.setZoom(initalMiniMapZoom);
            mapToDrawPolygon.setCenter(initalMiniMapCenter);
        }
        
    }
}

function SetZoomAndZoom() {
    document.getElementById('frm_gmap_Zoom').value = mapSearch.getZoom();
    document.getElementById('frm_gmap_Center').value = mapSearch.getCenter();
}


function LoadModal() {
    CommonCustomModalLoad('ModalSearchMap', document.getElementById('ModalSearchMap').innerHTML, 0);
}
function HideModal() {
    CommonCustomModalChangeHide('ModalSearchMap');
}

function MiniSearchMapLoad() {
    if (GBrowserIsCompatible()) {
        $("#dMiniMap").val("");
        minimapSearch = new GMap2(document.getElementById("dMiniMap"));
        
        minimapSearch.disableDoubleClickZoom();
        minimapSearch.disableDragging();
        minimapSearch.disableScrollWheelZoom();
        if (document.getElementById("frm_gmap_Zoom").value != null && document.getElementById("frm_gmap_Zoom").value != "") {
            var longitudesX_Y_Center = document.getElementById("frm_gmap_Center").value.split(",");
            var PointXCenter = longitudesX_Y_Center[0].replace("(", "");
            var PointYCenter = longitudesX_Y_Center[1].replace(")", "");
            //si no hay localizaciones selecccionadas ponermos el mapa de españa grande. 
            if ($('#frm_region')[0].selectedIndex == 0 && $("#divPolygon").val() == "") {
                minimapSearch.setCenter(new GLatLng(PointXCenter, PointYCenter), 3)
            }
            else {
                if (parseInt(document.getElementById("frm_gmap_Zoom").value) > 6 && $("#divPolygon").val() == "") {
                    minimapSearch.setCenter(new GLatLng(PointXCenter, PointYCenter), 6) }
                else {
                    minimapSearch.setCenter(new GLatLng(PointXCenter, PointYCenter), parseInt(document.getElementById("frm_gmap_Zoom").value))
                }
            }  
        }
        else {
            minimapSearch.setCenter(new GLatLng(40.36, -3.7), 3);
        }
        
    }
}


function ShowHideDemoMap() {
    if ($('#divDemo').attr('class') == "hide") {
        $('#divDemo').attr('class', "show");
    }
    else {
        $('#divDemo').attr('class', "hide");
    }
}
