//Refreshing chat messages
var refreshCurrentChatMessagesReq = getXmlHttpRequestObject();
var color_timeout = 5000;
//Starts the AJAX request.
document.popup = false;
var divElements = new Array("chat_table", "rssnews");
function refreshChatMessages(_type, roomId, lastmsgid, maxNumber)
{
  if (refreshCurrentChatMessagesReq.readyState == 4 || refreshCurrentChatMessagesReq.readyState == 0) {
    refreshCurrentChatMessagesReq.open("GET", '/infostock/ar/achat?lastmid=' + lastmsgid +
                                       '&roomId=' + roomId + '&maxCount=' + maxNumber + '&type=' + _type +
                                       '&time=' + new  Date().getTime(), true);
    refreshCurrentChatMessagesReq.onreadystatechange = handleRefreshCurrentChatMessage;
    refreshCurrentChatMessagesReq.send(null);
  }
}

//Called when the AJAX response is returned.
function handleRefreshCurrentChatMessage() {
  //alert(_type + "   " + refreshCurrentChatMessagesReq.readyState);
  if (refreshCurrentChatMessagesReq.readyState == 4) {
    var messageDiv = document.getElementById(divElements[0]);

     // only if "OK"
    if (refreshCurrentChatMessagesReq.status == 200) {
      if (refreshCurrentChatMessagesReq.responseText == '') return;
      var start = new Date();
      var parsedXML = Base.XML.parseFromString(refreshCurrentChatMessagesReq.responseText);

      if ( !document.last_message_id || document.last_message_id == 0) {
        var generatedHtml = generateCurrentMessageHtml(parsedXML);
      } else {
        generateCurrentMessagePartialHtml( parsedXML, messageDiv );
      }

      if (generatedHtml && generatedHtml.length > 0) {
        //messageDiv.innerHTML = generatedHtml;
        $(messageDiv).update(generatedHtml);
        scrollChatTable();
      }

     } else {
      messageDiv.innerHTML = "<tr><td>Trying ot connect...: " + refreshCurrentChatMessagesReq.status + "</td></tr>";
    }
  }
}

function generateCurrentMessageHtml(parsedXML) {
  //alert(document.location.href);
  var extendCols = !Utils.browser.IE; //document.location.href.indexOf('popup') &&
  //alert(Utils.browser.IE + ', ' + extendCols);
  //alert(parsedXML.getElementsByTagName('chat-data')[0]);
  var root = parsedXML.getElementsByTagName('chat-data')[0];
  var lastmid = root.getAttribute('lastmid');
  var currentRoomId = root.getAttribute('roomId');
  document.last_message_id = lastmid;
 //alert(document.stateid);
  var chatRoot = root.getElementsByTagName('chatmessages')[0];
  var visibleRows = chatRoot.getAttribute('visible-rows');

  var chatmessages = chatRoot.getElementsByTagName('chatmessage');
  var rowsNum = document.last_message_id != lastmid && visibleRows > chatmessages.length ? visibleRows : chatmessages.length;
  if (rowsNum > 0) {
    var chatHtml = '';
            //'<table id="messageTable" border="0" cellspacing="0" ' + (document.popup ? '' : (Utils.browser.IE ? 'width="282"' : 'width="282"')) + ' cellpadding="0" class="homeTable" style="table-layout:fixed;">';// +
    for (var i = 0; i < rowsNum; i++) {
      var rowContent;
      if (i < chatmessages.length) {
        var message = chatmessages[i];
        var msgType = message.getElementsByTagName("type")[0].firstChild.nodeValue;
        rowContent = generateRowContent(currentRoomId, message);
      }
      chatHtml += '<tr class="' + (i % 2 != 0 ? 'evenrow' : 'oddrow') + '">' +
                     ' <td align="'  + (msgType != 3 ? 'left' : 'center') + '">' + rowContent + '</td>' +
                     '</tr>';
    }
    //chatHtml += '</table>';
  }
  if (chatmessages.length > 0) {
    document.last_message_id = lastmid;
    //alert(lastTransID);
  }
 //alert(chatHtml);
  return chatHtml;
}

function generateCurrentMessagePartialHtml(parsedXML,container) {
  var messageHtml = "";
  var extendCols = !Utils.browser.IE;
  var root = parsedXML.getElementsByTagName('chat-data')[0];
  var chatRoot = root.getElementsByTagName('chatmessages')[0];
  var visibleRows = chatRoot.getAttribute('visible-rows');
  var lastmid = root.getAttribute('lastmid');
  var currentRoomId = root.getAttribute('roomId');
  document.last_message_id = lastmid;

  var chatmessages = chatRoot.getElementsByTagName('chatmessage');
  var rowsNum = visibleRows > chatmessages.length ? chatmessages.length : visibleRows;

  var old_class = container.firstChild.lastChild.className;
  if( old_class.indexOf( "_tagged" ) != -1 )
    old_class = old_class.substr( 0, old_class.indexOf( '_tagged' )-1 );

  for (var i = 0; i < rowsNum; i++) {
    var id = "";
    var rowContent;
    var msgType;

    if (i < chatmessages.length) {
      var message = chatmessages[i];
      id = message.getElementsByTagName("id")[0].firstChild.nodeValue;
      rowContent = generateRowContent(currentRoomId, message);
      msgType = message.getElementsByTagName("type")[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";
    {
      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 = rowContent;
      col.setAttribute( "width", (extendCols ? 266 : 266) );
      col.setAttribute( "align", msgType != 3 ? "left" : "center");
      //col.setAttribute( "style", "padding-right:0px;" );
      row.appendChild( col );

    }
   // Remove one line from the top, and add one line at the bottom
    if (visibleRows <= container.firstChild.childNodes.length) {
      var el = container.firstChild.firstChild;
      container.firstChild.removeChild( el );
      //alert("Removing child....");
    } else {
      //alert ("visibleRows:" + visibleRows + "  container.firstChild.childNodes.length:" + container.firstChild.childNodes.length);
    }
    //container.firstChild.insertBefore( row, container.firstChild.firstChild );
    container.firstChild.appendChild(row);


    // Start timer for color removal ( Default to 10 secs, now set to 5 for testing )
    setTimeout( "removeColoredCode( 'rc-" + id + "' );", color_timeout );
  }
  if (rowsNum > 0) {
    scrollChatTable();
  }
  document.tc_class = false;
}
function generateRowContent(currentRoomId, message) {
  var msgType = message.getElementsByTagName("type")[0].firstChild.nodeValue;
  if (msgType == 1) {
    var date = message.getElementsByTagName("date")[0].firstChild.nodeValue;
    var user = message.getElementsByTagName("user")[0].firstChild.nodeValue;
    var roomId = message.getElementsByTagName("roomId")[0].firstChild.nodeValue;
    var roomName = message.getElementsByTagName("roomName")[0].firstChild.nodeValue;
    var roomUrl = message.getElementsByTagName("roomUrl")[0].firstChild.nodeValue;
    var msgContent = message.getElementsByTagName("msgContent")[0].firstChild.nodeValue;
    var url = currentRoomId == roomId ? date + " - " : date + ' - <a href="/infostock/control' + roomUrl + '" class="speclnk">' + roomName + '</a> - ';
    return   url + '<span class="green">'  + user + ':</span> ' + msgContent;
  } else if (msgType == 2) {
    return message.getElementsByTagName("msgContent")[0].firstChild.nodeValue;
  } else if (msgType == 3) {
    return message.getElementsByTagName("date")[0].firstChild.nodeValue;
  }
}
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" );
}