function gettext(str) {
	if (typeof(i18n) != 'undefined' && i18n[str]) return i18n[str];
	return str;
}
function ngettext(s, p, n) {
	if (n > 1) return gettext(p);
	return gettext(s);
}
function _(str) {
	return gettext(str)
}
function sprintf(str) {
	var bits = str.split('%');
	var out = bits[0];
	var re = /^([ds])(.*)$/;
	for (var i=1; i<bits.length; i++) {
		p = re.exec(bits[i]);
		if (!p || arguments[i]==null) continue;
		if (p[1] == 'd') out += parseInt(arguments[i], 10);
		else if (p[1] == 's') out += arguments[i];
		out += p[2];
	}
	return out;
}

(function(){
	var events;
	var check = function(e){
		var target = $(e.target);
		var parents = target.getParents();
		events.each(function(item){
			var element = item.element;
			if (element != target && !parents.contains(element)) item.fn.call(element, e);
		});
	}
	Element.Events.outerClick = {
		onAdd: function(fn){
			if(!events) {
				document.addEvent('click', check);
				events = [];
			}
			events.push({element: this, fn: fn});
		},
		onRemove: function(fn){
			events = events.filter(function(item){
				return item.element != this || item.fn != fn;
			}, this);
			if (!events.length) {
				document.removeEvent('click', check);
				events = null;
			}
		}
	}
});

Swiff.ExpressInstall = new Class({
	 Extends: Swiff,
		 options: {
		   expressInstall: '/swf/expressInstall.swf',
		   version: 9,
		   build: 0
	   },
		 initialize: function(path, options){
		   if(Browser.Plugins.Flash.version >= options.version && Browser.Plugins.Flash.build >= options.build) this.parent(path, options);
		   else this.parent(this.options.expressInstall, $extend({vars: {
			   MMPlayerType: (Browser.Engine.trident) ? 'ActiveX' : 'PlugIn',
			   MMredirectURL: window.location,
			   MMdoctitle: document.title.slice(0, 47) + ' - Flash Player Installation'
		   }}, options));
	   }
});
