﻿// JScript File

//Các biến dùng cho toàn chương trình
var ipageSize, iContentStartRow, iStockRow, iStockColumn;
var iHeaderNum, iContentNum, imaxRow, iBuyRow, iSellRow, iMatchRow, aDu_Mua, aDu_Ban, aKhop_Lenh, aLiveTotal;
//ipageSize: số chứng khoán sẽ cho hiện trên bảng (thông thường là 20)
//bFirstTime: dạng bool, xem đây có phải là lần gọi đầu tiên không
//iContentStartRow: chỉ thứ tự của dòng bắt đầu được hiện trong mảng các CK động
//(vì không thể hiện hết tất cả các CK cùng một lúc
//iStockRow: Số dòng của bảng CK, tức là số CK
//iStockColumn: số cột của bảng CK, tức là số thuộc tính của một CK
//iHeaderNum: số CK cố định
//iContentNum: số CK động

var aHeaderStock, aContentStock, aLiveSecurity, aLastSecurity, aTempSecurity, aHeaderList, aContentList;
var aCompanyName;
//aHeaderStock: mảng các CK cố định (mảng 2 chiều)
//aContentStock: mảng các CK động (mảng 2 chiều)
//aLiveSecurity: mảng tất cả các CK hiện tại(mảng 2 chiều)
//aLastSecurity: mảng tất cả các CK lần trước(mảng 2 chiều)
//aTempSecurity: mảng các CK (một chiều)
//aHeaderList và aContentList là 1 mảng một chiều, chứa thứ tự của các CK động và tĩnh

var iContentStartRow = 0; //Dòng bắt đầu hiện trong mảng Content
var iDotNumber = 1; //Hiện đang là đợt mấy
var iTableCol = 23;
var iMKTCol = 9;
var sTime = '';
var bTrading = true;
var iPhien;

//Các mầu cho bảng giá, khai báo một lần
var sGreen = '#33ff00';
var sRed = '#fb0000';
var sYellow = 'yellow';
var sViolet = '#ff00ff';
var sBlue = '#33ffff';

var _timerMKT = null;
var _timerSec = null;

var sSecurity = "";
var sTotalMKT = "";
var sPut_throught = "";

var bFirstSec = true; var bFirstPut = true; var iTime = 0; var bFirstTime = true; var bFirstOnline = true;

setInterval('TotalMKTData()', 15000);
setInterval('TotalSecData()', 10000);
setInterval('fPUT_THROUGHT()', 60000);
setInterval('fUserOnline()', 15000);
setInterval('fGoToNextPage()', 30000);
setInterval('fReload()', 300000);

function fGoToNextPage()
{
    if (bFirstSec == false)
    {
        //Cho dòng bắt đầu tăng lên
        iContentStartRow = iContentStartRow + ipageSize - iHeaderNum;
    }
}

function fReload()
{
//    alert("reload");
//    window.location.reload();
    bFirstSec = true;
    proxies.HoSTC_Service.GetLiveSecurity.func = myResultSec;
    proxies.HoSTC_Service.GetLiveSecurity(bFirstSec);
}

//========================================================================================================
function fUserOnline()
{
    if (proxies.IsActive())
    {
        _timerSec = window.setTimeout(fUserOnline, 300, "javascript");
        return;
    }
    proxies.HoSTC_Service.fUserOnline.func = myUserOnline;
    proxies.HoSTC_Service.fUserOnline(bFirstOnline);
}

function myUserOnline(sResult)
{
    document.getElementById("online").innerHTML = "Số người đang online: " + sResult;
    bFirstOnline = false;
}

//======================Phần này trả ra một mảng 2 chiều thông tin về tên của tất cả các CK============
function fStockRoom()
{
    if (proxies.IsActive())
    {
        _timerSec = window.setTimeout(fStockRoom, 300, "javascript");
        return;
    }
    proxies.HoSTC_Service.fGetSTOCKROOM.func = myResultStock_Room;
    proxies.HoSTC_Service.fGetSTOCKROOM();
}

function myResultStock_Room(retVal)
{
    var aTemp = new Array();
    var i;
    
    aTemp = retVal.split('**');
    aCompanyName = new Array(aTemp.length);
    for (i = 0; i < aTemp.length; i++)
    {
        aCompanyName[i] = new Array(2);
        aCompanyName[i] = aTemp[i].split('|');
    }
}

//=============================================Hiện giao dịch thỏa thuận==================================
function fPUT_THROUGHT()
{
    
	//alert('cc');
	if (proxies.IsActive())
    {
        _timerSec = window.setTimeout(fPUT_THROUGHT, 300, "javascript");
        return;
    }
   // alert(bFirstPut);
   // if (bFirstPut == false)
   // {
   //     return;
   // }
    
    proxies.HoSTC_Service.fPUT_THROUGHT.func = myResultPUT_THROUGHT;
    proxies.HoSTC_Service.fPUT_THROUGHT();
	//alert('dd');
}

function myResultPUT_THROUGHT(Result)
{
    if ((Result == null) || (Result == '')) {return;}
    var i, j;
    var iKL = 0;
    var iGT = 0;
    
    //Biến tham số đầu vào thành một chuỗi
    var sTempResult = Result + '';
    sPut_throught = sTempResult;
    
    //Mảng chứa kết quả của 3 bảng (mảng 3 ptu, mỗi ptu là 1 chuỗi)
    var aTemp = new Array(3);
    aTemp = sTempResult.split('***');
    if (aTemp == null || aTemp.length == 0) {return;}
    
    //Mảng thông tin của các CK dư mua, mỗi CK và các tt của nó là 1 chuỗi, là 1 ptu
    var aTemp0 = new Array();
    aTemp0 = aTemp[0].split('**');
    iBuyRow = aTemp0.length;
    
    //Mảng 2 chiều chứa thông tin về CK dư mua
    aDu_Mua = new Array(aTemp0.length);
    for (i = 0; i < aTemp0.length; i++)
    {
        aDu_Mua[i] = new Array(3);
        aDu_Mua[i] = aTemp0[i].split('|');
    }

    //Mảng thông tin của các CK khớp lệnh, mỗi CK và các tt của nó là 1 chuỗi, là 1 ptu
    var aTemp1 = new Array();
    aTemp1 = aTemp[1].split('**');
    iMatchRow = aTemp1.length;
    
    //Mảng 2 chiều chứa thông tin về CK khớp lệnh
    aKhop_Lenh = new Array(aTemp1.length);
    for (i = 0; i < aTemp1.length; i++)
    {
        aKhop_Lenh[i] = new Array(3);
        aKhop_Lenh[i] = aTemp1[i].split('|');
        try
        {
            iKL = iKL + parseFloat(aKhop_Lenh[i][2]);
            iGT = iGT + (parseFloat(aKhop_Lenh[i][2]) * parseFloat(aKhop_Lenh[i][1]) / 1000000);
        }
        catch (err)
        {
            iKL = 0;
            iGT = 0;
        }
    }
    
    //Mảng thông tin của các CK dư bán, mỗi CK và các tt của nó là 1 chuỗi, là 1 ptu
    var aTemp2 = new Array();
    aTemp2 = aTemp[2].split('**');
    iSellRow = aTemp2.length;
    
    //Mảng 2 chiều chứa thông tin về CK dư bán
    aDu_Ban = new Array(iSellRow);
    for (i = 0; i < aTemp2.length; i++)
    {
        aDu_Ban[i] = new Array(3);
        aDu_Ban[i] = aTemp2[i].split('|');
    }
    
    //Số dòng của 3 bảng bằng số dòng lớn nhất
    imaxRow = Math.max(iBuyRow, iSellRow);
    imaxRow = Math.max(iMatchRow, imaxRow);

    fCreateTable("tblPut_Mua", aDu_Mua);
    fCreateTable("tblPut_Khop" , aKhop_Lenh);
    fCreateTable("tblPut_Ban", aDu_Ban);
    
    bFirstPut = false;
    
    if (iKL > 0)
    {
        document.getElementById("Thoathuan").innerHTML = '<span style="color: white ; font-weight: bold;">' + "Tổng KLGD thỏa thuận: " +'<span style="color: yellow ; font-weight: bold;">'+ fFormatVolume(iKL) + '<span style="color: white ; font-weight: bold;">' + " CK -------- Tổng GTGD thỏa thuận: " + '<span style="color: yellow ; font-weight: bold;">'+ fFormatVolume(iGT) + '<span style="color: white ; font-weight: bold;">'+ " tỉ VND";
    }
}

function fCreateTable(sTenBang, aMang)
{
    var sPrefix = '<span style="color:#33ff00;">';
    var sSuffix = '<span/>';
    var i, j, iTableRowNum, oTable, oRow, oCell;
    var aTemp = new Array(3);
    
    oTable = document.getElementById(sTenBang);
    iTableRowNum = oTable.rows.length;
    
    for (i = 0; i < aMang.length; i++)
    {
        fCopyArray(aMang[i], aTemp);
        if (i + 2 < iTableRowNum)
        {
            oRow = oTable.rows[i + 2];
            for (j = 0; j < 3; j++)
            {
                oCell = oRow.cells[j];
                switch (j)
                {
                    case 0: case 3: case 6:
                        oCell.innerHTML = sPrefix + aTemp[j] + sSuffix;
                        break;
                    case 1: case 4: case 7:
                        oCell.innerHTML = sPrefix + fTruncNumber(aTemp[j], 1) + sSuffix;
                        break;
                    case 2: case 5: case 8:
                        oCell.innerHTML = sPrefix + fFormatVolume(aTemp[j]) + sSuffix;
                        break;
                }
            }
        }
        else
        {
            oRow = oTable.insertRow(i + 2);
            oRow.className = fGetClassName(-1, i + 2);
            for (j = 0; j < 3; j++)
            {
                oCell = oRow.insertCell(j);
                
                switch (j)
                {
                    case 0: case 3: case 6:
                        oCell.innerHTML = sPrefix + aTemp[j] + sSuffix;
                        oCell.className = fGetClassName(0, i + 2);
                        break;
                    case 1: case 4: case 7:
                        oCell.innerHTML = sPrefix + fTruncNumber(aTemp[j], 1) + sSuffix;
                        oCell.className = fGetClassName(1, i + 2);
                        break;
                    case 2: case 5: case 8:
                        oCell.innerHTML = sPrefix + fFormatVolume(aTemp[j]) + sSuffix;
                        oCell.className = fGetClassName(1, i + 2);
                        break;
                }
            }
        }
    }
    
    if (oTable.rows.length < imaxRow + 2)
    {
        for (i = oTable.rows.length; i < imaxRow + 2; i++)
        {
            oRow = oTable.insertRow(i);
            oRow.className = fGetClassName(-1, i + 2);
            oRow.height = 22;
            for (j = 0; j < 3; j++)
            {
                oCell = oRow.insertCell(j);
                oCell.className = fGetClassName(1, i + 2);
                oCell.innerHTML = '<span style="background-color: black; color: #33ff00;"> </span>';
            }
        }
    }
    else
    {
        while (oTable.rows.length < imaxRow + 2)
        {
            oTable.deleteRow(oTable.rows.length - 1);
        }
    }
}


function fGetClassPut(i, j)
{
    if (Math.ceil(i / 2) == (i / 2)) //hang` chan
    {
        switch (j)
        {
            case 0: case 3: case 6:
                return "EvenRowCKPut";
                break;
            case 1: case 2: case 4: case 5: case 7: case 8:
                return "EvenRowPut";
                break;
        }
    }
    else
    {
        switch (j)
        {
            case 0: case 3: case 6:
                return "OddRowCKPut";
                break;
            case 1: case 2: case 4: case 5: case 7: case 8:
                return "OddRowPut";
                break;
        }
    }
}


//================================================Phần hiện bảng giá====================================

// Hàm này được gọi từ trang HTML
function TotalSecData()
{
    if (proxies.IsActive())
    {
        _timerSec = window.setTimeout(TotalSecData, 300, "javascript");
        return;
    }
    
    if (bFirstSec == false && iTime > 111000)
    {
        myResultSec("0");
        return;
    }
    
    proxies.HoSTC_Service.GetLiveSecurity.func = myResultSec;
    proxies.HoSTC_Service.GetLiveSecurity(bFirstSec);
}

function myResultSec(retVal)
{
    myResultsSecurityData(retVal);
}


//Hàm này dùng để tạo ra hai mảng, chứa thứ tự của các CK động và tĩnh
function fCreateStockList()
{
    var i = 0, iHeader = 0, iContent = 0;
    var aChkBoxList = new Array();
    aChkBoxList = document.forms["form1"].ChkStock;
    
    if (aHeaderList != null)
    {
        aHeaderList.splice(0, aHeaderStock.length);
    }
    aHeaderList = new Array(iHeaderNum);
    
    if (aContentList != null)
    {
        aContentList.splice(0, aHeaderStock.length);
    }
    aContentList = new Array(iContentNum);
    
    for (i = 0; i < iStockRow; i++)
    {
        if (aChkBoxList[i].checked)
        {
            aHeaderList[iHeader] = new Array(iStockColumn);
            aHeaderList[iHeader] = i;
            iHeader++;
        }
        else
        {
            aContentList[iContent] = new Array(iStockColumn);
            aContentList[iContent] = i;
            iContent++;
        }
    }
    
    iHeaderNum = iHeader;
    iContentNum = iContent;
}


// Hàm thật sự xử lý chuỗi mà webservice trả về
function myResultsSecurityData(Result)
{
//    alert(Result);
    if ((Result ==  null) || (Result == '') || (Result == "1")) {return;}
    
    var i = 0, j = 0;
    var r, c, v;
    var aItemRow = new Array();
    var sCookie = '';
    
    //Biến tam thời để lưu chuỗi do webservice trả về
    var TempResult = Result + '';
    sSecurity = TempResult;
    //Mảng tạm một chiều, chứa thông tin của tất cả các CK
    aTempSecurity = new Array();
    
    if (bFirstSec)
    {
        aTempSecurity = TempResult.split("**");
        //Biến chung, chứa số lượng CK
        iStockRow = aTempSecurity.length;
    }
    
    if (bFirstSec) //Nếu là lần gọi đầu tiên
    {
        aLiveSecurity = new Array(iStockRow);
        aLastSecurity = new Array(iStockRow);
        
        //Câu lệnh for để copy thông tin của các CK vào mảng 2 chiều aLiveSecurity và aLastSecurity
        for (i = 0; i < iStockRow; i++)
        {
            aItemRow = aTempSecurity[i].split("|");
            aLiveSecurity[i] = new Array(aItemRow.length);
            aLastSecurity[i] = new Array(aItemRow.length);
            fCopyArray(aItemRow, aLiveSecurity[i]);
            fCopyArray(aItemRow, aLastSecurity[i]);
        }
        
        //Biến chung chứa số "thông tin" của một CK (VD: 20)
        iStockColumn = aItemRow.length;
        
        if (bTrading == true)
        {
            //Tạo ra các checkbox trên form dựa vào mảng 2 chiều aLiveSecurity
            fCreateChkStock(aLiveSecurity);
        }
        
        //Lay' ra Cookie cai' da
        sCookie = fGetCookie();
        
        //Neu' co' Cookie
        if ((sCookie.match("/") == "/") || (sCookie != ''))
        {
            var aCookie = sCookie.split('/');
            ipageSize = parseFloat(aCookie[aCookie.length - 1]);
            document.getElementById("txtPageSize").value = ipageSize.toString();
            
            //Check cac' CK ma` lan` truoc' user da chon
            var aChkBoxList = document.forms["form1"].ChkStock;
            for (i = 0; i < aChkBoxList.length; i++)
            {
                for (j = 0; j < aCookie.length - 1; j++)
                {
                    if (i == parseFloat(aCookie[j]))
                    {
                        aChkBoxList[i].checked = true;
                    }
                }
            }
            
            //Bo check mac dinh
            document.getElementById("ChkDefault").checked = false;
        }
        
        //Tạo ra hai mảng danh sách các CK động và tĩnh
        fCreateStockList();
    }
    
    else //Nếu không phải lần đầu thì ko cần khởi tạo mảng, copy luôn ttin vào aLiveSecurity
    {
        for (i = 0; i < iStockRow; i++)
        {
            fCopyArray(aLastSecurity[i], aLiveSecurity[i]);
        }
        
        if (Result != "0")
        {
            aTempSecurity = new Array();
            aTempSecurity = TempResult.split("**");
            for (i = 0; i < aTempSecurity.length; i++)
            {
                aItemRow = new Array();
                aItemRow = aTempSecurity[i].split("|");
                r = Math.floor(parseFloat(aItemRow[0]) / 24);
                c = parseFloat(aItemRow[0]) - 24 * r;
                v = aItemRow[1];
                aLiveSecurity[r][c] = v;
            }
        }
    }
    
    //Vòng lặp for, so sánh từng dòng của mảng aLiveSecurity và aLastSecurity (chủ yếu là aLastSecurity!)
    //Từ đó gán các thông tin dạng HTML vào mảng aLiveSecurity
    //Đồng thời copy mảng aLiveSecurity sang aLastSecurity để chuẩn bị cho lần gọi sau (mới trở thành cũ)
    for (i = 0; i < iStockRow; i++)
    {
        fCompareStock(aLastSecurity[i], aLiveSecurity[i]);
    }
    
    //Hàm tạo ra mảng động và tĩnh chứa ttin HTML, dựa vào aLiveSecurity (cũng HTML!)
    fCreateHeaderContentStock();
    
    //Hiện các CK cố định lên form
    fShowHeaderStock();
    
    //Hiện các CK động lên form
    fShowContentStock();
    
    //Từ nay không còn là lần đầu gọi nữa!
    bFirstSec = false;
    bTrading = false;
}


//Hàm đưa các CK cố định lên form
function fShowHeaderStock()
{
    if (aHeaderStock == null || aHeaderStock.length == 0) {return;}
    //Nếu số lượng CK cố định = 0 thì thoát luôn
    if (iHeaderNum == 0)
    {
        return;
    }
    
    var i = 0, j = 0;
    var dRow, dCell;
    var aHeaderRow = new Array(iStockColumn);
    var dTab = document.getElementById("tblBanggia");
    var imaxRow = dTab.rows.length;
    
    //Vòng lặp i chạy từ 0 đến số lượng CK cố định
    for (i = 0; i < iHeaderNum; i++)
    {
        //Copy hàng thứ i trong mảng CK cố định vào 1 mảng tạm
        fCopyArray(aHeaderStock[i], aHeaderRow);
        
        //Nếu dòng này trong bảng tblBanggia (trên form) có rồi
        if (i + 2 < imaxRow)
        {
            dRow = dTab.rows[i + 2];
            
            //Vòng lặp j từ 0 đến số "cột" của bảng tblBanggia (21)
            for (j = 0; j < iTableCol; j++)
            {
                dCell = dRow.cells[j];
                dCell.innerHTML = aHeaderRow[j];
            }
        }
        else //Nếu dòng này chưa có
        {
            //Insert một dòng mới
            dRow = dTab.insertRow(i + 2);
            dRow.onmouseover = function(){fHighLightRow(this);}
            dRow.onmouseout = function(){fNormalizeRow(this)}
            dRow.className = fGetClassName(-1, i);
            dRow.height = 20;
            
            //Cho số dòng của bảng tblBanggia tăng lên
            imaxRow = imaxRow + 1;
            
            //Vòng lặp từ 0 đến số cột của bảng tblBanggia
            for (j = 0; j < iTableCol; j++)
            {
                //Insert thêm một cell
                dCell = dRow.insertCell(j);
                dCell.className = fGetClassName(j, i);
                dCell.innerHTML = aHeaderRow[j];
			if(j==1||j==2||j==10||j==3 || j==11 || j==12||j==19||j==20||j==21)
            {
                dCell.bgColor="#404040";
				//dCell.innerHTML = aHeaderRow[j];
            }           

		   }
        }
    }
}


//Hàm đưa các CK dong lên form
function fShowContentStock()
{
    if (aContentStock == null || aContentStock.length == 0) {return;}
    var i = 0, j = 0;
    var dRow, dCell;
    var aContentRow = new Array(iStockColumn);
    var dTab = document.getElementById("tblBanggia");
    var imaxRow = dTab.rows.length;
    
    try
    {
        //Vòng lặp từ 0 đến số lượng CK động sẽ được hiển thị = tổng số CK hiển thị - số CK cố định
        for (i = 0; i < ipageSize - iHeaderNum; i++)
        {
            //iContentStartRow là thứ tự dòng đầu tiên trong mảng CK động sẽ dc hiển thị
            //nếu iContentStartRow + i vượt quá số lượng CK động thì
            if (i + iContentStartRow >= iContentNum)
            {
                iContentStartRow = 0;
                return;
            }
            
            //Copy hàng này vào mảng tạm
            fCopyArray(aContentStock[i + iContentStartRow], aContentRow);
            
            //Nếu dòng này trên bảng tblBanggia có rồi
            if (i + 2 + iHeaderNum < imaxRow)
            {
                dRow = dTab.rows[i + 2 + iHeaderNum];
                for (j = 0; j < iTableCol; j++)
                {
                    dCell = dRow.cells[j];
                    dCell.innerHTML = aContentRow[j];
                }
            }
            else //Còn nếu dòng này chưa có
            {
                //Insert một dòng mới
                dRow = dTab.insertRow(i + 2 + iHeaderNum);
                dRow.onmouseover = function(){fHighLightRow(this);}
                dRow.onmouseout = function(){fNormalizeRow(this);}
                dRow.className = fGetClassName(-1, i + iHeaderNum);
                dRow.height = 20;
                
                
                //Cho số dòng của bảng tblBanggia tăng lên 1
                imaxRow = imaxRow + 1;
                
                //Vòng lặp từ 0 đên số côt của bảng tblBanggia
                for (j = 0; j < iTableCol; j++)
                {
                    dCell = dRow.insertCell(j);
                    dCell.className = fGetClassName(j, i + iHeaderNum);
                    dCell.innerHTML = aContentRow[j];
					if(j==1||j==2||j==10||j==3 || j==11 || j==12||j==19||j==20||j==21)
						{
						dCell.bgColor="#313639";
				
						}  
						}
            }
        }
        
    //    //Cho dòng bắt đầu tăng lên
    //    iContentStartRow = iContentStartRow + ipageSize - iHeaderNum;
        
        while (dTab.rows.length > ipageSize + 2)
        {
            dTab.deleteRow(ipageSize + 2);
        }
    }
    catch(err)
    {
        window.location.reload();
    }
}


//Hàm lấy ra tên class cho một cột
function fGetClassName(iCol, iRow)
{
    if (Math.ceil(iRow / 2) == (iRow / 2)) //hang` chan
    {
        switch (iCol)
        {
            case 0:
                return 'ColCK';
            case 3: case 9: case 12: case 18: case 21:
                return 'ColBorder';
            case -1:
                return 'EvenRow';
            default:
                return 'ColOthers';
        }
    }
    else //hang` le
    {
        switch (iCol)
        {
            case 0:
                return 'ColCK';
            case 3: case 9: case 12: case 18: case 21:
                return 'ColBorder';
            case -1:
                return 'OddRow';
            default:
                return 'ColOthers';
        }
    }
}

//Hàm này tạo ra một bảng các CK cố định và thay đổi, dựa vào bảng aLiveSecurity
function fCreateHeaderContentStock()
{
    var i = 0, iHeader = 0, iContent = 0, j = 0;
    var aChkBoxList = new Array();
    aChkBoxList = document.forms["form1"].ChkStock;
    
    if (aHeaderStock != null)
    {
        aHeaderStock.splice(0, aHeaderStock.length);
    }
    aHeaderStock = new Array(iHeaderNum);
    
    if (aContentStock != null)
    {
        aContentStock.splice(0, aHeaderStock.length);
    }
    aContentStock = new Array(iContentNum);
    
    for (i = 0; i < iStockRow; i++)
    {
        for (j = 0; j < aHeaderList.length; j++)
        {
            if (i == parseFloat(aHeaderList[j]))
            {
                aHeaderStock[iHeader] = new Array(iStockColumn);
                fCopyArray(aLiveSecurity[i], aHeaderStock[iHeader]);
                iHeader++;
            }
        }
    }
    
    for (i = 0; i < iStockRow; i++)
    {
        for (j = 0; j < aContentList.length; j++)
        {
            if (i == parseFloat(aContentList[j]))
            {
                aContentStock[iContent] = new Array(iStockColumn);
                fCopyArray(aLiveSecurity[i], aContentStock[iContent]);
                iContent++;
            }
        }
    }
}


//Hàm này để đếm số lượng CK được check
function fCountHeader()
{
    var iChecked = 0, i = 0;
    var aChkBoxList = new Array();
    
    aChkBoxList = document.forms["form1"].ChkStock;
    for (i = 0; i < aChkBoxList.length; i++)
    {
        if (aChkBoxList[i].checked)
        {
            iChecked = iChecked + 1;
        }
    }
    return iChecked;
}

//Hàm này tạo ra các checkbox, biến đầu vào là mảng 2 chiều các CK
function fCreateChkStock(aStock)
{
    var iS, i = 0, j, dRow, cell, iSodong;
    var dtab = document.getElementById('tblCheckStock');
    var iSocot = 14;
    
    iSodong = Math.ceil(aStock.length / iSocot) + 1;
    for (i = 0; i < iSodong; i++)
    {
        dRow = dtab.insertRow(i + 1);
        for (j = 0; j < iSocot; j++)
        {
            cell = dRow.insertCell(j);
            cell.className = "ChkStock";
            if (i*iSocot + j < aStock.length)
            {
                cell.innerHTML = '<input id="SL' + (i*iSocot + j + 1) + '" name="ChkStock" type="checkbox" />' + aStock[i*iSocot + j][0];
            }
        }
    }
}

//Hàm này copy mảng nguồn sang mảng đích
function fCopyArray(aSource, aDestination)
{
    if (aSource == null || aDestination == null) {return;}
    var iCol;
    for (iCol = 0; iCol < aDestination.length; iCol++)
    {
        aDestination[iCol] = aSource[iCol];
    }
}

//Hàm này so sánh mảng cũ và mới, sau đó gán vào mảng mới thông tin dạng HTML
function fCompareStock(aStockBefore, aStockNow)
{
    if (aStockBefore == null || aStockNow == null) { return; }
    var iItem = aStockNow.length;
    var j = 0;
    var sGiaTrunggian = '';
    var sKLTrunggian = '';
    var sTamthoi = '';
    var sPriceChange;
    if (parseFloat(aStockNow[10]) != 0)
    {
        sPriceChange = Math.round((parseFloat(aStockNow[10]) - parseFloat(aStockNow[1])) * 10) / 10;
    }
    else
    {
        sPriceChange = '';
    }
    
    for (j = 0; j < aStockNow.length; j++)
    {
        switch (j)
        {
            //Cột giá tham chiếu, trần, sàn, NN mua (các cột này style luôn cố định)
            case 1:
                sTamthoi = fTruncNumber(aStockNow[j], 1);
//                sTamthoi = '<span>sfss</span>';
                break;
            
            case 2:
                sTamthoi = fGetStyle(1, '', '0', '0', '0', '0', fTruncNumber(aStockNow[j], 1), sGreen, sGreen, sGreen, sGreen, sGreen);
                break;
            
            case 3:
                sTamthoi = fGetStyle(1, '', '0', '0', '0', '0', fTruncNumber(aStockNow[j], 1), sRed, sRed, sRed, sRed, sRed);
                break;
            
            case 22:
//                if (parseFloat(aStockNow[j]) <= 0)
//                {
//                    sTamthoi = fGetStyle(1, '', '0', '0', '0', '0', '', '', '', '', '', '');
//                }
//                else
//                {
//                    sTamthoi = fGetStyle(1, '', '0', '0', '0', '0', fFormatVolume(aStockNow[j]), sGreen, sGreen, sGreen, sGreen, sGreen);
//                }
                sTamthoi = fGetStyle(1, '0', aStockNow[j], '0', '0', '0', fFormatVolume(aStockNow[j]), sGreen, sRed, '', '', '');
                break;
             
            //Cột mã CK
            case 0:
                if (parseFloat(aStockNow[10]) != 0)
                {
                    sTamthoi = fGetStyle(1, '', aStockNow[10], aStockNow[1], aStockNow[2], aStockNow[3], fTruncNumber(aStockNow[j], 1), sGreen, sRed, sYellow, sGreen, sRed);
                }
                else
                {
                    sTamthoi = fGetStyle(1, '', aStockNow[10], aStockNow[1], aStockNow[2], aStockNow[3], fTruncNumber(aStockNow[j], 1), sYellow, sYellow, sYellow, sYellow, sYellow);
                }
                break;
            
            //Cột giá đóng cửa
            case 10:
                var sCloseTemp = aStockNow[j] + '';
                if (parseFloat(sCloseTemp) == 0)
                {
                    sTamthoi = fGetStyle(1, '', sCloseTemp, aStockNow[1], aStockNow[2], aStockNow[3], '', sGreen, sRed, sYellow, sGreen, sRed);
                }
                else
                {
                    sTamthoi = fGetStyle(1, '', sCloseTemp, aStockNow[1], aStockNow[2], aStockNow[3], fTruncNumber(sCloseTemp, 1), sGreen, sRed, sYellow, sGreen, sRed);
                }
                break;
                
            //Cột KL thực hiện
            case 11:
                sTamthoi = fGetStyle(1, '', sCloseTemp, aStockNow[1], aStockNow[2], aStockNow[3], fFormatVolume(aStockNow[j]), sGreen, sRed, sYellow, sGreen, sRed);
                break;
            
            //Cột thay đổi về giá (cột này phức tạp)
            case 12:
                var sPre = '';
                
                
                if (parseFloat(aStockBefore[10]) == parseFloat(aStockBefore[2]))
                {
                    sPre = 'CE ' + sPre;
                }
                
                if (parseFloat(aStockBefore[10]) == parseFloat(aStockBefore[3]))
                {
                    sPre = 'FL' + sPre;
                }
                
                sTamthoi = fGetStyle(1, '', sCloseTemp, aStockNow[1], aStockNow[2], aStockNow[3], sPre + sPriceChange, sGreen, sRed, sYellow, sGreen, sRed);
                break;
            
            //Các cột giá
            case 6: case 8: case 15: case 17:
                sGiaTrunggian = aStockNow[j] + ''; //force a string
                if (parseFloat(sGiaTrunggian) != 0)
                {
                    if ((sGiaTrunggian == "ATC") || (sGiaTrunggian == "ATO") || (sGiaTrunggian == "MP"))
                    {
                        sTamthoi = '<span style="color:' + sGreen + ';">' + sGiaTrunggian + '</span>';
                    }
                    else
                    {
                        sTamthoi = fGetStyle(2, aStockBefore[j], aStockNow[j], aStockNow[1], aStockNow[2], aStockNow[3], fTruncNumber(aStockNow[j], 1), sGreen, sRed, sYellow, sGreen, sRed);
                    }
                }
                else
                {
                    sTamthoi = fGetStyle(1, '', aStockNow[j], aStockNow[j], '', '', '', sGreen, sRed, sYellow, sGreen, sRed);
                }
                break;
                
            case 4:
                sGiaTrunggian = aStockNow[j] + ''; //force a string
                if (parseFloat(sGiaTrunggian) != 0)
                {
                    if ((sGiaTrunggian == "ATC") || (sGiaTrunggian == "ATO") || (sGiaTrunggian == "MP"))
                    {
                        sTamthoi = '<span style="color:' + sGreen + ';">' + sGiaTrunggian + '</span>';
                    }
                    else
                    {
                        sTamthoi = fGetStyle(2, aStockBefore[j], aStockNow[j], aStockNow[1], aStockNow[2], aStockNow[3], fTruncNumber(aStockNow[j], 1), sGreen, sRed, sYellow, sGreen, sRed);
                    }
                }
                else
                {
                    sTamthoi = fGetStyle(1, '', aStockNow[j], aStockNow[j], '', '', '', sGreen, sRed, sYellow, sGreen, sRed);
                }
                break;
                
            case 13:
                sGiaTrunggian = aStockNow[j] + ''; //force a string
                if (parseFloat(sGiaTrunggian) != 0)
                {
                    if ((sGiaTrunggian == "ATC") || (sGiaTrunggian == "ATO") || (sGiaTrunggian == "MP"))
                    {
                        sTamthoi = '<span style="color:' + sRed + ';">' + sGiaTrunggian + '</span>';
                    }
                    else
                    {
                        sTamthoi = fGetStyle(2, aStockBefore[j], aStockNow[j], aStockNow[1], aStockNow[2], aStockNow[3], fTruncNumber(aStockNow[j], 1), sGreen, sRed, sYellow, sGreen, sRed);
                    }
                }
                else
                {
                    sTamthoi = fGetStyle(1, '', aStockNow[j], aStockNow[j], '', '', '', sGreen, sRed, sYellow, sGreen, sRed);
                }
                break;
            
            //Các cột KL
            case 5: case 7: case 9: case 16: case 18:
                if (parseFloat(aStockNow[j]) == 0)
                {
                    sTamthoi = '';
                    aStockNow[j - 1] = '';
                }
                else
                {
                    if (parseFloat(aStockBefore[j]) != parseFloat(aStockNow[j]))
                    {
                        sTamthoi = fGetStyle(2, aStockBefore[j], aStockNow[j], '', '', '', fFormatVolume(aStockNow[j]), sGreen, sRed, sYellow, sGreen, sRed);
                    }
                    else
                    {
                        if ((sGiaTrunggian != 'ATC') && (sGiaTrunggian != 'ATO') && (sGiaTrunggian != 'MP'))
                        {
                            sTamthoi = fGetStyle(1, sGiaTrunggian, sGiaTrunggian, aStockNow[1], aStockNow[2], aStockNow[3], fFormatVolume(aStockNow[j]), sGreen, sRed, sYellow, sGreen, sRed);
                        }
                        else
                        {
                            sTamthoi = fGetStyle(1, '', '0', '0', '0', '0', fFormatVolume(aStockNow[j]), sGreen, sGreen, sGreen, sGreen, sGreen);
                        }
                    }
                }
                break;
                
            case 14:
                if (parseFloat(aStockNow[j]) == 0)
                {
                    sTamthoi = '';
                    aStockNow[j - 1] = '';
                }
                else
                {
                    if (parseFloat(aStockBefore[j]) != parseFloat(aStockNow[j]))
                    {
                        sTamthoi = fGetStyle(2, aStockBefore[j], aStockNow[j], '', '', '', fFormatVolume(aStockNow[j]), sGreen, sRed, sYellow, sGreen, sRed);
                    }
                    else
                    {
                        if ((sGiaTrunggian != 'ATC') && (sGiaTrunggian != 'ATO') && (sGiaTrunggian != 'MP'))
                        {
                            sTamthoi = fGetStyle(1, sGiaTrunggian, sGiaTrunggian, aStockNow[1], aStockNow[2], aStockNow[3], fFormatVolume(aStockNow[j]), sGreen, sRed, sYellow, sGreen, sRed);
                        }
                        else
                        {
                            sTamthoi = fGetStyle(1, '', '0', '0', '0', '0', fFormatVolume(aStockNow[j]), sRed, sRed, sRed, sRed, sRed);
                        }
                    }
                }
                break;
            
            case 19: case 20: case 21:
                if (parseFloat(aStockNow[j]) != 0)
                {
                    sTamthoi = fGetStyle(1, '', aStockNow[j], aStockNow[1], '', '', fTruncNumber(aStockNow[j], 1), sGreen, sRed, sYellow, sGreen, sRed);
                }
                else
                {
                    sTamthoi = '';
                }
                break;
        }
        
        aStockBefore[j] = aStockNow[j];
        aStockNow[j] = sTamthoi;
    }
}

//Hàm này cắt tỉa giá CK cho gọn
function fTruncNumber(sNumber, iPrecision)
{
    if (sNumber == null || sNumber == '' || sNumber == "")
    {
        return '0';
    }
    
    var sTemp = sNumber + ''; //make a string
    var iPoint = sTemp.lastIndexOf(".");
    if (iPoint >= 0)
    {
        return sTemp.substring(0, iPoint + 1 + iPrecision);
    }
    else
    {
        return sNumber;
    }
}

//Hàm này định dạng lại một số (thường là KL)
function fFormatVolume(sVolume)
{
    if ((sVolume == null) || (sVolume == '') || (sVolume == ""))
    {
        return '';
    }
    
    if (parseFloat(sVolume) == 0)
    {
        return '';
    }
    
    var i = 0; var sRs = ''; var sDuoi = '';
    var sTempVolume = sVolume + ''; //create a string
    
    i = sTempVolume.lastIndexOf(".");
    if (i > -1)
    {
        sDuoi = sTempVolume.substr(i, 4);
        sTempVolume = sTempVolume.substr(0, i);
    }
    
    var iDodai = sTempVolume.length;
    var iSodauphay = Math.ceil(iDodai / 3) - 1;
    var iSodu = iDodai%3;
    if (iSodu == 0) {iSodu = 3;}
    sRs = sTempVolume.substr(0, iSodu);
    for (i = 0; i < iSodauphay; i++)
    {
        sRs = sRs + ',' + sTempVolume.substr(iSodu, 3);
        iSodu += 3;
    }
    
    sRs += sDuoi;
    return sRs;
}


//Hàm này so sánh 2 chuỗi
//iType: dạng 1 là chỉ hiện mầu, dạng 2 là có thay đổi cả nền
//sOldText: dữ liệu cũ, chỉ cần trong dạng 2
//sNewText: dữ liệu mới nhất
//sRefText: giá tham chiếu
//sCeilText: giá trần
//sFloorText: giá sàn
//sShowText: dữ liệu sẽ được hiển thị
//sIncColor: mầu tăng
//sDecColor: mầu giảm
//sStayColor: mầu đứng yên
//sCeilColor: mầu tăng trần
//sFloorColor: mầu giảm sàn
function fGetStyle(iType, sOldText, sNewText, sRefText, sCeilText, sFloorText, sShowText, sIncColor, sDecColor, sStayColor, sCeilColor, sFloorColor)
{
    var sPrefix = '<span style="color:';
    var sSuffix = '<span>';
    switch (iType)
    {
        case 1:
            if (parseFloat(sNewText) == parseFloat(sCeilText))
            {
                return sPrefix + sCeilColor + ';">' + sShowText + sSuffix;
            }
            if (parseFloat(sNewText) == parseFloat(sFloorText))
            {
                return sPrefix + sFloorColor + ';">' + sShowText + sSuffix;
            }
            if (parseFloat(sNewText) > parseFloat(sRefText))
            {
                return sPrefix + sIncColor + ';">' + sShowText + sSuffix;
            }
            if (parseFloat(sNewText) < parseFloat(sRefText))
            {
                    return sPrefix + sDecColor + ';">' + sShowText + sSuffix;
            }
            if (parseFloat(sNewText) == parseFloat(sRefText))
            {
                return sPrefix + sStayColor + ';">' + sShowText + sSuffix;
            }
            break;
            
        case 2:
            if ((parseFloat(sNewText) != parseFloat(sOldText)) || (sNewText != sOldText))
            {
                return '<table cellpadding="0" cellspacing="0" style="width: 100%; height: 98%" class="ColChange"><tr><td>' + sShowText + '</td></tr></table>';
            }
            
            if (parseFloat(sNewText) == parseFloat(sCeilText))
            {
                return sPrefix + sCeilColor + ';">' + sShowText + sSuffix;
            }
            if (parseFloat(sNewText) == parseFloat(sFloorText))
            {
                return sPrefix + sFloorColor + ';">' + sShowText + sSuffix;
            }
            if (parseFloat(sNewText) > parseFloat(sRefText))
            {
                return sPrefix + sIncColor + ';">' + sShowText + sSuffix;
            }
            if (parseFloat(sNewText) < parseFloat(sRefText))
            {
                return sPrefix + sDecColor + ';">' + sShowText + sSuffix;
            }
            if (parseFloat(sNewText) == parseFloat(sRefText))
            {
                return sPrefix + sStayColor + ';">' + sShowText + sSuffix;
            }
            break;
    }
}


//Hàm này gọi khi NSD bấm vào checkall
function fCheckAll()
{
    document.getElementById("ChkAll").checked = false;
    
    //Neu' chua co' CK nao` thi` thoat' luon
    if ((iStockRow == null) || (iStockRow == 0))
    {
        return;
    }
    
    //Cho tất cả các checkbox về dạng được check hết
    fSetCheckbox(true);
    
    //Thiết lập lại số dòng hiển thị
    document.getElementById("txtPageSize").value = iStockRow;
}


//Hàm cho tất cả các checkbox được check hoặc bỏ check
function fSetCheckbox(bValue)
{
//    alert('sfsd');
    var i = 0;
    var checkboxId;
    var aChkBoxList = new Array();
//    aChkBoxList = document.forms("form1").ChkStock;
    
//    for (i = 0; i < aChkBoxList.length; i++)
    for (i = 0; i < iStockRow; i++)
    {
//        aChkBoxList[i].checked = bValue;
        checkboxId = "SL";
        checkboxId += (i + 1).toString();
//        alert(checkboxId);
        document.getElementById(checkboxId).checked = bValue;
    }
}


//Hàm này được gọi khi ấn nút hiển thị mặc định
function fApplyDefault()
{
    document.getElementById("ChkDefault").checked = false;
    
    //Neu' chua co' CK nao` thi` thoat' luon
    if ((iStockRow == null) || (iStockRow == 0))
    {
        return;
    }
    
    //Cho tất cả các checkbox về dạng ko được check
    fSetCheckbox(false);
    
    document.getElementById("txtPageSize").value = "20";
}


//Hàm này được gọi khi ấn nút OK
function fApplySettings()
{
    document.getElementById("Panel1").style.display = "none";
    
    //Neu' chua co' CK nao` thi` thoat' luon
    if ((iStockRow == null) || (iStockRow == 0))
    {
        return;
    }
    
    //Neu' nguoi` dung` nhap so' dong` hien thi nho hon 1 thi` cung thoat' luon
    if (parseFloat(document.getElementById("txtPageSize").value) < 1)
    {
        return;
    }
    
    //Cho so' dong` hien thi. bang` voi' so' trong textbox
    ipageSize = parseFloat(document.getElementById("txtPageSize").value);
    
    //Nhớ thông tin vào Cookie
    fSavingCookie();
    
    //Cho dòng bắt đầu hiển thị về 0
    iContentStartRow = 0;
    
    //Tính số lượng CK cố định và CK động
    fCreateStockList();
    
    //Tạo mảng header và content
    fCreateHeaderContentStock();
    
    //Cho hiện mảng header và content lên bảng
    fShowHeaderStock();
    fShowContentStock();
}


//Hàm tạo Cookie
function fSavingCookie()
{
//    alert(sStockCookie);
    var sStockCookie = '';
    var iChecked = 0, i = 0;
    var aChkBoxList = new Array();
    
    aChkBoxList = document.forms["form1"].ChkStock;
    for (i = 0; i < aChkBoxList.length; i++)
    {
        if (aChkBoxList[i].checked)
        {
            sStockCookie += i.toString() + "/";
        }
    }
    
    sStockCookie += ipageSize.toString();
    
    //Lưu chuỗi trên vào Cookie
    var exp = new Date();     //set new date object 
    exp.setTime(exp.getTime() + (1000 * 60 * 60 * 24 * 30));     //set it 30 days ahead
    document.cookie = "HoStock = " + sStockCookie + "; expires = " + exp.toGMTString() + "; path=/";
}

//Hàm lấy ra cookie
function fGetCookie()
{
    var nameEQ = "HoStock=";
    var i = 0;
    var ca = document.cookie.split(';');
    
    for (i = 0; i < ca.length; i++)
    {
        var c = ca[i];
        while (c.charAt(0) == ' ')
        {
            c = c.substring(1, c.length);
        }
        
        if (c.indexOf(nameEQ) == 0)
        {
            try 
            {
                return c.substring(nameEQ.length, c.length);
            }
            catch(err) 
            {
                return '';
            }
        }
    }
    return '';
}


function fHighLightRow(e)
{
    e.className = 'HighLightRow';
    if (aCompanyName == null)
    {
        return;
    }
    
    var i = 0;
    var oSpan = e.firstChild.lastChild;
    
    try
    {
        i = oSpan.innerHTML.indexOf('<SPAN>');
    
        var sMA_CK = oSpan.innerHTML.substr(0, i);
        var sTEN_CTY, sROOM, sTemp;
        
        i = 0;
        while (aLastSecurity[i][0] != sMA_CK && i < iStockRow - 1)
        {
            i++;
        }
        sROOM = fFormatVolume(aLastSecurity[i][23]);
        
        if (sROOM != '') sROOM = ' **** ROOM : ' + sROOM;
        
        i = 0;
        while (aCompanyName[i][0] != sMA_CK)
        {
            i++;
        }

        sTEN_CTY = aCompanyName[i][1];
        if (sTEN_CTY == '0') sTEN_CTY = sMA_CK;
        
        Tip(sTEN_CTY + sROOM);
    }
    catch(err)
    {
//        window.location.reload();
    }
}

function fNormalizeRow(e)
{
    var i = e.rowIndex;
    if (Math.ceil(i / 2) == (i / 2)) //hang` chan
    {
        e.className = 'EvenRow';
    }
    else
    {
        e.className = 'OddRow';
    }
}


//=======================================Phần hiện thông tin về toàn thị trường===============================
function TotalMKTData()
{
    if (proxies.IsActive())
    {
        _timerMKT = window.setTimeout(TotalMKTData, 300, "javascript");
        return;
    }
    
    if (bFirstTime == false && iTime > 111000)
    {
        return;
    }
    
    proxies.HoSTC_Service.GetLiveTotalMKT.func = myRsTotalMKT;
    proxies.HoSTC_Service.GetLiveTotalMKT(bFirstTime);
}

//=========================================Đây là hàm trung gian===========================================
function myRsTotalMKT(retVal)
{
    myResultTotalMKT(retVal);
}

//===========================Hàm này thực sự sử lý chuỗi đầu vào để hiện thông tin lên form=================
function myResultTotalMKT(sTotalMKTresult)
{
    if ((sTotalMKTresult == null) || (sTotalMKTresult == '') || (sTotalMKTresult == "1"))
    {   return; }
    
    var sTempMKTRs = sTotalMKTresult + ''; //force a string
    sTotalMKT = sTempMKTRs;
    
    aLiveTotal = new Array();
    aLiveTotal = sTempMKTRs.split("**"); //LiveTotal là mảng các chuỗi (tối đa là 3 chuỗi)
    
    iDotNumber = aLiveTotal.length;
    if (aLiveTotal.length == 0) {   return; }
    
    //Hiển thị bảng toàn thị trường
    var dRow = new Array();
    
    //dRow là mảng chứa thông tin về đợt mới nhất
    dRow = aLiveTotal[aLiveTotal.length - 1].split("|");
    
    iTime = parseFloat((dRow[6]).substr(11, 6));
    iPhien = parseFloat(dRow[dRow.length - 1]);
    
    //Biến chứa dòng của bảng toàn thị trường
    var dMktTab = document.getElementById("tblTotalMKT");
    var dNewestRow = dMktTab.rows[0];
    
    sTempMKTRs = fTruncNumber(parseFloat(100 * parseFloat(dRow[1]) / parseFloat(dRow[2]) ), 2);
    if (parseFloat(dRow[1]) > 0)
    {
        dNewestRow.cells[0].innerHTML = "Vn Index: <span style='color: #33ff00'>" +  dRow[0] + "▲" + dRow[1]+ " (" + sTempMKTRs + "%)</span>" ;
    }
    else
    {
        if (parseFloat(dRow[1])<0)
        {
            dNewestRow.cells[0].innerHTML =  "Vn Index: <span style='color:red'>" + dRow[0] + "▼" + dRow[1]+ " (" + sTempMKTRs + "%)</span>" ;
        }
        else
        {
            dNewestRow.cells[0].innerHTML =  "Vn Index: <span style='color:yellow'>" + dRow[0] + " " + dRow[1]+ " (" + sTempMKTRs + "%)</span>" ;
        }
    }
    dNewestRow.cells[1].innerHTML = "Số GD: " + '<span style="color: yellow">'+ dRow[3];
    dNewestRow.cells[2].innerHTML = "KLGD: " + '<span style="color: yellow">' + dRow[4];
    dNewestRow.cells[3].innerHTML = "GTGD: " + '<span style="color: yellow">' + dRow[5] + '<span style="color: white">' + " tỉ VNĐ";
    dNewestRow.cells[4].innerHTML = "Ngày: " + '<span style="color: yellow">' + dRow[6].substring(0, 10);
    //alert(iTime);
    switch (iPhien)
    {
        case 1:
            sTempMKTRs = "Khớp lệnh định kỳ đợt 1";
            bTrading = true;
            break;
        case 2:
            sTempMKTRs = "Khớp lệnh liên tục";
            bTrading = true;
            break;
        case 3:
            if (iTime < 103000)
            {
                sTempMKTRs = "Khớp lệnh định kỳ đợt 3";
            }
            else
            {
                if (iTime < 110000)
                {
                    sTempMKTRs = "Giao dịch thỏa thuận";
                }
                else
                {
                    sTempMKTRs = "Đóng cửa thị trường";
                }
            }
            break;
    }
    dNewestRow.cells[5].innerHTML = '<span style="color: #33ff00">' + sTempMKTRs + '</span>';
    
    //Hiển thị lên bảng các đợt
var iSession = 0;
    dRow = new Array();
    var objTblTotal = document.getElementById("tblTotalMKT");
    var objRow;
    var objCell;
    var sHTML = '';

    //Vòng lặp từ 0 đến số đợt hiện có - 1
    for (iSession = 0; iSession < aLiveTotal.length - 1; iSession++)
    {
        dRow = aLiveTotal[iSession].split("|");
        sHTML += fBidingSession(dRow);
    }
 
    if (objTblTotal.rows.length < 3)
    {
        objRow = objTblTotal.insertRow(2);
        objCell = objRow.insertCell(0);
        objCell.colSpan = 6;
    }
    else
    {
        objRow = objTblTotal.rows[2];
        objCell = objRow.cells[0];
    }
	objCell.innerHTML = sHTML;
    objCell.className = 'Center';
    
    if (objTblTotal.rows.length < 4)
    {
        objRow = objTblTotal.insertRow(3);
        objRow.height = 6;
        objCell = objRow.insertCell(0);
        objCell.colSpan = 6;
        objCell.innerHTML = '<span style="color: black;font-size: 5px">' + 'HOSE';
    }
    
    bFirstTime = false;
}

//Biến đầu vào là mảng thông tin về đợt gần nhất
function fBidingSession(aSessionArray)
{
    if (aSessionArray[7] == 'Y' || aSessionArray[7] == 'I')
    {
        var innerHTMLCell;
        innerHTMLCell =  '<span style="font-size: 12px ">' + "   Đợt " + aSessionArray[8] + ": <span style='color: yellow'>" + "</span>" ;
        var ChangePercent = fTruncNumber(parseFloat(100 * parseFloat(aSessionArray[1]) / parseFloat(aSessionArray[2])), 2);
        if (parseFloat(aSessionArray[1]) > 0)
        {
            innerHTMLCell = innerHTMLCell + '<span style="color: #33ff00; padding-right: 10px;">' + (parseFloat(aSessionArray[0])) + '  ▲' + (parseFloat(aSessionArray[1])) + ' (' + ChangePercent +  '%)</span>';
        }
        else
        {
            if (parseFloat(aSessionArray[1]) < 0)
            {
                innerHTMLCell = innerHTMLCell + '<span style="color: red; padding-right: 10px;">' + (parseFloat(aSessionArray[0] ))+  '  ▼' + (parseFloat(aSessionArray[1])) + ' (' + ChangePercent +  '%)</span>' ;
            }
            else
            
            {
                innerHTMLCell = innerHTMLCell + "<span style='color: #ffff00'>" + (parseFloat(aSessionArray[0])) +  " " + ( parseFloat( aSessionArray[1])) + " (" + ChangePercent +  "%)</span>" ;
            }
        }
        innerHTMLCell = innerHTMLCell + '<span style="color: White; padding-right: 10px;font-size: 12px ">' + ' KLGD: ' + '<span style="color: yellow; font-size: 12px">' +  (aSessionArray[4]) +  '</span></span>';
        innerHTMLCell = innerHTMLCell + '<span style="color: White; padding-right: 10px;font-size: 12px">' + ' GTGD: ' + '<span style="color: yellow">' +  (aSessionArray[5]) + '<span style="color: white;font-size: 12px">' + ' tỉ VNĐ</span></span>';
		innerHTMLCell += '<span style="color: black;">............</span>';
        return innerHTMLCell;
        return innerHTMLCell;
    }
    return "";
}