var eventList = {};
var lastID = 0;
var mapIsRead = false;
jQuery(function() {
	jQuery.getScript("//www.google.com/jsapi?", function() {
		google.load("maps","3",{"callback":mapIsReady,other_params: "sensor=false"});
	});
});

function mapIsReady() {
	initializeGoogleMap();
	mapIsRead = true;
}

$(function() {
	
	$('.event-title a[rel*="event_"]').each(function() {
		var id = $(this).attr('rel').substr(6);
		eventList[id] = {};
		eventList[id]['div'] = $($(this).parent().parent().parent());
		eventList[id]['div'].data('event-id',id);
		$(this).click(function( event ) {
			toggleEventDisplay(id);
			event.stopPropagation();
			event.preventDefault();
		});
	});
	
	
	$('.event-selected').each( function() {
		
		var id = $(this).data('event-id');
		toggleEventDisplay(id,$(this));
	});
	
	jQuery(".subscribe-area").css({"position":"absolute","top":20,"right":0,"border":"1px solid black","padding" : "5px", "background-color":"rgb(250,250,250)"});
	jQuery(".subscribe-area a").css({"color":"black"});
	jQuery(".subscribe-button").click(function( event ) {
		if( jQuery(".subscribe-area").data("visible") ) {
			jQuery(".subscribe-area").data("visible",false);
			jQuery(".subscribe-area").hide(400);
		} else {	
			jQuery(".subscribe-area").data("visible",true);
			jQuery(".subscribe-area").show(400);
		}
	});
	
	//jQuery("body").click(function() {
	//	jQuery(".subscribe-area").hide();
	//});
});


function toggleEventDisplay( id, div ) {
	if(eventList[id]['status'] == null ) {
		eventList[id]['status'] = 'loading';
		$.getJSON(basePath+"ajax.php",{'nav[path]':json,'event[ID]':id,'event[calendar]':calendar}, function(data) {
			eventList[id]['status'] = 'loaded';
			eventList[id]['event'] = data['event'];
			var addr = new Array();
			if( div ) {
				eventList[id]['subheader'] = $('.event-subheader',div);
				eventList[id]['eventcontent'] = $('.event-content',div);
				eventList[id]['eventimage'] = $('.event-image',div);
				eventList[id]['visible'] = true;
			} else {
				eventList[id]['eventcontent'] = $('<div>').addClass('event-content');
				if( data['event']['image'] ) {
					eventList[id]['eventimage'] = $('<a>').addClass('event-image');
					eventList[id]['eventimage']
						.attr('href',data['event']['image'])
						.css('background-image',"url('"+data['event']['thumbnail']+"')").lightBox({
							fixedNavigation:true,
							imageLoading: baseUrl+'c/images/lightbox/lightbox-ico-loading.gif',
							imageBtnClose: baseUrl+'c/images/lightbox/lightbox-btn-close.gif',
							imageBtnPrev: baseUrl+'c/images/lightbox/lightbox-btn-prev.gif',
							imageBtnNext: baseUrl+'c/images/lightbox/lightbox-btn-next.gif'
						});
				}
				
				
				eventList[id]['subheader'] = $('<div>').addClass('event-subheader');
				if( data['event']['image'] != '' && data['event']['image'] != null ) {
					eventList[id]['subheader'].append(eventList[id]['eventimage']);
				}
				var place = $('<div>').addClass('event-place');
				
				if( data.event.street  != '' ) {
					addr.push(data.event.street);
				}
				
				if( data.event.zip  != '' || data.event.city != '' ) {
					addr.push(data.event.zip+' '+data.event.city);
				}
				if( data.event.country != ''  ) {
					addr.push(data.event.country);
				}
				place.html(addr.join('<br/>'));
				
				eventList[id]['subheader'].append(place).append($('<div/>').addClass('clearer'));
				
				var description = $('<div>'+data['event']['description']+'</div>').addClass('description');
				eventList[id]['eventcontent'].append(eventList[id]['subheader']).append(description);
				eventList[id]['visible'] = false;
				eventList[id]['eventcontent'].hide();
				eventList[id]['div'].append(eventList[id]['eventcontent']);
				
				_toggleEventDisplay(id);
			}
			
			var showMap = $('<div class="show-map">Karte anzeigen</div>');
			if ( mapIsRead && addr.length > 0 ) {
				eventList[id]['subheader'].append(showMap);
			}
			
			showMap.click(function(){
				_showMap(id);
			});
			
		});
	} else if (eventList[id]['status'] != 'loading' ) {
		_toggleEventDisplay(id);
	}
}

function _toggleEventDisplay ( id ) {
	if( eventList[id]['visible'] ) {
		eventList[id]['eventcontent'].hide(300);
		eventList[id]['visible'] = false;
	} else {
		eventList[id]['eventcontent'].show(300);
		eventList[id]['visible'] = true;
	}
}




var Art = {};
Art.Events = {};

//var mapContainer, map, marker,gdir, eventinfo,search;

function _showMap( id ) {
	lastID = id ;
	/* TODO need to restore
	Art.Events.mapDirections.clear();
	*/
	
	
	Art.Events.mapContainer.hide().css('left',0).css('top',0);
	Art.Events.mapContainerTable.hide();
	Art.Events.mapContainer.show();
	Art.Events.mapBackdrop.fadeIn(300,function() { Art.Events.mapContainerTable.show(); });
	//Art.Events.mapContainer.fadeIn(300);
	
	$('head').append( Art.Events.printSheet );
	
	var addr = new Array();
	if( eventList[id].event.street  != '' ) {
		addr.push(eventList[id].event.street);
	}
	
	if( eventList[id].event.zip  != '' || eventList[id].event.city != '' ) {
		addr.push(eventList[id].event.zip+' '+eventList[id].event.city);
	}
	if( eventList[id].event.country != ''  ) {
		addr.push(eventList[id].event.country);
	}
	
	
	Art.Events.mapEventInfo.html($('.event-date',eventList[id].div).html()+'<br/>'+eventList[id].event.title+' ('+addr.join(', ')+')');
	
	if( eventList[id].event.lon && eventList[id].event.lat ) {
		var point = new google.maps.LatLng(eventList[id].event.lat,eventList[id].event.lon);
		Art.Events.map.setCenter(point, 13);
		Art.Events.mapMarker.setPosition(point);
	} else {
		
		var geocoder = new google.maps.Geocoder();
		geocoder.geocode(
		  {"address":addr.join(', ')},
		  function(result) {
			if( result.length > 0 ) {
				Art.Events.map.setCenter(result[0].geometry.location, 13);
				Art.Events.mapMarker.setPosition(result[0].geometry.location, 13);
				console.dir(result[0].geometry);
			}
		  }
		);
		
	}
}

function _mapsErrors() {
	Art.Events.searchBox.css({'opacity':1});
	Art.Events.searchField.addClass('error');
	Art.Events.directionsDisplay.setMap(null);
	
	Art.Events.mapDirectionsDiv.html('Ihr angegebener Standort wurde nicht gefunden.');
	/*search.css({
		border : '1px solid red',
		backgroundColor: '#FFCCCC'
	});
	console.dir(gdir.getStatus());*/
}


function initializeGoogleMap() {

	
	//Building the elements
	var mapStyle = $('head link[href$="art_events_map.css"]').attr('href');
	mapStyle = mapStyle.replace(/art_events_map\.css/g,'art_events_map_print.css')
	
	Art.Events.printSheet = $('<link rel="stylesheet" id="cssFrame" type="text/css" href="'+mapStyle+'"  media="print" />');
	Art.Events.mapContainer = $('<div>').addClass('art_event-map-container').css({'left':'-9999em'});
	Art.Events.mapBackdrop = $('<div>').addClass('art_event-map-backdrop ').css({'opacity':0.5});
	Art.Events.mapContainerTable = $('<table class="mTable art_event-container-table"><tr><td class="mTable"></td></tr></table>');
	Art.Events.mapContainerTableTd = $('td.mTable',Art.Events.mapContainerTable);
	Art.Events.mapWindow = $('<div>').addClass('art_event-map-window');	
	Art.Events.mapDiv = $('<div></div>').addClass('art_event-map');	
	Art.Events.mapDirectionsDiv = $('<div>').addClass('art_event-map-directions');	
	Art.Events.mapEventInfo = $('<div>').addClass('art_event-map-eventInfo');
	Art.Events.mapClose = $('<div>schliessen</div>').addClass('art_event-map-btnClose');
	Art.Events.mapPrint = $('<div>drucken</div>').addClass('art_event-map-btnPrint');
	Art.Events.searchBox = $('<div><b>Routenplaner</b><br/><br/>Ihr Standort:<br/></div>').addClass('art_event-map-search');
	Art.Events.searchField = $('<input type="text" />');
	Art.Events.searchBtn = $('<div>Route berechnen</div>').addClass('art_event-map-btnSearch');
	
	Art.Events.searchField.val('Strasse, PLZ Ort, Land').addClass('firstTime');
	
	//Adding the elements to the page
	Art.Events.mapContainer.append(Art.Events.mapBackdrop);
	Art.Events.mapContainer.append(Art.Events.mapContainerTable);
	Art.Events.mapContainerTableTd.append(Art.Events.mapWindow);
	Art.Events.mapWindow.append(Art.Events.mapEventInfo);
	Art.Events.mapWindow.append(Art.Events.mapDiv);
	Art.Events.mapWindow.append(Art.Events.mapDirectionsDiv);
	Art.Events.mapWindow.append(Art.Events.mapClose);
	Art.Events.mapWindow.append(Art.Events.mapPrint);
	Art.Events.mapWindow.append(Art.Events.searchBox);
	
	Art.Events.searchBox.append(Art.Events.searchField);
	Art.Events.searchBox.append(Art.Events.searchBtn);
	
	$('body').append(Art.Events.mapContainer);

	Art.Events.mapBackdrop.hide();
	
	//building the google patrts
	var myLatlng = new google.maps.LatLng(0, 0);
	
	var myOptions = {
      zoom: 8,
      center: myLatlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    }
	Art.Events.map = new google.maps.Map(Art.Events.mapDiv.get(0),myOptions);
	

	
	Art.Events.mapMarker = new google.maps.Marker();
	Art.Events.mapMarker.setPosition(myLatlng);
	Art.Events.mapMarker.setMap(Art.Events.map);
	
	
	
	Art.Events.directionsService = new google.maps.DirectionsService();
	Art.Events.directionsDisplay = new google.maps.DirectionsRenderer();
	Art.Events.directionsDisplay.setMap(Art.Events.map);
	Art.Events.directionsDisplay.setPanel(Art.Events.mapDirectionsDiv.get(0));
	/* 
	TODO
	need to restore this
	
	Art.Events.mapDirections = new GDirections(Art.Events.map, Art.Events.mapDirectionsDiv.get(0) );
	GEvent.addListener(Art.Events.mapDirections, "error", _mapsErrors);
	
	GEvent.addListener(Art.Events.mapDirections, "load", function() { 
		Art.Events.mapDirectionsDiv.html('');
		Art.Events.searchBox.css({'opacity':1});
	});
	*/
	
	Art.Events.mapPrint.click(function() {
		window.print();
	});
	
	Art.Events.mapClose.click(function() {
		Art.Events.mapContainerTable.hide();
		Art.Events.printSheet.remove();
		Art.Events.mapBackdrop.fadeOut(300,function() { Art.Events.mapContainer.hide(); });
		
	});
	Art.Events.mapContainer.click(function() {
		Art.Events.mapClose.click();
	});
	
	Art.Events.mapWindow.click(function( event ) {
		event.stopPropagation();
	});
	
	Art.Events.searchField.focus( function() {
		
		if( $(this).hasClass('error') ) {
			Art.Events.searchField.removeClass('error');
			Art.Events.mapDirectionsDiv.html('');
		}
		if( $(this).hasClass('firstTime') ) {
			$(this).removeClass('firstTime').val('');
		}
	});
	
	Art.Events.searchField.keydown( function(event) {
		if(event.which == 13) {
			Art.Events.searchBtn.click();
		}
	});
	
	Art.Events.searchField.blur( function() {
		if( $(this).val() == '' ) {
			$(this).addClass('firstTime').val('Strasse, PLZ Ort, Land');
		}
	});
	
	
	
	Art.Events.searchBtn.click( function() {
		id = lastID;
		Art.Events.searchBox.css({'opacity':0.5});
		Art.Events.mapDirectionsDiv.html('Route wird berechnet ...');
		var to = eventList[id].event.street+', '+eventList[id].event.zip+' '+eventList[id].event.city+', '+eventList[id].event.country;
		if( eventList[id].event.lon && eventList[id].event.lat ) {
			to =  eventList[id].event.lat + ", "+eventList[id].event.lon;
		}
		
		var request = {
 				origin:Art.Events.searchField.val(), 
				destination:to,
				travelMode: google.maps.DirectionsTravelMode.DRIVING
		};
    	Art.Events.directionsService.route(request, function(response, status) {
      		if (status == google.maps.DirectionsStatus.OK) {
				Art.Events.directionsDisplay.setMap(Art.Events.map);
        		Art.Events.directionsDisplay.setDirections(response);
				Art.Events.mapDirectionsDiv.html('');
				Art.Events.searchBox.css({'opacity':1});
      		} else {
				_mapsErrors();
			}
    	});

	} );
		

	
}
