﻿
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: true },
    { 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: 'TrackLabel', 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.TrackLabel || data.Label, data.Value) :
                        _pageTracker._trackEvent(data.Category, data.Action, data.TrackLabel || 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;
