function getPosition(obj) { 
    var x = y = width = height = 0; 
    while(obj) { 
        x += obj.offsetLeft;
        y += obj.offsetTop; 
		width = obj.offsetWidth;
		height = obj.offsetHeight;
        obj = obj.offsetParent; 
    } 
    return {x:x, y:y, width:width, height:height}; 
}

var Translate = {
	menu : false,
	tTimer : false,
	opacity : 0,
	elem : null,
	translateBlock : null,
	arg2 : null,
	cancel : true,
	openTranslateMenu : function(elem,translateBlock,arg2,isCancel)
	{
		if(isCancel)
		{
			this.cancel = true;
			document.getElementById("cancelTranslate").style.display = "block";
		}
		else if(elem && !isCancel)
		{
			this.cancel = false;
			document.getElementById("cancelTranslate").style.display = "none";
		}
		var tB = document.getElementById(translateBlock);
		if(tB)
			this.translateBlock = tB;
		if(arg2)
			this.arg2 = arg2;
		if(elem)
			this.elem = elem;
		clearTimeout(this.tTimer);
		this.menu = document.getElementById("languageMenu");
		this.menu.style.top = getPosition(this.elem).y + "px";
		this.menu.style.left = (getPosition(this.elem).x - 20) + "px";
		this.menu.style.display = "block";
		this.tTimer = setTimeout("Translate.showTranslateMenu()",100);
	},
	
	showTranslateMenu : function()
	{
		if(this.opacity <= 1)
		{
			this.opacity += 0.2;
			this.menu.style.opacity = this.opacity;
			this.menu.style.filter = 'alpha(opacity=' + this.opacity*100 + ')';
			this.tTimer = setTimeout("Translate.showTranslateMenu()",100);
		}
		else
		{
			clearTimeout(this.tTimer);
		}		
	},
	
	cancelTranslate : function()
	{
		this.closeTranslateMenu();
		var id = this.translateBlock.id.split("_")[1];
		document.getElementById("translationBlock_" + id).style.display = "none";
		this.translateBlock.style.display = "block";
	},
	
	closeTranslateMenu : function()
	{
		clearTimeout(this.tTimer);
		this.tTimer = setTimeout("Translate.hiddenTranslateMenu()",100);
	},
	
	hiddenTranslateMenu : function()
	{
		if(this.opacity > 0)
		{
			this.opacity -= 0.2;
			this.menu.style.opacity = this.opacity;
			this.menu.style.filter = 'alpha(opacity=' + this.opacity*100 + ')';
			this.tTimer = setTimeout("Translate.hiddenTranslateMenu()",100);
		}
		else
		{
			this.menu.style.display = "none";
			document.getElementById("selectLanguage").style.display = "none";
		}
	},
	
	selectLanguage : function()
	{
		document.getElementById("selectLanguage").style.display = "block";
	},
	
	changeLanguage : function(select)
	{
		value = select.options[select.selectedIndex].value;
		select.options[0].selected = true;
		this.translate(this.translateBlock,value);
	},
	
	initTranslate : function()
	{
		google.load("language", "1");
		//var languages = {af : 'Afrikaans', sq : 'Albanian', ar : 'Arabic', be : 'Belarusian', bg : 'Bulgarian', ca : 'Catalan'};
		var languages = {af : 'Afrikaans', sq : 'Albanian', ar : 'Arabic', be : 'Belarusian', bg : 'Bulgarian', ca : 'Catalan', hr : 'Croatian', cs : 'Czech', da : 'Danish', nl : 'Dutch', en : 'English', et : 'Estonian', tl: 'Filipino', fi : 'Finnish', fr : 'French', gl : 'Galician', de : 'German', el : 'Greek', iw : 'Hebrew', hi : 'Hindi', hu : 'Hungarian', is : 'Icelandic', id : 'Indonesian', ga : 'Irish', it : 'Italian', ja : 'Japanese', ko : 'Korean', lv : 'Latvian', lt : 'Lithuanian', mk : 'Macedonian', ms : 'Malay', mt : 'Maltese', no : 'Norwegian', fa : 'Persian', pl : 'Polish', pt : 'Portuguese', ro : 'Romanian', ru : 'Russian', sr : 'Serbian', sk : 'Slovak', sl : 'Slovenian', es : 'Spanish', sw : 'Swahili', sv : 'Swedish', th : 'Thai', tr : 'Turkish', uk : 'Ukrainian', vi : 'Vietnamese', cy : 'Welsh', yi : 'Yiddish' }

		var select = document.getElementById("selectLanguage").childNodes[0];
		var html = "";
		for (var i in languages)
		{
			var newOpt = document.createElement('option');
			newOpt.innerHTML = languages[i];
			newOpt.value = i;
			select.appendChild(newOpt);
		}
	},
	
	goTranslate : function()
	{
		// var func = this.elem.onclick.toString();
		// func = func.match(/\(([^,\)]*),(.*)\)/gi);
		// func = func[0].split("(")[1].split(")")[0].split(",");
		// var param1 = func[0];
		// var param2 = func[1].split('"')[1];
		// this.translate(param1,param2);
		this.closeTranslateMenu();
		this.translate(this.translateBlock,this.arg2);
	},
	
	translate : function(parentBlock,lang)
	{
		if(lang == "")
			lang = "en";
		var text = parentBlock.innerHTML;
		var cid = parentBlock.id.split("_")[1];
		google.language.detect(text, function(result) {
			if (!result.error && result.language) {
				google.language.translate(text, result.language, lang,
					function(result) {
						var translated = document.getElementById("translationBlock_" + cid);
						if(Translate.cancel)
						{
							Translate.translateBlock.style.display = "none";
						}
						if (result.translation) {
						  translated.innerHTML = "<p><i>"+result.translation+"</i></p>";
						}
						else
						{
							translated.innerHTML = "<p><i>Translation error...</i></p>";
						}
					});
			}
		});
	}
}