var uids = [];
var names = {};

function init() {
	var eventquery = FB.Data.query(
		'select uid from event_member ' +
		'where rsvp_status in ("attending", "unsure") ' +
			'and eid = 113151515408991 '
	);

	var userquery = FB.Data.query(
	'select uid, name from user ' +
	'where uid in  ' +
		' (select uid from {0})', eventquery
	);

	var streamquery = FB.Data.query(
		'select source_id, message from stream ' +
		'where ' +
		'updated_time > "2010-11-04" and ' +
		'source_id in ' +
			'(select uid from {0}) ' +
		'limit 1000 '
		, eventquery
	);

	FB.Data.waitOn([eventquery, userquery, streamquery],
		function () {
			$('#profiles').html(
				 _.reduce(eventquery.value,
					function (memo, row) {
						uids.push(row.uid);
						return memo + '<p>' +
							'<fb:profile-pic uid="' + row.uid + '" />' + '</p><p>'
							'<fb:name uid="' + row.uid + '" />' +
							'</p>';
					}, '')
			);
			names = _.reduce(userquery.value,
						function (memo, row) {
							memo[row.uid] = row.name;
							return memo;
						}, {});

			$('#stream').html(
				_.reduce(streamquery.value,
					function (memo, row) {
						return memo + '<p>' +
							'<fb:profile-pic uid="' + row.source_id + '" />' + '</p><p>'
							'<fb:name uid="' + row.source_id + '" /> siger: ' +
							row.message +
							'</p>';
					}, '')
			);

			FB.XFBML.parse(document.getElementById('container'));

			$('a#getfriends').click(function (e) {
				var uidstring = uids.join(",");
				var friendquery = FB.Data.query(
					'select uid1, uid2 ' +
					'from friend ' +
					'where uid1 in ({0}) and uid2 in ({0})'
					, uidstring
				);

				FB.Data.waitOn([friendquery], function () {
					var json = _.reduce(uids, function (memo, uid) {
						memo.push({
							"id": '' + uid,
							"name": names[uid],
							"adjacencies": _.reduce(
								friendquery.value,
									function (memo2, friendrel) {
										if (friendrel.uid1 === uid) {
											memo2.push({
												"nodeTo": '' + friendrel.uid2
											});
										}
										return memo2;
									}, [])
						});
						return memo;
					}, []);

					$('div#friends').css('height', '770px');
					// ForceDirected Hypertree
					var graph = new $jit.Hypertree({
						injectInto: 'friends',
						Node: {
							'transform': false,
							color: "#f00"
						},
						Edge: {
							color: "#088"
						},
						offset: 0.1,
						transition: $jit.Trans.Back.easeOut,
						duration: 1000,
						onCreateLabel: function (domElement, node) {
							domElement.innerHTML =
//										'<p style="font-size: 1em">' + node.name + '</p>';
																	'<p>' +
																		'<fb:profile-pic linked="false" uid="' + node.id + '" />' +
																		node.name + '</p>';
							domElement.style.cursor = "pointer";
							domElement.onclick = function () {
								graph.onClick(node.id, { hideLabels: false });
							};
						},
						onPlaceLabel: function (domElement, node) {
							var width = domElement.offsetWidth;
							var intX = parseInt(domElement.style.left);
							intX -= width / 2;
							domElement.style.left = intX + 'px';
						}
					});
					graph.loadJSON(json, 1);
					graph.refresh();
					FB.XFBML.parse(document.getElementById('friends'));
				});
			});
		});
}

$(function () {
	FB.init({
		appId: '172549256092315',
		status: true,
		cookie: true,
		xfbml: true
	});
	FB.Event.subscribe('auth.sessionChange', function (response) {
		if (response.session) {
			init();
		} else {
			// The user has logged out, and the cookie has been cleared
		}
	});
	FB.getLoginStatus(function(response) {
		if (response.session) {
		    init();
		} else {
		    // no user session available, someone you dont know
		}
	});
});
