/*
DHTML Chat Manager Class 360
Written By: Ken Colton <kcolton@360hubs.com>
*/

var ChatManager360 = new Object();

ChatManager360.chatSet = Array();
ChatManager360.chatLoader;
ChatManager360.sessionUsername;
ChatManager360.blinkSet = Array();
ChatManager360.blinkOn = true;

ChatManager360.init = function(sessionUsername)
{
  ChatManager360.sessionUsername = sessionUsername;
  ChatManager360.blink();
}

ChatManager360.alreadyBlinking = function(username)
{
  for(var i = 0; i < ChatManager360.blinkSet.length; i++)
  {
    if(ChatManager360.blinkSet[i] == username)
      return true;
  }
  
  return false;
}

ChatManager360.stopBlinking = function(username)
{
  for(var i = 0; i < ChatManager360.blinkSet.length; i++)
  {
    if(ChatManager360.blinkSet[i] == username)
    {
      ChatManager360.blinkSet.splice(i, 1);
    } 
  }
}

ChatManager360.blink = function()
{
  memberSet = document.getElementById('memberlist').childNodes;
  friendSet = document.getElementById('friendlist').childNodes;
  
  for(var i = 0; i < memberSet.length; i++)
  {
    for(var j = 0; j < ChatManager360.blinkSet.length; j++)
    {
      if(memberSet[i].username == ChatManager360.blinkSet[j])
      {
        if(ChatManager360.blinkOn)
        {
          memberSet[i].style.background="#eeca69";
        }
        else
        {
          memberSet[i].style.background="#FFFFFF";
        }
      }
    }
  }
  
  for(var i = 0; i < friendSet.length; i++)
  {
    for(var j = 0; j < ChatManager360.blinkSet.length; j++)
    {
      if(friendSet[i].username = ChatManager360.blinkSet[j])
      {
        if(ChatManager360.blinkOn)
        {
          friendSet[i].style.background="#eeca69";
        }
        else
        {
          friendSet[i].style.background="#FFFFFF";
        }
      }
    }
  }
  
  ChatManager360.blinkOn = !ChatManager360.blinkOn;
  
  setTimeout(ChatManager360.blink, 1500);
}

ChatManager360.userClick = function()
{
  //alert("Open");
  
  if(this.parentNode.username)
    username = this.parentNode.username;
  else
    username = this.username;
  
  ChatManager360.stopBlinking(username);
  
  var elementExists = -1;

  for(var i = 0; i < ChatManager360.chatSet.length; i++)
  {
    if(ChatManager360.chatSet[i].username == username)
    {
      elementExists = i;
      break;
    }
  }
  
  if(elementExists != -1)
  {
    ChatManager360.chatSet[i].window.openWindow();
    
    this.messageLoader = new net.ContentLoader(rootURL + 'modules/im360/ajax/im360chat.php', null, null, 'POST', "action=show&puser="+username);
  }
  else
  {
    var chat = new ChatManager360.Chat(username);
    ChatManager360.chatSet.push(chat);
    
    this.messageLoader = new net.ContentLoader(rootURL + 'modules/im360/ajax/im360chat.php', null, null, 'POST', "action=show&puser="+username);
  }
}

ChatManager360.getInitialChats = function()
{
  ChatManager360.chatLoader = new net.ContentLoader(rootURL + 'modules/im360/ajax/im360chat.php', ChatManager360.getInitialChatsCallback, null, 'POST', 'action=getinit');
}

ChatManager360.getInitialChatsCallback = function()
{
  var chatObject = eval("("+ChatManager360.chatLoader.req.responseText+")");
  
  if(chatObject.error)
  {
    //alert("Initial Chat Request Failed:" + chatObject.error);
    listWindow360.closeWindow(true);
  }
  else
  {
    xLeft(listWindow360.windowNode, chatObject.listx);
    xTop(listWindow360.windowNode, chatObject.listy);
    
    listWindow360.windowNode.style.display = "block";
  
    var chatList = chatObject.chatlist;
    
    for(var i = 0; i < chatList.length; i++)
    {
      var chat = new ChatManager360.Chat(chatList[i].partnerusername);
      ChatManager360.chatSet.push(chat);
      if(chatList[i].hide == 1)
      {
        chat.window.closeWindow();
      }
      
      xLeft(chat.window.windowNode, chatList[i].chatx);
      xTop(chat.window.windowNode, chatList[i].chaty);
      
      var messages = chatList[i].messages;
      
      chat.appendMessages(messages);
    }
    setTimeout(ChatManager360.syncMessages, 4000);
  }
}



ChatManager360.Chat = function(username, myusername)
{
  this.username = username;
  this.currentMessage = 0;
  this.currentSyncedMessage = 0;
  
  //Create our main chat content div which will be added to the window manager
  this.chatContent = document.createElement("div");
  this.chatContent.className = "chatcontent";
  
  //Create the chat window div
  this.chatWindow = document.createElement("div");
  this.chatWindow.className = "chatwindow";
  
  //Create the input div
  this.chatInput = document.createElement("div");
  this.chatInput.className = "chatinput";
  
  //Create the textarea
  this.chatTextarea = document.createElement("textarea");
  this.chatTextarea.className = "chatTextarea";
  this.chatInput.appendChild(this.chatTextarea);
  
  //Create the submit button
  this.chatSubmit = document.createElement("input");
  this.chatSubmit.setAttribute("type", "button");
  this.chatSubmit.setAttribute("value", "Send");
  //this.chatSubmit.className = "chatSubmit";
  this.chatSubmit.chatObject = this;
  this.chatSubmit.onclick = this.submitClick;
  
  this.chatTextarea.sendButton = this.chatSubmit;
  //xAddEventListener(this.chatTextarea,'keypress', this.checkSubmit, true);
  this.chatTextarea.onkeypress = this.checkSubmit;
  this.chatInput.appendChild(document.createElement("br"));
  this.chatInput.appendChild(this.chatSubmit);

  
  //Append the children to the content window
  this.chatContent.appendChild(this.chatWindow);
  this.chatContent.appendChild(this.chatInput);
  
  this.messages = Array();
  
  this.window = new WindowManager360.Window(this.chatContent, "windowtheme", "Chat With " + this.username, this.chatClose, 350);
  this.window.closeNode.owner = this;
  
  this.messageLoader;
}

ChatManager360.Chat.prototype.checkSubmit = function(e)
{

  var characterCode;
  
  if(e && e.which)
  { 
    e = e
    characterCode = e.which; //character code is contained in NN4's which property
  }
  else
  {
    e = event
    characterCode = e.keyCode; //character code is contained in IE's keyCode property
  }
  
  
  
  if(characterCode == 13)
  {
    if(this.sendButton)
      this.sendButton.click();
    else
    {
      this.chatSubmit.click();
    } 
    return false
  }
  else
  {
    return true
  }
}

ChatManager360.Chat.prototype.chatClose = function()
{
  if(this.owner)
  {
    this.messageLoader = new net.ContentLoader(rootURL + 'modules/im360/ajax/im360chat.php', null, null, 'POST', "action=hide&puser="+this.owner.username);
  }
  else
  {
    this.messageLoader = new net.ContentLoader(rootURL + 'modules/im360/ajax/im360chat.php', null, null, 'POST', "action=hide&puser="+this.username);
  }
} 

ChatManager360.Chat.prototype.submitClick = function()
{
  var chatObject = this.chatObject;
  
  var messages = new Array();
  
  var message = new Object();
  message.username = ""+ChatManager360.sessionUsername;
  message.message = chatObject.chatTextarea.value;
  message.timestamp = -1;

  messages.push(message);
  
  chatObject.chatTextarea.value = "";
  
  //Add the message to the window immediatly as an unsynced message
  chatObject.appendMessages(messages);
  
  //Send the message to the server
  chatObject.sendMessage(message);
}

ChatManager360.Chat.prototype.sendMessage = function(message)
{
  var params = 'action=sync&chatusername='+this.username+'&message='+message.message+'&';
  
  
  for(var i = 0; i < ChatManager360.chatSet.length; i++)
  {
    params += 'chatuserset[]='+ChatManager360.chatSet[i].username+'&synctime[]=';
    
    if(ChatManager360.chatSet[i].messages.length == 1)
    {
      if(ChatManager360.chatSet[i].messages[ChatManager360.chatSet[i].messages.length-1].timestamp == -1)
      {
        params += 0;
      }
      else
      {
        params += ChatManager360.chatSet[i].messages[ChatManager360.chatSet[i].messages.length-1].timestamp;
      }
    }
    else if(ChatManager360.chatSet[i].messages.length > 1)
    {
      if(ChatManager360.chatSet[i].messages[ChatManager360.chatSet[i].messages.length-1].timestamp == -1)
      {
        params += ChatManager360.chatSet[i].messages[ChatManager360.chatSet[i].messages.length-2].timestamp;
      }
      else
      {
        params += ChatManager360.chatSet[i].messages[ChatManager360.chatSet[i].messages.length-1].timestamp;
      }
    }
    else
    {
      params += "0";
    }
    params += "&";
  }
  
  this.chatSubmit.disabled = true;
  
  this.messageLoader = new net.ContentLoader(rootURL + 'modules/im360/ajax/im360chat.php', null, null, 'POST', params);
}

ChatManager360.syncMessages = function()
{

  var params = 'action=sync&listx='+xLeft(listWindow360.windowNode)+'&listy='+xTop(listWindow360.windowNode)+'&';

  for(var i = 0; i < ChatManager360.chatSet.length; i++)
  {
    params += 'chatx['+i+']='+xLeft(ChatManager360.chatSet[i].window.windowNode)+'&';
    params += 'chaty['+i+']='+xTop(ChatManager360.chatSet[i].window.windowNode)+'&';
    
    if(ChatManager360.chatSet[i].messages.length > 0)
    {
  
      params += 'chatuserset['+i+']='+ChatManager360.chatSet[i].username+'&synctime['+i+']=';
      
      if(ChatManager360.chatSet[i].messages.length == 1)
      {
        if(ChatManager360.chatSet[i].messages[ChatManager360.chatSet[i].messages.length-1].timestamp == -1)
        {
          params += 0;
        }
        else
        {
          params += ChatManager360.chatSet[i].messages[ChatManager360.chatSet[i].messages.length-1].timestamp;
        }
      }
      else if(ChatManager360.chatSet[i].messages.length > 1)
      {
        if(ChatManager360.chatSet[i].messages[ChatManager360.chatSet[i].messages.length-1].timestamp == -1)
        {
          params += ChatManager360.chatSet[i].messages[ChatManager360.chatSet[i].messages.length-2].timestamp;
        }
        else
        {
          params += ChatManager360.chatSet[i].messages[ChatManager360.chatSet[i].messages.length-1].timestamp;
        }
      }
      else
      {
        params += "0";
      }
      params += "&";
    
    }
  }
  
  ChatManager360.messageLoader = new net.ContentLoader(rootURL + 'modules/im360/ajax/im360chat.php', ChatManager360.syncMessagesCallback, null, 'POST', params);
}

ChatManager360.syncMessagesCallback = function()
{

  var chatObject = eval("("+this.req.responseText+")");

  if(chatObject.error)
  {
    //alert("Chat Sync Failed:" + chatObject.error);
    listWindow360.closeWindow(true);
  }
  else
  {
    var chatList = chatObject.chatlist;

    for(var i = 0; i < chatList.length; i++)
    {
      if(i < ChatManager360.chatSet.length)
      {
        if(ChatManager360.chatSet[i].messages[ChatManager360.chatSet[i].messages.length-1].timestamp == -1)
        {
          ChatManager360.chatSet[i].chatWindow.removeChild(ChatManager360.chatSet[i].chatWindow.lastChild);
          ChatManager360.chatSet[i].messages.pop();
          
          ChatManager360.chatSet[i].chatSubmit.disabled = false;
        }
        
        if(chatList[i].messages.length > 0)
        {
          if(ChatManager360.chatSet[i].window.windowNode.style.display == "none")
          {
            if(!ChatManager360.alreadyBlinking(ChatManager360.chatSet[i].username))
            {
              ChatManager360.blinkSet.push(ChatManager360.chatSet[i].username);
            }
          } 
        }
        
        ChatManager360.chatSet[i].appendMessages(chatList[i].messages);
      }
      else
      {
        var chat = new ChatManager360.Chat(chatList[i].partnerusername);
        ChatManager360.chatSet.push(chat);
        if(chatList[i].hide == 1)
        {
          chat.window.closeWindow();
        }
        
        
        var messages = chatList[i].messages;
        chat.appendMessages(messages);
      }
    }
    
    setTimeout(ChatManager360.syncMessages, 4000);
  } 
}

ChatManager360.Chat.prototype.appendMessages = function(messages)
{
  this.messages = this.messages.concat(messages);
  
  for(var i = 0; i < messages.length; i++)
  {
    var messageNode = document.createElement("div");
    messageNode.className = "message";
    
    var titleNode = document.createElement("span");
    if(this.username == messages[i].username)
    {
      titleNode.className = "partnerTitle";
    }
    else
    {
      titleNode.className = "userTitle";
    }
    
    titleNode.appendChild(document.createTextNode(messages[i].username + ": "));
    
    messageNode.appendChild(titleNode);
    
    messageNode.innerHTML += messages[i].message;
    
    this.chatWindow.appendChild(messageNode);
    
    
    
    this.currentMessage++;
    
    if(messages[i].timestamp != -1)
      this.currentSyncedMessage++;
  }
  
  this.chatWindow.scrollTop = 90000;
}
  