var map = null;
  
 
 
var navi = null;

var GEORSS_NS="http://www.georss.org/georss";


function normalize(str)
{

   return escape(str.toLowerCase()).replace("%20","").replace("%0A","");
}


function powerQuakesNavigator (id,rssFile)
{
 

//Parasitic inheritance of AjaxObject
var that = AjaxObject();

//private properties
var RSS_FILE=rssFile;
var inNews=document.getElementById("newsDiv_"+id);
var showRss= document.getElementById("rssDiv_"+id);
var map = document.getElementById(id);
var updateMap = document.getElementById("update_"+id);
var index=1;
var rectOver=null;
var latestLat=null;
var latestLon=null;
var error_marker=null;
var markers = new Array();
var latests_markers = new Array();
var error_markers = new Array();
var list="";


if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map"));
        map.setCenter(new GLatLng(52.5, 5.0),5);
        
        map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());
	    map.addControl(new GOverviewMapControl(), new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(10, 10)));
		map.addMapType(G_PHYSICAL_MAP)
        map.addControl(new GScaleControl());
       // map.addControl(new GZoomControl({sColor:'#000',nOpacity:.3,sBorder:'1px solid yellow'}), new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(5,285)));
	    map.setMapType(G_PHYSICAL_MAP);
	    GEvent.addListener(map, "zoomend", zoomLimit);
	    GEvent.addListener(map, "click", function(marker, point) { 
	    
	    
	    
	      if (marker) { 
                               marker.openInfoWindowHtml("<strong>Datum: "+marker.date+";"+marker.time+" <br/><br/>"+marker.reg+" M= "+marker.mag+" Diepte= "+marker.dep+" Km<br/></strong><br/>"+"lat="+marker.lat+" lon="+marker.lon+"<br/><br/><a target=\"_blank\" href=\""+marker.phase+"\">Phase Data</a>", new GSize(50,0));  

                      }
     	            }); 
	    
	      
	      

	  

      } 
       else 
          { 
           alert("Browser not compatible with Google Maps API, please upgrade");
           return;
           }




//private methods

function lonscale(latitude) {
	var ap1 = 111412.84;
	var ap2 = -93.5;
	var ap3 = 0.118;
	var lat = latitude * ((2.0 * Math.PI) / 360.0);
	var longlen = (ap1 * Math.cos(lat)) + (ap2 * Math.cos(3 * lat)) + (ap3 * Math.cos(5 * lat));

	return((longlen / 12 * 39.370079) / 5280);
}

  function zoomLimit() {
	
	
	var zoom = map.getZoom();
	if(zoom < 6) map.setZoom(6);
	//if(zoom > 13) map.setZoom(13);
	
 	refresh();
}

function refresh() {
	dispOverlay();

}

function dispOverlay() {
	

  for(var i=0;i<latests_markers.length;i++)
 {

try{
	map.removeOverlay(error_markers[i]);
}catch (e)
{}

	var latLng = new GLatLng(latests_markers[i].lat, latests_markers[i].lon);
	var center = map.getCenter();
	var bounds = map.getBounds();
	var southWest = bounds.getSouthWest();
	var northEast = bounds.getNorthEast();
	var width = northEast.lng() - southWest.lng();
	var height = northEast.lat() - southWest.lat();
	var longlen = lonscale(center.y);
	var widthmi = longlen * width;
	var rapcm = widthmi / 540;

	 
	if(rapcm > 0) {
 		error = 1.1;

 		
		var error_icon = new GIcon();
		error_icon.image = "images/SeisAreaSmall.png";
		error_icon.iconSize = new GSize(error * 2 / rapcm, error * 2 / rapcm);
		error_icon.iconAnchor = new GPoint(error / rapcm, error / rapcm);
		error_icon.infoWindowAnchor = new GPoint(error / rapcm, error / rapcm);			

	    
		error_marker = new GMarker(latLng, error_icon);        

  	    error_marker.date=latests_markers[i].date
        error_marker.time=latests_markers[i].time;
    
        error_marker.reg=latests_markers[i].reg;
        error_marker.mag=latests_markers[i].mag;
        error_marker.lat= latests_markers[i].lat;
        error_marker.lon= latests_markers[i].lon;
	    error_marker.link= latests_markers[i].link;
 	    error_marker.dep= latests_markers[i].dep;
	    error_marker.phase= latests_markers[i].phase;
 	     
		map.addOverlay(error_marker);		
        error_markers[i]=error_marker;
		
	 
		
		
	    
	    }
	
}	 
	
}
	

 
  addItem = function(id,rssItem) {

    

    re1 = new RegExp("Lat = [0-9]+\.[0-9]*(,)");
   
    
    re2 = new RegExp("Lon = [0-9]+\.[0-9]*(,)");

    var infoArray=rssItem.getElementsByTagName("description")[0].firstChild.data.replace(re1,"").replace(re2,"").split(",",10);

    var  guid=GXml.value(rssItem.getElementsByTagName("guid")[0]);
    var  dat=infoArray[0];
    var  time=infoArray[1];    
    var  dep=parseFloat(infoArray[2].substr(infoArray[2].indexOf('=')+1,infoArray[2].length));
    var  mag=parseFloat(infoArray[3].substr(infoArray[3].indexOf('=')+1,infoArray[3].length));
    var  reg=infoArray[4].substr(infoArray[4].indexOf('=')+1,infoArray[4].length);    
    var  aut=infoArray[5].substr(infoArray[5].indexOf('=')+1,infoArray[5].length);
    var  type=infoArray[6].substr(infoArray[6].indexOf('=')+1,infoArray[6].length);
    var  latest=infoArray[7].substr(infoArray[7].indexOf('=')+1,infoArray[7].length);
    

    
    index=-index;
    list =list+"<tr class=\"listItem"+index+"\"><td class=\"left-container13\"><strong><a href=\"javascript:navi.locateQuake("+id+")\">"+dat+" - "+time+"</a></strong></td><td class=\"left-container23\">"+reg+"</td><td class=\"left-container33\">"+mag+"</td><td class=\"right-container23\">"+dep+"Km</td><td class=\"right-container13\">"+type+"</td><td class=\"right-container33\"><a target=\"_blank\" href=\""+guid+"\">Phase Data</a></td></tr>";
//    list.innerHTML="<div class=\"listItem"+index+"\"><div class=\"left-container13\"><strong><a href=\"javascript:navi.locateQuake("+id+")\">"+dat+" - "+time+"</a></strong></div><div class=\"left-container23\">"+reg+" M = "+mag+"</div><div class=\"right-container23\">"+dep+" Km</div><div class=\"right-container13\">"+type+"</div></div>"+list.innerHTML;
  

    }


    KnmiRssHandler=function () {
  
      //    inNews.innerHTML="";
     
	 if( that.http.readyState == 4){

              var xmlDoc = that.http.responseXML.documentElement	     
             
              updateMap.innerHTML="";
              list="<table class=\"tableQuakes\"><tbody>";
              var length=xmlDoc.getElementsByTagName("item").length;
              
              for(var i=0; i<length; i++)  {
           
                 
                 addItem(i,xmlDoc.getElementsByTagName("item")[i]);             
              
               
                 that.drawQuake(i,xmlDoc.getElementsByTagName("item")[i]);
//                                  that.drawQuake(i,xmlDoc.getElementsByTagName("item")[i].getElementsByTagName("description")[0].firstChild.data,xmlDoc.getElementsByTagName("item")[i].getElementsByTagName("link")[0].firstChild.data);
             
               }
               
             list=list+"</tbody></table>";              
           	 inNews.innerHTML=list;
	
	    }
	}
	
// public methods
	
  that.drawQuake= function(id,rssItem)
     { 

      var info=GXml.value(rssItem.getElementsByTagName("description")[0]);
      var  link=GXml.value(rssItem.getElementsByTagName("link")[0]);
      var  phase=GXml.value(rssItem.getElementsByTagName("guid")[0]);
   
    
//IE 6 doesn`t support Namespaces.. it`s a shame

      var point;

      var browser = navigator.appName;
      if(browser == "Microsoft Internet Explorer"){
         point = GXml.value(rssItem.getElementsByTagName("georss:point")[0]);
       }else{
          point = GXml.value(rssItem.getElementsByTagNameNS(GEORSS_NS,"point")[0]);
        }

 
       re1 = new RegExp("Lat = [0-9]+\.[0-9]*(,)");
   
    
       re2 = new RegExp("Lon = [0-9]+\.[0-9]*(,)");
      

 
      var infoArray=info.replace(re1,"").replace(re2,"").split(",",10);

      
      var  date=infoArray[0];
      var  time=infoArray[1];        
      var  lat=parseFloat(point.substr(0,point.indexOf(' ')));
      var  lon=parseFloat(point.substr(point.indexOf(' ')+1,point.length));
      
 //     var  lon=parseFloat(infoArray[3].substr(infoArray[3].indexOf('=')+1,infoArray[3].length));        
      var  dep=parseFloat(infoArray[2].substr(infoArray[2].indexOf('=')+1,infoArray[2].length));
      var  mag=parseFloat(infoArray[3].substr(infoArray[3].indexOf('=')+1,infoArray[3].length));
      var  reg=infoArray[4].substr(infoArray[4].indexOf('=')+1,infoArray[4].length);    
      var  aut=infoArray[5].substr(infoArray[5].indexOf('=')+1,infoArray[5].length);
      var  type=infoArray[6].substr(infoArray[6].indexOf('=')+1,infoArray[6].length);
      var  latest=infoArray[7].substr(infoArray[7].indexOf('=')+1,infoArray[7].length);
      
   
      
      // Create our  marker icon

      var icon = new GIcon();
      icon.iconSize = new GSize(mag*6.0, mag*6.0);
	  icon.shadowSize = new GSize(mag*3.5, mag*1.5);
	  icon.iconAnchor = new GPoint(10,12);
	  icon.infoWindowAnchor = new GPoint(7,5);
	
	  var marker = new GMarker(new GLatLng(lat, lon), icon);
	  marker.date=date
	  marker.time=time;
    
      marker.reg=reg;
	  marker.mag=mag;
      marker.lat= lat;
      marker.lon= lon;
	  marker.link = link;
	  marker.phase = phase;
 	  marker.dep= dep;
 	 
    
     
    
    
      if (normalize(latest.toLowerCase())=="true")
      {
       //dump(escape(latest.toLowerCase()));
       icon.image = "images/star.png";       
       icon.shadow = "images/quakeshadow.png";
	   latests_markers[latests_markers.length]=marker;

       /*
       rectangle visualization wiht circle image using Polygons_0_2.js

       bug: IE won`t show the right-transparency on the image, 

       workaround taken from
       http://www.astro.oma.be/SEISMO/index.php?LANG=NL&LEVEL=210 
       embedded zooming listener handling functions, costomized for multiple markers:
       
       - lonscale
       - zoomLimit
       - refresh
       - displayOverlay
       
       as private members.
       
       

       var lngDelta = 0.019;
       var latDelta = 0.011;
       var rectBounds = new GLatLngBounds(
       new GLatLng(lat + latDelta, lon + lngDelta),
       new GLatLng(lat - latDelta, lon - lngDelta));
       map.removeOverlay(this.rectOver);
       this.rectOver=new Rectangle(rectBounds, 1, "","#FF4500",1.0);       
       map.addOverlay(this.rectOver); 
       */
       
       
      	}
      	else
            { // dump(type);
             
             if(normalize(type.toLowerCase())=="t")
             {// alert(id+" "+normalize(type.toLowerCase()));
                      icon.image = "images/quakeIconRed.png";
                      }
 
             
             if(normalize(type)=="g")
                      icon.image = "images/quakeIconYellow.png";
 

             icon.shadow = "images/quakeshadow.png";
             }

      
      
        markers[id]=marker;	
        map.addOverlay(marker);     	            
	
	
	               
	               
	               
  }



   that.locateQuake = function(id)
   {
   
    map.setMapType(G_NORMAL_MAP);
    map.setCenter(new GLatLng(markers[id].lat, markers[id].lon), 11);
    markers[id].openInfoWindowHtml("<strong>Datum: "+markers[id].date+";"+markers[id].time+" <br/><br/>"+markers[id].reg+" M= "+markers[id].mag+" Diepte= "+markers[id].dep+" Km<br/></strong><br/>"+"lat="+markers[id].lat+" lon="+markers[id].lon+"<br/><br/><a target=\"_blank\" href=\""+markers[id].phase+"\">Phase Data</a>", new GSize(50,0));  
    refresh();
   }


   
  
   that.load = function  () {

     
     map.clearOverlays();
     markers = new Array();
     latests_markers = new Array();
     error_markers = new Array();
    
     updateMap.innerHTML=" Wait.. Collecting Data.. ";
     inNews.innerHTML="";

     //AjaxObject direct call for orfeus earthquakes and
     map.setMapType(G_PHYSICAL_MAP);
     map.setCenter(new GLatLng(52.5, 5.0),5);
     that.sndReq(RSS_FILE,KnmiRssHandler);
     refresh();
     


  }
  
  
  
 
  return that;
  
  
}

 
function init(id,rssFile)
{
 
 navi = new powerQuakesNavigator(id,rssFile);
 navi.load();
 
  

}






