	// 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 iconBlue = new GIcon(); 	
	iconBlue.image = 'http://www.google.com/intl/en_us/mapfiles/ms/micons/blue.png';
	iconBlue.shadow = 'http://www.google.com/mapfiles/shadow50.png';
	iconBlue.iconSize = new GSize(32, 32);
	iconBlue.shadowSize = new GSize(37, 34);
	iconBlue.iconAnchor = new GPoint(0, 20);
	iconBlue.infoWindowAnchor = new GPoint(11, 1);

	var iconAwana = new GIcon();
	iconAwana.image  = 'http://www.biblebee.org/images/cimages/map/awanaPointer.png';
	iconAwana.shadow = 'http://www.google.com/mapfiles/shadow50.png';
	iconAwana.iconSize = new GSize(23, 32);
	iconAwana.shadowSize = new GSize(37, 34);
	iconAwana.iconAnchor = new GPoint(0, 20);
	iconAwana.infoWindowAnchor = new GPoint(11, 1);
	
	var iconNat = new GIcon(); 	
	//iconNat.image = 'http://www.google.com/intl/en_us/mapfiles/ms/micons/orange.png';
	iconNat.image = 'http://www.biblebee.org/images/icons/bb_label.png';	
	iconNat.shadow = 'http://www.google.com/mapfiles/shadow50.png';
	iconNat.iconSize = new GSize(48, 54);
	iconNat.shadowSize = new GSize(37, 34);
	iconNat.iconAnchor = new GPoint(0, 20);
	iconNat.infoWindowAnchor = new GPoint(11, 1);

	var customIcons = [];
	customIcons["1"] = iconYellow;
	customIcons["2"] = iconGreen;
	customIcons["3"] = iconRed;
	customIcons["4"] = iconBlue;
	customIcons["5"] = iconAwana;
	customIcons["6"] = iconNat;

	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(46.07323062540835, -110.7421875), 3);
			break;
	}
	
	GDownloadUrl("../googlemap/php_enrollgenxml.php?mapid="+posValue, 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 point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
		var marker = createMarker(point, name, address, type, phone, id, pub, userid, eventid);
		map.addOverlay(marker);

		//gmarkers are drew markers on the map.
		gmarkers[id] = marker;
	  }
	});
  }
}

function loadDirectMap()
{
      if (GBrowserIsCompatible()) 
	  {
			var map = new GMap2(document.getElementById("map"));
			map.addControl(new GSmallMapControl());
			
			var name = 	document.getElementById("name").value;		
			var loc  = 	document.getElementById("loc").value;
			var lat  = 	document.getElementById("lat").value;
			var lng  = 	document.getElementById("lng").value;
			
			var point = new GLatLng(lat,lng); 
			
			map.setCenter(point, 10);
			var marker = new GMarker(point);
			map.addOverlay(marker);
      }
}

// Construct Markers.
function createMarker(point, name, address, type, phone, id, pub, userid, eventid) 
{
	var marker;
	if(type == 1 || type == 2)
	{
		marker= new GMarker(point, customIcons["1"]);
		var html = "Contact information is not yet available.<br />Please check back for updated information.";
	}
	if(type == 3)
	{
		marker= new GMarker(point, customIcons["2"]);
		if(pub == 1) var html = "<H3>" + name + "</H3> <br/>" + address + "<br />" + phone + "<br /><br /><a href='../_hostcp/index.php?cid="+ userid +"'>CLICK HERE TO SEE LOCAL WEBSITE</a><br /><br />";
		else var html = "<H3>" + name + "</H3> <br/>" + address + "<br />" + phone + "<br /><br />";
	}
	if(type == 4)
	{
		marker= new GMarker(point, customIcons["3"]);
		if(pub == 1) var html = "<H3>" + name + "</H3> <br/>" + address + "<br />" + phone + "<br /><br /><a href='../_hostcp/index.php?cid="+ userid +"'>CLICK HERE TO SEE LOCAL WEBSITE</a><br /><br />";
		else var html = "<H3>" + name + "</H3> <br/>" + address + "<br />" + phone + "<br /><br />";
		
		//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(type == 8)
	{
		marker= new GMarker(point, customIcons["4"]);
		if(pub == 1) var html = "<H3>" + name + "</H3> <br/>" + address + "<br />" + phone + "<br /><br /><a href='../_hostcp/index.php?cid="+ userid +"'>CLICK HERE TO SEE LOCAL WEBSITE</a><br /><br />";
		else var html = "<H3>" + name + "</H3> <br/>" + address + "<br />" + phone + "<br /><br />";
	}
 
	//awana
	if(type == 10)
	{
		marker= new GMarker(point, customIcons["5"]);
		if(pub == 1) var html = "<H3>" + name + "</H3> <br/>" + address + "<br />" + phone + "<br /><br /><a href='../_hostcp/index.php?cid="+ userid +"'>CLICK HERE TO SEE LOCAL WEBSITE</a><br /><br />";
		else var html = "<H3>" + name + "</H3> <br/>" + address + "<br />" + phone + "<br /><br />";
	}
	
	if(type == 11)
	{
		marker= new GMarker(point, customIcons["6"]);
		if(pub == 1) var html = "<H3>" + name + "</H3> <br/>" + address + "<br />" + phone + "<br /><br /><a href='../_hostcp/index.php?cid="+ userid +"'>CLICK HERE TO SEE LOCAL WEBSITE</a>";
		else var html = "<H3>" + name + "</H3> <br/>" + address + "<br />" + phone + "<br /><br />";
	}
	
  GEvent.addListener(marker, 'click', function() 
  {
	marker.openInfoWindowHtml(html);
  });
  
  return marker;
}


// 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, mylat, mylng);
		}
	});
}

/////////////////////////////////////////////////////////COLLISIONS
function loadHostsCollisions(hostid)
{
	if (GBrowserIsCompatible()) 
	{
		var map = new GMap2(document.getElementById("map"));

		map.addControl(new GSmallMapControl());
		map.addControl(new GMapTypeControl());
  
		map.setCenter(new GLatLng(46.07323062540835, -110.7421875), 3);
	  
		GDownloadUrl("../googlemap/hostcollisions.php?sid="+hostid, 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 point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
				var marker = createMarker(point, name, address, type, phone, id, pub, userid, eventid);
				map.addOverlay(marker);

				//gmarkers are drew markers on the map.
				gmarkers[id] = marker;
			}
		});
	}
}

/////////////////////////////////////////////////////////

var distances 			= new Array();
var pointsinfo			= new Array();

// Recieve Geocoded address point, calculating distances.
function getDistances(mypoint, mylat, mylng)
{
	distances 			= new Array();
	pointsinfo			= new Array();

	//alert("../googlemap/php_enrollgenxml.php?task=closestdistance&lat="+mylat+"&lng="+mylng+"&type=1&mapid="+posValue);
	var posValue = document.getElementById("pos").value;
	GDownloadUrl("../googlemap/php_enrollgenxml.php?task=closestdistance&lat="+mylat+"&lng="+mylng+"&type=1&mapid="+posValue, function(data) 
	{
		var xml = GXml.parse(data);
		var markers = xml.documentElement.getElementsByTagName("marker");
		for (var i = 0; i < markers.length; i++) 
		{
			pointsinfo[i]	    = new Array(8);

			var id				= markers[i].getAttribute("id"); 			//host id
			var name 			= markers[i].getAttribute("name"); 			//event location name
			var contactname 	= markers[i].getAttribute("contactname"); 	//contact name
			var contestants	  	= markers[i].getAttribute("currentcontestants"); //current contestants
			var encoded_id		= markers[i].getAttribute("userid"); //current contestants
			var pub  			= markers[i].getAttribute("public");

			pointsinfo[i][0] = id;
			pointsinfo[i][1] = name;
			pointsinfo[i][2] = contactname;
			pointsinfo[i][3] = contestants;
			pointsinfo[i][4] = new GLatLng(parseFloat(markers[i].getAttribute("lat")),parseFloat(markers[i].getAttribute("lng")));
			pointsinfo[i][5] = "";
			pointsinfo[i][6] = encoded_id;
			pointsinfo[i][7] = pub;
			//perfect till here
	   }

	   FireOn(mypoint);
	});
}

function FireOn(mypoint)
{
	var directions = new GDirections();
		
	GEvent.addListener( directions, 'error', function ()
	{
		distances[distances.length] 		= '0';
		metersObj = new Object(); metersObj.meters = -1;		
		pointsinfo[distances.length-1][5] 	= metersObj;

		if(pointsinfo.length == distances.length) 
		{
			var bgcolor1 = "#dcdcdc";
			var bgcolor2 = "#fbf0a5";
			var bgcolor  = "";
			
			str = "<br/><table width='700px' cellpadding='1' cellspacing='0' border='0'>"+
				  "<tr style='font-weight:bold'>" +
					"	<td width='20px'></td>"+
					"	<td>Local Bible Bee Name</td>"+
					"	<td>Host</td>"+
					"	<td>Appr.Distance</td>"+
					"	<td>Contestants</td>"+
					"	<td>Actions</td>"+
					"</tr>";

			bubbleSort(pointsinfo);			

			for(var i = 0; i < distances.length; i++)
			{
				if( pointsinfo[i][5].meters == -1 ) continue;

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

				var p = i + 1;
				str +="<tr>"+
							"<td bgcolor=" + bgcolor + ">" + p + "</td>" + 
							
							"<td bgcolor=" + bgcolor + ">" +
							"	<a href='javascript:myclick("+ pointsinfo[i][0] +")'><b>" + pointsinfo[i][1]  + "</b></td>" +
							
							"<td bgcolor=" + bgcolor + ">" + pointsinfo[i][2] + "</td>" +
							
							"<td bgcolor=" + bgcolor + ">" +
							"	<a href='javascript:myclick("+ pointsinfo[i][0] +")'><b>" + pointsinfo[i][5].html  + "</b></td>" +
							
							"<td bgcolor=" + bgcolor + ">" + pointsinfo[i][3] + "</td>" +
							
							"<td bgcolor=" + bgcolor + "><a href='enrollhostinfo.php?hid="+pointsinfo[i][6]+"'></a></td>" +
						"</tr>";
			}
			
			str += "</table>";
			document.getElementById("nPoints").innerHTML = str;	
			document.getElementById("nProgress").style.visibility="hidden";
			return 1;
		} else { FireOn(mypoint); }
	});
	
	GEvent.addListener(directions,"load", function() 
	{
		distances[distances.length] 		= '1';
		pointsinfo[distances.length-1][5] 	= directions.getDistance();
		
		if(pointsinfo.length == distances.length) 
		{
			var bgcolor1 = "#dcdcdc";
			var bgcolor2 = "#fbf0a5";
			var bgcolor  = "";
			
			str = "<br/><table width='700px' cellpadding='1' cellspacing='0' border='0'>"+
				  "<tr style='font-weight:bold'>" +
					"	<td width='20px'></td>"+
					"	<td>Local Bible Bee Name</td>"+
					"	<td>Host</td>"+
					"	<td>Appr.Distance</td>"+
					"	<td>Contestants</td>"+
					"	<td>Actions</td>"+
					"</tr>";
					
			bubbleSort(pointsinfo);			

			for(var i = 0; i < distances.length; i++)
			{
				if( pointsinfo[i][5].meters == -1 ) continue;
				
				if( i % 2 == 0) bgcolor = bgcolor1;
				else bgcolor = bgcolor2;
				
				var p = i + 1;
				str += "<tr>"+
							"<td bgcolor=" + bgcolor + ">" + p + "</td>"; 
							
							if(pointsinfo[i][7] == 0) {
								str += "<td bgcolor=" + bgcolor + ">" +
								"<b>" + pointsinfo[i][1]  + "</b></td>";
							}
							else {
								str +="<td bgcolor=" + bgcolor + ">" +
								"	<a href='' onclick=\"javascript:openMicrosite('"+ pointsinfo[i][6] +"'); return false; \"><b>" + pointsinfo[i][1]  + "</b></a></td>";
							}
							
							str += "<td bgcolor=" + bgcolor + ">" + pointsinfo[i][2] + "</td>";
							
							if(pointsinfo[i][7] == 0) {
								str += "<td bgcolor=" + bgcolor + ">" +
								"<b>" + pointsinfo[i][5].html  + "</b>";
							}
							else {
								str += "<td bgcolor=" + bgcolor + ">" +
								"<a href='' onclick=\"javascript:openMicrosite('"+ pointsinfo[i][6] +"'); return false; \"><b>" + pointsinfo[i][5].html  + "</b></td>";
							}
							
							str += "<td bgcolor=" + bgcolor + ">" + pointsinfo[i][3] + "</td>" +
							
							"<td bgcolor=" + bgcolor + "></td>" +
						"</tr>";
			}
			
			str += "</table>";
			document.getElementById("nPoints").innerHTML = str;	
			document.getElementById("nProgress").style.visibility="hidden";

			return 1;
		}
		else { FireOn(mypoint); }
	});

	var temparray = new Array(2);
	temparray[0] = mypoint;
	temparray[1] = pointsinfo[distances.length][4];
	
	directions.loadFromWaypoints(temparray);	
}

function openMicrosite(hid){
	window.open("http://www.biblebee.org/_hostcp/index.php?cid="+hid,"MicroSite");
}

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++)
		{
			var t = "";

			if (sortArray[j][5].meters > sortArray[j+1][5].meters)
			{
				//sort id, event name, chairman name, contestants
				t = sortArray[j][0];
				sortArray[j][0] = sortArray[j+1][0];
				sortArray[j+1][0] = t;
				
				//event name
				t = sortArray[j][1];
				sortArray[j][1] = sortArray[j+1][1];
				sortArray[j+1][1] = t;				

				//chairman
				t = sortArray[j][2];
				sortArray[j][2] = sortArray[j+1][2];
				sortArray[j+1][2] = t;

				//contestants
				t = sortArray[j][3];
				sortArray[j][3] = sortArray[j+1][3];
				sortArray[j+1][3] = t;		

				//contestants
				t = sortArray[j][4];
				sortArray[j][4] = sortArray[j+1][4];
				sortArray[j+1][4] = t;		
				
				//sort distance
				t = sortArray[j][5];
				sortArray[j][5] = sortArray[j+1][5];
				sortArray[j+1][5] = t;

				//sort distance
				t = sortArray[j][6];
				sortArray[j][6] = sortArray[j+1][6];
				sortArray[j+1][6] = t;

				//sort public
				t = sortArray[j][7];
				sortArray[j][7] = sortArray[j+1][7];
				sortArray[j+1][7] = t;						
			}
		}
	}
	
	return sortArray;
}
