    // --- The Node Class --
    
    // --- Class end ----
    Effect.AppearOpacity = function(element) {
        element = $(element);
        var options = Object.extend({
        from: 0.0,
        to:   0.5,
        // force Safari to render floated elements properly
        afterFinishInternal: function(effect) {
          effect.element.forceRerendering();
        },
        beforeSetup: function(effect) {
          effect.element.setOpacity(effect.options.from).show(); 
        }}, arguments[1] || { });
        return new Effect.Opacity(element,options);
    };
    Effect.FadeQuickly = function(element) {
        element = $(element);
        var oldOpacity = element.getInlineOpacity();
        var options = Object.extend({
          from: element.getOpacity() || 0.5,
          to:   0.0,
          afterFinishInternal: function(effect) { 
            if (effect.options.to!=0) return;
            effect.element.hide().setStyle({opacity: oldOpacity}); 
          }
        }, arguments[1] || { });
        return new Effect.Opacity(element,options);
    };

    delayRemove = function(element,delay){
        window.setTimeout("$('"+element+"').remove()",delay);
    };
    function rand(number){
        return Math.ceil(Math.random()*number);
    }
    function createNode(quipu){
        // quipu: [quipu_id, user_account, weight]
        var node = new Element('div',{'class':'node tie'+quipu[2]+'','id':'quipu'+quipu[0],'onmouseover':'showDesc('+quipu[0]+',\''+quipu[3]+'\')','onmouseout':'removeDesc('+quipu[0]+')','onclick':'window.location.href=\'blog/show/'+quipu[0]+'\''});
        //node.update("<img src=\"/images/tie"+quipu[2]+".png\"/>");
        return node;
    }
    function createVisualNode(){
        // quipu: [quipu_id, user_account, weight]
        var node = new Element('div',{'class':'node tie'+rand(3)});
        return node;
    }
    function showDesc(ele,des){
        var quipu = $('quipu'+ele);
        var desc = new Element('div',{'class':'desc','id':'desc_'+ele});
        desc.update(des);
        desc.setStyle({display:'none'});
        quipu.appendChild(desc);
        new Effect.AppearOpacity('desc_'+ele);
    }
    function removeDesc(desc){
        new delayRemove('desc_'+desc,500);
        //$('desc_'+desc).remove();
    }