﻿

//TD单元元格闪烁背景效果
function refreshtd(tdobj, refreshtype) {
    var i = 1;
    var setval;

    var Refresh = function() {
        i++;

        if (tdobj.style.backgroundColor == "") {
            if (tdobj.hasChildNodes("span")) {
                var span = tdobj.getElementsByTagName("span")[0];
                if (refreshtype == "up") {
                    tdobj.style.backgroundColor = "#FFE1E1";
                    span.innerHTML = "↑" + span.innerHTML.replace("↑", "").replace("↓", "");
                }
                else if (refreshtype == "down") {
                    tdobj.style.backgroundColor = "#D7F2DC";
                    span.innerHTML = "↓" + span.innerHTML.replace("↑", "").replace("↓", "");
                }
            }
        }
        else
            tdobj.style.backgroundColor = "";

        if (i > 5) {
            if (setval) {
                clearInterval(setval);
            }
        }
    }

    setval = setInterval(function() { Refresh(); }, 300);
}

//将JSON格式的股票数据，加载为Table表格，并显示在divobj中
function loadstocklist(divobj, stockjson, eleid) {

    this.LoadData = function() {
        var tableobj;
        if (divobj.hasChildNodes("table")) {
            this.RefreshTable();
        }
        else {
            this.LoadTable();
        }
    };

    //刷新表
    this.RefreshTable = function() {
        if (!/*@cc_on!@*/0)
            this.CreateMaskDiv();

        var tableobj = divobj.getElementsByTagName("table")[0];

        var jsonkeylist = JsonKeyArray();

        var trlist = tableobj.getElementsByTagName("tr");
        for (var i = 0; i < trlist.length; i++) {
            var tdlist = trlist[i].getElementsByTagName("td");
            if (jsonkeylist.length == tdlist.length) {
                for (var j = 0; j < jsonkeylist.length; j++) {
                    if (jsonkeylist[j] != "Code" && jsonkeylist[j] != "StockNews" && jsonkeylist[j] != "Name") {
                        var oldvalue;  //单元格中原来的值
                        if (jsonkeylist[j] == "ZhanDieFu")
                            oldvalue = tdlist[j].innerHTML.replace(/<[^>].*?>/g, "").replace("%", "").replace("+", "");
                        else if (jsonkeylist[j] == "CurPrice")
                            oldvalue = tdlist[j].innerHTML.replace(/<[^>].*?>/g, "").replace("↑", "").replace("↓", "");
                        else
                            oldvalue = tdlist[j].innerHTML.replace(/<[^>].*?>/g, "");

                        //如果原单元格的值不等于JSON数据对应的值
                        if (oldvalue != stockjson.StockData[i - 1][jsonkeylist[j]]) {
                            tdlist[j].innerHTML = "";
                            InnerHtmlToTd(tdlist[j], jsonkeylist[j], i - 1, j);
                            if (jsonkeylist[j] == "CurPrice") {
                                tdlist[j].style.backgroundColor = "";
                                var lighttd;
                                if (parseFloat(oldvalue) > parseFloat(stockjson.StockData[i - 1][jsonkeylist[j]])) //表示下降
                                    lighttd = new refreshtd(tdlist[j], "down");
                                else  //表示上升
                                    lighttd = new refreshtd(tdlist[j], "up");
                            }
                        }
                        else {
                            if (jsonkeylist[j] == "CurPrice") {
                                tdlist[j].style.backgroundColor = "";
                                if (tdlist[j].hasChildNodes("span")) {
                                    var span = tdlist[j].getElementsByTagName("span")[0];
                                    span.innerHTML = span.innerHTML.replace("↑", "").replace("↓", "");
                                }
                            }
                        }
                    }
                }
            }
        }

    };

    //添加遮罩层
    this.CreateMaskDiv = function() {
        var mask = document.createElement("div");
        mask.className = "mask";
        
        var maskdiv = document.createElement("div");
        maskdiv.className = "maskbg";
        maskdiv.style.width = divobj.offsetWidth + "px";
        maskdiv.style.height = divobj.offsetHeight + "px";
        if (/*@cc_on!@*/0)
            maskdiv.style.marginTop = divobj.offsetTop + "px";
        mask.appendChild(maskdiv);

        var maskspan = document.createElement("span");
        maskspan.className = "maskspan";
        maskspan.innerHTML = "正在加载...";
        maskspan.style.top = (divobj.offsetHeight / 2 - 20) + "px";
        maskspan.style.left = (divobj.offsetWidth / 2 - 60) + "px";
        mask.appendChild(maskspan);

        divobj.appendChild(mask);

        setTimeout(function() { divobj.removeChild(mask); }, 500);
    }
    
    //创建表
    this.LoadTable = function() {
        var tableobj = document.createElement("table");

        tableobj.setAttribute("id", "stocktable" + eleid);
        tableobj.appendChild(CreateTitle());
        var trarray = CreateTr();
        for (var i = 0; i < trarray.length; i++) {
            tableobj.appendChild(trarray[i]);
        }

        divobj.appendChild(tableobj);

        //为IE特别处理
        divobj.innerHTML += "";
    };

    //创建表头
    var CreateTitle = function() {
        var trtitle = document.createElement("tr");
        var titlelist;
        switch (stockjson.ListType) {
            case 0:
                titlelist = new Array("股票代码", "股票简称", "价格", "涨跌幅");
                break;
            case 1:
                titlelist = new Array("股票代码", "走势资讯", "股票简称", "价格", "涨跌幅", "涨跌");
                break;
            case 2:
                titlelist = new Array("股票代码", "走势资讯", "股票简称", "价格", "涨跌幅", "涨跌", "现量", "总量", "金额");
                break;
            case 3:
                titlelist = new Array("股票代码", "走势资讯", "股票简称", "价格", "涨跌幅", "涨跌", "买入价", "卖出价", "现量", "总量", "金额", "今开", "昨收", "最高", "最低");
                break;
            default:
                titlelist = new Array("股票代码", "股票简称", "价格", "涨跌幅", "涨跌");
                break;
        }

        for (var i = 0; i < titlelist.length; i++) {
            var th = document.createElement("th");
            th.innerHTML = titlelist[i];
            th.style.textAlign = "center";
            trtitle.appendChild(th);
        }
        
        return trtitle;
    };

    //获取JSON数据KEY的数组
    var JsonKeyArray = function() {
        var dataindex;
        switch (stockjson.ListType) {
            case 0:
                dataindex = new Array("Code", "Name", "CurPrice", "ZhanDieFu");
                break;
            case 1:
                dataindex = new Array("Code", "StockNews", "Name", "CurPrice", "ZhanDieFu", "ZhanDie");
                break;
            case 2:
                dataindex = new Array("Code", "StockNews", "Name", "CurPrice", "ZhanDieFu", "ZhanDie", "CurTotal", "Total", "TotalPrice");
                break;
            case 3:
                dataindex = new Array("Code", "StockNews", "Name", "CurPrice", "ZhanDieFu", "ZhanDie", "InPrice", "OutPrice", "CurTotal", "Total", "TotalPrice", "TodayPrice", "YestodayPrice", "HighestPrice", "LowestPrice");
                break;
            default:
                dataindex = new Array("Code", "Name", "CurPrice", "ZhanDieFu", "ZhanDie");
                break;
        }
        return dataindex;
    };

    //创建表格行
    var CreateTr = function() {
        var dataindex = JsonKeyArray();

        var trlist = new Array(stockjson.StockData.length);
        for (var i = 0; i < stockjson.StockData.length; i++) {
            var tr = document.createElement("tr");
            for (var j = 0; j < dataindex.length; j++) {
                var td = document.createElement("td");
                InnerHtmlToTd(td, dataindex[j], i, j);
                tr.appendChild(td);
            }
            trlist[i] = tr;
        }
        return trlist;
    };

    //往单元格里插入数据
    var InnerHtmlToTd = function(td, jsonkey, trindex, jsonindex) {
        td.style.padding = "4px";
        if (jsonkey == "StockNews") {
            td.appendChild(CreateLink("股吧", "http://guba.eastmoney.com/" + stockjson.StockData[trindex]["Code"] + ",guba.html"));
            td.innerHTML += "&nbsp;&nbsp;";
            td.appendChild(CreateLink("资讯", "http://so.eastmoney.com/Search.aspx?q=" + stockjson.StockData[trindex]["Code"] + " " + stockjson.StockData[trindex]["Name"] + "&t=body"));
            td.innerHTML += "&nbsp;&nbsp;";
            td.appendChild(CreateLink("档案", "http://quote3.eastmoney.com/f10.asp?StockCode=" + stockjson.StockData[trindex]["Code"] + "&stock_name=" + stockjson.StockData[trindex]["Name"] + "&f10=001"));
        }
        else {
            if (jsonkey == "Code" || jsonkey == "Name") {
                td.appendChild(CreateLink(stockjson.StockData[trindex][jsonkey], "http://quote.eastmoney.com/" + stockjson.StockData[trindex]["Code"] + ".html"));
            }
            else if ((jsonindex >= 2 && jsonindex <= 5 && jsonkey != "Name") || (jsonindex == 13 || jsonindex == 14)) {
                if (jsonkey == "ZhanDieFu") {
                    td.appendChild(CreateColorSpan(stockjson.StockData[trindex]["ZhanDie"], (parseFloat(stockjson.StockData[trindex][jsonkey]) > 0 ? "+" : "") + stockjson.StockData[trindex][jsonkey] + "%"));
                }
                else if (jsonindex == 13 || jsonindex == 14) {
                    td.appendChild(CreateColorSpan((parseFloat(stockjson.StockData[trindex][jsonkey]) - parseFloat(stockjson.StockData[trindex]["YestodayPrice"])).toString(), stockjson.StockData[trindex][jsonkey]));
                }
                else {
                    td.appendChild(CreateColorSpan(stockjson.StockData[trindex]["ZhanDie"], stockjson.StockData[trindex][jsonkey]));
                }
            }
            else {
                td.innerHTML = stockjson.StockData[trindex][jsonkey];
            }
        }

        if (jsonindex >= 2 && jsonkey != "Name") {
            if (jsonkey == "ZhanDieFu") {
                td.style.fontWeight = "bold"; td.style.textAlign = "center";
            }
            else if (jsonkey != "CurPrice" && jsonkey != "ZhanDie") {
                td.style.textAlign = "right";
            }
            else {
                if (jsonkey == "CurPrice") td.style.width = "60px";
                td.style.textAlign = "center";
            }
        }
        else {
            td.style.textAlign = "center";
        }
    };

    var CreateLink = function(txt, url) {
        var a = document.createElement("a");
        a.innerHTML = txt; a.setAttribute("href", url);
        a.setAttribute("target", "_blank"); 
        return a;
    };

    var CreateColorSpan = function(curprice, cont) {
        var span = document.createElement("span");
        if (curprice.indexOf("-") == 0) {
            span.style.color = "#090";
        }
        else {
            if (parseFloat(cont) == 0) {
                span.style.color = "#000";
            }
            else {
                span.style.color = "#f00";
            }
        }
        span.innerHTML = cont;
        return span;
    };

    this.LoadData();
}
