﻿// google maps api keys
// tap-usa.com                          = ABQIAAAA_p2YOZKrPSdNyCCTcIDJPxQK-dgCHSzAY-DAuDj30gVU-BbQzRTlLTSodFVrUsSuQ3BdzyZBiymCxw
// localhost                            = ABQIAAAASxmOZpE_4g6TKTwR4xjBoxT2yXp_ZAY8_ufC3CFXhHIE1NvwkxRuDI97nv-TLdQF2oY3SdK7Z22rWg
// tappackagingsolutions.peerlis.com    = ABQIAAAASxmOZpE_4g6TKTwR4xjBoxRbr1xK9eAYt5partqi8OjFC24TXRROefy70tVhocDQK1MAQj1G9pn_RQ
// tappackagingsolutions.com            = ABQIAAAASxmOZpE_4g6TKTwR4xjBoxREqCuhK88xojIn5dXhqnc-q5VLbBTBU8F8apX1hPMGfXyep6Mqx_F53g

var map;
var gmarkers = [];
var gicons = [];

function initialize() {
    map = new google.maps.Map2(document.getElementById("MapContainer"));

    map.addControl(new google.maps.LargeMapControl());
    map.addControl(new google.maps.MapTypeControl());

    map.enableScrollWheelZoom();
    map.setCenter(new google.maps.LatLng(41.50775, -99.677583), 3);
    //map.setCenter(new google.maps.LatLng(41.50775,-81.677583), 11); // cleveland

    if (GBrowserIsCompatible()) {
        LoadIcons();
        LoadMarkers();
    }
}

function LoadIcons() {
	gicons["distributor"] = new google.maps.Icon(G_DEFAULT_ICON, "/App_Themes/Global/Images/mapMarker_Big.png");
	//gicons["dealer"] = new google.maps.Icon(G_DEFAULT_ICON, "IconDealer.png");
}

function LoadMarkers() {
    // Read the data
    GDownloadUrl("/distributorxml.aspx?MenuID=" + menuid, function(data, responseCode) {
        if (responseCode == 200) {
            var xmlDoc = GXml.parse(data);
            var markers = xmlDoc.documentElement.getElementsByTagName("marker");

            for (var ix = 0; ix < markers.length; ix++) {
                // obtain the attribues of each marker
                var lat = parseFloat(markers[ix].getAttribute("lat"));
                var lng = parseFloat(markers[ix].getAttribute("lng"));
                var point = new GLatLng(lat, lng);

                var address = markers[ix].getAttribute("StreetAddress1");
                var name = markers[ix].getAttribute("Name");
                var html = GetMarkerContent(markers[ix]);

                // create the marker
                var marker = CreateMarker(point, name, html, "distributor", true);
                map.addOverlay(marker);
            }
        }
        else {
            alert("ERROR: " + responseCode);
        }

        //ToggleCategory("distributor", true);
        //ToggleCategory("dealer", true);
        SortMarkersByName();
        DisplaySidebar();
    });
}

function GetMarkerContent(marker) {
    var returnValue = "";

    returnValue += "<b>" + marker.getAttribute("Name") + "</b><br />";
    returnValue += marker.getAttribute("StreetAddress1") + " " + marker.getAttribute("StreetAddress2") + "<br />";
    returnValue += marker.getAttribute("City") + ", " + marker.getAttribute("State") + " " + marker.getAttribute("Zipcode") + "<br /><br />";
    if (!IsNullOrEmpty(marker.getAttribute("PhoneNumberTollFree"))) returnValue += "Toll Free: " + marker.getAttribute("PhoneNumberTollFree") + "<br />";
    if (!IsNullOrEmpty(marker.getAttribute("PhoneNumberDirect"))) returnValue += "Direct: " + marker.getAttribute("PhoneNumberDirect") + "<br />";
    if (!IsNullOrEmpty(marker.getAttribute("FaxNumber"))) returnValue += "Fax: " + marker.getAttribute("FaxNumber") + "<br />";
    if (!IsNullOrEmpty(marker.getAttribute("FaxNumberTollFree"))) returnValue += "Fax Toll Free: " + marker.getAttribute("FaxNumberTollFree") + "<br />";
    if (!IsNullOrEmpty(marker.getAttribute("EmailAddress"))) returnValue += "Email: " + "<a href='mailto:" + marker.getAttribute("EmailAddress") + "'>" + marker.getAttribute("EmailAddress") + "</a><br />";
    if (!IsNullOrEmpty(marker.getAttribute("Website"))) returnValue += "Website: " + "<a href='" + marker.getAttribute("Website") + "'>" + marker.getAttribute("Website") + "</a><br />";

    return returnValue;
}

function IsNullOrEmpty(value) {
    var returnValue = true;

    returnValue = ((value == null) || (value == "null") || (value.length == 0));

    return returnValue;
}

// A function to create the marker and set up the event window
function CreateMarker(point, name, html, category, isFeatured) {
    var marker = new GMarker(point, gicons[category]);

    marker.mycategory = category;
    marker.myname = name;
    marker.IsFeatured = isFeatured;

    GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml(html);
    });

    gmarkers.push(marker);

    return marker;
}

//function ToggleCategory(category, isVisible) {
//    for (var ix = 0; ix < gmarkers.length; ix++) {
//        if (gmarkers[ix].mycategory == category) {
//            if (isVisible) { gmarkers[ix].show(); }
//            else { gmarkers[ix].hide(); }
//        }
//    }

//    if (!isVisible) { map.closeInfoWindow(); }

//    $(category + "CategoryInput").checked = isVisible;

//    DisplaySidebar();
//}

function GoToMarker(i) {
    map.setZoom(8);
    GEvent.trigger(gmarkers[i], "click");
}

function DisplaySidebar() {
    var featuredHtml = "";
    var normalHtml = "";

    // Seperate out the featured from the normal markers
    for (var ix = 0; ix < gmarkers.length; ix++) {
        if (!gmarkers[ix].isHidden()) {
            var tempHtml = '<li class="' + gmarkers[ix].mycategory + '"><a href="javascript:GoToMarker(' + ix + ')">' + gmarkers[ix].myname + '</a></li>';

            if (gmarkers[ix].IsFeatured == "true")
                featuredHtml += tempHtml;
            else
                normalHtml += tempHtml;
        }
    }

    var result = '';
    if (featuredHtml.length > 0)
        result += '<ul>' + featuredHtml + '</ul>';
    if (normalHtml.length > 0)
        result += '<ul>' + normalHtml + '</ul>';
    document.getElementById("MapSideBarContainer").innerHTML = result;
}

function SortMarkers(referenceLat, referenceLng) {
	gmarkers.sort(function(a, b) {
		var dif = getDistance(a, referenceLat, referenceLng) - getDistance(b, referenceLat, referenceLng);
		if (dif == 0) {
			return a.myname > b.myname;
		}
		return dif;
	});
}
function getDistance(marker, referenceLat, referenceLng) {
    var loc = marker.getLatLng();
    var distance;
    if (marker.isHidden()) {
        distance = 99999;
    }
    else {
    	distance = GetDistance(loc.lat(), loc.lng(), referenceLat, referenceLng);
    }
    return distance;
}

function SortMarkersByName() {
    gmarkers.sort(function(a,b) {
        return a.myname > b.myname;
    });
}

// Calculates a general distance between two geo points using triangulation
// This is not a true distance and is only good for comparing the relationship
// between multiple points.
function GetDistance(lat1, lng1, lat2, lng2) {
    return Math.sqrt(Math.pow((lat1 - lat2), 2) + Math.pow((lng1 - lng2), 2)); ;
}

function ShowAddress() {
	// Create a Client Geocoder
    var geo = new google.maps.ClientGeocoder();

    var search = document.getElementById("txtZipCode").value;
    geo.getLocations(search, function(result) {
    	if (result.Status.code == G_GEO_SUCCESS) {
    		var p = result.Placemark[0].Point.coordinates;
    		
    		SortMarkers(p[1], p[0]);
    		DisplaySidebar();

    		GoToMarker(0);
    	}
    	else { alert('Could not find "' + search + '" ' + reason); }
    }
            );
}
