// ==UserScript==
// @name           Facebook superscript!
// @namespace      http://www.orangeninja.com
// @description    Lots of Facebook tweaks :D
// @include        http://*.facebook.com/*
// ==/UserScript==

(function(){
    
    
    /* Pop an alert on the homepage if there are any new messages to make the dock icon bounce */
    if(document.location.href.indexOf('home.php') != -1){
    	var inboxtext = document.getElementById('nav_inbox').textContent;
    	if(inboxtext.indexOf('(') != -1){
    		inboxtext = inboxtext.substring(inboxtext.indexOf('(') + 1);
    		inboxtext = inboxtext.substring(0, inboxtext.indexOf(')'));
    		alert('You have '+inboxtext+' new messages.');
    	}
    }
    
	
	
	/* Change the 'Friends' link to link to all friends rather than recently updated */
	var friendslinks = document.evaluate("//A[contains(@href,'facebook.com/friends.php?r')]",document,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null);
	for(var i=0, item;item=friendslinks.snapshotItem(i);i++){
		var link = item.getAttribute('href');
		link = link.substring(0, link.length - 2);
		item.setAttribute('href', link);
	}
	
	
	/* Removed sponsored links from newsfeed */
	var ttags = document.getElementsByTagName('span');
	for (var i=0;i < ttags.length;i++){
		if (ttags[i].innerHTML.indexOf("Sponsored") > -1){
			ttags[i].parentNode.parentNode.parentNode.parentNode.removeChild(ttags[i].parentNode.parentNode.parentNode);
		}
	}
	
	
	
	/* Work out the age of the person based on their birthday */
	var agelinks = document.evaluate("//A[contains(@href, 'b.php?k=10010&n=-1&y1=')]", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
	for(var i=0, item; item=agelinks.snapshotItem(i); i++){
		var href = item.getAttribute('href');
		var pos = href.indexOf('&y1=');
		var age = href.substring(pos + 4, pos + 6);
		var cont = document.createElement('span');
		cont.appendChild(document.createTextNode(' ('+age+' years old)'));
		if(item.nextSibling == null) {
			item.parentNode.appendChild(cont);
		}else{
			item.parentNode.insertBefore(cont, item.nextSibling);
		}
	}
	
	
	
	/* Add hover links to spy on photos we shouldn't see */
	var globalTimer;
	var allImages = document.evaluate('//img[contains(@src, "/profile")]', document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
	imgArray = new Array( allImages.snapshotLength * 2);
	// If on profile page or home page, skip first image
	var i = ((document.location.href.indexOf('profile.php') >= 0) || ( document.location.href.indexOf('home.php') >= 0)) ? 1 : 0;
	
	while (i < allImages.snapshotLength) {
		var thisImage = allImages.snapshotItem(i);
		var src = thisImage.src;
		var path = src.substring( 0, src.lastIndexOf('/') + 1 );
		var fileName = 'n' + src.substring( src.lastIndexOf('/') + 2, src.length );

		thisImage.alt = i;
		imgArray[i] = path + fileName;
		imgArray[i + allImages.snapshotLength] = src;

		var newDiv = document.createElement('div');
		newDiv.innerHTML = "<div id='t" + i + "' class='tip'><img src='" + path + fileName + "'></div>";
		document.body.appendChild(newDiv);

		thisImage.addEventListener('mouseover',
			function(event) {
				var x = event.pageX;
				var y = event.pageY;
				var z = 't' + this.alt;
				globalTimer = window.setTimeout(function() { popUp(x,y,z); }, 500);
			}, true);

		thisImage.addEventListener('mouseout',
			function(event) {
				window.clearTimeout(globalTimer);
				document.getElementById('t' + this.alt).style.visibility = "hidden";
			}, true);

		i++;
	}
	
	
	/* Add CSS for the photo tooltips */
	var css = '.tip {font: 10px/12px Arial,Helvetica,sans-serif;border: 0;padding: 3px 3px 1px 3px;visibility: hidden;position: absolute;z-index: 100;color: #333333;top: 20px;left: 90px;background-color: #3B5998;} ';
	css = css + '.tip img { border: 2px solid white; }'
	injectCSS(css);
	
	
	
	
	/* Add a friends item to the list box */
	if(document.location.href.indexOf('profile.php') != -1){
		var url = document.location.href;
		var userId = url.substring(url.indexOf('id=')+3);
		if(userId.indexOf('&') != -1) userId = userId.substring(0, userId.indexOf('&'));
		
		var menu = document.getElementById('app_switcher_menu');
		var link = document.createElement('a');
		link.setAttribute('href', '/friends.php?id='+userId);
		link.innerHTML = '<div class="menu_item clearfix"><div class="side_space">&nbsp;</div><div class="app_icon" style="background-image: url(/images/app_icons/group.gif);">&nbsp;</div><div class="name">Friends</div></div>';
		menu.appendChild(link);
	}
	
	

	

})();



function popUp(pgX,pgY,oi) {
	var winWidth = window.innerWidth;
	var winHeight = window.innerHeight;
	objStyle = document.getElementById(oi).style;
	obj = document.getElementById(oi);
	objWidth = obj.offsetWidth;
	if (objStyle.visibility == "visible") {
		objStyle.visibility = "hidden";
	}
	else {
		if ( (pgY + obj.offsetHeight) > winHeight )
			var top = pgY - obj.offsetHeight - 20;
		else
			var top = pgY + 20;

		var left = pgX - (objWidth/4);
		if (left < 2) left = 2;
		else if (left + objWidth > winWidth) left -= objWidth/2;

		left += 'px';
		top += 'px';

		objStyle.left = left;
		objStyle.top = top;
		objStyle.visibility = "visible";
	}

}




/*****************************************************
 Injects some CSS rules into the document
*****************************************************/
function injectCSS(rules){
	var style = document.createElement('style');
	style.setAttribute('type', 'text/css');
	style.textContent = rules;
	document.getElementsByTagName('head')[0].appendChild(style);
}
