var GLIDER_URL = rootURL + "models/3KStudio_jantar.kmz";

function Glider(cn, tracker_id) {
	var me = this;
	me.init = false;

	me.tracker_id = tracker_id;
	me.cn = cn;

	me.pos = {
		lat : 49.769,
		lon : 19.215,
		alt : 400,
		heading : 0
	};// Żar

	me.doTick = false;

	google.earth.fetchKml(ge, GLIDER_URL, function(obj) {
				me.finishInit(obj);
			});
}

Glider.prototype.finishInit = function(kml) {
	var me = this;

	me.placemark = kml.getFeatures().getChildNodes().item(0);

	me.model = me.placemark.getGeometry();
	me.orientation = me.model.getOrientation();
	me.location = me.model.getLocation();

	ge.getFeatures().appendChild(me.placemark);

	google.earth.addEventListener(ge, "frameend", function() {
				me.tick();
			});

	me.init = true;

	if (me.pos != null)
		me.teleportTo2(me.pos);
}

Glider.prototype.setPos = function(newPos) {
	var me = this;
	if (newPos != null) {
		me.pos.lat = newPos.lat;
		me.pos.lon = newPos.lon;
		me.pos.alt = newPos.alt;
		me.pos.heading = newPos.heading;
	}
}

Glider.prototype.fixAngle = function(a) {
	while (a < -180) {
		a += 360;
	}
	while (a > 180) {
		a -= 360;
	}
	return a;
}

Glider.prototype.teleportTo = function(lat, lon, alt, heading) {
	var me = this;

	if (heading == null)
		heading = 0;

	me.location.setLatitude(lat);
	me.location.setLongitude(lon);
	var gr_alt = ge.getGlobe().getGroundAltitude(lat, lon) + 2;
	if (gr_alt > alt)
		alt = gr_alt;

	me.location.setAltitude(alt);

	me.orientation.setHeading(me.fixAngle(heading));

	if (me.flag) {
		me.flag.model.setLatitude(lat);
		me.flag.model.setLongitude(lon);
		me.flag.model.setAltitude(alt + 50);
	} else
		me.flag = flags[me.cn];

}

Glider.prototype.teleportTo1 = function(pos) {
	if (this.init)
		this.teleportTo(pos.lat, pos.lon, pos.alt, pos.heading);
	else
		this.pos = pos;
}

Glider.prototype.teleportTo2 = function(pos) {
	if (this.init)
		this.teleportTo(parseFloat(pos[0]), parseFloat(pos[1]),
				parseFloat(pos[2]), parseFloat(pos[3]));
	else
		this.pos = pos;
}

Glider.prototype.autoScale = function() {
	var me = this;

	// przygotowanie danych do skalowania
	var lo = me.model.getLocation();

	var mepos = [lo.getLatitude(), lo.getLongitude(), lo.getAltitude()];
	mepos = V3.latLonAltToCartesian(mepos);

	var lo2 = ge.getView().copyAsCamera(ge.ALTITUDE_RELATIVE_TO_GROUND);

	var campos = [lo2.getLatitude(), lo2.getLongitude(), lo2.getAltitude()];
	campos = V3.latLonAltToCartesian(campos);

	var dist = V3.length(V3.sub(mepos, campos));

	// skalowanie
	var scale = (5 + (dist) / 400);

	me.model.getScale().set(scale, scale, scale);
}

Glider.prototype.tick = function() {
	var me = this;
	if (!me.doTick) {

		me.doTick = true

		me.teleportTo1(me.pos);
		
		me.autoScale();

		me.doTick = false;
	}
}

