var version = '1.0.0';

var defaults = { monthsShort: ["jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"],
				 monthsLong: ["января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря"]}
var MapInit = 0;
var DataInit = 0;
var map;


function showAllLocations() { /* тестовая функция для показа на карте всех заданных координат заведений */
	$('input').each( function() {
	map.addOverlay(createMarker($(this).attr('lat'), $(this).attr('lng'), $(this).attr('id')));
	});
}
	
function createMarker(lat, lng, title) {
	var marker = new GMarker( new GLatLng(lat, lng));
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(title);
	 });
	return marker;
}

function resolveAddress(address, playbillInfo) {
	var geocoder = new GClientGeocoder();

	geocoder.getLatLng('Украина, г. Донецк, ' + address,
		function(point) {
			if (point) {
				// удачный резолв
				var marker = new GMarker(point);
				GEvent.addListener(marker, "click", function() {
					marker.openInfoWindowHtml(playbillInfo);
				 });
				map.addOverlay(marker);
			}
		}
	);
}

function browseDay(day) {
	var todayAsString = '#playbill_data h5 a[name=' + day.getDate() + defaults.monthsShort[day.getMonth()] + ']';

	/* массив будущих маркеров */
	var markersArray = new Array;

	if ( $(todayAsString).length ) { /* выбираем нужные события */
		var markersIndex = -1;
				
		var currentBlock = $(todayAsString).parent().next();
				
		while ( $(currentBlock).hasClass('event') ) {
			
			if (($(currentBlock).find('.place2[lat]').length) && ($(currentBlock).find('.place2[lng]').length)) { 
				/* пофиг, ссылка или span, но есть аттрибуты lat и lng - кажется, не тестировалась */
				markersIndex++;
				markersArray[markersIndex] = {lat: $(currentBlock).find('span.place2').attr('lat'), lng: $(currentBlock).find('span.place2').attr('lng'), htmlContainer: '<div class="event">' + $(currentBlock).html() + '</div>', plId: 'from place' + markersIndex};
			}
			else {
			
				if ( ($(currentBlock).find('a.place2').length) && ( $(currentBlock).find('a.place2').attr('href').indexOf('map.htm#') > -1 ) ) { 
					/* ссылка есть и она внутренняя */
					var placeId = $(currentBlock).find('a.place2').attr('href').substring( $(currentBlock).find('a.place2').attr('href').lastIndexOf('#') + 1 );
					if ($('input#' + placeId).length) {
						
						/* проверить, нет ли уже такого маркера */
						var markerExists = 0;
						for (var i=0; i <= markersIndex; i++) {
							if ( markersArray[i].plId == placeId ) {
								markersArray[i].htmlContainer += '<div class="event">' + $(currentBlock).html() + '</div>';
								markerExists = 1;
								break;
							}
						}
								
						if (!markerExists) {
							markersIndex++;
							markersArray[markersIndex] = {lat: $('input#' + placeId).attr('lat'), lng: $('input#' + placeId).attr('lng'), htmlContainer: '<div class="event">' + $(currentBlock).html() + '</div>', plId: placeId};
							 /* добавляем маркер в массив */
						}
								
					}
					else {
						/* не заданы координаты. ого */
					}
				}
				else {
					/* ссылка внешняя или её нет - вытащить из скобок адрес и попытаться скормить георезолверу */
					var leftBracket = $(currentBlock).find('.place2').text().indexOf('(');
					var rightBracket = $(currentBlock).find('.place2').text().indexOf(')');
					if ( (leftBracket > -1) && (rightBracket > leftBracket) ) {
						var address=$(currentBlock).find('.place2').text().substring(leftBracket+1, rightBracket);
						resolveAddress(address, '<div class="event">' + $(currentBlock).html() + '</div>');
					}
				}
			
			}
					
			currentBlock = $(currentBlock).next();
		}
				
		if (markersIndex > -1) {
			for (var i=0; i <= markersIndex; i++) {
				map.addOverlay(createMarker(markersArray[i].lat, markersArray[i].lng, markersArray[i].htmlContainer)); /* создаем маркеры на карте */
			}
			$('#msg_box').html('Афиша на ' + day.getDate() + ' ' + defaults.monthsLong[day.getMonth()] + ':');
		}
		else { $('#msg_box').html('Данные на' + day.getDate() + ' ' + defaults.monthsLong[day.getMonth()] + ' есть, но их невозможно показать на карте. Ого.'); }
  	}
  	else {  $('#msg_box').html(day.getDate() + ' ' + defaults.monthsLong[day.getMonth()] + ' ничего нет.'); }
}


function VersionsSwitch(mode) {
	if (mode == 'off') {
		$('#versions h6').removeClass('expand');
		$('#versions div').hide();
	}
	
	if (mode == 'on') {
		$('#versions h6').addClass('expand');
		$('#versions div').show();
	}	
}

function onDaySelect(thisName) {
	/* выбран день из календаря */
	$('#msg_box').html('Подождите, пожалуйста&hellip;');
	
	map.clearOverlays();

	/* выбранное число */
	var theDayIs = new Date;
						
	if (thisName.length == 5) {
		theDayIs.setDate(thisName.substring(0,2));
		theDayIs.setMonth(in_array(thisName.substring(2), defaults.monthsShort));
		theDayIs.setDate(thisName.substring(0,2));
	}
	else {
		theDayIs.setDate(thisName.substring(0,1));
		theDayIs.setMonth(in_array(thisName.substring(1), defaults.monthsShort));
		theDayIs.setDate(thisName.substring(0,1));
	}
	
	browseDay(theDayIs);
}


$(document).ready(function() {

	VersionsSwitch('off');
	$('#versions h6').click( function() {
		if ($('#versions h6.expand').length) {
			VersionsSwitch('off');
		}
		else {
			VersionsSwitch('on');
		}
	});
	

   $('#msg_box').html('Подождите, пожалуйста&hellip;');
   
   if (GBrowserIsCompatible()) {
	   MapInit = 1;

		/* подгружаем содержимое афиши */
		$("#playbill_data").load("afisha.htm #playbill_data", function(response, status, xhr){
			if (status != 'error') {
				DataInit = 1;
				/* после загрузки контента выполняем обработку*/
				
				/* инициализация календаря */
				var options = { };
				$.jMonthCalendar.Initialize(options);	
				$('#calendarHeader').css('display','block');
				
				$('#map_container').height($('#map_container').width() * 0.6);
				$(window).resize(function(){ $('#map_container').height($('#map_container').width() * 0.6); });
				

				$('#jMonthCalendar .DateBox a').live('click', function(){
					onDaySelect($(this).attr('href').slice($(this).attr('href').lastIndexOf('#')+1));
				});

	
				/* создаём объект карты */
				map = new GMap2(document.getElementById("map_container"));
				map.setCenter(new GLatLng(48.005, 37.81), 15);
				var customUI = map.getDefaultUI();
				customUI.maptypes.physical = false;
				map.setUI(customUI);
	
				/* настраиваем стили контейнера */
	/*			$('#map_container').css('backgroundColor', 'transparent');*/

				/* сегодняшнее число */
				var todayIs = new Date;
				browseDay(todayIs);
			}
			else {
				/* афиша не загрузилась */
			    $('#msg_box').html('Не удалось загрузить список событий.');
			}
		});																			

   }
   else {
   	   /* браузер не поддерживается */
	    $('#msg_box').html('Ваш браузер не поддерживает отображение карт Google.');
   }


}); // конец функции ready
