/**
 * Copyright 2015 Tim Down.
 *
 * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var log4javascript_stub = (function () {
    var log4javascript;

    function ff() {
        return function () {
        };
    }

    function copy(obj, props) {
        for (var i in props) {
            obj[i] = props[i];
        }
    }

    var f = ff();

    // Loggers
    var Logger = ff();
    copy(Logger.prototype, {
        addChild: f,
        getEffectiveAppenders: f,
        invalidateAppenderCache: f,
        getAdditivity: f,
        setAdditivity: f,
        addAppender: f,
        removeAppender: f,
        removeAllAppenders: f,
        log: f,
        setLevel: f,
        getLevel: f,
        getEffectiveLevel: f,
        trace: f,
        debug: f,
        info: f,
        warn: f,
        error: f,
        fatal: f,
        isEnabledFor: f,
        isTraceEnabled: f,
        isDebugEnabled: f,
        isInfoEnabled: f,
        isWarnEnabled: f,
        isErrorEnabled: f,
        isFatalEnabled: f,
        callAppenders: f,
        group: f,
        groupEnd: f,
        time: f,
        timeEnd: f,
        assert: f,
        parent: new Logger()
    });

    var getLogger = function () {
        return new Logger();
    };

    function EventSupport() {
    }

    copy(EventSupport.prototype, {
        setEventTypes: f,
        addEventListener: f,
        removeEventListener: f,
        dispatchEvent: f,
        eventTypes: [],
        eventListeners: {}
    });

    function Log4JavaScript() {
    }

    Log4JavaScript.prototype = new EventSupport();
    log4javascript = new Log4JavaScript();

    log4javascript = {
        isStub: true,
        version: "1.4.13",
        edition: "log4javascript_production",
        setDocumentReady: f,
        setEventTypes: f,
        addEventListener: f,
        removeEventListener: f,
        dispatchEvent: f,
        eventTypes: [],
        eventListeners: {},
        logLog: {
            setQuietMode: f,
            setAlertAllErrors: f,
            debug: f,
            displayDebug: f,
            warn: f,
            error: f
        },
        handleError: f,
        setEnabled: f,
        isEnabled: f,
        setTimeStampsInMilliseconds: f,
        isTimeStampsInMilliseconds: f,
        evalInScope: f,
        setShowStackTraces: f,
        getLogger: getLogger,
        getDefaultLogger: getLogger,
        getNullLogger: getLogger,
        getRootLogger: getLogger,
        resetConfiguration: f,
        Level: ff(),
        LoggingEvent: ff(),
        Layout: ff(),
        Appender: ff()
    };

    // LoggingEvents
    log4javascript.LoggingEvent.prototype = {
        getThrowableStrRep: f,
        getCombinedMessages: f
    };

    // Levels
    log4javascript.Level.prototype = {
        toString: f,
        equals: f,
        isGreaterOrEqual: f
    };
    var level = new log4javascript.Level();
    copy(log4javascript.Level, {
        ALL: level,
        TRACE: level,
        DEBUG: level,
        INFO: level,
        WARN: level,
        ERROR: level,
        FATAL: level,
        OFF: level
    });

    // Layouts
    log4javascript.Layout.prototype = {
        defaults: {},
        format: f,
        ignoresThrowable: f,
        getContentType: f,
        allowBatching: f,
        getDataValues: f,
        setKeys: f,
        setCustomField: f,
        hasCustomFields: f,
        setTimeStampsInMilliseconds: f,
        isTimeStampsInMilliseconds: f,
        getTimeStampValue: f,
        toString: f
    };

    // PatternLayout related
    log4javascript.SimpleDateFormat = ff();
    log4javascript.SimpleDateFormat.prototype = {
        setMinimalDaysInFirstWeek: f,
        getMinimalDaysInFirstWeek: f,
        format: f
    };

    // PatternLayout
    log4javascript.PatternLayout = ff();
    log4javascript.PatternLayout.prototype = new log4javascript.Layout();

    // Appenders
    log4javascript.Appender = ff();
    log4javascript.Appender.prototype = new EventSupport();

    copy(log4javascript.Appender.prototype, {
        layout: new log4javascript.PatternLayout(),
        threshold: log4javascript.Level.ALL,
        loggers: [],
        doAppend: f,
        append: f,
        setLayout: f,
        getLayout: f,
        setThreshold: f,
        getThreshold: f,
        setAddedToLogger: f,
        setRemovedFromLogger: f,
        group: f,
        groupEnd: f,
        toString: f
    });
    // SimpleLayout
    log4javascript.SimpleLayout = ff();
    log4javascript.SimpleLayout.prototype = new log4javascript.Layout();
    // NullLayout
    log4javascript.NullLayout = ff();
    log4javascript.NullLayout.prototype = new log4javascript.Layout();
    // ZmlLayout
    log4javascript.XmlLayout = ff();
    log4javascript.XmlLayout.prototype = new log4javascript.Layout();
    copy(log4javascript.XmlLayout.prototype, {
        escapeCdata: f,
        isCombinedMessages: f
    });
    // JsonLayout
    log4javascript.JsonLayout = ff();
    log4javascript.JsonLayout.prototype = new log4javascript.Layout();
    copy(log4javascript.JsonLayout.prototype, {
        isReadable: f,
        isCombinedMessages: f
    });
    // HttpPostDataLayout
    log4javascript.HttpPostDataLayout = ff();
    log4javascript.HttpPostDataLayout.prototype = new log4javascript.Layout();
    // PatternLayout
    log4javascript.PatternLayout = ff();
    log4javascript.PatternLayout.prototype = new log4javascript.Layout();
    // AjaxAppender
    log4javascript.AjaxAppender = ff();
    log4javascript.AjaxAppender.prototype = new log4javascript.Appender();
    copy(log4javascript.AjaxAppender.prototype, {
        getSessionId: f,
        setSessionId: f,
        isTimed: f,
        setTimed: f,
        getTimerInterval: f,
        setTimerInterval: f,
        isWaitForResponse: f,
        setWaitForResponse: f,
        getBatchSize: f,
        setBatchSize: f,
        isSendAllOnUnload: f,
        setSendAllOnUnload: f,
        setRequestSuccessCallback: f,
        setFailCallback: f,
        getPostVarName: f,
        setPostVarName: f,
        sendAll: f,
        sendAllRemaining: f,
        defaults: {
            requestSuccessCallback: null,
            failCallback: null
        }
    });
    return log4javascript;
})();
if (typeof window.log4javascript == "undefined") {
    var log4javascript = log4javascript_stub;
}
