google.load("jquery", "1.3.2");

var pagenum = 1;

var markers = {
	"standard": {
		"active": {
			"src": "http://www.coolbluedev.com/darlingtonexperiment/beta/img/eventmarkeractive.png",
			"size": 20
		},
		"inactive": {
			"src": "http://www.coolbluedev.com/darlingtonexperiment/beta/img/eventmarkerinactive.png",
			"size": 20
		}
	},
	"official": {
		"active": {
			"src": "http://www.coolbluedev.com/darlingtonexperiment/beta/img/officialeventmarkeractive.png",
			"size": 20
		},
		"inactive": {
			"src": "http://www.coolbluedev.com/darlingtonexperiment/beta/img/officialeventmarkerinactive.png",
			"size": 20
		}
	}
}

function createEventControls(id) {
	var output = '<div class="controls">'
	+ '<a title="Find event" class="icon findevent" href="javascript:findEvent(' + id + ');"><span>Find event</span></a> '
	+ '<a title="More info (opens in a new window)" class="icon eventinfo" target="_blank" href="http://upcoming.yahoo.com/event/' + id + '/"><span>More info</span></a>'
	+ '</div>';
	return output;
}

var events = {};
var map;
var anims = new Array();

function animQueue() {
	if (anims.length > 0) {
		var tmpEl = anims.shift()
		tmpEl.slideDown(100, function() {
			animQueue();
		});
	}
}

function findEvent(id) {
	map.panToLatLon(new YGeoPoint(events[id].lat, events[id].lon));
	selectEvent(id);
}

function fixTime(time) {
	if (time) {
		return time.substr(0, 5);
	}
	else {
		return "All day";
	}
}

function listEvents() {	  	
	$.getJSON('http://upcoming.yahooapis.com/services/rest/?method=event.search&per_page=5&page=' + pagenum
	+ '&sort=start-date-asc&api_key=88cf3ccd07&place_id=zO7AMHmYA5oV1tpmXg--&format=json&callback=?', function(data) {
	//	+ '&sort=start-date-asc&api_key=88cf3ccd07&search_text=disco&format=json&callback=?', function(data) {
		if (data.rsp) {
			var results = data.rsp.event;
			
			$("#moreevents").remove();
			
			$.each(results, function(i, val) {
				var evtimg = "http://www.coolbluedev.com/darlingtonexperiment/beta/img/nothumb.png";
				if (val.photo_url) {
					evtimg = val.photo_url
				}
				var evtenddate = "";
				if (val.end_date && val.end_date != -1) {
					evtenddate = " to " + val.end_date;
				}
				
				var evtendtime = "";
				if (val.end_time && val.end_time != -1) {
					evtendtime = "-" + fixTime(val.end_time);
				}
				
				var type = "standard";
				if (val.user_id == 1036164) {
					type = "official";
				}
				
				var currentGeoPoint = new YGeoPoint(val.latitude, val.longitude);
				var currentMarker = placeEventMarker(currentGeoPoint, type);
				
				var newData = {"id": val.id, "marker": currentMarker, "lat": val.latitude, "lon": val.longitude, "type": type}
				
				var newResults = $('<li class="listitem ' + type + ' clearfix" id="e_' + val.id + '">'
					+ '<img class="thumb" src="' + evtimg + '" alt="' + val.name + '" />'
					+ '<span class="misc">' + val.start_date + evtenddate + ' (' + fixTime(val.start_time) + evtendtime + ')</span>'
					+ '<span class="title">' + val.name + '</span>'
					+ createEventControls(val.id)
					+ '</li>');
				
				newData.element = newResults;
				
				events[val.id] = newData;
				
				YEvent.Capture(currentMarker, EventsList.MouseClick, function(){  						
					selectEvent(val.id);
				});
									
				$("#evtlist").append(newResults);
				anims.push(newResults);
				newResults.hide();
			});
			
			animQueue();
			
			$("#evtlist").append('<li id="moreevents" class="listitem clearfix right"><a class="icon more" href="#p_' + (pagenum+1) + '">More events...</a></li>');
		}
	});
}

function selectEvent(id) {
	$("#evtlist li").removeClass("active");
	events[id].element.addClass("active");
				
	$.each(events, function(i, val) {
		switchEventMarker(val.id, "inactive");
	});
	
	switchEventMarker(id, "active");
	
	location.href= "#e_"+id;
}

function switchEventMarker(id, value) {
	events[id].marker.changeImage(markers[events[id].type][value].image);
}

function placeEventMarker(geoPoint, type) {
	 var newMarker = new YMarker(geoPoint, markers[type].inactive.image);  
	 map.addOverlay(newMarker);
	 return newMarker;
}
		
function initMap() {
	$.each(markers, function(i, marker) {
		$.each(marker, function(i, val) {
			val.image = new YImage();
			val.image.src = val.src;
			val.image.size = new YSize(val.size, val.size);
		});
	});

	map = new YMap(document.getElementById('evtmap'));
	map.addZoomLong();
	map.addPanControl();
	map.addTypeControl();
	map.setMapType(YAHOO_MAP_REG);
	map.drawZoomAndCenter("Darlington, UK", 6);
}

function getY(el)	{
	var output = 0;
	while( el != null ) {
		output += el.offsetTop;
		el = el.offsetParent;
	}
	return output;
}

google.setOnLoadCallback(function() {
	initMap();
	
	$("#moreevents a").livequery('click', function() {
		pagenum++;
		listEvents();
	});
	
	$("#evtlist li.listitem").livequery(function() {
		$(".controls", this).hide();
		$(this).hoverIntent(function() {
			$(".controls", this).slideDown(150);
		}, function() {
			$(".controls", this).slideUp(150);
		});
	});
	
	var maptop = $("#map").offset().top;
					
	$(window).scroll(function() {			
		if ($(window).scrollTop() > maptop) {
			$("#map").css({"top": ($(window).scrollTop()-maptop)});
		}
		else {
			$("#map").css({"top": 0});
		}
	});
	
	listEvents();
});