function MessageBundle(defaultLanguage) {
	this.translations = {};
	this.defaultLanguage = defaultLanguage || 'en';
	this.language = null;
	
	this.selectLanguage = function(language) {
		this.language = language;
	};
	
	this.register = function(language, messages) {
		if (!this.translations[language]) {
			this.translations[language] = messages;
		}
		else {
			$.extend(this.translations[language], messages);
			
		}
	};
	
	this.get = function(code, params, defaultMessage) {
		var translationSet = this.findTranslations();
		var message = translationSet[code] || defaultMessage;
		
		if (!message) {
			return "PLEASE TRANSLATE ME";
		}
		
		return this.formatSingle(message, params);
	};

	this.findTranslations = function() {
		if (this.language) {
			return this.translations[this.language];
		}
		
		return this.translations[this.defaultLanguage];
	};

	this.format = function(formatString, messages) {
		var values = [];
		
		var self = this;
		$.each(messages, function(i, message) {
			values.push(self.get(message));
		});
		
		return this.formatSingle(formatString, values);
	};

	this.formatSingle = function(message, params) {
		if (!params || params.length === 0) {
			return message;
		}
		
		var regex = /\{([0-9]+)[^}]*\}/g;
		
		return message.replace(regex, function(str, match) {
			var value = params[Number(match)];
			
			if (!value) {
				return "{" + match + "}";
			}
			
			return value;
		});
	};
}

var Messages = new MessageBundle(); 

