//
// echo "王 ";
//
// http://code.google.com/intl/fr-FR/apis/language/translate/v1/getting_started.html
// http://code.google.com/intl/fr-FR/apis/language/translate/v1/getting_started.html#LangNameArray
//
// AJAX:
glngDiv2Do = 0;
iDivDone = 0;
//
//iDiv = 0;

//
// fnc001: get form:
//
function ggtGetForm()
{
  return document.forms["frmgg"];
}

//
// fnc001: get element X of the form:
//
function ggtGetElementX(strX)
{
	var frm;
//
	frm = ggtGetForm();
  return frm.elements[strX];
}
//
// fnc001: set element X of the form:
//
function ggtSetElementXValue(strX, strVal)
{
	var frm;
//
	frm = ggtGetForm();
	if(frm)
	{
		var ctl = frm.elements[strX];
		if(ctl)
		{
      ctl.value = strVal;	
      return true;
		}
	}
  return false;
}

//
// fnc001: get element X of the form:
//
function ggtGetElementXValue(strX)
{
	var frm;
	frm = ggtGetForm();
	if(frm)
	{
		try {
		  frm = frm.elements[strX];
		} catch (e) {
			frm = null;
		}
  	if(frm)
	  {
      return frm.value;
    }
    else
  	{
      return null;
    }
  }
  else
	{
    return null;
  }
}

//
// fnc001: ggtGetText:
//
function ggtGetText()
{
  return ggtGetElementXValue("editarea");
}

//
// fnc001: ggtClearText:
//
function ggtClearText()
{
  return ggtSetElementXValue("editarea", "");
}

//
// fnc001: ajaxSetInnerHTMLDivNo:
//
function ajaxSetInnerHTMLDivNo(iDivNo, strText)
{
  return ajaxSetInnerHTMLIfExistent("div2fill" + iDivNo, strText);
}

//
// fnc001: submit the Google translate from:
//
function ggtDoSubmit(kAjax)
{
//alert("ggtDoSubmit()");
 	if(kAjax)
 	{
		ggtDoTranslateDirectFrom2All();
 	}
 	else
 	{
 		var frm;
 		frm = ggtGetForm();
    frm.elements["fr2all"].click();
	}
 	return false;
}

//
// fnc001: translate from a given source lang:
//   see http://unixpapa.com/js/key.html
//   must pass event through calling argument for Safari,
//   no arguments passing required for others:
//
function ggtDoSubmitOnKeydown(kAjax, e)
{
//alert("ggtDoSubmitOnKeydown()");
// IE: window.event.keyCode,
// Google Chrome: window.event.keyCode, window.event.which,
// Firefox: window.event.keyCode, window.event.which,
// Safari: window.event.keyCode.
//
//var code = window.event ? window.event.keyCode : window.Event['which'];
//
	var code = (e.keyCode || e.which);
//
	if(code == 13)
	{
//
//  var kHasModifier = window.event ? (window.event.shiftKey || window.event.altKey || window.event.ctrlKey) :
//    window.Event.modifiers != 0;
//
    var kHasModifier = (e.shiftKey || e.altKey || e.ctrlKey);
//
    if(kHasModifier)
    {
	  	return true;
    }
    else
    {
	  	return ggtDoSubmit(kAjax);
    }
	}
	else
	{
		return true;
  }
}

//
// fnc001: test if a button named strX is pressed:
//
function ggtIsButtonXPressed(strX)
{
  var strX;
  strX = ggtGetElementXValue(strX);
//!!!KEYMODIF!!!
//alert(strX);
  return (strX != null);
}

//
// fnc001: translate from the input source lang:
//
function ggtGetLangFrom()
{
  var i;
  var strLangpair, strLangFrom;
//
  strLangpair = ggtGetElementXValue("langpair");
  if(! strLangpair)
  {
  	return "";
  }
//
  i = strLangpair.indexOf("|");
  if(i < 0)
  {
    strLangFrom = strLangpair;
  }
  else
  {
    strLangFrom = strLangpair.substr(0, i);
  }
//
  return strLangFrom;
}
//
// fnc001: translate from the input source lang:
//
function ggtGetLangLocalFrom()
{
  var strLangFrom;
//
  strLangFrom = ggtGetLangFrom();
/*
  if(strLangFrom == "")
  {
    return locGetLangLocal();
  }
  else
  {
    return strLangFrom;
  }
 */
//
  return strLangFrom;
//
}
//
// fnc001: test if it is auto Language code indicator, not a real one:
//
function ggtIsLangAuto(strLang)
{
  if(strLang == "auto")
  {
  	return true;
  }
  else
  {
  	return false;
  }
}

//
// fnc001: get Language Name by Lang:
//
function ggtGetLangNameByLang(strLang)
{
  var strLangName;
//
  strLangName = lg[strLang];
  if(strLangName)
  {
    return strLangName;
  }
  else
  {
    return strLang;
  }
}

//
// fnc001: translate direct to all:
//
function ggtGetDivIndexMax()
{
// -1: maximum when source language is not among lg array:
  return ggtGetLangsCount() - 1;
}

//
// fnc001: fill Lang Titles:
//
function ggtFillLangTitles(strLang)
{
  var i, iDivsMax, j, n, lgcode;
//
  n = ggtGetLangsCount();
//alert("n=" + n);
  iDivsMax = ggtGetDivIndexMax();
  j = 0;
//!!!KEYMODIF!!!
//alert(strLang);
//
  for(lgcode in lg)
  {
    if(! ((strLang == lgcode) || ggtIsLangAuto(lgcode)))
    {
      ajaxSetInnerHTML("divlang" + j, lg[lgcode]);
      ajaxSetInnerHTML("div2fill" + j, "");
      j++;
      if(j > iDivsMax)
      {
      	break;
      }
    }
  }
//
// exclude auto, if not there will be created
// a new empty language title div:
//
  n--;
//
  for(i = j; i < n; i++)
  {
    ajaxSetInnerHTML("divlang" + i, "");
    ajaxSetInnerHTML("div2fill" + j, "");
  }
//
  return j;
}

//
// fnc001: get Language by Langpair:
//
function ggtGetLang1ByLangpair(strLangpair)
{
  var i;
  var strLangFrom;
  strLangFrom = strLangpair;
  i = strLangFrom.indexOf("|");
  strLangFrom = strLangFrom.substr(0, i);
//
  return strLangFrom;
}
/*
 * fnc001: get Language Name by Langpair:
 */
function ggtGetLangName1ByLangpair(strLangpair)
{
  var strLangFrom;
  strLangFrom = ggtGetLang1ByLangpair(strLangpair);
//
  return ggtGetLangNameByLang(strLangFrom);
}

//
// fnc001: translate from the input source lang:
//
function ggtTranslateLangpair(strLangpair, strText)
{
  var strLp, strURLArgs;
//
  if(strLangpair == null)
  {
    strLp = ggtGetElementXValue("langpair");
  }
  else
  {
    strLp = strLangpair;
  }
//
  if(strText == null)
  {
    strURLArgs = ggtGetText();
  }
  else
  {
    strURLArgs = strText;
  }
//
  if(strURLArgs == "")
  {
    return false;
  }
//
//strURLArgs = escape(strURLArgs);
// http://translate.google.com/translate_t?hl=fr&ie=UTF8&oe=UTF8&langpair=fr|en&text=nom
//
// ie=latin1 for French Accents.
//
//strURLArgs = "http://translate.google.com/translate_t?"
//  + "hl=fr&ie=latin2&oe=UTF8&langpair=" + strLp
//  + "&text=" + strURLArgs
//
// ie=latin1 for French Accents.
//
  strURLArgs = "hl=fr&ie=UTF8&oe=UTF8&langpair=" + strLp
    + "&text=" + strURLArgs
//!!!
//alert(strURLArgs);
//!!!
  doXhr(strURLArgs);
//
  return false;
}

//
// fnc001: translate from the input source lang:
//
function ggtTranslateFrTo(strLangFrom, strLangTo, strText)
{
  var strLangpair;
//
  strLangpair = strLangFrom + "|" + strLangTo;
//
  return ggtTranslateLangpair(strLangpair, strText);
}

//
// fnc001: translate from the input source lang:
//
function ggtTranslateFrToDivi(strLangFrom, strLangTo, strText, i)
{
//var strLangpair;
//
//strLangpair = strLangFrom + "|" + strLangTo;
//
//return ggtTranslateLangpair(strLangpair, strText);
//
  var strURLArgs;
//
  if(strText == null)
  {
    strURLArgs = ggtGetText();
  }
  else
  {
    strURLArgs = strText;
  }
//
  if(strURLArgs == "")
  {
    return false;
  }
//
//alert("strLangFrom=" + strLangFrom + ", strLangTo=" + strLangTo + ", strText=" + strText);
  google.language.translate(strURLArgs, strLangFrom, strLangTo, function(result) {
    if(! result.error) {
      var container = document.getElementById("div2fill" + i);
      if(container) {
        container.innerHTML = result.translation;
      }
    }
  	iDivDone++;
    if(iDivDone >= glngDiv2Do)
    {
  	  hideDivPatience();
      swStop();
    	//glngDiv2Do = 0;
    	iDivDone = 0;
    }
  });
  return false;
}

//
// fnc001: translate from the input source lang:
//
function ggtTranslate(strText)
{
	ggtStart(strText, true);
  return ggtTranslateLangpair(null, strText);
}
//
// fnc001: translate from the source lang fr:
//
function ggtTranslateLocalFr2En()
{
//
  ggtStart("", true);
//
//alert(top.frames.fraDeutch.location.href);
//
  var strLangFrom = ggtGetLangLocalFrom();
//
// French to English:
//
  return ggtTranslateFrTo(strLangFrom, "en");
}
//
// fnc001: translate from the source lang fr:
//
function ggtTranslateFr2En()
{
//
//alert(top.frames.fraDeutch.location.href);
//
  var strLangFrom = ggtGetLangLocalFrom();
//
// French to English:
//
  return ggtTranslateFrTo(strLangFrom, "en");
}

//
// fnc001: translate direct to all:
//
function ggtTranslateDirectFrom2All(strLangFrom, strText)
{
//
  var i, iDiv, iDivsMax, kChronoIfSolid, n, strLangFromNow;
//
  iDiv = 0;
//
  if((strLangFrom == null) || (strLangFrom == ""))
  {
//
//  ggtGetLangLocalFrom(): does not exist:
//  strLangFrom = ggtGetLangFrom();
//
    strLangFromNow = ggtGetLangLocalFrom();
//!!!KEYMODIF!!!
//alert("strLangFromNow=" + strLangFromNow + " => ");
//
  }
  else
  {
  	strLangFromNow = strLangFrom;
  }
//
  if(strLangFromNow == "")
  {
  	kChronoIfSolid = false;
  }
  else
  {
  	kChronoIfSolid = true;
  }
//
//!!!KEYMODIF!!!
//alert("strText=" + strText + ", strLangFromNow=" + strLangFromNow);
//
  ggtStart(strText, kChronoIfSolid);
//
  ggtSetSourceTitle(strLangFromNow);
  ggtFillLangTitles(strLangFromNow);
//
//alert("strText=" + strText + ", strLangFrom=" + strLangFromNow);
//
  if(! kChronoIfSolid)
  {
  	return 0;
  }
//
  n = ggtGetLangsCount();
//
// exclude self language and auto:
//
  iDivsMax = ggtGetDivIndexMax();
//
  for(lgcode in lg)
  {
  	//
  	// ignore source language and the auto detection indicator language:
  	//
    if(! ((strLangFromNow == lgcode) || ggtIsLangAuto(lgcode)))
    {
      ggtTranslateFrToDivi(strLangFromNow, lgcode, strText, iDiv);
      iDiv++;
      if(iDiv > iDivsMax)
      {
      	break;
      }
    }
//
  }
//alert("iDiv=" + iDiv + ", strText=" + strText);
//
  glngDiv2Do = iDiv;
//
  return n;
}

//
// fnc001: get languages list:
//   see http://code.google.com/intl/fr-FR/apis/language/translate/v1/getting_started.html#LangNameArray
//
function ggtGetLanguagesEnum()
{
// == var google.language.Languages
  return {
    "AFRIKAANS" : "af",
    "ALBANIAN" : "sq",
    "AMHARIC" : "am",
    "ARABIC" : "ar",
    "ARMENIAN" : "hy",
    "AZERBAIJANI" : "az",
    "BASQUE" : "eu",
    "BELARUSIAN" : "be",
    "BENGALI" : "bn",
    "BIHARI" : "bh",
    "BRETON" : "br",
    "BULGARIAN" : "bg",
    "BURMESE" : "my",
    "CATALAN" : "ca",
    "CHEROKEE" : "chr",
    "CHINESE" : "zh",
    "CHINESE_SIMPLIFIED" : "zh-CN",
    "CHINESE_TRADITIONAL" : "zh-TW",
    "CORSICAN" : "co",
    "CROATIAN" : "hr",
    "CZECH" : "cs",
    "DANISH" : "da",
    "DHIVEHI" : "dv",
    "DUTCH": "nl",  
    "ENGLISH" : "en",
    "ESPERANTO" : "eo",
    "ESTONIAN" : "et",
    "FAROESE" : "fo",
    "FILIPINO" : "tl",
    "FINNISH" : "fi",
    "FRENCH" : "fr",
    "FRISIAN" : "fy",
    "GALICIAN" : "gl",
    "GEORGIAN" : "ka",
    "GERMAN" : "de",
    "GREEK" : "el",
    "GUJARATI" : "gu",
    "HAITIAN_CREOLE" : "ht",
    "HEBREW" : "iw",
    "HINDI" : "hi",
    "HUNGARIAN" : "hu",
    "ICELANDIC" : "is",
    "INDONESIAN" : "id",
    "INUKTITUT" : "iu",
    "IRISH" : "ga",
    "ITALIAN" : "it",
    "JAPANESE" : "ja",
    "JAVANESE" : "jw",
    "KANNADA" : "kn",
    "KAZAKH" : "kk",
    "KHMER" : "km",
    "KOREAN" : "ko",
    "KURDISH": "ku",
    "KYRGYZ": "ky",
    "LAO" : "lo",
    "LATIN" : "la",
    "LATVIAN" : "lv",
    "LITHUANIAN" : "lt",
    "LUXEMBOURGISH" : "lb",
    "MACEDONIAN" : "mk",
    "MALAY" : "ms",
    "MALAYALAM" : "ml",
    "MALTESE" : "mt",
    "MAORI" : "mi",
    "MARATHI" : "mr",
    "MONGOLIAN" : "mn",
    "NEPALI" : "ne",
    "NORWEGIAN" : "no",
    "OCCITAN" : "oc",
    "ORIYA" : "or",
    "PASHTO" : "ps",
    "PERSIAN" : "fa",
    "POLISH" : "pl",
    "PORTUGUESE" : "pt",
    "PORTUGUESE_PORTUGAL" : "pt-PT",
    "PUNJABI" : "pa",
    "QUECHUA" : "qu",
    "ROMANIAN" : "ro",
    "RUSSIAN" : "ru",
    "SANSKRIT" : "sa",
    "SCOTS_GAELIC" : "gd",
    "SERBIAN" : "sr",
    "SINDHI" : "sd",
    "SINHALESE" : "si",
    "SLOVAK" : "sk",
    "SLOVENIAN" : "sl",
    "SPANISH" : "es",
    "SUNDANESE" : "su",
    "SWAHILI" : "sw",
    "SWEDISH" : "sv",
    "SYRIAC" : "syr",
    "TAJIK" : "tg",
    "TAMIL" : "ta",
    "TATAR" : "tt",
    "TELUGU" : "te",
    "THAI" : "th",
    "TIBETAN" : "bo",
    "TONGA" : "to",
    "TURKISH" : "tr",
    "UKRAINIAN" : "uk",
    "URDU" : "ur",
    "UZBEK" : "uz",
    "UIGHUR" : "ug",
    "VIETNAMESE" : "vi",
    "WELSH" : "cy",
    "YIDDISH" : "yi",
    "YORUBA" : "yo",
    "UNKNOWN" : ""
  };
}
//
// fnc001: get languages list:
//
function ggtGetLanguageLocalByLanguageCodeEnum()
{
// => var google.language.Languages
  if(locIsLangLocalFr())
  {
    return {
      "af" : "Afrikaner",
      "sq" : "Albanais",
      "am" : "Amharique",
      "ar" : "Arabe",
      "hy" : "Arménien",
      "az" : "Azerbaïdjanais",
      "eu" : "Basque",
      "be" : "Bélarusse",
      "bn" : "Bengali",
      "bh" : "Bihari",
      "br" : "Breton",
      "bg" : "Bulgares",
      "my" : "Birmanes",
      "ca" : "Catalan",
      "chr" : "Cherokee",
      "zh" : "Chinois",
      "zh-CN" : "Chinois simplifié",
      "zh-TW" : "Chinois traditionnel",
      "co" : "Corse",
      "hr" : "Croate",
      "cs" : "Tchèque",
      "da" : "Danois",
      "dv" : "Dhivehi",
      "nl" : "Néerlandais",
      "en" : "Anglais",
      "eo" : "Esperanto",
      "et" : "Estonien",
      "fo" : "Iles Féroé",
      "tl" : "Philippins",
      "fi" : "Finlandais",
      "fr" : "Français",
      "fy" : "Frison",
      "gl" : "Galicien",
      "ka" : "Géorgien",
      "de" : "Allemand",
      "el" : "Grec",
      "gu" : "Goudjrati",
      "ht" : "Haïtien-Créole",
      "iw" : "Hébreu",
      "hi" : "Hindi",
      "hu" : "Hongrois",
      "is" : "Islandais",
      "id" : "Indonésien",
      "iu" : "Inuktitut",
      "ga" : "Irlandais",
      "it" : "Italien",
      "ja" : "Japonais",
      "jw" : "Javanais",
      "kn" : "Kannada",
      "kk" : "Kazakh",
      "km" : "Khmers",
      "ko" : "Coréen",
      "ku" : "Kurde",
      "ky" : "Kirghiz",
      "lo" : "Ajo",
      "la" : "Latin",
      "lv" : "Letton",
      "lt" : "Lituanien",
      "lb" : "Luxembourgeois",
      "mk" : "Macédonien",
      "ms" : "Malais",
      "ml" : "Malayalam",
      "mt" : "Maltais",
      "mi" : "Maori",
      "mr" : "Marathi",
      "mn" : "Mongole",
      "ne" : "Népalais",
      "no" : "Norvégien",
      "oc" : "Occitan",
      "or" : "Oriya",
      "ps" : "Pachtou",
      "fa" : "Perse",
      "pl" : "Polonais",
      "pt" : "Portugais",
      "pt-PT" : "Portugais Portugal",
      "pa" : "Punjabi",
      "qu" : "Quechua",
      "ro" : "Roumain",
      "ru" : "Russe",
      "sa" : "Sanskrit",
      "gd" : "Gaélique Ecossais",
      "sr" : "Serbe",
      "sd" : "Sindhi",
      "si" : "Cinghalais",
      "sk" : "Slovaque",
      "sl" : "Slovène",
      "es" : "Espagnole",
      "su" : "Soudanais",
      "sw" : "Swahili",
      "sv" : "Suédois",
      "syr" : "Syriaque",
      "tg" : "Tadjikes",
      "ta" : "Tamoul",
      "tt" : "Tatar",
      "te" : "Telugu",
      "th" : "Thaï",
      "bo" : "Tibétain",
      "to" : "Tonga",
      "tr" : "Turc",
      "uk" : "Ukrainien",
      "ur" : "Ourdou",
      "uz" : "Ouzbèkes",
      "ug" : "Ouïgour",
      "vi" : "Vietnamien",
      "cy" : "Gallois",
      "yi" : "Yiddish",
      "yo" : "Yoruba",
      "" : "Inconnu"
    };
  }
  else if(locIsLangLocalCn())
  {
    return {
      "af" : "南非语",
      "sq" : "阿尔巴尼亚语",
      "am" : "阿姆哈拉语",
      "ar" : "阿拉伯语",
      "hy" : "亚美尼亚语",
      "az" : "阿塞拜疆语",
      "eu" : "巴斯克语",
      "be" : "白俄罗斯语",
      "bn" : "孟加拉语",
      "bh" : "比哈里语",
      "br" : "百里语",
      "bg" : "保加利亚语",
      "my" : "缅甸语",
      "ca" : "加泰罗尼亚语",
      "chr" : "切诺基语",
      "zh" : "中文",
      "zh-CN" : "简体中文",
      "zh-TW" : "繁体中文",
      "co" : "科西嘉语",
      "hr" : "克罗地亚语",
      "cs" : "捷克语",
      "da" : "丹麦语",
      "dv" : "迪维希语",
      "nl" : "荷兰语",
      "en" : "英语",
      "eo" : "世界语",
      "et" : "爱沙尼亚语",
      "fo" : "法罗群岛语",
      "tl" : "菲律宾语语",
      "fi" : "芬兰语",
      "fr" : "法语",
      "fy" : "弗里斯兰语",
      "gl" : "加利西亚语",
      "ka" : "格鲁吉亚与语",
      "de" : "德语",
      "el" : "希腊语",
      "gu" : "古加拉特语",
      "ht" : "海地克雷奥语",
      "iw" : "希伯来语",
      "hi" : "印地语",
      "hu" : "匈牙利语",
      "is" : "冰岛语",
      "id" : "印度尼西亚语",
      "iu" : "因纽特语",
      "ga" : "爱尔兰语",
      "it" : "意大利语",
      "ja" : "日语",
      "jw" : "爪哇语",
      "kn" : "卡纳达语",
      "kk" : "哈语",
      "km" : "红色语",
      "ko" : "韩国语",
      "ku" : "库尔德语",
      "ky" : "吉尔吉斯语",
      "lo" : "姥挝语",
      "la" : "拉丁语",
      "lv" : "拉脱维亚语",
      "lt" : "立陶宛语",
      "lb" : "卢森堡语",
      "mk" : "马其顿语",
      "ms" : "马来语",
      "ml" : "马来亚语",
      "mt" : "马耳他语",
      "mi" : "毛利语",
      "mr" : "马拉提语",
      "mn" : "蒙古语",
      "ne" : "尼泊尔语",
      "no" : "挪威语",
      "oc" : "奥克语",
      "or" : "奥利亚语",
      "ps" : "普什图语",
      "fa" : "波斯语",
      "pl" : "波兰语",
      "pt" : "葡萄牙语",
      "pt-PT" : "葡萄牙语",
      "pa" : "旁遮普语",
      "qu" : "克丘亚语",
      "ro" : "罗马尼亚语",
      "ru" : "俄罗斯语",
      "sa" : "梵文",
      "gd" : "苏格兰盖尔语",
      "sr" : "塞语",
      "sd" : "辛第语",
      "si" : "僧伽罗语",
      "sk" : "斯洛伐克语",
      "sl" : "斯洛文尼亚语",
      "es" : "西班牙语",
      "su" : "巽语",
      "sw" : "斯瓦希里语",
      "sv" : "瑞典语",
      "syr" : "叙利亚语",
      "tg" : "塔吉克语",
      "ta" : "泰米尔语",
      "tt" : "鞑靼语",
      "te" : "泰卢固语",
      "th" : "泰国语",
      "bo" : "西藏语",
      "to" : "汤加语",
      "tr" : "土耳其语",
      "uk" : "乌克兰语",
      "ur" : "乌尔都语",
      "uz" : "乌兹别克斯坦语",
      "ug" : "维吾尔语",
      "vi" : "越南语",
      "cy" : "威尔士语",
      "yi" : "意第绪语",
      "yo" : "约鲁巴语",
      "" : "未知"
    };
  }
  else
  {
    return {
      "af" : "Afrikaans",
      "sq" : "Albanian",
      "am" : "Amharic",
      "ar" : "Arabic",
      "hy" : "Armenian",
      "az" : "Azerbaijani",
      "eu" : "Basque",
      "be" : "Belarusian",
      "bn" : "Bengali",
      "bh" : "Bihari",
      "br" : "Breton",
      "bg" : "Bulgarian",
      "my" : "Burmese",
      "ca" : "Catalan",
      "chr" : "Cherokee",
      "zh" : "Chinese",
      "zh-CN" : "Chinese Simplified",
      "zh-TW" : "Chinese Traditional",
      "co" : "Corsican",
      "hr" : "Croatian",
      "cs" : "Czech",
      "da" : "Danish",
      "dv" : "Dhivehi",
      "nl" : "Dutch",
      "en" : "English",
      "eo" : "Esperanto",
      "et" : "Estonian",
      "fo" : "Faroese",
      "tl" : "Filipino",
      "fi" : "Finnish",
      "fr" : "French",
      "fy" : "Frisian",
      "gl" : "Galician",
      "ka" : "Georgian",
      "de" : "German",
      "el" : "Greek",
      "gu" : "Gujarati",
      "ht" : "Haitian Creole",
      "iw" : "Hebrew",
      "hi" : "Hindi",
      "hu" : "Hungarian",
      "is" : "Icelandic",
      "id" : "Indonesian",
      "iu" : "Inuktitut",
      "ga" : "Irish",
      "it" : "Italian",
      "ja" : "Japanese",
      "jw" : "Javanese",
      "kn" : "Kannada",
      "kk" : "Kazakh",
      "km" : "Khmer",
      "ko" : "Korean",
      "ku" : "Kurdish",
      "ky" : "Kyrgyz",
      "lo" : "Lao",
      "la" : "Latin",
      "lv" : "Latvian",
      "lt" : "Lithuanian",
      "lb" : "Luxembourgish",
      "mk" : "Macedonian",
      "ms" : "Malay",
      "ml" : "Malayalam",
      "mt" : "Maltese",
      "mi" : "Maori",
      "mr" : "Marathi",
      "mn" : "Mongolian",
      "ne" : "Nepali",
      "no" : "Norwegian",
      "oc" : "Occitan",
      "or" : "Oriya",
      "ps" : "Pashto",
      "fa" : "Persian",
      "pl" : "Polish",
      "pt" : "Portuguese",
      "pt-PT" : "Portuguese Portugal",
      "pa" : "Punjabi",
      "qu" : "Quechua",
      "ro" : "Romanian",
      "ru" : "Russian",
      "sa" : "Sanskrit",
      "gd" : "Scots Gaelic",
      "sr" : "Serbian",
      "sd" : "Sindhi",
      "si" : "Sinhalese",
      "sk" : "Slovak",
      "sl" : "Slovenian",
      "es" : "Spanish",
      "su" : "Sundanese",
      "sw" : "Swahili",
      "sv" : "Swedish",
      "syr" : "Syriac",
      "tg" : "Tajik",
      "ta" : "Tamil",
      "tt" : "Tatar",
      "te" : "Telugu",
      "th" : "Thai",
      "bo" : "Tibetan",
      "to" : "Tonga",
      "tr" : "Turkish",
      "uk" : "Ukrainian",
      "ur" : "Urdu",
      "uz" : "Uzbek",
      "ug" : "Uighur",
      "vi" : "Vietnamese",
      "cy" : "Welsh",
      "yi" : "Yiddish",
      "yo" : "Yoruba",
      "" : "Unknown"
    };
  }
}
//
// fnc001: get languages list:
//
function ggtGetLanguageLocalByLanguageCodeEnumAuto()
{
// => var google.language.Languages
  if(locIsLangLocalFr())
  {
    return {
    	"auto" : "[Auto]",
      "af" : "Afrikaner",
      "sq" : "Albanais",
      "am" : "Amharique",
      "ar" : "Arabe",
      "hy" : "Arménien",
      "az" : "Azerbaïdjanais",
      "eu" : "Basque",
      "be" : "Bélarusse",
      "bn" : "Bengali",
      "bh" : "Bihari",
      "br" : "Breton",
      "bg" : "Bulgares",
      "my" : "Birmanes",
      "ca" : "Catalan",
      "chr" : "Cherokee",
      "zh" : "Chinois",
      "zh-CN" : "Chinois simplifié",
      "zh-TW" : "Chinois traditionnel",
      "co" : "Corse",
      "hr" : "Croate",
      "cs" : "Tchèque",
      "da" : "Danois",
      "dv" : "Dhivehi",
      "nl" : "Néerlandais",
      "en" : "Anglais",
      "eo" : "Esperanto",
      "et" : "Estonien",
      "fo" : "Iles Féroé",
      "tl" : "Philippins",
      "fi" : "Finlandais",
      "fr" : "Français",
      "fy" : "Frison",
      "gl" : "Galicien",
      "ka" : "Géorgien",
      "de" : "Allemand",
      "el" : "Grec",
      "gu" : "Goudjrati",
      "ht" : "Haïtien-Créole",
      "iw" : "Hébreu",
      "hi" : "Hindi",
      "hu" : "Hongrois",
      "is" : "Islandais",
      "id" : "Indonésien",
      "iu" : "Inuktitut",
      "ga" : "Irlandais",
      "it" : "Italien",
      "ja" : "Japonais",
      "jw" : "Javanais",
      "kn" : "Kannada",
      "kk" : "Kazakh",
      "km" : "Khmers",
      "ko" : "Coréen",
      "ku" : "Kurde",
      "ky" : "Kirghiz",
      "lo" : "Ajo",
      "la" : "Latin",
      "lv" : "Letton",
      "lt" : "Lituanien",
      "lb" : "Luxembourgeois",
      "mk" : "Macédonien",
      "ms" : "Malais",
      "ml" : "Malayalam",
      "mt" : "Maltais",
      "mi" : "Maori",
      "mr" : "Marathi",
      "mn" : "Mongole",
      "ne" : "Népalais",
      "no" : "Norvégien",
      "oc" : "Occitan",
      "or" : "Oriya",
      "ps" : "Pachtou",
      "fa" : "Perse",
      "pl" : "Polonais",
      "pt" : "Portugais",
      "pt-PT" : "Portugais Portugal",
      "pa" : "Punjabi",
      "qu" : "Quechua",
      "ro" : "Roumain",
      "ru" : "Russe",
      "sa" : "Sanskrit",
      "gd" : "Gaélique Ecossais",
      "sr" : "Serbe",
      "sd" : "Sindhi",
      "si" : "Cinghalais",
      "sk" : "Slovaque",
      "sl" : "Slovène",
      "es" : "Espagnole",
      "su" : "Soudanais",
      "sw" : "Swahili",
      "sv" : "Suédois",
      "syr" : "Syriaque",
      "tg" : "Tadjikes",
      "ta" : "Tamoul",
      "tt" : "Tatar",
      "te" : "Telugu",
      "th" : "Thaï",
      "bo" : "Tibétain",
      "to" : "Tonga",
      "tr" : "Turc",
      "uk" : "Ukrainien",
      "ur" : "Ourdou",
      "uz" : "Ouzbèkes",
      "ug" : "Ouïgour",
      "vi" : "Vietnamien",
      "cy" : "Gallois",
      "yi" : "Yiddish",
      "yo" : "Yoruba",
      "" : "Inconnu"
    };
  }
  else if(locIsLangLocalCn())
  {
    return {
    	"auto" : "[自动诊断源语言]",
      "af" : "南非语",
      "sq" : "阿尔巴尼亚语",
      "am" : "阿姆哈拉语",
      "ar" : "阿拉伯语",
      "hy" : "亚美尼亚语",
      "az" : "阿塞拜疆语",
      "eu" : "巴斯克语",
      "be" : "白俄罗斯语",
      "bn" : "孟加拉语",
      "bh" : "比哈里语",
      "br" : "百里语",
      "bg" : "保加利亚语",
      "my" : "缅甸语",
      "ca" : "加泰罗尼亚语",
      "chr" : "切诺基语",
      "zh" : "中文",
      "zh-CN" : "简体中文",
      "zh-TW" : "繁体中文",
      "co" : "科西嘉语",
      "hr" : "克罗地亚语",
      "cs" : "捷克语",
      "da" : "丹麦语",
      "dv" : "迪维希语",
      "nl" : "荷兰语",
      "en" : "英语",
      "eo" : "世界语",
      "et" : "爱沙尼亚语",
      "fo" : "法罗群岛语",
      "tl" : "菲律宾语语",
      "fi" : "芬兰语",
      "fr" : "法语",
      "fy" : "弗里斯兰语",
      "gl" : "加利西亚语",
      "ka" : "格鲁吉亚与语",
      "de" : "德语",
      "el" : "希腊语",
      "gu" : "古加拉特语",
      "ht" : "海地克雷奥语",
      "iw" : "希伯来语",
      "hi" : "印地语",
      "hu" : "匈牙利语",
      "is" : "冰岛语",
      "id" : "印度尼西亚语",
      "iu" : "因纽特语",
      "ga" : "爱尔兰语",
      "it" : "意大利语",
      "ja" : "日语",
      "jw" : "爪哇语",
      "kn" : "卡纳达语",
      "kk" : "哈语",
      "km" : "红色语",
      "ko" : "韩国语",
      "ku" : "库尔德语",
      "ky" : "吉尔吉斯语",
      "lo" : "姥挝语",
      "la" : "拉丁语",
      "lv" : "拉脱维亚语",
      "lt" : "立陶宛语",
      "lb" : "卢森堡语",
      "mk" : "马其顿语",
      "ms" : "马来语",
      "ml" : "马来亚语",
      "mt" : "马耳他语",
      "mi" : "毛利语",
      "mr" : "马拉提语",
      "mn" : "蒙古语",
      "ne" : "尼泊尔语",
      "no" : "挪威语",
      "oc" : "奥克语",
      "or" : "奥利亚语",
      "ps" : "普什图语",
      "fa" : "波斯语",
      "pl" : "波兰语",
      "pt" : "葡萄牙语",
      "pt-PT" : "葡萄牙语",
      "pa" : "旁遮普语",
      "qu" : "克丘亚语",
      "ro" : "罗马尼亚语",
      "ru" : "俄罗斯语",
      "sa" : "梵文",
      "gd" : "苏格兰盖尔语",
      "sr" : "塞语",
      "sd" : "辛第语",
      "si" : "僧伽罗语",
      "sk" : "斯洛伐克语",
      "sl" : "斯洛文尼亚语",
      "es" : "西班牙语",
      "su" : "巽语",
      "sw" : "斯瓦希里语",
      "sv" : "瑞典语",
      "syr" : "叙利亚语",
      "tg" : "塔吉克语",
      "ta" : "泰米尔语",
      "tt" : "鞑靼语",
      "te" : "泰卢固语",
      "th" : "泰国语",
      "bo" : "西藏语",
      "to" : "汤加语",
      "tr" : "土耳其语",
      "uk" : "乌克兰语",
      "ur" : "乌尔都语",
      "uz" : "乌兹别克斯坦语",
      "ug" : "维吾尔语",
      "vi" : "越南语",
      "cy" : "威尔士语",
      "yi" : "意第绪语",
      "yo" : "约鲁巴语",
      "" : "未知"
    };
  }
  else
  {
    return {
    	"auto" : "[Auto]",
      "af" : "Afrikaans",
      "sq" : "Albanian",
      "am" : "Amharic",
      "ar" : "Arabic",
      "hy" : "Armenian",
      "az" : "Azerbaijani",
      "eu" : "Basque",
      "be" : "Belarusian",
      "bn" : "Bengali",
      "bh" : "Bihari",
      "br" : "Breton",
      "bg" : "Bulgarian",
      "my" : "Burmese",
      "ca" : "Catalan",
      "chr" : "Cherokee",
      "zh" : "Chinese",
      "zh-CN" : "Chinese Simplified",
      "zh-TW" : "Chinese Traditional",
      "co" : "Corsican",
      "hr" : "Croatian",
      "cs" : "Czech",
      "da" : "Danish",
      "dv" : "Dhivehi",
      "nl" : "Dutch",
      "en" : "English",
      "eo" : "Esperanto",
      "et" : "Estonian",
      "fo" : "Faroese",
      "tl" : "Filipino",
      "fi" : "Finnish",
      "fr" : "French",
      "fy" : "Frisian",
      "gl" : "Galician",
      "ka" : "Georgian",
      "de" : "German",
      "el" : "Greek",
      "gu" : "Gujarati",
      "ht" : "Haitian Creole",
      "iw" : "Hebrew",
      "hi" : "Hindi",
      "hu" : "Hungarian",
      "is" : "Icelandic",
      "id" : "Indonesian",
      "iu" : "Inuktitut",
      "ga" : "Irish",
      "it" : "Italian",
      "ja" : "Japanese",
      "jw" : "Javanese",
      "kn" : "Kannada",
      "kk" : "Kazakh",
      "km" : "Khmer",
      "ko" : "Korean",
      "ku" : "Kurdish",
      "ky" : "Kyrgyz",
      "lo" : "Lao",
      "la" : "Latin",
      "lv" : "Latvian",
      "lt" : "Lithuanian",
      "lb" : "Luxembourgish",
      "mk" : "Macedonian",
      "ms" : "Malay",
      "ml" : "Malayalam",
      "mt" : "Maltese",
      "mi" : "Maori",
      "mr" : "Marathi",
      "mn" : "Mongolian",
      "ne" : "Nepali",
      "no" : "Norwegian",
      "oc" : "Occitan",
      "or" : "Oriya",
      "ps" : "Pashto",
      "fa" : "Persian",
      "pl" : "Polish",
      "pt" : "Portuguese",
      "pt-PT" : "Portuguese Portugal",
      "pa" : "Punjabi",
      "qu" : "Quechua",
      "ro" : "Romanian",
      "ru" : "Russian",
      "sa" : "Sanskrit",
      "gd" : "Scots Gaelic",
      "sr" : "Serbian",
      "sd" : "Sindhi",
      "si" : "Sinhalese",
      "sk" : "Slovak",
      "sl" : "Slovenian",
      "es" : "Spanish",
      "su" : "Sundanese",
      "sw" : "Swahili",
      "sv" : "Swedish",
      "syr" : "Syriac",
      "tg" : "Tajik",
      "ta" : "Tamil",
      "tt" : "Tatar",
      "te" : "Telugu",
      "th" : "Thai",
      "bo" : "Tibetan",
      "to" : "Tonga",
      "tr" : "Turkish",
      "uk" : "Ukrainian",
      "ur" : "Urdu",
      "uz" : "Uzbek",
      "ug" : "Uighur",
      "vi" : "Vietnamese",
      "cy" : "Welsh",
      "yi" : "Yiddish",
      "yo" : "Yoruba",
      "" : "Unknown"
    };
  }
}

//
// fnc001: get languages list:
//
function ggtGetLanguageLocalByLanguageCode(strLanguageCode)
{
	var xEnum = ggtGetLanguageLocalByLanguageCodeEnum();
	return xEnum[strLanguageCode];
}

//
// fnc001: get languages list:
//
function ggtGetLanguagesList()
{
  var i, strret;
  strret = "$lg = array(<br />\n";
  for (i in google.language.Languages)
  {
    strret += "&nbsp;&nbsp;\"" + google.language.Languages[i] + "\" => \"" + i + "\",<br />\n";
  }
  strret += ")<br />\n";
  return strret;
}

//
// fnc001: get language constant by language code:
//
function ggtGetLanguageConstantByLanguageCode(languageCode)
{
  var languageConstant = 'unknown';
  var l;
  for (l in google.language.Languages)
  {
    if (google.language.Languages[l] == languageCode)
    {
      languageConstant = l;
      break;
    }
  }
  return languageConstant;
}

//
// fnc001: detect language local:
//
function ggtDetectLanguageLocal(strText, strDiv)
{
//
// use detected source language:
//
  var strTextNow;
//
  if(strisempty(strText))
  {
  	strTextNow = ggtGetText();
  }
  else
  {
  	strTextNow = strText;
  }
//
// detected language code may be out of the languages array lg():
//
  google.language.detect(strTextNow, function(result) {
    // If there wasn't an error in the request
    var strLangFrom;
    if (result.error) {
      strLangFrom = "";
    }
    else {
      strLangFrom = result.language;
      if(strLangFrom.match(/^zh/))
      {
      	strLangFrom = "zh";
      }
    }
    strLangFrom = ggtGetLanguageLocalByLanguageCode(strLangFrom);
    ajaxSetInnerHTMLIfExistent(strDiv, strLangFrom);
  });
  return true;
}

//
// fnc001: detect language local and show it in a specific div/span:
//
function ggtDetectLanguageLocalGgBox()
{
//
// use detected source language:
//
  var strText, strDiv;
//
	strText = imeGetqValue();
  strDiv = "spndetectlanguageggbox";
  return ggtDetectLanguageLocal(strText, strDiv);
}

//
// fnc001: translate direct to all by source from detected language:
//
function ggtTranslateDirectFromDetect2All(strText)
{
//
// use detected source language:
//
  var strTextNow;
//
  if(strisempty(strText))
  {
  	strTextNow = ggtGetText();
  }
  else
  {
  	strTextNow = strText;
  }
//
//alert("detected strTextNow=" + strTextNow);
//
//
//ggtStart(strTextNow, true);
//
// detected language code may be out of the languages array lg():
// this may send no message when error:
//
  google.language.detect(strTextNow, function(result) {
    // If there wasn't an error in the request
    var strLangFrom;
    if (result.error) {
      strLangFrom = "";
      //
      // Suspected Terms of Service Abuses.
      // Please see http://code.google.com/errors
      //
//alert("google.language.detect(): " + result.error.message);
      return false;
    }
    else {
      strLangFrom = result.language;
      if(strLangFrom.match(/^zh/))
      {
      	strLangFrom = "zh";
      }
    }
//alert("launch ggtTranslateDirectFrom2All(" + strLangFrom + ", " + strTextNow + "):");
    return ggtTranslateDirectFrom2All(strLangFrom, strTextNow);
  });
//
  return true;
}
//
// fnc001: translate direct to all by source from detected language:
//   Contents is gotten from an HTML element object.
//
function ggtTranslateDirectFromDetect2AllByObject(xobj)
{
//
  var strContents;
//
  strContents = domGetElementContentsByObject(xobj);
//alert("xobj=" + xobj + ", strContents=" + strContents);
  if(strContents == null)
  {
  	return false;
  }
  else
  {
  	return ggtTranslateDirectFromDetect2All(strContents);
  }
}
//
// fnc001: translate direct to all by source from detected language:
//   Contents is gotten from an HTML element object ID.
//
function ggtTranslateDirectFromDetect2AllById(strID)
{
	return ggtTranslateDirectFromDetect2AllByObject(
	 domGetElementById(strID));
}
//
// fnc001: translate direct to all by source from detected language:
//   Contents is gotten from an HTML element object ID.
//
function ggtDoByObject(xobj)
{
	return ggtTranslateDirectFromDetect2AllByObject(xobj);
}
//
// fnc001: translate direct to all by source from detected language:
//   Contents is gotten from an HTML element object ID.
//
function ggtDoO(xobj)
{
	return ggtDoByObject(xobj);
}
//
// fnc001: translate direct to all by source from detected language:
//
function ggtDoById(strID)
{
	return ggtTranslateDirectFromDetect2AllById(strID);
}

//
// fnc001: translate direct to all:
//
function ggtTranslateEn2All(strText)
{
  return ggtTranslateDirectFrom2All("en", strText);
}

//
// fnc001: translate from to all via English:
//
function ggtTranslateFrom2All()
{
//
  var iDiv;
//
  iDiv = 0;
//
  ggtStart("", true);
//
  kXhrRepeat = true;
  ggtTranslateFr2En();
//kXhrRepeat = true;
//
  return 1;
}

//
// fnc001: jacket translate:
//
function ggtDoTranslate()
{
	ggtClearAllResults();
	return ggtTranslate(null);
}
//
// fnc001: jacket translate:
//
function ggtDoTranslateLocalFr2En()
{
	ggtClearAllResults();
	return ggtTranslateLocalFr2En();
}
//
// fnc001: translate with source language detection:
//
function ggtDoTranslateDirectFromDetect2All()
{
	ggtClearAllResults();
	return ggtTranslateDirectFromDetect2All(null);
}
//
// fnc001: translate with the cbo source language:
//
function ggtDoTranslateDirectFrom2All()
{
  var strLangFrom = ggtGetLangFrom();
  if(ggtIsLangAuto(strLangFrom))
  {
	  return ggtDoTranslateDirectFromDetect2All(null);
	}
	else
  {
  	ggtClearAllResults();
	  return ggtTranslateDirectFrom2All(null, null);
	}
}
//
// fnc001: jacket translate:
//
function ggtDoTranslateFrom2All()
{
	ggtClearAllResults();
	return ggtTranslateFrom2All();
}

//
// fnc001: getGoogleResults:
//
function ggtFilterGoogleResults(response)
{
//var strRegex = new RegExp('<?php echo gcstGoogleTranslateResultsRegex; ?>');
//var strRegex = new RegExp("<div id=result_box dir=(\"ltr\"|\"rtl\")>([^<]*)</div>");
  var strObj = new String(response);
//var xarr = strObj.match(strRegex);

  var str1 = new String("<div id=result_box dir=\"ltr\">");
  var pos0 = strObj.indexOf(str1, 0);
  if(pos0 < 0)
  {
    str1 = "<div id=result_box dir=\"rtl\">";
    pos0 = strObj.indexOf(str1, 0);
  }
  if(pos0 < 0)
  {
    return "";
  }
  pos0 += str1.length;
  str1 = strObj.substr(pos0);
  var pos1 = str1.indexOf("</div>", 0);
  if(pos1 < 0)
  {
    return "";
  }
  else
  {
    return str1.substr(0, pos1);
  }
//
}

//
// fnc001: start:
//
function ggtStart(strText, kChronoIfSolid)
{
//
  var strTextNow;
//
  swStop();
 	iDivDone = 0;
//
  if(strisempty(strText))
  {
    strTextNow = ggtGetText();
  }
  else
  {
    strTextNow = strText;
  }
  //
  ggtSetSourceContents(strTextNow);
  //
  if(! strisempty(strTextNow))
  {
  	if(kChronoIfSolid)
  	{
      showDivPatience();
      swStart();
    }
  }
  return 1;
}

//
// fnc001: set source title:
//
function ggtSetSourceTitle(strLangFrom)
{
//
  var locSource, strLanguageConstant;
//
  if(locIsLangLocalFr())
  {
    locSource = "Source";
  }
  else if(locIsLangLocalCn())
  {
    locSource = "原文";
  }
  else
  {
    locSource = "Source";
  }
//
  if(strLangFrom != "")
  {
  	strLanguageConstant =
  	  ggtGetLanguageLocalByLanguageCode(strLangFrom);
    if(strLanguageConstant == "")
    {
    	strLanguageConstant = strLangFrom;
    }
  	locSource += ": " + strLanguageConstant;
  }
  else
  {
  	strLanguageConstant = "";
  }
//
  ajaxSetInnerHTMLIfExistent("spndetectlanguageggbox",
    strLanguageConstant);
  ajaxSetInnerHTMLIfExistent("divsourcetitle", locSource);
//
  return true;
}

//
// fnc001: set source contents:
//
function ggtSetSourceContents(strText)
{
	ajaxSetInnerHTMLIfExistent("divsource", strText)
	ajaxSetInnerHTMLIfExistent("spnqtitle", strText)
	document.title = strText + " =>" + locGetTagAutomaticTranslation();
  return true;
}

//
// fnc001: clear all results:
//
function ggtClearAllResults()
{
//
  var i;
//
  i = 0;
//
  while(ajaxSetInnerHTMLDivNo(i, "&nbsp;"))
  {
    i++;
  }
//
//swStop();
//
//strText = ggtGetText();
//
  ggtSetSourceContents("");
//
//if(strText != "")
//{
//  showDivPatience();
//  swStart();
//}
//
  return i;
}

//
// fnc001: clear all:
//
function ggtClearAll()
{
	ggtClearText();
	return ggtClearAllResults();
}
//
// load google APIs:
//
google.load("language", "1");
google.load("search", "1");

