/**
 * Модуль для работы с google API
 *
 * @author Sergey S. Sergienko
 * @mail sergey.sergienko@mkechinov.ru
 */
Vite.gmap = function ($) {

	// iWidget.group
	return {

		// гуглокарта
		map: null,

		// Marker object
		marker: 0,
		
		// Geocoder tool
		geocoder: 0,

		/* Координаты устанавливаемого местоположения.
		 * Это не те которые определяются по местоположению, а текоторые выставляет сам пользователь.
		 * Изначально они равны координатам местоположения
		 */
		latitude: 0,
		longitude: 0,

		/**
		 * Отображение на карте введенного адреса
		 */
		 getCoordinatesByAddress: function (address) {

			var _this = this;

			// инициализируем класс работы с координатами
			_this.geocoder = new GClientGeocoder();

			// получаем координаты по адресу
			_this.geocoder.getLatLng(
				address,
				function(response) {
					if (!response) {
						// не найден, ничего не делаем
					} else {

						_this.setMapPointByCoords(response.y,response.x);

					}
				}
			);

		},


		/*
		 * Функция получает координаты, по ним выводит карту и ставит маркер в центр
		 **/
		setMapPointByCoords: function (lat, lng) {

			var _this = this;

			var point = new GLatLng(lat, lng);
			// ставим центр
			_this.map.setCenter(point, 13);

			// Очищаем карту от маркеров
			_this.setMarker(point);

			// Вешаем событие на клик по карте
			GEvent.addListener(_this.map, "click", function(overlay, latlng) {

				// устанавливаем маркер
				_this.setMarker(latlng);

				// устанавливаем координаты
				_this.setCoords(latlng.y,latlng.x);

			});

			// перезаписываем координаты
			_this.setCoords(lat, lng);

		},

		/*
		 * Выставляет координаты для сохранения
		 **/
		setCoords: function (lat, lng) {

			var _this = this;

			// Перезаписываем координаты
			_this.latitude = lat;
			_this.longitude = lng;

			$('#form-latitude').val(lat);
			$('#form-longitude').val(lng);


		},

		/*
		 * Выставляет координаты для текущего местоположения
		 **/
		setCurrentCoords: function (lat, lng) {

			// сохраняем текущее местоположение
			$('#form-latitude').val(lat);
			$('#form-longitude').val(lng);
		},

		/*
		 * Устанавливает маркер
		 **/
		setMarker: function (point) {

			var _this = this;

			// Инициализируем новый маркер с возможностью перемещения
			_this.marker = new GMarker(point, {draggable: true});
			// Очищаем карту от маркеров
			_this.map.clearOverlays();
			// Ставим маркер на экран
			_this.map.addOverlay(_this.marker);

			// Вешаем событие на клик по маркеру (удаляем)
			GEvent.addListener(_this.marker, "click", function() {
				_this.map.removeOverlay(_this.marker);
			});

			// Вешаем событие на окончание перетягивания маркера
			GEvent.addListener(_this.marker, "dragend", function(latlng) {
				// устанавливаем координаты
				_this.setCoords(latlng.y,latlng.x);
			});

		}

	}

}(jQuery);
