var isIE;
var isFF;
var req;
var names;
var target;
var corpus="";
var totel=0;
var k=-1;
var i=null;
var autorow;
var arr =null;
var pre="";
var temp_target;

window.onresize=Mb; 

function getElementY(element){
	var targetTop = 0;
	if (element.offsetParent) {
		while (element.offsetParent) {
			targetTop += element.offsetTop;
            element = element.offsetParent;
		}
	} else if (element.y) {
		targetTop += element.y;
    }
	return targetTop+7;
}
function getElementX(element){
        var targetLeft = 0;
        if (element.offsetParent) {
                while (element.offsetParent) {
                        targetLeft += element.offsetLeft;
            element = element.offsetParent;
                }
        } else if (element.x) {
                targetLeft += element.x;
    }
        return targetLeft+10;
}
function nc(f)
{
	if(f.createTextRange){
		var u=f.createTextRange();
		u.moveStart("character",f.value.length);
		u.select()
	}else if(f.setSelectionRange){
		f.setSelectionRange(f.value.length,f.value.length)
	}
}

function init() {
    target = document.getElementById("complete-field");
    
    var menu = document.getElementById("auto-row");
     
    autorow = document.getElementById("menu-popup");
    var ea=1;
	var Ma=1;
    autorow.style.top = getElementY(menu) + "px";
    autorow.style.left = getElementX(target) + "px";  
    	autorow.style.borderRight="white "+ea+"px solid";
	autorow.style.borderLeft="white "+ea+"px solid";
	autorow.style.borderTop="white "+Ma+"px solid";
	autorow.style.borderBottom="white "+Ma+"px solid"; 
}
function Mb(){
	var menu = document.getElementById("auto-row");
	autorow.style.top = getElementY(menu) + "px";
    	autorow.style.left = getElementX(target) + "px";



}
function initRequest(url) {
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
		isFF = true;
    } else if (window.ActiveXObject) {
        isIE = true;
        req = new ActiveXObject("Microsoft.XMLHTTP");

    }
}
function doCompletion(e) {
   var n = e.keyCode;
   
   if(n==40 ||n==38 || n == 37 || n == 39){
	Nb(n);	   
	return;
   }
   if(n==13||n==3 ){
        var t = arr[k];	
	clearTable();
	return;
	
   }
   if( n == 32 ){
	   return;
   }
//   temp_target = target.value.replace(/^\s+|\s+$/, '');   
   temp_target = target.value; 

    if (!names) 
	names = document.getElementById("names");
    	clearTable();
    if (!document.all){
	    autorow.appendChild(names);
    }

	try{
	//temp_target = temp_target.trim();
	//temp_target = target_target.replace("pi","PI");
	compute(temp_target);
	if(eq_res!="undefined" && eq_res!="= undefined" &&temp_target.length!=0){
		eq_res="= "+eq_res;
		appendEmployee(eq_res,"", 0);
		
	}
	
	}catch(Exception){
	}

   if (document.all){
   //var url = "/sansarn-look/PredictIE?key=" + temp_target + "&corpus=" + corpus;
   var url = "http://www.sansarn.com/2007/PredictIE?key=" + temp_target + "&corpus=" + corpus;
   }else{
    //var url = "/sansarn-look/Predict?key=" + temp_target + "&corpus=" + corpus;
  	var url = "http://www.sansarn.com/2007/Predict?key=" + temp_target + "&corpus=" + corpus;
    }
    //corpus="";
   
    initRequest(url);
    
    req.onreadystatechange = processRequest;
    
    req.open("GET", url, true);
    
    req.send(null);
    pre = target.value;
}
function Nb(pa)
{

if(pa==40){
xa(k+1);
return false
}else if(pa==38){
xa(k-1);
return false
}else if(pa==13||pa==3){
return false
}
return true
}

function xa(D){

if(!names||totel<=0)return;
if(D>=totel){
	D=totel-1
}
if(k!=-1&&D!=k){
 	     
	//i=names.rows(k);
	if (!document.all){
		i=names.childNodes[k];
	}else{
		i=names.rows(k);
	}
	i.className="h";
        
}
if(D<0){
	k=-1;
	target.value=pre;
        target.focus();
        
	return
}
k=D;

if (document.all){
	i=names.rows(D);
}else{
	//i=names.item(0);
	i=names.childNodes[D];
}
target.value=pre + arr[D];
i.className="o";


}
function processRequest() {
    if (req.readyState == 4) {
        if (req.status == 200) {
          parseMessages();
        } else if (req.status == 204){
            
         //   clearTable();
        }
    }
}

function parseMessages() {
     
    if (!names) names = document.getElementById("names");
	clearTable();
    if (!document.all){
	    autorow.appendChild(names);
    }
   // alert(names);
	var result = req.responseXML.getElementsByTagName("results")[0];
       totel = result.childNodes.length;
       k=-1;  
       arr = new Array(totel);
        var cnt = 0;
//eval(parsen(temp_target));
//alert(resss);
//appendEmployee(target.value,0, 0);

     for (loop = 0; loop < result.childNodes.length; loop++) {
       
	    var predict = result.childNodes[loop];
       
        var fullword = predict.getElementsByTagName("fullword")[0];
         
        var fillword = predict.getElementsByTagName("fillword")[0];
          
        var score = predict.getElementsByTagName("scoreword")[0];
        arr[loop] = fillword.childNodes[0].nodeValue;
        
        appendEmployee(fullword.childNodes[0].nodeValue,fillword.childNodes[0].nodeValue, score.childNodes[0].nodeValue);
       
    }
}

function clearTable() {
    if (names) {
      while(names.childNodes.length>0){
	  names.removeChild(names.childNodes[0]);
      }
	if (!document.all){	
		while(autorow.childNodes.length>0){
        		autorow.removeChild(autorow.childNodes[0]);
      		}
	}
	//autorow.style.Height=0;
        //var aa = names.offsetHeight;
      /*for (loop = names.childNodes.length -1; loop >= 0 ; loop--) {
        names.removeChild(names.childNodes[loop]);
      }*/
    }
}
function eventAdder(objAttrib,handler,addFunction){
     
   if ((!document.all)&&(document.getElementById)){
       objAttrib.setAttribute(handler,addFunction);
   }    
   //workaround for IE 5.x
   if ((document.all)&&(document.getElementById)){
       objAttrib[handler]=new Function(addFunction);
   }
}
function sayhi(fillword){
 target.value =  target.value.replace(/^\s+|\s+$/, '') +  fillword.replace(/^\s+|\s+$/, '');
 clearTable();
 target.focus();
 
}
function selCorpus(){
    corpus=document.getElementById("corpus-file").value;
    target.focus();
}
function appendEmployee(firstName,lastName,employeeId) {
    var firstNameCell;
    var lastNameCell;
     
 
 
    if("Microsoft Internet Explorer" == navigator.appName){
			row = names.insertRow(names.rows.length);
        	nameCell = row.insertCell(0);
	}else if("Nescape" == navigator.appName){
        row = document.createElement("tr");
        nameCell = document.createElement("td");
        row.appendChild(nameCell);
        names.appendChild(row);

	}else {
			row = names.insertRow(names.rows.length);
        	nameCell = row.insertCell(0);
	}
    
    row.setAttribute("border", "0");
    eventAdder(nameCell ,"onmouseover", "this.className='mouseOut';");
    eventAdder(nameCell,"onmouseout", "this.className='mouseOver';");
    eventAdder(nameCell,"onclick","sayhi(\""+lastName+"\")");
    

    nameCell.setAttribute("border", "0");
    var linkElement = document.createElement("a");
    linkElement.setAttribute("style", "text-decoration: none;font-size:14px "); 
    //linkElement.setAttribute("href", "" );
    var nameFontElement = document.createElement("font");
    //nameFontElement.setAttribute("size", "+1");
    nameFontElement.setAttribute("color", "black");
    nameFontElement.appendChild(document.createTextNode(firstName));
    linkElement.appendChild(nameFontElement);
    nameCell.appendChild(linkElement);
}


function compute(kk) {
	var key=kk;
	var p=key.search(/[^ ]/); /* avoid leading spaces */
	if (key.charAt(p)=="?") {
		eq_res=key.substr(p+1);
		newWindow=window.open(_path+eval("_"+eq_res));
		}
	else {
      	with(Math) {
               eq_res = eval(parsen(kk))  /* core evaluation function */
       }
    }
}

/* Additional functions */

function round2(n,p) {   /* round number n to decimal point p */
        with(Math) {
        var a = abs(p);
        var m = 0;
        if ( p<0 ) {
                m = pow(10,a); 
                return round(n*m)/m }
        else {
                m = pow(10,p);
                return round(n/m)*m }
        }
}

function loggamma(x)  { /* log gamma */
    with(Math) {
        var v=1;
        var w=0;
        var z=0;
        while ( x<8 ) { v*=x; x++ }
        w=1/(x*x);
        return ((((((((-3617/122400)*w + 7/1092)*w
         -691/360360)*w + 5/5940)*w
         -1/1680)*w + 1/1260)*w
         -1/360)*w + 1/12)/x + 0.5 * log(2*PI)-log(v)-x+(x-0.5)*log(x) ;
} }


function gamma(x) {  /* gamma */
    with(Math) {
        if ( x <= 0 ) {
            if (abs(x)-floor(abs(x))==0 )
                return "ComplexInfinity" ;
            else return PI/( sin(PI*x) * exp( loggamma(1-x) ) );
            }
        else 
            return exp(loggamma(x)) ;
} }

function factorial(n) {  /* factorial */
  with(Math) {
  if (n<0)  /* if negative */
  	return gamma(n+1);
  else if ((n == 0) || (n == 1))
    return 1;
  else if (abs(n)-floor(abs(n))==0 ) /* if positive integer */
    return n * factorial(n-1) ;
  else         /* if non-integer */
    return gamma(n+1);
} }

function findroot(expr, x)  /*  Newton Method */
{
	var i,j;
	var h, fx, df, x_prev, fx_prev, s, expr0;
	var tolerance, overflow;
	
	with(Math) {
	tolerance = 1e-15;
	overflow = 500; /* loop overflow */

	if (expr.search(/==/) > -1) {
		s=expr.split("==");
		expr0=s[0]+"-"+s[1];}
	else {
		expr0=expr;
	};

	eval('function f(x) {with(Math){return '+expr0+'}}'); /* import equation */
//document.open()
	fx = f(x);
	j = 0;
	while (abs(fx)> tolerance) {
		df = f(x + fx) - fx;  h = fx * fx / df;
		x_prev = x;  fx_prev = fx;  i = 0; j++;
		do {
			x = x_prev - h;  fx = f(x);  h /= 2;  i++; j++;
			if (j>overflow) {return "Loop Overflow"}
//document.write(i+'  '+x+'  '+fx+'<br>');
		} while (abs(fx) > abs(fx_prev));
		if ((i == 1) && (x == x_prev)) break;
	}
	return x;
} }

function error_handler(msg, url, line) /* still try and error */
{
    if (in_their_code)
    {
        OUT = 'Error: "' + msg + '"';
        expr[++cur_expr] = prev = OUT;
        return true;    // I've handled it
    }
    else
        return false;   // my error -- let browser handle it
}
