﻿/*
* Adds function to window.onload
*
* Usage:
*   addLoadEvent(function() { alert('Hello!'); });
*/
function addLoadEvent(func)
{
  var oldOnLoad = window.onload;
  if(typeof window.onload != 'function')
  {
    window.onload = func;
  }
  else
  {
    window.onload = function()
    {
      if(oldOnLoad)
      {
        oldOnLoad();
      }
      func();
    }
  }
}

function addUnloadEvent(func)
{
  var oldOnUnload = window.onunload;
  if(typeof window.onunload != 'function')
  {
    window.onunload = func;
  }
  else
  {
    window.onunload = function()
    {
      if(oldOnUnload)
      {
        oldOnUnload();
      }
      func();
    }
  }
}

function getXmlNodeText(node)
{
  var obj = node;
  return obj.text || obj.textContent;
}

var requestTimeoutId;
var lastMessageId = "";


function handleError(response)
{
  var error = response.getElementsByTagName("Error")[0];
  if(error)
  {
    var errorCode = getXmlNodeText(error.getElementsByTagName("ErrorCode")[0]);
    if(errorCode == "OK")
    {
      return true;
    }

    var errorMessage = getXmlNodeText(error.getElementsByTagName("ErrorMessage")[0]);
    if(errorMessage && errorMessage != "")
    {
      //alert(errorMessage + "\n[" + errorCode + "]");

      var oldMessageContent = document.getElementById("Messages").innerHTML;
      var newMessageContent =
      "<div class=\"OnlineChat_Message OnlineChat_Error\">" +
      errorMessage + "[" + errorCode + "]" + 
      "</div>";
      document.getElementById("Messages").innerHTML = oldMessageContent + newMessageContent;
      document.getElementById("MessageScroller").scrollTop = document.getElementById("MessageScroller").scrollHeight;
    }

    if(requestTimeoutId)
    {
      clearTimeout(requestTimeoutId);
    }
  }
  return false;
}

function handleState(response)
{
  var enabled = false;

  var state = response.getElementsByTagName("State")[0];
  if(state)
  {
    enabled = (getXmlNodeText(state) == "InTalk");
  }
  var text = enabled ? "Онлайн-чат: разговор" : "Онлайн-чат";
  document.getElementById("Status").childNodes[0].data = text;
  
  document.getElementById("MessageText").enabled = enabled;
  document.getElementById("MessageText").disabled = !enabled;

  document.getElementById("MessageButton").enabled = enabled;
  document.getElementById("MessageButton").disabled = !enabled;

  if(document.getElementById("EndChatButton"))
  {
    document.getElementById("EndChatButton").enabled = enabled;
    document.getElementById("EndChatButton").disabled = !enabled;
  }
}

function handleMessage(response)
{
  var message = response.getElementsByTagName("Message")[0];
  if(!message)
  {
    return false;
  }
  if(message.getElementsByTagName("MessageType").length == 0)
  {
    return false;
  }

  var messageType = getXmlNodeText(message.getElementsByTagName("MessageType")[0]);
  var messageTime = getXmlNodeText(message.getElementsByTagName("MessageTimeUtc")[0]);
  var messageContent = getXmlNodeText(message.getElementsByTagName("MessageContent")[0]);
  var messageSender = getXmlNodeText(message.getElementsByTagName("MessageSender")[0]);
  var messageId = getXmlNodeText(message.getElementsByTagName("MessageId")[0]);

  if(messageTime != "")
  {
    var d = new Date();
    //d.setTime(Date.parse(messageTime));
    messageTime = d.toLocaleTimeString();
  }
  
  if(messageContent && messageContent != "")
  {
    if(lastMessageId != messageId)
    {
      var oldMessageContent = document.getElementById("Messages").innerHTML;
      var newMessageContent =
      "<div class=\"OnlineChat_Message OnlineChat_" + messageType + "\">" +
      "<span class=\"OnlineChat_MessageTime\">" +
      "[" + messageTime + "] " +
      messageSender + "&gt;" +
      "</span> " +
      messageContent + 
      "</div>";
      document.getElementById("Messages").innerHTML = oldMessageContent + newMessageContent;
      document.getElementById("MessageScroller").scrollTop = document.getElementById("MessageScroller").scrollHeight;
      window.setTimeout("window.focus();", 100);
    }

    lastMessageId = messageId;
    return (lastMessageId != messageId);
  }
  return false;
}

function showLoader(flag)
{
  document.getElementById("Loader").style.display = flag ? "block" : "none";
}

/*
* Is operator available?
*/
function IsOperatorAvailable()
{
  var request = getXmlHttp();
  var url = "/chat/Chat.asmx/IsOperatorAvailable";
  request.open("GET", url);
  request.onreadystatechange = function()
  {
    if(request.readyState == 4 && request.status == 200)
    {
      var response = request.responseXML.documentElement;
      var result = response.childNodes[0].data;
      var available = (result == "true");
      document.getElementById("OnlineChatBusy").style.display = available ? "none" : "inline";
      document.getElementById("OnlineChatFree").style.display = available ? "inline" : "none";
    }
  };
  request.send(null);
}
