//
// context support for client logging
// requires xml_http

var EVENT_INFO = null;

function createEventInfo () {
    if (EVENT_INFO == null)
        EVENT_INFO = new Object();
}

function setEventInfo (key, value) {
    createEventInfo();
    EVENT_INFO[key] = value;
}

function setPassageEventInfo (textId, textPath, passageId, page) {
    createEventInfo();
    EVENT_INFO.textId = textId;
    EVENT_INFO.textPath = textPath;
    EVENT_INFO.passageId = passageId;
    EVENT_INFO.page = page;
}

function setStrategyEventInfo (textId, textPath, passageId, page, strategyId, coachId, agentId) {
    setPassageEventInfo(textId, textPath, passageId, page);
    EVENT_INFO.strategyId = strategyId;
    EVENT_INFO.coachId = coachId;
    EVENT_INFO.agentId = agentId;
}

function setEventInfoFromMeta () {
    createEventInfo();
    var metas = document.getElementsByTagName("META");
    for (var i = 0; i < metas.length; i++) {
        var meta = metas[i];
        var key = meta.httpEquiv;
        if (key.indexOf("log:") == 0) {
            if (key != "log:milestone") {
                EVENT_INFO[key.substr(4)] = meta.content;
            }
        }
    }
}

/**
 * @param key if supplied, return corresponding value, otherwise
 * return COPY of whole event info object
 */
function getEventInfo (key) {
    if (key)
        return EVENT_INFO[key];
    // else
    var cp = new Object();
    for (var prop in EVENT_INFO) {
        cp[prop] = EVENT_INFO[prop];
    }
    return cp;
}

/**
 * @param ei if an object supplied, use that to generate query params,
 * else use the EVENT_INFO itself
 */
function eventInfoQueryString (ei) {
    if (!ei) {
        ei = EVENT_INFO;
    }
    var qs = "";
    var sep = "?";
    for (var prop in ei) {
        var val = ei[prop];
        if (val !== undefined && val != null && val != "") {
            qs += sep + prop + "=" + val;
            sep = "&";
        }
    }
    return qs;
}

/**
 * do the xml_http logging, sending current event info context plus
 * any extra/overriding settings
 */ 
function logEventInfo (extra) {
    var ei = getEventInfo();
    for (var prop in extra) {
        ei[prop] = extra[prop];
    }
    var qs = eventInfoQueryString(ei);
    logClientEvent('client_log' + qs);
}


function logAgentSpeech (coachId, agentId, lang, coachTextId) {
    var extra = {
        'coachId':     coachId,
        'coachTextId': coachTextId,
        'agentId':     agentId,
        'lang':        lang
    };
    var ei = getEventInfo();
    if (ei.type)
        extra.type = ei.type + "-agent";
    else
        extra.type = "agent";
    if (!ei.realmId)
        extra.realmId = "AGENT";
    logEventInfo(extra);
}

