// JavaScript Document


// Creating Custom Icons
	var iconYellow = new GIcon(); 	
	iconYellow.image = 'http://www.google.com/intl/en_us/mapfiles/ms/micons/yellow.png';
	iconYellow.shadow = 'http://www.google.com/mapfiles/shadow50.png';
	iconYellow.iconSize = new GSize(32, 32);
	iconYellow.shadowSize = new GSize(37, 34);
	iconYellow.iconAnchor = new GPoint(0, 20);
	iconYellow.infoWindowAnchor = new GPoint(11, 1);
	
	var iconGreen = new GIcon(); 
	iconGreen.image = 'http://www.google.com/intl/en_us/mapfiles/ms/micons/green.png';
	iconGreen.shadow = 'http://www.google.com/mapfiles/shadow50.png';
	iconGreen.iconSize = new GSize(32, 32);
	iconGreen.shadowSize = new GSize(37, 34);
	iconGreen.iconAnchor = new GPoint(0, 20);
	iconGreen.infoWindowAnchor = new GPoint(11, 1);

	var iconRed = new GIcon(); 	
	iconRed.image = 'http://www.google.com/intl/en_us/mapfiles/ms/micons/red.png';
	iconRed.shadow = 'http://www.google.com/mapfiles/shadow50.png';
	iconRed.iconSize = new GSize(32, 32);
	iconRed.shadowSize = new GSize(37, 34);
	iconRed.iconAnchor = new GPoint(0, 20);
	iconRed.infoWindowAnchor = new GPoint(11, 1);	

	var customIcons = [];
	customIcons["1"] = iconYellow;
	customIcons["2"] = iconGreen;	
	customIcons["3"] = iconRed;

	var gmarkers = [];
// load google map.

function load() {
      if (GBrowserIsCompatible()) {
		
        var map = new GMap2(document.getElementById("map"));
		var posValue = document.getElementById("pos").value;
		
        map.addControl(new GSmallMapControl());
        map.addControl(new GMapTypeControl());
		
        switch(posValue){
		case "1":
			map.setCenter(new GLatLng(41.995970723819035,-122.6953125), 4);
			break;
		case "2":
			map.setCenter(new GLatLng(40.87586457681004,-109.86328125), 5);
			break;			
		case "3":			
			map.setCenter(new GLatLng(42.839455085286815,-96.85546875), 5);
			break;			
		case "4":
			map.setCenter(new GLatLng(32.35645390756435,-96.85546875), 5);
			break;
		case "5":
			map.setCenter(new GLatLng(41.47127005722945,-86.748046875), 5);
			break;
		case "6":
			map.setCenter(new GLatLng(34.556033964293114,-87.1875), 6);
			break;
		case "7":
			map.setCenter(new GLatLng(42.25671262339815, -76.376953125), 6);
			break;			
		case "8":
			map.setCenter(new GLatLng(43.92532996711856,-70.927734375), 5);
			break;
		case "9":
			map.setCenter(new GLatLng(33.536510894550165,-80.771484375), 5);
			break;
		case "10":
			map.setCenter(new GLatLng(41.69697916677352,-157.1484375), 3);
			break;
		default:
			map.setCenter(new GLatLng(40.23704638951741, -95.44921875), 4);
			break;
		}
		
        GDownloadUrl("googlemap/php_genxml.php?mapid="+posValue, function(data) {
		//GDownloadUrl("googlemap/php_genxml.php", function(data) {
          var xml = GXml.parse(data);
          var markers = xml.documentElement.getElementsByTagName("marker");

          for (var i = 0; i < markers.length; i++) 
		  {
            var name 	= markers[i].getAttribute("name");
            var address = markers[i].getAttribute("address");
            var type 	= markers[i].getAttribute("type");
			var phone 	= markers[i].getAttribute("phone");
			var id 		= markers[i].getAttribute("id");			
			var pub  	= markers[i].getAttribute("public");
			var userid 	= markers[i].getAttribute("userid");
			var eventid = markers[i].getAttribute("eventid");
			var mapid 	= markers[i].getAttribute("mapid");
			
			//var isinplace = markers[i].getAttribute("isinplace");			
            
			var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
                                    parseFloat(markers[i].getAttribute("lng")));
			
            var marker = createMarker(point, name, address, type,phone,id,mapid,pub,userid,eventid);
            map.addOverlay(marker);
			gmarkers[id] = marker;
          }
        });
      }
    }
	
// Construct Markers.

    function createMarker(point, name, address, type,phone,id,mapid,pub,userid,eventid) 
	{
		var marker;
		
		if(type == 1)
		{
			marker= new GMarker(point, customIcons["1"]);
			var html = "Contact information is not yet available.<br />Please check back for updated information.";
		}
		if(type == 2)
		{
			marker= new GMarker(point, customIcons["2"]);
			if(pub == 1)
			{
				var html = "<H3>" + name + "</H3> <br/>" + address + "<br />" + phone + "<br /><br /><a href='chairman/index.php?id="+ userid +"'>Click here to access Community Bulletin Board</a><br />";
			}
			else
			{
				var html = "<H3>" + name + "</H3> <br/>" + address + "<br />" + phone + "<br /><br /><a href='chairman/index.php?id="+ userid +"'>Click here to access Community Bulletin Board</a><br />";
				//var html = "<H3>" + name + "</H3> <br/>" + address + "<br />" + phone + "<br /><br /><a href='mapview.php?mapid=" + mapid + "&id="+ id +"#id'>Click here to access Community Bulletin Board</a><br />";				
			}
		}
		if(type == 3)
		{
			marker= new GMarker(point, customIcons["3"]);
			//var html = "This location is full and no longer accepting Contestant Sign Ups.<br />Please choose another Bible Bee location near you,<br /> or consider hosting a Local Bible Bee in your area by calling 1-888-3-Bible-B.";
			var html = "This location is full and no longer accepting Contestant Sign Ups.<br />Please choose another Bible Bee location near you in order to enroll.";
		}
	  
	//if(isinplace == 0)
	//	var html = "<H3>" + name + "</H3> <br/>" + address + "<br />" + phone + "<br /><br /><a href='mapview.php?gid="+ gid +"&mapid=" + mapid + "&id="+ id +"'>Contact This Bible Bee</a>";
	//else
	//var html = address + "<br /><br /><a href='intochairmen.php'>Are there no Bible Bees in your are? Please prayerfully consider starting one</a>";	  
      GEvent.addListener(marker, 'click', function() {
        marker.openInfoWindowHtml(html);
      });
      return marker;
    }


function getForest()
{
	var posValue = document.getElementById("pos").value;
	
	GDownloadUrl("googlemap/php_genxml.php?type=1&mapid="+posValue, function(data)
	{	
		var xml = GXml.parse(data);
		var points = new Array();
		var markers = xml.documentElement.getElementsByTagName("marker");

		var bgcolor1 = "#dcdcdc";
		var bgcolor2 = "#fbf0a5";
		var bgcolor  = "";
		
		var str = "<br/>";
		str+= "<table width='700px' cellpadding='1' cellspacing='0' border='0'>";
		
		for (var i = 0; i < markers.length; i++) 
		{
			var id   = markers[i].getAttribute("id");
			var name = markers[i].getAttribute("name");
			var address = markers[i].getAttribute("address");            
			points[i] = new GLatLng(parseFloat(markers[i].getAttribute("lat")),parseFloat(markers[i].getAttribute("lng")));			

			if( i % 2 == 0) bgcolor = bgcolor1;
			else bgcolor = bgcolor2;

			var p = i + 1;
			str +="<tr><td width='15px' bgcolor=" + bgcolor + ">" + p + "</td><td width='500px' bgcolor=" + bgcolor + "><a href='javascript:myclick("+ id +")'><b>" + name  + "</b></td><td width='500px' bgcolor=" + bgcolor + "><a href='javascript:myclick("+ id +")'><b>" + address  + "</b></td></tr>";
        }
		
		str += "</table>";
		
		document.getElementById("nPoints").innerHTML = str;
	});
}

// Get Address from input and geocode it.
function getNearestDistances()
{
	var myaddress;	
	var mylat;
	var mylng;	
	
	//get address from input field
	myaddress =  document.getElementById("zipcode").value;
	
	//address should be more than 4 chars
	if(myaddress.length <= 4)
	{
		alert('Address length should be at least 5 symbols');
		return;
	}
	
	//make progress visible
	document.getElementById("nProgress").style.visibility="visible";
	
	//this is geocoding
	geocoder = new GClientGeocoder();
	geocoder.getLocations(myaddress, function(response)
	{
		if (!response ||response.Status.code != 200) 
		{
			document.getElementById("nProgress").style.visibility="hidden";
			alert ("Could not find the location");
			document.getElementById("nPoints").innerHTML = "";
			return;
		}
		else
		{
			mylng = response.Placemark[0].Point.coordinates[0];
			mylat = response.Placemark[0].Point.coordinates[1];
		
			//my point
			var mypoint = new GLatLng(parseFloat(mylat),parseFloat(mylng));
			getDistances(mypoint);
		}
	});
}

var distances 	= new Array();
var names 		= new Array();
var dist_pointers = new Array();

// Recieve Geocoded address point, calculating distances.
function getDistances(mypoint)
{
	distances = new Array();
	names = new Array();
	
	var posValue = document.getElementById("pos").value;
	
	GDownloadUrl("googlemap/php_genxml.php?type=1&mapid="+posValue, function(data) 
	{		  		  
		  //var dist_names = new Array();
		  
		var xml = GXml.parse(data);
		var points = new Array();
		var markers = xml.documentElement.getElementsByTagName("marker");
         		 
		for (var i = 0; i < markers.length; i++) 
		{									
			var name = markers[i].getAttribute("name");
			var address = markers[i].getAttribute("address");            
			points[i] = new GLatLng(parseFloat(markers[i].getAttribute("lat")),parseFloat(markers[i].getAttribute("lng")));
			names[i] = name;
			dist_pointers[i] = i;
			//dist_names[i] = name;
			//dist_addresses[i] = address;
        }
		 		 
		var key = 0;		
		var limit = 0;
		
		while(key == 0)
		{
		   key = FireOn(points,mypoint);
			
		   if(limit > 5000) 
		   {
				key = 1;//garantia chto videt iz cikla
				document.getElementById("nProgress").style.visibility="hidden";
		   }
   		   limit++;
		}
			
        });
}

function FireOn(points,mypoint){		
	var directions = new GDirections();
		
	GEvent.addListener(directions,"load", function() {
		distances[distances.length] = directions.getDistance();			
				
		if(points.length == distances.length) {
			//document.getElementById("nPoints").innerHTML			
			
			var bgcolor1 = "#dcdcdc";
			var bgcolor2 = "#fbf0a5";
			var bgcolor  = "";
			
			var str = "<br/>";
			str+= "<table width='700px' cellpadding='1' cellspacing='0' border='0'>";
			
			distances = bubbleSort(distances);			
		
			for(var i = 0; i < distances.length;i++){
				if( i % 2 == 0)
					bgcolor = bgcolor1;
				else 
					bgcolor = bgcolor2;
								
				var p = i + 1;
				str +="<tr><td width='15px' bgcolor=" + bgcolor + ">" + p + "</td><td width='500px' bgcolor=" + bgcolor + "><a href='javascript:myclick("+ dist_pointers[i] +")'><b>" + names[i]  + "</b></td><td width='95x' align='right' bgcolor=" + bgcolor + ">" + distances[i].html + "</td></tr>";
				//GLog.write ("The distance is "+distances[i].html);		
			}
			str += "</table>";
			document.getElementById("nPoints").innerHTML = str;
			
			document.getElementById("nProgress").style.visibility="hidden";
			return 1;
		}
		//return 0;
		FireOn(points,mypoint);
	});
		
	var temparray = new Array(2);
	temparray[0] = mypoint;
	temparray[1] = points[distances.length];

	directions.loadFromWaypoints(temparray);	
}

function myclick(i) {
	try
	{		
		GEvent.trigger(gmarkers[i], "click");
	}catch(e)
	{
		alert("Postcode was not found on the map");
	}
}

function myautoclick(i) 
{
	try
	{		
		GEvent.trigger(gmarkers[i], "click");
	}catch(e)
	{
		setTimeout('GEvent.trigger(gmarkers['+i+'], "click")',3000);
	}
}

function bubbleSort(sortArray){
	var n = sortArray.length;
	for (var i = n - 1; i > 0; i--)
	{
		for (var j = 0; j < i; j++)
		{			
			if (sortArray[j].meters > sortArray[j+1].meters)
			{
				//sort distance
				var t = sortArray[j];
				sortArray[j] = sortArray[j+1];
				sortArray[j+1] = t;
				
				//sort names
				var k = names[j];				
				names[j] = names[j+1];
				names[j+1] = k;
				
				//sort link pointers to markers
				var m = dist_pointers[j];
				dist_pointers[j] = dist_pointers[j+1];
				dist_pointers[j+1] = m;
			}
		}
	}
	
	return sortArray;
}

//error handler

function HandleError() { 
alert("Getting the distance failed with error code: " + directions.getStatus().code); 
} 


/*eval("var directions"+ i +" = new GDirections();");
			
			GEvent.addListener(directions0,"load", function() {
				distances[i] = eval("directions"+i+".getDistance();");
				GLog.write ("The distance is "+distances[i].html);
				//alert(distances[i]);
			});
			
			var temparray = new Array(2);
			temparray[0] = mypoint;
			temparray[1] = points[i];			
			eval("directions"+i+".loadFromWaypoints(temparray);");
*/