	//Load the google earth plugin
	google.load("earth", "1");

	var max = 20; //max number of plugins per page
	var ge = []; //array that holds the plugins
	var indexing = []; //array that holds the div name that the plugin is in
	var linkArray = []; //array that holds the links for each plugin
	
	//create a new plugin for the id of the div in a position of the array that is free
	function createEarth(id, kmllink, interval)
	{
		if (typeof interval === undefined) {
		    interval = 0;
		  }

		//Find an available index number
		var i = 0;
		while (indexing[i] !== undefined)
		{
			i++;
		}
		
		//make sure there are less than the max
		if (i < max)
		{
			//store the div id, and initiallize a link array for each instance
			indexing[i] = id;
			linkArray[i] = [];
			
			//create a google earth instance with set properties
			google.earth.createInstance(
									id, 
									
									function (object) {
										ge[i] = object;
										ge[i].getWindow().setVisibility(true);
										ge[i].getOptions().setStatusBarVisibility(true);
										ge[i].getOptions().setGridVisibility(false);
										ge[i].getNavigationControl().setVisibility(1);
										ge[i].getOptions().setFlyToSpeed(0.4);
										if (isArray(kmllink)) 
										{
											var link = new Array();
											var networkLink = new Array();
											for(var j = 0; j < kmllink.length; j++)
											{
												networkLink[j] = ge[i].createNetworkLink('');
												linkArray[linkArray.length] = networkLink[j];
												networkLink[j].setFlyToView(true);
												networkLink[j].setVisibility(1);
										
												link[j] = ge[i].createLink('');
												link[j].setHref(kmllink[j]);
												if (interval > 0)
												{
													link[j].setRefreshInterval(interval);
													link[j].setRefreshMode(ge[i].REFRESH_ON_INTERVAL);
												}
												networkLink[j].setLink(link[j]);
												ge[i].getFeatures().appendChild(networkLink[j]);	
											}
										}
										else
										{
											var networkLink = ge[i].createNetworkLink('');
											linkArray[linkArray.length] = networkLink;
											networkLink.setFlyToView(true);
											networkLink.setVisibility(1);
											var link = ge[i].createLink('');
											link.setHref(kmllink);
											if (interval > 0)
											{
												link.setRefreshInterval(interval);
												link.setRefreshMode(ge[i].REFRESH_ON_INTERVAL);
										    }
										    networkLink.setLink(link);
											ge[i].getFeatures().appendChild(networkLink);	
										}						
									}
									
									,
									function (object) {
										var div = document.getElementById(id);
										div.innerHTML = "There was an error loading google earth.";
									}
									);
		}
		else
		{
			alert('You cannot have more than 20 instances of google earth running.');
		}
	}
	
    function isArray(obj) {
		if (obj == null) return false;
		return obj.constructor == Array;
    }
	
	function addKMLtoGE(id, kmllink, flyTo)
	{
		var i = indexing.indexOf(id);
		var networkLink = ge[i].createNetworkLink('');
		linkArray[linkArray.length] = networkLink;
		if ( flyTo === undefined )
		{
			flyTo = true;
		}
		networkLink.setFlyToView(flyTo);
		networkLink.setVisibility(1);
		var link = ge[i].createLink('');
		link.setHref(kmllink);
		link.setRefreshInterval(60);
		link.setRefreshMode(ge[i].REFRESH_ON_INTERVAL);
		networkLink.setLink(link);
		ge[i].getFeatures().appendChild(networkLink);
	}
	
	function removeEarth(id)
	{
		var asdf = indexing.indexOf(id);
		indexing[asdf] = 0;
		ge[asdf] = 0;
		linkArray[asdf] = 0;
	}
	
	function clearKMLSfromGE(id)
	{
		var i = indexing.indexOf(id);
		while(ge[i].getFeatures().hasChildNodes())
			ge[i].getFeatures().removeChild(ge[i].getFeatures().getLastChild());
	}
