﻿var AT = 'ATO';
var oVal = new Object();
var oIdx = new Object();
var lUpdate = null;
var sID = 5;
var Tm_H = 0;
var Tm_M = 0;
var Tm_S = 0;
var StocksList = new Array();
var StockNum = 0;
var StockSort = new Object();

function addCommas(nStr) 
{ 
  nStr += ''; 
  x = nStr.split('.'); 
  x1 = x[0]; 
  x2 = x.length > 1 ? '.' + x[1] : ''; 
  var rgx = /(\d+)(\d{3})/; 
  while (rgx.test(x1)) { 
    x1 = x1.replace(rgx, '$1' + ',' + '$2'); 
  } 
  return x1 + x2; 
}


function addCommasV(nStr) 
{ 
  nStr += ''; 
  x = nStr.split('.'); 
  x1 = x[0]; 
  x2 = x.length > 1 ? '.' + x[1] : ''; 
  var rgx2 = /(\d+)(\d{2})/; 
  if(rgx2.test(x1))
  {
    x1 = x1.replace(rgx2, '$1' + ',' + '$2'); 
  }
  var rgx = /(\d+)(\d{3})/; 
  while (rgx.test(x1)) { 
    x1 = x1.replace(rgx, '$1' + ',' + '$2'); 
  } 
  return x1 + x2; 
}

function isNull(obj)
{
    if(!obj||obj=='0'||obj=='0.0'||obj==0) return '';
    return obj;
}

function GetAT(obj)
{
    if(sID<2)
        return 'ATO';
    else if((Tm_H * 100 + Tm_M)<930)
			return 'ATO';
		 else
			return 'ATC' ;
}

function isNull(obj, vol)
{
//    if(obj == -1)
//    {
//        return 'ATO';
//    }
//    
//    if(obj == -2)
//        return 'ATC';
    
    if( vol && vol!=0 && obj=='0')
    {
        return GetAT(obj);
//        if((Tm_H * 100 + Tm_M)<930)
//            return 'ATO';
//        else
//            return 'ATC';
        
//        if(sID<2)
//            return 'ATO';
//        else
//            return 'ATC';
    }
    
    if(!obj||obj=='0'||obj=='0.0'||obj==0) return '';
    return obj;
}

var dFields = [
    ['B1','BV1'],
    ['B2','BV2'],
    ['B3','BV3'],
    ['P','V', 'S', 'TV'],
    ['O1','OV1'],
    ['O2','OV2'],
    ['O3','OV3'],
    ['OP'],
    ['H'],
    ['L']
];

var pFields = [
    'H', 'L'
];

var oFields = [
    'C', 'F', 'R', 'FR', 'RF'
];

function GenClass(obj, f)
{
    if(obj.R == null) return '';
    if(obj[f]!=null) f = obj[f];
    if(f<=0 || f == '' || f==null) return '';
    if(f==obj.C) return 'ceil';
    if(f==obj.F) return 'floor';
    if(f==obj.R) return 'ref';
    var f1 = parseFloat( f);
    var f2 = parseFloat( obj.R);
    if(f1>f2)
    {
        return 'green';
    }
    if(f1<f2) return 'red';
    return '';
}

function GetChange(obj)
{
    var chStr = '';
    if(obj.P!=0)
    {
        var ch = (obj.P - obj.R).toFixed(1);
        chStr = ch;
        if(ch>0)chStr= '+' + chStr + '▲';
        if(ch<0)chStr+='▼';
        if(ch==0)chStr='&nbsp;'+chStr+'▬';
    }
    return chStr;
}


function GenRow(obj)
{
    if(!obj)return;
    if(obj.Sc)
    {
        eval(obj.Sc);
        return;
    }
    if(obj.SS!=null)
    {
        UpdateIndex(obj);
        return;
    }
    if(obj.PA)
    {
        UpdatePutAd(obj);
        return;
    }
    if(obj.PE)
    {
        UpdatePutExec(obj);
        return;
    }
    if(!obj.S) return;
    UpdatePrices(obj);
}

function UpdatePutAd(obj)
{
    var oObj = oVal[obj.Sn];
    if(oObj == null)
    {
        oObj = {C: null, F: null, R:null};
    }
    var str = '<tr id="pa'+obj.PA+'">'
        + '<td class="'+GenClass(oObj,obj.P)+' tal">'+obj.PA+'</td>'
        + '<td class="'+GenClass(oObj,obj.P)+' tal">'+obj.Sn+'</td>'
        + '<td class="'+GenClass(oObj,obj.P)+'">'+addCommas(obj.Vol)+'</td>'
        + '<td class="'+GenClass(oObj,obj.P)+'">'+isNull(obj.P)+'</td>'
        + '<td>'+obj.Tm+'</td></tr>';
    var e = $('putAd'+obj.Side);
    new Insertion.Bottom(e, str);
}


function UpdatePutExec(obj)
{
    oVal[obj.Sn] = obj;
    
    var str = '<tr id="pe'+obj.PE+'">'
        + '<td class="'+GenClass(obj,obj.P)+' tal">'+obj.Sn+'</td>'
        + '<td class="ceil">'+addCommas(obj.C)+'</td>'
        + '<td class="floor">'+addCommas(obj.F)+'</td>'
        + '<td class="ref">'+addCommas(obj.R)+'</td>'
        + '<td class="'+GenClass(obj,obj.P)+'">'+addCommas(obj.P)+'</td>'
        + '<td class="'+GenClass(obj,obj.P)+'">'+addCommas(obj.Vol)+'</td>'
        + '<td class="'+GenClass(obj,obj.P)+'">'+addCommas(obj.PVol)+'</td>'
        + '<td class="'+GenClass(obj,obj.P)+'">'+addCommas(obj.PVal)+'</td>'
        + '<td>'+addCommas(obj.MVol)+'</td>'
        + '<td>'+addCommas(obj.TVol)+'</td>'
        + '<td>'+addCommas(obj.LVol)+'</td>'
        + '</tr>';
    var e = $('putExec');
    new Insertion.Bottom(e, str);
}

function UpdateIndex(obj)
{
    if(!oIdx[obj.SS]) oIdx[obj.SS] = {};
    var oObj = oIdx[obj.SS];
    
    if(oObj.Idx!=obj.Idx)
    {
        var sess = PbLang.Phase + ' '+obj.SS;
        if(!obj.SS) sess = 'VN-Index'
        var chgpc = (obj.Chg*100/(obj.Idx-obj.Chg)).toFixed(2);
        if(obj.Idx == obj.Chg) chgpc = 0;
        if(obj.Chg<0)
        {
            $('S'+obj.SS+'_Title').className = 'red';
            $('S'+obj.SS+'_Title').update(sess+': '+(obj.Idx/100)+' (' + (obj.Chg/100) + ' ▼ '+chgpc+'%)');
        }
        else if(obj.Chg>0)
        {
            $('S'+obj.SS+'_Title').className = 'green';
            $('S'+obj.SS+'_Title').update(sess+': +'+(obj.Idx/100)+' (+' + (obj.Chg/100) + ' ▲ '+chgpc+'%)');
        }
        else
        {
            $('S'+obj.SS+'_Title').className = 'ref';
            $('S'+obj.SS+'_Title').update(sess+': '+(obj.Idx/100)+' (' + (obj.Chg/100) + ' ■ '+chgpc+'%)');
        }
//        $('S'+obj.SS+'_Title').addClassName('ch');
//        window.setTimeout("$('S"+obj.SS+"_Title').removeClassName('ch');", 2400);
    }
    
    if(!obj.SS)
    {
        $('S0_Trd').update(obj.Trd);
        $('S0_Dec').update(obj.Dec);
        $('S0_Noc').update(obj.Noc);
        $('S0_Adv').update(obj.Adv);
        //$('S0_Sta').update(obj.Sta);
        $('S0_Dat').update(obj.Dat);
        sID = obj.SId;
        switch(sID)
        {
            case '2':
                $('S0_Sta').update(PbLang.ECont);
                break;
            case '4':
                $('S0_Sta').update(PbLang.EPut);
                break;
            case '5':
                $('S0_Sta').update(PbLang.EClose);
                break;
            default:
                $('S0_Sta').update(PbLang.EOpen);
                break;
        }
    }
    if(oObj.Vol!=obj.Vol)
    {
        $('S'+obj.SS+'_Vol').update(''+obj.Vol);
//        $('S'+obj.SS+'_Vol').addClassName('ch');
//        window.setTimeout("$('S"+obj.SS+"_Vol').removeClassName('ch');", 2400);
    }
    if(oObj.Val!=obj.Val)
    {
        $('S'+obj.SS+'_Val').update(''+obj.Val);
//        $('S'+obj.SS+'_Val').addClassName('ch');
//        window.setTimeout("$('S"+obj.SS+"_Val').removeClassName('ch');", 2400);
    }
    oIdx[obj.SS] = obj;
}
function UpdatePrices(obj)
{

    if(!oVal[obj.S])
    {
        oVal[obj.S] = obj;
        //ch = ch/10;
        var sts = '';
        if(Exist(obj.S))
            sts = ' style="display:none"';
        var str = '<tr id="'+obj.S+'" '+sts+' ondblclick="rearange(this)" title="'+obj.TT+'">'
            + '<td id="'+obj.S+'_S" style="font-weight:bold; text-align:center" class="'+GenClass(obj,'P')+'"><a class="slnk" href="Coms/'+obj.S+'_Info/Company.aspx" target="_blank" >'+obj.S+'</a></td>'
            + '<td id="'+obj.S+'_C" class="ceil hl">'+obj.C+'</td>'
            + '<td id="'+obj.S+'_F" class="floor hl">'+obj.F+'</td>'
            + '<td id="'+obj.S+'_R" class="ref hl">'+obj.R+'</td>'
            + '<td id="'+obj.S+'_B3" class="'+GenClass(obj,'B3')+'">'+isNull(obj.B3, obj.BV3)+'</td>'
            + '<td id="'+obj.S+'_BV3" class="'+GenClass(obj,'B3')+'">'+isNull(obj.BV3)+'</td>'
            + '<td id="'+obj.S+'_B2" class="'+GenClass(obj,'B2')+'">'+isNull(obj.B2, obj.BV2)+'</td>'
            + '<td id="'+obj.S+'_BV2" class="'+GenClass(obj,'B2')+'">'+isNull(obj.BV2)+'</td>'
            + '<td id="'+obj.S+'_B1" class="'+GenClass(obj,'B1')+'">'+isNull(obj.B1, obj.BV1)+'</td>'
            + '<td id="'+obj.S+'_BV1" class="'+GenClass(obj,'B1')+'">'+isNull(obj.BV1)+'</td>'
            
            + '<td class="hl"><div id="'+obj.S+'_P" style="font-weight:bold" class="'+GenClass(obj,'P')+'">'+isNull(obj.P)+'</div></td>'
            + '<td class="hl"><div id="'+obj.S+'_V" style="font-weight:bold" class="'+GenClass(obj,'P')+'">'+isNull(obj.V)+'</div></td>'
            + '<td class="hl"><div id="'+obj.S+'_CH" style="font-weight:bold" class="'+GenClass(obj,'P')+'">'+GetChange(obj)+'</div></td>'
            + '<td class="hl"><div id="'+obj.S+'_TV" style="font-weight:bold" class="'+GenClass(obj,'P')+'">'+isNull(obj.TV)+'</div></td>'
            //+ '<td id="'+obj.S+'_TV">'+isNull(obj.V)+'</td>'
            
            + '<td id="'+obj.S+'_O1" class="'+GenClass(obj,'O1')+'">'+isNull(obj.O1, obj.OV1)+'</td>'
            + '<td id="'+obj.S+'_OV1" class="'+GenClass(obj,'O1')+'">'+isNull(obj.OV1)+'</td>'
            + '<td id="'+obj.S+'_O2" class="'+GenClass(obj,'O2')+'">'+isNull(obj.O2, obj.OV2)+'</td>'
            + '<td id="'+obj.S+'_OV2" class="'+GenClass(obj,'O2')+'">'+isNull(obj.OV2)+'</td>'
            + '<td id="'+obj.S+'_O3" class="'+GenClass(obj,'O3')+'">'+isNull(obj.O3, obj.OV3)+'</td>'
            + '<td id="'+obj.S+'_OV3" class="'+GenClass(obj,'O3')+'">'+isNull(obj.OV3)+'</td>'
            
            + '<td class="hl"><div  id="'+obj.S+'_OP" class="'+GenClass(obj,'OP')+'">'+isNull(obj.OP)+'</div></td>'
            + '<td class="hl"><div  id="'+obj.S+'_H" class="'+GenClass(obj,'H')+'">'+isNull(obj.H)+'</div></td>'
            + '<td class="hl"><div  id="'+obj.S+'_L" class="'+GenClass(obj,'L')+'">'+isNull(obj.L)+'</div></td>'
            + '<td id="'+obj.S+'_RF">'+isNull(obj.RF)+'</td>'
            + '<td id="'+obj.S+'_FR">'+isNull(obj.FR)+'</td></tr>';
        var e;
        if(ExistS(obj.S))
        {
            e = $('asBottom');
            new Insertion.Before(e, str);
            StockSort[obj.S] = true;
        }
        else
        {
            e = $('sHolder');
            new Insertion.Bottom(e, str);
        }
        
        if(sts == '')
            sts = 'checked="checked"';
        else
            sts = '';
        var ckStr = '<div class="ck"><input id="Ck_'+obj.S+'" type="checkbox" value="'+obj.S+'" onclick="Check(this)" '+sts+' /><label for="Ck_'+obj.S+'" >'+obj.S+'</label><div>';
        e =  $('StocksHolder');
        new Insertion.Bottom(e, ckStr);
        
        StocksList[StockNum] = obj.S;
        StockNum ++;
        
    }
    else
    {
        var oObj = oVal[obj.S];
        
        var ff = null;
        if(obj['P']!=oObj['P'])
        {
            var rwc = $(obj.S+'_CH');
            rwc.className =GenClass(obj,'P');
//            $(obj.S+'_S').className = GenClass(obj,'P');
            rwc.addClassName('ch');
            Element.update(rwc,GetChange(obj));
            window.setTimeout("$('"+obj.S+"_CH').removeClassName('ch');", 1300);
        }
        for(var j=0; j < dFields.length; j++)
        {
            ff = dFields[j];
            var vchange = (obj[ff[0]]!=oObj[ff[0]]);
            if(!vchange)
            {
                if(obj[ff[1]] && obj[ff[1]]!=oObj[ff[1]])
                {
                    var rw = $(obj.S+'_'+ff[0]);
                    if(obj[ff[1]]==0)
                    {
                        if(obj[ff[0]]==0)
                            Element.update(rw, '');
                    }
                    else if(obj[ff[0]]==0)
                    {
                        rw.className = '';
                        rw.addClassName('ch');
                        Element.update(rw, GetAT(obj[ff[0]]));
                        window.setTimeout('$("'+obj.S+'_'+ff[0]+'").removeClassName("ch")', 1300);
                    }
                    
                    rw = $(obj.S+'_'+ff[1]);
                    rw.addClassName('ch');
                    Element.update(rw,isNull(obj[ff[1]]));
                    window.setTimeout("$('"+obj.S+"_"+ff[1]+"').removeClassName('ch');", 1300);
                    //$(obj.S+'_'+value.key).innerHTML = obj[value.key];
                    oObj[ff[1]] = obj[ff[1]];
                }
                
                for(var ip = 2; ip < ff.length; ip++ )
                {
                    if(obj[ff[ip]]!=oObj[ff[ip]])
                    {
                        var rw = $(obj.S+'_'+ff[ip]);
                        rw.addClassName('ch');
                        Element.update(rw,isNull(obj[ff[ip]]));
                        window.setTimeout("$('"+obj.S+"_"+ff[ip]+"').removeClassName('ch');", 1300);
                        //$(obj.S+'_'+value.key).innerHTML = obj[value.key];
                        oObj[ff[ip]] = obj[ff[ip]];
                    }
                }
            }
            else
            {
                var rw = $(obj.S+'_'+ff[0]);
                rw.className = GenClass(obj,ff[0]);
                rw.addClassName('ch');
                Element.update(rw,isNull(obj[ff[0]], obj[ff[1]]));
                window.setTimeout('$("'+obj.S+'_'+ff[0]+'").removeClassName("ch")', 1300);
                //$(obj.S+'_'+value.key).innerHTML = obj[value.key];
                oObj[ff[0]] = obj[ff[0]];
                
                for(var ip = 1; ip < ff.length; ip++ )
                {
                    rw = $(obj.S+'_'+ff[ip]);
                    rw.className = GenClass(obj,ff[0]);
                    if(obj[ff[ip]]!=oObj[ff[ip]])
                    {
                        rw.addClassName('ch');
                        Element.update(rw,isNull(obj[ff[ip]]));
                        window.setTimeout('$("'+obj.S+'_'+ff[ip]+'").removeClassName("ch")', 1300);
                        //$(obj.S+'_'+value.key).innerHTML = obj[value.key];
                        oObj[ff[ip]] = obj[ff[ip]];
                    }
                }
            
            }
        }
        for(j=0; j < oFields.length; j++)
        {
            ff = oFields[j];
            if(obj[ff]!=oObj[ff])
            {
                var rw = $(obj.S+'_'+ff);
                rw.addClassName('ch');
                Element.update(rw,isNull(obj[ff]));
                window.setTimeout("$('"+obj.S+"_"+ff+"').removeClassName('ch');", 1300);
                //$(obj.S+'_'+value.key).innerHTML = obj[value.key];
                oObj[ff] = obj[ff];
            }
        }
//        $H(obj).each(function(value){
//            if(obj[value.key]!=oObj[value.key])
//            {
//                var rw = $(obj.S+'_'+value.key);
//                rw.addClassName('ch');
//                Element.update(rw,isNull(obj[value.key]));
//                window.setTimeout('$("'+obj.S+'_'+value.key+'").removeClassName("ch")', 1300);
//                //$(obj.S+'_'+value.key).innerHTML = obj[value.key];
//                oObj[value.key] = obj[value.key];
//            }
//        });
    
    }
}




window.onload = function(){
    if(Type != 'put')
        LoadCookie();
    PbLang.Init();
    RequestData();
    window.setInterval('RequestData()', 3000);
    window.setInterval('Tick()', 1000);
    if(Type != 'put')
        InitSectors();
}

function Tick()
{
    Tm_S++;
    if(Tm_S>59)
    {
        Tm_S = 0;
        Tm_M++;
        if(Tm_M>59)
        {
            Tm_M = 0;
            Tm_H++;
            if(Tm_H>23)
            {
                Tm_H = 0;
            }
        }
    }
    $('_Timer').update((Tm_H<10?'0':'') +Tm_H+':'+ (Tm_M<10?'0':'') +Tm_M+':'+ (Tm_S<10?'0':'') +Tm_S);
}

window.onresize = function(){
    //syncHeader();
}
function RequestData()
{
    var params = {};
    params.type = Type;
    if(lUpdate)
        params.lu = lUpdate;
    new Ajax.Request('HoPrice.aspx',
    {
        method:'POST',
        onSuccess: function(transport){
            var response = transport.responseText || "";
            EvalStr(response);
            //alert(response);
//            window.setTimeout('RequestData()', 2000);//Thời gian request lại sau khi nhận được thông tin
        },
        onFailure: function(){ // window.setTimeout('RequestData()', 5000);
        },
        parameters: params
    });
}

function EvalStr(obj)
{
    var rs = obj.split('|*|');
    for(var i=0; i<rs.length; i++)
    {
        eval("GenRow(" + rs[i] + ")"); 
    }
    syncHeader();
}


function syncHeader()
{
    var fH = $('fTable');
    var sH= $('sTable');
    fH.style.width = Element.getWidth(sH) + 'px';
    for(var i =0; i<fH.rows.length;i++)
    {
        for(var j = 0; j < fH.rows[i].cells.length; j++)
        {
            fH.rows[i].cells[j].style.width = (Element.getWidth(sH.rows[i].cells[j])) + 'px';
        }
    }
}

_isscroll = false;
var scrolldelay = null;
var lastwinT = 0;

function CheckScroll(obj)
{
    _isscroll = !_isscroll;
    if(_isscroll)
    {
        $('scrlabel').innerHTML = 'Bỏ chức năng cuộn';
        pageScroll();
        //obj.innerHTML = ;
    }
    else
    {
        $('scrlabel').innerHTML = 'Cuộn màn hình';
        clearTimeout(scrolldelay);
        //obj.innerHTML = 'Cuộn màn hình';
    }
}

window.onscroll= function(){
    lastwinT = document.viewport.getScrollOffsets()[1];
    var headT = $('sHeader').cumulativeOffset()[1];
    if(lastwinT>headT)
        $('fPanel').show();
    else
        $('fPanel').hide();
    //alert($('fPanel').cumulativeOffset()[1]);
}

function pageScroll() {
    var tmp = document.viewport.getScrollOffsets()[1];
	window.scrollBy(0,1); // horizontal and vertical scroll increments
	if(tmp == document.viewport.getScrollOffsets()[1])
	    window.scroll(0, 0);
	scrolldelay = setTimeout('pageScroll()',70); // scrolls every 100 milliseconds
    	
}

//--------------             Check select stocks
function Check(obj)
{
    if(obj.checked)
    {
        $(obj.value + '').show();
        RemoveStock(obj.value);
    }
    else
    {
        $(obj.value + '').hide();
        AddStock(obj.value);
    }
}

function CheckAll(obj)
{
    for(var i = 0; i < StockNum; i++)
    {
        $('Ck_' + StocksList[i]).checked = obj.checked;
        
        if(obj.checked)
        {
            $(StocksList[i] + '').show();
            RemoveStock(StocksList[i]);
        }
        else
        {
            $(StocksList[i] + '').hide();
            AddStock(StocksList[i]);
        }
    }
}

function CheckSec(obj)
{
    var Sector = Sectors[obj.value];
    for(var i = 1; i < Sector.length; i++)
    {
        if($(Sector[i] + '') == null)
            continue;
        $('Ck_' + Sector[i]).checked = obj.checked;
        
        if(obj.checked)
        {
            $(Sector[i] + '').show();
            RemoveStock(Sector[i]);
        }
        else
        {
            $(Sector[i] + '').hide();
            AddStock(Sector[i]);
        }
    }
}

function CheckByPrice(obj, flag)
{
    var ck = obj.checked;
    for(var i=0; i< StockNum; i++)
    {
        var val = oVal[StocksList[i]];
        if(val[flag] == val.P)
        {
            $('Ck_' + val.S).checked = ck;
        
            if(ck)
            {
                $(val.S + '').show();
                RemoveStock(val.S);
            }
            else
            {
                $(val.S + '').hide();
                AddStock(val.S);
            }
        }
    }

}

function InitSectors()
{
    var e = $('CkHolder');
    for(var i=0; i < Sectors.length; i++)
    {
        var str = '<div class="cksec"><input id="Ck_G'+i+'" type="checkbox" value="'+i+'" onclick="CheckSec(this)" /><label for="Ck_G'+i+'" >'+Sectors[i][0]+'</label><div>'
        new Insertion.Bottom(e, str);
    }
}

function rearange(obj)
{
    var e;
    var str = '<tr id="'+obj.id+'" title="'+obj.title+'" ondblclick="rearange(this)">' + obj.innerHTML + '</tr>';
    var id = obj.id;
    $(obj).remove();
    if(StockSort[id])
    {
        var i = 0;
        while(i < StockNum && StocksList[i] != id)
            i++;
        
        i++;
        while(i < StockNum && StockSort[StocksList[i]])
            i++;
        if(i<StockNum)
        {
            e = $(StocksList[i]);
            new Insertion.Before(e, str);
        }
        else
        {
            e = $('sHolder');
            new Insertion.Bottom(e, str);
        }
        StockSort[id] = null;
        RemoveStockS(id);
    }
    else
    {
        var i = 0;
        while(i < StockNum && StocksList[i] != id)
            i++;
        
        i--;
        while(i > -1 && !StockSort[StocksList[i]])
            i--;
        if(i>-1)
        {
            e = $(StocksList[i]);
            new Insertion.After(e, str);
        }
        else
        {
            e = $('asHolder');
            new Insertion.Top(e, str);
        }
        
        StockSort[id] = true;
        AddStockS(id);
    }
}

