﻿Cv.Translator = Class.create({
	translatedBoxes : null,
	selectedId : null,
	key : null,
	language : null,
	highlited : false,
	translatedPercentage : null,
	
	initialize: function() {
		
	},
	
	getTranslatedItems: function() {
		this.translatedBoxes = $$(".translated");
		
		var allText = $("pageContent").textContent || $("pageContent").innerText;
		var allTextLength = allText.length;		
		var translatedTextLength = 0;
		
		for (var i =0; i < this.translatedBoxes.length; i++) {
			var translatedText =  this.translatedBoxes[i].textContent ||  this.translatedBoxes[i].innerText;
			translatedTextLength += translatedText.length;
		}
		this.translatedPercentage = parseInt((translatedTextLength / allTextLength) * 100);
	},
	
	_highliteItems: function() {
		if (this.highlited)
			return; 
			
		this.highlited = true;
		for (var i =0; i < this.translatedBoxes.length; i++) {
			var name = this.translatedBoxes[i].readAttribute("name");
			var id = this.translatedBoxes[i].id;
			var key = name.split("@")[0];
			var lang = name.split("@")[1];
			
			this.translatedBoxes[i].innerHTML = "<span style=\"margin-right:5px\">" +
													"<img id=\"img@" + id + "\" src=\"/media/imgs/googletranslated.png\" style=\"border:0px;cursor:pointer\" />" +
												"</span>" + 
												this.translatedBoxes[i].innerHTML;
			
			Event.observe("img@" + id, "click", this._showTranslateBox.bindAsEventListener(this));
		}	
	},
	
	showWarning: function(type) {
		if (type == "beta") {
			if (this.translatedBoxes.length > 0 && $("languageWarning")) {
				$("languageWarning").innerHTML = "<div style=\"text-align:center; padding:15px; background-color:#dcfecc\">" +
														"<span style=\"color:#ff0000; font-weight:bold\">Beta</span>: " + 
															Cv.Utils.Resource.getResource("CV_TranslationBeta", [ this.translatedPercentage ]) +
															" <img id=\"translatorTrigger\" src=\"/media/imgs/googletranslated.png\" style=\"cursor:pointer\" />" +
															"<div>" +
																"<a href=\"/en/" + window.location.pathname.substring(4)+ "\">" +
																	Cv.Utils.Resource.getResource("CV_SwitchEnglish") +
																"</a>" +
															"</div>" +
													"</div>";
				
				Effect.BlindDown("languageWarning", {duration : 0.4});									
													
				Event.observe("translatorTrigger", "click", this._translatorTriggerClicked.bindAsEventListener(this));
			}	
		}
		if (type == "not_available") {
			var currentLanguageName = Cv.Utils.Resource.getResource("LANG_" + CvCurrentLanguage);
			var currentApplicationName = Cv.Utils.Resource.getResource("APPLICATION_" + CvCurrentApplication);
			
			var s = "<div style=\"text-align:center; padding:15px; background-color:#dcfecc;\">";
			s += Cv.Utils.Resource.getResource("CV_NotSupported", [ currentLanguageName, currentApplicationName ]) + "<br />";
			
			for (var i = 0; i < CvApplicationLanguages.length; i++) {
				var path = "/" + CvApplicationLanguages[i] + "/" + window.location.pathname.substring(4) + location.search;
				
				s += "<a href=\"" + path + "\">" + Cv.Utils.Resource.getResource("LANG_" + CvApplicationLanguages[i]) + "</a>";
				
				if (i < CvApplicationLanguages.length - 1)
					s += " - ";
			}
			
			s += "</div>";
			
			$("languageWarning").innerHTML = s;
												
												
			Effect.BlindDown("languageWarning", {duration : 0.4});	
		}	
	},
	
	_translatorTriggerClicked : function() {
		this._highliteItems();
	},
	
	_showTranslateBox: function(e) {
		CvJavascriptLoader.load("/javascript/Cv.Widget.ModalBox.js");
		
		this.selectedId = Event.element(e).id;
		this.key = this.selectedId.split("@")[1]; //E.g "img@text_qrcode_intro_GTT@ja@1259194920";
		this.language = this.selectedId.split("@")[2];
		
		Event.stop(e);
		
		CvModalBox.show("<div id=\"translatorForm\" style=\" padding:20px\"></div>", {width:850, height:630, title : Cv.Utils.Resource.getResource("CV_ThankYouTranslation"), callback : this._showTranslationForm, scope:this});	
	},
	
	_showTranslationForm: function() {
		var s = "<div class=\"message messageInformation\">" +
					Cv.Utils.Resource.getResource("CV_HtmlNotTranslate") + 
				"</div>";
		
		s += "<div style=\"margin-top:20px\">" + Cv.Utils.Resource.getResource("CV_OriginalText") + "</div>";
		s += "<div style=\"margin-top:5px\"><textarea id=\"originalLanguage\" wrap=\"nowrap\" style=\"width:99%; height:190px; font-family:courier; background-color:#ffc1c1\"></textarea></div>";
		s += "<div style=\"margin-top:20px\">" + Cv.Utils.Resource.getResource("CV_YourTranslation") + " <a id=\"linkCopyFromOriginal\" href=\"javascript:;\">" + Cv.Utils.Resource.getResource("CV_CopyFromOriginal") + "</a></div>";
		s += "<div style=\"margin-top:5px\"><textarea id=\"userTranslated\" wrap=\"nowrap\" style=\"width:99%; height:190px; font-family:courier; background-color:#ccefbd\"></textarea></div>";
		s += "<div style=\"margin-top:20px\"><a id=\"linkTranslateSend\" href=\"javascript:;\" class=\"linkButton\">" + Cv.Utils.Resource.getResource("CV_Send") + "</a> <span id=\"translatorWait\"></span></div>";
		$("translatorForm").innerHTML = s;
		
		Event.observe("linkCopyFromOriginal", "click", this._linkCopyFromOriginalClicked.bindAsEventListener(this));
		Event.observe("linkTranslateSend", "click", this._linkTranslateSendClicked.bindAsEventListener(this));
		
		Cv.Communication.getCall(CvPageConfiguration.root + "/api/website/GetStandardRawResource.ashx?", "&key=" + encodeURIComponent(this.key) + "&appidentifier=" + CvCurrentApplication, this._resourceLoaded, this);
	},
	
	_linkCopyFromOriginalClicked : function() {
		$("userTranslated").value = $("originalLanguage").value;
	},
	
	_linkTranslateSendClicked : function() {	
		Cv.Utils.Wait.showInContainer("translatorWaitSend", $("translatorWait"));
		Cv.Communication.postCall(CvPageConfiguration.root + "/api/website/SuggestTranslation.ashx?", "&appidentifier=" + CvCurrentApplication + "&key=" + this.key + "&language=" + this.language + "&text=" + encodeURIComponent($("userTranslated").value), this._suggestionSent, this);
	},
	
	_suggestionSent : function() {
		Cv.Utils.Wait.hide("translatorWaitSend");
		alert(Cv.Utils.Resource.getResource("CV_ThankYouHelp"));
		CvModalBox.close();
	},
	
	_resourceLoaded : function(res) {
		$("originalLanguage").value = res.Result.replace(/\t/g,"");		
	}
});

if (!window.CvTranslator) 
	CvTranslator = new Cv.Translator();
