//===============================================================================
var xgtool = {
   'ver'    : '1.1.0',
   'vdt'    : '2010-03-01'
};
xgtool.isArray = function() {
   if (arguments[0] == null) return false;
   if (typeof arguments[0] == 'object') {  
      var tmp = arguments[0].constructor.toString().match(/array/i); 
       return (tmp != null);  
   }
   return false;
}
function gmap_click(overlay, point) {
   map_nm = gmap.getCurrentMapType().getName();
}
function point2xy(point) {strYX=point.toString(); strYX = strYX.replace(/[()]/g, ''); yxs = strYX.split(','); return [parseFloat(yxs[1]), parseFloat(yxs[0])];}
function xgload(xml_file, xopts) {
   if (!GBrowserIsCompatible()) {return 0;}
   zoom_level = 7;
   dot_dir = 'wwgmap/wwgmaps/images/dots';
   cc_lat = xopts.cc_lat;
   cc_lng = xopts.cc_lng;
   if (xopts.sw_lat) {
      sw_lat = xopts.sw_lat;
      sw_lng = xopts.sw_lng;
      ne_lat = xopts.ne_lat;
      ne_lng = xopts.ne_lng;
      zoom_level = 0
   }
   else if (xopts.zoom_level) {
      zoom_level = xopts.zoom_level
   }
   if (xopts.dot_dir) {dot_dir = xopts.dot_dir;}
   var mapSpecs = new Array();
   mapSpecs.push(G_NORMAL_MAP);
   mapSpecs.push(G_SATELLITE_MAP);
   mapSpecs.push(G_HYBRID_MAP);
   mapSpecs.push(G_PHYSICAL_MAP);
   gmap = new GMap2(document.getElementById("map"), { mapTypes: mapSpecs } );
   gmap.addControl(new GMapTypeControl());
   gmap.addControl(new GLargeMapControl());
   gmap.addControl(new GScaleControl());
   var xgpoint = null;
   var xgoverlay = null;
   var xgzooms = new Array();
   var xgzoom = null;
   gmap.disableDoubleClickZoom();
function makeIcon(url, w, h, anchor_x, anchor_y ){
   if (url) {
      gicon = new GIcon();
      gicon.image = url;
   }
   else {
      gicon = new GIcon(G_DEFAULT_ICON);
   }
   gicon.iconSize = new GSize(w, h);
   gicon.shadowSize = new GSize(0, 0);
   gicon.iconAnchor = new GPoint(anchor_x, anchor_y);
   gicon.infoWindowAnchor = new GPoint(anchor_x, anchor_y);
   return gicon;
}
function setMrkZIndex(marker, b) {
   return GOverlay.getZIndex(marker.getPoint().lat()) + marker.zidx * 100000;
}
function makeMarker(point, opts) {
   var name = opts.name;
   var html = opts.html;
   var icontype = opts.icontype;
   var labels = opts.labels;
   var marker;
   if (typeof(opts.zidx) != 'undefined') {
      marker = new GMarker(point, gicons[icontype],{zIndexProcess:setMrkZIndex});   
      marker.zidx = opts.zidx;
   }
   else {
      marker = new GMarker(point, gicons[icontype]);
   }
   GEvent.addListener(marker, "click", function() {
   if (xgtool.isArray(html)) {
      var w = 0;
      if (html.length >= 2) {
         var w2 = html.length*88;
         if (w2 > w) {w = w2}
      }
      if (w > 0 || h > 0) {
         html[0] = '<div style="width:'+w+'px;0">' + html[0] + '<\/div>';
      }
      var tabs = [];
      for (var i=0; i<html.length; i++) {
          tabs.push(new GInfoWindowTab(labels[i],"<center>" + html[i] + "</center>"));
      }
      marker.openInfoWindowTabsHtml(tabs);      
   }
   else if (html) {
      marker.openInfoWindowHtml(html); 
   }
   xgpoint = marker.getPoint(); 
});
   if (name) {
      marker.tooltip = '<div class="sitetip">'+name+'</div>';
      GEvent.addListener(marker,"mouseover", function() {showTooltip(marker);});
      GEvent.addListener(marker,"mouseout",  function() {tooltip.style.visibility="hidden"});
   }
   addToMap(marker);
   return marker;
}
function createMarker(point,name,html,icontype,labels) {
   var marker = new GMarker(point, gicons[icontype]);
   GEvent.addListener(marker, "click", function() {
   if (xgtool.isArray(html)) {
      var w = 0;
      if (html.length >= 2) {
         var w2 = html.length*88;
         if (w2 > w) {w = w2}
      }
      if (w > 0 || h > 0) {
         html[0] = '<div style="width:'+w+'px;0">' + html[0] + '<\/div>';
      }
      var tabs = [];
      for (var i=0; i<html.length; i++) {
          tabs.push(new GInfoWindowTab(labels[i],"<center>" + html[i] + "</center>"));
      }
      marker.openInfoWindowTabsHtml(tabs);      
   }
   else if (html) {
      marker.openInfoWindowHtml(html); 
   }
   xgpoint = marker.getPoint(); 
});
   if (name) {
      marker.tooltip = '<div class="sitetip">'+name+'</div>';
      GEvent.addListener(marker,"mouseover", function() {showTooltip(marker);});
      GEvent.addListener(marker,"mouseout",  function() {tooltip.style.visibility="hidden"});
   }
   addToMap(marker);
   return marker;
}
function showTooltip(marker) {
   tooltip.innerHTML = marker.tooltip;
   var point=gmap.getCurrentMapType().getProjection().fromLatLngToPixel(gmap.getBounds().getSouthWest(),gmap.getZoom());
   var offset=gmap.getCurrentMapType().getProjection().fromLatLngToPixel(marker.getPoint(),gmap.getZoom());
   var anchor=marker.getIcon().iconAnchor;
   var width=marker.getIcon().iconSize.width;
   var pos = new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(offset.x - point.x - anchor.x + width,- offset.y + point.y +anchor.y));
   pos.apply(tooltip);
   tooltip.style.visibility="visible";
}
function addToMap(marker) {
   gmap.addOverlay(marker);
}
   var icon = new GIcon();
   icon.infoWindowAnchor = new GPoint(5, 1);
   var tooltip = document.createElement("div");
   document.getElementById("map").appendChild(tooltip);
   tooltip.style.visibility="hidden";
function xml_open(xml_file, tag_nms, fidx, popup_as_table) {
   if (fidx == null) {
      fidx = 0;
   }
   if (null == tag_nms) {
      tag_nms = {
         lat: 'lat',
         lng: 'lng',
         tip: 'tip',
         popup: 'popup',
         icon: 'icon',
         symbol: 'symbol',
         url: 'url',
         marker: 'marker',
         polyline: 'polyline',
         polygon: 'polygon'
      };
   }
   var request = GXmlHttp.create();
   request.open("GET", xml_file, true);
   request.onreadystatechange = function() {
      if (request.readyState == 4) {
         xml_parse_n_map(request.responseText, tag_nms);
      }
   }
   request.send(null);
function xml_parse_n_map(data, tag_nms) {
   var xmlDoc = GXml.parse(data);
   var marker_tag = tag_nms['marker'];
   var markers = xmlDoc.documentElement.getElementsByTagName(marker_tag);  
   if (markers != null) {xml_marker(markers, tag_nms);} 
   var lines = xmlDoc.documentElement.getElementsByTagName("line");
   if (lines != null) {xml_polyline(lines, tag_nms);}
   var polygon_tag = tag_nms['polygon'];
   var polygons = xmlDoc.documentElement.getElementsByTagName(polygon_tag);
   if (polygons != null) {xml_polygon(polygons, tag_nms);}
   return 1;
}
function xml_marker(markers, tag_nms) {
   for (var i = 0; i < markers.length; i++) {
      tag_vas = {};
      for (var nm in tag_nms) {
         tag_nm = tag_nms[nm];
         tag_vas[nm] = markers[i].getAttribute(tag_nm);
         if (null == tag_vas[nm]) {
             tag_vas[nm] = GXml.value(markers[i].getElementsByTagName(tag_nm)[0]);
            if (tag_vas[nm] == null) {tab_vas[nm] = '';}
         }
      }
      if (!tag_vas['icon'] && tag_vas['symbol'].length) {
         sym = (tag_vas['symbol'].length == 1)? "0" + tag_vas['symbol'] : tag_vas['symbol'];
         tag_vas['icon'] = "mrk_" + sym + "_" + fidx;
      }
      point = new GPoint(parseFloat(tag_vas['lng']), parseFloat(tag_vas['lat']));
      popup_as_table = true;
      strPopups = '';
      strLabels = '';
      strInfos = tag_vas['popup'].split("!!");
      if (strInfos.length >= 2) {
         strPopups = [];
         strLabels = [];
         for (var j = 0; j < strInfos.length; j++) {
            vas = strInfos[j].split('??');
            if (vas.length == 1) {
               strPopups[j]  = vas[0];
               strLabels[j] = 'Tab ' + j;
            }
            else {
              strLabels[j] = vas[0];
              if (vas.length >= 3) {
                 if (vas[2] == 'image') {
                    va = "<img src='" + vas[1] + "' alt='image' border='0' />";
                 }
                 else {
                    va = vas[1];
                 }
                    if (vas.length >=4) {
                     va = "<a href='" + vas[3] + "' target='_blank'>" + va + "</a>";
                    } 
              }
              else {
                   va = (popup_as_table)? str2table(vas[1], tag_vas['tip'], tag_vas['url']) : vas[1];
              }
              strPopups[j] = va;
            }
         }
      }
      else {
         strPopups = (popup_as_table)? str2table(strInfos[0], tag_vas['tip'], tag_vas['url']) : strInfos[0];
      }
      marker = createMarker(point,tag_vas['tip'],strPopups,tag_vas['icon'], strLabels);
   }
   return;
}
function xml_polyline(lines, tag_nms) {
   for (var i = 0; i < lines.length; i++) {
      var color = lines[i].getAttribute("color");
      var width = parseFloat(lines[i].getAttribute("width"));
      var points = lines[i].getElementsByTagName("point");
      var pts = [];
      for (var j = 0; j < points.length; j++) {
          pts[j] = new GLatLng(parseFloat(points[j].getAttribute("lat")),
                               parseFloat(points[j].getAttribute("lng")));
      }
      gmap.addOverlay(new GPolyline(pts,color,width));
   }
   return
}
function xml_polygon(polygons, tag_nms) {
   if (typeof(polys) == 'undefined') {
      var polys = [];
      var poly_nms = [];
   }
   for (var a = 0; a < polygons.length; a++) {
      var name  = polygons[a].getAttribute("name");
      var filled_color   = polygons[a].getAttribute("color");  
      if (null == filled_color) {filled_color = '';}
      var filled_opacity = polygons[a].getAttribute("opacity");
      if (null == filled_opacity) {filled_opacity = 1;};
      var lcolor = polygons[a].getAttribute("lcolor");
      if (null == lcolor) {lcolor = '#000000';}
      var lwidth   = polygons[a].getAttribute("lwidth");
      if (null == lwidth) {lwidth = 1;}
      var lopacity = polygons[a].getAttribute("lopacity");
      if (null == lopacity) {lopacity = 1;}
      poly_opts = {};
      var onclick = polygons[a].getAttribute("onclick");
      var ondblclick = polygons[a].getAttribute("ondblclick");
      poly_opts['clickable'] = ((null != onclick) || (null != ondblclick))? true : false;
      var points = polygons[a].getElementsByTagName("point");
      var pts = [];
      for (var i = 0; i < points.length; i++) {
         pts[i] = new GLatLng(parseFloat(points[i].getAttribute("lat")),
                               parseFloat(points[i].getAttribute("lng")));
      }
      var poly = new GPolygon(pts,lcolor,lwidth,lopacity,filled_color,filled_opacity,poly_opts);
      if (poly == null) {continue;}
      poly.type = 'poly';
      if (onclick) {
          poly.onclick_va = onclick;
          poly.onclick = function(){eval(this.onclick_va);};
      }
      if (ondblclick) {
          poly.ondblclick_va = ondblclick;
          poly.ondblclick = function(){eval(this.ondblclick_va);};
      }
      gmap.addOverlay(poly);
      polys.push(poly);
      poly_nms.push(name);
   }
   return 1;
}
function str2table(str, title, title_url) {
   var items = str.split(";");
   strPopup="<div class='sitepopup'>";
   if (null != title) {
      strPopup +=(title_url)? "<a href='" + title_url + "'>" + title + "</a>" : title;
      strPopup += '<table>';
   }
   for (var j = 0; j < items.length; j++) {
      if (items[j] == "") {continue;}
      vas = items[j].split(':');
      if (vas.length == 1) {vas[1] = '';}
      else if(vas.length > 2) {vas[1] = items[j].replace(vas[0] + ":", '');}
      strPopup += "<tr><td>" + vas[0] + ":</td><td>" + vas[1] + "</td></tr>";
   }
   strPopup += "</table>";
   strPopup += "<p>powered by <a href='http://waterwatch.usgs.gov'><span style='font-weight: bold;'>USGS WaterWatch</span></a></p>";
   strPopup += '</div>';
   return strPopup;
}
}
var gicons = [];
gicons['mrk_00_0'] = makeIcon(dot_dir + '/b_real00dot.gif', 10, 10, 5, 5)
gicons['mrk_01_0'] = makeIcon(dot_dir + '/b_real01dot.gif', 10, 10, 5, 5)
gicons['mrk_02_0'] = makeIcon(dot_dir + '/b_real02dot.gif', 10, 10, 5, 5)
gicons['mrk_03_0'] = makeIcon(dot_dir + '/b_real03dot.gif', 10, 10, 5, 5)
gicons['mrk_04_0'] = makeIcon(dot_dir + '/b_real04dot.gif', 10, 10, 5, 5)
gicons['mrk_05_0'] = makeIcon(dot_dir + '/b_real05dot.gif', 10, 10, 5, 5)
gicons['mrk_06_0'] = makeIcon(dot_dir + '/b_real06dot.gif', 10, 10, 5, 5)
gicons['mrk_07_0'] = makeIcon(dot_dir + '/b_real07dot.gif', 10, 10, 5, 5)
gicons['mrk_08_0'] = makeIcon(dot_dir + '/b_real08dot.gif', 10, 10, 5, 5) 
if (zoom_level > 1) {
   gmap.setCenter(new GLatLng(cc_lat, cc_lng), zoom_level);
}
else {
   gmap.setCenter(new GLatLng(cc_lat, cc_lng));
   gmap.setZoom(gmap.getBoundsZoomLevel(new GLatLngBounds(new GLatLng(sw_lat, sw_lng),new GLatLng(ne_lat,ne_lng))));
}
gmap.setMapType(G_PHYSICAL_MAP)
GEvent.addListener(gmap, 'click', function(overlay, point) {
      if (overlay) {
         xgoverlay = overlay;
         if (overlay.type == 'poly') {
            xgpoint = overlay.getBounds().getCenter();
            if (typeof overlay.onclick == 'function') {
               overlay.onclick();
            }
         }
         else {
            xgpoint = overlay.getPoint();
         }
      }
      else {
         xgpoint = point;
      }
});
GEvent.addListener(gmap, 'dblclick', function(overlay, point) {
            if (null == overlay){overlay = xgoverlay;}
            if (overlay && overlay.type == 'poly' && typeof overlay.ondblclick == 'function') {
               overlay.ondblclick();
            }
            else {
               gmap_dblclick(overlay, point); 
            }
         });
GEvent.addListener(gmap, 'zoomend', function(intZoomLevelOld, intZoomLevelNew) {
     if (xgpoint) {gmap.setCenter(xgpoint);}
     xgzooms.push(intZoomLevelNew);
});
xml_open(xml_file, {lat: 'lat',lng: 'lng',popup: 'flowinfo', tip: 'name',icon: 'icon', symbol: 'class',marker: 'site',markers: 'sites', polyline: 'polyline',polylines: 'polylnes',polygon: 'polygon',polygons: 'polygons',url: 'url'}, 0, false)
}

