

(function() {
	var window = this,
			ev = window.ev;

	// Si les namespaces/classes nécessaires ne sont pas chargées : exception
	if (!ev) {throw new Error("Le namespace 'ev' doit exister");}
	if (!ev.rjs) {throw new Error("Le namespace 'ev.rjs' doit exister");}
	// On s'assure que le namespace ev.me existe
	if (!ev.me) { ev.me = {}; }
	//Si la classe ev.me.MapME est définie on sort
	if (ev.me.MapME) {return;}

	/**
	 * MapME is designed to hold mutual properties and method of MapoME and GmapME.
	 * This method MUST NOT be used directly.
	 */
	ev.me.MapME = function() {
		/**
		 * attribut correspondant a la carte Maporama ou google ou autre...
		 */
		//this.map; // on ne définit pas à vide un attribut d'objet (ça sert à rien ; le résultat est le même)

		/**
		 * liste contenant les marqueurs pour affihage sur map
		 */
		this.markersList = [];

		/**
		 * Fonction permettant d'initialiser la map
		 */
		this.mapLoad = function() {
			throw new Error('#mapLoad() has not been implemented');
		};

		/**
		 * focntion permettant d'initialiser la google map pour l'hotel passé en param
		 */
		this.mapHotelLoad = function(_indexHotel) {
			throw new Error('#mapHotelLoad() has not been implemented');
		};

		/**
		 * focntion permettant d'ajouter un marker pour l'hotel passé en param
		 */
		this.addMarkerOnMapHotel = function(lat,lng) {
			throw new Error('#addMarkerOnMapHotel() has not been implemented');
		};

		/**
		 * Fonction permettant d'ajouter un point correspondant a un Point d'Interet sur la carte
		 * on passe en parametre la longitude, la latitude ainsi que le type de POI afin de pouvoir differencier les images des marqueurs
		 * @param {Object} lat
		 * @param {Object} lgt
		 * @param {Object} typePOI
		 */
		this.addPOIOnMap = function(lat, lgt, typePOI) {
			throw new Error('#addPOIOnMap() has not been implemented');
		};

		/**
		 * Fonction permettant d'jouter un point correspondant a un hotel sur la carte
		 * @param {Object} hotel
		 * @param {Object} index
		 */
		this.addHotelOnMap = function(hotel , index) {
			throw new Error('#addHotelOnMap() has not been implemented');
		};

		/**
		 * Fonction permettant de recuperer les photos de l'hotel
		 * avant d'afficher une bulle d'informations
		 *
		 * @param {Object} point
		 * @param {Object} hotel
		 * @param {Object} index
		 */
		this.getPhotos = function(map, marker, hotel) {
			throw new Error('#getPhotos() has not been implemented');
		};

		/**
		 * Creer la bulle d'infos lorsque les photos ont ete recues
		 */
		this.photosReceived = function(map, marker, hotel) {
			throw new Error('#photosReceived() has not been implemented');
		};

		/**
		 * Permet de selectionner un hotel sur la carte, de centrer la carte dessus et d'afficher l'info bulle correspondante
		 * @param {Object} idHotelEasy
		 */
		this.viewOnMap = function(idHotelEasy) {
			throw new Error('#viewOnMap() has not been implemented');
		};

		/**
		 * Evenement mouseover sur un marqueur
		 * @param {Object} idHotelEasy
		 */
		this.viewOnMapMouseOver = function(idHotelEasy) {
			throw new Error('#viewOnMapMouseOver() has not been implemented');
		};

		/**
		 * Evenement mouseout sur un marqueur
		 * @param {Object} idHotelEasy
		 */
		this.viewOnMapMouseOut = function(idHotelEasy) {
			throw new Error('#viewOnMapMouseOut() has not been implemented');
		};

		/**
		 * Cette fonction permet de supprimer un marker de la carte
		 * @param {Object} marker
		 */
		this.removeMarker = function(marker) {
			throw new Error('#removeMarker() has not been implemented');
		};

		/**
		 * Cette fonction calcule le centre et le zoom de la carte
		 * après que tous les markers ont été placés
		 */
		this.zoomToFit = function() {
			throw new Error('#zoomToFit() has not been implemented');
		};

		/**
		 * Cette fonction met à  jour le zoom
		 * @param {Object} Lat
		 * @param {Object} Long
		 * @param {Object} zoom
		 */
		this.updateCenter = function(lat, lng, zoom) {
			throw new Error('#updateCenter() has not been implemented');
		};

		/**
		 * Fonction permettant de cacluler la distance entre deux points
		 * dont les corrdonnees sont passees en parametres
		 * @param {Object} lat1
		 * @param {Object} lgt1
		 * @param {Object} lat2
		 * @param {Object} lgt2
		 */
		this.calculDistance = function(lat1, lng1, lat2, lng2) {
			return window.CalculDistance().compute(lat1, lng1, lat2, lng2);
		};
	};
}());

