(function() {
	PorArriba.LugaresMapManager = function( _map ) {
		this.mapManager = null;
		
		this.map = _map;
		this.lugarStyle = new PorArriba.LugarStyle();
		
		this.lugares = new Object();
		
		/**
		 * Agrega un lugar
		 */
        this.addLugar = function(id, nombre, priority, latitude, longitude){
        	var lugarLabel = null;
        	
			if (!this.containsLugar(id)) {
				var latlng = new GLatLng(latitude, longitude);
	
				var lblStyle = this.lugarStyle.getNewLabelStyle();
				lblStyle.labelText = nombre;
				lblStyle.labelOffset = new GSize(-10, -10);
	
				lugarLabel = new LabeledMarker(latlng, lblStyle);
				lugarLabel.idLugar = id;
				lugarLabel.drawed = false;
				lugarLabel.nombre = nombre;
				lugarLabel.priority = priority;
				lugarLabel.zoomLevel = this.lugarStyle.getZoomByPriority(priority);
				this.lugares[id] = lugarLabel;
			} else {
				lugarLabel = this.getLugarById(lugar.idLugar);
			}
			
			this.drawLugar(lugarLabel);
			return lugarLabel;
		}
		
		/**
		 * Remueve los lugares no dibujados
		 */
		this.removesNoDrawed = function(){
			for(var idLugares in this.lugares){
				if (!this.lugares[idLugares].drawed) {
					delete(this.lugares[idLugar]);
				}
			}
		}
		
		/**
		 * Verifica si un lugar es contenido
		 */
		this.containsLugar = function (lugar) {
			var l = null;
			var type = typeof(lugar);
			
			if (type == 'object') {
				if (isUndefined(lugar.idLugar)) {
					l = this.getLugarById(lugar.id);
				} else {
					l = this.getLugarById(lugar.idLugar);
				}
			} else if(type == 'string') {
				l = this.getLugarById(lugar);
			}
			
			return !(isUndefined(l) || l == null);
		}
		
		/**
		 * Regresa un lugar por su ID
		 */
		this.getLugarById = function (idLugar) {
			return this.lugares[idLugar];
		}

		/**
		 * Dibuja todos los lugares para un nivel de zoom especifico
		 */
		this.drawLugares = function (level) {
			for(var idLugar in this.lugares){
				var lugar = this.lugares[idLugar];
				if (!isUndefined(lugar) && level >= lugar.zoomLevel) {
					this.drawLugar(lugar);
				}
			}
		}

		/**
		 * Dibuja un lugar en particular
		 */
		this.drawLugar = function(lugar) {
			if (this.containsLugar(lugar)){
				if (isUndefined(lugar.idLugar)) {
					lugar = this.getLugarById(lugar.id);
				} else {
					lugar = this.getLugarById(lugar.idLugar);
				}
			} else {
				lugar = this.addLugar(lugar.id, lugar.nombre, lugar.priority, lugar.latitude, lugar.longitude);
			}
			
			if (this.mapManager.dentroDelAreaDeDibujo(lugar.getLatLng().lat(), lugar.getLatLng().lng()) && !lugar.drawed) {
				lugar.drawed = true;
				this.map.addOverlay(lugar);
			}
		}
		
		/**
		 * Borra los lugares
		 */
		this.deleteLugares = function () {
			for(var idLugar in this.lugares){
				this.deleteLugar(idLugar);
			}
		}
		
		/**
		 * Borra un lugar
		 */
		this.deleteLugar = function(idLugar) {
			if (this.lugares[idLugar] != null && !isUndefined(this.lugares[idLugar])) {
				this.map.removeOverlay(this.lugares[idLugar]);
				this.lugares[idLugar].drawed = false;
			}
		}

	}
})();

fileLoaded("LugaresMapManager.js");
