
			var i18n = {};			
			function getLang (n, dv) {					
					return i18n[n] || (i18nManage.is(dv) ? dv : '{#' + n + '}');
			}
								
			var i18nManage = {
				is : function(o, t) {
					if (!t)
						return o !== undefined;

					if (t == 'array' && (o.hasOwnProperty && o instanceof Array))
						return true;

					return typeof(o) == t;
				},	
				each : function(o, cb, s) {
					var n, l;

					if (!o)
						return 0;

					s = s || o;

					if (o.length !== undefined) {
						// Indexed arrays, needed for Safari
						for (n=0, l = o.length; n < l; n++) {
							if (cb.call(s, o[n], n, o) === false)
								return 0;
						}
					} else {
						// Hashtables
						for (n in o) {
							if (o.hasOwnProperty(n)) {
								if (cb.call(s, o[n], n, o) === false)
									return 0;
							}
						}
					}

					return 1;
				},			
				addI18n : function(p, o) {
					var lo;

					if (!i18nManage.is(p, 'string')) {
						i18nManage.each(p, function(o, lc) {
							i18nManage.each(o, function(o, g) {
								i18nManage.each(o, function(o, k) {
									if (g === 'common')
										//i18n[lc + '.' + k] = o;
										i18n[k] = o;
									else
										//i18n[lc + '.' + g + '.' + k] = o;
										i18n[g + '.' + k] = o;
								});
							});
						});
					} else {
						i18nManage.each(o, function(o, k) {
							i18n[p + '.' + k] = o;
						});
					}
				}				

			};
