// Earthquake Map default style by Dawn Endico - endico@gmail.com 
//   Released under Creative Commons License
//   http://creativecommons.org/licenses/by-sa/2.5/
//
      
var minmagnitude = 2;
//var url = "one.xml";
//var url = "20.xml";
var url = "http://earthquake.usgs.gov/eqcenter/recenteqsww/catalogs/eqs7day-M5.xml";
//var http = http://earthquake.usgs.gov/recenteqsww/catalogs/
//var url = "eqs7day-M2.5.xml";
var latitude = 0;
var longitude = 0;
var zoom = 16;
var type = "map";
var map;
var timeOut = 150;
var i=0;
var items;
var M2count = 0; var M3count = 0; var M4count = 0;
var M5count = 0; var M6count = 0;
var yellowicon; var blueicon; var whiteicon; var greenicon;
//Detect IE5.5+
var isMSIE = false;
var isOpera = false;
var MSIEversion=0;
if (navigator.appVersion.indexOf("MSIE")!=-1) {
  temp=navigator.appVersion.split("MSIE");
  MSIEversion=parseFloat(temp[1]);
}
if (MSIEversion>=5.5) { //NON IE browser will return 0
  isMSIE = true;
}
if (navigator.userAgent.indexOf("Opera")!=-1) {
  isOpera = true;
  isMSIE = false;
}

// Centers the map on the given coordinates and chooses either
// satellite, hybrid or map type
function recenter(latitude, longitude, zoom, type) {
  map.centerAndZoom(new GPoint(latitude, longitude), zoom);
  if (type == 'sat') {
    map.setMapType(G_SATELLITE_TYPE);
  } else if (type == 'hybrid') {
    map.setMapType(G_HYBRID_TYPE);
  } else {
    map.setMapType(G_MAP_TYPE);
  }
}

// Creates a marker whose info window displays the given text
function createMarker(point, magnitude, link, title, date) {
   switch (magnitude) {
   case "2":
        var marker = new GMarker(point,whiteicon);
	M2count++;
        document.getElementById('M2').innerHTML = M2count;
	break
   case "3":
        var marker = new GMarker(point,greenicon);
	M3count++;
        document.getElementById('M3').innerHTML = M3count;
	break
   case "4":
        var marker = new GMarker(point,blueicon);
	M4count++;
        document.getElementById('M4').innerHTML = M4count;
	break
   case "5":
        var marker = new GMarker(point,yellowicon);
	M5count++;
        document.getElementById('M5').innerHTML = M5count;
	break
   default:
        var marker = new GMarker(point);
	M6count++;
        document.getElementById('M6').innerHTML = M6count;
   }

   var html = '<span id="marker"> <p><a href="'+ link +'" onclick="window.open(this.href,\'newwin\'); return false;">' + title + '</a><br>' + date + '</p><p><a href="http://pasadena.wr.usgs.gov/shake/ous/html/unknown_form.html" onclick="window.open(this.href,\'newwin\'); return false;">Did You Feel It?</a></p></span>';
   GEvent.addListener(marker, "click", function() {
   marker.openInfoWindowHtml(html);
   });

   return marker;
}

function onLoad() {
  if (!GBrowserIsCompatible()) {
    var err = document.getElementById("errmsg");
    err.style.visibility = "visible";
  } else {
  getParameters();
  var baseicon = new GIcon();
  baseicon.image = "http://labs.google.com/ridefinder/images/mm_20_white.png";
  baseicon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
  baseicon.iconSize = new GSize(12, 20);
  baseicon.shadowSize = new GSize(22, 20);
  baseicon.iconAnchor = new GPoint(6, 20);
  baseicon.infoWindowAnchor = new GPoint(5, 1);

  whiteicon = new GIcon(baseicon);
  whiteicon.image = "http://labs.google.com/ridefinder/images/mm_20_white.png";
  yellowicon = new GIcon(baseicon);
  yellowicon.image = "http://labs.google.com/ridefinder/images/mm_20_yellow.png";
  greenicon = new GIcon(baseicon);
  greenicon.image = "http://labs.google.com/ridefinder/images/mm_20_green.png";
  blueicon = new GIcon(baseicon);
  blueicon.image = "http://labs.google.com/ridefinder/images/mm_20_blue.png";

  map = new GMap(document.getElementById("map"));
  map.addControl(new GLargeMapControl());
  map.addControl(new GMapTypeControl());
  map.addControl(new GScaleControl());
  map.centerAndZoom(new GPoint(latitude, longitude), zoom);
  if (type == 'sat') {
    map.setMapType(G_SATELLITE_TYPE);
  } else if (type == 'hybrid') {
    map.setMapType(G_HYBRID_TYPE);
  } else {
    map.setMapType(G_MAP_TYPE);
  }

  var request = GXmlHttp.create();
  request.open("GET", url, true);
  request.onreadystatechange = function() {
    if (request.readyState == 4) {
      var xmlDoc = request.responseXML;
      items = xmlDoc.documentElement.getElementsByTagName("item");
      window.setTimeout(mapOne,timeOut);
    }
  }
  request.send(null);
  var center = map.getCenterLatLng();
  document.getElementById("latitude").innerHTML = center.y;
  document.getElementById("longitude").innerHTML = center.x;

  GEvent.addListener(map, "moveend", function() {
    var center = map.getCenterLatLng();
    document.getElementById("latitude").innerHTML = center.y;
    document.getElementById("longitude").innerHTML = center.x;
  });
  }
}

function getValueByTagName(node, tag) {
  var a = node[i].getElementsByTagName(tag)[0];
  if (a) {
    if (GXml.value(a)) {
      return(GXml.value(a));
    } else {
      alert('value of " + tag + " is null');
    }
  } else {
  alert ('node[i] is null: tag=' + tag);
  }
}

function mapOne() {
  if ( i < items.length ) {
    var max=Math.min(i+10, items.length);
    while (i < max) {
      if (isMSIE ) {
        var point = new GPoint(parseFloat(getValueByTagName(items,'geo:long')),
                               parseFloat(getValueByTagName(items,'geo:lat')));
      } else {
        var point = new GPoint(parseFloat(getValueByTagName(items,'long')),
                               parseFloat(getValueByTagName(items,'lat')));
      }
      var title = getValueByTagName(items,'title');
      var link = getValueByTagName(items,'link');
      var date = getValueByTagName(items,'description');
      if (isMSIE ) {
        var magnitude = getValueByTagName(items,'dc:subject');
      } else {
        var magnitude = getValueByTagName(items,'subject');
      }
      if (magnitude >= minmagnitude) {
        var marker = createMarker(point, magnitude, link, title, date);
        map.addOverlay(marker);
      }
      i++;
    }
    if (document.getElementById('loadingMessage')) {
      document.getElementById('loadingMessage').innerHTML= "Loading " + max + " of " + items.length ;
    }
    window.setTimeout(mapOne,timeOut);
  } else {
    document.getElementById('loading').style.visibility='hidden';
  }

  // Monitor the window resize event and let the map know when it occurs
  if (window.attachEvent) { 
    window.attachEvent("onresize", function() {this.map.onResize()} );
  } else {
    window.addEventListener("resize", function() {this.map.onResize()} , false);
  }
}

function linkToThisPage() {
  var curURL = new String(location.href);
  var baseURL = curURL.split('?')[0];
  var curzoom = map.getZoomLevel();
  var center = map.getCenterLatLng();
  var curlat = center.x;
  var curlon = center.y;
  if (map.getCurrentMapType() == G_SATELLITE_TYPE) {
    var curtype = 'sat';
  } else if (map.getCurrentMapType() == G_HYBRID_TYPE) {
    var curtype = 'hybrid';
  } else {
    var curtype = 'map';
  }

  var url = baseURL + "?lat=" + curlat + "&lon=" + curlon + "&type=" + curtype + "&zoom=" + curzoom;
  location.href=url;
}

function getParameters() {
  var url = new String(location.href);
  if (url.indexOf('?') > -1) {
    var queryString = url.split('?');
    if (queryString[1].length > 0) {
      var paramString = queryString[1];
      var params = paramString.split("&");
      for (var i=0; i<= params.length-1; i++){
        var curParam= params[i].split("=");
        if (curParam[1].length > 0) {
	  var param=curParam[0].toLowerCase();
          switch (param) {
            case "lon":
              var curlon = curParam[1];
	      if ((curlon >=-180 ) && (curlon <= 180)) {
                longitude = curParam[1];
	      }
              break;
            case "lat":
              var curlat = curParam[1];
	      if ((curlat >=-180 ) && (curlat <= 180)) {
                latitude = curlat;
	      }
              break;
            case "zoom":
              var curzoom = curParam[1];
	      if ((curzoom >=1 ) && (curzoom <= 18)) {
	        zoom = curzoom;
	      }
              break;
            case "type":
              if ( curParam[1].toLowerCase() == 'sat' ) {
                type = "sat";
              } else if ( curParam[1].toLowerCase() == 'hybrid' ) {
                type = "hybrid";
              } else {
                type = "map";
              }
              break;
          }
	}
      }
    }
  }
}

