//<![CDATA[
var mapContainer = null;
var map = null;
var degreesPerRadian = 180.0 / Math.PI;
var radiansPerDegree = Math.PI / 180.0;


	
function initialize(mapId) {
//Loads the GMap into map div, sets UI, zoom, centre, adds marker

	if (GBrowserIsCompatible()) {
		mapContainer = document.getElementById(mapId);
	        map = new GMap2(mapContainer);
                map.addMapType(G_PHYSICAL_MAP);
                map.setMapType(G_PHYSICAL_MAP);
		var point = new GLatLng(53.475379,-2.243958);
	        map.setCenter(point, 11);
		//map.setUIToDefault();
                map.addControl(new GMenuMapTypeControl());
                map.addControl(new GSmallZoomControl3D());
                map.enableScrollWheelZoom();
		
                //XMLHttpRequest for bubbles data
                var bubsearch = "../bubbledata/bubbles.php";
		var bubrequest = GXmlHttp.create();	
		bubrequest.open('GET', bubsearch, true);
		bubrequest.onreadystatechange = function() {
			//Wait for XML
                        if (bubrequest.readyState == 4) {
					
				var bubxmlDoc = bubrequest.responseXML;
				var bubmarkers = bubxmlDoc.documentElement.getElementsByTagName("bubble");
				
                                //Process XML
				for (var i = 0; i < bubmarkers.length; i++) {
					//Parse lat lon coords from XML  
                                        var bubstart = new GLatLng(parseFloat(bubmarkers[i].getAttribute("bublat")),parseFloat(bubmarkers[i].getAttribute("bublon")));
                                        var bubend = new GLatLng(parseFloat(bubmarkers[i].getAttribute("bubendlat")),parseFloat(bubmarkers[i].getAttribute("bubendlon")));
                                        //Call bearing function and round to nearest 10 degrees
                                        var bubdegrees = bearing(bubstart, bubend);
                                        bubdegrees = Math.round(bubdegrees/10)*10;
                                        
										/* distance calculator
										
										var dist = Math.acos(Math.sin(parseFloat(bubmarkers[i].getAttribute("bublat")))*Math.sin(parseFloat(bubmarkers[i].getAttribute("bubendlat")))+Math.cos(parseFloat(bubmarkers[i].getAttribute("bublat")))*Math.cos(parseFloat(bubmarkers[i].getAttribute("bubendlat")))*Math.cos(parseFloat(bubmarkers[i].getAttribute("bublon"))-parseFloat(bubmarkers[i].getAttribute("bubendlon")))) 
										
										*/
										
                                        //setup custom icon and marker
                                        var ricon = new GIcon();
                                        ricon.image = "http://www.futuresonic.com/bubbledata/images/" + bubdegrees + ".png";
                                        ricon.iconSize = new GSize(32, 36);
                                        ricon.iconAnchor = new GPoint(16, 18);
                                        ricon.infoWindowAnchor = new GPoint(36, 36);
                                        markerOptions = { icon:ricon, draggable:false };
					
                                        //Add Bubble pushpin to map                                        
                                        var bubMarker = new GMarker(bubstart,markerOptions);
                                        map.addOverlay(bubMarker);
										
				}
			}
		}
		bubrequest.send(null);
	}
}

function bearing( from, to ) {

    // Convert to radians.
    var lat1 = from.latRadians();
    var lon1 = from.lngRadians();
    var lat2 = to.latRadians();
    var lon2 = to.lngRadians();

    // Compute the angle.
    var angle = - Math.atan2( Math.sin( lon1 - lon2 ) * Math.cos( lat2 ), Math.cos( lat1 ) * Math.sin( lat2 ) - Math.sin( lat1 ) * Math.cos( lat2 ) * Math.cos( lon1 - lon2 ) );
    if ( angle < 0.0 )
    angle  += Math.PI * 2.0;

    // And convert result to degrees.
    angle = angle * degreesPerRadian;
    angle = angle.toFixed(1);

    return angle;
}

 
//]]>