var route_class = application.extend({
	init : function(p,h) {
		this.line = false;
		this._super(p,h);
	},
	end : function () {
		try { 
			Rimory.map.instance.removeOverlay(this.line);
			this.line.clear(); 
			this.line = false;
		} catch (e) { };
		Rimory.map.rem_marker_group("line");
		return this._super();
	},
	map_click : function (lat, lng, title, icon, id, opts, group, mrk) {
		if(group) {
			if(group == "line") {
				for(var n = 0; n < Rimory.map.markers.line.length; n++) {
					if(Rimory.map.markers.line[n] == mrk) { Rimory.map.instance.removeOverlay(Rimory.map.markers.line[n]); break; }
				}
				Rimory.map.markers.line.splice(n, 1);
				this.update_line();
				return;
			}
			mrk.remove();
		}

		var _this = this;
		var lmarker = Rimory.map.add_marker(lat, lng, "", "route", false, { draggable:true, bouncy:false, dragCrossMove:true }, "line");
		GEvent.addListener(lmarker, "dragend", function() { _this.update_line(); });
		Rimory.map.instance.addOverlay(lmarker);
		this.update_line();
	},
	update_line : function () {
		try { 
			Rimory.map.instance.removeOverlay(this.line);
			this.line.clear(); 
		} catch (e) { };
		if($("#keep_road").is(":checked")) {
			var opts = {};
			opts.travelMode = $("#keep_road_2").is(":checked") ? G_TRAVEL_MODE_WALKING : G_TRAVEL_MODE_DRIVING;
			opts.avoidHighways = $("#keep_road_3").is(":checked") ? true : false;
			this.line = Rimory.map.draw_route("line", opts);

			var _this = this;
			GEvent.addListener(this.line, "load", function() { _this.get_distance(true); });
			try { this.get_distance(true); } catch(err) { };
		}
		else {
			this.line = Rimory.map.draw_line("line");
			Rimory.map.instance.addOverlay(this.line);
			this.get_distance(false);
		}
	},
	get_distance : function (route) {
		var l = route ? this.line.getDistance().meters : this.line.getLength();
		l = (l/1000).toFixed(3);
		$("#route_length").html(l + "km");
	}
});
Rimory.inst.route = new route_class();