    var commentServerUrl = "http://www.hoocoodanode.org";
    
	function addLoadEvent(func) {
      var oldonload = window.onload;
      if (typeof window.onload != 'function') {
        window.onload = func;
      } else {
        window.onload = function() {
          if (oldonload) {
            oldonload();
          }
          func();
        }
      }
    }

    function getElementsByClass(searchClass,node,tag) {
        var classElements = new Array();
        if ( node == null )
            node = document;
        if ( tag == null )
            tag = '*';
        var els = node.getElementsByTagName(tag);
        var elsLen = els.length;
        var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
        for (i = 0, j = 0; i < elsLen; i++) {
            if ( pattern.test(els[i].className) ) {
                classElements[j] = els[i];
                j++;
            }
        }
        return classElements;
    } 
    
    function getIdOutOfUrl(url) {
    	var pattern = /hoocoodanode\.org\/post\?id=(\/[0-9a-zA-Z]*?)\&/;
    	var result = url.match(pattern);
    	return result[1];
    }
    
    function getMaxCommentCounts(commentNodesArray) {
    	return Math.min(commentNodesArray.length, 20);
    }
  
    function getCommentCountUrl(arrayOfNodesWithUrlsForComments) {
        var url = commentServerUrl + '/comment_cnt';
        var howManyCommentLinks = getMaxCommentCounts(arrayOfNodesWithUrlsForComments);
        for (var i=0; i < howManyCommentLinks; i++) {        
            var linkNode = arrayOfNodesWithUrlsForComments[i];
            var hrefString = linkNode.href; 
            var idOfPost = getIdOutOfUrl(hrefString).substr(1);
            // This is for boost, who imposes a maximum folder depth of 10...
            if (i % 4 == 0) {
            	url += '/';
            }
            else {
            	url += '_';
            }
            url += idOfPost;
        }
        return url;
    }
    
    function encodeQueryStringsInCommentLinks(arrayOfNodesWithUrlsForComments) {
        var howManyCommentLinks = arrayOfNodesWithUrlsForComments.length;
        for (var i=0; i < howManyCommentLinks; i++) {        
            var linkNode = arrayOfNodesWithUrlsForComments[i];
            encodeLink(linkNode); 
        }
    }
        
    function encodeLink(linkNode) {
    	var url = linkNode.href;

    	var matches = /(.*?post\?)id=(.*?)&author=(.*?)&pl=(.*?)&nojs=y&title=(.*)/.exec(url);
        var post = matches[1];
        var id = matches[2];
        var author = matches[3];
        var pl = matches[4];
        var title = matches[5];
    	
    	if (matches) {
	    	
	    	// Special case for title, as blogger has a bug with escaping embedded single quotes
	    	// for attributes, so we generate the text into a hidden span within the anchor.
	    	var els = linkNode.getElementsByTagName('span');
	    	if (els.length == 1) {
	    		title = els[0].innerHTML;
	    	}
	    		
	    	linkNode.href = post +
	    		'id=' + id +
	    		'&author=' + encodeURIComponent(author) +
	    		'&title=' + encodeURIComponent(title) + 
	    		'&pl=' + encodeURIComponent(pl);
    	}
    }
    
    function loadCommentCounts(url) {
        var s = document.createElement('script');
        s.type = 'text/javascript';
        s.src = url;
        document.body.appendChild(s);
    }
    
    function updateCommentCounts() {
        var arrayOfNodesWithUrlsForComments = getElementsByClass("comment-link");
        var howManyCommentLinks = getMaxCommentCounts(arrayOfNodesWithUrlsForComments);
        for (var i=0; i < howManyCommentLinks; i++) {
            var linkNode = arrayOfNodesWithUrlsForComments[i];
            var hrefString = linkNode.href; 
            var idOfPost = getIdOutOfUrl(hrefString);
            var innerText = commentCounts[idOfPost] + ' Comments';
		
		   if(linkNode.innerText){
		       linkNode.innerText = innerText;
		   } else{
		       linkNode.textContent = innerText;
		   }
        }
    }
    
    addLoadEvent(
      function() {
        var arrayOfNodesWithUrlsForComments = getElementsByClass("comment-link");
        encodeQueryStringsInCommentLinks(arrayOfNodesWithUrlsForComments);
        loadCommentCounts(getCommentCountUrl(arrayOfNodesWithUrlsForComments));
    });

