
// TODO: Add function to get translation strings from knowit

// --------------------- //
// Text based Ajax Calls //
// --------------------- //

function lavaAjaxAsyncTextCall(url, query, callback_success, callback_error)
{
    var myAjaxRequest = new nitobi.ajax.HttpRequest();
    myAjaxRequest.handler = url;
    myAjaxRequest.responseType = "text";
    myAjaxRequest.async = true;
    myAjaxRequest.params = callback_success;
    myAjaxRequest.onPostComplete.subscribe(lavaCallbackHandler);
    myAjaxRequest.post(query);
}

function lavaCallbackHandler(response)
{
    // TODO: params should be an error for success and error callback methods

    userCallbackFunction = response.params;
    userCallbackFunction(response.response);
}


// -------------------- //
// XML based Ajax Calls //
// -------------------- //

function lavaAjaxAsyncXMLCall(url, query, callback_success, callback_error)
{
    var myAjaxRequest = new nitobi.ajax.HttpRequest();
    myAjaxRequest.handler = url;
    myAjaxRequest.responseType = "text";
    myAjaxRequest.async = true;
    myAjaxRequest.params = callback_success;
    myAjaxRequest.onPostComplete.subscribe(lavaCallbackXMLHandler);
    myAjaxRequest.post(query);
}

function lavaCallbackXMLHandler(response)
{
    // TODO: params should be an error for success and error callback methods
    var strXML = response.response
    strXML = strXML.replace(/\n/g, "");
    strXML = strXML.replace(/\r/g, "");
    var xml = nitobi.xml.createXmlDoc(strXML);
    
    userCallbackFunction = response.params;
    userCallbackFunction(xml);
}


/*
    Following is sample code that can be used to get the messages from the XML
    
    var MSG_USER_SESSION_REQUEST = "USER_SESSION_REQUEST";
    function checkMessages_success(response)
    {
        // TODO: First look for error messages and send to handler
    
        // Get all messages as an array of DOMElement objects
        var messages = response.getElementsByTagName('message');
        
        // Loop through each message received in the AJAX
        for(i=0; i<messages.length; i++)
        {
            // Get the id, type and parameters from the message
            var messageId = messages[i].attributes.getNamedItem('id').value;
            var messageType = messages[i].attributes.getNamedItem('type').value;
            var params = messages[i].getElementsByTagName('message-parameter');
            
            // Customise these variables to match the parameters that are set in the specific message type being received
            var counselorSessionId = '';
            
            // Loop through and pick up message-parameters from message
            for(i2=0; i2<params.length; i2++)
            {
                var paramName = params[i].attributes.getNamedItem('param').value;
                var paramValue = params[i].attributes.getNamedItem('value').value;
                
                if(paramName == 'counselorSessionId')
                {
                    counselorSessionId = paramValue;
                }
            }
                    
            // Change this section below to call your own methods for the different message types you are expecting
            if(messageType == MSG_USER_SESSION_REQUEST)
            {
                userSessionRequested(messageId, counselorSessionId);
            }
        }
        
        // Optionally set a timer so that you can check for more messages
        setTimeout("checkForCounselorSessionMessages()", 2000);
    }


*/

function marshallParams(params)
{
    var myMap = new LavaResultMap();
    for(i = 0; i < params.length; ++i)
    {
        var paramName = params[i].attributes.getNamedItem('param').value;
        var paramValue = params[i].attributes.getNamedItem('value').value;
        myMap.add(paramName, paramValue);
    }
    return myMap;
}

function LavaResultMap()
{
    this.results = new Array();
    
    this.add = add;
    this.get = get;
    this.size = size;
}

function add(name, value)
{
    var result = new Array(2);
    result[0] = name;
    result[1] = value;
    this.results[this.results.length] = result;
}

function get(name)
{
    for (i = 0; i < this.results.length; ++i)
    {
        var result = this.results[i];
        if (result[0] == name)
        {
            return result[1];
        }
    }
    return null;
}

function size()
{
    return this.results.length;
}
