/* flockObject.js
 * PigeonBlog flock object .....
 * NOTE: this assumes that...
 * 1. "map" is a globally defined Google Maps object.
 * 2. the "pigeon" class is defined.
 */
 
 
function flock () {

	this.avgCO;
	this.avgNOX;
	this.avgAlt;
	this.avgMPH = 0;
	this.avgPPM;
	this.totalDistance;
	
	this.birds = new Array();
	
	this.followBirdId = 0;
	
	
		
	this.updateDisplay = function() {
		// set CO slider
		
		// set NOX slider
		
		// set altitude
		
		// set speed
		
		// set distance
		
		// set CSQ
		
		// set Voltagetery
		
	}
	this.getNameById = function(Id){
		/*if (Id == 5622160781)
			return 5622160781;
		if (Id == 5628528288)
			return 5628528288;	*/
			
		//return "Test";	
		return pigeonName[Id+''];	
	
	}
	
	
	this.setOutput= function(outputId){
	
		//change followed bird if necesary
		this.followBirdId = outputId;
		
		//if we're following the flock, output to controller
		if (this.followBirdId == "0" || this.followBirdId == '0') {  

			//reset vars
			this.avgCO = 0;
			this.avgNOX = 0;
			this.avgAlt = 0;
			this.avgMPH = 0;
			this.avgPPM = 0;
			this.totalDistance = 0;

			for (var i=0; i < this.birds.length; i++)
			{	
				p = this.birds[i];	
				this.avgAlt += p.Alt;
				this.avgCO += p.COvalue;
				this.avgNOX += p.NOXvalue;
				this.avgMPH += p.MPH;
				this.avgPPM += p.PPM;
				this.totalDistance += p.totalDistance;
			}
			
			//normalize
			this.avgAlt /= this.birds.length;
			this.avgCO /= this.birds.length;
			this.avgNOX /= this.birds.length;
			this.avgMPH /= this.birds.length;
			this.avgPPM /= this.birds.length;
			
			//set inner html
			document.getElementById('mode_img').src='icons/pigeon_flock.gif';
			//document.getElementById('name').innerHTML='Flock';
			document.getElementById('name').innerHTML= this.getNameById("0");
			
			document.getElementById("speed_data").innerHTML =  this.avgMPH.toFixed(1)+"mph (" + ((1.609344*this.avgMPH).toFixed(1))+" km/h)";
			document.getElementById("distance_data").innerHTML =  this.totalDistance.toFixed(2)+"mi ("+ ((1.609344*this.totalDistance).toFixed(2))+" km)";
			document.getElementById("altitude_data").innerHTML =  (3.2808399*this.avgAlt).toFixed(1)+"ft ("+this.avgAlt.toFixed(2)+"m)";
			
			document.getElementById("signal_img").src='icons/signal_disabled.gif';
			document.getElementById("batt_img").src='icons/battery_disabled.gif';
			
			setCOslider(this.avgCO);
			setNOXslider(this.avgNOX);
			
		
			
		}else{
		//were following a single bird
			//if we're following this bird output to controller
			for (var i=0; i < this.birds.length; i++)
			{	
				p = this.birds[i];	
				if (p.id == this.followBirdId)
				{ //output this birds data
				
					//Signal
					var imagenum = Math.round(p.Signal/6) -1;
					imagenum = (imagenum <0)? 0: imagenum;
					document.getElementById("signal_img").src='icons/signal_'+imagenum +'.gif';
				
					//Battery
					imagenum = Math.round((p.Voltage-3300)/88 -1);
					imagenum = (imagenum <0)? 0: imagenum;
					imagenum = (imagenum >8)? 8: imagenum;
					document.getElementById("batt_img").src='icons/battery_'+imagenum +'.gif';
				
				
					//set inner html
					document.getElementById('mode_img').src='icons/pigeon_single.gif';
					document.getElementById('name').innerHTML= this.getNameById(p.id);
					
					document.getElementById("speed_data").innerHTML =  p.MPH.toFixed(1)+"mph (" + ((1.609344*p.MPH).toFixed(1))+" km/h)";
					document.getElementById("distance_data").innerHTML =  p.totalDistance.toFixed(2)+"mi ("+ ((1.609344*p.totalDistance).toFixed(2))+" km)";
					document.getElementById("altitude_data").innerHTML =  (3.2808399*p.Alt).toFixed(2)+"ft ("+p.Alt.toFixed(2)+"m)";

					setCOslider(p.COvalue);
					setNOXslider(p.NOXvalue);

					
					return; //should only be one bird matching that id
				}
		
			}
		}
		
	}
		
	this.addData = function(Id,Lat,Lon,Alt,CO,NOX,Temp,Signal,Voltage,Time, DateTime) {

		var dataAdded = 0;
		
		// if pigeon object exists, add point and draw polyline
		for (var i=0; i < this.birds.length; i++)
		{
			p = this.birds[i];
			
						
			if ((p.id == Id) && !((p.Gpoint.x==Lat) && (p.Gpoint.y==Lon)))
			{			
				var points = p.points;
				
				p.removeLine();
				
				p.setPoint(Lat,Lon,Alt,CO,NOX,Temp,Signal,Voltage,Time, DateTime, (p.id == this.followBirdId));
				dataAdded = 1;
				
				points = p.points;
				
				//if following flock
				if ((this.followBirdId == 0)&& (!FF))
					map.zoomToMarkers();
				
				//if following this bird or the flock
				if ((p.id == this.followBirdId) || (this.followBirdId == 0))
				{
					if (!FF){
						//draw line if not FastForwad
						
						
						p.addLine();
						
						//move to point
						//map.recenterOrPanToLatLng(p.Gpoint);
						if (this.followBirdId != "0")
							map.panTo(p.Gpoint);
						//else
							//map.zoomToMarkers();
							
					}
				
				}
				
				
				
		 	}
		}


		// if this is a new pigeon, create new pigeon object and add point
		if (!dataAdded)
		{
			tempPigeon = new pigeon(Id);
		
			this.birds.push(tempPigeon);
			this.birds[this.birds.length-1].setPoint(Lat,Lon,Alt,CO,NOX,Temp,Signal,Voltage,Time, DateTime, (tempPigeon.id == this.followBirdId));
			
			//move to point
			//map.recenterOrPanToLatLng(this.birds[this.birds.length-1].Gpoint);
			//map.panTo(this.birds[this.birds.length-1].Gpoint);
			if (document.getElementById(Id))
				document.getElementById(Id).src = 'icons/control_pigeon1.jpg';
				
			//this.birds[this.birds.length-1].setPigeonMarkerPosition(this.birds[this.birds.length-1].Gpoint, 0);	
			
		}
		
		//output the new data to the display
		this.setOutput(this.followBirdId);
		
	}
	
	
	
	this.setLines = function(){
	//add lines for each pigeon
	//for use after a FF
	
		if (this.followBirdId == "0")
			map.zoomToMarkers();
		for (var i=0; i < this.birds.length; i++)
		{
			p = this.birds[i];		

			p.removeLine();
			
			if ((p.id == this.followBirdId) || (this.followBirdId == 0))
			{	
				p.addLine();
				if (this.followBirdId != 0)
					//p.setPigeonMarker(1);
					p.setPigeonMarkerPosition(p.Gpoint, 1);
				else
					p.setPigeonMarkerPosition(p.Gpoint, 0);
				//map.recenterOrPanToLatLng(p.Gpoint);
				if (!FF){
					if (this.followBirdId != "0"){
						map.setZoom(18)
						map.panTo(p.Gpoint);
					}	
					//else
					//	map.zoomToMarkers();
				}
				//p.setPigeonMarkerPosition( p.Gpoint, 1);
				
			}else{
				p.setPigeonMarkerPosition(p.Gpoint, 0);
				//p.setPigeonMarkerPosition( p.Gpoint, 0);
			}

		}
	
	}
	
	
	this.followNextBird = function(){
		for (var i=0; i < this.birds.length; i++)
		{
			p = this.birds[i];		

			p.removeLine();
			
			if ((p.id == this.followBirdId))
			{	
				if (i +1 < this.birds.length)
					this.followBirdId = this.birds[i+1].id;
				else
					this.followBirdId = 0;
					
				return;	
			}

		}
		if (this.birds[0].id)
			try{
				this.followBirdId = this.birds[0].id;
				} catch(errorObject)
      			{}
		
	}
	
} //end flock object