var findSharedVenueId = false;

$(document).ready(function()
	{
	$("#datepicker").datepicker();
	$("#datepicker").datepicker("option", {changeMonth: true, changeYear: true, dateFormat: "D, d M yy", altField: "#eventDate", altFormat: "@", maxDate: new Date(2020,12), minDate: new Date(2000,1), showOtherMonths: true, selectOtherMonths: true,
		onClose: function()
			{
			startDate = Math.round($('#eventDate').val() / 86400000);
			resetmap();
			}
		});
	var langindex = document.cookie,
		S = '',
		loc, i;
	for (i=0; i<8; i++)
		S += "<option value='" + i + "'>" + (i+1) + "</option>";
	$('#period').html(S);
	if (langindex>0)
		{
		document.getElementById("langlist").selectedIndex = langindex;		
		changeLabels(langindex);
		}
	else
		{
		langcode = 'en';
		categories = ["Classical music","Rock and pop","Folk music","Jazz","Music","Theatre","Comedy","Dance","Spoken word","Cinema","Magic show","Category"];
		emailDialog = ["Send email","Send","Cancel"];
		}
	$("button").button({icons: {primary: "ui-icon-mail-closed"}}).css({"font-size":"x-small", "margin":"5px", "vertical-align":"top"});
	//infowindow = new google.maps.InfoWindow;//({disableAutoPan:true});
	markers = new Array();
	geocoder = new google.maps.Geocoder();
	var urlquery = location.href.split("?");
	if (urlquery[1])
		{
		var urlterms = urlquery[1].split("_");
		createMap(parseInt(urlterms[0]), urlterms[1], urlterms[2]);
		startDate = parseInt(urlterms[3]);
		$("#datepicker").datepicker("setDate", new Date(startDate * 86400000));
		document.getElementById('period').selectedIndex = urlterms[4];
		document.getElementById('time').selectedIndex = urlterms[5];
		document.getElementById('category').selectedIndex = urlterms[6];
		if (urlterms[7])
			{
			findSharedVenueId = true;//on first map refresh, find marker corresponds to this venue id
			venueId = urlterms[7];
			updateurl(venueId);
			}
		else
			updateurl();
		}
	else
		{
		startDate = Math.floor(new Date().getTime() / 86400000);//days since 1/1/1970
		$("#datepicker").datepicker('setDate', '+0');
		var loc = google.loader.ClientLocation;
		createMap(10, loc.latitude, loc.longitude);
		updateurl();
		}
	changeTime();
	google.maps.event.addListener(map, 'idle',function() {refreshMap()}); //triggered after map dragged
	$("#address").autocomplete({minLength:0, delay:500, 
		source: function(request, response)
			{
			geocoder.geocode( {'address': request.term, 'language': langcode}, function(results, status) {
				response($.map(results, function(item) {
					return {
						label: item.formatted_address,
						location: item.geometry.location
						}
					}));
				})
			},
		select: function(event, ui)
			{
			map.setCenter(ui.item.location);
			map.setZoom(12);
			resetmap();
			}
		});
	positionFooter();
	$(window).resize(positionFooter);
	});
	
function positionFooter()
	{
	if ($(window).height() + 10 > $(document).height())
		$('#footer').css({position: "absolute"});
	else
		$('#footer').css({position: "static"});
	}

function changeLabels(langindex)
	{
	langcode = new Array("en","fr","de")[langindex];
	var script = document.createElement('script');
	script.src = 'changeIndexLang.js';
	script.type = 'text/javascript';
	document.getElementsByTagName('head')[0].appendChild(script);
	}
	
function changelanguage(langindex)
	{
	document.cookie = langindex;
	changeLabels(langindex);
	updateurl();
	}

function changeTime()
	{
	switch (document.getElementById('time').selectedIndex)
		{
		case 0: //any time
			startTime = 0;
			endTime = 0;
			break;
		case 1: //evening
			startTime = 1800;
			endTime = 2359;
			break;
		case 2: //afternoon
			startTime = 1200;
			endTime = 1759;
			break;
		case 3: //morning
			startTime = 0000;
			endTime = 1159;
		}
	}

function createMap(zoom,lat,lng)
	{
	map = new google.maps.Map(document.getElementById("mapCanvas"), {zoom: zoom, mapTypeId: google.maps.MapTypeId.ROADMAP, scaleControl: true, zoomControlOptions: {style: google.maps.ZoomControlStyle.LARGE}, mapTypeControl: false});
	if (lat) map.setCenter(new google.maps.LatLng(lat,lng));
	}
	
function updateurl(venueId)
	{
	var loc = map.getCenter(),
		url = 'http://' + location.hostname + '?' + map.getZoom() + '_' + loc.lat() + '_' + loc.lng() + '_' + startDate + '_' + document.getElementById('period').selectedIndex + '_' + document.getElementById('time').selectedIndex + '_' + document.getElementById('category').selectedIndex;
	if (venueId) url = url + '_' + venueId;
	$('#twitter').attr('src', 'http://platform.twitter.com/widgets/tweet_button.html?count=none&lang=' + langcode + '&url=' + url);
	$('#facebook').attr('src', 'http://www.facebook.com/plugins/like.php?layout=standard&show_faces=false&width=450&action=recommend&font&colorscheme=light&height=35&locale=' + langcode + '_' + langcode.toUpperCase() + '&href=' + url);
	$('#emailMessage').val(url);
	}

function eventText(workstext, ptext, strTimes, eventurl)
	{
	if ((!ptext) || (workstext == ptext))
		ptext = '';
	else
		{
		ptext = ptext.replace(/ \(b\. \d{4}\)/g, '');
		var k = ptext.indexOf(',');
		if (workstext == ptext.substr(0,k))
			ptext = ": " + ptext.substr(k+1);
		else
			ptext = ": " + ptext;
		}
	if (eventurl>'')
		return "<p class='infotext'><b>" + strTimes + "</b> <a id='infolink' href='http://" + eventurl + "' onclick='window.open(this.href); return false;'>"  + workstext + "</a>" + ptext + "</p>";
	else
		return "<p class='infotext'><b>" + strTimes + "</b> " + workstext + ptext + "</p>";
	}
	
function refreshMap()
	{
	var endDate = startDate + document.getElementById('period').selectedIndex,
		categoryNo = document.getElementById('category').selectedIndex;
	$.getJSON('updateMap.php', {strBounds: map.getBounds().toUrlValue(), startDate: startDate, endDate: endDate, startTime: startTime, endTime: endTime, categoryNo: categoryNo}, function(venues)
		{
		//$('#message').html("updatemap took: " + venues.pop());
		//$('#message').html("category: " + categoryNo);
		var i=markers.length,
			venue;
		while (i--)
			markers[i].setMap(null);
		markers.length = 0;
		i=venues.length;
		while (i--)
			{
			venue = venues[i];
			markers[i] = new google.maps.Marker({
				position: new google.maps.LatLng(venue[2], venue[3]), 
				map: map,
				title: venue[1],
				id: venue[0],
				url: venue[5]
				});
			google.maps.event.addListener(markers[i], 'click', function() {
				marker = this;
				updateurl(marker.id);
				$.getJSON('getInfo.php', {venueId: marker.id, startDate: startDate, endDate: endDate, startTime: startTime, endTime: endTime, categoryNo: categoryNo}, function(events)
					{
					//$('#message').html("time taken: " + events.pop());
					//if (marker.id > 0)
					//	infoHtml = "<b><a class='infobox' href='http://en.wikipedia.org/wiki/" + //marker.title.replace(/ /g,'_') + "' onclick='window.open(this.href); return false;'>" + //marker.title + "</a></b>";	
					
					var	category = '',
						eventdate = 0,
						workstext = events[events.length-1][4],
						ptext = events[events.length-1][5],
						eventurl = events[events.length-1][2],
						strTimes = '',
						j=events.length,
						k, info, infoHtml;
					if (marker.url > '')
						infoHtml = "<p class='textcenter'><a class='infotext bold' href='http://" + marker.url + "' onclick='window.open(this.href); return false;'>" + marker.title + "</a></p>";
					else
						infoHtml = "<p class='textcenter infotext bold'>" + marker.title + "</p>";
					while (j--)
						{
						info = events[j]; //0:date, 1:time, 2:url, 3:category, 4: works text, 5: performers text
						if (info[1].length == 3) info[1] = '0' + info[1];
						if (workstext != info[4])
							{
							infoHtml = infoHtml + eventText(workstext, ptext, strTimes, eventurl);
							strTimes = '';
							eventurl = info[2];
							workstext = info[4];
							ptext = info[5];
							}
						if (category != info[3])
							{
							category = info[3];
							infoHtml = infoHtml + "<p class='textcenter infotext bold'>" + categories[category] + "</p>";
							}
						if (eventdate != info[0])
							{
							eventdate = info[0];
							infoHtml = infoHtml + "<p class='textcenter infotext bold'>" + new Date(eventdate * 86400000).toLocaleDateString() + "</p>";
							strTimes = '';
							}
						strTimes = strTimes + info[1].substr(0,2) + ":" + info[1].substr(2) + ' ';
						}
					infoHtml = infoHtml + eventText(workstext, ptext, strTimes, eventurl);	//infowindow.open(map,marker);
					//google.maps.event.addListener(infowindow, 'closeclick', function() {updateurl()});
					//if (langcode == 'en')
						$('#infopane').html(infoHtml);
						//infowindow.setContent(infoHtml);
					/*else
						{
						google.language.translate(infoHtml, 'en', langcode, function(result) {
							if (result.translation) {
								$('#infopane').html(result.translation+'<div id="branding" class="textright"></div>');
								//infowindow.setContent(result.translation+'<div id="branding" class="textright"></div>');
								google.language.getBranding('branding');
								}
							});
						}*/
					});
				});
			}
		if (findSharedVenueId)
			{
			//find marker with the same venueId as that in link (can't use marker no. as order may have changed
			i=markers.length;
			while (i--)
				if (markers[i].id == venueId)
					{
					google.maps.event.trigger(markers[i],'click');
					break;
					}
			findSharedVenueId = false;
			}
		});
	}
	
function resetmap()
	{
	//infowindow.close();
	updateurl();
	refreshMap();
	}
	
function openEmailDialog()
	{
	$("#dlgEmail").dialog({
		title: emailDialog[0],
		resizable: false,
		buttons: [
			{text: emailDialog[1], click: function()
				{
				var reg = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
				if (($('#emailSubject').val()>'') && ($('#emailMessage').val()>'') && (reg.test($('#toAddress').val())) && (reg.test($('#fromAddress').val())))
					{
					$.post("sendEmail.php", {from: $('#toAddress').val(), to: $('#fromAddress').val(), subj: $('#emailSubject').val(), msg: $('#emailMessage').val()});					
					$(this).dialog("close");
					}
				else
					$('#emailError').html('Please complete all boxes with valid entries');
				}
			},
			{text: emailDialog[2], click: function()
				{$(this).dialog("close");}
			}],
		close: function() {
			$('#emailError').html('');
			},
		width: 262,
		modal: true });
	}
