function Translate($arg){this.init($arg);}
Translate.prototype =
{
	queue:[],
	init:function($arg)
	{
		$arg=$arg||{};
		if($("#translateOutStatus").attr("checked")&&$arg.text&&$arg.callback)
		{
			this.text=$arg.text;
			this.extCallback = $arg.callback;
			this.id=this.queue.length;
			this.queue.push(this);
			var $src = document.getElementById('src').value;
			var $dst = document.getElementById('dst').value;
			eval("var $hook=function(result){Translate.prototype.queue["+this.id+"].callback(result)}");
			$arg.reverse&&
			   (google.language.translate($arg.text, $dst, $src, $hook)||true)||
			   google.language.translate($arg.text, $src, $dst, $hook);
		}
		else
			$arg.callback({orig:$arg.text});
	},
	callback:function(result)
	{
		this.extCallback&&
			this.extCallback({
				orig:this.text,
				translated:result.translation?result.translation:''
			});
		delete(this.queue[this.id]);
	}
}

function translateLoadLang()
{
	var src = document.getElementById('src');
	var dst = document.getElementById('dst');
	var i=0;
	var enIdx = 0;
	var frIdx = 0;
	for (l in google.language.Languages)
	{
		var lng = l.toLowerCase();
		var lngCode = google.language.Languages[l];
		if (google.language.isTranslatable(lngCode))
		{
			src.options.add(new Option(lng, lngCode));
			dst.options.add(new Option(lng, lngCode));
			
			if (lngCode == "en") enIdx = i;
			if (lngCode == "fr") frIdx = i;
			
			i++;
		}
	}
	
	src.options[enIdx].selected = true;
	dst.options[frIdx].selected = true;
	
	google.language.getBranding('branding', { type : 'vertical' });
}