function Tour(s)
{
	this.speed = 1;	
	this.range = 3;
	this.tilt = 1;
	this.altitude = 0;
	
	arr_h_400   = new Array(0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7);
	arr_h_800   = new Array(0.2, 0.3, 0.4, 0.5, 0.7, 0.9, 1.1);
	arr_h_1200  = new Array(0.2, 0.3, 0.4, 0.5, 0.7, 0.9, 1.1);
	arr_h_2000  = new Array(0.2, 0.3, 0.4, 0.5, 0.7, 0.9, 1.1);
	arr_h_5000  = new Array(0.2, 0.3, 0.4, 0.5, 0.7, 0.9, 1.1);
	arr_h_10000 = new Array(0.2, 0.3, 0.4, 0.5, 0.7, 0.9, 1.1);
	
	
	this.arr_h = new Array(arr_h_400, arr_h_800, arr_h_1200, arr_h_2000, arr_h_5000, arr_h_10000);
	this.arr_range = new Array(400, 800, 1200, 2000, 5000, 10000);
	this.arr_tilt  = new Array(80,75,70,65,60,55);
	this.arr_head  = new Array(60, 50, 40, 30, 20, 10);
	this.arr_scale = new Array(0.25, 0.4, 0.5, 1, 2, 4);
	
	
}

Tour.prototype.getScale = function()
{
	return this.arr_scale[this.range];	
}

Tour.prototype.setSpeed = function(s)
{
	this.speed = s;
}

Tour.prototype.setRange = function(r)
{
	this.range = r;
}

Tour.prototype.getTour = function(track)
{
	var lasthead;
	var xml = '<?xml version="1.0" encoding="UTF-8"?>'
			+ '<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2">'
			+ '<gx:Tour>'
			+ '<name>Bounce tour example</name>'
			+ '<gx:Playlist>'
			
	var arr_dur = new Array();
	var arr_lon = new Array();
	var arr_lat = new Array();
	var arr_head = new Array();
	
	for(var i=0;i<track.trackpointsGlatt.length;i++)
	{
		var tp = track.trackpointsGlatt[i];
		var head = 0;
		var dur;
		var dis;
		var tp2;
		var tilt = this.tilt;
		

		
	
		if(i==0)
		{
			tp2 = track.trackpointsGlatt[i+1];
			head = getAngle(tp.lat, tp.lon, tp2.lat, tp2.lon);
			lasthead = head;
			dis = 0;
			dur = 4;
		}
		else
		{
			tp2 = track.trackpointsGlatt[i-1];
			dis = tp.dis - tp2.dis; //getDistance(tp.lat, tp.lon, tp2.lat, tp2.lon);
			head = getAngle(tp2.lat, tp2.lon, tp.lat, tp.lon);
			dur = dis/(this.arr_h[this.range][this.speed]);
		}
		
		/*var headdif;
		
		if(head-lasthead > 180)
			headdif = head-lasthead+360;
		else if(head-lasthead < -180)
			headdif = -(head-lasthead+360);
		else
			headdif = head-lasthead;
		
		if(headdif > this.arr_head[this.range])
			head = lasthead+this.arr_head[this.range];
			
		if(headdif < -this.arr_head[this.range])
			head = lasthead-this.arr_head[this.range];*/
		
		
		lasthead = head;
		
		arr_dur[i] = dur;
		arr_lat[i] = tp.lat;
		arr_lon[i] = tp.lon;
		arr_head[i] = head;
			
	}
	//for(i=1;i<this.range;i++)
		//arr_head = track.ArrayGlatten(arr_head);
		
	//arr_head = track.ArrayGlatten(arr_head);	
	
	for(i=0;i<arr_dur.length;i++)
	{
		var flymode = "smooth";
		if(i==0)
			flymode = "bounce";
		
		xml 	+='<gx:FlyTo>'
				+ '<gx:duration>'+arr_dur[i]+'</gx:duration>'
				+ '<gx:flyToMode>'+flymode+'</gx:flyToMode>'
				+ '<LookAt>'
				+ '<longitude>'+arr_lon[i]+'</longitude>'
				+ '<latitude>'+arr_lat[i]+'</latitude>'
				//+ '<altitude>'+this.altitude+'</altitude>'
				+ '<heading>'+arr_head[i]+'</heading>'
				+ '<tilt>'+this.arr_tilt[this.range]+'</tilt>'
				+ '<range>'+this.arr_range[this.range]+'</range>'
				+ '<altitudeMode>relativeToGround</altitudeMode>'
				+ '</LookAt>'
				+ '</gx:FlyTo>'
		
	}

	xml +='</gx:Playlist>'
		+ '</gx:Tour>'
		+ '</kml>';
	
	return xml;
	
}

function getDistance(lat1, lon1, lat2, lon2)
{
	lat = (lat1 + lat2)/2 * 0.01745;
	dx  = 111.3 * Math.cos(lat)*(lon2-lon1);
	dy  = 111.3 * (lat2 - lat1);
	
	return Math.sqrt(dx*dx + dy*dy);
}

function getAngle(lat1, lon1, lat2, lon2)
{
	lat = (lat1 + lat2)/2 * 0.01745;
	dx  = 111.3 * Math.cos(lat)*(lon2-lon1);
	dy  = 111.3 * (lat2 - lat1);
	
	angle = 180/Math.PI*Math.atan2(dx,dy);
	
	return angle;
}

function getAnstieg(lat1, lon1, ele1, lat2, lon2, ele2)
{
	lat = (lat1 + lat2)/2 * 0.01745;
	dx  = 111.3 * Math.cos(lat)*(lon2-lon1);
	dy  = 111.3 * (lat2 - lat1);
	
	dis = Math.sqrt(dx*dx + dy*dy);
	eledif = ele2-ele1;
	
	angle = Math.atan(eledif/dis);
	
	return angle;
}

