// ==UserScript==
// @name      Replace Smiley
// @namespace http://opera.higeorange.com/
// @inlcude   *
// ==/UserScript==

/*
 * 誤爆し放題です。ページによっては本来の機能が動かなくなります。
 * それでも使いたいという稀有なかたは、適宜 exclude してください
 */

(function() {
    var smiley = {
        ":)": "Smiley Happy",
        ":-)": "Smiley Happy",
        "=)": "Smiley Happy",
        ":(": "Smiley Unhappy",
        ":-(": "Smiley Unhappy",
        ";)" : "Smiley Wink",
        ";-)": "Smiley Wink",
        ":o": "Smiley Surprised",
        ":-O": "Smiley Surprised",
        ":D": "Smiley Grin",
        ":-D": "Smiley Grin",
        "8-)": "Smiley Cool",
        "8-D": "Smiley Cool",
        ":|": "Smiley Indifferent",
        ":-|": "Smiley Indifferent",
        ":'|": "Smiley Cry",
        ":@": "Smiley Angry",
        ":-@": "Smiley Angry",
        ":p": "Smiley Tongue",
        ":-P": "Smiley Tongue",
        "'&lt;": "Smiley Pacman"
    };
    var r = /([:;8\'=][-']?[\)\(oODpP\|@])|&lt;/g;
    var f = '<span style=\"background-image: -o-skin(\'';
    var a = '\');width:-o-skin;height:-o-skin;display:inline-block"></span>'
    document.body.normalize();
    (function search_smiley(n) {
        if(n.nodeType == 3) {
            n.parentNode.innerHTML = n.parentNode.innerHTML.replace(r, function($0) {
                if(smiley[$0]) {
                    return f + smiley[$0] + a;
                } else {
                    return $0;
                }
            });
        } else if(n.tagName != "STYLE" && n.tagName != "SCRIPT" && n.nodeType == 1) {
            for(var m = n.firstChild; m != null; m = m.nextSibling) {
                arguments.callee(m);
            }
        }
    })(document.body);
})();
