////////////////////////////////////////////////////////////////////////////////
// Constants
////////////////////////////////////////////////////////////////////////////////

var __CFWARNING_DEBUG = false;

////////////////////////////////////////////////////////////////////////////////
// Static variables
////////////////////////////////////////////////////////////////////////////////

var __cfWarningHandlerSet = new CFEventHandlerSet();

////////////////////////////////////////////////////////////////////////////////
// Event handlers
////////////////////////////////////////////////////////////////////////////////

function __cfWarningHandleDocumentLoadedEvent()
{
    cfWarningTrigger = __cfWarningTriggerLoaded;
}

////////////////////////////////////////////////////////////////////////////////
// Private functions
////////////////////////////////////////////////////////////////////////////////

function __cfWarningTriggerLoaded(message, status)
{
    if (typeof(status) == "undefined") {
        status = cfDocumentGetLoadStatusMessage();
    }
    __cfWarningHandlerSet.execute(message, status);
}

////////////////////////////////////////////////////////////////////////////////
// Public API
////////////////////////////////////////////////////////////////////////////////

function cfWarningAddOnWarningCallback()
{
    return __cfWarningHandlerSet.add.apply(__cfWarningHandlerSet, arguments);
}

function cfWarningTrigger(message)
{
    if (__CFWARNING_DEBUG) {
        window.alert("Warning: " + message);
    } else {
        cfDocumentAddOnLoadedCallback(__cfWarningTriggerLoaded, message,
                                      cfDocumentGetLoadStatusMessage());
    }
}

////////////////////////////////////////////////////////////////////////////////
// Initialization
////////////////////////////////////////////////////////////////////////////////

cfDocumentAddOnLoadedCallback(__cfWarningHandleDocumentLoadedEvent);
