if (typeof(EMONYU) == 'undefined') {
    EMONYU = {
        classNamePrefix: {
            "near": "emonyu_parts_near"
        },
        _elements: [],
        iconMap: {
            1: 'h',
            2: 'u',
            3: 'j',
            4: 's',
            5: 'p',
            6: 'a',
            7: 'su'
        },
        emotionClassMap: {
            0: 'none',
            1: 'happy',
            2: 'un',
            3: 'joy',
            4: 'sad',
            5: 'peace',
            6: 'angry',
            7: 'surprise'
        },
        pointMap: {
            0: 'low',
            50: 'middle',
            100: 'high'
        },
        getLevelByPoint: function(point) {
            return (point >= 80) ? 3 : (point >= 50) ? 2 : 1;
        },
        appendScript: function() {
            if (!EMONYU._elements) return;
            for (var i = 0; i < EMONYU._elements.length; i++) {
                var script = document.createElement('script');
                script.type = 'text/javascript';
                if (EMONYU._elements[i].date && EMONYU._elements[i].time) {
                    script.src = [
                        'http://',
                        EMONYU._elements[i].host,
                        '/status/show_near?user_name=',
                        EMONYU._elements[i].user_name,
                        '&self_tag_id=__emonyu_',
                        i,
                        '&date=',
                        EMONYU._elements[i].date,
                        '&time=',
                        EMONYU._elements[i].time,
                        '&format=json&callback=EMONYU.show.near'
                    ].join('');
                } else {
                    script.src = [
                        'http://',
                        EMONYU._elements[i].host,
                        '/status/show_last?user_name=',
                        EMONYU._elements[i].user_name,
                        '&self_tag_id=__emonyu_',
                        i,
                        '&format=json&callback=EMONYU.show.last'
                    ].join('');
                }
                document.body.appendChild(script);
            }
            EMONYU._elements = undefined;
        },
        show: {
            last: function(json) {
                EMONYU.insertStyleSheet(json);
                var selfTag = document.getElementById(json.self_tag_id);
                var box = document.createElement('div');

                if (json.statuses.length == 0) {
                    //ToDo
                    //box.appendChild(document.createTextNode('この時間帯の感情はありません。'));
                    //selfTag.parentNode.insertBefore(box, selfTag);
                    return;
                }

                var point = json.statuses[0].point;
                var level = EMONYU.getLevelByPoint(point);
                var icon = EMONYU.iconMap[json.statuses[0].emotion_id] + level + '.gif';
                with (box.style) {
                    backgroundImage = 'url(http://' + json.static_host + '/img/emotion/72/' + icon + ')';
                    backgroundRepeat = 'no-repeat';
                    width = '86px';
                    height = '112px';
                    margin = '6px';
                    cursor = 'pointer';
                }
                box.title = EMONYU.escape(json.statuses[0].memo);
                box.onclick = function() {
                    location.href = 'http://' + json.host + '/' + json.user_name;
                }
                
                var pointDiv = document.createElement('div');
                with (pointDiv.style) {
                    fontSize = '14px';
                    fontWeight = 'bold';
                    color = '#aaaaaa';
                }
                pointDiv.appendChild(document.createTextNode(json.statuses[0].point));
 
                var memoDiv = document.createElement('div');
                with (memoDiv.style) {
                    fontSize = '12px';
                    marginTop = '60px';
                }
                memoDiv.appendChild(document.createTextNode(json.statuses[0].memo));
 
                var userNameDiv = document.createElement('div');
                var userLink = document.createElement('a');
                userLink.href = 'http://' + json.host + '/' + json.user_name;
                userLink.target = '_blank';
                userLink.appendChild(document.createTextNode(json.user_name));
                userNameDiv.appendChild(userLink);
 
                box.appendChild(pointDiv);
                box.appendChild(memoDiv);
 
                selfTag.parentNode.insertBefore(box, selfTag);
            },
            near: function(json) {
                EMONYU.insertStyleSheet(json);
                if (json.s3version == 0) {
                    var staticUrl = 'http://' + json.static_host;
                } else {
                    var staticUrl = 'http://' + json.static_host + '/' + json.s3version;
                }
                var selfTag = document.getElementById(json.self_tag_id);

                var classNamePrefix = EMONYU.classNamePrefix['near'];
                if (json.statuses.length == 0) {
                    var emotionClassPostfix = EMONYU.emotionClassMap[0];
                } else {
                    var emotionClassPostfix = EMONYU.emotionClassMap[json.statuses[0].emotion_id];
                }

                var boxDiv = document.createElement('div');
                boxDiv.className = classNamePrefix + '_box_' + emotionClassPostfix;
                if (json.statuses.length != 0) {
                    boxDiv.onclick = function() {
                        window.open('http://' + json.host + '/' + json.user_name + '/status/' + json.statuses[0].id);
                    };
                }

                var iconDiv = document.createElement('div');
                if (json.statuses.length == 0) {
                    var point = 0;
                } else {
                    var point = json.statuses[0].point;
                }
                iconDiv.className = [
                    classNamePrefix,
                    '_icon ',
                    classNamePrefix,
                    '_icon_',
                    EMONYU.pointMap[point],
                    '_',
                    emotionClassPostfix
                ].join('');

                var commentDiv = document.createElement('div');
                if (json.statuses.length == 0) {
                    commentDiv.className = classNamePrefix + '_comment_none';
                } else {
                    commentDiv.className = classNamePrefix + '_comment';
                }

                var topDiv = document.createElement('div');
                topDiv.className = classNamePrefix + '_top_' + emotionClassPostfix;
                if (json.statuses.length > 0) {
                    var topImg = document.createElement('img');
                    topImg.src = staticUrl + '/img/top_left_' + emotionClassPostfix + '.gif';
                    topDiv.appendChild(topImg);
                }

                var commentP = document.createElement('p');
                if (json.statuses.length == 0) {
                    var anchor = document.createElement('a');
                    anchor.href = 'http://' + json.host + '/home';
                    anchor.target = '_blank';
                    anchor.appendChild(document.createTextNode(json.alt_text));
                    commentP.appendChild(anchor);
                } else {
                    commentP.appendChild(document.createTextNode(json.statuses[0].memo));
                }

                var bottomDiv = document.createElement('div');
                bottomDiv.className = classNamePrefix + '_bottom_' + emotionClassPostfix;
                if (json.statuses.length > 0) {
                    var bottomImg = document.createElement('img');
                    bottomImg.src = staticUrl + '/img/bottom_left_' + emotionClassPostfix + '.gif';
                    bottomDiv.appendChild(bottomImg);
                }

                if (json.statuses.length == 0) {
                    selfTag.parentNode.insertBefore(commentP, selfTag);
                } else {
                    commentDiv.appendChild(topDiv);
                    commentDiv.appendChild(commentP);
                    commentDiv.appendChild(bottomDiv);
                    iconDiv.appendChild(commentDiv);
                    boxDiv.appendChild(iconDiv);
                    selfTag.parentNode.insertBefore(boxDiv, selfTag);
                }

                var announceCloseDiv = document.createElement('div');
                var closeAnchor = document.createElement('a');
                with (closeAnchor.style) {
                    fontSize = '12px';
                    fontWeight = 'bold';
                    color = '#F95252';
                }
                closeAnchor.href = 'http://' + json.host + '/close';
                closeAnchor.target = '_blank';
                closeAnchor.appendChild(document.createTextNode('【重要】2011年8月31日にブログパーツの提供を終了します。'));
                announceCloseDiv.appendChild(closeAnchor);
                selfTag.parentNode.insertBefore(announceCloseDiv, selfTag);
            }
        },
        insertStyleSheet: function(json) {
            var headTag = document.getElementsByTagName('head');
            var linkTag = document.createElement('link');
            linkTag.type = 'text/css';
            linkTag.rel = 'stylesheet';
            linkTag.media = 'all';
            if (json.s3version == 0) {
                var staticUrl = 'http://' + json.static_host;
            } else {
                var staticUrl = 'http://' + json.static_host + '/' + json.s3version;
            }
            linkTag.href = staticUrl + '/css/blogparts.css';
            headTag[0].appendChild(linkTag);
        },
        escape: function(str) {
            str = str.replace(/&/g, '&amp;');
            str = str.replace(/"/g, '&quot;');
            str = str.replace(/'/g, '&#39;');
            str = str.replace(/</g, '&lt;');
            str = str.replace(/>/g, '&gt;');
            return str;
        }
    };
}

(function(){
    var selfTag = (function() {
        var ss = document.getElementsByTagName('script');
        for (var i = ss.length-1; i >= 0; i--) {
            if (ss[i].id.search('_firebug') != 0) {
                return ss[i];
            }
        }
    })();

    selfTag.id = (function() {
        var id = '__emonyu_' + EMONYU._elements.length;
        return id;
    })();
    var elements = {}
    if (selfTag.src.match(/user_name=([a-zA-Z0-9_]+)/)) {
        elements['user_name'] = RegExp.$1;
    }
    if (selfTag.src.match(/^http:\/\/([^\/]+)\//)) {
        var webHost = RegExp.$1;
        webHost = webHost.replace(/^static(\-|\.)/, '');
        elements['host'] = webHost;
    }
    if (selfTag.src.match(/date=(\d{4}\-\d{2}\-\d{2})/)) {
        elements['date'] = RegExp.$1;
    }
    if (selfTag.src.match(/time=(\d{2}(:|%3A)\d{2}(:|%3A)\d{2})/i)) {
        elements['time'] = RegExp.$1;
    }

    EMONYU._elements.push(elements);
})();

if (window.addEventListener) {
    window.addEventListener('load', EMONYU.appendScript, false);
}
else if (window.attachEvent) {
    window.attachEvent('onload', EMONYU.appendScript);
}

