
var Waypoint = Class.create({

	initialize: function(wpIndex) {
		this.wpIndex = wpIndex;
		this.name = "";
		this.geoName = "inconnu";
		this.lat = 0;
		this.lng = 0;
		this.geoCodeur = new google.maps.ClientGeocoder();
		this.partialKm = "0";
		this.partialTime = "0";
		this.totalKm = "0";
		this.totalTime = "0";
		
		/*
		if($("wpUp"+wpIndex)) $("wpUp"+wpIndex).onclick = this.moveUp; 
		if($("wpDown"+wpIndex)) $("wpDown"+wpIndex).onclick = this.moveDown;
		if($("wpDel"+wpIndex)) $("wpDel"+wpIndex).onclick = this.del;
		if($("wpNam"+wpIndex)) $("wpNam"+wpIndex).value = this.name;
		*/
	},

	setLatLngByGeo: function() {
		var curWp = this;
		this.geoCodeur.getLatLng(
			this.geoName,
			function(point) {
				if (!point) {
					alert("Impossible de géocaliser : " + curWp.geoName);
				} else {
					curWp.lat = point.lat();
					curWp.lng = point.lng();
					maBalade.doItineraire();
				}
			}
		);		
	},

	setGeoByLatLng : function() {
		var curWp = this;
		var point = new GLatLng(this.lat, this.lng, true);
		this.geoCodeur.getLocations(
			point,
			function(response) {
				if (!response || response.Status.code != 200) {
					if(response) maBalade.handleErrorsByCode(response.Status.code);
					else alert("Aucune reponse reçue de Google pour ces coordonnées...");
				} else {
					place = response.Placemark[0];
					if( place.AddressDetails.Country.AdministrativeArea ){
						if( place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea ){
							if( place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality ){
								if( place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName ){
									if( place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName)
										geoName = place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName
								}
							}
						}
					}
					curWp.geoName = geoName;
					if( $('studioForm') ) {
						if(curWp.name == "") curWp.name = geoName;
						maBalade.drawWpList();
					}
				}
			}
		);
	},
	
	buildMarker : function() {
	    
        var latLng = new GLatLng(this.lat, this.lng, false);
    	var icon = MapIconMaker.createLabeledMarkerIcon({
    		primaryColor: "#0000FF",
    		strokeColor: "#000088",
    		labelColor: "#FFFFFF",
    		label: this.wpIndex.toString()
    	});
    	
    	// Création du nouveau marqueur custom
    	newMarker = new GMarker(latLng,{
    		title:this.wpIndex,
    		icon:icon,
    		draggable:true    		
    	});
    	
    	if( $('map') ) newMarker.disableDragging();
    	else if( $('map_studio') ) newMarker.enableDragging();
    	
    	// Ajout d'event handler
		if( $('map') ) GEvent.addListener(newMarker, "click", maBalade.infoPoint);
		else if( $('map_studio') ) GEvent.addListener(newMarker, "click", maBalade.infoPointStudio);
		GEvent.addListener(newMarker, "dragend", maBalade.waypoints[this.wpIndex].markerDragend);
		
		// Mise en place du nouveau marqueur
		carteItineraire.addOverlay(newMarker);

    },
	
	markerDragend : function(point){
		// Update waypoint data, and display
		var markerId = this.getTitle();
		maBalade.waypoints[markerId].lat = point.lat();
		maBalade.waypoints[markerId].lng = point.lng();
		maBalade.waypoints[markerId].setGeoByLatLng();
		maBalade.doItineraire();
	},
	
	moveUp : function(e){
		wpIndex = e.target.id.substring(4, e.target.id.length);
		if(wpIndex != 0){
			var output=[];
			for(var i = 0; i < maBalade.waypoints.length; i++){
				if (i < (wpIndex - 1)) output[output.length] = maBalade.waypoints[i];
				else if (i == (wpIndex - 1)) output[output.length] = maBalade.waypoints[i+1];
				else if (i == wpIndex) output[output.length] = maBalade.waypoints[i-1];
				else if (i > wpIndex) output[output.length] = maBalade.waypoints[i];
			}	
			delete maBalade.waypoints;
			maBalade.waypoints = new Array();
			for(var i = 0; i < output.length; i++){
				maBalade.waypoints[i] = output[i];
				maBalade.waypoints[i].wpIndex = i;
			}
			maBalade.waypoints[0].updateControls();
			maBalade.doItineraire();
		}
	},
	
	moveDown : function(e){
		wpIndex = parseInt(e.target.id.substring(6, e.target.id.length));
		if(wpIndex < maBalade.waypoints.length - 1){
			var output=[];
			for(var i = 0; i < maBalade.waypoints.length; i++){
				if (i < wpIndex) output[output.length] = maBalade.waypoints[i];
				else if (i == wpIndex) output[output.length] = maBalade.waypoints[i+1];
				else if (i == (wpIndex + 1)) output[output.length] = maBalade.waypoints[i-1];
				else if (i > (wpIndex + 1)) output[output.length] = maBalade.waypoints[i];
			}
			delete maBalade.waypoints;
			maBalade.waypoints = new Array();
			for(var i = 0; i < output.length; i++){
				maBalade.waypoints[i] = output[i];
				maBalade.waypoints[i].wpIndex = i;
			}
			maBalade.waypoints[0].updateControls();
			maBalade.doItineraire();
		}
	},
	
	// METHODE OBSOLETE ???
	del : function(e){
		wpIndex = e.target.id.substring(5, e.target.id.length);
		var output=[];
		for(var i = 0; i < maBalade.waypoints.length; i++){
			if (i != wpIndex) output[output.length] = maBalade.waypoints[i];
		}	
		delete maBalade.waypoints;
		maBalade.waypoints = new Array();
		for(var i = 0; i < output.length; i++){
			maBalade.waypoints[i] = output[i];
			maBalade.waypoints[i].wpIndex = i;
		}
		if(maBalade.waypoints[0]) maBalade.waypoints[0].updateControls();
		maBalade.doItineraire();
	},
	
	moveUpImplicite : function(){
		var wpIndex = this.wpIndex;
		if(wpIndex != 0){
			var output=[];
			for(var i = 0; i < maBalade.waypoints.length; i++){
				if (i < (wpIndex - 1)) output[output.length] = maBalade.waypoints[i];
				else if (i == (wpIndex - 1)) output[output.length] = maBalade.waypoints[i+1];
				else if (i == wpIndex) output[output.length] = maBalade.waypoints[i-1];
				else if (i > wpIndex) output[output.length] = maBalade.waypoints[i];
			}	
			delete maBalade.waypoints;
			maBalade.waypoints = new Array();
			for(var i = 0; i < output.length; i++){
				maBalade.waypoints[i] = output[i];
				maBalade.waypoints[i].wpIndex = i;
			}
			maBalade.doItineraire();
			maBalade.drawWpList();
		}
	},
	
	moveDownImplicite : function(){
		var wpIndex = this.wpIndex;
		if(wpIndex < maBalade.waypoints.length - 1){
			var output=[];
			for(var i = 0; i < maBalade.waypoints.length; i++){
				if (i < wpIndex) output[output.length] = maBalade.waypoints[i];
				else if (i == wpIndex) output[output.length] = maBalade.waypoints[i+1];
				else if (i == (wpIndex + 1)) output[output.length] = maBalade.waypoints[i-1];
				else if (i > (wpIndex + 1)) output[output.length] = maBalade.waypoints[i];
			}
			delete maBalade.waypoints;
			maBalade.waypoints = new Array();
			for(var i = 0; i < output.length; i++){
				maBalade.waypoints[i] = output[i];
				maBalade.waypoints[i].wpIndex = i;
			}
			maBalade.doItineraire();
			maBalade.drawWpList();
		}
	},
	
	renameImplicite : function(name){
		var wpIndex = this.wpIndex;
		maBalade.waypoints[wpIndex].name = name;		
		maBalade.drawWpList();
	},
	
	deleteImplicite : function(){
		var wpIndex = this.wpIndex;
		var output=[];
		for(var i = 0; i < maBalade.waypoints.length; i++){
			if (i != wpIndex) output[output.length] = maBalade.waypoints[i];
		}	
		delete maBalade.waypoints;
		maBalade.waypoints = new Array();
		for(var i = 0; i < output.length; i++){
			maBalade.waypoints[i] = output[i];
			maBalade.waypoints[i].wpIndex = i;
		}
		maBalade.doItineraire();
	},
	/*
	updateControls : function(){
		var i = maBalade.waypoints.length + 1;
		while( $('ctn'+i) ){
			$('studioForm').removeChild($('ctn'+i));
			i++;
		}
		for(var i = 0; i < maBalade.waypoints.length; i++){
			$("wpNam" + i).value = maBalade.waypoints[i].geoName;
			$("wpGeo" + i).value = maBalade.waypoints[i].geoName;
			$("wpLat" + i).value = maBalade.waypoints[i].lat;
			$("wpLng" + i).value = maBalade.waypoints[i].lng;
		}
		var i = maBalade.waypoints.length;
		$("wpGeo" + i).value = "";
		$("wpLat" + i).value = "";
		$("wpLng" + i).value = "";
		//$("wpPar" + i).innerHTML = "";
		//$("wpTot" + i).innerHTML = "";
		//$("wpSTot" + i).value = "";
		//$("wpTPar" + i).innerHTML = "";
		//$("wpTTot" + i).innerHTML = "";
		//$("wpTSTot" + i).value = "";
	}
	*/
});

