// 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 = "kamchatka-20060420/kamchatka.xml";
var latitude = 61.15;
var longitude = 167.11;
var zoom = 7;
var type = "hybrid";
var map;
var timeOut = 165;
var i=0;
var items;
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.setCenter(new GLatLng(latitude, longitude));
  map.setZoom(zoom);
  if (type == 'sat') {
    map.setMapType(G_SATELLITE_MAP);
  } else if (type == 'hybrid') {
    map.setMapType(G_HYBRID_MAP);
  } else {
    map.setMapType(G_NORMAL_MAP);
  }
}

// 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);
	break;
   case "3":
        var marker = new GMarker(point,greenicon);
	break;
   case "4":
        var marker = new GMarker(point,blueicon);
	break;
   case "5":
        var marker = new GMarker(point,yellowicon);
	break;
   default:
        var marker = new GMarker(point);
   }

   var html = '<div id="marker"> <p><a href="'+ link +'" onclick="window.open(this.href,\'newwin\'); return false;">' + title + '</a><br>' + date + '</p><p><a href="http://earthquake.usgs.gov/eqcenter/dyfi.php" onclick="window.open(this.href,\'newwin\'); return false;">Did You Feel It?</a></p></div>';
   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 GMap2(document.getElementById("map"));
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
    map.addControl(new GScaleControl());
    if (type == 'sat') {
      map.setCenter(new GLatLng(latitude, longitude), zoom, G_SATELLITE_MAP);
    } else if (type == 'hybrid') {
      map.setCenter(new GLatLng(latitude, longitude), zoom, G_HYBRID_MAP);
    } else {
      map.setCenter(new GLatLng(latitude, longitude), zoom, G_NORMAL_MAP);
    }

    var request = GXmlHttp.create();
    request.open("GET", url, true);
    request.onreadystatechange = function() {
      if (request.readyState == 4) {
        var xmlDoc = request.responseXML;
        pubDate = xmlDoc.documentElement.getElementsByTagName("pubDate")[0].firstChild.nodeValue;
        document.getElementById('pubDate').innerHTML= " on " + pubDate;
        items = xmlDoc.documentElement.getElementsByTagName("item");
        window.setTimeout(mapOne,timeOut);
      }
    }
    request.send(null);

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

    if (document.getElementById("latitude")) {
      var center = map.getCenter();
      document.getElementById("latitude").innerHTML = center.lat();
      document.getElementById("longitude").innerHTML = center.lng();

      GEvent.addListener(map, "moveend", function() {
        var center = map.getCenter();
        document.getElementById("latitude").innerHTML = center.lat();
      document.getElementById("longitude").innerHTML = center.lng();
      });
    }
  }
}

function getValueByTagName(node, tag) {
  var a = node[i].getElementsByTagName(tag)[0];
  if (a) {
    if (a.firstChild && a.firstChild.nodeValue) {
      return(a.firstChild.nodeValue);
    }
  } 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 GLatLng(parseFloat(getValueByTagName(items,'geo:lat')),
                               parseFloat(getValueByTagName(items,'geo:long')));
      } else {
        var point = new GLatLng(parseFloat(getValueByTagName(items,'lat')),
                               parseFloat(getValueByTagName(items,'long')));
      }
      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';
  }
}

function linkToThisPage() {
  var curURL = new String(location.href);
  var baseURL = curURL.split('?')[0];
  var curzoom = map.getZoom();
  var center = map.getCenter();
  var curlat = center.lat();
  var curlon = center.lng();
  var curtype;
  if (map.getCurrentMapType() == G_SATELLITE_MAP) {
    curtype = 'sat';
  } else if (map.getCurrentMapType() == G_HYBRID_MAP) {
    curtype = 'hybrid';
  } else {
    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 = parseInt(curzoom);
	      }
              break;
            case "type":
              if ( curParam[1].toLowerCase() == 'sat' ) {
                type = "sat";
              } else if ( curParam[1].toLowerCase() == 'hybrid' ) {
                type = "hybrid";
              } else {
                type = "map";
              }
              break;
          }
	}
      }
    }
  }
}


