function initTranslators() {	
	var translateElems = jQuery(translatables.join(", "));

	for(var i=0; i<translateElems.length; i++) {
		jQuery(translateElems[i]).addClass("translatable");
	}
	
	jQuery(keys).each(function(key,value){keys[key]+=".dynamic-language"});
	
    var portlets = jQuery(keys.join(", "));
	var languages = jQuery.translate.getLanguages(true, supported_lang);
    
    for(var i=0; i<portlets.length; i++) {
    	var id = portlets[i].id;

		var selectElem			= document.createElement("ul");
		selectElem.id 			= id+"translate";
		selectElem.className 	= "lfr-component lfr-actions auto portlet-translate";
		
		var buttonElem 			= document.createElement("li");
		buttonElem.className	= "lfr-translate-trigger";

		var imgElem = document.createElement("img");
		imgElem.src = translateIcon;

		var strongElem = document.createElement("strong");
		var spanElem = document.createElement("span");
		//spanElem.innerHTML = selectLanguage;

		var optionsElem = document.createElement("ul");
		
		for(key in languages) {
			if(languages[key] != "") {
				var optionElem				= document.createElement("li");
				optionElem.portletId 		= id;
				optionElem.translateLang 	= languages[key];
				optionElem.onclick 			= function(){translate(this.portletId, this)};
				
				var aElem			= document.createElement("a");
				aElem.href 			= "javascript: ;";
				aElem.innerHTML 	= jQuery.translate.toLanguage(key, "capitalize");
									
				optionElem.appendChild(aElem);
				optionsElem.appendChild(optionElem);
			}
		}

		strongElem.appendChild(spanElem);

		buttonElem.appendChild(imgElem);
		buttonElem.appendChild(strongElem);
		buttonElem.appendChild(optionsElem);
		
		selectElem.appendChild(buttonElem);
		
    	var iconElem = jQuery(portlets[i]).find(".portlet-icons");
    	if(iconElem.length > 0) {
    		iconElem.get(0).insertBefore(selectElem, iconElem.get(0).firstChild);
    	}

		var msgElem = document.createElement("div");
		msgElem.className 			= "portlet-msg-info";
		msgElem.id        			= id+"translatedMessage";
		msgElem.style.display 		= "none";
		
		var msgSpanElem = document.createElement("span");
		msgSpanElem.innerHTML = translateMessage;

		var msgLink = document.createElement("a");
		msgLink.href 				= "javascript: ;";
		msgLink.innerHTML 			= translateLink;
		msgLink.portletId 			= id;
		msgLink.style.marginLeft 	= "0.5em";
		msgLink.onclick 			= function(){resetTranslator(this.portletId, this)};

		msgElem.appendChild(msgSpanElem);
		msgElem.appendChild(msgLink);

    	var contentElem = jQuery(portlets[i]).find(".portlet-content");
    	if(contentElem.length > 0) {
    		contentElem.get(0).insertBefore(msgElem, contentElem.get(0).lastChild);
    	}
    }
};

function translate(portletId, elem) {
	var lang = elem.translateLang;
	
	jQuery.each(jQuery("#" + portletId + " .portlet-content-container .translatable"), function(){
			jQuery(this).translate({to:lang, data:true, fromOriginal:true, walk:false, 
					each:function(index, elem, a, b, from) {
						if(from) {
							jQuery.data(elem, 'translation.from', from);
						}
				}})});
	jQuery("#" + portletId + "translate").get(0).style.display = "none";
	jQuery("#" + portletId + "translatedMessage").get(0).style.display = "block";
};

function resetTranslator(portletId, elem) {
	var lang = elem.translateLang;
	
	jQuery.each(jQuery("#" + portletId + " .portlet-content-container .translatable"), function(){
		var from = jQuery(this).data("translation.from");
		if(from) {
			var original = jQuery(this).data("translation."+from+".html");
			jQuery(this).html(original);
		}
	});
	
	jQuery("#" + portletId + "translate").get(0).style.display = "inline";
	jQuery("#" + portletId + "translatedMessage").get(0).style.display = "none";
};