/**
 * ONEsite JavaScript Registry/Translation Utility.
 */
var ONESITE;
if (typeof ONESITE == "undefined" || !ONESITE) {
	ONESITE = {};
}

ONESITE.reg = (function () {
	var _private_dict = {};
	
	var _public_dict  = {};
	
	var _translations = {};
	
	var _stored = false;
	
	function _store() {
		if (_stored) {
			return;
		}
		
		if (typeof ONESITE_reg != 'object' || !ONESITE_reg) {
			_stored = true;
			return;
		}
		
		var global_reg = ONESITE_reg;
		
		if (global_reg.dict && typeof global_reg.dict == 'object') {
			for (var j in global_reg.dict) {
				if (global_reg.dict.hasOwnProperty(j)) {
					_private_dict[j] = global_reg.dict[j];
				}
			}
		}
		
		if (global_reg.trans && typeof global_reg.trans == 'object') {
			for (var k in global_reg.trans) {
				if (global_reg.trans.hasOwnProperty(k)) {
					_translations[k] = global_reg.trans[k];
				}
			}
		}
		
		_stored = true;
	}
	
	if (typeof ONESITE.reg != 'undefined' && ONESITE.reg) {
		var prev = ONESITE.reg.getAll();
		
		_private_dict = prev.private_dict;
		_public_dict  = prev.public_dict;
		_translations = prev.translations;
	}
	
	if (typeof ONESITE_reg != "undefined" && ONESITE_reg) {
		_store();
	}
	
	return {
		get : function (name) {
			if (typeof name != 'string') {
				return null;
			}
			
			if (!_stored) {
				_store();
			}
			
			if (typeof _private_dict[name] != "undefined") {
				return _private_dict[name];
			}
			
			if (typeof _public_dict[name] != "undefined") {
				return _public_dict[name];
			}
			
			return null;
		},
		
		set : function (name, value) {
			if (typeof name != 'string') {
				return false;
			}
			
			_public_dict[name] = value;
			
			return true;
		},
		
		translate : function (string, args)
		{
			if (typeof string != 'string') {
				return string;
			}
			
			if (!_stored) {
				_store();
			}
			
			if (typeof _translations[string] != "undefined") {
				string = _translations[string];
			}
			
			if (args && typeof args == 'string') {
				args = [args];
			}
			
			if (typeof args != 'object' || !args || args.length < 1) {
				return string;
			}
			
			// Encode %%s so they wont be parsed.
			string = string.replace('%%', '[[[[%]]]]');
			
			for (var i = 0; i < args.length; i++) {
				if (args[i] && typeof args[i] == "string") {
					// Replace the %s with the given argument string.
					string = string.replace('%s', args[i]);
				} else {
					// Invalid string sent, so just replace the %s with a space.
					string = string.replace('%s', ' ');
				}
			}
			
			// Turn the "encoded" %% into just a single %.
			string = string.replace('[[[[%]]]]', '%');
			
			return string;
		},
		
		getAll: function () {
			if (!_stored) {
				_store();
			}
			
			return {
				'public_dict'  : _public_dict,
				'private_dict' : _private_dict,
				'translations' : _translations
			};
		}
	};
})();

ONESITE.util     = ONESITE.util || {};
ONESITE.util.reg = ONESITE.reg;
ONESITE.tt       = ONESITE.reg.translate;
