// AJAX:
iDiv = 0;
kXhrRepeat = false;
xhr = new Array();

/*
 * fnc001: get form:
 */
function getForm()
{
  return document.forms["frmText"];
}

/*
 * fnc001: get element X of the form:
 */
function getElementX(strX)
{
	var frm;
//
	frm = getForm();
  return frm.elements[strX].value;
}

/*
 * fnc001: getText:
 */
function getText()
{
  return getElementX("text");
}
/*
 * fnc001: setInnerHTML: see ajax.js.
 */
/*
function setInnerHTML(strDiv, strText)
{
//
  var varObj
//
  varObj = document.getElementById(strDiv);
//
  if(varObj)
  {
    varObj.innerHTML = strText;
    return true;
  }
  else
  {
    return false;
  }
//
}
 */

/*
 * fnc001: setInnerHTMLDivNo:
 */
function setInnerHTMLDivNo(iDivNo, strText)
{
  return setInnerHTML("div2fill" + iDivNo, strText);
}

/*
 * fnc001: translate from a given source lang:
 */
function doSubmitOnKeydown(kAjax)
{
//
	var code = window.event ? window.event.keyCode : window.Event['which'];
//
	if(code == 13)
	{
    var kHasModifier = window.event ? (window.event.shiftKey || window.event.altKey || window.event.ctrlKey) :
      window.Event.modifiers != 0;
//
    if(kHasModifier)
    {
	  	return true;
    }
    else
    {
    	if(kAjax)
    	{
        clearAll();
    		translateDirectFrom2All(null, null);
    	}
    	else
    	{
        document.forms["frmText"].elements["fr2all"].click();
    	}
	  	return false;
    }
	}
	else
	{
		return true;
  }
}

/*
 * fnc001: test if a button named strX is pressed:
 */
function isButtonXPressed(strX)
{
  var strX;
  strX = getElementX(strX);
//!!!KEYMODIF!!!
//alert(strX);
  return (strX != null);
}

/*
 * fnc001: translate from the input source lang:
 */
function getLangFrom()
{
  var i;
  var strLangpair, strLangFrom;
//
  strLangpair = getElementX("langpair");
  i = strLangpair.indexOf("|");
  strLangFrom = strLangpair.substr(0, i);
//
  return strLangFrom;
}

/*
 * fnc001: get Language Name by Lang:
 */
function getLangNameByLang(strLang)
{
  var i, n;
//
  n = lg.length;
//
  for(i = 0; i < n; i++)
  {
    if(strLang == lg[i])
    {
      return lgName[i];
    }
  }
//
  return strLang;
}


/*
 * fnc001: fill Lang Titles:
 */
function fillLangTitles(strLang)
{
  var i, j, n;
//
  n = lg.length;
  j = 0;
//!!!KEYMODIF!!!
//alert(strLang);
//
  for(i = 0; i < n; i++)
  {
    if(strLang != lg[i])
    {
      setInnerHTML("divlang" + j, lgName[i]);
      j++;
    }
  }
//
  return strLang;
}

/*
 * fnc001: get Language by Langpair:
 */
function getLang1ByLangpair(strLangpair)
{
  var i;
  var strLangFrom;
  strLangFrom = strLangpair;
  i = strLangFrom.indexOf("|");
  strLangFrom = strLangFrom.substr(0, i);
//
  return strLangFrom;
}
/*
 * fnc001: get Language Name by Langpair:
 */
function getLangName1ByLangpair(strLangpair)
{
  var strLangFrom;
  strLangFrom = getLang1ByLangpair(strLangpair);
//
  return getLangNameByLang(strLangFrom);
}

/*
 * fnc001: translate from the input source lang:
 */
function translateLangpair(strLangpair, strText)
{
  var strLp, strURLArgs;
//
  if(strLangpair == null)
  {
    strLp = getElementX("langpair");
  }
  else
  {
    strLp = strLangpair;
  }
//
  if(strText == null)
  {
    strURLArgs = getText();
  }
  else
  {
    strURLArgs = strText;
  }
//
  if(strText == "")
  {
    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 translateFrTo(strLangFrom, strLangTo, strText)
{
  var strLangpair;
//
  strLangpair = strLangFrom + "|" + strLangTo;
//
  return translateLangpair(strLangpair, strText);
}

/*
 * fnc001: translate from the input source lang:
 */
function translate(strText)
{
  return translateLangpair(null, strText);
}
/*
 * fnc001: translate from the source lang fr:
 */
function translateLocalFr2En()
{
//
//alert(top.frames.fraDeutch.location.href);
//
  var strLangFrom = getLangLocalFrom();
//
// French to English:
//
  return translateFrTo(strLangFrom, "en");
}
/*
 * fnc001: translate from the source lang fr:
 */
function translateFr2En()
{
//
//alert(top.frames.fraDeutch.location.href);
//
  var strLangFrom = getLangLocalFrom();
//
// French to English:
//
  return translateFrTo(strLangFrom, "en");
}

/*
 * fnc001: translate direct to all:
 */
function translateDirectFrom2All(strLangFrom, strText)
{
//
  var i, n;
//
  iDiv = 0;
//!!!KEYMODIF!!!
//alert(strLangFrom);
//
  if(strLangFrom == null)
  {
//  strLangFrom = getLangFrom();
    strLangFrom = getLangLocalFrom();
  }
//!!!KEYMODIF!!!
//alert(strLangFrom);
//
//
  n = lg.length;
//
  for(i = 0; i < n; i++)
  {
    if(strLangFrom != lg[i])
    {
      translateFrTo(strLangFrom, lg[i], strText);
      iDiv++;
    }
//
  }
//
  fillLangTitles(strLangFrom);
//
  return n;
}

/*
 * fnc001: translate direct to all:
 */
function translateEn2All(strText)
{
  return translateDirectFrom2All("en", strText);
}

/*
 * fnc001: translate from to all via English:
 */
function translateFrom2All()
{
//
  iDiv = 0;
//
  kXhrRepeat = true;
  translateFr2En();
//kXhrRepeat = true;
//
  return 1;
}

/*
 * fnc001: jacket translate:
 */
function doTranslate()
{
	clearAll();
	return translate(null);
}
/*
 * fnc001: jacket translate:
 */
function doTranslateLocalFr2En()
{
	clearAll();
	return translateLocalFr2En();
}
/*
 * fnc001: jacket translate:
 */
function doTranslateDirectFrom2All()
{
	clearAll();
	return translateDirectFrom2All(null, null);
}
/*
 * fnc001: jacket translate:
 */
function doTranslateFrom2All()
{
	clearAll();
	return translateFrom2All();
}

/*
 * fnc001: getGoogleResults:
 */
function filterGoogleResultsRegex(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);
//
  if(xarr)
  {
    if(xarr.length > 1)
    {
      return xarr[2];
    }
    else
    {
      return "";
    }
  }
  else
  {
    return "";
  }
}

/*
 * fnc001: getGoogleResults:
 */
function filterGoogleResults(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: clear all:
 */
function clearAll()
{
//
  var i, strText;
//
  for(i = 0; i <= iDiv; i++)
  {
    xhr[i] = null;
    setInnerHTMLDivNo(i, "&nbsp;");
  }
//
  iDiv = 0;
  swStop();
//
  strText = getText();
//
  if(strText != "")
  {
//
    setInnerHTML("divsource", strText + " =>");
//
    showDivPatience();
    swStart();
//
  }
//
  return i;
}

/*
 * fnc001: handle HTTP response:
 */
 function handleHttpResponse()
 {
//
  var i, nWaitFor, kXhrRepeatEntry;
//
  kXhrRepeatEntry = kXhrRepeat;
  nWaitFor = iDiv + 1;
//
  for(i = 0; i <= iDiv; i++)
  {
    if(xhr[i])
    {
//    if(xhr[i].readyState == 4 && xhr[i].status == 200)
      if(xhr[i].readyState == 4)
      {
        /*
         * xhr.responseXML: XML
         * xhr.responseText: text
         * var response = cleanXML(xhr.responseXML.documentElement);
         */
         var strText;
         var response = xhr[i].responseText;
         var istatus = xhr[i].status;
         /*
          * remove indicator:
          */
         /*
    	   hideDivPatience();
         swStop();
          */
        /*
         * remove item:
         */
         xhr[i]= null;
         nWaitFor--;
        //var items = response.getElementsByTagName("item");
        /*
         * hide patience message:
         */
    	  hideDivPatience();
/*
  	    swStop();
 */
        /*
        var n = items.length;
        var i;
        var strHtml = "";
        */
        //
        //alert("count = " + n);
        //document.write(response);
        //alert(response);
        //
         if(raw)
         {
           strText = response;
         }
         else
         {
           strText = filterGoogleResults(response);
         }
         if(kXhrRepeat)
         {
           kXhrRepeat = false;
           if(strText != "")
           {
             clearAll();
             translateEn2All(strText);
           }
         }
//
         if(strText == "")
         {
           strText = "&nbsp;";
         }
//
//       alert(strText + " i=" + i);
//
         setInnerHTMLDivNo(i, strText);
//
      }
    }
    else
    {
      nWaitFor--;
    }
  }
//
  if((! kXhrRepeatEntry) && (nWaitFor <= 0))
  {
    swStop();
  }
}

/*
 * fnc001: doXhrGet():
 */
function doXhrGet(strURL)
{
//
  xhr[iDiv] = getXhrObject();

/*
 * xhr OK:
 */
  if(xhr[iDiv])
  {
/*
 * set callback:
 */
    xhr[iDiv].onreadystatechange = handleHttpResponse;
/*
 * reading:
 */
    xhr[iDiv].open("GET", strURL, true);
/*
 * go request:
 */
//
//  xhr[iDiv].setRequestHeader("Content-Type","application/x-www-form-urlencoded");
//  xhr[iDiv].setRequestHeader("Content-Encoding", "latin1");
    xhr[iDiv].setRequestHeader("Content-Encoding", "utf-8");
    //xhr[iDiv].setTimeouts(1);
    xhr[iDiv].send(null);
    //swStart();
  }
  else
  {
    window.location.href = strURL;
  }
}

/*
 * fnc001: doXhr():
 */
function doXhr(strURLArgs)
{
//
  var strURLgg;
//
  strURLgg = "http://translate.google.com/translate_t";
  xhr[iDiv] = getXhrObject();
/*
 * xhr OK:
 */
  if(xhr[iDiv])
  {
/*
 * set callback:
 */
    xhr[iDiv].onreadystatechange = handleHttpResponse;
/*
 * open:
 */
  	//!!!KEYMODIF!!!
    //alert(strURLgg + "?" + strURLArgs);
 /*
  * security blocking here, pending page:
  */
//  xhr[iDiv].open("POST", strURLgg, true);
    xhr[iDiv].open("POST", "ggtlocal.php", true);
/*
 * go request:
 */
//
    xhr[iDiv].setRequestHeader("Content-Type","application/x-www-form-urlencoded");
//  xhr[iDiv].setRequestHeader("Content-Encoding", "latin1");
    xhr[iDiv].setRequestHeader("Content-Encoding", "utf-8");
    try {
      xhr[iDiv].send(strURLArgs);
    }
    catch(e) {
    	alert("Cannot load " + strURLgg + ", " + e);
    }
    //swStart();
  }
  else
  {
    window.location.href = strURL;
  }
}
