﻿
NamingService = function() {
    return {
        createId: function(baseId, componentType) {
            return baseId + "_" + componentType;
        },
        reverseId: function(id) {
            return id.substr(0, id.lastIndexOf("_"));
        },
        reverseComponentType: function(id) {
            return id.substring(id.lastIndexOf("_") + 1, id.length);
        }
    };
} ();

Ext.namespace('FinnKodeWeb');

FinnKodeWeb.LogMessage = Ext.data.Record.create([
    { name: 'ShowAlertInfo', defaultValue: false },
    { name: 'ShowDisplayInfo', defaultValue: false },
    { name: 'ShowMaskInfo', defaultValue: false },
    { name: 'MaskElement', defaultValue: null },
    { name: 'TrackEvent', defaultValue: false },
    { name: 'Date', defaultValue: function() { return (new Date()).valueOf() } },
    { name: 'Time', defaultValue: function() { return (new Date()).toLocaleTimeString() } },
    { name: 'Milli', defaultValue: function() { return (new Date()).getMilliseconds() } },
    { name: 'Category', defaultValue: '' },
    { name: 'Action', defaultValue: '' },
    { name: 'Label', defaultValue: '' },
    { name: 'Value', defaultValue: undefined }
]);

// Global object instanciated immediately
    FinnKodeWeb.MessageService = function() {
        var _logStore = new Ext.data.JsonStore();
        var _maskedElement = null;
        var _messageBox = null;
        var _pageTracker = null;
        Ext.apply(this, {
            store: _logStore,
            addMsg: function(logMsg) {

                if (!logMsg) {
                    return;
                }
                if (!logMsg.data) {
                    logMsg = new FinnKodeWeb.LogMessage(logMsg);
                }
                logMsg.fields.eachKey(function(key, item) {
                    if (!this.get(key)) {
                        var value = Ext.isFunction(item.defaultValue) ?
                            item.defaultValue.call() :
                            item.defaultValue;
                        this.set(key, value);
                    }
                }, logMsg);
                logMsg.commit();

                _logStore.insert(0, logMsg);
                var data = logMsg.data;
                var message = logMsg.data.Label || '';
                if (data.TrackEvent) {
                    if (typeof (_gat) == 'object') {
                        if (_pageTracker == null) {
                            _pageTracker = _gat._getTracker("UA-4272955-1");
                            _pageTracker._initData();
                        }
                        var result = data.Value ?
                            _pageTracker._trackEvent(data.Category, data.Action, data.Label, data.Value) :
                            _pageTracker._trackEvent(data.Category, data.Action, data.Label);
                    }
                }
                var maskedElement = logMsg.data.MaskElement || Ext.getBody();
                this.clearMask(maskedElement);

                if (data.ShowAlertInfo) {
                    Ext.Msg.show({
                        title: 'Feil oppstått',
                        msg: message,
                        buttons: Ext.Msg.OK,
                        icon: Ext.Msg.ERROR
                    });
                    return;
                }
                if (data.ShowDisplayInfo) {
                    Ext.Msg.show({
                        title: 'Info',
                        msg: message,
                        buttons: Ext.Msg.OK,
                        icon: Ext.Msg.INFO
                    });
                    return;
                }
                if (data.ShowMaskInfo) {
                    maskedElement.mask(message, 'loading-indicator');
                }
            },
            clearMask: function(maskedElement) {
                if (!maskedElement) {
                    maskedElement = Ext.getBody();
                }
                if (maskedElement && maskedElement.isMasked()) {
                    maskedElement.unmask();
                }
            }
        });
        return this;
    } ();

// An instance
MsgSvc = FinnKodeWeb.MessageService;
// A constructor
MsgSvcOpt = FinnKodeWeb.MessageServiceOptions;
