/**
 * gettext for jQuery
 *
 * $Id: jquery.gettext.js 2934 2011-06-07 12:57:34Z cleber $
 *
 */
(function($) {
	$.gt = $.gt || {};
	$.extend($.gt, {
		messages: {},
		lang: '',
		setLang: function(code) { $.gt.lang = typeof code == 'string' && code != ' ' ? code : 'C'; },
		pl_re: /^Plural-Forms:\s*nplurals\s*=\s*(\d+);\s*plural\s*=\s*([^a-zA-Z0-9\$]*([a-zA-Z0-9\$]+).+)$/m,
		plural: function(n) {return n != 1;},
		load: function() {

			$.gt.setLang($('html').attr('lang'));

			var lang = $.gt.lang;
			$.gt.messages[lang] = $.gt.messages[lang] || {};


			try {
				var messages = $.gt.messages;
			} catch(e) {
				return;
			}

			$.extend($.gt.messages[lang], messages);

			var pl = $.gt.pl_re.exec($.gt.messages[lang]['']);
			if(pl){
				var expr = pl[2];
				var np = pl[1];
				var v = pl[3];
				try {
					var fn = eval('(function(' + v + ') {return ' + expr + ';})');
				} catch(e) {
					return;
				}
				$.gt.plural = fn;
			}

		},
		gettext: function(msgstr) {
			var lang = $.gt.lang;
			if(lang == 'C' || typeof $.gt.messages[lang] == 'undefined') {
				return msgstr;
			}
			var trans = $.gt.messages[lang][msgstr];
			if(typeof trans == 'string') { // regular action
				return trans;
			} else if(typeof trans == 'object' && trans.constructor == Array) { // the translation contains plural(s), yet gettext was called
				return trans[0];
			}
			return msgstr;
		},
		ngettext: function() {
			var lang = $.gt.lang;
			var argv = Array.apply(null, arguments);
			var cnt = argv[argv.length - 1];
			var sg = argv[0];
			var pls = argv.slice(0, -1);

			var trans = pls;
			if((lang && lang != 'C') && typeof $.gt.messages[lang] != 'undefined') {
				trans = $.gt.messages[lang][sg];
			}

			if(typeof trans == 'string') { // called ngettext, but no plural forms available :-?
				return trans;
			} else if(typeof trans == 'object') {

				var pl = $.gt.plural(cnt);
				if(typeof pl == 'boolean' && pls.length == 2) {
					pl = pl ? 1 : 0;
				}
				if(typeof pl == 'number' && pl < trans.length) {
					return trans[pl].toString();
				}
			}
			return sg;
		}
	});

	$.gt.load();
})(jQuery);
