// ==UserScript==
// @name           Facebook News Feed Sanitiser
// @namespace      http://lieschke.net/projects/greasemonkey/
// @description    Gets rid of the crap from your Facebook news feed. Removes all applications stories, sponsored stories, sponsored polls, and social ads.
// @include        http*://www.facebook.com*home.php?*
// ==/UserScript==

(function() {
	var divs = document.evaluate('//div[contains(@class, "feed_item")]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
	for (var i = 0; i < divs.snapshotLength; i++) {
		var div = divs.snapshotItem(i);
		if (!div.childNodes[0].childNodes[0].href) {
			continue;
		}
		var bits = div.childNodes[0].childNodes[0].href.split(/\?|=/);
		if (bits[1] == 'app_id' // Remove all application stories,
				|| bits[2] == 18    // sponsored stories,
				|| bits[2] == 26    // sponsored polls,
				|| bits[2] == 28) { // and social ads.
			div.parentNode.removeChild(div);
		}
	}
	
	var divs = document.evaluate('//div[contains(@class, "one_liner_cluster")]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
	var previousClusterNode = null;
	for (var i = 0; i < divs.snapshotLength; i++) {
		var div = divs.snapshotItem(i);
		if (div.childNodes[0].className == 'bumper') {
			div.parentNode.removeChild(div);
		} else {
			if (previousClusterNode == div.previousSibling) {
				if (previousClusterNode.lastChild.className == 'bumper') {
					previousClusterNode.removeChild(previousClusterNode.lastChild);
				}
				while (div.childNodes.length > 0) {
					previousClusterNode.appendChild(div.childNodes[0]);
				}
				div.parentNode.removeChild(div);
			} else {
				previousClusterNode = div;
			}
		}
	}
})();