var xmlhttp;
var lastLookup=null;
var lastSearch=null;
var hispeed=true;
var omcj="onmouseover";
var tbx=null;
var lookUpLang=null;
var headerOffset=1;
var bufTop=0;
var bufLeft=0;
var doc;

function transliterate(t,l)
{
	
	//lookupInit(document.forms[0].tbpin,document.forms[0].keylang);
	doc=document;
	loadTransLit("/LSearch/XLit?l=" + document.forms[0].keylang.value +"&q="+escape(document.forms[0].tbpin.value));
	
	
}
function lookupInit(t,l)
{
	tbx = t; //tbpin/tbox
	lookUpLang = l; //keylang
	doc = document;
      bufTop = tbx.offsetTop;
      bufLeft=tbx.offsetLeft;
      var elm2=tbx.offsetParent;
      while(elm2!=null && elm2!=tbx)
      {
         bufLeft+=elm2.offsetLeft;
         bufTop+=elm2.offsetTop;
         elm2=elm2.offsetParent;
      }
}
function relocateTransliterator(cell)
{
   wList.saveLocation(tbx);
   cell.style.left= parseInt(wList.curLocX);
   cell.style.top = parseInt(wList.curLocY);
}

function hideTransliterator(cellId)
{
   var cell = doc.getElementById(cellId);
   if (cell != null && cell.innerHTML.length > 0) {
   	cell.innerHTML = "";
   	var pr = doc.getElementById("chpreview");
   	if (pr != null) {
   		pr.style.visibility = "hidden";
   		pr.innerHTML = "";
   	}
	return true;
   }
   return false;
}

function loadURL(url,handler)
{
	
	xmlhttp=null;
	if (window.XMLHttpRequest)
	{
	  xmlhttp=new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{
	  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
	}
	if (xmlhttp!=null)
	  {
	  	
	  xmlhttp.onreadystatechange=handler;
	  xmlhttp.open("GET",url,true);
	  xmlhttp.send(null);
	  
	  }
	else
	  {
	  alert("Your browser does not support XMLHTTP.");
	  }
	
}
function loadTransLit(url)
{
  loadURL(url,checkData);
}
function checkData()
{
  if (xmlhttp.readyState==4)
  {
  // if "OK"
    if (xmlhttp.status==200)
    {
       showChars(xmlhttp.responseText,lastSearch,true);
    }
    else
    {
		lastSearch=null;
      alert("Problem reading data");
    }
  }
}

function showChars(rsText,searchWord,async)
{
	var tmpTxt;
	//alert(rsText);
	if(rsText!=null && rsText.length>0)
	{
		if(searchWord!=null)
		   searchWord.setxlit(rsText);
		
	      //var s = new String(rsText);
		  //var s2 = s.split("\n",2);
		 //if(s2!=null && s2.length>1 && s2[1]!="B")
 		 //   showAlpha(rsText,s2[0],searchWord);
		    showAlpha(rsText,searchWord);
	}
	if (searchWord != null && async==true) {
		tmpTxt = getSearchWord();
		if (tmpTxt != null &&
		(tmpTxt.getwnum() != searchWord.getwnum() ||
		  tmpTxt.text() != searchWord.text())) 
			loadSearch(tmpTxt);
		lastSearch = null;
	}
	shadowText=tbx.value;
}


function lookupChar(ev)
{
    if(tbx==null)
       return;

    if (tbx.value.length >= 2) {
		findText();
	}

}

function findText()
{
  	if(lastSearch==null)
	{
		lastSearch = getSearchWord();
		loadSearch(lastSearch);
	}

}

function loadSearch(qry)
{
 var txt = null;
 
    if(qry!=null && qry!='undefined')
        txt = qry.text();
	
	if(txt!=null)
	{
		qry.setlang(lookUpLang.value);
       loadTransLit("/LSearch/XLit?l=" + lookUpLang.value +"&q="+escape(txt));			
	}
}


function getSearchWord()
{
var w=null;
	if (tbx.value.length >= 2) {
			w = wList.curword();
	}
  
	return w;
}

function getSearchText()
{
	if(tbx.value.length>=2)
	   return tbx.value;
	return null;
}



function setPreview(direction,tab,line,ra,sword)
{
	var tr,td;
	var i;
	
	 var s="";
	//var rline = ra.split("\t");
	 if (sword!=null && sword.finaltext() != null) 
	 	s = sword.finaltext();
	 else {
	 	var itxt;
	 	itxt = new Array(line.length);
        for(i=0;i<line.length;i++)
   	        itxt[i] = line[i];
		if(sword!=null)	
		   sword.setfinal(itxt);
		for (i = 0; i < itxt.length; i++) 
			s += line[i];
	 }
	 var tr= doc.createElement("TR");
	 td = doc.createElement("TD");
	 td.setAttribute("id","finaltext");
	 td.setAttribute("colspan",""+line.length);
	 td.className = "preview";
	 if (direction == 'r2l') {
	 	td.style.direction = "rtl";
		if(bIE)
		  td.style.textAlign = "right";
	 }
	 else {
	 	td.style.direction = "ltr";
	 	td.style.textAlign = "left";
	 }	   
	 if(td!=null)
	    td.innerHTML= s;
	 tr.appendChild(td);
	 tab.appendChild(tr);
}

function writeL2R(tr,line)
{
	var i;
	var td;
	
	 for(i=0;i<line.length;i++)
	 {
		td = doc.createElement("TD");
		tr.appendChild(td);
		td.innerHTML = line[i];
		if (line[i].length > 0) {
			td.setAttribute(omcj, "ei(this," + i + ")");
			td.className="kb";
		}
		else
		    td.className = "ekb";
	 }
	
}
function writeR2L(len,tr,line){
	 var i,k; //,len;
	 var td; 

	 for(k=len;k>line.length;k--) //left pad empty cells
	 {
	 	td=doc.createElement("TD");
		td.setAttribute("style","width:0px;border:0");
		tr.appendChild(td);
	 }
	 
	 for(i=0,k=line.length-1;i<line.length;i++,k--)
	 {
	 	td=doc.createElement("TD");
		tr.appendChild(td);
		td.innerHTML=line[k];
		if(line[k].length>0)
		{   td.setAttribute(omcj, "ei(this,"+k+")");
			td.className="kb";
		}
		else
		    td.className = "ekb";
	 }

}

function writeGlyph(tr,chars,first)
{
	var i,j;
	var td;
	var itab,itr,itd;
	var itab;
	var itr;

	
    var cols;
    var icols = chars.length-first;
	var ic,l,k;


	for (ic = 0; ic < icols; ic++) {
		k=ic+first;		
		l=chars[k].length;
		if(l==0)
		   continue;
		itab=doc.createElement("TABLE");
		itr = doc.createElement("TR");
	    itab.className = "transkeyboard";
	 	td=doc.createElement("TD");
		td.className="cjklist";
		tr.appendChild(td);
		td.appendChild(itab);
		itab.appendChild(itr);
		//alert("l="+l);
	    //alert(chars[k]);
		cols= Math.ceil(l/15);
		
		for (i = 0, j = 0; i < l; i++) {
			if (j == cols) {
				itr = doc.createElement("TR");
				itab.appendChild(itr);
				itr.className = "transkeyboard";
				j = 0;
			}
			//if (chars[k].charAt(i) != null && chars[k].charAt(i).length > 0) {
				itd = doc.createElement("TD");
			    itr.appendChild(itd);

				itd.innerHTML = chars[k].charAt(i);
				itd.setAttribute(omcj, "ei(this," + ic + ")");
				itd.className="kb";
				j++;
			//}
		}
	}
}

function showAlpha(rsText,sword)
{
//alert(rsText);

	 var sa = rsText.split("\n");
	 if(sa==null || sa.length<2 || sa[1]=="B")
	   return;

	 var cell = doc.getElementById("charlist");
	 cell.innerHTML="";
//alert("0");
	 var tab = doc.createElement("TABLE");
	 var tr;
	 var r,i,j=0;
	 var first = 1;
	 var chars = new Array();
     var direction=sa[0]; 
//alert("1");
	 wList.displaytext();
     tab.className="transkeyboard";
	 tab.setAttribute("align","left");
	 var line;
	 
	 first+=headerOffset;


	 if (direction == 'glyph') {
	 	
	 	for(r=first;r<sa.length;r++)
		{
			chars[r-first]=sa[r].charAt(first);
		}
	 	setPreview(direction,tab, chars, sa[first - 1], sword);

		tr = doc.createElement("TR");
		tr.setAttribute("id", "0");
		tr.setAttribute("class", "kb");
		tab.appendChild(tr);

		writeGlyph(tr, sa,first);
	 }
	 else {
	     for (r = first; r < sa.length; r++) {
		 	line = sa[r].split('\t');
			chars[r-first]=line;
		 }
		 if (chars.length > 0) {
		 	setPreview(direction,tab, chars[0], sa[first - 1], sword);
			for (r = 0; r < chars.length; r++) {
				tr = doc.createElement("TR");
				tr.setAttribute("id", "" + r);
				tr.setAttribute("class", "kb");
				tab.appendChild(tr);
				if (direction == 'l2r') 
					writeL2R(tr, chars[r]);
				else 
					writeR2L(chars[0].length,tr, chars[r]);
			}
		 }
	}
	//alert("2");
	 relocateTransliterator(cell);
	// alert("3");
	 if(tab.outerHTML!=null && tab.outerHTML!='undefined')
	    cell.innerHTML=tab.outerHTML; //IE
	 else
	    cell.appendChild(tab); //firefox and DOM compliant
	// alert("4");  
}

