    var landscape = false;
    var translatedText = "";
		    
    function setup() {
      orientationChanged();
      var langs = new Array();
      var nums = new Object();
      for (var i in languages) {
        nums[i] = langs.length;
        langs.push(i + "");
      }
      for (var i in languages) {
        var src = i;
        var array = langs.slice();
        //array.splice(nums[i], 1);
        languages[i][1] = array;
      }
      for (var i in languages) {
      	var option = document.createElement("option");
      	option.value = i;
      	option.innerHTML = languages[i][0];
      	$("SourceLanguage").appendChild(option);
      }
      sourceSelected();
      if (navigator.language) {
        $("SinkLanguage").value = navigator.language.substring(0, 2);
      }  
    }
    
    function sourceSelected() {
      var value = $("SourceLanguage").value;
      if (value.length == 0) {
        value = "en";
      }
      $("LanguageDetectText").style.display = "none";
      fillSinkSelect(value);
      translate();
    }   
    
    function fillSinkSelect(source) {
      var oldValue = $("SinkLanguage").value;
      var langs = languages[source][1];
      $("SinkLanguage").innerHTML = "";
      for (var i = 0; i < langs.length; i++) {
      	var option = document.createElement("option");
      	option.value = langs[i];
      	option.innerHTML = languages[langs[i]][0];
      	$("SinkLanguage").appendChild(option);
      }
      $("SinkLanguage").value = oldValue;
    }
    
    function translate() {
      var text = $("Source").value;
      //text = text.replace(/\n/g, "|");
      if (text.length > 0) {
        var source = $("SourceLanguage").value;
        if (source.length == 0) {
          $("Translation").innerHTML = "<img src='loading.gif'> Detect language...";
          google.language.detect(text, function(result) {
            if (!result.error) {
              var language = languages[result.language];
              if (language) {
                $("LanguageDetect").innerHTML =  language[0];
                $("LanguageDetect").languageCode =  result.language;
                fillSinkSelect(result.language);
                $("LanguageDetectText").style.display = "block";
                doTranslation(text, source);
              }
              else {
                $("Translation").innerHTML = "Language detection failed or language not supported. Please select manually.";                              
              }  
            }
            else {
              $("Translation").innerHTML = result.error.message;              
            }
          });          
        }
        else {
          doTranslation(text, source);
        }
      }
      else {
        $("Translation").innerHTML = "&nbsp;";        
      }  
    }
    
    function doTranslation(text, source) {
      $("Transliteration").innerHTML = "<b>Transliteration:</b><br />";
      $("Translation").innerHTML = "<img src='loading.gif'> Translating...";
      google.language.translate(text, source, $("SinkLanguage").value, function(result) {
        translatedText = "";
        if (!result.error) {
          var container = document.getElementById("Translation");
          container.innerHTML = result.translation;
          if (container.innerText) {
            translatedText = container.innerText;
            $("Transliteration").style.display = "none";
            doTransliteration(text);
          }
          else {
            translatedText = result.translation;
          }            
        }
        else {
          $("Translation").innerHTML = result.error.message;
        }
      });      
    }
    
    function doTransliteration(text) {
      var from = $("SourceLanguage").value;
      if (from == "") {
        from = $("LanguageDetect").languageCode;
      }
      var fromWords = text.split(" ");
      var nextWords = null;
      if (fromWords.length > 5) {
        nextWords = fromWords.slice(5).join(" ");
        fromWords = fromWords.slice(0, 5);
      }
      google.language.transliterate(fromWords, from, $("SinkLanguage").value, 
        function(result) {
          if (result.error) {
            $("Transliteration").style.display = "none";
            $("TransliterationButton").style.display = "none";
          }
          else {
            $("TransliterationButton").style.display = "inline";
            var words = "";
            for ( var i = 0; i < result.transliterations.length; i++) {
              if (result.transliterations[i].transliteratedWords[0]) {
                words += result.transliterations[i].transliteratedWords[0] + " ";
              }
            }
            $("Transliteration").innerHTML += words;
            if (nextWords) {
              doTransliteration(nextWords);
            }
          }
      });      
    }
    
    function showTransliteration() {
      $("Transliteration").style.display = "block";
      $("TransliterationButton").style.display = "none";
    }
    
    function swap() {
      $("Source").value = translatedText;//$("Translation").innerHTML;
      var source = $("SourceLanguage").value;
      if (source.length != 0) {
        $("SourceLanguage").value = $("SinkLanguage").value;
        $("SinkLanguage").value = source;
      }
      else {
        $("SinkLanguage").value = $("LanguageDetect").languageCode;        
      }
      translate();      
    }
    
    function sendMail() {
      var body = encodeURIComponent(translatedText);//$("Translation").innerHTML;
      email("", body);
    }
    
    function email(subject, body) {
      if ($("EmailTest")) {
        $("EmailTest").href = "mailto:?subject=" + subject + "&body=" + body;
        var evt = $("EmailTest").ownerDocument.createEvent('MouseEvents');
        evt.initMouseEvent('click', true, true, $("EmailTest").ownerDocument.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
        $("EmailTest").dispatchEvent(evt);
      }
      else if ($("PalmEmail")) {
        $("PalmEmail").href = "mailto:?subject=" + subject + "&body=" + body;
      }
      else {
        window.open("mailto:?subject=" + subject + "&body=" + body, "_self");
      }        
    }
    
    function keyDown(key) {
      if (key == 13) {
        translate();
      }  
      if (key == 32) {
        translate();
      }  
    }

    function tellFriend() {
      var body = "Hi,<br><br>I just stumbled upon this iPhone language translator application:" +
          "<br><br>http://www.itunes.com/app/languagetranslator<br><br>" +
          "Use Google translator to convert text between different languages." +
          "<br><br>Best regards";
      //window.open("mailto:?subject=Translator on the iPhone&body=" + body, "_self");
      email("Translator on the iPhone", body);
    }
  
		function $(id) {
		  return document.getElementById(id);
		}
    
  	function orientationChanged() {
      if (window.orientation != undefined) {
        landscape = window.orientation != 0 && window.orientation != 180;
      }
      else {
        landscape = window.innerWidth > window.innerHeight;
      }  
      setTimeout(function() {window.scrollTo(0,1)}, 1);
    }
	
    function debug(msg) {
      var e = $("Debug");
      e.innerHTML += msg + "<br>";
    }
