function FormTranslate() {
	var this_formTranslate = this;

	var srctext = document.getElementById('srctext');
	var dsttext = document.getElementById('dsttext');
	var srclang = document.getElementById('srclang');
	var dstlang = document.getElementById('dstlang');

	var langs = {
		'en': 'english',
		'fr': 'français',
		'ro': 'română',
		'ru': 'русский',
		'uk': 'українська',
		'de': 'deutsch',
		'it': 'italiano',
		'es': 'español',
		'pt': 'português',
		'bg': 'български',
		'pl': 'polski',
		'ar': 'العربية',
		'zh-CN': '中文 (简体)',
		'zh-TW': '中文 (繁體)',
		'hr': 'hrvatski',
		'cs': 'česky',
		'da': 'dansk',
		'nl': 'nederlands',
		'fi': 'suomi',
		'el': 'eλληνικά',
		'ja': '日本語',
		'sv': 'svenska'
	};
	
	
	this.initialize = function() {
		srctext.disabled = false;
		dsttext.disabled = false;
		srctext.value = 'Welcome!';
		this.translate();
		srctext.focus();
	}

	this.translate = function() {
		var dot = '.';
		var text = srctext.value;
		if (text.indexOf('。') > -1)
			dot = '。';
		var part = text.split(dot);
		for (var i = 0, l = part.length; i < l; i++) {
			(function(i) {
				google.language.translate(part[i], srclang.value, dstlang.value, function(result) {
					part[i] = (typeof result.translation == 'string') ? result.translation.replace('&#39;', "'") : part[i];
					dsttext.value = part.join(dot+' ');
					this_formTranslate.checkRows();
				});
			})(i);
		}
	};

	this.detect = function() {
		/*var text = srctext.value;
		text = text.substring(0, 128);
		google.language.detect(text, function(result) {
			if (!result.error)
				for (var i = 0, l = srclang.options.length; i < l; i++)
					if (result.language == srclang.options[i].value)
						srclang.options[i].selected = true;
			this_formTranslate.srclangchange();
		});*/
		this_formTranslate.translate();
	};

	this.changesrctodst = function() {
		var dst = srclang.value;
		srclang.value = dstlang.value;
		dstlang.value = dst;
		return false;
	};

	this.srclangchange = function() {
		var lis = document.getElementById("srcbuttons").lastChild.childNodes;
		for (var i = 0, l = lis.length; i < l; i++) {
			lis[i].firstChild.className = srclang.value == lis[i].firstChild.lang ? "selected" : "";
		}
		this.translate();
	}

	this.dstlangchange = function() {
		var lis = document.getElementById("dstbuttons").lastChild.childNodes;
		for (var i = 0, l = lis.length; i < l; i++) {
			lis[i].firstChild.className = dstlang.value == lis[i].firstChild.lang ? "selected" : "";
		}
		this.translate();
	}

	function setOptions(ob) {
		for (var i in langs) {
			var opt = document.createElement('OPTION');
			opt.value = i;
			opt.lang = i;
			opt.text = langs[i];
			ob.options.add(opt);
		}
	};

	this.checkRows = function() {
		if (navigator.appName.indexOf("Microsoft Internet Explorer") == 0) {
			srctext.style.overflow = 'visible';
			dsttext.style.overflow = 'visible';
			srctext.style.height = '200px';
			dsttext.style.height = '200px';
		} else {
			while (srctext.rows > 10 && srctext.scrollHeight < srctext.offsetHeight) {
				srctext.rows--;
				dsttext.rows = srctext.rows;
			}
			while (srctext.scrollHeight > srctext.offsetHeight || dsttext.scrollHeight > dsttext.offsetHeight) {
				srctext.rows++;
				dsttext.rows = srctext.rows;
			}
		}
	};

	this.setButtons = function(arr, wh, n) {
		var ul = document.createElement('UL');
		for (var i = 0, l = arr.length; i < l; i++) {
			var li = document.createElement('LI');
			var button = document.createElement('INPUT');
			button.type = 'button';
			button.value = langs[arr[i]];
			button.lang = arr[i];
			if (wh.value == arr[i])
				button.className = "selected";
			button.onclick = function() {
				wh.value = this.lang;
				for (var i = 0; i < l; i++) {
					ul.childNodes[i].firstChild.className = "";
				}
				this.className = "selected";
				this_formTranslate.translate();
			}
			li.appendChild(button);
			ul.appendChild(li);
		}
		document.getElementById(n).appendChild(ul);
	}

	this.setSrcButtons = function(arr) {
		this.setButtons(arr, srclang, 'srcbuttons');
	}

	this.setDstButtons = function(arr) {
		this.setButtons(arr, dstlang, 'dstbuttons');
	}

	setOptions(srclang);
	setOptions(dstlang);
	srclang.selectedIndex = 0;
	dstlang.selectedIndex = 2;
}

google.load('language', '1');

var formTranslate = new FormTranslate();
google.setOnLoadCallback(function() {
	formTranslate.initialize();
});
