﻿/**
 * Инициализатор
 *
 * @include "jsdoc.js"
 * @include "layersmanager.lib.js"
 * @include "systemmessedger.lib.js"
 * @include "siteinfo.lib.js"
 *
 *
 * FIXME Переделать отображение/скрытие списка опций элемента управления отображением слоев.
 * FIXME Исправить в Ie6 выравнивание кнопки "Скрыть все" элемента управления отображением слоев.
 * TODO Добавить функцию на клик по кнопке Еще элемента управления отображением слоев.
 * TODO Добавить увеличение по выделению. Плагин от Google: http://gmaps-utility-library.googlecode.com/svn/trunk/dragzoom/
 * TODO Реализовать счетчик по координатам.
 * TODO Реализовать версию для печати.
 * TODO Рассмотреть вариант получаения jQuery с сервера Google ()
 *
 *
 * @see <a
 *      href="http://gmaps-samples.googlecode.com/svn/trunk/megawindow/maxcontent_ajax.html">
 *      Большое инфоокно</a>
 * @see <a href="http://wolfpil.googlepages.com/more-button.html">Кнопка Еще</a>
 *
 *
 * <b>Официальные плагины Google</b>
 * @see <a
 *      href="http://gmaps-utility-library.googlecode.com/svn/trunk/extinfowindow/">
 *      Оригинальные инфооконы</a>
 * @see <a
 *      href="http://gmaps-utility-library.googlecode.com/svn/trunk/extlargemapcontrol/">
 *      Управление масштабом как на самом гугле</a>
 * @see <a
 *      href="http://gmaps-utility-library.googlecode.com/svn/trunk/snaptoroute/">
 *      Движения маркера по ребрам полигона</a>
 * @see <a
 *      href="http://gmaps-utility-library.googlecode.com/svn/trunk/progressbarcontrol/">
 *      Прогресс-бар</a>
 * @see <a
 *      href="http://gmaps-samples.googlecode.com/svn/trunk/spreadsheetslayer/spreadsheetslayer.html">
 *      Spreadsheets Layer</a>
 * @see <a href="http://code.google.com/apis/ajax/playground/#geo_map">Регионы от Google</a>
 */

GScript('/_js/systemmessedger.lib.js');
GScript('/_js/layersmanager.lib.js');
GScript('/_js/sitebar.lib.js');


/**
 * Объект карты
 * @type GMap2
 */
var map;
var geocoder, geocoder_exeption = true;


var __DEBUG__ = (typeof window.console != "undefined");
/*
if (typeof window.console == "undefined") {
	__DEBUG__ = false;
	alert('Приложение работает в режиме отладки.' + "\n" + 'Для работы приложения необходимо активизировать отладчик');
	$(document).ready(function () { $('body').css('display', 'none'); });
	delete LayersManager;
}
*/

window.onload = function () {
	if (GBrowserIsCompatible()) {
		map = new GMap2(
			document.getElementById("map"),
			{
				googleBarOptions : {
					showOnLoad : true
				}
			}
		);

		var inital = {
			lat : 55.75,
			lng : 37.62,
			zoom : 10
		};
		var link_latlng = /[\?&]ll=(-?[0-9\.]+),(-?[0-9\.]+)/.exec(window.location.href);
		var link_zoom = /[\?&]z=([0-9]{1,2})/.exec(window.location.href);
		if (link_latlng != null && link_zoom != null) {
			inital.lat = parseFloat(link_latlng[1]);
			inital.lng = parseFloat(link_latlng[2]);
			inital.zoom = parseInt(link_zoom[1]);
		} else {
			// TODO Добавить определение местоположения посетителя
		}

		map.setCenter(new GLatLng(inital.lat, inital.lng), inital.zoom);
		map.addControl(new SiteBar());
		map.addControl(new GLargeMapControl(), new GControlPosition(
			G_ANCHOR_TOP_LEFT,
			new GSize(7, 40)
		));
		map.addControl(new GHierarchicalMapTypeControl(), new GControlPosition(
			G_ANCHOR_TOP_RIGHT,
			new GSize(7, 40)
		));
		//map.addControl(new SiteInfo);

		$(login ? '#logbar' : '#logout').css('display', 'none');

		// TODO Переработать выбор изначально отображаемых слоев.
		LayersManager.initialize({
			'observ' : {
				name : 'Обсерватории',
				tip : 'Обсерватории',
				color : '#F9F9F9',
				add : 'обсерваторию'
			},
			'planet' : {
				name : 'Планетарии',
				tip : 'Планетарии',
				color : '#4242FF',
				add : 'планетарий'
			},
			'univer' : {
				name : 'ВУЗы и НИИ',
				tip : 'Учебные и научные астрономические институты',
				color : '#77FF78',
				add : 'ВУЗ или НИИ'
			},
			'club' : {
				name : 'Клубы (объединения ЛА)',
				tip : 'Клубы и др. объединения любителей астрономии',
				color : '#8F8FF5',
				add : 'клуб (объединение ЛА)'
			},
			'uedu' : {
				name : 'Кружки и клубы (учебные)',
				tip : 'Юношеские учереждения дополнительного астрономического образования',
				color : '#FDFF77',
				add : 'кружок или клуб (учебный)'
			},
			'shop' : {
				name : 'Астромагазины',
				tip : 'Магазины астрономических товаров',
				color : '#FF7877',
				add : 'магазин астротоваторов'
			},
			'amateur' : {
				name : 'Любители астрономии',
				tip : 'Любители астрономии',
				color : '#0FCF00',
				add : 'любителя астрономии'
			}
		}, ['observ', 'planet', 'club']);
		map.addControl(new LayersManager.ViewControl);
		$('#lyrc').css('z-index', '1');

		// TODO Настроить панель поиска.
		map.enableGoogleBar();
		map.enableScrollWheelZoom();
		map.enableContinuousZoom();
		new GKeyboardHandler(map);

		// Тонкая настройка для инвалидов :)
		if ($.browser.msie) {
			if ($.browser.version == 6) {
				$('#lyrc').css('right', '184');
				$('#lyrc .button').css('width', '6em');
				$('#lyrc_spacer').css('width', '94px');
			}
			if ($.browser.version > 6) {
				$('#lyrc').css('right', '154');
				$('#lyrc_spacer').css('width', '87px');
			}
		}
		if ($.browser.safari) {
			$('#lyrc_spacer').css('width', '84px');
		}


		// Testing
/*
		geocoder = new GClientGeocoder();
		GEvent.addListener(map, "click", function (overlay, latlng) {
			if (latlng && geocoder_exeption) {
				geocoder.getLocations(latlng, function (addresses) {
					if(addresses.Status.code != 200) {
						alert("Google reverse geocoder failed to find an address for " + latlng.toUrlValue());
					} else {
						var adr = addresses.Placemark[0].AddressDetails.Country;
						map.openInfoWindow(latlng, '<b>' + adr.CountryName + '</b>, ' + adr.AdministrativeArea.AdministrativeAreaName);
					}
				});
			}
		});
*/
		GEvent.addListener(map, 'infowindowopen', function (ll) {
			var content = map.getInfoWindow().getContentContainers()[0];
			if (content.className != 're') {
				var windivs = content.parentNode.parentNode.childNodes;
				windivs[1].childNodes[0].src = '/_img/iw3.png';
				windivs[2].childNodes[0].src = '/_img/iw3.png';
				windivs[3].childNodes[0].src = '/_img/iw3.png';
				windivs[4].childNodes[0].src = '/_img/iw3.png';
				windivs[5].childNodes[0].src = '/_img/iw3.png';
				windivs[6].style.borderTop = '0 none';
				windivs[6].style.backgroundColor = '';
				windivs[6].style.backgroundImage = 'url(/_img/iw3.png)';
				windivs[6].style.backgroundPosition = '-22px 0';
				windivs[7].style.borderLeft = '0 none';
				windivs[7].style.backgroundColor = '';
				windivs[7].style.backgroundImage = 'url(/_img/iw3.png)';
				windivs[7].style.backgroundPosition = '0 -22px';
				windivs[7].style.width = (parseInt(windivs[7].style.width.substr(0, 3)) + 1) + 'px';
				windivs[7].style.borderColor = '#7f887a';
				windivs[8].style.backgroundColor = '';
				windivs[8].style.backgroundImage = 'url(/_img/iw3.png)';
				windivs[8].style.backgroundPosition = '-22px 690px';
				windivs[8].style.borderColor = '#3b3f39';
				windivs[0].childNodes[0].src = '/_img/iw_close.png';

				content.style.color = '#FFFFFF';
				content.style.top = '7px';

				content.className = 're';
			}
		});

/* <div id="console" style="position:absolute;top:0; left:50%;z-index:200;background-color:#FFFFFF;padding:4px"></div>
		GEvent.addListener(map, 'mousemove', function (ll) {
			$('#console').html(ll.lat() + '<br/>' + ll.lng());
		});
*/
	} else {
		// TODO Добавить обработку неподдерживаемых браузеров
		alert('Ваш браузер не поддерживается.');
	}
}

window.onunload = GUnload;
