//XmlHttpRequest object to get the refreshedData
var refreshReq = getXmlHttpRequestObject();
var color_timeout = 5000;

function refresh(ticker, omaxNumber, lastOfferID, tmaxNumber, lastTransID)
{
  if (refreshReq.readyState == 4 || refreshReq.readyState == 0) {
    refreshReq.open("GET", '/infostock/ar/refresh?ticker=' + ticker + '&omaxnum=' + omaxNumber + '&lastoid=' + lastOfferID +
            '&tmaxnum=' + tmaxNumber + '&lasttid=' + lastTransID + '&time=' + new  Date().getTime(), true);
    refreshReq.onreadystatechange = handleRefresh;
    refreshReq.send(null);
  }
}

function handleRefresh() {
  if (refreshReq.readyState == 4) {
     // only if "OK"
    if (refreshReq.status == 200) {
      if (refreshReq.responseText == '') return;
      var parsedXML = Base.XML.parseFromString(refreshReq.responseText);
      refreshTransactionsElements(parsedXML);
      refreshQuoteElements(parsedXML);
      refreshOffersElements(parsedXML);
    } else {
      // do nothing ... leave data from latest successful refresh unchanged.
    }
  }
}

var refreshOffersReq = getXmlHttpRequestObject();
//Starts the AJAX request.
function refreshOffers(ticker, maxNumber, lastOfferID)
{
  if (refreshOffersReq.readyState == 4 || refreshOffersReq.readyState == 0) {
    refreshOffersReq.open("GET", '/infostock/ar/refresh/offers?ticker=' + ticker + '&omaxnum=' + maxNumber + '&lastoid=' + lastOfferID +
                                 '&time=' + new  Date().getTime(), true);
    refreshOffersReq.onreadystatechange = handleRefreshOffers;
    refreshOffersReq.send(null);
  }
}
//Called when the AJAX response is returned.
function handleRefreshOffers() {
  if (refreshOffersReq.readyState == 4) {

     // only if "OK"
    if (refreshOffersReq.status == 200) {
      if (refreshOffersReq.responseText == '') return;
      var parsedXML = Base.XML.parseFromString(refreshOffersReq.responseText);

      refreshOffersElements(parsedXML);
    } else {
//      var offersBuyDiv = document.getElementById('offersbuy');
//      var offersSellDiv = document.getElementById('offerssell');
//      offersBuyDiv.innerHTML = "Trying ot connect...: " + refreshOffersReq.status;
//      offersSellDiv.innerHTML = "Trying ot connect...: " + refreshOffersReq.status;
    }
  }
}

function refreshOffersElements(parsedXML) {
  var offersBuyDiv = document.getElementById('offersbuy');
  var offersBuySummaryDiv = document.getElementById('offersbuy_summary');
  var offersSellDiv = document.getElementById('offerssell');
  var offersSellSummaryDiv = document.getElementById('offerssell_summary');

  offersBuyDiv.innerHTML = generateOffersHtml(parsedXML, 'buy');
  offersBuySummaryDiv.innerHTML = generateOffersSummaryHtml(parsedXML, 'buy');
  offersSellDiv.innerHTML = generateOffersHtml(parsedXML, 'sell');
  offersSellSummaryDiv.innerHTML = generateOffersSummaryHtml(parsedXML, 'sell');
  adjustOffersBar(parsedXML);
}

function generateOffersHtml(parsedXML, offersType) {
  var offersHtml = '<table width="100%" border="0" cellspacing="0" cellpadding="2" style="table-layout:fixed; font-size: 11px;">';
  var offersBuy = offersType == 'buy';
  var min_height = 7;
  var root = parsedXML.getElementsByTagName('offers-data')[0];
  if (!root) {
    return '';
  }
 //var root = parsedXML.documentElement;
  var offersRoot = root.getElementsByTagName('offers-' + offersType)[0];
  var visibleRows = root.getAttribute('visible-rows');
  document.last_offer_id = root.getAttribute('last-offer-id');

  var offers = offersRoot.getElementsByTagName('offer');
  var rowsNum = visibleRows > offers.length ? visibleRows : offers.length;
  for (var i = 0; i < rowsNum; i++) {
    var price = "&nbsp;";
    var amount = "&nbsp;";
    var ofcount = "&nbsp;";
    var rowClass = (i % 2 != 0 ? 'evenrow' : 'oddrow');
    var id = '';
    if (i < offers.length) {
      // get current offer
      var offer = offers[i];
      // getting offer's content
      price = offer.getElementsByTagName("price")[0].firstChild.nodeValue;
      amount = offer.getElementsByTagName("amount")[0].firstChild.nodeValue;
      ofcount = offer.getElementsByTagName("offers")[0].firstChild.nodeValue;

      if (offer.getElementsByTagName("highlight")[0].firstChild.nodeValue == 'true') {
        rowClass += '_tagged';
        id = "o" + (offersBuy ? 'b' : 's') + "-" + i;
      }
    }
    offersHtml += '<tr class="' + rowClass + '"' + (id != '' ? ' id="' + id + '"' : '') + '>\n';

    if (offersBuy) {
      offersHtml +=
      '  <td class="left">' + ofcount + '</td>\n' +
      '  <td class="right">' + amount + '</td>\n' +
      '  <td class="right">' + price.replace(' ', '') + '</td>\n';
    } else {
      offersHtml +=
      '  <td class="right">' + price.replace(' ', '') + '</td>\n' +
      '  <td class="right">' + amount + '</td>\n' +
      '  <td class="right">' + ofcount + '</td>\n';
    }
    offersHtml += '</tr>\n';
    setTimeout( "removeColoredCode( 'o" + (offersBuy ? 'b' : 's') + "-" + i + "' );", color_timeout );

  }
  offersHtml += '</table>';
 //alert(offersHtml);
  return offersHtml;
}

function generateOffersSummaryHtml(parsedXML, offersType) {
  var root = parsedXML.getElementsByTagName('offers-data')[0];
  if (!root) {
    return '';
  }
  return '<hr size="1" noshade="" color="cccccc" />' + root.getElementsByTagName("offers-" + offersType + "-summary")[0].firstChild.nodeValue;
}

function adjustOffersBar(parsedXML) {
  var root = parsedXML.getElementsByTagName('offers-data')[0];
  var buyPerc = root.getAttribute('buy-as-percents');
  var offersBuyBar = document.getElementById('offersbuy_bar');
  var offersSellBar = document.getElementById('offerssell_bar');
  offersBuyBar.style.width = buyPerc + '%';
  offersSellBar.style.width = (100 - buyPerc) + '%';
 //alert('buyPerc: ' + buyPerc + '; offersBuyBar.style.width: ' + offersBuyBar.style.width);
}


 //Refreshing transactions
var refreshTransReq = getXmlHttpRequestObject();
//Starts the AJAX request.
function refreshTransactions(ticker, maxNumber, lasttid)
{
  if (refreshTransReq.readyState == 4 || refreshTransReq.readyState == 0) {
    refreshTransReq.open("GET", '/infostock/ar/refresh/trans?ticker=' + ticker + '&tmaxnum=' + maxNumber + '&lasttid=' + lasttid +
                                '&time=' + new  Date().getTime(), true);
    refreshTransReq.onreadystatechange = handleRefreshTransaction;
    refreshTransReq.send(null);
  }
}

//Called when the AJAX response is returned.
function handleRefreshTransaction() {
  if (refreshTransReq.readyState == 4) {

     // only if "OK"
    if (refreshTransReq.status == 200) {
      if (refreshTransReq.responseText == '') return;
      var parsedXML = Base.XML.parseFromString(refreshTransReq.responseText);
      refreshTransactionsElements(parsedXML);
    } else {
      //transDiv.innerHTML = "Trying ot connect...: " + refreshTransReq.status;
    }
  }
}

function refreshTransactionsElements(parsedXML) {
  var transDiv = document.getElementById('trans');
  var transSummaryDiv = document.getElementById('trans_summary');
  if ( !document.last_transaction_id || document.last_transaction_id == 0) {
    var generatedHtml = generateTransHtml(parsedXML);
  } else {
    generateTransPartialHtml(parsedXML, transDiv.firstChild);
  }
  if( generatedHtml ) {
    transDiv.innerHTML = generatedHtml;
  }
  transSummaryDiv.innerHTML = generateTransSummaryHtml(parsedXML);
}

function generateTransHtml(parsedXML) {
  var root = parsedXML.getElementsByTagName('transactions-data')[0];
  if (!root) {
    return '';
  }
  var transRoot = root.getElementsByTagName('transactions')[0];
  var visibleRows = transRoot.getAttribute('visible-rows');
  document.last_transaction_id = root.getAttribute("lasttid");
  var transactions = transRoot.getElementsByTagName('transaction');
  var rowsNum = visibleRows > transactions.length ? visibleRows : transactions.length;
  var transHtml =
          '<table width="100%" border="0" cellspacing="0" cellpadding="2" class="homeTable" style="table-layout:fixed; font-size: 11px;">';
  for (var i = 0; i < rowsNum; i++) {
    var date = "&nbsp;";
    var amount = "&nbsp;";
    var price = "&nbsp;";
    var change = "&nbsp;";
    var changepercent = "&nbsp;";

    var sign = "";
    var changeClass = "";
    if (i < transactions.length) {
      // get current offer
      var trans = transactions[i];

     // getting transaction's content
      date = trans.getElementsByTagName("date")[0].firstChild.nodeValue;
      amount = trans.getElementsByTagName("amount")[0].firstChild.nodeValue;
      price = trans.getElementsByTagName("price")[0].firstChild.nodeValue;
      change = trans.getElementsByTagName("change")[0].firstChild.nodeValue;
      changepercent = trans.getElementsByTagName("changepercent")[0].firstChild.nodeValue;
      var tmpFloat = parseFloat( change );
      sign = tmpFloat > 0 ? "+" : "";
      changeClass = tmpFloat < 0 ? "change_down" : ( tmpFloat > 0 ? "change_up" : "change_no" );
    }
    //if( changepercent != "&nbsp;" )
    //  changepercent += "%";

    transHtml += '<tr class="' + (i % 2 != 0 ? 'evenrow' : 'oddrow') + '">' +
                 '  <td>' + date + '</td>' +
                 '  <td class="right">' + price + '</td>' +
                 '  <td class="right">' + amount + '</td>';
    if (typeof portfolioTransactionsPopup == "undefined") {
      transHtml += '  <td class="right ' + changeClass + '">' + sign + change + '</td>' +
                   '  <td class="right ' + changeClass + '">' + sign + changepercent + '</td>';
    }
    transHtml += '</tr>';
  }
  transHtml += '</table>';

  if (transactions && transactions.length > 1 &&
      transactions[0].getElementsByTagName("price")[0].firstChild.nodeValue != transactions[1].getElementsByTagName("price")[0].firstChild.nodeValue &&
      transactions[0].getElementsByTagName("date")[0].firstChild.nodeValue != transactions[1].getElementsByTagName("date")[0].firstChild.nodeValue) {
    //update intaday chart
    var chartImg = document.getElementById('intradayChart');
    if (chartImg) {
      var imgSrc = chartImg.src;
      var indexOfPng = imgSrc.indexOf('.png');
      if (indexOfPng > 0) {
        var indexOfLastSlash = imgSrc.lastIndexOf('/');
        imgSrc = imgSrc.substring(0, indexOfLastSlash);
      }
      var now = new Date();
      chartImg.src = imgSrc + '/' + now.getTime() + '.png';
    }
  }
  return transHtml;
}

function generateTransPartialHtml(parsedXML, container) {
  var transHtml = "";
  var root = parsedXML.getElementsByTagName('transactions-data')[0];
  var transRoot = root.getElementsByTagName('transactions')[0];
  var visibleRows = transRoot.getAttribute('visible-rows');
  document.last_transaction_id = root.getAttribute("lasttid");
  var transactions = transRoot.getElementsByTagName('transaction');
  var rowsNum = visibleRows > transactions.length ? transactions.length : visibleRows;

  var old_class = container.firstChild.firstChild.className;
    if( old_class.indexOf( "_tagged" ) != -1 )
      old_class = old_class.substr( 0, old_class.indexOf( '_tagged' )-1 );

  for ( var i = rowsNum - 1; i >= 0; i-- ) {
    var date = "&nbsp;";
    var amount = "&nbsp;";
    var price = "&nbsp;";
    var change = "&nbsp;";
    var changepercent = "&nbsp;";
    var sign = "";
    var changeClass = "";

    var id = "";

    if (i < transactions.length) {
      // get current offer
      var trans = transactions[i];

     // getting transaction's content
      date = trans.getElementsByTagName("date")[0].firstChild.nodeValue;
      amount = trans.getElementsByTagName("amount")[0].firstChild.nodeValue;
      price = trans.getElementsByTagName("price")[0].firstChild.nodeValue;
      id = trans.getElementsByTagName("id")[0].firstChild.nodeValue;
      change = trans.getElementsByTagName("change")[0].firstChild.nodeValue;
      changepercent = trans.getElementsByTagName("changepercent")[0].firstChild.nodeValue;

      var tmpFloat = parseFloat( change );
      sign = tmpFloat > 0 ? "+" : "";
      changeClass = tmpFloat < 0 ? "change_down" : ( tmpFloat > 0 ? "change_up" : "change_no" );
    }
    var row = document.createElement("tr");

    //alert( container.firstChild.firstChild.className );

    if ( !document.tc_class )
      document.tc_class = old_class == "oddrow" ? "evenrow" : "oddrow";
    else
      document.tc_class = document.tc_class == "oddrow" ? "evenrow" : "oddrow";

    var oddrow = document.tc_class;
    var evenrow = document.tc_class == "oddrow" ? "evenrow" : "oddrow";

    row.setAttribute("class", oddrow + "_tagged" );
    row.className = oddrow + "_tagged";
    row.setAttribute( "id", "rc-" + id );
    var col = document.createElement( "td" );
    col.setAttribute( "align", "left" );
    col.innerHTML = date;
    row.appendChild( col );
    col = document.createElement( "td" );
    col.setAttribute( "align", "right" );
    col.innerHTML = price;
    row.appendChild( col );
    col = document.createElement( "td" );
    col.setAttribute( "align", "right" );
    col.innerHTML = amount;
    row.appendChild( col );
    if (typeof portfolioTransactionsPopup == "undefined") {
      col = document.createElement( "td" );
      col.setAttribute( "align", "right" );
      col.innerHTML = '<span class="' + changeClass + '">'  + sign + change + '</span>';
      row.appendChild( col );
      col = document.createElement( "td" );
      col.setAttribute( "align", "right" );
      col.innerHTML = '<span class="' + changeClass + '">' + sign + changepercent + '</span>';
      row.appendChild( col );
    }
   // Remove one line from the bottom, and add one line on the top
    if (visibleRows <= container.firstChild.childNodes.length) {
      var el = container.firstChild.lastChild;
      container.firstChild.removeChild( el );
    }
    container.firstChild.insertBefore( row, container.firstChild.firstChild );

    // Start timer for color removal ( Default to 10 secs, now set to 5 for testing )
    setTimeout( "removeColoredCode( 'rc-" + id + "' );", color_timeout );
  }

  document.tc_class = false;

  if (transactions && transactions.length > 1 &&
      transactions[0].getElementsByTagName("price")[0].firstChild.nodeValue != transactions[1].getElementsByTagName("price")[0].firstChild.nodeValue &&
      transactions[0].getElementsByTagName("date")[0].firstChild.nodeValue != transactions[1].getElementsByTagName("date")[0].firstChild.nodeValue) {
    //update intaday chart
    var chartImg = document.getElementById('intradayChart');
    if (chartImg) {
      var imgSrc = chartImg.src;
      var indexOfPng = imgSrc.indexOf('.png');
      if (indexOfPng > 0) {
        var indexOfLastSlash = imgSrc.lastIndexOf('/');
        imgSrc = imgSrc.substring(0, indexOfLastSlash);
      }
      var now = new Date();
      chartImg.src = imgSrc + '/' + now.getTime() + '.png';
    }
  }
}

  function removeColoredCode( id )
{
  var el = document.getElementById( id );
  if( !el )
    return;
  if ( el.className.indexOf( "_tagged_red" ) != -1 )
    el.className = el.className.replace( "_tagged_red", "" );
  else if ( el.className.indexOf( "_tagged_green" ) != -1 )
    el.className = el.className.replace( "_tagged_green", "" );
  else if( el.className.indexOf( "_tagged" ) != -1 )
    el.className = el.className.replace( "_tagged", "" );
  el.removeAttribute( "id" );
}

function generateTransSummaryHtml(parsedXML) {
  var root = parsedXML.getElementsByTagName('transactions-data')[0];
  return !document.popup && root != null && root.getElementsByTagName("transactions-summary")[0] && root.getElementsByTagName("transactions-summary")[0].firstChild ?
         '<hr size="1" noshade="" color="cccccc" />' + root.getElementsByTagName("transactions-summary")[0].firstChild.nodeValue : "";
}

//Refreshing transactions
//Refreshing sell offers
var refreshQuoteReq = getXmlHttpRequestObject();
//Starts the AJAX request.
function refreshQuote(ticker)
{
  if (refreshQuoteReq.readyState == 4 || refreshQuoteReq.readyState == 0) {
    refreshQuoteReq.open("GET", '/infostock/ar/refresh/quote?ticker=' + ticker + '&time=' + new  Date().getTime(), true);
    refreshQuoteReq.onreadystatechange = handleRefreshQuote;
    refreshQuoteReq.send(null);
  }
}

//Called when the AJAX response is returned.
function handleRefreshQuote() {

  if (refreshQuoteReq.readyState == 4) {

    // only if "OK"
    if (refreshQuoteReq.status == 200) {
      if (refreshQuoteReq.responseText == '') return;
      var parsedXML = Base.XML.parseFromString(refreshQuoteReq.responseText);
      refreshQuoteElements(parsedXML);
    } else {
      //alert('Failed to connect.');
    }
  }
}

function refreshQuoteElements(parsedXML) {
  var root = parsedXML.getElementsByTagName('quote')[0];
  var values = new Array();
  for (var i = 0; i < root.childNodes.length; i++) {
    var node = root.childNodes[i];
    var name = node.nodeName;
    if (!(name in values))
      values[name] = [];
    if (node.firstChild != null)
      values[name].push(node.firstChild.nodeValue);
  }

  /*var str = '';
         for (var i in values) {
          str += (i + ' -> ' + values[i] + '\n');
         }
         alert(str);			*/

  var date = values['date'];
  var price = values['price'];
  var priceChange = values['priceChange'];
  var priceChangePerc = values['priceChangePerc'];
  var priceChangeSign = values['priceChangeSign'];
  var volume = values['volume'];

 //objects to refresh in issue_header.jsp
  setObjInnerText(document.getElementById('priceHeader_date'), date);
  setObjInnerText(document.getElementById('priceHeader_price'), price /*+ currencySign*/);
  document.getElementById('priceHeader_priceChangeSign').src = '/infostock/images/arrow_' + priceChangeSign + '.jpg';
  document.getElementById('priceHeader_priceChangePercSign').src = '/infostock/images/arrow_' + priceChangeSign + '.jpg';

  var obj = document.getElementById('priceHeader_priceChangeValue');
  setObjInnerText(obj, priceChange);
  obj.className = 'price11 change_' + priceChangeSign + ' bold';

  obj = document.getElementById('priceHeader_priceChangePercValue');
  setObjInnerText(obj, priceChangePerc + '%');
  obj.className = 'price11 change_' + priceChangeSign + ' bold';

  //objects to refresh in quote.jsp
  if (document.getElementById('price') != null &&
      document.getElementById('priceChangeSign') &&
      document.getElementById('priceChangePercSign') &&
      document.getElementById('priceChange') &&
      document.getElementById('priceChangePerc')) {
    var obj = document.getElementById('price');
   //alert('span[price]: ' + obj);
    if (prevPrice > -1) {
      var curChange = (Number(price) - prevPrice);
      currentPriceChangeSign = curChange > 0 ? 'up' : (curChange < 0 ? 'down' : 'no');
      obj.className = 'price18 change_' + currentPriceChangeSign + '_bcg_quote';
    }
    prevPrice = price;
    setObjInnerText(obj, price/* + currencySign*/);

    document.getElementById('priceChangeSign').src = '/infostock/images/arrow_' + priceChangeSign + '.jpg';
    document.getElementById('priceChangePercSign').src = '/infostock/images/arrow_' + priceChangeSign + '.jpg';

    obj = document.getElementById('priceChange');
    obj.className = 'price18 change_' + priceChangeSign + ' bold';
    setObjInnerText(obj, priceChange);

    obj = document.getElementById('priceChangePerc');
    obj.className = 'price18 change_' + priceChangeSign + ' bold';
    setObjInnerText(obj, priceChangePerc + '%');

    setObjInnerText(document.getElementById('volume'), volume);
    setObjInnerText(document.getElementById('lastTradeTime'), date);

    setTimeout("document.getElementById('price').className = 'price18';", color_timeout);
  }
}

 //////


//Refreshing portfolioHeader
var refreshPortfolioReq = getXmlHttpRequestObject();
//Starts the AJAX request.
function refreshPortfolio()
{
  if (refreshPortfolioReq.readyState == 4 || refreshPortfolioReq.readyState == 0) {
    refreshPortfolioReq.open("GET", '/infostock/ar/refresh/portfolioHeader?portfolioId=' + document.portfolioName.portfolioId.value, true);
    refreshPortfolioReq.onreadystatechange = handleRefreshPortfolio;
    refreshPortfolioReq.send(null);
  }
}

//Called when the AJAX response is returned.
function handleRefreshPortfolio() {

  if (refreshPortfolioReq.readyState == 4) {

    // only if "OK"
    if (refreshPortfolioReq.status == 200) {
      if (refreshPortfolioReq.responseText == '') return;
      var parsedXML = Base.XML.parseFromString(refreshPortfolioReq.responseText);
    //  alert(refreshPortfolioReq.responseText);
      refreshPortfolioElements(parsedXML);
    } else {
      //alert('Failed to connect.');
    }
  }
}

function refreshPortfolioElements(parsedXML) {
  var root = parsedXML.getElementsByTagName('portfolio')[0];
  //alert (parsedXML + root);

  var values = new Array();
  for (var i = 0; i < root.childNodes.length; i++) {
    var node = root.childNodes[i];
    var name = node.nodeName;
    if (!(name in values))
      values[name] = [];
    if (node.firstChild != null)
      values[name].push(node.firstChild.nodeValue);
  }

  var portfolioSize = values['portfolioSize'];
  var dailyChange = values['dailyChange'];
  var dailyPercentChange = values['dailyPercentChange'];
  var dailyChangeSign = values['dailyChangeSign'];
  var dailyPercentChangeSign = values['dailyPercentChangeSign'];
  var date = values['lastTradeTime'];

 //objects to refresh in portfolio_header.jsp
  var header = "portfolioHeader_";
  setObjInnerText(document.getElementById(header + 'portfolioSize'), portfolioSize);
  setObjInnerText(document.getElementById(header + 'dailyChange'), dailyChange /*+ currencySign*/);
  setObjInnerText(document.getElementById(header + 'dailyPercentChange'), dailyPercentChange);
  document.getElementById(header + 'dailyChangeSign').src = '/infostock/images/arrow_' + dailyChangeSign + '.jpg';
  document.getElementById(header + 'dailyPercentChangeSign').src = '/infostock/images/arrow_' + dailyPercentChangeSign + '.jpg';

  var obj = document.getElementById(header + 'dailyChange');
  obj.className = 'price11 change_' + dailyChangeSign + ' bold';

  var obj = document.getElementById(header + 'dailyPercentChange');
  obj.className = 'price11 change_' + dailyPercentChangeSign + ' bold';


  //objects to refresh in view.jsp
  if (document.getElementById('portfolioSize') != null &&
      document.getElementById('dailyChangeSign') &&
      document.getElementById('dailyPercentChangeSign') &&
      document.getElementById('dailyChange') &&
      document.getElementById('dailyPercentChange')) {
    var obj = document.getElementById('portfolioSize');
   //alert('span[price]: ' + obj);
    if (prevSize > -1) {
      var curChange = (Number(portfolioSize) - prevSize);
      currentDailyChangeSign = curChange > 0 ? 'up' : (curChange < 0 ? 'down' : 'no');
      obj.className = 'price18 change_' + currentDailyChangeSign + '_bcg_quote';
    }
    setObjInnerText(obj, portfolioSize);

    document.getElementById('dailyChangeSign').src = '/infostock/images/arrow_' + dailyChangeSign + '.jpg';
    document.getElementById('dailyPercentChangeSign').src = '/infostock/images/arrow_' + dailyPercentChangeSign + '.jpg';

    obj = document.getElementById('dailyChange');
    obj.className = 'price18 change_' + dailyChangeSign + ' bold';
    setObjInnerText(obj, dailyChange);

    obj = document.getElementById('dailyPercentChange');
    obj.className = 'price18 change_' + dailyPercentChangeSign + ' bold';
    setObjInnerText(obj, dailyPercentChange);

    setObjInnerText(document.getElementById('lastTradeTime'), date);

    //setTimeout("document.getElementById('price').className = 'price18';", color_timeout);
  }

}

 //////








//Refreshing transactions from current session
var refreshCurrentTransReq = getXmlHttpRequestObject();
//Starts the AJAX request.
document.popup = false;
function refreshCurrentTransactions(ticker, index, lasttid, maxNumber, stateid, isPopup)
{
  document.popup = isPopup;
  if (refreshCurrentTransReq.readyState == 4 || refreshCurrentTransReq.readyState == 0) {
    refreshCurrentTransReq.open("GET", '/infostock/ar/transactions/' + (isPopup ? 'popup' : 'current') + '/xml?stateid=' + stateid +
                                       '&ticker=' + ticker + '&indextype=' + index + '&lasttid=' + lasttid + '&maxCount=' + maxNumber +
                                       '&time=' + new  Date().getTime(), true);
    refreshCurrentTransReq.onreadystatechange = handleRefreshCurrentTransaction;
    refreshCurrentTransReq.send(null);
  }
}

//Called when the AJAX response is returned.
function handleRefreshCurrentTransaction() {
  if (refreshCurrentTransReq.readyState == 4) {
    var transDiv = document.getElementById('trans');
    var transSummaryDiv = document.getElementById('trans_summary');
     // only if "OK"
    if (refreshCurrentTransReq.status == 200) {
      if (refreshCurrentTransReq.responseText == '') return;
      var start = new Date();
      var parsedXML = Base.XML.parseFromString(refreshCurrentTransReq.responseText);

      if ( !document.last_transaction_id || document.last_transaction_id == 0)
        var generatedHtml = generateCurrentTransHtml(parsedXML);
      else {
        generateCurrentTransPartialHtml( parsedXML, transDiv.firstChild );
      }

      if (generatedHtml && generatedHtml.length > 0) {
        transDiv.innerHTML = generatedHtml;
      }
      if (!document.popup)
        transSummaryDiv.innerHTML = generateCurrentTransSummaryHtml(parsedXML);

    } else {
      transDiv.innerHTML = "Trying ot connect...: " + refreshCurrentTransReq.status;
    }
  }
}

function generateCurrentTransHtml(parsedXML) {
  //alert(document.location.href);
  var extendCols = !Utils.browser.IE; //document.location.href.indexOf('popup') &&
  //alert(Utils.browser.IE + ', ' + extendCols);
  var root = parsedXML.getElementsByTagName('transactions-data')[0];
  document.stateid = root.getAttribute('stateid');
  var lastTransID = root.getAttribute('lasttid');
  document.last_transaction_id = lastTransID;
 //alert(document.stateid);
  var transRoot = root.getElementsByTagName('transactions')[0];
  var visibleRows = transRoot.getAttribute('visible-rows');

  var transactions = transRoot.getElementsByTagName('transaction');
 //alert(document.transactions.lasttid.value + ' -> '+ lastTransID);
  var rowsNum = document.transactions.lasttid.value != lastTransID && visibleRows > transactions.length ? visibleRows : transactions.length;
  if (rowsNum > 0) {
    var transHtml =
            '<table id="transTable" border="0" cellspacing="0" ' + (document.popup ? '' : (Utils.browser.IE ? 'width="632"' : 'width="632"')) + ' cellpadding="0" class="homeTable" style="table-layout:fixed;">';// +
    for (var i = 0; i < rowsNum; i++) {
      var date = "&nbsp;";
      var ticker = "&nbsp;";
      var name = "&nbsp;";
      var xetra = "&nbsp;";
      var amount = "&nbsp;";
      var price = "&nbsp;";
      var sum = "&nbsp;";
      var change = "&nbsp;";
      var changepercent = "&nbsp;";
      var sign = "";
      var changeClass = "";
      if (i < transactions.length) {
        // get current offer
        var trans = transactions[i];

       // getting transaction's content
        date = trans.getElementsByTagName("date")[0].firstChild.nodeValue;
        ticker = trans.getElementsByTagName("ticker")[0].firstChild.nodeValue;
        name = trans.getElementsByTagName("name")[0].firstChild.nodeValue;
        xetra = trans.getElementsByTagName("xetra")[0].firstChild.nodeValue;
        amount = trans.getElementsByTagName("amount")[0].firstChild.nodeValue;
        price = trans.getElementsByTagName("price")[0].firstChild.nodeValue;
        sum = trans.getElementsByTagName("sum")[0].firstChild.nodeValue;
        //chan = parseFloat( trans.getElementsByTagName("change")[0].firstChild.nodeValue );
        //change = Math.abs( chan );
        //proc = parseFloat( trans.getElementsByTagName("changepercent")[0].firstChild.nodeValue );
        //changepercent = Math.abs( proc );
        change = trans.getElementsByTagName("change")[0].firstChild.nodeValue;
        changepercent = trans.getElementsByTagName("changepercent")[0].firstChild.nodeValue;
        var tmpFloat = parseFloat( change );
        sign = tmpFloat > 0 ? "+" : "";
        changeClass = tmpFloat < 0 ? "change_down" : ( tmpFloat > 0 ? "change_up" : "change_no" );
      }

      if (document.popup) {
        transHtml += '<tr class="' + (i % 2 != 0 ? 'evenrow' : 'oddrow') + '">' +
                     '  <td width="' + (extendCols ? 80 : 82) + '" align="left" style="white-space:nowrap; overflow: hidden;"> <a href="#" class="speclnk" onclick="javascript: changeOpenerLocation( window, \'/infostock/control/quotes/' + ticker + '\'); return false;">' + xetra + '&nbsp;/&nbsp;' + ticker + '</a></td>' +
                     '  <td width="' + (extendCols ? 80 : 68) + '" align="right">' + price + '</td>' +
                     '  <td width="' + (extendCols ? 97 : 67) + '" align="right">' + amount + '</td>' +
                     '</tr>';
      } else {
        transHtml += '<tr class="' + (i % 2 != 0 ? 'evenrow' : 'oddrow') + '">' +
                     '  <td width="' + (extendCols ? 44 : 44) + '" align="left">' + date + '</td>' +
                     '  <td width="' + (extendCols ? 84 : 84) + '" align="left" style="white-space:nowrap;overflow: hidden;"> <a href="/infostock/control/quotes/' + ticker + '" class="speclnk" style="white-space:nowrap;" >' + xetra + '&nbsp;/&nbsp;' + ticker + '</a></td>' +
                     '  <td width="' + (extendCols ? 195 : 195) + '" align="left" style="white-space:nowrap;overflow: hidden;"> <a href="/infostock/control/quotes/' + ticker + '" class="speclnk" style="white-space:nowrap;">' + name + '</a></td>' +
                     '  <td width="' + (extendCols ? 43 : 43) + '" align="right">' + price + '</td>' +
                     '  <td width="' + (extendCols ? 40 : 40) + '" align="right">' + amount + '</td>' +
                     '  <td width="' + (extendCols ? 56 : 56) + '" align="right">' + sum + '</td>' +
                     '  <td width="' + (extendCols ? 45 : 45) + '" align="right"><span class="' + changeClass + '">' + sign + change + '</span></td>' +
                     '  <td width="' + (rowsNum > 25 ? (extendCols ? 42 : 42) : (extendCols ? 42 : 42) ) + '" align="right"><span class="' + changeClass + '">' + sign + changepercent + '</span></td>' +
                     '</tr>';
      }
    }
    transHtml += '</table>';
  }
  if (transactions.length > 0) {
    document.transactions.lasttid.value = lastTransID;
    //alert(lastTransID);
  }
 //alert(transHtml);
  return transHtml;
}

function generateCurrentTransPartialHtml(parsedXML,container) {
  var transHtml = "";
  var extendCols = !Utils.browser.IE;
  var root = parsedXML.getElementsByTagName('transactions-data')[0];
  var transRoot = root.getElementsByTagName('transactions')[0];
  var visibleRows = transRoot.getAttribute('visible-rows');
  document.last_transaction_id = root.getAttribute("lasttid");
  var transactions = transRoot.getElementsByTagName('transaction');
  var rowsNum = visibleRows > transactions.length ? transactions.length : visibleRows;

  var old_class = container.firstChild.firstChild.className;
  if( old_class.indexOf( "_tagged" ) != -1 )
    old_class = old_class.substr( 0, old_class.indexOf( '_tagged' )-1 );

  for (var i = rowsNum - 1; i >= 0; i--) {
    var date = "&nbsp;";
    var ticker = "%nbsp;";
    var name = "%nbsp;";
    var xetra = "%nbsp;";
    var amount = "&nbsp;";
    var price = "&nbsp;";
    var sum = "&nbsp;"
    var change = "&nbsp;";
    var changepercent = "&nbsp;";
    var changedir = 0;
    var id = "";

    var sign = "";
    var changeClass = "";
    if (i < transactions.length) {
      // get current offer
      var trans = transactions[i];

     // getting transaction's content
      date = trans.getElementsByTagName("date")[0].firstChild.nodeValue;
      ticker = trans.getElementsByTagName("ticker")[0].firstChild.nodeValue;
      name = trans.getElementsByTagName("name")[0].firstChild.nodeValue;
      xetra = trans.getElementsByTagName("xetra")[0].firstChild.nodeValue;
      amount = trans.getElementsByTagName("amount")[0].firstChild.nodeValue;
      price = trans.getElementsByTagName("price")[0].firstChild.nodeValue;
      sum = trans.getElementsByTagName("sum")[0].firstChild.nodeValue;
      //chan = parseFloat( trans.getElementsByTagName("change")[0].firstChild.nodeValue );
      //change = Math.abs( chan );
      //proc = parseFloat( trans.getElementsByTagName("changepercent")[0].firstChild.nodeValue );
      //changepercent = Math.abs( proc );

      change = trans.getElementsByTagName("change")[0].firstChild.nodeValue;
      changepercent = trans.getElementsByTagName("changepercent")[0].firstChild.nodeValue;
      //proc = parseFloat( changepercent );

      var tmpFloat = parseFloat( change );
      sign = tmpFloat < 0 ? "" : (tmpFloat > 0 ? "+" : "");
      changedir = tmpFloat == 0 ? 0 : ( tmpFloat < 0 ? -1 : 1 );
      changeClass = tmpFloat < 0 ? "change_down" : ( tmpFloat > 0 ? "change_up" : "change_no" );

      id = trans.getElementsByTagName("id")[0].firstChild.nodeValue;
    }

    if ( !document.tc_class )
      document.tc_class = old_class == "oddrow" ? "evenrow" : "oddrow";
    else
      document.tc_class = document.tc_class == "oddrow" ? "evenrow" : "oddrow";

    var oddrow = document.tc_class;
    var evenrow = document.tc_class == "oddrow" ? "evenrow" : "oddrow";

    var tagged = "_tagged" + ( changedir > 0 ? "_green" : ( changedir < 0 ? "_red" : "" ) );

    if( document.popup )
    {
      var row = document.createElement("tr");
      row.setAttribute("class", oddrow + tagged );
      row.className = oddrow + tagged;
      row.setAttribute( "id", "rc-" + id );
      var col = document.createElement( "td" );
      col.setAttribute( "width", (extendCols ? 80 : 82) );
      col.setAttribute( "align", "left" );
      col.setAttribute( "style", "white-space:nowrap; overflow: hidden;" );
      col.innerHTML = '<a href="#" class="speclnk" onclick="javascript: changeOpenerLocation( window, \'/infostock/control/quotes/' + ticker + '\'); return false;">' + xetra + '&nbsp;/&nbsp;' + ticker + '</a>';
      row.appendChild( col );
      col = document.createElement( "td" );
      col.setAttribute( "width", (extendCols ? 80 : 68) );
      col.setAttribute( "align", "right" );
      col.innerHTML = price;
      row.appendChild( col );
      col = document.createElement( "td" );
      col.setAttribute( "align", "right" );
      col.setAttribute( "width", (extendCols ? 97 : 67) );
      col.innerHTML = amount;
      row.appendChild( col );
    }
    else
    {
      var row = document.createElement("tr");
      row.setAttribute("class", oddrow + tagged );
      row.className = oddrow + tagged;
      row.setAttribute( "id", "rc-" + id );
      var col = document.createElement( "td" );
      col.innerHTML = date;
      col.setAttribute( "width", (extendCols ? 44 : 44) );
      col.setAttribute( "align", "left" );
      row.appendChild( col );
      col = document.createElement( "td" );
      col.setAttribute( "align", "left" );
      col.setAttribute( "width", (extendCols ? 84 : 84) );
      col.setAttribute( "style", "white-space:nowrap; overflow: hidden;" );
      col.innerHTML = '<a href="/infostock/control/quotes/' + ticker + '" class="speclnk" style="white-space:nowrap;">' + xetra + '&nbsp;/&nbsp;' + ticker + '</a>';
      row.appendChild( col );
      col = document.createElement( "td" );
      col.setAttribute( "align", "left" );
      col.setAttribute( "width", (extendCols ? 195 : 195) );
      col.setAttribute( "style", "white-space:nowrap; overflow: hidden;" );
      col.innerHTML = '<a href="/infostock/control/quotes/' + ticker + '" class="speclnk"  style="white-space:nowrap;">' + name + '</a>';
      row.appendChild( col );
      col = document.createElement( "td" );
      col.setAttribute( "align", "right" );
      col.setAttribute( "width", (extendCols ? 43 : 43) );
      col.innerHTML = price;
      row.appendChild( col );
      col = document.createElement( "td" );
      col.setAttribute( "align", "right" );
      col.setAttribute( "width", (extendCols ? 40 : 40) );
      col.innerHTML = amount;
      row.appendChild( col );
      col = document.createElement( "td" );
      col.setAttribute( "align", "right" );
      col.setAttribute( "width", (extendCols ? 56 : 56) );
      col.innerHTML = sum;
      row.appendChild( col );
      col = document.createElement( "td" );
      col.setAttribute( "align", "right" );
      col.setAttribute( "width", (extendCols ? 45 : 45) );
      col.innerHTML = '<span class="' + changeClass + '">' + sign + change + "</span>";
      row.appendChild( col );
      col = document.createElement( "td" );
      col.setAttribute( "align", "right" );
      col.setAttribute( "width", (extendCols ? 42 : 42) );
      col.innerHTML = '<span class="' + changeClass + '">' + sign + changepercent + "</span>";
      row.appendChild( col );
    }
   // Remove one line from the bottom, and add one line on the top
    if (visibleRows <= container.firstChild.childNodes.length) {
      var el = container.firstChild.lastChild;
      container.firstChild.removeChild( el );
    }
    container.firstChild.insertBefore( row, container.firstChild.firstChild );

    // Start timer for color removal ( Default to 10 secs, now set to 5 for testing )
    setTimeout( "removeColoredCode( 'rc-" + id + "' );", color_timeout );
  }
  document.tc_class = false;
}


function generateCurrentTransSummaryHtml(parsedXML) {
  var root = parsedXML.getElementsByTagName('transactions-data')[0];
  return !document.popup && root != null && root.getElementsByTagName("transactions-summary")[0] && root.getElementsByTagName("transactions-summary")[0].firstChild ? root.getElementsByTagName("transactions-summary")[0].firstChild.nodeValue : '';
}