﻿var _SanVangObject = {  
    debugData: null
    
    ,updatedTime : {
        date: null
        ,time: null
    }
    
    ,status : null
    
    ,header : {
        OPENPRICE: 0
        ,LOWESTPRICE: 0
        ,HIGHESTPRICE: 0
        ,MATCHVOL: 0
        ,MATCHAMT: 0
    }
    
    ,bestBuy : {
        prices: []
        ,volumes: []
    }
    
    ,bestSell : {
        prices: []
        ,volumes: []
    }
    
    ,CURRPRICE : 0
    
    ,MATQTTY : 0
    
    ,DIFFPRICE : {
        value: 0
        ,isNegative: false
    }
    
    ,mkDeal : {
        buy: []
        ,sell: []
    }
    
    ,mkCancel : {
        buy: []
        ,sell: []
    }
    
    ,GetCurrentIndex: function( arg ){
        var _retVal = -1;
        if (arg.TXTIME != 'null'){
            if ( arg.List != null){
                for ( i=0; i<=arg.List.length-1; i++){
                    if (arg.TXTIME == arg.List[i].TXTIME){
                        _retVal = i;
                        break;
                    }
                }
            }
        }
        else{
            _retVal = arg.List.length;
        }
        _retVal  = _retVal != -1 ? _retVal : arg.List.length;
        return _retVal;
    }

    ,LoadData : function (){
        //
        var ajax = $.manageAjax({manageType: 'queue', maxReq: 1, blockSameRequest: true});
        ajax.add({
            url: "DataHandler.ashx",
            //url: "DemoData.xml",
            data: {},
            //data: {},
            datatype: 'text',
            success: function( data ){
                //log('got Data. <input type="button" value="Show/Hide" onclick="javascript:$(this).next().toggle();"/><div class="logData hide">' + data.replace(/</g, '&lt;').replace(/>/g, '&gt;') + '</div>');
                //log('got Data');
                _SanVangObject.debugData = data;
                
                
                if (data != undefined && data != ''){
                    var _tagBuyPrice = 'BESTBUYPRC';
                    var _tagBuyVol = 'BESTBUYVOL';
                    var _tagSellPrice = 'BESTSELPRC';
                    var _tagSellVol = 'BESTSELVOL';
                    var _data = null;
                    
                    /*
                    
                    if ($.browser.msie){
                        _data = $.textToXML(data);
                    }
                    */
                    _data = $.textToXML(data);
                    _data = $(_data).find('Ticker');
                                                            
                    _SanVangObject.header.OPENPRICE = addCommas( _data.find('OPENPRICE').text() ) ;
                    _SanVangObject.header.LOWESTPRICE = addCommas( _data.find('LOWESTPRICE').text() );
                    _SanVangObject.header.HIGHESTPRICE = addCommas( _data.find('HIGHESTPRICE').text() );
                    _SanVangObject.header.MATCHVOL = addCommas( _data.find('MATCHVOL').text() );
                    _SanVangObject.header.MATCHAMT = addCommas( _data.find('MATCHAMT').text() );


                    _SanVangObject.updatedTime.date = _data.find('MKTDATE').text();
                    _SanVangObject.updatedTime.time= _data.find('MKTTIME').text();
                    _SanVangObject.status = _data.find('MKTSTATUS').text();
                    _SanVangObject.CURRPRICE = addCommas( _data.find('CURRPRICE').text() );
                    _SanVangObject.DIFFPRICE.value = addCommas (_data.find('DIFFPRICE').text() );
                    _SanVangObject.DIFFPRICE.isNegative = _SanVangObject.DIFFPRICE.value < 0;
                    _SanVangObject.MATQTTY = addCommas (_data.find('MATQTTY').text() );

                    for(var i=1; i<=6; i++){
                        _SanVangObject.bestBuy.prices[i-1] =  addCommas( _data.find(_tagBuyPrice + i).text() );
                        _SanVangObject.bestBuy.volumes[i-1] =  addCommas (_data.find(_tagBuyVol + i).text() );
                        _SanVangObject.bestSell.prices[i-1] =  addCommas (_data.find(_tagSellPrice + i).text() );
                        _SanVangObject.bestSell.volumes[i-1] =  addCommas (_data.find(_tagSellVol + i).text() );
                    }
                    
                    var _dsIdx=0, _dbIdx=0, _csIdx=0, _cbIdx= 0;
                    
                    _data.find('MKTDEAL Table').each(function( idx ){
                        //alert( _data.find('MKTDEAL Table:has(BSCA):contains("S")').size() );
                    
                        if ($(this).find('BSCA').text()=='S'){
                            _SanVangObject.mkDeal.sell[ _dsIdx ] = {
                                SYMBOL : $(this).find('SYMBOL').text()
                                ,ORDERID : $(this).find('ORDERID').text()
                                ,EXECQTTY : addCommas ($(this).find('EXECQTTY').text() )
                                ,REMAINQTTY : addCommas ($(this).find('REMAINQTTY').text() )
                                ,TXTIME : $(this).find('TXTIME').text()
                                ,BSCA : $(this).find('BSCA').text()
                            }
                            _dsIdx++;
                        }
                        else if ($(this).find('BSCA').text()=='B'){
                            _SanVangObject.mkDeal.buy[ _dbIdx ] = {
                                SYMBOL : $(this).find('SYMBOL').text()
                                ,ORDERID : $(this).find('ORDERID').text()
                                ,EXECQTTY : addCommas ($(this).find('EXECQTTY').text() )
                                ,REMAINQTTY : addCommas ($(this).find('REMAINQTTY').text() )
                                ,TXTIME : $(this).find('TXTIME').text()
                                ,BSCA : $(this).find('BSCA').text()
                            }
                            _dbIdx++;
                        }
                    });
                    
                    _data.find('MKTCANCEL Table').each(function( idx ){
                        if ($(this).find('BSCA').text()=='S'){                        
                            _SanVangObject.mkCancel.sell[ _csIdx ] = {
                                SYMBOL : $(this).find('SYMBOL').text()
                                ,ORDERID : $(this).find('ORDERID').text()
                                ,CANCELQTTY : addCommas ($(this).find('CANCELQTTY').text() )
                                ,TXTIME : $(this).find('TXTIME').text()
                                ,BSCA : $(this).find('BSCA').text()
                            }
                            _csIdx++;
                        }
                        else if ($(this).find('BSCA').text()=='B'){
                            _SanVangObject.mkCancel.buy[ _cbIdx ] = {
                                SYMBOL : $(this).find('SYMBOL').text()
                                ,ORDERID : $(this).find('ORDERID').text()
                                ,CANCELQTTY : addCommas ($(this).find('CANCELQTTY').text() )
                                ,TXTIME : $(this).find('TXTIME').text()
                                ,BSCA : $(this).find('BSCA').text()
                            }
                            _cbIdx++
                        }
                    });
                    
                    
                    _SanVangObject.Display();
                    
                }
                
                var _t = setTimeout('_SanVangObject.LoadData()', 7000);
            }               
        });
    }
    
    ,Highlight : function( arg ){
        arg.addClass('hightlight').animate({opacity: 0.9}, 2000, null, _SanVangObject.RemoveHightlightClass);
    }
    
    ,Display : function(){
        var _tagBuyPrice = 'BESTBUYPRC';
        var _tagBuyVol = 'BESTBUYVOL';
        var _tagSellPrice = 'BESTSELPRC';
        var _tagSellVol = 'BESTSELVOL';
        
        if ( $('label#UpdateDate').text() != _SanVangObject.updatedTime.date)
        {
            $('label#UpdateDate').text(_SanVangObject.updatedTime.date).ready(function(){
                _SanVangObject.Highlight ( $('label#UpdateDate') );
            });
        }

        if ( $('label#UpdateTime').text() != _SanVangObject.updatedTime.time)
        {
            $('label#UpdateTime').text(_SanVangObject.updatedTime.time).ready(function(){
                _SanVangObject.Highlight ( $('label#UpdateTime') );
            });
        }            
        
        //alert($('label#Status').attr('value'));
        if ( $('label#Status').attr('value') != _SanVangObject.status)
        {
            var _str = '';
            $('label#Status').attr('value', _SanVangObject.status);
            switch(_SanVangObject.status){
                case '1':
                    _str = 'Đang giao dịch';
                    break;
                case '0':
                    _str = 'Ngưng giao dịch';
                    break;
                    
            }
            $('label#Status').text(_str).ready(function(){
                _SanVangObject.Highlight ( $('label#Status') );
            });
        }            

        if ( $('label#OPENPRICE').text() != _SanVangObject.header.OPENPRICE)
        {
            $('label#OPENPRICE').text(_SanVangObject.header.OPENPRICE).ready(function(){
                _SanVangObject.Highlight ( $('label#OPENPRICE') );
            });
        }            

        if ( $('label#LOWESTPRICE').text() != _SanVangObject.header.LOWESTPRICE)
        {
            $('label#LOWESTPRICE').text(_SanVangObject.header.LOWESTPRICE).ready(function(){
                _SanVangObject.Highlight ( $('label#LOWESTPRICE') );
            });
        }            
        if ( $('label#HIGHESTPRICE').text() != _SanVangObject.header.HIGHESTPRICE)
        {
            $('label#HIGHESTPRICE').text(_SanVangObject.header.HIGHESTPRICE).ready(function(){
                _SanVangObject.Highlight ( $('label#HIGHESTPRICE') );
            });
        }            
        if ( $('label#MATCHVOL').text() != _SanVangObject.header.MATCHVOL)
        {
            $('label#MATCHVOL').text(_SanVangObject.header.MATCHVOL).ready(function(){
                _SanVangObject.Highlight ( $('label#MATCHVOL') );
            });
        }            
        if ( $('label#MATCHAMT').text() != _SanVangObject.header.MATCHAMT)
        {
            $('label#MATCHAMT').text(_SanVangObject.header.MATCHAMT).ready(function(){
                _SanVangObject.Highlight ( $('label#MATCHAMT') );
            });
        }            

        $('label#CURRPRICE').text(_SanVangObject.CURRPRICE);
        $('label#MATQTTY').text(_SanVangObject.MATQTTY);
        
        $('label#DIFFPRICE').text(_SanVangObject.DIFFPRICE.value);
        if (_SanVangObject.DIFFPRICE.isNegative)
            $('label#DIFFPRICE').addClass('red');
        else
            $('label#DIFFPRICE').addClass('blue');
        
        for (var i=1; i<=6; i++){
            $('label#' + _tagBuyPrice + i).text(_SanVangObject.bestBuy.prices[i-1]);
            $('label#' + _tagBuyVol + i).text(_SanVangObject.bestBuy.volumes[i-1]);

            $('label#' + _tagSellPrice + i).text(_SanVangObject.bestSell.prices[i-1]);
            $('label#' + _tagSellVol + i).text(_SanVangObject.bestSell.volumes[i-1]);
        }
        
        var _updateTimes = {
            ds : _SanVangObject.GetCurrentIndex({
                   List: _SanVangObject.mkDeal.sell
                   ,TXTIME: $('.tblLenhBanKhop tbody>tr:first').attr('TXTIME') == undefined?'null':$('.tblLenhBanKhop tbody>tr:first').attr('TXTIME') 
                }) 
            ,db: _SanVangObject.GetCurrentIndex({
                   List: _SanVangObject.mkDeal.buy
                   ,TXTIME: $('.tblLenhMuaKhop tbody>tr:first').attr('TXTIME') == undefined?'null':$('.tblLenhMuaKhop tbody>tr:first').attr('TXTIME')
                }) 
            
            ,cs : _SanVangObject.GetCurrentIndex({
                   List: _SanVangObject.mkCancel.sell
                   ,TXTIME: $('.tblLenhBanHuy tbody>tr:first').attr('TXTIME') == undefined?'null':$('.tblLenhBanHuy tbody>tr:first').attr('TXTIME')
                })
            ,cb : _SanVangObject.GetCurrentIndex({
                   List: _SanVangObject.mkCancel.buy
                   ,TXTIME: $('.tblLenhMuaHuy tbody>tr:first').attr('TXTIME') == undefined?'null':$('.tblLenhMuaHuy tbody>tr:first').attr('TXTIME')
                })
        };
        //log('['+ $('.tblLenhBanKhop tbody>tr:first').attr('TXTIME') == undefined?'null':$('.tblLenhBanKhop tbody>tr:first').attr('TXTIME') +']index=' + _updateTimes.ds);
        for(var i=_updateTimes.ds-1; i >=0 ; i-- )
        {
            var _item = _SanVangObject.mkDeal.sell[i];
            _SanVangObject.AddRow ({
                Container : $('.tblLenhBanKhop tbody')
                ,Item: _item
                ,Type: 'D'
            });
        }

        for(var i=_updateTimes.db-1; i >=0 ; i-- )
        {
            var _item = _SanVangObject.mkDeal.buy[i];
            _SanVangObject.AddRow ({
                Container : $('.tblLenhMuaKhop tbody')
                ,Item: _item
                ,Type: 'D'
            });
        }

        for(var i=_updateTimes.cs-1; i >=0 ; i-- )
        {
            var _item = _SanVangObject.mkCancel.sell[i];
            _SanVangObject.AddRow ({
                Container : $('.tblLenhBanHuy tbody')
                ,Item: _item
                ,Type: 'C'
            });
        }

        for(var i=_updateTimes.cb-1; i >=0 ; i-- )
        {
            var _item = _SanVangObject.mkCancel.buy[i];
            _SanVangObject.AddRow ({
                Container : $('.tblLenhMuaHuy tbody')
                ,Item: _item
                ,Type: 'C'
            });
        }

    }
    
    ,ResetClass: function( arg ){
        arg.Container.find('tr').each(function( i ){
            if (i % 2 != 0){
                $(this).addClass('alternative').removeClass('default');
            }
            else{
                $(this).removeClass('alternative').addClass('default');
            }
        });
    }
    
    ,RemoveHightlightClass: function(){
        $(this).removeClass('hightlight');
    }
    
    ,AddRow : function ( arg ) {
        
        //$.dump(arg.Item);
        var _resetCSS = false;
        var _html = '<tr class="default" TXTIME="' +  arg.Item.TXTIME + '">';
        var _cellClass = 'defaultCell2';
        if (arg.Type == 'D'){            
            _html += '<td class="' + _cellClass + '">' + arg.Item.ORDERID + '</td>';
            _html += '<td class="' + _cellClass + '">' + arg.Item.EXECQTTY + '</td>';
            _html += '<td class="' + _cellClass + '">' + arg.Item.REMAINQTTY + '</td>';
            _resetCSS = true;
        }
        else{
            _cellClass = 'defaultCell3';
            _html += '<td class="' + _cellClass + '">' + arg.Item.ORDERID + '</td>';
            _html += '<td class="' + _cellClass + '">' + arg.Item.CANCELQTTY + '</td>';
        }
        _html += '</tr>';
        var _row = $(_html).insertBefore(arg.Container.find('tr:first'));
        arg.Container.find('tr:last').remove();
        if (_resetCSS)
            _SanVangObject.ResetClass( arg );
        _SanVangObject.Highlight (_row.find('td') );
    }
};

function log( arg ){
    var _msg = '';
    if (typeof(arg) == 'string')
        _msg = arg;
    else
        _msg = arg.Message;
    var _date = new Date();
    
    var _str = '<span class="logDateTime hide">[' +  _date.toLocaleString () + ']:</span>' + _msg + '<br />';
    $('.log').prepend(_str);
};

$(function(){
    $('.btnData').click(function(){
        //$.dump(_SanVangObject.debugData);
        
        var _cmd = eval( $('.inpDebug').val());
    });

    log('_SanVangObject.LoadData()');
    _SanVangObject.LoadData();
});

