var iconMarker;
var iconMarkerNational;
var iconMarkerWildlife;
var lastzoom;
var zoomInOut;
var points = new Array();
var numPoints=0;
var maxPoints=250;
var map;
var jsWeatherObj = null;
var jsTideObj = null;

iconMarker = new GIcon();
iconMarker.image = "marker.png";
iconMarker.iconSize = new GSize(20, 18);
iconMarker.shadow = "shadow.png"
iconMarker.shadowSize = new GSize(32, 18);
iconMarker.iconAnchor = new GPoint(9, 18);
iconMarker.infoWindowAnchor = new GPoint(5, 1);

iconMarkerNational = new GIcon();
iconMarkerNational.image = "marker-n.png";
iconMarkerNational.iconSize = new GSize(20, 18);
iconMarkerNational.shadow = "shadow.png"
iconMarkerNational.shadowSize = new GSize(32, 18);
iconMarkerNational.iconAnchor = new GPoint(9, 18);
iconMarkerNational.infoWindowAnchor = new GPoint(5, 1);

iconMarkerWildlife = new GIcon();
iconMarkerWildlife.image = "marker-w.png";
iconMarkerWildlife.iconSize = new GSize(20, 18);
iconMarkerWildlife.shadow = "shadow.png"
iconMarkerWildlife.shadowSize = new GSize(32, 18);
iconMarkerWildlife.iconAnchor = new GPoint(9, 18);
iconMarkerWildlife.infoWindowAnchor = new GPoint(5, 1);


lastzoom=-1;

function getDirection(daddr) {
 var url;
 url = "http://maps.google.com/maps?saddr="+
       document.getElementById("saddr").value+
       "&daddr="+daddr;
 window.open(url, "getDirection");
}

function clearmap() {
 for (var i in points)	{
  GEvent.trigger(points[i],'mouseout');
  GEvent.clearListeners(points[i],'click');
  map.removeOverlay(points[i]);
  delete points[i];	
 }
 numPoints=0;
}

function zoomTo(pointx,pointy) {
 if(map.getZoomLevel()==0) {
  map.centerAndZoom(new GPoint(pointx,pointy), zoomInOut);
  } else {
   zoomInOut=map.getZoomLevel();
   map.centerAndZoom(new GPoint(pointx,pointy), 0);
   }
}

function createMarker(rowdata) {

	var marker;
	var description=rowdata[0];
	var name=rowdata[3];
	var state=rowdata[4];
	var id=name+"+"+state;
	var point;
	var tooltipObj=null;
	var tooltipTimer=null;
	var tooltipNode=null;
			
	if (points[id]!=null) return;

	
	point=new GPoint(rowdata[1],rowdata[2]);
	
	if(description.indexOf("National Park")!=-1) {
	 marker = new GMarker(point, iconMarkerNational);
	} else {
	   if(description.indexOf("National Wildlife")!=-1) {
	    marker = new GMarker(point, iconMarkerWildlife);
	   }
	    else {
	     marker= new GMarker(point, iconMarker);
	    }
	  }
		
	map.addOverlay(marker);
  	GEvent.addListener(marker, "click", function() {
    	marker.openInfoWindowHtml("<div id=r><br><b>"+name+", "+state+"</b><br>"+
 	    "<br><iframe src=\"google_adsense.html\" frameborder=0 height=100></iframe>"+
    	"<a href=javascript:zoomTo("+point.x+","+point.y+")><img src=\"zoom.png\" align=\"right\" border=\"0\"></a></div>");
    	document.getElementById("infotd").innerHTML="<img src=\"fishing-holes-1001-seafoods.png\" align=\"center\" border=\"0\"><br><a href=javascript:zoomTo("+point.x+","+point.y+")><img src=\"zoom.png\" align=\"center\" border=\"0\"></a><br><br><h3>"+name+"</h3>"+description+
    	"<h4>Start Address:</h4><input type=\"text\" id=\"saddr\">" + 
    	"<input type=\"button\" onclick=\"getDirection('"+rowdata[5]+"')\" value=\"Directions to Managing Partner\">"+
    	"<br><br><span style=\"background: yellow\">Call first to confirm information.</span>"+
    	"<h4>Longitude and Latitude:</h4>"+point.y+","+point.x;
    	document.title="Fishing | "+name;
    	if(jsWeatherObj!=null) document.body.removeChild(jsWeatherObj); 
    	// Create JavaScript object
    	jsWeatherObj = document.createElement('SCRIPT');
    	jsWeatherObj.type = 'text/javascript';
    	jsWeatherObj.src = 'weather.php?weather='+rowdata[6];
    	// Add new JavaScript object
    	document.body.appendChild(jsWeatherObj);
    	if(jsTideObj!=null) document.body.removeChild(jsTideObj); 
    	// Create JavaScript object
    	jsTideObj = document.createElement('SCRIPT');
    	jsTideObj.type = 'text/javascript';
    	jsTideObj.src = 'tide.php?tide='+state;
    	// Add new JavaScript object
    	document.body.appendChild(jsTideObj);
	});

	GEvent.addListener(marker, "mouseover", function() {
        if(!tooltipObj){
        tooltipObj=document.createElement("div");
        tooltipObj.style.display="none";
        tooltipObj.style.position="absolute";
        tooltipObj.style.padding="0";
        tooltipObj.style.margin="0";
        tooltipObj.style.zIndex=50000;
        tooltipObj.innerHTML="<div class=\"markerTooltip\">"+name+", "+state+"<br>"+
                             "Longitude, Latitude: "+rowdata[2].substring(0,6)+", "+rowdata[1].substring(0,7)+"<br>"+
                             "Click on the marker to see more...</div>";
        tooltipNode = map.getPane(G_MAP_MARKER_PANE).appendChild(tooltipObj);}
        var c=map.fromLatLngToDivPixel(new GLatLng(point.y,point.x));
        try{
            tooltipObj.style.top=c.y-(marker.getIcon().iconAnchor.y+5)+"px";
            tooltipObj.style.left=c.x+(marker.getIcon().iconSize.width-marker.getIcon().iconAnchor.x+5)+"px";
            tooltipObj.style.display="block";
            tooltipObj.style.filter="Alpha(opacity=50)";
        }catch(e){}
        timer = setTimeout(function() {
         tooltipObj.style.display="none";
         clearTimeout(timer);
         timer=null;
        }, 5000);
	});

	GEvent.addListener(marker, "mouseout", function() {
        if(tooltipObj){tooltipObj.style.display="none";}
        try{
            if(timer){clearTimeout(timer);}
            map.getPane(G_MAP_MARKER_PANE).removeChild(tooltipNode);
        }catch(e){}
        tooltipObj=null;
	});
	
	
	
	points[id]=marker;
	numPoints++;
}



function startRequest(minx,miny,maxx,maxy,z,clear,minx2,miny2,maxx2,maxy2) {
	var url;
	var request;
	var zz;

	zz=parseInt(document.getElementById("detail").value);
    st=document.getElementById("state").value;

	request = GXmlHttp.create();
	
	if(zz==-1){
	  url="data.php?state="+st;
	} else {
	   url="data.php?minx="+minx+"&miny="+miny+"&maxx="+maxx+"&maxy="+maxy+"&zoom="+zz+"&state="+st;
	  }
	
	request.open("GET", url , true);
	
	request.onreadystatechange = function() {
	 if (request.readyState == 4) {
  	  if (z!=lastzoom) return;
      var xmlDoc = request.responseText;
      var rows=xmlDoc.split("\n");
      if (clear) clearmap();
      
      for (i=0;i<rows.length-1;i++) {
	   rows[i]=rows[i].split("|");
	   if(rows[i].length==7) createMarker(rows[i]);
	  
	  }
  	 }
	}
  
	request.send(null);
}


function changeDetail() {
	var zoom= map.getZoomLevel();
	var bounds = map.getBoundsLatLng();
	startRequest(bounds.minX, bounds.minY, bounds.maxX, bounds.maxY, zoom, 1);
}



function enterkey() {
 if (window.event && window.event.keyCode == 13) jumpToState();
 return !(window.event && window.event.keyCode == 13);
}


function  jumpToState() {
	var st = document.getElementById("state").value;
	var request = GXmlHttp.create();
	var url = "location.php?state="+st;
	
	if(st=="") {
	 map.centerAndZoom(new GPoint(centerx,centery), 13);
	 return;
	}
	
	request.open("GET", url , true);
	request.onreadystatechange = function() {
	
  		if (request.readyState == 4) {
  		
 			var xmlDoc = request.responseText;
			
				var loc=xmlDoc.split("|");
		
				if (loc==0 || loc.length!=2) {
					map.centerAndZoom(new GPoint(centerx,centery), 13);
				} else {
				    map.centerAndZoom(new GPoint(loc[0],loc[1]), 10);
				}
				
						
			}
		}
	changeDetail(); 	
	request.send(null);	
}
