//
// AJAX handling
//
// -------------------------------------------------------
// Top Level Functions
// -------------------------------------------------------

function doReload() {
    setGroup()
    doSlowReload()
    doFastReload()
}

function doFastReload() {

    if (location.href.match(/top5/)) {
        reLoadTop5()
        setTimeout("doFastReload()", AJAX_FAST_REFRESH);
    }
}

function doSlowReload() {

    if (location.href.match(/top5/)) {
        reLoadTop5News(1)
        setTimeout("doSlowReload()", AJAX_SLOW_REFRESH);
    } else {
        reLoad()
        loadPods(0)
        setTimeout("doSlowReload()", AJAX_SLOW_REFRESH);
    }
}

function doPodReload(init) {

    if (init) {
        loadPods(1)
    } else {
        loadPods(0)
    }
    setTimeout("doPodReload()", AJAX_SLOW_REFRESH);
}

function loadPods(charts) {

    // Slight hack - charts is set for intial load, so always load
    // once
    //
    if (!marketIsOpen() && !charts) { return }

    if (!$('div.podGroup').length) {
        return
    }

    loadTablePod('todaysPrices')
    loadTablePod('boxTen')
    loadTablePod('boxEleven')
    loadTablePod('boxTwelve')
    loadTablePod('boxThirteen')
    loadNewsPod('NewsFull', 6, 'Quoted')
    loadNewsPod('News', 4)
    loadNewsPod('News2', 4)
    if (charts) {
        loadCharts()
    }
}

function loadCharts() {

    loadChartPod('LargeChart', 'Large')
    loadChartPod('DailyChart', 'Small')
    loadChartPod('DailyChart2', 'Small')
}

function loadIRPods(init) {

    if (init) {
        _loadIRPods(1)
    } else {
        _loadIRPods(0)
    }
    setTimeout("loadIRPods()", AJAX_SLOW_REFRESH)
}

function _loadIRPods(init) {

    if (!marketIsOpen() && !init) { return }

    // Determine parameters
    //
    var search = location.search

    $('a.more').attr('href', '/news.shtml' + search)
    search   = search.split('=')
    var isin = search[1]

    loadNewsPod('News', 4, '', isin)
    loadLast5TradesPod(init,'last5Trades')
    if ($('div#Accounts')) {
        if ($('div#Accounts_Content').html() == '') {
            loadAccountsPod('Accounts', isin)
        }
    }
    if ($('div#MarketInfo')) {
        if ($('div#MarketInfo_Content').html() == '') {
            loadMarketInfoPod('MarketInfo', isin)
        }
    }
    if (init) {
        loadChartPod('DailyChart', 'Small', isin)
    }
    doContactsMore('Details', isin)
}

function loadPLUSIRPods(init) {

    if (init) {
        _loadPLUSIRPods(1)
    } else {
        _loadPLUSIRPods(0)
    }
    setTimeout("loadPLUSIRPods()", AJAX_SLOW_REFRESH)
}

function _loadPLUSIRPods(init) {

    if (!marketIsOpen() && !init) { return }

    var isin = 'GB0032654641/GBX/PLUS-exn';

    if (init) {
        setPodState('News', 'open')
        setPodState('DailyChart', 'open')
        setPodState('last5Trades', 'none')
    }
    loadIRSharePrice()
    $('a.more').attr('href', '/news.shtml?ISIN=' + isin)
    loadNewsPod('News', 5, '', isin)
    loadLast5IRTradesPod('last5Trades')
    if (init) {
        loadChartPod('DailyChart', 'Small', isin)
    }
}

function doClock() {

    if (!UPDATE_CLOCK) {
        return
    }
    if ($('div.comboxTime p:first').html()) {
        reLoadDate()
        reLoadTime()
    }
}

// -------------------------------------------------------
// Set Radio Buttons
// -------------------------------------------------------

function setGroup() {

    var group  = ''
    var search = location.search
    if (search.match(/Group=/)) {
        var group = search.split('Group=')
        group     = group[1]
        group     = group.split('&')
        group     = group[0]
        
        var src = ''
        var alt = ''
        if (group == 'Quoted') {
            group = 'PlusQuoted'
            src   = 'PLUS_quoted_Companies_Top_5.png'
            alt   = 'PLUS Quoted Companies Top 5'
        }
        if (group == 'Listed') {
            group = 'PlusListed'
            src   = 'PLUS_listed_Companies_Top_5.png'
            alt   = 'PLUS Listed Companies Top 5'
        }
        if (group == 'Traded') {
            group = 'TradedListed'
            src   = 'PLUS_traded_Listed_Companies_Top_5.png'
            alt   = 'PLUS Traded Companies Top 5'

        }
        if (group == 'Unlisted') {
            group = 'TradedUnlisted'
            src   = 'PLUS_traded_Unlisted_Companies_Top_5.png'
            alt   = 'PLUS Traded Unlisted Companies Top 5'
        }
        if (group == 'All' || group == '') {
            group = 'All'
            src   = 'PLUS_Companies_Top_5.png'
            alt   = 'PLUS Companies Top 5'
        }
    }
    if ($('input#listBy' + group)) {
        $('input#listBy' + group).attr('checked', 1)
    }
    if ($('img#titleImg') && src != '') {
        $('img#titleImg').attr('src', '/images/titles/' + src)
        $('img#titleImg').attr('alt', alt)
    }
}

// -------------------------------------------------------
// Re-Load Table Content
// -------------------------------------------------------

function reLoad() {

    if (!marketIsOpen()) { return }

    // Determine parameters
    //
    var search = location.search.replace(/^\?/, "&")

    // Determine the default parameters for the url
    //
    var params  = ''
    var ajaxURL = ''
    var url = location.href
    if (url.match(/list\.html/)) {
        ajaxURL = 'a2z3' ;
        params  = '&action=a2z&TAB=y&N=20' ;
    } else if (url.match(/gainers/)) {
        ajaxURL = 'sortby2' ;
        params  = '&action=Gainers&TAB=y&N=20' ;
    } else if (url.match(/fallers/)) {
        ajaxURL = 'sortby2' ;
        params  = '&action=Fallers&TAB=y&N=20' ;
    } else if (url.match(/volume/)) {
        ajaxURL = 'sortby2' ;
        params  = '&action=Volume&TAB=y&N=20' ;
    } else if (url.match(/glance/)) {

        // Disable for now
        //
        return ;
        ajaxURL = 'glance3' ;
        params  = '' ;
    } else {
        ajaxURL     = 'a2z3' ;
        params      = '&action=a2z&TAB=y' ;
        if (url.match(/PLUS_/)) {
            // Split out type from PLUS_<type>_a2z.shtml
            //
            var typeStr = url.split('/')[3].split('_')[1]
            typeStr     = typeStr.split('')[0].toUpperCase() + typeStr.substring(1)
            params = params + '&Group=' + typeStr
        }
    }

    $.ajax({
              url:      '/cgi-bin/' + ajaxURL + '.cgi?ajax=1' + search + params,
                                dataType: 'text',
              timeout:  40000,
        error:
            function() {
                return false;
            },
        success:
            function(data){
                $('div.tableMargin table tr').remove()
                $('div.tableMargin table').append(data)
            }
    }) ;
}

function reLoadTop5() {

    if (!marketIsOpen()) { return }

    // Determine parameters
    //
    var search = location.search.replace(/^\?/, "&")

    // Gainers
    //
    $.ajax({
              url:      '/cgi-bin/sortby2.cgi?ajax=1&action=Gainers&N=5&Z=2&Title=Top' + search,
              dataType: 'text',
              timeout:  40000,
        error:
            function() {
                return false;
            },
        success:
            function(data){
                $('table#Top5Gainers tr').remove()
                $('table#Top5Gainers').append(data)
            }
    }) ;

    // Fallers
    //
    $.ajax({

              url:      '/cgi-bin/sortby2.cgi?ajax=1&action=Fallers&N=5&Z=2&Title=Top' + search,
              dataType: 'text',
              timeout:  40000,
        error:
            function() {
                return false;
            },
        success:
            function(data){
                $('table#Top5Fallers tr').remove()
                $('table#Top5Fallers').append(data)
            }
    }) ;

    // Volume
    //
    $.ajax({

              url:      '/cgi-bin/sortby2.cgi?ajax=1&action=Volume&N=5&Z=2&Title=Top' + search,
                                dataType: 'text',
              timeout:  40000,
        error:
            function() {
                return false;
            },
        success:
            function(data){
                $('table#Top5Volume tr').remove()
                $('table#Top5Volume').append(data)
            }
    }) ;
}

function reLoadTop5News(init) {

    if (!marketIsOpen() && !init) { return }

    // Determine parameters
    //
    var search = location.search.replace(/^\?/, "&")

    $.ajax({

              url:      '/cgi-bin/podnews.cgi?N=5' + search,
              dataType: 'text',
              timeout:  40000,
        error:
            function() {
                return false;
            },
        success:
            function(data){
                $('div#Top5Headlines').html(data);
            }
    }) ;
}

// Not Yet Working!
//
function updateTable(id, data) {

    data = data.split(':')
    data = data[1]

    var dataRows = data.split('|')
    for (i = 0; i < rows.length; i++) {
        var rowNo = (i * 2) + 1
        var row = $('table#' + id + ' tbody > tr').eq(rowNo)
        var vals = dataRows[i].split('^')
        for (j = 0; j < vals.length; j++) {
            var cell = row.children().eg(j)
            cell.html(vals[j])
        }
    }
}

// -------------------------------------------------------
// Re-Load Pod Content
// -------------------------------------------------------

function changePodTab(pod, tab) {

    var podClass = $('div#' + pod + ' ul').attr('class')
    $('div#' + pod + ' ul').removeClass(podClass)
    $('div#' + pod + ' ul').addClass('li' + tab + 'Selected')
    loadTablePod(pod)
}

var TABS = {
        1:'Gainers',
        2:'Fallers',
        3:'Volume'
}
var PARAMS = {
        1:'Gainers',
        2:'Losers',
        3:'Volume'
}
var GROUPS = {
        'todaysPrices':'All',
        'boxTen':'Traded',
        'boxEleven':'Quoted',
        'boxTwelve':'Listed',
        'boxThirteen':'Unlisted'
}
var TABLES = {
        'todaysPrices':'TODAY',
        'boxTen':'TRADED',
        'boxEleven':'QUOTED',
        'boxTwelve':'LISTED',
        'boxThirteen':'UNLISTED'
}
var COLS = {
        'Mid':'M',
        'Change':'Ch',
        '% Chg':'Pc',
        'Volume':'V',
        'Bid':'B',
        'Ask':'A',
        'Open':'O',
        'Close':'C',
        'High':'H',
        'Low':'L'
}

function loadTablePod(tbl) {

    var pod = $('div#' + tbl)

    // Determine selected tab
    //
    var selected = $('div#' + tbl + ' ul').attr('class')
    selected     = selected.replace(/li/, '').replace(/Selected/, '')

    // Get customisation
    //
    var colsStr = retrieveCustomisation(tbl)
    if (colsStr) {
        colsStr = colsStr.split('^')
        for (i = 0; i < colsStr.length; i++) {
            colsStr[i] = COLS[colsStr[i]]
        }
        colsStr = '&Cols=' + colsStr.join('|')
    }
    var target = TABLES[tbl] + '_' + TABS[selected].toUpperCase()
    var existing = '0'
    
    // Uncomment to bring back just data
    //
    //if ($('table#' + target + ' tr').length > 0) {
    //    existing = '1'
    //}

    // Update the table
    //
    $.ajax({
              url:      '/cgi-bin/showby2.cgi?ajax=1&Group=' + GROUPS[tbl] +
                            '&Type=Top' + PARAMS[selected] +
                            '&existing=' + existing +
                            '&home=y' + colsStr,
              dataType: 'text',
              timeout:  40000,
        error:
            function() {
                return false;
            },
        success:
            function(data){

                // Hide all tabs
                //
                for (i = 1; i < 4; i++) {
                    $('a#' + TABLES[tbl] + '_' + TABS[i].toUpperCase() + '-more').hide()
                    $('table#' + TABLES[tbl] + '_' + TABS[i].toUpperCase()).hide()
                }

                var target = TABLES[tbl] + '_' + TABS[selected].toUpperCase()
                if (data.match(/^AJAX:/)) {
                    updateTable(target, data)
                } else {
                    $('table#' + target + ' tr').remove()
                    $('table#' + target).append(data)
                }
                $('table#' + target).slideDown()
                $('a#' + target + '-more').show()

                // Add blank rows - hack for IE
                //
                for (i = $('table#' + target + ' tr').length; i < 6; i++) {
                    $('table#' + target).append(
                        '<tr class="seperator1" title="">' +
                        '<tr><td colspan="5">&nbsp;</td>'
                    )
                }
            }
    }) ;
}

function loadNewsPod(id, n, group, inIsin) {

    var isin
    if (inIsin) {
        isin = inIsin
    } else {
        isin = 'GB0005630420/GBP/PLUS-exn'
    }

    // Get customisation
    //
    var params = retrieveCustomisation(id)
    if (params) {
        params   = params.split(':')
        if (params[0] == 'ISIN') {
            var coName = params[1]
            $.ajax({
                    url:      '/cgi-bin/lookup.cgi?ajax=1&name=' + coName,
                    dataType: 'text',
                    timeout:  40000,
                error:
                    function() {
                        return false;
                    },
                success:
                    function(data){
                        isin = data
                        doTitle(id, coName)
                        _loadNewsPod(id, n, '', isin)
                    }
            }) ;
        } else {
            var group = params[1]
            doTitle(id, group)
            _loadNewsPod(id, n, group, '')
        }
    } else {
        if (group) {
            _loadNewsPod(id, n, group, '')
        } else if (isin) {
            _loadNewsPod(id, n, '', isin)
        } else {
            _loadNewsPod(id, n, '', '')
        }
    }
}

function _loadNewsPod(id, n, group, isin) {

    var url = ''

    if (isin) {
         url = '/cgi-bin/podnews.cgi?N=' + n + '&id='+id+'&ISIN=' + isin
     } else if (group) {
         if (group == 'All' && id == 'NewsFull') {
             url = '/cgi-bin/podnews.cgi?Time=1&N=' + n + '&Group=' + group
         } else {
             url = '/cgi-bin/podnews.cgi?N=' + n + '&Group=' + group
         }
     } else {
         url = '/cgi-bin/podnews.cgi?N=' + n
     }

    $.ajax({
            url:      url,
            dataType: 'text',
            timeout:  40000,
        error:
            function () {
                return false;
            },
        success:
            function(data){
                $('div#' + id + '_Content').hide()
                $('div#' + id + '_Content').html(data)
                if (isin) {
                    doNewsMore(id, 'ISIN', isin)
                } else if (group) {
                    doNewsMore(id, 'GROUP', group)
                } else {
                    doNewsMore(id, '', '')
                }
                $('div#' + id + '_Content').slideDown()
            }
    }) ;

}

function loadLast5TradesPod(i_init, id, type, s_isin) {

    // Determine parameters
    //
    if (!s_isin)
    {
      var a_isin_match = window.location.search.match(/^\?ISIN=([^&]+)/);

      s_isin = a_isin_match[1];
    }

    $.ajax({
             type:        "POST",
             async:       true,
             url:         "/PagedTrades",
             data:        '{"isin":"' + s_isin + '",' +
                          '"page_size":5,"direction":0}',
             dataType:    "json",
             contentType: "text/plain",
             processData: 0,
             timeout:     10000,
        error:
             function(a,b,c)
             {
               //alert('fout='+a+','+b+','+c);
               return false;
             },
        success:
             function(json_obj)
             {
               $('div#' + id + '_ajax_loading').hide();

               var s_last_5_trades = _populate_last5trades(i_init,
                                                           s_isin,
                                                           json_obj);

               if (s_last_5_trades.length)
               {
                 $('div#' + id + ' tbody').html(s_last_5_trades);
               }
               else
               {
                 $('div#' + id + ' tbody').html('<tr><td colspan="6">no trade data available for this company</td></tr>');
               }

               $('table#last5Trades').slideDown();
            }
    }) ;
}


function _populate_last5trades(i_init, s_isin, json_obj)
{
  if (!json_obj || !json_obj.trades)
  {
    return '';
  }

  // use an array cuz of exploder
  var a_pta                    = new Array();
  var a_current_trades_ids     = new Array();
  var a_paged_trades           = json_obj.trades;
  var b_is_new                 = 0;
  var s_row_class              = "";
  var b_has_isin               = 0;

  for (var i = 0; i < a_paged_trades.length; i++)
  {
    // row start
    a_current_trades_ids[a_current_trades_ids.length] = a_paged_trades[i][0];
    b_is_new = (!i_init
                &&
                $("tr#paged_trades_" + a_paged_trades[i][0]).length == 0);

    s_row_class = (b_is_new ? "paged_new_trades" : "paged_trades");

    // row heissen id
    a_pta[a_pta.length] = '<tr id="paged_trades_';
    a_pta[a_pta.length] = a_paged_trades[i][0];
    a_pta[a_pta.length] = '" valign="bottom">';

    // cols
    for (var j = 1; j < a_paged_trades[i].length; j++)
    {
      a_pta[a_pta.length] = '<td class="col'
      a_pta[a_pta.length] = j;
      a_pta[a_pta.length] = ' ';
      a_pta[a_pta.length] = s_row_class;
      a_pta[a_pta.length] = '">';
      a_pta[a_pta.length] = a_paged_trades[i][j];
      a_pta[a_pta.length] = '</td>';
    }
    a_pta[a_pta.length] = '</tr>';
  }

  return a_pta.join('');
}

function loadLast5IRTradesPod(id) {

    $.ajax({
            url:      '/cgi-bin/pm_marketdata.cgi?Action=Trades',
            dataType: 'text',
            timeout:  40000,
        error:
            function () {
                return false;
            },
        success:
            function(data){
                data = data.substr(data.indexOf('<tr'))
                $('div#' + id + ' table').css('margin-top','15px')
                $('div#' + id + ' table tbody').html("");
                $('div#' + id + ' table').append(data)
                $('div#' + id + '_ajax_loading').hide()
                $('div#' + id + ' table').slideDown()
            }
    }) ;
}

function loadIRSharePrice() {

    $.ajax({
            url:      '/cgi-bin/pm_marketdata.cgi?Action=Mid',
            dataType: 'text',
            timeout:  40000,
        error:
            function () {
                return false;
            },
        success:
            function(data){
                $('p.time').html(data)
            }
    }) ;
}

function loadMarketInfoPod(id, isin) {

    // Determine parameters
    //
    var search
    if (isin) {
        search = '&ISIN=' + isin
    } else {
        search = location.search.replace(/^\?/, "&")
    }

    $.ajax({
            url:      '/cgi-bin/marketdetail3.cgi?ajax=1&ajaxsection=MarketInfo&' + search,
            dataType: 'text',
            timeout:  40000,
        error:
            function () {
                return false;
            },
        success:
            function(data){
                
                data = data.split('<h4')
                data = data[0]
                data = '<table>' + data + '</table>'
                data = data.replace(/<p>/g, '<tr>')
                data = data.replace(/<\/p>/g, '</tr>')
                data = data.replace(/<strong /g, '<td ')
                data = data.replace(/<\/strong>/g, '</td>')
                data = data.replace(/<span /g, '<td ')
                data = data.replace(/<\/span>/g, '</td>')
                data = data.replace(/Instrument Type/g, 'Inst. Type')
                
                $('div#' + id + '_Content').html('')
                $('div#' + id + '_Content').append(data)
                $('div#' + id + '_Content tr').eq(0).css('color','red')
                $('div#' + id + '_Content tr').eq(2).css('color','red')
                $('div#' + id + '_Content tr').eq(7).css('color','red')
                $('div#' + id + '_Content h4').remove()
                $('div#' + id + '_Content tr').eq(11).css('color','red')
                $('div#' + id + '_Content tr').each(
                    function() {
                        if ($(this).css('color') == 'red') {
                             $(this).remove()
                        }
                    })
                    
                // 6 is Sector...
                //
                var st = ''
                if ($('div#MarketInfo table td.col2').eq(6)) {
                    st = $('div#MarketInfo table td.col2').eq(6).html()
                }
                $('div#MarketInfo table tr').eq(6).remove()

                if (st.length > 20) {
                    $('div#MarketInfo table').append(
                            '<tr>' +
                            '  <td colspan="2"><span id="sectorLabel">Sector:</span></td>' +
                            '</tr>' +
                            '<tr>' +
                            '  <td colspan="2" align="right"><span id="sectorValue">' + st + '</span></td>' +
                            '</tr>')
                } else {
                    $('div#MarketInfo table').append(
                            '<tr>' +
                            '  <td><span id="sectorLabel">Sector:</span></td>' +
                            '  <td align="right"><span id="sectorValue">' + st + '</span></td>' +
                            '</tr>')
                }
                $('div#MarketInfo table').css('margin-top', '-12px')
                $('div#' + id + '_Content td.col2').css('color','#6E7891')
                $('div#' + id + '_Content td.col2').css('text-align','right')
                $('div#' + id + '_Content td.col1').css('color','#01ADEF')

                $('span#sectorLabel').css('color','#01ADEF')
                $('span#sectorValue').css('color','#6E7891')
                
                var more = $('div#' + id + ' a.more').attr('href')
                more = more.replace(/news/, 'data')
                $('div#' + id + ' a.more').attr('href', more)
            }
    }) ;
}

function loadAccountsPod(id, isin) {

    // Determine parameters
    //
    var search
    if (isin) {
        search = '&ISIN=' + isin
    } else {
        search = location.search.replace(/^\?/, "&")
    }

    $.ajax({
            url:      '/cgi-bin/reportdetail2.cgi?ajax=1&' + search,
            dataType: 'text',
            timeout:  40000,
        error:
            function () {
                return false;
            },
        success:
            function(data){
                data = data.replace(/&nbsp;/g, '')
                data = data.replace(/newsleft0/g, 'news0')
                data = data.replace(/newsleft1/g, 'news0')
                $('div#' + id + '_Content').html('<div class="clear"></div>')
                $('div#' + id + '_Content').append(data)
                $('div#' + id + '_Content table tr').gt(3).remove()
                $('div#' + id + '_Content table').css('width', '190px')
                $('div#' + id + '_Content table').css('margin-top', '5px')
                $('div#' + id + '_Content table').css('margin-bottom', '5px')
                $('div#' + id + '_Content').slideDown()

                var more = $('div#' + id + ' a.more').attr('href')
                more = more.replace(/news/, 'reports')
                $('div#' + id + ' a.more').attr('href', more)
            }
    }) ;
}

var CHARTWIDTHS = {
          'Small':170,
          'Large':350
}
var CHARTHEIGHTS = {
          'Small':150,
          'Large':150
}

function loadChartPod(id, size, inIsin) {

    var isin
    var coName
    if (inIsin) {
        isin = inIsin
    }
    var chartType   = 'Xmountain'
    var chartPeriod = {
                         'gridx':52,
                         'unitx':7,
                         'block':'Y',
                         'shift':0,
                         'scale':'month',
                         'period':0
    }

    // Get customisation
    //
    var period = '1 year'
    var params = retrieveCustomisation(id)
    if (params) {
        params        = params.split('^')
        period        = params[1]
        coName        = params[0]
        chartPeriod   = getChartPeriod(period, chartPeriod)
        var chartType = getChartType(params[2])
    }

    period = period.replace(/current month/, 'Curr. Month')
    period = period.replace(/weeks/, 'Week')
    period = period.replace(/month/, 'Month')
    period = period.replace(/year/, 'Year')

    $('div#' + id + ' h3').html(period + ' Chart')

    if (coName) {
        $.ajax({
                url:      '/cgi-bin/lookup.cgi?ajax=1&name=' + coName,
                dataType: 'text',
                timeout:  40000,
            error:
                function () {
                    return false;
                },
            success:
                function(data){
                    isin = data
                    doTitle(id, coName)
                    doChartMore(id, isin)
                    _loadChartPod(id, size, isin, chartType, chartPeriod)
                }
        }) ;
    } else if (isin) {

        // Company Page)
        //
        if ($("input#has_historical").val() == 'no')
        {
          $("div#" + id + "_Content").html("<p>data unavailable</p>");
          return;
        }
        doChartMore(id, isin)
        _loadChartPod(id, size, isin, chartType, chartPeriod)

    } else {

        // Defaults
        //
        isin   = 'GB0005630420/GBP/PLUS-exn'
        coName = 'Mears'

        doTitle(id, coName)
        doChartMore(id, isin)
        _loadChartPod(id, size, isin, chartType, chartPeriod)
    }
}

function _loadChartPod(id, size, isin, chartType, chartPeriod) {

    var gridx  = chartPeriod['gridx']
    var unitx  = chartPeriod['unitx']
    var block  = chartPeriod['block']
    var shift  = chartPeriod['shift']
    var scale  = chartPeriod['scale']
    var period = chartPeriod['period']

    var year2  = (new Date()).getFullYear();
    var year1;

    if (size == 'Large')
    {
      year1 = year2 - 6;
    }
    else
    {
      year1 = year2 - 2;
    }

    var st = '<applet code="Xapplet.class" archive="/jcharts/Xchart.jar" width="' + CHARTWIDTHS[size] + '" height="' + CHARTHEIGHTS[size] + '">' +
             '<param name="source" value="type:Xhistory; host:' + location.hostname + '; isin:' + isin + '; year1:' + year1 + '; year2:' + year2 + '; rate:1000;" />' +
             '<param name="area0" value="color:#F7F7F7; gridx:' + gridx + '; gridy:2; unitx:' + unitx + '; unity:0; block:' + block + '; cursor:off; hover:off;" />' +
             '<param name="area1" value="color:#F7F7F7; size:1; gap:5; range:0; rollover:on;" />' +
             '<param name="draw0" value="color:#0088CE; font:arial; size:9; shift:' + shift + ';" />' +
             '<param name="draw1" value="paint:bright7; label:bright0; fill:#F7F7F7; area:1; type:Xgrid; scale:' + scale + '; period:' + period + ';" />' +
             '<param name="draw2" value="paint:#0088CE; area:1; type:' + chartType + '; field:M;" />' +
             '<param name="draw3" value="paint:bright5; label:bright0; edge:#597786; area:1; type:Xscale;" />' +
             '</applet>'

    $('div#' + id + '_Content').html(st)

    return false ;
}

function unloadChartPod(id) {

    $('div#' + id + '_Content').children().remove()
}

function getChartPeriod(period, chartPeriod) {

    switch(period) {
        case '1 week':
            chartPeriod['gridx'] = 0; chartPeriod['unitx'] = 1; chartPeriod['block'] = 'D'
            chartPeriod['shift'] = 0; chartPeriod['scale'] = 'day'; chartPeriod['period'] = '7'
            break;
        case '2 weeks':
            chartPeriod['gridx'] = 0; chartPeriod['unitx'] = 1; chartPeriod['block'] = 'D'
            chartPeriod['shift'] = 0; chartPeriod['scale'] = 'day'; chartPeriod['period'] = '14'
            break;
        case '3 weeks':
            chartPeriod['gridx'] = 0; chartPeriod['unitx'] = 1; chartPeriod['block'] = 'D'
            chartPeriod['shift'] = 0; chartPeriod['scale'] = 'day'; chartPeriod['period'] = '21'
            break;
        case 'current month':
            chartPeriod['gridx'] = 0; chartPeriod['unitx'] = 1; chartPeriod['block'] = 'M'
            chartPeriod['shift'] = 0; chartPeriod['scale'] = 'day'; chartPeriod['period'] = '1'
            break;
        case '1 month':
            chartPeriod['gridx'] = 0; chartPeriod['unitx'] = 1; chartPeriod['block'] = 'D'
            chartPeriod['shift'] = 0; chartPeriod['scale'] = 'month'; chartPeriod['period'] = '31'
            break;
        case '2 month':
            chartPeriod['gridx'] = 0; chartPeriod['unitx'] = 1; chartPeriod['block'] = 'D'
            chartPeriod['shift'] = 0; chartPeriod['scale'] = 'month'; chartPeriod['period'] = '62'
            break;
        case '3 month':
            chartPeriod['gridx'] = 0; chartPeriod['unitx'] = 1; chartPeriod['block'] = 'D'
            chartPeriod['shift'] = 0; chartPeriod['scale'] = 'month'; chartPeriod['period'] = '93'
            break;
        case '6 month':
            chartPeriod['gridx'] = 0; chartPeriod['unitx'] = 1; chartPeriod['block'] = 'W'
            chartPeriod['shift'] = 0; chartPeriod['scale'] = 'month'; chartPeriod['period'] = '26'
            break;
        case '9 month':
            chartPeriod['gridx'] = 0; chartPeriod['unitx'] = 1; chartPeriod['block'] = 'W'
            chartPeriod['shift'] = 0; chartPeriod['scale'] = 'month'; chartPeriod['period'] = '39'
            break;
        case 'year to date':
            chartPeriod['gridx'] = 0; chartPeriod['unitx'] = 1; chartPeriod['block'] = 'Y'
            chartPeriod['shift'] = 0; chartPeriod['scale'] = 'month'; chartPeriod['period'] = '1'
            break;
        case '1 year':
            chartPeriod['gridx'] = 52; chartPeriod['unitx'] = '7'; chartPeriod['block'] = 'Y'
            chartPeriod['shift'] = 0; chartPeriod['scale'] = 'month'; chartPeriod['period'] = '0'
            break;
        case '2 years':
            chartPeriod['gridx'] = 104; chartPeriod['unitx'] = '7'; chartPeriod['block'] = 'Y'
            chartPeriod['shift'] = 0; chartPeriod['scale'] = 'month'; chartPeriod['period'] = '0'
            break;
        case '3 years':
            chartPeriod['gridx'] = '156'; chartPeriod['unitx'] = '7'; chartPeriod['block'] = 'Y'
            chartPeriod['shift'] = '0'; chartPeriod['scale'] = 'month'; chartPeriod['period'] = '0'
            break;
        case '4 years':
            chartPeriod['gridx'] = '208'; chartPeriod['unitx'] = '7'; chartPeriod['block'] = 'Y'
            chartPeriod['shift'] = '0'; chartPeriod['scale'] = 'month'; chartPeriod['period'] = '0'
            break;
        case '5 years':
            chartPeriod['gridx'] = '260'; chartPeriod['unitx'] = '7'; chartPeriod['block'] = 'Y'
            chartPeriod['shift'] = '0'; chartPeriod['scale'] = 'month'; chartPeriod['period'] = '0'
            break;
        default:
            break;
    }

    return chartPeriod
}

function getChartType(chartType) {

    if (chartType == 'Line')     { return 'Xline'     }
    if (chartType == 'Mountain') { return 'Xmountain' }
    if (chartType == 'Bar')      { return 'Xbar'      }

    return 'Xline'
}

// -------------------------------------------------------
// Company Search
// -------------------------------------------------------

function getCompanies(letter, search, target) {

    $.ajax({

              url:      '/cgi-bin/companynames.cgi?T=pipe&S=' + letter,
              dataType: 'text',
              timeout:  40000,
        error:
            function() {
                return false;
            },
        success:
            function(data){
                data = data.replace(/&amp;/g, '&')
                data = data.split('|')
                var newCompanies = new Array(0)
                for (i = 0; i < data.length; i++) {
                    newCompanies.push('<span>' + data[i] + '</span>')
                }
                $('div#' + target).html(newCompanies.join("<br>"))
                $('div#' + target + ' span').mouseover( function() { $(this).css('color', '#FF0000') } )
                $('div#' + target + ' span').mouseout( function() { $(this).css('color', '#000000') } )
                $('div#' + target + ' span').click( function() { $('input#' + search).val($(this).html()) } )
            }
    }) ;

}

function doTitle(id, coName) {

    var st
    var handle
    if ($('div#' + id + ' a.drag-handle').html()) {
        handle = 'drag-handle'
    } else {
        handle = 'drag-single-handle'
    }
    st = $('div#' + id + ' a.' + handle).html()
    st = st.split(' (')
    st = st[0]

    // Clear paramater if no company, or all (for news)
    //
    if (coName && coName != 'All') {
        st = st + ' (' + coName + ')'
    }
    $('div#' + id + ' a.' + handle).attr('title', st)

    if (!st) {
        st = ''
    }
    if (st.length > 20) {
        $('div#' + id + ' a.' + handle).html(st.substr(0, 17) + '...')
    } else {
        $('div#' + id + ' a.' + handle).html(st)
    }
}

function doChartMore(id, isin) {

    _doMore(id, isin, 'chart')
}

function doContactsMore(id, isin) {

    _doMore(id, isin, 'contacts')
}

function doMore(id, isin) {

    _doMore(id, isin, 'details')
}

function _doMore(id, isin, type) {

    var more  = $('div#' + id + ' a.more').attr('href')
    if (more) {
        more = more.replace(/\/.*.shtml.*$/, '/' + type + '.shtml?ISIN=' + isin)
        $('div#' + id + ' a.more').attr('href', more)
    }
}

function doNewsMore(id, type, param) {

    var url
    if (location.href.match(/PLUS_IR_overview/)) {
        url = 'PLUS_IR_news.shtml'
    } else if (type == 'GROUP') {
        if (param == 'All') {
            url = 'PLUS_news.shtml'
        } else {
            url = 'PLUS_' + param.toLowerCase() + '_news.shtml'
        }
    } else {
        url = 'news.shtml?ISIN=' + param
    }

    $('div#' + id + ' a.more').attr('href', url)
}

// -------------------------------------------------------
// Clock Functions
// -------------------------------------------------------

function reLoadDate() {

    // Date
    //
    $.ajax({
              url:      '/cgi-pl/showDate.pl',
              dataType: 'text',
              timeout:  40000,
        error:
            function() {
                return false;
            },
        success:
            function(data){
                $('div.comboxTime p:first').html(data);
            }
    }) ;

}

function reLoadTime() {

    $.ajax({
          url:      '/cgi-pl/showTime.pl',
          dataType: 'text',
          timeout:  40000,
        error:
            function() {
                return false;
            },
        success:
            function(data){
                showTime(data)
            }
    }) ;
}

var closDay
var offset
var hours
var minutes
var seconds
var suffix
var marketClosedDay = 0

function setOffset(st) {

    st = st.replace(/ \s+/, ' ')
    st = st.split(' ')
    suffix = st[1]
    var timeSt        = st[0]
    timeSt            = timeSt.split(':')
    var serverHours   = +timeSt[0]
    var serverMinutes = +timeSt[1]
    var serverSeconds = +timeSt[2]
    var date       = new Date()
    hours          = date.getHours()
    minutes        = date.getMinutes()
    seconds        = date.getSeconds()

    offset = ((3600 * hours) + (60 * minutes) + seconds) -
             ((3600 * serverHours) + (60 * serverMinutes) + serverSeconds)
}

function showTime(st) {

    var day
    if (st) {
        // st is time|day of week
        //
        st  = st.split('|')
        day = st[1]
        setOffset(st[0])
    }

    marketIsOpen(day)

    var date = new Date()
    var secs = (3600 * date.getHours()) + (60 * date.getMinutes()) + date.getSeconds() - offset

    hours   = Math.floor(secs / 3600)
    minutes = Math.floor((secs - (hours * 3600)) / 60)
    seconds = secs - (hours * 3600) - (minutes * 60)

    if (hours > 23) {
        doClock()
    } else {
        if (hours   < 10) { hours   = '0' + hours   }
        if (minutes < 10) { minutes = '0' + minutes }
        if (seconds < 10) { seconds = '0' + seconds }
        var timeStr = hours + ':' + minutes + ':' + seconds + ' ' + suffix
        $('div.comboxTime p:last').html(timeStr);
        setTimeout("showTime()", CLOCK_INTERVAL);
    }
}

function marketIsOpen(day) {

    if (offset == undefined) {
        $.ajax({
              url:      '/cgi-pl/showTime.pl',
                                dataType: 'text',
              timeout:  40000,
        error:
            function() {
                return false;
            },
        success:
            function(data){
                data = data.split('|')
                setOffset(data[0])
                return _marketIsOpen(data[1])
            }
        })
    } else {
        return _marketIsOpen(day)
    }
}

function _marketIsOpen(day) {

    // Assume open if date not yet retrieved
    //
    var marketOpenDisplay = 0
    var marketOpenUpdate  = 0
    if ($('div.comboxTime p:first').length && offset == undefined) {
       marketOpenDisplay = 1
       marketOpenUpdate  = 1
    }

    var url = $('div.comboxMarketStatusOpen').css('background-image')
    if (!url) {
        return 1
    }

    // Check day first
    //
    if (day) {
        var mClosed = MARKET_CLOSED_DAYS.split(',')
        for (i = 0; i < mClosed.length; i++) {
            if (day == mClosed[i]) {
                marketOpenDisplay = 0
                marketOpenUpdate  = 0
                marketClosedDay   = 1
            }
        }
    }

    if (!marketClosedDay) {
        var date = new Date()
        var now = (3600 * date.getHours()) + (60 * date.getMinutes()) + date.getSeconds() - offset

        var mOpen       = MARKET_OPEN.split(':')
        var mClose      = MARKET_CLOSE.split(':')
        var mDataClose  = MARKET_DATA_END.split(':')

        var marketOpen      = (mOpen[0] * 3600)  + (mOpen[1] * 60)
        var marketClose     = (mClose[0] * 3600) + (mClose[1] * 60)
        var marketDataClose = (mDataClose[0] * 3600) + (mDataClose[1] * 60)

        var url = $('div.comboxMarketStatusOpen').css('background-image')
        if (marketOpen < now && now < marketClose) {
            marketOpenDisplay = 1
        }
        if (marketOpen < now && now < marketDataClose) {
            marketOpenUpdate = 1
        }
    }

    if (marketOpenDisplay) {
        if (url.match(/box_market_status_open/)) {
            url = url.replace(/box_market_status_open/, 'market_status_open')
            $('div.comboxMarketStatusOpen').css('background-image', url)
        }
        if (url.match(/market_status_closed/)) {
            url = url.replace(/market_status_closed/, 'market_status_open')
            $('div.comboxMarketStatusOpen').css('background-image', url)
        }
    } else {
        if (url.match(/box_market_status_open/)) {
            url = url.replace(/box_market_status_open/, 'market_status_closed')
            $('div.comboxMarketStatusOpen').css('background-image', url)
        }
        if (url.match(/market_status_open/)) {
            url = url.replace(/market_status_open/, 'market_status_closed')
            $('div.comboxMarketStatusOpen').css('background-image', url)
        }
    }

    return marketOpenUpdate
}

function getUpdateTime() {

    var date = new Date() ;
    date = date.toString().split(' ')

    return date[0] + ' ' + date[1] + ' ' + date[2] + ' ' + date[4] + ' ' + date[3] ;
}

