﻿function errHandler(code){
    alert(Errors[code]);
    
}
function toArray(o){
    if(o){
        if(o instanceof Array) return o;
        else return [o];
    }
    return [];
}
removeNode = isIE ? function(){   
    var d;
    var objs,io,lo;   
    return function(n, all){   
        if(n && n.tagName != 'BODY'){
            /**首先移除object对象再删除其他**/  
            objs = n.getElementsByTagName('OBJECT');   
            lo = objs.length;   
            for(  io = 0; io < lo ; io++ ){   
                objs[0].parentNode.removeChild(objs[0]);   
            }
            if(!all){
                n.parentNode.removeChild(n);
                return;
            }
            d = d || document.createElement('div');   
            d.appendChild(n);
            d.innerHTML = '';   
        }   
    }   
}() : function(n){
    if(n && n.parentNode && n.tagName != 'BODY'){   
        n.parentNode.removeChild(n);   
    }   
}
        
var ExpoChartRoom = function(render){
    this.render = $(render);
}
ExpoChartRoom.prototype = {
    autoScroll: true,
    start: function(livepath, chartTime, success, fail){                     
        //最大的会话ID: this.chartID, 修改次数: modc
        this.chartID = -1, this.modc = -1;
        
        this.config = {
            livepath: livepath,
            chartTime: chartTime,
            success: success,
            fail: fail
        }        
        
        this.chartTimer = this.doChart.time(chartTime, this, [false], true);
    },
    stop: function(){
        clearInterval(this.chartTimer);
    },
    doChart: function(all){            
        var ct = this.render;
        
        livepath = this.config.livepath;
        chartTime = this.config.chartTime;
        success = this.config.success;
        fail = this.config.fail;
    
        var url = 'live.json';
        if(this.chartID == -1 || all === true){
            url = 'all.json';
        }
        
        if(all === true) ct.innerHTML = '';
        
        url = livepath + url;
        
        Expo.util.Ajax.request({
            url: url,
            type: 'get',
            onSuccess: this.onChartCallback.bind(this)
        }); 
    }, 
    onChartCallback: function(text){
        var ct = this.render;
        
        livepath = this.config.livepath;
        chartTime = this.config.chartTime;
        success = this.config.success;
        fail = this.config.fail;
    
        //var o = Expo.util.Json.decode(text);        
        //text = text.replace(/\n/ig, '<br/>');
        var o = eval('('+text+')')
        
        if(success) success(o);
        
        
        //status = modc +":"+ o.modc;
        if(this.modc==-1){
            this.modc = o.modc;
        }else if(this.modc < o.modc){        //如果修改次数小于新的修改次数, 则刷新全部                    
            this.modc = o.modc;
            this.modify = true;//标记下次刷新, 如果有重复ID的节点, 删除并新增
            this.doChart(true);
            return;
        }                    
        
        //得到直播文字数组
        var charts = toArray(o.texts);
        charts.reverse();
        
        if(charts.length == 0) return;
        
//        if(typeof dddd == 'undefined'){
//            debugger
//            dddd = 2;
//        }
        
        //记录本次会话的最小和最大ID
        var minID = maxID = -1;
        for(var i=0,l=charts.length; i<l; i++){
            var c = charts[i];
            var id = parseInt(c.id);
            
            var d = document.getElementById('expolive_'+id);
            if(d && this.modify) {                
                removeNode(d, true);
                d = null;
            }
            
            c.content = unescape(c.content);
            var text = c.content;
            try{
                var o = eval('('+HTMLDecode(c.content)+')');
                if(o){
                    text = '<div style="color:'+o.color+';">'+HTMLEncode(o.text)+'</div>';
                    if(o.images){
                        for(var j=0,k=o.images.length; j<k; j++){
                            text += '<img src="'+o.images[j]+'"/>';
                        }
                    }
                }else{
                    text = c.content;
                }
            }catch(e){
            }                                                                     
            
            var html = '<div style="width:520px;float:left;"><div style="float:left;width:60px;overflow:hidden;font-size:12px;">['+c.time+']</div><div style="float:right;width:455px;overflow:auto;white-space:normal; word-break:break-all;">'+text+'</div></div>';
            //var html ='<div style="width:450px;float:left;overflow:auto;"><div style="float:left;width:55px;overflow:hidden;">['+c.time+']</div><div style="float:right;width:380px;word-wrap:break-word;">'+text+'</div></div><div class="action" style="width:70px;float:right;"><a href="javascript:edittext('+id+')">编辑</a> <a href="javascript:deltext('+id+')">删除</a></div>';
            if(!d){            
                Expo.util.Dom.append(ct, '<div id="expolive_'+id+'" class="chatinfo">'+html+'</div>');
            }
            
            if(i == 0){
                minID = maxID = id;
            }else{
                minID = Math.min(minID, id);
                maxID = Math.max(maxID, id);
            }
            
        }
        
        if(this.chartID != maxID && this.autoScroll){
            ct.scrollTop = ct.scrollHeight;
        }
        
        if(this.chartID == -1){  //如果是第一次会话
            this.chartID = maxID;                                                                    
        }else{
            if(this.chartID < minID){    //如果小于live.json的最小id,则需要从all取
                this.doChart(true);
            }else{  
                this.chartID = maxID;    //记录最大的会话ID
            }
        }
        
        this.modify = false;
    }
}/*  |xGv00|dc858816b8223c72b3db148c0bb30f4d */
