﻿fanfou = new Object();
fanfou.Timeline = function() {
    this.server = 'http://api.fanfou.com';
    if (typeof fanfou_name == 'undefined') {
        this.name = '';
    } else {
        this.name = fanfou_name;
    }
    if (typeof fanfou_count == 'undefined' || isNaN(fanfou_count)) {
        this.count = 20;
    } else {
        this.count = parseInt(fanfou_count);
    }
    if (this.name == '') {
        this.timeline = 'public';
    } else {
        if (typeof fanfou_timeline != 'undefined' && (fanfou_timeline == 'friends' || fanfou_timeline == 'public')) {
            this.timeline = fanfou_timeline;
        } else {
            this.timeline = 'user';
        }
    }
};
fanfou.Timeline.prototype = {
    getDate: function(str) {
        var arr = str.split(' ');
        var str = arr[1] + ' ' + arr[2] + ', ' + arr[5] + ' ' + arr[3];
        var current_date = new Date();
        var parsed_date = Date.parse(str) - current_date.getTimezoneOffset() * 60 * 1000;
        return new Date(parsed_date);
    },
    fullDate: function(date) {
        return date.getFullYear() + '-' + (date.getMonth() >= 9 ? '' : '0') + (date.getMonth() + 1) + '-' + (date.getDate() > 9 ? '' : '0') + date.getDate() + ' ' + (date.getHours() > 9 ? '' : '0') + date.getHours() + ':' + (date.getMinutes() > 9 ? '' : '0') + date.getMinutes();
    },
    readableDate: function(date) {
        var parsed_date = date.valueOf();
        var current_date = new Date();
        var past_seconds = parseInt((current_date.getTime() - parsed_date) / 1000);
        if (past_seconds < 60) {
            return past_seconds + ' 秒前';
        } else if (past_seconds < 60 * 60) {
            return (parseInt(past_seconds / 60)).toString() + ' 分钟前';
        } else if (past_seconds < 60 * 60 * 24) {
            return '约 ' + (parseInt(past_seconds / 3600)).toString() + ' 小时前';
        } else {
            return this.fullDate(date);
        }
    },
    createName: function(obj) {
        var name = document.createElement('a');
        name.href = obj.url;
        name.title = obj.name;
        name.target = '_blank';
        name.appendChild(document.createTextNode(obj.screen_name));
        return name;
    },
    createText: function(obj) {
        return document.createTextNode(obj.text);
    },
    createStamp: function(obj) {
        var stamp = document.createElement('a');
        var date = this.getDate(obj.created_at);
        stamp.appendChild(document.createTextNode(this.readableDate(date)));
        stamp.href = 'http://fanfou.com/statuses/' + obj.id;
        stamp.className = 'stamp';
        stamp.title = this.fullDate(date);
        stamp.target = '_blank';
        return stamp;
    },
    createMe: function() {
        var stamp = document.createElement('a');
        stamp.appendChild(document.createTextNode(" FanFou"));
        stamp.href = 'http://fanfou.com/yoki';/*注释：此处"vich"为饭否帐户名，可更换成你自己的饭否帐户名*/
        stamp.className = 'stamp';
        stamp.target = '_blank';
        return stamp;
    },
    createLink: function() {
        var item = document.createElement('li');
        var link = document.createElement('a');
        link.appendChild(document.createTextNode('更多消息'));
        switch (this.timeline) {
            case 'user':
                link.href = 'http://fanfou.com/' + this.name;
                break;
            case 'friends':
                link.href = 'http://fanfou.com/message/' + this.name;
                break;
            case 'public':
                link.href = 'http://fanfou.com/browse';
        break;
            default:break;
        }
        link.title = '饭否';
        link.target = '_blank';
        item.appendChild(link);
        return item;
    },
    createBrand: function() {
        var brand = document.createElement('p');
        var link = document.createElement('a');
        link.href = 'http://fanfou.com/';
        link.title = '饭否';
        link.target = '_blank';
        var img = document.createElement('img');
        img.src = 'http://static.fanfou.com/img/brand.gif';
        img.alt = '饭否';
        link.appendChild(img);
        brand.appendChild(link);
        return brand;
    },
    statuses: function(obj) {
        if (obj.length == 0) return false;
        switch (this.timeline) {
            case 'user'://你自己的消息
                var container_name = 'fanfou_statuses_user' + obj[0].user.id;
                if (!document.getElementById(container_name)) {
                    document.write('<div id="' + container_name +'" class="fanfou_statuses"></div>');
                }
                var container = document.getElementById(container_name);
                var statuses = document.createElement('ul');
                for (var i=0; i<obj.length; i++){
                    var status = document.createElement('li');
                    //status.appendChild(document.createTextNode('微风：'));/*注释：此处“微风：”为发言人的称呼，可更换你自己喜欢的*/
                    status.appendChild(this.createText(obj[i]));
                    status.appendChild(document.createTextNode(' '));
                    status.appendChild(this.createStamp(obj[i]));
                    status.appendChild(document.createTextNode(' via'));/*注释：用于显示底部更多消息链接，删除此行将不显示。*/
                    status.appendChild(this.createMe());//*用于显示底部饭否链接，删除此行将不显示。
                    statuses.appendChild(status);
                }
                break;
            case 'friends'://你和你朋友的消息
                var container_name = 'fanfou_statuses_friends';
                if (!document.getElementById(container_name)) {
                    document.write('<div id="' + container_name +'" class="fanfou_statuses"></div>');
                }
                var container = document.getElementById(container_name);
                var statuses = document.createElement('ul');
                for (var i=0; i<obj.length; i++){
                    var status = document.createElement('li');
                    status.appendChild(this.createName(obj[i]));
                    status.appendChild(document.createTextNode('：'));
                    status.appendChild(this.createText(obj[i].status));
                    status.appendChild(document.createTextNode(' '));
                    status.appendChild(this.createStamp(obj[i].status));
                    statuses.appendChild(status);
                }
                break;
            case 'public': //所有人的消息
                var container_name = 'fanfou_statuses_public';
                if (!document.getElementById(container_name)) {
                    document.write('<div id="' + container_name +'" class="fanfou_statuses"></div>');
                }
                var container = document.getElementById(container_name);
                var statuses = document.createElement('ul');
                for (var i=0; i<obj.length; i++){
                    var status = document.createElement('li');
                    status.appendChild(this.createName(obj[i].user));
                    status.appendChild(document.createTextNode('：'));
                    status.appendChild(this.createText(obj[i]));
                    status.appendChild(document.createTextNode(' '));
                    status.appendChild(this.createStamp(obj[i]));
                    statuses.appendChild(status);
                }
                break;
            default:break;
        }
        container.appendChild(statuses);
    },
    createStatuses: function(sObjName) {
        switch (this.timeline) {
            case 'user':
                document.write('<script type="text/javascript" charset="utf-8" src="' + this.server + '/statuses/user_timeline/' + this.name + '.json?cb=' + sObjName + '.statuses&amp;c=' + this.count + '"></' + 'script>');
                break;
            case 'friends':
                document.write('<script type="text/javascript" charset="utf-8" src="' + this.server + '/statuses/friends_timeline/' + this.name + '.json?cb=' + sObjName + '.statuses&amp;c=' + this.count + '"></' + 'script>');
                break;
            case 'public':
                document.write('<script type="text/javascript" charset="utf-8" src="' + this.server + '/statuses/public_timeline.json?cb=' + sObjName + '.statuses&amp;c=' + this.count + '"></' + 'script>');
                break;
            default:break;
        }
    }
};
ffstatuses = new fanfou.Timeline();
ffstatuses.createStatuses('ffstatuses');
