// ==UserScript==
// @name           Karen's Links
// @namespace      Zikes
// @description    MOAR LINKS
// @include        http://*deviantart.com/art/*
// ==/UserScript==

// Get elements by xpath
function $x(xpath,root){
	var got=document.evaluate(xpath,root||document,null,null,null), result=[];
	while(next=got.iterateNext()) result.push(next);
	return result;
}

// More thorough version of typeof
function typeOf(obj){
    if(obj==null) return 'null';
    switch(typeof obj){
        case 'object':
            if(obj instanceof Array) return 'array';
            return 'object';
        default:
            return typeof obj
    }
}

// Quick & dirty function for quick & dirty element building
function $E(){
    function extend(tgt,src){
        for(prop in src) if(src.hasOwnProperty(prop)){
            if(prop=='events'){
                for(evt in src[prop]) if(src[prop].hasOwnProperty(evt)){
                    el.addEventListener(evt,src[prop][evt],false);
                }
            }else if(typeOf(src[prop])=='object'){
                extend(tgt[prop],src[prop]);
            }else if(prop.match(/^\@/)){
                el.setAttribute(prop.replace(/^\@/,''),src[prop]);
            }else{
                tgt[prop]=src[prop];
            }
        }
        return tgt;
    }
    var els=[document.createElement(arguments[0])];
    var el;
    Array.prototype.slice.apply(arguments, [1]).forEach(function(arg){
        el=els[els.length-1];
        switch(typeOf(arg)){
            case 'string':
                els.push(document.createElement(arg));
                break;
            case 'array':
                arg.forEach(function(itm){
                    if(!itm) return;
                    if(typeof itm=='string') itm=$S(itm);
                    el.appendChild(itm)
                });
                break;
            case 'object':
                extend(el,arg);
                break;
        }
    });
    if(els.length>1) return els; else return els[0];
}

function $S(str){
    return document.createTextNode(str);
}

var div=$x('//div[@id="logindock"]/div/div')[0];
var logout=$x('//div[@id="logindock"]/div/div/span[@class="logout"]')[0];

function addLink(text, url){
    var sep=$S(' | ');
    div.insertBefore(sep,logout);
    div.insertBefore($E('span',[$E('a',{href:url},[text])]),sep);
}

addLink('Notes', 'http://my.deviantart.com/notes');
addLink('Random Deviant', 'http://www.deviantart.com/random/deviant');

