var visibleMap=0;
var waypoints1 = Array();
var directory = new Array();
var gdir=0;
var directionsDisplay1 = 0;
var resp1=0;
var ttimeout=0;
var livemap = false;
var livepos = 0;
var livelocation=0;
var dotsize=5;
var flashcounter=0;
var cols = new Array("#FF0000","#FF8000","#C0C000","#00FF00","#0000FF","#8000FF");
var resp2=false;

// Venu constructor
function Venue(name,lat,lng) {	
	this.name = name;
	this.loc = new google.maps.LatLng(lat,lng);
	this.marker = new google.maps.Marker({clickable:true,deaggable:false,flat:false,optimized:true,position:this.loc,title:this.name,visible:true});	
}


// Add a new venue
function addVenue(name,lat,lng) {
	directory[directory.length] = new Venue(name,lat,lng);
}
    
function killMarkers() {
	if (livemap) animateDot();
	innercontainer = document.getElementById("goomap"+(livemap?"2":""));
	innercontainer.style.visibility="visible";
}
function makeWaypoint(a,b) {
	var x = new google.maps.LatLng(a,b);
	return {location: x, stopover: false};
}


function showMap() {
	if (resp1&&resp2) killMarkers(); else ttimeout = setTimeout("showMap()",100);

}

function prepareRoute() {
	var request = { destination:waypoints1[waypoints1.length-1].location, 
	                origin: waypoints1[0].location, 
	                provideRouteAlternatives: false, 
	                travelMode:google.maps.DirectionsTravelMode.WALKING, 
	                waypoints: waypoints1};

	gdir.route(request, function(response,status) {
		if (status == google.maps.DirectionsStatus.OK) {
			directionsDisplay1.setDirections(response);
			resp1=true;
		}
	});
	
	
	ttimeout = setTimeout("showMap()",100);
}



function animateDot() {
	dotsize+=1;
	if (dotsize>=25) {
		dotsize=5;
		flashcounter++;
		if (flashcounter>=cols.length) flashcounter=0;
	}
		
	perc=(dotsize-5)/20;
	if (perc<0) perc=0;
	if (perc>1) perc=1;
	livepos.setRadius(dotsize);
	
	
	col = cols[flashcounter];
	livepos.setOptions({radius:dotsize,fillOpacity:0.8*(1-perc),strokeOpacity:1-perc,strokeColor:col,fillColor:col});
	
	setTimeout("animateDot()",100);	
}

function get_param(param) {
   var search = window.location.search.substring(1);
   if(search.indexOf('&') > -1) {
      var params = search.split('&');
      for(var i = 0; i < params.length; i++) {
          var key_value = params[i].split('=');
          if(key_value[0] == param) return key_value[1];
      }
   } else {
      var params = search.split('=');
      if(params[0] == param) return params[1];
   }
   return null;
}

function startPositionUpdate() {
	var url="";
	var dd = get_param("forceday");
	if (dd) url="?forceday="+dd;
	new Ajax.Request('/common/liveposition.php'+url, {method:'get',
		onComplete: function(transport) {
			if (200 == transport.status) {
				var d = transport.responseText+"";
				var f = d.indexOf(",");
				
				if (f>0) {
					var hh = parseFloat(d.substr(0,f));
					var ii = parseFloat(d.substr(f+1));
					livelocation = new google.maps.LatLng(hh,ii);
					visibleMap.panTo(livelocation);
					livepos.setCenter(livelocation);
					if (!resp2) {
						resp2=true;
						showMap();
					}
					setTimeout("startPositionUpdate()",30000);
				} else 
				if (d=="BEG") {
					livelocation = waypoints1[0].location;
					visibleMap.panTo(livelocation);
					livepos.setCenter(livelocation);
					if (!resp2) {
						resp2=true;
						showMap();
					}
					setTimeout("startPositionUpdate()",30000);
				} else
				if (d=="END") {
					livelocation=extraLines[extraLines.length-1];
					visibleMap.panTo(livelocation);
					livepos.setCenter(livelocation);
					if (!resp2) {
						resp2=true;
						showMap();
					}
				} else {
					livelocation=waypoints1[0].location;
					visibleMap.panTo(livelocation);
					livepos.setCenter(livelocation);
					if (!resp2) {
						resp2=true;
						showMap();
					}
				}				
			}
		},
		onFailure :function(transport) {setTimeout("startPositionUpdate()",4000);}
	} );		

}

function loadMap() {
	innercontainer = document.getElementById("goomap");
	if (!innercontainer) {
		innercontainer = document.getElementById("goomap2");
		livemap=true;
	}
	
	livelocation = new google.maps.LatLng(52.631431,-1.128128);
	
	waypoints1[waypoints1.length]=makeWaypoint(52.6351,-1.1275); // A
	waypoints1[waypoints1.length]=makeWaypoint(52.6335,-1.1301); // B
	waypoints1[waypoints1.length]=makeWaypoint(52.6359,-1.1329); // C	
	waypoints1[waypoints1.length]=makeWaypoint(52.6356,-1.1365); // F
	waypoints1[waypoints1.length]=makeWaypoint(52.6343,-1.1348); // G	
	waypoints1[waypoints1.length]=makeWaypoint(52.6314,-1.1324); // G	
	waypoints1[waypoints1.length]=makeWaypoint(52.6274,-1.1215); // G	

	if (livemap) livelocation=waypoints1[0].location;		
	
	var myOptions = {
      		zoom: (livemap?16:15),
      		center: livelocation,
      		mapTypeId: google.maps.MapTypeId.ROADMAP
    	};
    
    	visibleMap = new google.maps.Map(innercontainer,myOptions);
		
	
	 var extraLines = [
	    new google.maps.LatLng(52.6274,-1.1215),
	    new google.maps.LatLng(52.6270,-1.1210),
	    new google.maps.LatLng(52.6266,-1.1199),
	    new google.maps.LatLng(52.6264,-1.1193),
	    new google.maps.LatLng(52.6237,-1.1185)
  	];
	
	var extraRoute = new google.maps.Polyline({
	    path: extraLines,
	    strokeColor: "#8989F6",
	    strokeOpacity: 1.0,
	    strokeWeight: 5
	  });
	
  	extraRoute.setMap(visibleMap);
  	  	
	var image = new google.maps.MarkerImage('/images/flag1.png',new google.maps.Size(56,49),new google.maps.Point(0,0),new google.maps.Point(3, 47));
  	var shadow = new google.maps.MarkerImage('/images/flag2.png',new google.maps.Size(56,49),new google.maps.Point(0,0),new google.maps.Point(3, 47));
  	var shape = {coord: [4,3,34,3,34,23,4,23],type: 'poly'};    	  	
	var endmarker = new google.maps.Marker({clickable:true,deaggable:false,flat:false,optimized:true,position:extraLines[extraLines.length-1],title:"Parade End - Victoria Park",visible:true});	
	endmarker.setIcon(image);
	endmarker.setShadow(shadow);    		
	endmarker.setShape(shape);    		

	directionsDisplay1 = new google.maps.DirectionsRenderer({suppressMarkers:true, draggable:false, hideRouteList: true, preserveViewport: true});
	gdir = new google.maps.DirectionsService();
	directionsDisplay1.setMap(visibleMap);
	endmarker.setMap(visibleMap);
	
	if (!livemap) {
		var endmarker = new google.maps.Marker({clickable:true,deaggable:false,flat:false,optimized:true,position:waypoints1[0].location,title:"Parade Start - The Curve Theatre",visible:true});
		endmarker.setMap(visibleMap);
	} else {
		livepos = new google.maps.Circle({center:livelocation,
		                                   clickable:false,
		                                   fillColor:"#FF0000",
		                                   fillOpacity:0.3,
		                                   map:visibleMap,
		                                   radius:5,
		                                   strokeColor:"#FF0000",
		                                   strokeOpacity:1.0,
		                                   strokeWidth:1,
		                                   zIndex:100});
	}

	// Show markers 
    	for (var a=0; a<directory.length; a++) {
    		directory[a].marker.setMap(visibleMap);
    		directory[a].marker.setIcon(image);
    		directory[a].marker.setShadow(shadow);    		
    		directory[a].marker.setShape(shape);    		
    	}
	
	dotsize=5;
	if (!livemap) resp2=true; else startPositionUpdate();
	prepareRoute();	
}


Event.observe(window, 'load', function() { loadMap();});


