/** 
 * painter.js
 * Hiper Ochinchin Time Simulator 
 * Author: at-akada
 * nightly[atmark]at-akada.org
 * 2008.02.28-
 *
 */

var Painter = new Class();
Class.extend(Painter.prototype,{
    'initialize': function(simulator){
        this.simulator = simulator;
        this.bbs = this.simulator.bbs;
        this.board = $('board');
        this.preview = $('wordPreview');
        this.console = $('console').getElementsByTagName('ul')[0];
        this.constructor.instance = this;
        this.previewText = "";
        this.ui = UI;
        this.form = Form;
        Form.initialize(this);
    },
    'clear': function(){
        this.initBoard();
        this.previewText = "";
    },
    'makeBoardTitle': function(){
        var words = Config.word.match(/./g);
        var title = words.join("→");
        title += " 完成で";
        title += Config.whenComplete;
        return title;
    },
    'initBoard': function(){
        while(this.board.firstChild)
            this.board.removeChild(this.board.firstChild);
        var h2 = document.createElement('h2');
        h2.innerHTML = this.makeBoardTitle();
        this.board.appendChild(h2);
        this.preview.innerHTML = "";
        this.console.innerHTML = "";
    },
    'updatePreview': function(char){
        if(this.previewText == ""){
            this.previewText = char;
            this.preview.innerHTML = char;
        }
        else{
            this.previewText += char;
            this.preview.innerHTML += "→" + char;
        }
    },
    'updateConsole': function(msg){
        var text = "「" + msg.body + "」: ";
        text += msg.author.isAnti ? 
            "敵対的エージェント "
            : "友好的エージェント ";
        text += "ID:" + msg.author.id
        + "の書き込み [間隔";
        text += msg.author.interval
        text += "]";
        var li = HTML.create('li',null,
            HTML.create('#text',text));
        this.console.appendChild(li);
    },
    'makeOneMessage': function(msg){
        var header = msg.header;
        var headerText = header.count + "："
            + "<font color=green><b>" + header.name + "</b></font>"
            + "：" + header.date + " ID：" + header.id;
        var headerHTML = document.createElement('dt');
        headerHTML.innerHTML = headerText;
        var bodyText = " " + msg.body + " <br /><br />";
        var bodyHTML = document.createElement('dd');
        bodyHTML.innerHTML = bodyText;
        var dl = document.createElement('dl');
        dl.appendChild(headerHTML);
        dl.appendChild(bodyHTML);
        this.board.appendChild(dl);
        this.updatePreview(msg.body);
        this.updateConsole(msg);
    },
    'updateBoard': function(){
        var prgMsgs = this.bbs.messages;
        var htmlMsgs = this.board.getElementsByTagName('dt');
        if(prgMsgs.length > htmlMsgs.length){
            var n = prgMsgs.length - htmlMsgs.length;
            while(n > 0){
                this.makeOneMessage(prgMsgs[prgMsgs.length-n]);
                n--;
            }
        }
    },
    'stop': function(success){
        this.ui.buttonOpen();
        if(success)
            Component.show(Config.whenComplete + "突入！");
    }
});

