//<![CDATA[

if (GBrowserIsCompatible()) {
  var gmarkers = [];
  var filters = [];
  var points = [];
  var hidepoint = new GLatLng(0,91);
  var oldMarker;
  var oldCircle;
  var j = 0;
  var map;
  var mapTitle = document.getElementById("mapTitle");
  var markmgr;
  var geocoder = new GClientGeocoder();
  var newBounds;
  var mode = "";
  ic = new GIcon(G_DEFAULT_ICON);
  ic.image = "images/marker-ushw2.png"
  ic.printImage = "images/marker-ushw2.png"
  ic.mozPrintImage = "images/marker-ushw2.gif"
  ic.shadow="";
  ic.printShadow = ""
  icGreen = new GIcon(G_DEFAULT_ICON);
  icGreen.image = "images/marker-green.png"
  icGreen.printImage = "images/marker-green.png"
  icGreen.mozPrintImage = "images/marker-green.gif"
  icGreen.shadow="";
  ic.printShadow = ""
  //icGreen.iconSize = new GSize(20, 34);
  //icGreen.shadowSize = new GSize(37,34);
  //icGreen.iconAnchor = new GPoint(9, 34);
  //icGreen.infoWindowAnchor = new GPoint(9,2); 

  setTimeout("MakeMap()", 0); 
}
else {
  alert("Sorry, the Google Maps API is not compatible with this browser");
}
            
//**************************************************************************

//create the map
function MakeMap() { 

//document.getElementById("mapAll").style.display = "none";
document.getElementById("loading").style.display = "block";
  map = new GMap2(document.getElementById("map"));
  //map.addControl(new GLargeMapControl(), new GControlPosition(G_ANCHOR_BOTTOM_LEFT, 0));
  //map.addControl(new GOverviewMapControl());
  map.addControl(new MiniZoomControl(), new GControlPosition(G_ANCHOR_TOP_LEFT, 0));
  map.addControl(new GMapTypeControl());
  map.enableDoubleClickZoom();
  map.setCenter(new GLatLng(38.48189,-98.34709), 4);  //somewhere near Wichita KS
  map.savePosition();

  mapTitle.innerHTML = "<table border=0 cellspacing=0 cellpadding=0><tr><td align=left valign=top class=text style='height:10px'>Click on a (U.S.) balloon to expand the view of the area or use the options to the left.</td></tr><tr><td><IMG height=6 src='images/spacer.gif' width=5></tr></td></table>";
  mapTitle.style.display = "block";

  GDownloadUrl("Centers.txt", process_it);
}
      
// === Define the function thats going to process the text file ===
process_it = function(doc) {
  lines = doc.split("\n");
  for (var i=0; i<lines.length; i++) {
    if (lines[i].length > 1) {
      parts = lines[i].split("|");
      var label = parts[1];
      var lat = parseFloat(parts[9]);
      var lng = parseFloat(parts[10]);
      var url = ""
      if (linkMode == "sef") {
        url = parts[1] + "-" + "CenterInfo.html"
      } else {
        url = "Page.aspx?Name=CenterInfo&ID=" + parts[0]
      }
      var html = "<table><tr><td align=center><b>" + parts[1] + "</b><br>" + parts[2] + " " + parts[3] + "<br>" + parts[4] + ", " + parts[5] + "  " + parts[7] + "<br><a href='" + url + "'>Medical Center Info</a><br></td></tr></table>";
      var point = new GLatLng(lat,lng);
      var marker = createMarker(point,label,html);
      gmarkers[j] = marker;
      html2="<td align=left class=text><a href='" + url + "' title='Click to view Center Information'>" + parts[1] + "</a><br>" + parts[2] + " " + parts[3] + "<br>" + parts[4] + ", " + parts[5] + "&nbsp;&nbsp;" + parts[7] + "<br>" + "Phone: " + parts[8] + "<br>" + "Fax: " + parts[12] + "<br>"
      gmarkers[j].locHtml = html2;
      gmarkers[j].centerId = parts[0];
      gmarkers[j].stateName = parts[5] + "|" + parts[6];
      //gmarkers[j].sortKey = parts[4] + " " + parts[3];


      points[j] = new GLatLng(lat, lng)
      filters[j] = parts[11];
      j++;
      map.addOverlay(marker);
    }
  }
  if (document.getElementById("fcMap_hdnState").value > "") {
    document.getElementById('allCenters').value = document.getElementById("fcMap_hdnState").value;
    setAllCenters(document.getElementById("fcMap_hdnState").value, "99");
  }  
  document.getElementById("loading").style.display = "none";
  //document.getElementById("mapAll").style.display = "block";

}          
      
//create the marker and set up the event window
function createMarker(point,name,html) {
  var marker = new GMarker(point, {title:""+name, icon:ic}); 
  GEvent.addListener(marker, "click", function() {
  	
  	var zl = map.getZoom();
  	oldzl = zl
  	//zl = zl + 2
  	if (zl < 8) zl = 9; //~50 mile zoom
  	if (zl > 17) zl = 17;
  	map.setCenter(marker.getPoint(), zl);
      if (oldzl > 6) marker.openInfoWindowHtml(html);
  });
  return marker;
}

//filter markers based on services selection
function filterMarkers(filter) {

  map.getInfoWindow().hide();
  filterNum = filter;
  for (var i=0;i<gmarkers.length;i++) {
    specialties = filters[i].split("~");
    //if (filter == "99" || specialties[filterNum]*1 > 0) {
    if (filter == "99" || isInFilterList(filterNum, specialties)) {

      gmarkers[i].setPoint(points[i]);
    }
    else {
      gmarkers[i].setPoint(hidepoint);
    }
  }
  if (document.getElementById("map").style.width != "600px") {
  //alert ("mode = " + mode);
    if (mode == "radius") setSideBar(oldMarker);
    if (mode == "location") setAllCenters(document.getElementById("allCenters").value, filter);
  }
} 

function isInFilterList(fnum, spec)
{
  for (var i=0;i<spec.length;i=i+2) {
    if (spec[i] == fnum) return true;
  }
return false;
}

//search for address that was entered. Create marker, and adjust for radius
function geoSearch () {
  mode="radius";
  address = document.getElementById("address").value + " " + document.getElementById("city").value + " " + document.getElementById("state").value + " " + document.getElementById("zip").value + " USA";
  geocoder.getLatLng(
    address,
    function(point) {
      if (!point) {
        alert("Address or Zip Code was not Found");
      } else {
        //filterMarkers(document.getElementById("filter").value);
        mapTitle.style.display = "none";
        document.getElementById("map").style.width = "366px";
        document.getElementById("map").style.height = "366px";
        map.checkResize();
        var html = "<table><tr><td align=center>" + document.getElementById("address").value + "<br>" + document.getElementById("city").value + " " + document.getElementById("state").value + "  " + document.getElementById("zip").value + "<br></td></tr></table>";
        var marker = new GMarker(point,  {title:"From Location", icon:icGreen});
        GEvent.addListener(marker, "click", function() {        	
        	var zl = map.getZoom();
        	oldzl = zl
        	zl = zl + 2
        	if (zl < 10) zl = 9; //~50 mile zoom
        	if (zl > 17) zl = 17;
        	map.setCenter(marker.getPoint(), zl);
            if (oldzl > 6) marker.openInfoWindowHtml(html);
        });

        //map.setCenter(point, document.getElementById("radius").value * 1);  //base zoom level on radius
        
        newBounds = new GLatLngBounds();
        drawCircle (marker.getPoint(), document.getElementById("radius").value * 1);
        map.setCenter(point, map.getBoundsZoomLevel(newBounds));
        map.addOverlay(marker);

        if (oldMarker != null) {
          //Remove previous marker
          map.removeOverlay(oldMarker);
        }

        oldMarker = marker;
        map.getInfoWindow().hide();
        setSideBar(marker);
      }
    }
 );
return false;
}

//Find all markers within the radius and list on sidebar!!
function setSideBar(marker) {
//alert ("setSideBar");
  var rmarkers = []; // markers for point within radius
  var j = 0;
  
  for (var i=0;i<gmarkers.length;i++) {
    if (map.getBounds().contains(gmarkers[i].getPoint())) { // check to see if marker is in viewport
      miles = gmarkers[i].getPoint().distanceFrom(marker.getPoint()) / 1000 * .6214; //convert to miles
      miles = (Math.round(miles * 100))/100; //round to 2 decimal places
      if (miles <= document.getElementById("radius").value * 1 && gmarkers[i].centerId != "139") { // check to see if marker is within radius and filer out Mission Valley
        rmarkers[j] = gmarkers[i];
        rmarkers[j].distance = miles;
        j++;
      }
    }
  }
  
  rmarkers.sort(function (a,b) {return (a.distance - b.distance)}); 
  
  //minimize the number of += for performance reasons
  //html = "<div id=divCenterScroll style='vertical-align: top; overflow: auto; width: 240px; height: 360px; scrollbar-arrow-color: Red; scrollbar-base-color: #0F1030;scrollbar-track-color: #C0C0C0;'>"
  html = "<div id=divCenterScroll class=mid_scroll style='width:240px;'>"
  html += "<table>";
  
  for (var i=0;i<rmarkers.length;i++) {
    j = i + 1;
    //html += "<tr><td><table border=0 cellpadding=1 cellspacing=1 width=100%><tr><td align=left valign=top class=text><b>" + j + ".</b></td>" + rmarkers[i].locHtml + "<b>Distance: </b>" + rmarkers[i].distance + " miles</td></tr></table></td></tr><tr><td><hr size=1 color=#cccccc noshade></td></tr>";
    html += "<tr><td align=left valign=top class=text><b>" + j + ".</b></td>" + rmarkers[i].locHtml + "<b>Distance: </b>" + rmarkers[i].distance + " miles<br><input type=image src=images/b-directions.gif name=submit value=submit title='Get Driving Directions' onclick='return getDirections(" + rmarkers[i].centerId + ");' ></td></tr><tr><td colspan=2><hr size=1 color=#cccccc noshade></td></tr>";
    
    //alert ("Found miles = " + gmarkers[i].distance + " clinic= " + gmarkers[i].locHtml); //getAttribute("title"));
  }
  
  if (rmarkers.length == 0) {
      html += "<tr><td>";
      html += "No Medical Centers found for selection criteria";
      html += "</td></tr>";
  }
  
  html += "</table>";
  html += "</div>";
  document.getElementById("side_bar").innerHTML = html;
}

//create a circle based on the entered address and selected radius
function drawCircle(point, radius) {
  // alert("drawCircle@"+point+" r="+radius); 
  var cColor = "#3366ff";
  var cWidth = 5;
  var Cradius = radius;   
  var d2r = Math.PI/180; 
  var r2d = 180/Math.PI; 
  var Clat = (Cradius/3963)*r2d; 
  //alert("point.lat()="+point.lat()+" point.lng()="+point.lng());  
  var Clng = Clat/Math.cos(point.lat()*d2r); 
  var Cpoints = []; 
  //var ps = "";
  for (var i=0; i < 33; i++) { 
    var theta = Math.PI * (i/16); 
    var CPlng = point.lng() + (Clng * Math.cos(theta)); 
    var CPlat = point.lat() + (Clat * Math.sin(theta)); 
    var P = new GLatLng(CPlat,CPlng);
     //ps += P.lat()+" "+P.lng() + "\n";  
    newBounds.extend(P);
    Cpoints.push(P); 
  }
  //alert ("circle point = \n" + ps);
  //alert("circle@"+point+" color="+cColor+" width="+cWidth+" length="+Cpoints.length);
  circle = new GPolyline(Cpoints,cColor,cWidth);
 
  //remember if there was a previous circle and remove it.
  if (oldCircle != null) {
     map.removeOverlay(oldCircle);
  }

  oldCircle = circle;

  map.addOverlay(circle); 
} 

//Find all markers within the radius and list on sidebar!!
function setAllCenters(location, filter) {
  mode="location";
  filterNum = filter;

  var j = 0;
    
  mapTitle.style.display = "none";
  document.getElementById("map").style.width = "366px";
  document.getElementById("map").style.height = "366px";
  
  if (location != "ALL") newBounds = new GLatLngBounds(); //hold the points for the state
  
  //gmarkers.sort(function (a,b) {return (a.sortKey < b.sortKey) ? -1 : ((a.sortKey == b.sortKey) ? 0 :1);    }   );
    
  //html = "<div id=divCenterScroll style='vertical-align: top; overflow: auto; width: 240px; height: 360px; scrollbar-arrow-color: Red; scrollbar-base-color: #0F1030;scrollbar-track-color: #C0C0C0;'>"
  html = "<div id=divCenterScroll class=mid_scroll style='width:240px;'>"
  html += "<table>";
  state = "";
  //alert ("location: " + location + " filter: " + filter);
  for (var i=0;i<gmarkers.length;i++) {
    stateFields = gmarkers[i].stateName.split("|");
    specialties = filters[i].split("~");

    if ((location == stateFields[0] || location == "ALL")  &&  (filter == "99" ||  isInFilterList(filterNum, specialties)) ){ //match on state and current filter
     if (location != "ALL") newBounds.extend(gmarkers[i].getPoint());
     if (state != stateFields[1]) {
       state = stateFields[1];
       html += "<tr><td></td><td class=text10 valign=bottom><b>" + state + "</b></td></tr>";
     }
     j++;
    
     html += "<tr><td align=left valign=top class=text><b>" + j + ".</b></td>" + gmarkers[i].locHtml + "</td></tr><tr><td colspan=2><hr size=1 color=#cccccc noshade></td></tr>"
    
     //alert ("Found miles = " + gmarkers[i].distance + " clinic= " + gmarkers[i].locHtml); //getAttribute("title"));
    }
  }
  
  if (j == 0) html += "<tr><td></td><td class=text10 valign=bottom><b>" + "No Medical Centers found" + "</b></td></tr>";

  html += "</table>";
  html += "</div>";
  
  if (j > 0) {
    map.checkResize();
    if (location == "ALL") {
      map.setCenter(new GLatLng(38.48189,-98.34709), 3);
    } else {
      newzoom = map.getBoundsZoomLevel(newBounds);
      if (newzoom > "10") newzoom = 10;
      map.setCenter(newBounds.getCenter(), newzoom);
    }
  }
  
  document.getElementById("side_bar").innerHTML = html;
  
  return false;
}

function getDirections(centerId) {

  var point = oldMarker.getPoint()  
  fromAddress = document.getElementById("address").value +"|" + document.getElementById("city").value +"|" + document.getElementById("state").value +"|" + document.getElementById("zip").value + "|" + point.lat() + "|" + point.lng();
  location.href = "Page.aspx?Name=CenterInfo_Directions&ID=" + centerId + "&fromInfo=" + fromAddress;
  return false;
}

function MiniZoomControl() {}
MiniZoomControl.prototype = new GControl();

// Creates a DIV for each of the buttons and places them in a container
// DIV which is returned as our control element. Add the control to
// to the map container and return the element for the map class to
// position properly.
MiniZoomControl.prototype.initialize = function(map) {
  var container = document.createElement("div");

  var zoomInDiv = document.createElement("div");
  container.appendChild(zoomInDiv);
  zoomInImg = document.createElement("img");
  zoomInDiv.appendChild(zoomInImg);
  zoomInDiv.style.cursor = "pointer"; 
  zoomInImg.src = "http://www.google.com/intl/en_ALL/mapfiles/zoom-plus.png"; 
  zoomInImg.title = "Zoom In"
  GEvent.addDomListener(zoomInDiv, "click", function() {
    map.zoomIn();
  });

  var zoomCenterDiv = document.createElement("div");
  container.appendChild(zoomCenterDiv);
  centerImg = document.createElement("img");
  zoomCenterDiv.appendChild(centerImg);
  zoomCenterDiv.style.cursor = "pointer"; 
  centerImg.src = "http://www.google.com/intl/en_ALL/mapfiles/center.png"; 
  centerImg.title = "Return to Original Position"
  GEvent.addDomListener(zoomCenterDiv, "click", function() {
    map.getInfoWindow().hide();
    document.getElementById("side_bar").innerHTML = "";
    document.getElementById("map").style.width = "600px";
    document.getElementById("map").style.height = "347px";
    map.checkResize();
    document.getElementById('allCenters').value = "ALL";
    mapTitle.style.display = "block";
    map.returnToSavedPosition();
  });

  var zoomOutDiv = document.createElement("div");
  container.appendChild(zoomOutDiv);
  zoomOutImg = document.createElement("img");
  zoomOutDiv.appendChild(zoomOutImg);
  zoomOutDiv.style.cursor = "pointer"; 
  zoomOutImg.src = "http://www.google.com/intl/en_ALL/mapfiles/zoom-minus.png"; 
  zoomOutImg.title = "Zoom Out"
  GEvent.addDomListener(zoomOutDiv, "click", function() {
    map.zoomOut();
  });
  
  map.getContainer().appendChild(container);
  return container;
}

//]]>

