var map;
var directionsPanel;
var gdir;

// The allowed region which the whole map must be within
var allowedBounds = null;
var dcbndyply = null;



function load() {
	if (GBrowserIsCompatible()) {
		try
		{
			map = new GMap2(document.getElementById("map"));
			map.setCenter(new GLatLng(38.895534,-77.015619), 11);

			var mt = map.getMapTypes(); 
			for (var i=0; i<mt.length; i++) { 
			mt[i].getMinimumResolution = function() {return 11;} 
			mt[i].getMaximumResolution = function() {return 17;}  } 

			
			map.addControl(new GLargeMapControl());
			map.addControl(new GMapTypeControl());
			map.addControl(new GScaleControl());
			
			// ====== Create a GCopyrightCollection =======
			var copycol = new GCopyrightCollection("");

			// ====== Create a myGCopyright for each region and add them to the Collection
			// In this case theres one copyright for the entire map

			var copy1 = new GCopyright(1, new GLatLngBounds(new GLatLng(-90,-180),new GLatLng(90,180)), 0, "DC GIS");
			copycol.addCopyright(copy1);

			// Create Custom tile layers
			// DCGIS Bsse.  
			
			
			var evac= new GTileLayer(copycol,11,17, {tileUrlTemplate: null, isPng:false, opacity:0.5});
			
			evac.myBaseURL='arcims_image.asp?servername=' + strArcIMSSvr + '&mapservice=' + strMapService + '&LAYER_ID=' + strEvacLayers + '&cache_name=evac&image_type=gif';
			evac.getTileUrl=CustomGetTileUrl;
			

			var layer1=[G_NORMAL_MAP.getTileLayers()[0],evac];

			var EvacGoogle = new GMapType(layer1, G_NORMAL_MAP.getProjection(), "Evac Route", G_NORMAL_MAP);
			
			map.getMapTypes().length = 3;
			map.addMapType(EvacGoogle);
			map.setMapType(EvacGoogle);
			
			//alert("here");
			addDistrictBound();
			//addEvacRoute();
			
			// Add a move listener to restrict the bounds range
			// map center = GLatLng(38.897000, -77.02000)
			allowedBounds = new GLatLngBounds(new GLatLng(38.75, -77.3), new GLatLng(39.05, -76.9));
			GEvent.addListener(map, "move", function() {
				checkBounds();
			});
			
		}
		catch(err)
		{
			  txt="We're sorry but an error has occured on this page.\n\n";
			  txt+="Click OK to continue viewing this page,\n";
			  txt+="or Cancel to return to dcgis.dc.gov.\n\n";
			  txt+="Error description: " + err.description;
			  if(!confirm(txt))
			  {
				document.location.href="http://dcgis.dc.gov/";
			  }
        }
	}
	else
	{ alert ("Sorry, you browser is unable to display the google map."); }
}


function addDistrictBound()
{
	
	GDownloadUrl("data/DCBndyPly_Gen.kml", function(data) {
	
		var xml = GXml.parse(data);
		var placemarks = xml.documentElement.getElementsByTagName("Placemark");

		var count = 0;
		
		for(var i=0; i<placemarks.length; i++){

			var name = placemarks[i].getElementsByTagName("name")[0].childNodes[0].nodeValue;

			var coordinates;
			coordinates = placemarks[i].getElementsByTagName("coordinates")[0].childNodes[0].nodeValue;

			coordinates = coordinates.trim();
			for(var chunk=1;  chunk<placemarks[i].getElementsByTagName("coordinates")[0].childNodes.length;chunk++){
				 coordinates+=placemarks[i].getElementsByTagName("coordinates")[0].childNodes[chunk].nodeValue;
			}

			coordinates = coordinates.split(" ");

			for(var j=0; j<coordinates.length;j++){
					coordinates[j] = coordinates[j].split(",");
			}
			
			if(coordinates.length > 1){
				var points = new Array();
				for(var j=0; j<coordinates.length; j++)
				{
					if(coordinates[j].length == 3)
					{	
						points.push(new  GLatLng(parseFloat(coordinates[j][1]),parseFloat(coordinates[j][0])));	
					}
					else if(coordinates[j].length == 4)
					{	
						points.push(new  GLatLng(parseFloat(coordinates[j][2]),parseFloat(coordinates[j][1])));	
					}
				}
				dcbndyply = new GPolygon(points, "#FF0000", 2, 0.8, "#FF0000",0)
               			map.addOverlay(dcbndyply);				
			}
			else
			{
				continue;
			}								
		}		
        });  
}

function addEvacRoute()
{

	
	GDownloadUrl("data/RegionalEvacRoutes.kml", function(data) {
		var xml = GXml.parse(data);
		var placemarks = xml.documentElement.getElementsByTagName("Placemark");

		var count = 0;
		for(var i=0; i<placemarks.length; i++){

			var name = placemarks[i].getElementsByTagName("name")[0].childNodes[0].nodeValue;
			
			var numCoordinateTags = placemarks[i].getElementsByTagName("coordinates").length;
			for(var c=0; c<numCoordinateTags; c++)
			{
				var coordinates;
				coordinates = placemarks[i].getElementsByTagName("coordinates")[c].childNodes[0].nodeValue;
				//alert(name + " " + placemarks[i].getElementsByTagName("coordinates").length);
				//alert(name + " " + coordinates);

				coordinates = coordinates.trim();


				for(var chunk=1;  chunk<placemarks[i].getElementsByTagName("coordinates")[c].childNodes.length;chunk++){
					 coordinates+=placemarks[i].getElementsByTagName("coordinates")[c].childNodes[chunk].nodeValue;
				}

				coordinates = coordinates.split(" ");
				

				for(var j=0; j<coordinates.length;j++){
						coordinates[j] = coordinates[j].split(",");
				}
				if(coordinates.length > 1){
				//alert(name + " " + coordinates);
					var points = new Array();
					for(var j=0; j<coordinates.length; j++)
					{

						if(coordinates[j].length == 3)
						{	
							points.push(new  GLatLng(parseFloat(coordinates[j][1]),parseFloat(coordinates[j][0])));	
						}
						else if(coordinates[j].length == 4)
						{	
							points.push(new  GLatLng(parseFloat(coordinates[j][2]),parseFloat(coordinates[j][1])));	
						}
						else
						{
							//alert(coordinates[j].length + " " + coordinates[j] );
							continue;
						}

					}
					var line = new GPolyline(points);
					map.addOverlay(line);
				}
				else
				{
					continue;
				}
			}
		}		
        });  
}


// If the map position is out of range, move it back
function checkBounds() {
// Perform the check and return if OK
	if (allowedBounds.contains(map.getCenter())) {
		return;
	}
	else
	{
		// It`s not OK, so find the nearest allowed point and move there
		var C = map.getCenter();
		var X = C.lng();
		var Y = C.lat();

		var AmaxX = allowedBounds.getNorthEast().lng();
		var AmaxY = allowedBounds.getNorthEast().lat();
		var AminX = allowedBounds.getSouthWest().lng();
		var AminY = allowedBounds.getSouthWest().lat();

		if (X < AminX) {X = AminX;}
		if (X > AmaxX) {X = AmaxX;}
		if (Y < AminY) {Y = AminY;}
		if (Y > AmaxY) {Y = AmaxY;}
		//alert ("Restricting "+Y+" "+X);
		map.setCenter(new GLatLng(Y,X));
	}
}

String.prototype.trim = function () 
{
    return this.replace(/^\s*/, "").replace(/\s*$/, "");
}

function createMarker(point,catName,catType,catAddress,catPhone,catURL,schoolicon,refX,refY)
{
	var marker = new GMarker(point, { title: catName, icon: schoolicon }); 	
	var atlasurl = 'citizenatlas.dc.gov/atlasapps/reports.aspx?SAR=administrative&ShowX='+refX+'&ShowY='+refY+'&name='+catName+'&QString=';
	
	var popuphtml ='<div id="gmapinfowindow2"><table><tr><td><div class="gmaplogo"><img src="images/dcflag.gif" alt="DC Flag Logo" ></img></div></td><td><div class="gmaptitlePopup">'+catName+'</div></td></tr><tr><td colspan="2">Type: '+catType +'</td></tr><tr><td colspan="2">Address: '+catAddress +'</td></tr><tr><td colspan="2">Contact Phone: '+catPhone +'</td></tr><tr><td colspan="2"><a href="http://' + catURL + '" target="_blank">Web Site</a></td></tr><tr><td colspan="2"><a href="http://' + atlasurl + '" target="_blank">Additional Neighborhood Information</a></td></tr></table></div>';
	//var html ='<table><tr><td><img src="images/dcflag.gif" alt="DC Flag Logo" ></img></td><td>School Detailed Information</td></tr><tr><td colspan="2">Name: '+catName.trim() +'</td></tr><tr><td colspan="2">Type: '+catType +'</td></tr><tr><td colspan="2">Address: '+catAddress +'</td></tr><tr><td colspan="2">Contact Phone: '+catPhone +'</td></tr><tr><td colspan="2"><a href="http://' + catURL + '">'+catName.trim()+' web site</a></td></tr></table>';

	GEvent.addListener(marker, 'click', function() 
	{
		map.closeInfoWindow();					
		map.setCenter(new GLatLng(marker.getPoint().lat(),marker.getPoint().lng()), 16);
				
		setTimeout( function() {marker.openInfoWindowHtml(popuphtml,{maxHeight:200,maxWidth:350})}, 10);
		//document.getElementById("schooldetail").innerHTML = html;
		document.getElementById("ddlSchoolTypes").selectedindex = 0;
		//var locdropdown=document.getElementById("locselect");

	});
	
	return marker;
}
function createSimpleMarker(point,title, addressicon,lat,lon,address,refX,refY)
{
	var marker = new GMarker(point, { title: title, icon: addressicon }); 	
	var atlasurl = 'citizenatlas.dc.gov/atlasapps/reports.aspx?SAR=administrative&ShowX='+refX+'&ShowY='+refY+'&name='+title+'&QString=';
	
	var popuphtml ='<div id="gmapinfowindow2"><table><tr><td><div class="gmaplogo"><img src="images/dcflag.gif" alt="DC Flag Logo" ></img></div></td><td><div class="gmaptitlePopup">' + title + '<br> In Boundary Schools</div></td></tr><tr><td colspan="2">'+address+'</td></tr><tr><td colspan="2"><a href="http://' + atlasurl + '" target="_blank">Additional Neighborhood Information</a></td></tr></table></div>';
	popuphtml = popuphtml + "<div style='font-size:0.7em;'>* In boundary schools are your designated DCPS schools, and are not necessarily the closest.</div>";
	//var popuphtml = 'test';
	//var popuphtml =address;

	
	GEvent.addListener(marker, 'click', function() 
	{
		map.closeInfoWindow();				
				
		setTimeout( function() {marker.openInfoWindowHtml(popuphtml,{maxHeight:250,maxWidth:350})}, 10);

	});
	
	return marker;
}

function reportWindow(url)
{
	window.open(url);
}
var gAutoPrint = true; 
function printSpecial() {
	var html;
     if (document.getElementById !=null) {
      var printReadyElem = document.getElementById("googletext");
      if (printReadyElem !=null) {
        html +=printReadyElem.innerHTML;
      } else {
        alert("Could not find the printReady function");
        return;
      }
      html +='\n</BO>\n</HT>';
      alert(html);         
      var printWin = window.open("","printSpecial");
      printWin.document.open();
      printWin.document.write(html);
      printWin.document.close();
      if (gAutoPrint)
         printWin.print();
      } else {
         alert("The print ready feature is only available if you are using a browser.");
      }
}
          
  //<---End of print script------>                   
 

