// ==UserScript==
// @name          del.icio.us duplicate filter
// @namespace     http://slayeroffice.com/
// @description	Removes duplicate listings on del.icio.us
// @include       http://del.icio.us/tag/*
// ==/UserScript==

/**********************

	del.icio.us duplicate filter
	version 1.0
	last revision: 09.01.2005
	steve@slayeroffice.com
	
	Please leave this notice in tact. Should you make any improvements
	to this script, please let me know so I can update the version hosted
	on slayeroffice.


**********************/

	var so_d = document;

	//var so_main = so_getElementsByClassName("delMain");
	var so_main = so_d.getElementById("main");
	var so_a = so_filterDescriptionAnchors(so_main.getElementsByTagName("a"));
	var so_count = 0;
	var so_removedNodes = new Array();
	
	try {
		isGM = GM_log;
	} catch(err) {
		isGM = false;
	}
	
	for(i=0;i<so_a.length;i++) if(so_a[i]) so_hideDuplicates(so_a[i].innerHTML,so_a[i].href);
	
	var so_div = so_d.getElementsByTagName("body")[0].appendChild(so_d.createElement("div"));
	so_div.setAttribute("style","color:green;padding:3px;border:1px solid #000;");
	so_div.setAttribute("id","so_removed");
	so_div.appendChild(so_d.createTextNode(so_count + " duplicates removed."))
	if(so_removedNodes.length && !isGM) {
		so_show = so_div.appendChild(so_d.createElement("a"));
		so_show.setAttribute("href","javascript:so_showRemovedNodes();");
		so_show.setAttribute("id","so_showLink");
		so_show.appendChild(so_d.createTextNode(" Show Duplicates."));
	}
	
	function so_filterDescriptionAnchors(anchors) {
		p=0; aObj = new Array();
		while(anchors[p]) {
			if(anchors[p].parentNode.className == "desc") aObj[aObj.length] = anchors[p];
			p++;
		}
		return aObj;
	}

	function so_hideDuplicates(txt,url) {
		aObj = so_d.getElementsByTagName("a");
		first = true;
		for(j=0;j<aObj.length;j++) {
			if(aObj[j].innerHTML == txt || aObj[j].getAttribute("href") == url) {
					f=false;
					if(!first) {
						k = aObj[j];
						do {
							n = k.parentNode;
							if(n.className == "post") {
								so_removedNodes[so_removedNodes.length] = n;
								n.parentNode.removeChild(n);
								so_count++;
								f=true;
							} else {
								k = n;
							}
						} while(!f)
					} 
					first = false;
			}
		}
	}
	
	function so_getElementsByClassName(cls) {
		all = so_d.getElementsByTagName("*");
		obj = new Array();
		for(z=0;z<all.length;z++) {
			if(all[z].className == cls) {
				// only want the first instance of "delMain"...no need to iterate
				// over objects we dont have a need for
				return all[z];
			}
		}
		//return obj;
	}
	
	function so_showRemovedNodes() {
		mObj=so_d.getElementById('so_removed');
		for(i=0;i<so_removedNodes.length;i++) mObj.appendChild(so_removedNodes[i]);
		mObj.removeChild(so_d.getElementById('so_showLink'));
	}
