var map;
var markerMng;
var markers = [];
var geocoder;
var icon1;
var icon2;
var pushpin;
var arrStateData;
                                                                    
function LoadMap() {
  if (GBrowserIsCompatible()) {
    map = new GMap2(document.getElementById("map"));
    map.setCenter(new GLatLng(40.581, -95.625), 3);
    map.disableDragging();
    markers = [];
    markerMng = new GMarkerManager(map, 0);
    geocoder = new GClientGeocoder();
    LoadIcons();
  }
}

function LoadIcons() {
  icon1 = new GIcon();
  icon1.image = "images/icn-shield_red.png";
  icon1.iconAnchor = new GPoint(10, 20);
  icon1.infoWindowAnchor = new GPoint(10, 0);
  icon1.iconSize = new GSize(20, 20)
  
  icon2 = new GIcon();
  icon2.image = "images/icn-shield_black.png";
  icon2.iconAnchor = new GPoint(10, 20);
  icon2.infoWindowAnchor = new GPoint(10, 0);
  icon2.iconSize = new GSize(20, 20)
  
  pushpin = new GIcon();
  pushpin.image = "images/icn-pushpin.png";
  pushpin.iconAnchor = new GPoint(10, 20);
  pushpin.iconSize = new GSize(20, 16)
}

function AddMarker(lat, lng, strMarkerInfo, bolApplicator) {
    var tmpIcon;
    
    if (bolApplicator == 0) {
        tmpIcon = icon1;
    }
    else {
        tmpIcon = icon2;
    }

    var marker = new GMarker(new GLatLng(lat, lng), tmpIcon);
    GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml(strMarkerInfo);
    });
    markers.push(marker);
    markerMng.addMarker(marker, 4);
    markerMng.refresh();
    return markers.length - 1
}

function OpenMarker(markerPos) {
  GEvent.trigger(markers[markerPos], "click");
}

function AddPushPin(lat, lng) {  
  var marker = new GMarker(new GLatLng(lat, lng), pushpin, true);
  markerMng.addMarker(marker, 4);
  markerMng.refresh();
}

function MapState(strStateData, bolActiveApplicator) {
    Effect.Appear("status");
    LoadMap();

    arrStateData = strStateData.split("|");
    var intStateID = parseInt(arrStateData[0]);
    var strStateName = arrStateData[1];
    var intStateMapZoom = parseInt(arrStateData[2]);

    if (strStateName != "" && intStateMapZoom > 0) {
        var geocoder = new GClientGeocoder();
        geocoder.getLatLng(strStateName, function(point) {
            if (point) {
                map.setCenter(point, intStateMapZoom);
                GetDistributors(intStateID, bolActiveApplicator);
                map.addControl(new GLargeMapControl());
                map.enableDragging();
            }
        });
    }
    Effect.Puff("status");
}

function MapCity(strCity) {
    // arrStateData is set globally when MapState is called
    var intStateID = arrStateData[0];
    var strStateName = arrStateData[1];
    var intStateMapZoom = arrStateData[2];

    if (strStateName != "" && strCity != "") {
        var geocoder = new GClientGeocoder();
        geocoder.getLatLng(strCity + ", " + strStateName, function(point) {
            if (point) {
                map.setCenter(point, 9);
                AddPushPin(point.y, point.x);
            }
        });
    }
    else {
        var geocoder = new GClientGeocoder();
        geocoder.getLatLng(strStateName, function(point) {
            if (point) {
                map.setCenter(point, intStateMapZoom);
            }
        });
    } 
    ScrollLocation(strCity)
}

function GetDistributors(intStateID, bolActiveApplicator) {
  var httpRequest;

  if (window.XMLHttpRequest) { // Mozilla, Safari, ...
    httpRequest = new XMLHttpRequest();
    if (httpRequest.overrideMimeType) {
      httpRequest.overrideMimeType("text/xml");
    }
  } 
  else if (window.ActiveXObject) { // IE
    try {
      httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
    } 
    catch (e) {
      try {
        httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
      } 
        catch (e) {}
    }
  }

  if (!httpRequest) {
      return false;
  }
  httpRequest.onreadystatechange = function() { DisplayDistributors(httpRequest); };
  httpRequest.open("GET", "getMapData.aspx?intStateID=" + intStateID + "&bolActiveApplicator=" + bolActiveApplicator, true);
  httpRequest.send("");
}

function DisplayDistributors(httpRequest) {
    if (httpRequest.readyState == 4) {
        if (httpRequest.status == 200) {
            ClearLocations();
            var xmlDoc = httpRequest.responseXML;
            var locations = xmlDoc.getElementsByTagName("location");
            var lastCity = "";
            
            for(var i=0; i<locations.length; i++) {  
                var companyName = GetNodeValue(locations[i].getElementsByTagName("companyName"));                                  
                var contactName = GetNodeValue(locations[i].getElementsByTagName("contactName"));
                var contactEmail = GetNodeValue(locations[i].getElementsByTagName("email"));
                var address1 = GetNodeValue(locations[i].getElementsByTagName("address1"));
                var address2 = GetNodeValue(locations[i].getElementsByTagName("address2"));
                var city = GetNodeValue(locations[i].getElementsByTagName("city"));
                var state = GetNodeValue(locations[i].getElementsByTagName("state"));
                var zip = GetNodeValue(locations[i].getElementsByTagName("zip"));
                var phone1 = GetNodeValue(locations[i].getElementsByTagName("phone1"));
                var ext1 = GetNodeValue(locations[i].getElementsByTagName("ext1"));
                var phone2 = GetNodeValue(locations[i].getElementsByTagName("phone2"));
                var ext2 = GetNodeValue(locations[i].getElementsByTagName("ext2"));
                var fax = GetNodeValue(locations[i].getElementsByTagName("fax"));
                var url = GetNodeValue(locations[i].getElementsByTagName("url"));
                var lat = GetNodeValue(locations[i].getElementsByTagName("latitude"));
                var lng = GetNodeValue(locations[i].getElementsByTagName("longitude"));
                var bolApplicator = GetNodeValue(locations[i].getElementsByTagName("applicator"));
                
                var strHtmlInfo = FormatAsHtml(companyName, contactName, contactEmail, address1, address2, city, state, zip, phone1, ext1, phone2, ext2, fax, url);
             
                var markPos = AddMarker(lat, lng, strHtmlInfo, bolApplicator);
                
                var strMapLink = FormatAsLink(markPos, bolApplicator);
                
                if (city != lastCity) {
                    lastCity = city;
                    AddLocation('<h3 id="' + city + '">' + city + '</h3>');
                }
                AddLocation(strMapLink + strHtmlInfo + "<hr class='clear' />");
            }
        }
    }
}

function GetNodeValue(node) {
    var rval = ""
    if (node.length > 0) {
        if (node[0].hasChildNodes) {
            if (node[0].firstChild) {
                rval = node[0].firstChild.nodeValue;
            }
        }
    }
    return rval;
}

function FormatAsHtml(strCompanyName, strContactName, strContactEmail, strAddress1, strAddress2, strCity, strState, strZip, strPhone1, strExt1, strPhone2, strExt2, strFax, strURL) {
    var strHtmlInfo = "<div>";
    strHtmlInfo += "<h4>" + strCompanyName + "</h4>";
    strHtmlInfo += "<p>" + strAddress1;
    if (strAddress2 != "") {
        strHtmlInfo += "<br />" + strAddress2;
    }
    strHtmlInfo += "<br />" + strCity + ", " + strState + " " + strZip;
    if (strURL != "") {
        strHtmlInfo += "<br /><a href='http://" + strURL + "' target='_blank'>" + strURL + "</a>";
    }
    strHtmlInfo += "</p>";
    
    strHtmlInfo += "<p>";
    if (strContactName != "") {
        strHtmlInfo += "<strong>" + strContactName + "</strong>";
    }
    if (strContactEmail != "") {
        strHtmlInfo += "<br /><a href='mailto:" + strContactEmail + "'>" +  strContactEmail + "</a>";
    }
    if (strPhone1 != "") {
        strHtmlInfo += "<br />Ph: " + strPhone1 + " " + strExt1;
    }
    if (strPhone2 != "") {
        strHtmlInfo += "<br />Ph: " + strPhone2 + " " + strExt2;
    }
    if (strFax != "") {
        strHtmlInfo += "<br />Fx: " + strFax
    }
    strHtmlInfo += "</p></div>";

    return strHtmlInfo;
}

function FormatAsLink(markPos, bolApplicator) {
    var strImageUrl = "images/icn24-shield_red.gif";
    if(bolApplicator == 1) {
        strImageUrl = "images/icn24-shield_black.gif";
    }
    strLinkInfo = "<a href='javascript:OpenMarker(" + markPos + "); Effect.toggle(\"toggle\", \"slide\", { duration: .2 });'><img class='frame float-right' src='" + strImageUrl + "' alt='Click to show on map.' /></a>"
    return strLinkInfo;
}

function AddLocation(strHtmlInfo) {
    var locations = document.getElementById("locations");
    locations.innerHTML += strHtmlInfo;
}

function ClearLocations() {
    var locations = document.getElementById("locations");
    locations.innerHTML = "";
}

function ScrollLocation(strAnchor) {
  var locations = document.getElementById("locations");
  var anchor = document.getElementById(strAnchor); 
  anchor.scrollIntoView(top);
  locations.scrollLeft = 0;
}