// File: commonParking.js
// Needed for the following pages: communaute.do, covoiturage-territoire.do, myCovoitureurs.do,
// manageParkings.do, editParking.do

var parkingList = new Array();

// function to get parkings by ajax
function getParkings() {
	var url = contextPath + "/api/parkings/get-parkings.do";
	
	var itineraire = [];    
	var allsteps=gdir.getPolyline();
	var nbreptsmax=Math.round((Math.round(gdir.getDistance().meters/1000))/40)+5;
	if (nbreptsmax > 21) {
		nbreptsmax=21;
	}
	
	var nmpoint=allsteps.getVertexCount();
	var modulodist=Math.round(nmpoint/nbreptsmax);
	
	for (i=0;i<nbreptsmax-1;i++){   		
		itineraire[i]=allsteps.getVertex(Math.abs((i)*modulodist));
	}
	
	var concatiti="";
	for(var i=0;i<itineraire.length;i++){
		var pts = itineraire[i];
		concatiti=concatiti+pts.lat()+","+pts.lng()+";";	
	}
	concatiti=concatiti+allsteps.getVertex(nmpoint-1).lat()+","+allsteps.getVertex(nmpoint-1).lng()+",";

	jQuery.post(url, {itineraire: concatiti}, function(data) {
		var response = data.response;
		if (response.isError) {
			// alert(response.errorMessage);
		} else {
			parkingList = response.result.parkings;
			if (parkingList.length != 0) {
				parkingList.each(
					function(parking) {
						var point = new GLatLng(parking.latitude, parking.longitude);
						createAndPaintParkingMarker(point, parking.name, getHtmlForParking(parking), parking.idParking)
					}
				);
			}
		}
	}, "json");
}

function setParkingMapUI(map) {
	var customUI = map.getDefaultUI();
	customUI.controls.largemapcontrol3d = false;
	map.setUI(customUI);
}

// returns the html content of an info window for a given parking
function getHtmlForParking(parking) {
	html = "<div class=\"infocontent parkingInfo\" style=\"width: 300px; height: 130px; overflow: auto;\">"+
	"<h1>" + parking.name + "</h1>"; 
	
	if (parking.imageurl != null) {
		html += "<img style=\"float: right\" src=\"" + parking.imageurl + "\"/>"; 
	}
	
	html += "<p>" + parking.comment + "</p>" +
	"<p>Lieu&nbsp;: " + parking.address + "</p>";
	
	if (parking.link != null) {
		html += "<p><a href=\"" + parking.link + "\" target=\"_blank\">" + parking.link + "</a></p>";
	}
	
	html +=	"</div>";
		
	return html;
}

// creates a parking marker
function createAndPaintParkingMarker(point, title, text, id, existingMap) {
	if (typeof(existingMap) != 'undefined') {
		map = existingMap;
	}
	var marker = new GMarker(point, {title: title, icon: getParkingIcon()});
	GEvent.addListener(marker, "click", function() {
		map.openInfoWindowHtml(point, text);
	});

	marker.marker_num = id;
	map.addOverlay(marker);
}

// return the GIcon object to be used as icon for parking markers
function getParkingIcon() {
	var icon = new GIcon();
	icon.image = contextPath + "/common/img/maps/parking1-22x22.png";
	icon.iconSize = new GSize(22, 22);
	icon.iconAnchor = new GPoint(8, 22);
	return icon;
}

// creates a parking object
function createParking(latitude, longitude, name, comment, id, link, address, imageurl) {
	var parking = new Object();
	point = getPoint(latitude, longitude);
	parking.point = point;
	parking.name = name;
	parking.comment = comment;
	parking.id = id;
	parking.link = link;
	parking.address = address;
	parking.imageurl = imageurl;
	return parking;
}

// creates a GLatLng object
function getPoint(latitude, longitude) {
	return new GLatLng(latitude, longitude);
}

// adds a new parking to the "parkingList" array
function addParking(latitude, longitude, name, comment, id, link, address, imageurl) {
	var parking = createParking(latitude, longitude, name, comment, id, link, address, imageurl)
	parkingList.push(parking);
}
