/* JS FILE FOR PROFILE PAGE - TWEETS */

/* DOCUMENT DID FINISH LOADING */

$(document).ready(function() {
	$("div#stream").jScrollPane({animateTo:true});
	createMap();
	createFiller();
	setCurrentOnHover();
	streamController('setup');
});

/* KEY LISTENERS */

/* keydown */

$(document).keydown(function(e)
	{
		switch(e.which)
		{
			case 32:
				// spacebar
				return false;
				break;
		}
});


/* keyup */

$(document).keyup(function(e)
	{
		switch(e.which)
		{
			case 32:
				// spacebar
				streamController('toggle');
				break;
			case 37:
				// left arrow
				streamController('previous');
				break;
			case 39:
				// right arrow
				streamController('next');
				break;
		}
});
	
/* TWEET STREAM */

var interval;

function streamController(control) {
	controller = $(".streamController");
	switch(control) {
		case 'setup':
			// setup
			streamController('play');
			break;
		case 'pause':
			// pause
			controller.find(".pause").removeClass("pause").addClass("play");
			clearInterval(interval);
			interval = null;
			mapToggleControl('add');
			break;
		case 'play':
			// play
			controller.find(".play").removeClass("play").addClass("pause");
			interval = setInterval("streamController('next')", 5000);
			streamController('next');
			mapToggleControl('remove');
			break;
		case 'toggle':
			if (interval) {
				streamController('pause');
			} else {
				streamController('play');
			}
			break;
		case 'next':
			current = $(".tweet.current");
			next = current.next().filter(".tweet");
			if (next.length>0) {
				id = next.attr("row");
				setCurrentTweet(id);
				streamController('scroll');
			} else {
				setCurrentTweet(1);
				streamController('scroll');
			}
			break;
		case 'previous':
			current = $(".tweet.current");
			previous = current.prev();
			if (previous.length>0) {
				id = previous.attr("row");
				setCurrentTweet(id);
				streamController('scroll');
			} else {
				last = $(".tweet:last");
				last = last.attr("row");
				setCurrentTweet(last);
				streamController('scroll');
			}
			break;
		case 'scroll':
			$("div#stream")[0].scrollTo(".tweet.current");
			break;
	}
}

function setCurrentOnHover() {
	$(".tweet").click(function(){
		id = $(this).attr("row");
		setCurrentTweet(id);
		streamController('pause');
	});
}

function setCurrentTweet(id) {
	$(".tweet").removeClass("current");
	row = $("[row=\'"+id+"\']");
	row.addClass("current");
	lat = row.find("lat").text();
	lon = row.find("lon").text();
	lat = parseFloat(lat);
	lon = parseFloat(lon);
	moveMap(lat,lon);
}

function createFiller() {
	lastTweetHeight = $(".tweet:last").height();
	targetHeight = 600;
	newHeight = targetHeight - lastTweetHeight - 50;
	$("#filler").height(newHeight);
	$("div#stream").jScrollPane({animateTo:true});
}

/* GMAPS */

var map;

function createMap() {	
	row = $("[row=\'1\']");
	lat = row.find("lat").text();
	lon = row.find("lon").text();
	lat = parseFloat(lat);
	lon = parseFloat(lon);
    if (GBrowserIsCompatible()) {
    	map = new GMap2(document.getElementById("map"));
    	map.setCenter(new GLatLng(lat, lon), 16);
    }
}

var mapController = new GLargeMapControl3D();

function mapToggleControl(toggle) {
	switch(toggle) {
		case 'add':
			map.addControl(mapController);
			break;
		case 'remove':
			map.removeControl(mapController);
			break;
	}
}

    
function moveMap(lat, lon) {
	latlng = new GLatLng(lat, lon);
	map.clearOverlays();
	map.addOverlay(new GMarker(latlng));
    map.panTo(latlng);
	reverseGeo(lat, lon);
}

function setLocationInfo(text) {
	$(".info #location").html(text);
}

var geocoder = new GClientGeocoder();

function reverseGeo(lat, lon) {
	latlng = new GLatLng(lat, lon);
	geocoder.getLocations(latlng, showAddress);
}

function showAddress(response) {
  if (!response || response.Status.code != 200) {
    //alert("Status Code:" + response.Status.code);
  } else {
    place = response.Placemark[0];
	address = place.address;
	state = place.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName;
	setLocationInfo(address);
  }
}
