////////////////////////////////////////////////////////////////////////
//
// Filename: content.js
// Purpose : Handle update requests of the content frame
// Method  : Ajax
//
// Author  : J.van.der.Steen@gobase.org
// Date    : 2010-03-07
//
////////////////////////////////////////////////////////////////////////

/**
 * Load content specified by supplied specifications
 */
function contentLoadExec(parameters)
{
    var html = '';

    html += "<p";
    html += " style='text-align:center;margin:50px auto;'>\n";
    html += "<img src='img/loading.gif' width='16' height='16'>\n";
    html += "loading...\n";
    html += "<\/p>\n";

    Element.update(parameters.target, html);

    var request = new Ajax.Updater( { success: parameters.target, failure: 'debug' }
                                  , 'content/' + parameters.filename
                                  , { method: 'post'
                                    , on404    : contentLoadFailed
                                    , onFailure: contentLoadFailed
                                    , onSuccess: contentLoadSuccess
                                    , parameters: parameters
                                    }
                                  ) ;
}

/**
 * Load supplied menu item
 */
function contentLoad(guid)
{
    var param = arguments.length > 1 ? arguments[1] : {};
    var item;

    //
    // Get menu in required state
    //
    if ((item = menuReflectSelection(guid)) === null) {
        debug("Cannot find menu item with guid='" + guid + "'");
        return;
    }

    //
    // Current menu, current topic
    //
    var parameters = { target: 'content'
                     , guid  : guid
                     , topic : currentMenuTopic
                     } ;
    //
    // Add any parameters passed to us
    //
    if (param !== false) {
        for (var key in param) {
            if (param[key] !== undefined) {
                parameters[key] = param[key];
            }
        }
    }

    if (item.text !== undefined) {
        //
        // Emit defined text as is
        //
        Element.update(parameters.target, item.text);
        return;
    }

    if (item.jsscript !== undefined) {
        //
        // Execute defined JavaScript code
        // TODO The <item.jsscript> function might be undefined. We need a test.
        //
        eval(item.jsscript);
        return;
    }

    if (item.filename === undefined) {
        debug("No method to display content of selected menu item '" + guid + "'");
        return;
    }
    parameters.filename = item.filename;

    contentLoadExec(parameters);
}

/**
 * Some menu items have the "byname" property set.
 * We load one here using supplied name.
 */
function contentLoadByName(menu, name)
{
    var param = arguments.length > 2 ? arguments[2] : {};

    //
    // No reverse index, lineair search
    //
    for (var n = 0; n < menu.length; n++) {
        var item = menu[n];

        if (item.byname == name) {
            contentLoad(item.guid, param);
            return true;
        }
        if (item.topics !== undefined) {
            if (contentLoadByName(item.topics, name, param)) {
                return true;
            }
        }
    }
    return false;
}

function contentLoadFailed(response)
{
    var fallbackText = "<center>"
                     + "No content defined yet for page:"
                     + " '" + response.request.url + "'"
                     + ", please inform:"
                     + " <a href='mailto:" + config.board.webmaster.email + ""
                     + "?subject=Missing page: " + response.request.url + "'>"
                     + config.board.webmaster.name
                     + "</a>"
                     + " (webmaster)"
                     + "</center>"
                     ;
    // fallbackText += "<PRE>\n" + print_r(response) + "</PRE>\n";

    Element.update('content', fallbackText);

    setTimeout("debug()", 500);
}

function contentLoadSuccess(response)
{
    debug('');

    //
    // Change advertisement
    //
    adsChange();

    //
    // The actual content takes a little time to load
    //
    setTimeout("sortables_init()", 500);

    //
    // Add content links
    //
    setTimeout("addContentLink()", 750);
}

/**
 * Once the content is loaded add the content links to the page
 */
function addContentLink()
{
    if (config.user.group === 'visitor') {
        return;
    }

    var guid;
    if (currentMenuTopic !== null) {
        guid = currentMenuTopic;
    } else
    if (currentMenuItem  !== null) {
        guid = currentMenuItem;
    } else
    {
        //
        // Nothing loaded
        //
        return;
    }

    var item = config.lookupTable.get(guid);
    if (item === null || item.content === undefined) {
        return;
    }

    var html = '';
    for (var n = 0; n < item.content.length; n++) {
        var filename = item.content[n];
        var comp     = filename.split('.');
        var ext      = comp.pop();

        switch (ext) {
        case 'xls':
            html += "<br clear='left'>\n"
                  + "<span style='margin-top:16px;float:left;'>"
                  + "<img src='/img/xls.gif' alt='" + filename + "' width='16' height='16' border='0'>\n"
                  + "<a href='" + filename + "'>"
                  + filename
                  + "</a>\n"
                  + "</span>"
                  ;
            break;
        case 'txt':
        case 'html':
            html += "<br clear='left'>\n"
                  + "<span style='margin-top:16px;float:left;'>"
                  + "<img src='/img/html.gif' alt='" + filename + "' width='16' height='16' border='0'>\n"
                  + "<a onclick=\"emitFormContentHTML('" + item.guid + "','" + filename + "');return false;\">"
                  + filename
                  + "</a>\n"
                  + "</span>"
                  ;
            break;
        default:
            html += "<br clear='left'>\n"
                  + "<span style='margin-top:16px;float:left;'>"
                  + "<img src='/img/close.gif' alt='" + filename + "' width='16' height='16' border='0'>\n"
                  + "Unrecognized filename extension in '" + filename + "'"
                  + "</span>"
                  ;
            break;
        }
    }
    Element.insert( 'content', { bottom: html } );
    // debug(html);
}


