﻿
    /*
    *  Translates text.
    */
    
    google.load("language", "1"); // Loads Google Language API
    var translateTo = "en"; // Default language to translate to
    var textToTranslate; // Will hold the text to be translated
    var contentClass; // Classname of the element with text to translate
    var translateLinkId = "translate-link"; // Id of the element with the translate link
    var langDropdownId = "lang-dropdown"; //Id of the select dropdown element
    var progressImage = new Image(); // Preloads an animated gif..
    progressImage.src="http://www.googleminiapps.com/miniapps/js/translate/loading.gif"; // to show progress during translation
    var sourceLanguage = ""; // The source language will be automatically detected
    
    var resetLinkId = "resetLink";
    var resetLinkStyle = "font-size:90%;color:#777777";
    
   
    
    
    /*
    Resets to the original source text
    */
    function reset() {
      if(textToTranslate != undefined && textToTranslate != "" && contentClass != undefined && contentClass != "") {
        getElementsByClassName(document, '*', contentClass).innerHTML = textToTranslate;
        document.getElementById(langDropdownId).value = "reset";
        document.getElementById(resetLinkId).style.color = "#777777";
      }
    }
    
    /*
    Creates a dropdown list of languages to translate to
    */
    function creatLangDropdown(Id) {
      
      if(Id != undefined) {
          var gadgetDescription = getElementsByClassName(document, '*', "gadget_description");
          var html = document.getElementById(Id);
          if(!gadgetDescription)
              html.innerHTML += "<br />There is no Gadget description to translate.";
          else {
              html.innerHTML = '<strong style="font-size:90%">Translate into</strong><br /><select onchange="translateThis'+
                '(this.value,\'gadget_description\')" id="'+ langDropdownId +'" tabindex="0">'+   
                '<option value="reset">Choose Language</option>'+
                '<option  value="sq">Albanian</option>'+
                '<option  value="ar">Arabic</option>'+
                '<option  value="bg">Bulgarian</option>'+
                '<option  value="ca">Catalan</option>'+
                '<option  value="zh-CN">Chinese</option>'+
                '<option  value="hr">Croatian</option>'+
                '<option  value="cs">Czech</option>'+
                '<option value="da">Danish</option>'+
                '<option  value="nl">Dutch</option>'+
                '<option value="en">English</option>'+
                '<option  value="et">Estonian</option>'+
                '<option  value="tl">Filipino</option>'+
                '<option  value="fi">Finnish</option>'+
                '<option  value="fr">French</option>'+
                '<option  value="gl">Galician</option>'+
                '<option  value="de">German</option>'+
                '<option  value="el">Greek</option>'+
                '<option  value="iw">Hebrew</option>'+
                '<option  value="hi">Hindi</option>'+
                '<option  value="hu">Hungarian</option>'+
                '<option  value="id">Indonesian</option>'+
                '<option  value="it">Italian</option>'+
                '<option  value="ja">Japanese</option>'+
                '<option  value="ko">Korean</option>'+
                '<option  value="lv">Latvian</option>'+
                '<option  value="lt">Lithuanian</option>'+
                '<option  value="mt">Maltese</option>'+
                '<option  value="no">Norwegian</option>'+
                '<option  value="pl">Polish</option>'+
                '<option  value="pt">Portuguese</option>'+
                '<option  value="ro">Romanian</option>'+
                '<option  value="ru">Russian</option>'+
                '<option  value="sr">Serbian</option>'+
                '<option  value="sk">Slovak</option>'+
                '<option  value="sl">Slovenian</option>'+
                '<option  value="es">Spanish</option>'+
                '<option  value="sv">Swedish</option>'+
                '<option  value="th">Thai</option>'+
                '<option  value="tr">Turkish</option>'+
                '<option  value="uk">Ukrainian</option>'+
                '<option  value="vi">Vietnamese</option></select>';
          }
      }
    }
    
    /*
      Translation function that takes the language code of the language 
      to translate to, and the id of the element holding the text to translate
    */  
    function translateThis(langCode, cssClass) {
      
      if(!langCode || langCode == "" || langCode == undefined || langCode == "reset")
        return;
      // Grabbing text to translate
      var translated = getElementsByClassName(document, '*', cssClass);
      if(translated == null)
        return;
        
      // Assigns to global varible to be used with reset() function
      contentClass = cssClass; 
      
      if(textToTranslate == undefined) {
        textToTranslate = translated.innerHTML;
        
        document.getElementById(translateLinkId).innerHTML += '<br />&laquo;&nbsp;'+
        '<a id="resetLink" style="'+ resetLinkStyle + '" href="#asdf"  onclick="reset()">reset</a>&nbsp;&raquo;';
      }
      
      // Adds a progressImage that will be shown while translating
      translated.innerHTML = "";
      translated.appendChild(progressImage);
      translated.innerHTML += "<span style=\"margin-left:5px\">translating...please wait</span>";
      
      // Translate, and have the callback of the request
      // replace the source text with the translated text.
      // Auto-detect source language
      google.language.translate(textToTranslate, sourceLanguage, langCode, function(result) {
       
        if (result.translation) {
          translated.innerHTML = result.translation;
          
        }
        else {
        translated.innerHTML = "Sorry, could not translate.";
        translated.innerHTML += '<br />&laquo;&nbsp;'+
        '<a style="'+ resetLinkStyle + '" href="#asdf"  onclick="reset()">reset</a>&nbsp;&raquo;';
        }
      });
    }  


    /*
      Like getElementsById but for for classes
    */    
    function getElementsByClassName(oElm, strTagName, strClassName){
      var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
      var arrReturnElements = new Array();
      strClassName = strClassName.replace(/\-/g, "\\-");
      var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
      var oElement;
      for(var i=0; i<arrElements.length; i++){
        oElement = arrElements[i];
        if(oRegExp.test(oElement.className)){
                arrReturnElements.push(oElement);
        }
      }
      return arrReturnElements[0];
    }
