/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
 *  
 * ***** BEGIN LICENSE BLOCK *****
 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is JSIRC Library.
 *
 * The Initial Developer of the Original Code is
 * New Dimensions Consulting, Inc.
 * Portions created by the Initial Developer are Copyright (C) 1999
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 *   Robert Ginda, rginda@ndcico.com, original author
 *
 * Alternatively, the contents of this file may be used under the terms of
 * either the GNU General Public License Version 2 or later (the "GPL"), or
 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
 * in which case the provisions of the GPL or the LGPL are applicable instead
 * of those above. If you wish to allow use of your version of this file only
 * under the terms of either the GPL or the LGPL, and not to allow others to
 * use your version of this file under the terms of the MPL, indicate your
 * decision by deleting the provisions above and replace them with the notice
 * and other provisions required by the GPL or the LGPL. If you do not delete
 * the provisions above, a recipient may use your version of this file under
 * the terms of any one of the MPL, the GPL or the LGPL.
 *
 * ***** END LICENSE BLOCK ***** */

function CDCCChat (ep, host, port)
{
    
    this.READ_TIMEOUT = 50;

    this.eventPump = ep;
    this.host = host;
    this.port = port;
    this.connection = new CBSConnection();

    this.savedLine = "";

}

CDCCChat.prototype.connect =
function dchat_connect (host, port)
{
    
    if (typeof host != "undefined") this.host = host;
    if (typeof port != "undefined") this.port = port;

    if (!this.connection.connect (this.host, this.port, (void 0), true))
        return false;

    this.eventPump.addEvent (new CEvent ("dcc-chat", "poll", this, "onPoll"));

    return true;
    
}

CDCCChat.prototype.onPoll =
function dchat_poll (e)
{
    var line = "";
    
    try
    {    
        line = this.connection.readData (this.READ_TIMEOUT);
    }
    catch (ex)
    {
        if (typeof (ex) != "undefined")        
        {
            this.connection.disconnect();
            var e = new CEvent ("dcc-chat", "close", this, "onClose");
            e.reason = "read-error";
            e.exception = ex;
            this.eventPump.addEvent (e);
            return false;
        }
        else
            line = "";
    }

    this.eventPump.addEvent (new CEvent ("dcc-chat", "poll", this, "onPoll"));
    
    if (line == "")
        return false;
    
    var incomplete = (line[line.length] != '\n');
    var lines = line.split("\n");

    if (this.savedLine)
    {
        lines[0] = this.savedLine + lines[0];
        this.savedLine = "";
    }
    
    if (incomplete)
        this.savedLine = lines.pop();
    
    for (i in lines)
    {
        var ev = new CEvent("dcc-chat", "rawdata", this, "onRawData");
        ev.data = lines[i];
        ev.replyTo = this;
        this.eventPump.addEvent (ev);
    }
    
    return true;
    
}

CDCCChat.prototype.say =
function dchat_say (msg)
{

    this.connection.sendData (msg + "\n");

}
