/* File: translation.js
Author: Daniel
Use google translation on tweets.
status: used in TweetTableRow.js
*/

function languageToString(langCode) {
    	for (l in google.language.Languages) {
      		if (google.language.Languages[l] == langCode) {
        		return l.toLowerCase();
		}
      	}
	return "";
}

function translation_ajaxify(selector) {
	//slight delay to let more important things run
	setTimeout("translation_ajaxify2('" + selector + "');",250);
}

function translation_ajaxify2(selector) {
	if (window.google === undefined) { console.log("no translation service"); return; }
	
	console.log("Try translation for elements " + selector);
	
	$(selector).not('.trans-ajaxed').each(function () {	
		$(this).addClass('trans-ajaxed');
		
		var e = $(this);						
		var original = e.text();	
		
		// already done?
		if (original.indexOf("class='trans'") != -1) return;
		
		google.language.translate(original, "", "en", function(result) {
  			if (result.error) {
				console.log("Translation failed: " + result.error);
				return;
			}
			
			if (result.detectedSourceLanguage == "en") return;
			
			// Google sometimes returns spurious translations: compare less whitespace which gets introduced
			//strip punctuation too
			var trans = result.translation;
			
			trans = trans.toLowerCase().replace(/\s/g, "");
			trans.replace(/&\w+;/g, ""); // html entities
			trans = trans.replace(/["#$%&'()*+,\-.:;<=>!?@^_`{|}~\\\/\[\]]+/g, "");			
			
			original = original.toLowerCase().replace(/\s/g, "");
			original = original.replace(/["#$%&'()*+,\-.:;<=>!?@^_`{|}~\\\/\[\]]+/g,"");
			
			if (trans == original) {
				console.log("Translation is spurious: " + trans);
				return;
			}
			
			console.log("Translation: " + trans + " != " + original);			
			
			var lang = languageToString(result.detectedSourceLanguage);
			var inf = "translation";
			
			if (lang) inf += " from "+lang;
			
			inf += ": ";
			
			e.after("<p class='trans trans-ajaxed'>(" + inf + result.translation + ")</p>");
		});
		
	});
	
	google.language.getBranding('gbranding');
}

