﻿google.load("maps", "2");
google.load('search', '1');
var map = null;
var bounds = null;
var mm = null;
var baseIcon = null;
var geocoder = null;
var selectedRow = null;
var selectedRowClassName = null;

var prmMapsInstance = Sys.WebForms.PageRequestManager.getInstance();

var searchControl = null;
var searcher = null;
var localSearch = null;

function finalizeMap(obj, e) {

    initializeMap();
    
    var control = document.getElementById("form1");
    var items = e.get_dataItems();

    if (items[coordsLatName] != undefined) {

        var coordsLat = items[coordsLatName].split(",");
        var coordsLong = items[coordsLongName].split(",");
        var coordsQuantity = items[coordsQuantityName];
        var addInfoArray = items[addInfoName].split("##");
        var yahMarkerCoords = items[yahName].split(",");

        //no results
        if (!(coordsQuantity > 0)) {
            initializeMap();
            return;
        }

        // delete all Overlays
        map.clearOverlays();
        mm.clearMarkers();

        bounds = new GLatLngBounds();

        //add the markers, if none of the entries has a point we set the map to countrylevel
        var entriesWithPoint = 0;
        for (var i = 0; i < coordsQuantity; i++) {
            if(addMarker(coordsLat[i], coordsLong[i], addInfoArray[i], i)) entriesWithPoint++;
        }
        if (entriesWithPoint == 0) initializeMap(); 
        
       if (yahMarkerCoords != "" && yahMarkerCoords != undefined)
            addYouAreHereMarker(yahMarkerCoords[0], yahMarkerCoords[1]);

        selectedRow = null;

        mm.refresh();
        map.setCenter(bounds.getCenter());
        map.setZoom(map.getBoundsZoomLevel(bounds));
    }
}

function initializeMap() {
    //disableAutoComplete();
    //enableAutoComplete();
    if (!document.getElementById("googleMapsPanel"))
        return;

    map = new google.maps.Map2(document.getElementById("googleMapsPanel"));
    //map = new GMap(document.getElementById("googleMapsPanel"));
    var currentLoc = currentLocation.split(',');
    map.enableContinuousZoom();
    map.enableDoubleClickZoom();
    //map.enableScrollWheelZoom();
    map.addControl(new GLargeMapControl());
    //map.addControl(new GMapTypeControl());
    //map.addControl(new GOverviewMapControl());
    //map.addControl(new GScaleControl());    
    
    // Default Geocoder
    geocoder = new GClientGeocoder();
    // UK Geocoder
    localSearch = new GlocalSearch();

    bounds = new GLatLngBounds();
    
    //zoom in on country
    bounds.extend(new GLatLng(currentLoc[2], currentLoc[4])); //add NW
    bounds.extend(new GLatLng(currentLoc[3], currentLoc[5])); //add SE
    map.setCenter(bounds.getCenter());
    map.setZoom(map.getBoundsZoomLevel(bounds));
    
    mm = new MarkerManager(map);

    baseIcon = new GIcon();
    baseIcon.image = contactMarkerUrl;
    baseIcon.shadow = shadowMarkerUrl;
    baseIcon.iconSize = new GSize(24, 30);
    baseIcon.shadowSize = new GSize(37, 30);
    baseIcon.iconAnchor = new GPoint(11, 29);
    baseIcon.infoWindowAnchor = new GPoint(15, 6);
    baseIcon.infoShadowAnchor = new GPoint(11, 29);

    yahBaseIcon = new GIcon();
    yahBaseIcon.image = yahMarkerUrl;
    yahBaseIcon.shadow = yahShadowMarkerUrl;
    yahBaseIcon.iconSize = new GSize(18, 43);
    yahBaseIcon.shadowSize = new GSize(56, 43);
    yahBaseIcon.iconAnchor = new GPoint(8, 38);
    yahBaseIcon.infoWindowAnchor = new GPoint(10, 6);
    yahBaseIcon.infoShadowAnchor = new GPoint(8, 38);
    
}

function addYouAreHereMarker(coordsLat, coordsLong) {
    
    var point = new GLatLng(coordsLat, coordsLong);

    var yahIcon = new GIcon(yahBaseIcon);
    markerOptions = { icon: yahIcon };

    var marker = new GMarker(point, markerOptions);
    mm.addMarker(marker, 0, 17);
    bounds.extend(point);
}

function addMarker(coordsLat, coordsLong, addInfo, markerIndex) {
    //if entry does not have point 
    if (coordsLat == 0 && coordsLong == 0) return false;
    
    var point = new GLatLng(coordsLat, coordsLong);

    var mbtIcon = new GIcon(baseIcon);

    markerOptions = { icon: mbtIcon };

    var marker = new GMarker(point, markerOptions);

    mm.addMarker(marker, 0, 17);
    //map.addOverlay(new GMarker(point));
    bounds.extend(point);

    var windowText = addInfo;

    //replace getdirections placeholder
    windowText = windowText.replace("{getDirStr}", getDirectionsLabel);

    GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml(windowText);
        highlightRow(markerIndex);
    });

    var tableRow = document.getElementById('gridViewRow' + markerIndex);

    GEvent.addDomListener(tableRow, 'click', function() {
        GEvent.trigger(marker, 'click');
        highlightRow(markerIndex);
    });

    return true;
}

/*function disableAutoComplete() {
    if(document.getElementById(tbContactName))
        document.getElementById(tbContactName).setAttribute("autocomplete", "off");
    if (document.getElementById(tbAddress))
        document.getElementById(tbAddress).setAttribute("autocomplete", "off");
}*/
/*function enableAutoComplete() {
    if (document.getElementById(tbContactName))
        document.getElementById(tbContactName).setAttribute("autocomplete", "on");
    if (document.getElementById(tbAddress))
        document.getElementById(tbAddress).setAttribute("autocomplete", "on");
}*/

function highlightRow(index) {
    var tableRow = document.getElementById('gridViewRow' + index);
    //restore previous selected row
    if (selectedRow != null) {
        selectedRow.className = selectedRowClassName;
    }
    selectedRow = tableRow;
    selectedRowClassName = selectedRow.className;
    tableRow.className = 'selectedRow';
}

function fireDefaultButton(event, target) {  
    if (event.keyCode == 13) {
        var src = event.srcElement || event.target;
        if (!src || (src.tagName.toLowerCase() != "textarea")) 
        {
            var defaultButton;
            if (__nonMSDOMBrowser) {
                defaultButton = document.getElementById(target);
            }
            else {
                defaultButton = document.all[target];
            }
            if (defaultButton && typeof (defaultButton.click) != "undefined") {
                defaultButton.click();
                event.cancelBubble = true;
                if (event.stopPropagation) 
                    event.stopPropagation();
                return false;
            }
        }
    }    
    
    return true;
}

function defaultGeocodeAddress()
{
    var toSearch = document.getElementById(tbAddress).value +
                " " + countryName;

    multipleResultsPanel = document.getElementById('multipleResults');
    resultsContainer = document.getElementById('resultsContainer');
    searchPanel = document.getElementById('pnlSearch');

    geocoder.getLocations(toSearch, function(result) {
        if (result.Status.code == 200) {
            if (result.Placemark.length > 1) {
                showMultipleResultsPanel();
                resultsContainer.innerHTML = '';
                for (var i = 0; i < result.Placemark.length; i++) {
                    if (i % 2 == 0) {
                        var rowClassname = 'row'
                    }
                    else {
                        var rowClassname = 'alternatingRow';
                    }

                    var p = result.Placemark[i].Point.coordinates[1] + "," + result.Placemark[i].Point.coordinates[0];
                    resultsContainer.innerHTML += "<a class=\"" + rowClassname + "\" href=\"javascript:startSearchAroundPoint('" + p + "\');\">" + result.Placemark[i].address + "<\/a>";
                }
            }
            else {
                var p = result.Placemark[0].Point.coordinates;
                startSearchAroundPoint(p[1] + "," + p[0]);
            }
        }
        else {
            var reason = "Code " + result.Status.code;
            if (reasons[result.Status.code]) {
                reason = reasons[result.Status.code]
            }
            alert(couldNotFindMsg + ' "' + toSearch + '" ' + reason);
        }
    }
            );
}

function geocodeAddress() {

    // Decide which geoCoding is needed

    if (countryName == "United Kingdom") {

        var toSearch = document.getElementById(tbAddress).value + " " + countryName;

        localSearch.setSearchCompleteCallback(this, endHandler);
        localSearch.execute(toSearch);
    }
    else {
        defaultGeocodeAddress();
    }

    return true;
}

function endHandler(response) {
    var results = localSearch.results;

    multipleResultsPanel = document.getElementById('multipleResults');
    resultsContainer = document.getElementById('resultsContainer');
    searchPanel = document.getElementById('pnlSearch');
        
    if (results[0]) {
        if (results.length > 1) {
            showMultipleResultsPanel();
            resultsContainer.innerHTML = '';
            for (var i = 0; i < results.length; i++) {
                if (i % 2 == 0) {
                    var rowClassname = 'row'
                }
                else {
                    var rowClassname = 'alternatingRow';
                }

                var p = results[i].lat + "," + results[i].lng;
                resultsContainer.innerHTML += "<a class=\"" + rowClassname + "\" href=\"javascript:startSearchAroundPoint('" + p + "\');\">" + results[i].title + "<\/a>";
            }
        }
        else {
            startSearchAroundPoint(results[0].lat + "," + results[0].lng);
        }
    }
    else {       
        alert(couldNotFindMsg + ' "' + document.getElementById(tbAddress).value + " " + countryName + '" '/* + reason*/);        
    }
}

function startSearchAroundPoint(point) {
    var yahCoords = document.getElementById(yahName);
    yahCoords.value = point;
    Sys.WebForms.PageRequestManager.getInstance()._doPostBack('btnAddress', '');
}

function showSearchPanel() {
    multipleResultsPanel.style.display = 'none';
    searchPanel.style.display = 'block';
}

function showMultipleResultsPanel() {
    multipleResultsPanel.style.display = 'block';
    searchPanel.style.display = 'none';
}

function startNameSearch() {
    var yahCoords = document.getElementById("<% = yahCoords.ClientID %>");
    Sys.WebForms.PageRequestManager.getInstance()._doPostBack('btnName', '');
    
    return true;
}