﻿
function CultureManager()
{
    var This = this;

    // Data members
    This.DataSets = {};
    This.Current = null;

    // Methods
    This.Add = function(iData)
    { This.DataSets[iData.LanguageCode] = iData; }

    This.Get = function(iLanguage)
    { return new Culture(This.DataSets[iLanguage]); }

    This.Set = function(iLanguage)
    { This.Current = This.Get(iLanguage); }

    This.AddStrings = function(iStringMap)
    {
        for (var itemId in iStringMap)
        {
            var item = iStringMap[itemId];

            for (var lang in item)
            {
                var dataSet = This.DataSets[lang];
                if (dataSet)
                {
                    var string = item[lang];
                    dataSet.Strings[itemId] = string;
                }
            }
        }
    }
}

function Culture(iCultureData)
{
    var This = this;

    // Data members
    This.Language = null;
    This.Date = null;
    This.Time = null;

    // Methods
    This.Get = function(iId)
    { return This.Language.Strings[iId]; }

    // Initialize
    {
        This.Language = {
            'Code': iCultureData.LanguageCode,
            'Strings': iCultureData.Strings
        };
        This.Date = {
            'Formats': {
                'Short': iCultureData.DateShortFormat,
                'Long': iCultureData.DateLongFormat,
                'Compact': iCultureData.Compact
            },
            'Months': {
                'Full': iCultureData.Months,
                'Short': iCultureData.MonthsShort
            },
            'Weekdays': {
                'Full': iCultureData.Weekdays,
                'Compact': iCultureData.WeekdaysCompact,
                'Short': iCultureData.WeekdaysShort                
            }
        };
        This.Time = {
            'Format': iCultureData.TimeFormat
        };
    }
};

var Cultures = new CultureManager();

Cultures.Add(
    {
        'LanguageCode': 'en',
        'DateCompactFormat': 'm/d/yyyy',
        'DateLongFormat': 'dddd, mmmm dd',
        'DateShortFormat': 'ddd, mmm dd',
        'Months': ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
        'MonthsShort': ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
        'Weekdays': ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
        'WeekdaysCompact': ['S', 'M', 'T', 'W', 'T', 'F', 'S'],
        'WeekdaysShort': ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
        'TimeFormat': 'hh:iia/p',
        'Strings': {}
    }
);

Cultures.Add(
    {
        'LanguageCode': 'fr',
        'DateCompactFormat': 'yyyy-mm-dd',
        'DateLongFormat': 'dddd dd mmmm',
        'DateShortFormat': 'ddd. dd mmm.',
        'Months': ['janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'],
        'MonthsShort': ['jan.', 'fév.', 'mars', 'avr.', 'mai', 'juin', 'juil.', 'août', 'sept.', 'oct.', 'nov.', 'déc.'],
        'Weekdays': ['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi'],
        'WeekdaysCompact': ['D', 'L', 'M', 'M', 'J', 'V', 'S'],
        'WeekdaysShort': ['dim.', 'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.'],
        'TimeFormat': 'hh:iia/p',
        'Strings': {}
    }
);

Cultures.Set('fr');
