YAHOO.namespace("wspchat");
YAHOO.util.Event.addListener(window, "load", function() {
  YAHOO.wspchat.Polling = function() {
    YAHOO.wspchat.myDataSource = new YAHOO.util.XHRDataSource( '/chat_poll?page_id=' + YAHOO.wspchat.page_id + ((true == YAHOO.wspchat.link) ? '&link'  : '') );
    YAHOO.wspchat.myDataSource.responseType = YAHOO.util.XHRDataSource.TYPE_JSON;
    YAHOO.wspchat.myDataSource.connXhrMode = "queueRequests";
    YAHOO.wspchat.myDataSource.responseSchema =
    {
      resultsList: "results",
      fields: ["users", "messages"]
    };

    //Enter key listener
    var input_chat_send = YAHOO.util.Dom.get('input_chat_send');
    if(input_chat_send)
    {
      YAHOO.wspchat.sendMessage = function(type, args, obj)
      {
        var request = YAHOO.util.Connect.asyncRequest('POST', '/chat_send', {}, 'message='+YAHOO.util.Dom.get('input_chat_send').value);
        YAHOO.util.Dom.get('input_chat_send').value = "";
      }
      YAHOO.wspchat.myListener = new YAHOO.util.KeyListener('input_chat_send', {keys:13}, {fn: YAHOO.wspchat.sendMessage});
      YAHOO.wspchat.myListener.enable();
    }

    // Set up polling only if chat_users or chat_messages are present
    if(YAHOO.util.Dom.get('chat_users') || YAHOO.util.Dom.get('chat_messages'))
    {
      YAHOO.wspchat.myCallback = {
        success: function(oRequest, oParsedResponse) {
          var chat_users = YAHOO.util.Dom.get('chat_users');
          if(chat_users)
          {
            var users_html = '<ul>';
            for(var i=0; i<oParsedResponse.results[0]['users'].length; i++)
            {
              users_html += '<li>' + oParsedResponse.results[0]['users'][i] + '</li>';
            }
            users_html += '</ul>';
            YAHOO.util.Dom.get('chat_users').innerHTML = users_html;
          };

          var chat_messages = YAHOO.util.Dom.get('chat_messages');
          if(chat_messages)
          {
            var messages_html = '<ol>';
            for(var i=0; i<oParsedResponse.results[0]['messages'].length; i++)
            {
              var message = oParsedResponse.results[0]['messages'][i];
              var date = new Date(message.time*1000);
              messages_html += '<li>' +
                '<span class="chat_message_time">' + YAHOO.util.Date.format(date, {format: "%T"}) + '</span> ' +
                '<span class="chat_message_user">' + message.user + '</span> ' +
                '<span class="chat_message_text">' + message.text + '</span> ' +
              '</li>';
            }
            messages_html += '</ol>';
            YAHOO.util.Dom.get('chat_messages').innerHTML = messages_html;
          };

          var chat_status = YAHOO.util.Dom.get('chat_status');
          if(chat_status)
          {
            YAHOO.util.Dom.get('chat_status').innerHTML = 'Polling success';
          };
        },

        failure: function() {
          var chat_status = YAHOO.util.Dom.get('chat_status');
          if(chat_status)
          {
            YAHOO.util.Dom.get('chat_status').innerHTML = 'Polling failure';
          };
        },
        scope: YAHOO.wspchat.myDataSource
      };

      YAHOO.wspchat.myDataSource.setInterval(1000, null, YAHOO.wspchat.myCallback);
    }

    return {
      oDS: YAHOO.wspchat.myDataSource
    };
  }();
});

