// ==UserScript==
// @name          del.icio.us add thumbnail
// @namespace     http://www.ohmiyapatriots.com/blog/
// @description	  add thumbnail to del.icio.us page
// @include       http://del.icio.us/*
// @exclude	http://del.icio.us/rss/*
// @version     1.0
// ==/UserScript==

(function() {
	function getFirstElementByXPath(xpath, node) {
        var node = node || document
        var result = document.evaluate(xpath, node, null,
            XPathResult.FIRST_ORDERED_NODE_TYPE, null);
	  return result.singleNodeValue ? result.singleNodeValue : null
	}

    function getElementsByXPath(xpath, node) {
      var node = node || document;
     var nodesSnapshot = document.evaluate(xpath, node, null,
            XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
       var data = [];
        for (var i = 0; i < nodesSnapshot.snapshotLength; i++) {
            data.push(nodesSnapshot.snapshotItem(i));
        }
        return (data.length >= 1) ? data : null;
    }
	
    function createHTMLDocumentByString(str) {
        var html = str.replace(/<!DOCTYPE.*?>/, '').replace(/<html.*?>/, '').replace(/<\/html>.*/, '')
        var htmlDoc  = document.implementation.createDocument(null, 'html', null)
        var fragment = createDocumentFragmentByString(html)
        htmlDoc.documentElement.appendChild(fragment)
        return htmlDoc
    }

    function createDocumentFragmentByString(str) {
        var range = document.createRange()
        range.setStartAfter(document.body)
        return range.createContextualFragment(str)
    }

	function add_thumbnail(lnk){
		var lnk_src = 'http://img.simpleapi.net/small/' + lnk.href;
		var pre = getFirstElementByXPath("//img[@class='thumbnail'][@src='" + lnk_src + "']");		
		if(!pre){		
			var img = document.createElement('img');
			var br = document.createElement('br');
			img.src = lnk_src;
			img.style.cssFloat = 'left';
			br.clear = 'left';
			img.width = '50';
			img.height = '50';
			img.style.marginRight ="10px";
			img.className = 'thumbnail';
			var parNode = lnk.parentNode;
			parNode.parentNode.insertBefore(img,parNode);
			parNode.parentNode.appendChild(br);
		}
	}

	function launch(){
		links = getElementsByXPath("//li[contains(@class,'post')]/h4[@class='desc']/a");
		if(links){
			var lnk;
			for(var i=0;lnk = links[i];i++)
				add_thumbnail(lnk);
		}
	}

    function log(message){
        if (unsafeWindow && unsafeWindow.console) {
            unsafeWindow.console.log(message);
        }
    }

	//Auto Pager
	var scrollHeight = document.documentElement.scrollHeight;
	document.addEventListener(
		"scroll",
		function(e){
			if(document.documentElement.scrollHeight - scrollHeight > 100){
				scrollHeight=document.documentElement.scrollHeight;
				launch();
			}
		},false);
	launch();
})();