var isVertical = true;
var TICKER_DATA_PRICE = 0;
var TICKER_DATA_QUOTE = 1;
var isIE7 = Utils.browser.IE7;
var lh = location.href.split("/");
//var homepage = lh[lh.length-1] == "home";
var homepage = false;
if (document.homepageFlag) {
  homepage = true;
} else {
  for (var i = 0; i < lh.length; i++) {
    if (lh[i] == "home") {
      homepage = true;
      break;
    }
  }
}

//Opens ticker pop-up window
function openVerticalTicker() {
  isVertical = true;
  var tickerWidth = isIE7 ? 260 : 235;
  var tickerHeight = 510;
  var top = 0;
  var left = screen.width - (tickerWidth + (isIE7 ? 12 /*for borders*/ : 0));
  openTicker(true, tickerWidth + 'px', tickerHeight + 'px', top, left);
}
//Opens ticker pop-up window
function openHorizontalTicker() {
  isVertical = false;

  var tickerWidth = 930;
  var tickerHeight = 70;
  var top = 0;
  var left = screen.width - tickerWidth;
  openTicker(false, tickerWidth + 'px', tickerHeight + 'px', top, left);
}

// Opens ticker with full records ( skips limit of 5 );
function openTickerFull()
{
  var link = document.getElementById("ticker_full_link");
  var table = document.getElementById("tickerDataTable");
  if (!link)
    return;
  if (!table)
  {
    table = document.getElementById("ticker_data_table");
    if (!table)
      return;
  }
  var elements = table.getElementsByTagName("tr");
  for (i = 0; i < elements.length; i++)
    if (elements[i].className.indexOf("invisible") != -1)
      elements[i].className = elements[i].className.substr(0, elements[i].className.indexOf("invisible") - 1);
  link.parentNode.removeChild(link);
  document.no_ticker_limit = true;
}

//Opens ticker pop-up window
function openTicker(vertical, tickerWidth, tickerHeight, top, left) {
  openNewWindow('/infostock/ar/updateTicker/' + (vertical ? 'v' : 'h'), 'ticker', tickerWidth + 'px', tickerHeight + 'px',
          true, false, false, top, left);
}

 //XmlHttpRequest object to get the refreshedData
var refreshTickerReq = getXmlHttpRequestObject();
 //Starts the AJAX request.
function refreshTicker(vertical, limit)
{
  isVertical = vertical;
  if (document.no_ticker_limit)
    limit = false;
  isIE7 = Utils.browser.IE7;
  if (!refreshTickerReq)
    return;
  if (refreshTickerReq.readyState == 4 || refreshTickerReq.readyState == 0) {
    refreshTickerReq.open("GET", '/infostock/ar/updateTicker?userAction=refresh&time=' + new  Date().getTime(), true);
    document.refreshlimit = limit;
    refreshTickerReq.onreadystatechange = handleRefreshTicker;
    refreshTickerReq.send(null);
  }
}

 //Called when the AJAX response is returned.
function handleRefreshTicker() {
  if (refreshTickerReq.readyState == 4) {
    var tickerDataDiv = document.getElementById((isVertical ? 'v' : 'h') + '_ticker_div');

	// only if "OK"
    if (refreshTickerReq.status == 200) {
      var parsedXML = refreshTickerReq.responseText == '' ? '' : Base.XML.parseFromString(refreshTickerReq.responseText);
        //tickerDataDiv.innerHTML = refreshTickerReq.responseText;
      var tickerDataTable = document.getElementById('ticker_data_table');
      if (tickerDataTable != null && !document.ticker.force ) {
        updateTickerDataHtml(parsedXML);
      } else {
        document.ticker.force = false;
        var generatedHtml = isVertical ? generateTickerDataHtml(parsedXML, document.refreshlimit) : generateHorizontalTickerDataHtml(parsedXML);
            //alert(generatedHtml);
        //var now = new Date();
        tickerDataDiv.innerHTML = generatedHtml;
      }
    } else {
      tickerDataDiv.innerHTML = "Trying ot connect...: " + refreshTickerReq.status;
    }
  }
}

function generateTickerDataHtml(parsedXML, limit) {
  var extended = false;
  if( document.ticker.show )
    extended = document.ticker.show;
  var tickerDataHTML =
          '<table id="ticker_header_table" border="0" cellspacing="0" cellpadding="1" style="width: ' + ( extended ? '360px;' : (isIE7 && !homepage ? '242px' : '188px') ) + '; table-layout:fixed; font-size: 11px;" class="homeTable">' +
          '<tr>' +
          '   <th width="' + (isIE7 && !homepage ? '80' : '90') + '">' + document.msgs["code"] + '</th>' +
          '   <th width="' + (isIE7 && !homepage ? '56' : '55') + '">' + ( document.ticker.data == TICKER_DATA_PRICE ? document.msgs["price"] : document.msgs["buy"] ) + '</th>' +
          (isIE7 && !homepage && !extended ? '   <th width="62" >&Delta;</th>' : '') +
          '   <th width="43" class="last"> ' + ( document.ticker.data == TICKER_DATA_PRICE ? "&Delta; %" : document.msgs["sell"] ) + '</th>' +
          ( extended ? '<th width="' + (isIE7 && !homepage ? '60' : '55' ) + '">' + document.msgs['buy'] + '</th>' : '' ) +
          ( extended ? '<th class="last" width="' + (isIE7 && !homepage ? '60' : '55' ) + '">' + document.msgs['sell'] + '</th>' : '' ) +
          '</tr>' +
          '</table>' +
          '<table id="ticker_data_table" border="0" cellspacing="0" cellpadding="1" style="table-layout:fixed; font-size: 11px; width: ' + (extended ? '350px' : (isIE7 && !homepage ? '242px' : '188px') ) + '" class="homeTable">';
  if (parsedXML) {
    var root = parsedXML.getElementsByTagName('ticker-data')[0];
    var issuesRoot = root.getElementsByTagName('issues')[0];

    var issues = issuesRoot.getElementsByTagName('issue');
    var rowsNum = issues.length;
    var price = document.ticker.data == TICKER_DATA_PRICE;
    for (var i = 0; i < rowsNum; i++) {
      if (limit && i == limit)
        tickerDataHTML += "<tr id=\"ticker_full_link\"><td colspan=\"5\" align=\"right\"> <a href=\"javascript:openTickerFull( true );\" class=\"speclnk\">" + document.msgs['all'] + "</a> &nbsp; </td></tr>";
      var issue = issues[i];
      var ticker = issue.getElementsByTagName("ticker")[0].firstChild.nodeValue;
      var xetra = issue.getElementsByTagName("xetra")[0].firstChild.nodeValue;
      var name = issue.getElementsByTagName("name")[0].firstChild.nodeValue;
      var changeDirection = issue.getElementsByTagName("change-direction")[0].firstChild.nodeValue;
      var visible = limit && i >= limit ? " invisible" : "";
      tickerDataHTML +=
      '<tr class="' + (i % 2 == 0 ? 'evenrow' : 'oddrow') + visible + '" id="tr_'+ticker+'">\n' +
      '  <td align="left" id="ticker_' + ticker + '" class="first" width="' + (isIE7 && !homepage ? '75' : '80') + '"><a onmouseover="Tip(\''+name+'\');"' +
      (window.name == 'ticker' ? ' href="#" onclick="javascript: changeOpenerLocation( window, \'/infostock/control/quotes/' + ticker + '\'); return false;"' : ' href="/infostock/control/quotes/' + ticker + '"') +
      '" class="speclnk">' + xetra + '&nbsp;/&nbsp;' + ticker + '</a></td>\n' +
      '  <td align="right" id="price_' + ticker + '" class="price right" width="' + (isIE7 && !homepage ? '53' : '47') + '">' + ( price ? issue.getElementsByTagName("price")[0].firstChild.nodeValue : issue.getElementsByTagName("buy_quotes")[0].firstChild.nodeValue ) + '</td>\n' +
      (isIE7 && !homepage && !extended ? '  <td align="right" id="change_' + ticker + '" class="right change_' + changeDirection + '" width="60">' +
                            (changeDirection == 'up' ? '<font class="change_up_arrow">&#9650;</font>' : (changeDirection == 'down' ? '<font class="change_down_arrow">&#9660;</font>' : '')) +
                            issue.getElementsByTagName("change")[0].firstChild.nodeValue + '</td>\n' : '') +
      '  <td align="right" id="change_percents_' + ticker + '" class="'+( price ? 'change_' + changeDirection : "" ) + ' right" width="' + ( isIE7 && !homepage ? '40' : '35' ) + '">' +
      ( price ? (changeDirection == 'up' ? '<font class="change_up_arrow">&#9650;</font>' : (changeDirection == 'down' ? '<font class="change_down_arrow">&#9660;</font>' : '')) + issue.getElementsByTagName("change-percents")[0].firstChild.nodeValue : issue.getElementsByTagName("sell_quotes")[0].firstChild.nodeValue ) + '</td>\n' +
      ( extended ? '<td align="right" id="buy_offers_' + ticker + '" class="right" width="' + (isIE7 && !homepage ? '52' : '47') +'">' + issue.getElementsByTagName("buy_quotes")[0].firstChild.nodeValue + '</td>' : '' ) +
      ( extended ? '<td align="right" id="sell_offers_' + ticker + '" class="right" width="' + (isIE7 && !homepage ? '40' : '35') + '">' + issue.getElementsByTagName("sell_quotes")[0].firstChild.nodeValue + '</td>' : '' ) +
      '</tr>\n';
    }
  }
  tickerDataHTML += '</table>';
	//alert(transHtml);
  return tickerDataHTML;
}

function generateHorizontalTickerDataHtml(parsedXML) {
  var tickerDataHTML =
          '<table id="ticker_data_table" border="0" cellspacing="2" cellpadding="2" class="ticker_data_table">' +
          '  <tr>';

  var root = parsedXML.getElementsByTagName('ticker-data')[0];
  var issuesRoot = root.getElementsByTagName('issues')[0];

  var issues = issuesRoot.getElementsByTagName('issue');
  var rowsNum = issues.length;
  for (var i = 0; i < rowsNum; i++) {
    var issue = issues[i];
    var ticker = issue.getElementsByTagName("ticker")[0].firstChild.nodeValue;
    var xetra = issue.getElementsByTagName("xetra")[0].firstChild.nodeValue;
    var price = issue.getElementsByTagName("price")[0].firstChild.nodeValue;
    var change = issue.getElementsByTagName("change")[0].firstChild.nodeValue;
    var changeDirection = issue.getElementsByTagName("change-direction")[0].firstChild.nodeValue;
    tickerDataHTML +=
    '  <td id="price_ticker_' + ticker + '" class="w45 left">' + price + '<br/>' + xetra + '&nbsp;/&nbsp;' + ticker + '</td>' +
    '  <td id="change_' + ticker + '" class="change_' + changeDirection + ' w45 right">' +
    (changeDirection == 'up' ? '<font class="change_up_arrow">&#9650;</font>' : (changeDirection == 'down' ? '<font class="change_down_arrow">&#9660;</font>' : '')) +
    change + '</td>' +
    '  <td class="ticker_data_separator w20">&nbsp;</td>'

  }
  tickerDataHTML += '  </tr>';
  tickerDataHTML += '</table>';
	//alert(transHtml);
  return tickerDataHTML;
}

function updateTickerDataHtml(parsedXML) {
  //if (isIE7) alert('update');
  var root = parsedXML.getElementsByTagName('ticker-data')[0];
  var issuesRoot = root.getElementsByTagName('issues')[0];
  var extended = false;
  if( document.ticker.show )
    extended = document.ticker.show;
  var issues = issuesRoot.getElementsByTagName('issue');
  var rowsNum = issues.length;
  for (var i = 0; i < rowsNum; i++) {
    var issue = issues[i];
    var ticker = issue.getElementsByTagName("ticker")[0].firstChild.nodeValue;
    var price = issue.getElementsByTagName("price")[0].firstChild.nodeValue;
    var buy_quotes = issue.getElementsByTagName("buy_quotes")[0].firstChild.nodeValue;
    var sell_quotes = issue.getElementsByTagName("sell_quotes")[0].firstChild.nodeValue;
    var change = issue.getElementsByTagName("change")[0].firstChild.nodeValue;
    var changePerc = issue.getElementsByTagName("change-percents")[0].firstChild.nodeValue;
    var changeDirection = issue.getElementsByTagName("change-direction")[0].firstChild.nodeValue;
    // Simulate
    var cchange = false;
    var change_buy = false;
    var change_buy_cd = "";
    var change_sell = false;
    var change_sell_cd = "";
    var f_old = 0.0;
    var f_new = 0.0;
    var dif = 0.0;
    var cd = changeDirection == "down" ? "#FFEEDF" : "#E8F9DF";
    var cel = document.getElementById( 'tr_' + ticker );
    var el = document.getElementById('price_' + ticker);
    if (!el)
    {
      location.reload(true);
      return;
    }
    if( !extended && document.ticker.data != TICKER_DATA_PRICE )
    {
      f_old = parseFloat( el.innerHTML );
      f_new = parseFloat( buy_quotes );
      dif = f_old - f_new;
      change_buy = dif != 0;
      change_buy_cd = dif < 0 ? "#FFEEDF" : ( dif > 0 ? "#E8F9DF" : "" );
    }
    else
    {
      f_old = parseFloat( el.innerHTML );
      f_new = parseFloat( price );
      dif = f_old - f_new;
      cchange = dif != 0;
    }
    el.innerHTML = document.ticker.data == TICKER_DATA_PRICE ? price : buy_quotes;
    var changeCell;
    if (isIE7 && !homepage && !extended) {
      changeCell = document.getElementById('change_' + ticker);
      changeCell.innerHTML =
      (changeDirection == 'up' ? '<font class="change_up_arrow">&#9650;</font>' : (changeDirection == 'down' ? '<font class="change_down_arrow">&#9660;</font>' : '')) + change;
      changeCell.className = 'right change_' + changeDirection;
      changeCell.width = (isIE7 && !homepage ? '60' : '55' );
    }

    changeCell = document.getElementById('change_percents_' + ticker);
    if (changeCell)
    {
      if ( document.ticker.data == TICKER_DATA_PRICE )
      {
        changeCell.innerHTML =
        (changeDirection == 'up' ? '<font class="change_up_arrow">&#9650;</font>' : (changeDirection == 'down' ? '<font class="change_down_arrow">&#9660;</font>' : '')) + changePerc;
        changeCell.className = 'change_' + changeDirection + ' right';
        changeCell.width = (isIE7 && !homepage ? '40' : '35' );
      }
      else
      {
        f_old = parseFloat( changeCell.innerHTML );
        f_new = parseFloat( sell_quotes );
        dif = f_old - f_new;
        change_sell = dif != 0;
        change_sell_cd = dif < 0 ? "#FFEEDF" : ( dif > 0 ? "#E8F9DF" : "" );
        changeCell.innerHTML = sell_quotes;
        changeCell.className = 'right';
        changeCell.width = (isIE7 && !homepage ? '40' : '35' );
      }
    }
    if( extended )
    {
      changeCell = document.getElementById('buy_offers_' + ticker);
      if( changeCell )
      {
        f_old = parseFloat( changeCell.innerHTML );
        f_new = parseFloat( buy_quotes );
        dif = f_old - f_new;
        change_buy = dif != 0;
        change_buy_cd = dif < 0 ? "#FFEEDF" : ( dif > 0 ? "#E8F9DF" : "" );
        changeCell.innerHTML = buy_quotes;
      }
      changeCell = document.getElementById('sell_offers_' + ticker);
      if( changeCell )
      {
        f_old = parseFloat( changeCell.innerHTML );
        f_new = parseFloat( sell_quotes );
        dif = f_old - f_new;
        change_sell = dif != 0;
        change_sell_cd = dif < 0 ? "#FFEEDF" : ( dif > 0 ? "#E8F9DF" : "" );
        changeCell.innerHTML = sell_quotes;
      }
    }

    if( cel && cchange )
    {
      var orig_bg = cel.className == "evenrow" ? "#F1F1F1" : "#FFFFFF";
      if ( extended || document.ticker.data == TICKER_DATA_PRICE )
      {
        document.getElementById( 'ticker_' + ticker ).style.backgroundColor = cd;
        //document.getElementById( 'change_' + ticker ).style.backgroundColor = cd;
        document.getElementById( 'price_' + ticker ).style.backgroundColor = cd;
        document.getElementById( 'change_percents_' + ticker ).style.backgroundColor = cd;
        window.setTimeout( "fadeColor( 'ticker_" + ticker +"', '"+cd+"', '"+orig_bg+"', 10, 120, 'b' )", 6000 );
        //window.setTimeout( "fadeColor( 'change_" + ticker +"', '"+cd+"', '"+orig_bg+"', 15, 100, 'b' )" );
        window.setTimeout( "fadeColor( 'price_" + ticker +"', '"+cd+"', '"+orig_bg+"', 10, 120, 'b' )", 6000 );
        window.setTimeout( "fadeColor( 'change_percents_" + ticker +"', '"+cd+"', '"+orig_bg+"', 10, 120, 'b' )", 6000 );
      }
    }
    if( cel && document.ticker.data != TICKER_DATA_PRICE || extended )
    {
      var orig_bg = cel.className == "evenrow" ? "#F1F1F1" : "#FFFFFF";
      if( !extended )
      {
        if( change_buy )
        {
          document.getElementById( 'price_' + ticker ).style.backgroundColor = change_buy_cd;
          window.setTimeout( "fadeColor( 'price_" + ticker + "', '" + change_buy_cd + "', '" + orig_bg + "', 10, 120, 'b' )", 6000 );
        }
        if( change_sell )
        {
          document.getElementById( 'change_percents_' + ticker ).style.backgroundColor = change_sell_cd;
          window.setTimeout( "fadeColor( 'change_percents_" + ticker + "', '" + change_sell_cd + "', '" + orig_bg + "', 10, 120, 'b' )", 6000 );
        }
      }
      else
      {
        if( change_buy )
        {
          document.getElementById( 'buy_offers_' + ticker ).style.backgroundColor = cd;
          window.setTimeout( "fadeColor( 'buy_offers_" + ticker + "', '" + cd + "', '"+ orig_bg + "', 10, 120, 'b' )", 6000 );
        }
        if( change_sell )
        {
          document.getElementById( 'sell_offers_' + ticker ).style.backgroundColor = cd;
          window.setTimeout( "fadeColor( 'sell_offers_" + ticker + "', '" + cd + "', '" + orig_bg + "', 10, 120, 'b')", 6000 );
        }
      }
    }
  }
  var table = document.getElementById('ticker_data_table');
  if (!table)
  {
    location.reload(true);
    return;
  }
  /*if( table.getElementsByTagName( 'tr' ).length > rowsNum )
   {
     location.reload( true );
     return;
   }*/
}

var Ticker = {
  ticker: false,
  force: false,

  data: TICKER_DATA_PRICE,
  show: false,

  changeTickerData: function()
  {
    if( this.data == TICKER_DATA_PRICE )
      this.data = TICKER_DATA_QUOTE;
    else
      this.data = TICKER_DATA_PRICE;

    this.force = true;

    refreshTicker( true );
  },

  openAdvanced: function( open )
  {
    var holder = document.getElementById('v_ticker_div');
    if( !holder )
      return;

    var width = isIE7 ? 100 : 150;
    if( !open && this.show )
    {
      window.resizeBy( -width, 0 );
      window.moveBy( width, 0 );
      this.show = false;
      this.force = true;
      holder.style.width = isIE7 ? '260px' : '215px';
      refreshTicker( true );
    }
    else if( open && !this.show )
    {
      window.moveBy( -width, 0 );
      window.resizeBy( width, 0 );
      this.show = true;
      this.force = true;
      holder.style.width = '360px';
      refreshTicker( true );
    }
  }
}

document.ticker = Ticker;