
var currentHeading = 0;
var timeout;
var view;
var lookAt;
var preLoadArray = new Array();

function rotateEarth()
{
	
	//set flytospeed
	ge.getOptions().setFlyToSpeed(1.5);
	lookAt= ge.getView().copyAsLookAt(ge.ALTITUDE_RELATIVE_TO_GROUND);
	view = ge.getView().copyAsCamera(ge.ALTITUDE_RELATIVE_TO_GROUND);
	view.setLatitude(lookAt.getLatitude());
	view.setLongitude(lookAt.getLongitude());
	view.setTilt(100);
	view.setAltitude(1.7);
	view.setHeading(currentHeading);
	ge.getView().setAbstractView(view);

	ge.getOptions().setFlyToSpeed(1.0);
	setTimeout("beginRotation()",1000);
}

function beginRotation()
{
	timeout = setInterval("nextRotation()",100);
}


function nextRotation()
{
	if(currentHeading < 360)
	{
	currentHeading += 5;
	view.setHeading(currentHeading);
	ge.getView().setAbstractView(view); 
	}
	else
	{	
	currentHeading = 0;
	clearInterval(timeout);	
	ge.getView().setAbstractView(lookAt); 
	}
}


function traverseKml(node, eventListener, placemark) {
  if(node.getFeatures().hasChildNodes()) {
    var subNodes = node.getFeatures().getChildNodes();
    var length = subNodes.getLength();
	var index = 0;
    for(var i = 0; i < length; i++) {
      var eachSubNode = subNodes.item(i);
      var nodeType = eachSubNode.getType();
      var nodeName = eachSubNode.getName();
      switch(nodeType) {
        case 'KmlFolder' :
          traverseKml(eachSubNode);
        break;
        case 'KmlPlacemark' :
		
		
		if(placemark)
		{
			placemarks[index++]	= eachSubNode;
			google.earth.addEventListener(eachSubNode, "mousedown", eventListener);
		}
		else
		{
			var style = eachSubNode.getStyleUrl();
			if(style == '#imageStyle')
			{
				earthImagemarks[index++] = eachSubNode;	
				google.earth.addEventListener(eachSubNode, "mousedown", eventListener);
			}

		}
			
        break;
      }
    }
  }
}


function getPaths(xml)
{
		
	var tracks = xml.documentElement.getElementsByTagName("LineString");
	var paths = [];
	
	for(j = 0;j<tracks.length;j++)
	{
		var coords = [];
		for(i=0;i< tracks[j].childNodes.length;i++)
		{
			var node = tracks[j].childNodes[i];
			if(node.nodeName =="coordinates")
				{	
				try { if(!node.nodeTypedValue) node.nodeTypedValue = node.textContent; } catch(e) {}				
				var tuples = node.nodeTypedValue.replace(/^\s*/, '').replace(/\s*$/,'').split(/\s+/);
				for(var i = 0; i < tuples.length; i++) 
					{
					var strs = tuples[i].split(',');
					coords.push(new GLatLng(parseFloat(strs[1]),parseFloat(strs[0])));
					}
				}
		}		
		paths.push(new GPolyline(coords, "#000000",5, 0.7));
	}
	
	return paths;
}

function getMarkers(xml)
{
	var imageMarkers = xml.documentElement.getElementsByTagName("Placemark");
	var index = 0;
	
	for(i = 0;i< imageMarkers.length;i++)
	{
		
		//check if this is a linestring - if so, ignore it
		var tracks = imageMarkers[i].getElementsByTagName("LineString");
		
		if(tracks.length ==0)
		{
		
			var placemark = new Object();
			
			
			for(j = 0;j < imageMarkers[i].childNodes.length;j++)
			{
				switch(imageMarkers[i].childNodes[j].nodeName)
					{
						case "description":
						try { if(!imageMarkers[i].childNodes[j].text) imageMarkers[i].childNodes[j].text = imageMarkers[i].childNodes[j].textContent; } catch(e) {}
						placemark.image = imageMarkers[i].childNodes[j].text;
						var imageString = imageMarkers[i].childNodes[j].text;
						
						var temp = imageString.substring(imageString.indexOf('"') + 1, imageString.length);
						temp = temp.substring(0,temp.indexOf('"'));
						
						preLoadArray[j] = new Image();
						preLoadArray[j].src = temp;
						
						break;
						
						case "Point":
						{
							for(k=0;k<imageMarkers[i].childNodes[j].childNodes.length;k++)
							{
								if(imageMarkers[i].childNodes[j].childNodes[k].nodeName == "coordinates")
								{
									try { if(!imageMarkers[i].childNodes[j].childNodes[k].text) imageMarkers[i].childNodes[j].childNodes[k].text = imageMarkers[i].childNodes[j].childNodes[k].textContent; } catch(e) {}	
									var coords = imageMarkers[i].childNodes[j].childNodes[k].text;
									var elements = coords.split(",");
									var point = new GLatLng(parseFloat(elements[1]),parseFloat(elements[0]));
									placemark.marker = new GMarker(point, {icon: imageMarkIcon});
									//store the image index to allow lookup of marker image from List array
									placemark.imageIndex = index;
									//store marker in both associative and list arrays to allow for lookup by y coordinate or index
									imagemarkLookup[elements[1]] = placemark.imageIndex;
									imagemarkList[index++] = placemark;
								}
							}
							break;
						}
					}
			}
		}
	}

}
