var r1=new Array();
var r2=new Array();
var r3=new Array();
var r4=new Array();
var r5=new Array();
var r6=new Array();
var r7=new Array();
var r8=new Array();
var r9=new Array();
var r10=new Array();
var r11=new Array();
var r12=new Array();
var r13=new Array();
var r14=new Array();
var r15=new Array();
var r16=new Array();

var dltmp=new Array();//temporary dl
var chars;//2chrs as index
var selnum=0;//dl selection index
var obj;//input
var dlkey;//dl index (sql num.)
var dlmode=0;//0,1,2 -> Begin with, Contain, End with.
var dlwmemo;
var dlevalblur="";

// predefined columns widths for table / datas length for each column - added by rno on 2008-03-28
var dlwcols=new Array();
dlwcols[1]=new Array(0,22,22);
dlwcols[2]=new Array(0,30);
dlwcols[3]=new Array(0);
dlwcols[4]=new Array(0);
dlwcols[5]=new Array(0);
dlwcols[6]=new Array(0);
dlwcols[7]=new Array(0);
dlwcols[8]=new Array(0);
dlwcols[9]=new Array(0);
dlwcols[10]=new Array(0,22,22);
dlwcols[11]=new Array(0);
dlwcols[12]=new Array(0);
dlwcols[13]=new Array(0,17,22);
dlwcols[14]=new Array(0);
dlwcols[15]=new Array(0);
dlwcols[16]=new Array(0);

function dlini(o,key){
	obj=o;
	dlkey=key;//register dl key
	chars="";//clear
	dltmp=new Array();
	// PROTOTYPE OBSERVE //
	Event.stopObserving(o.id, 'keyup', dlu);
	Event.stopObserving(o.id, 'keydown', dld);
	Event.observe(o.id, 'keyup', dlu, false);
	Event.observe(o.id, 'keydown', dld, false);
	// POSITION
	var offset=Position.cumulativeOffset(o);
	$("ddn").innerHTML="";
	$("ddn").style.left=offset[0]+(Prototype.Browser.IE?2:0);
	$("ddn").style.top=offset[1]+(Prototype.Browser.IE?17:19);
	$("ddn").style.width=obj.style.width;
	dlwmemo=obj.style.width;
	dlwmemo=dlwmemo.split("px").join("");
	o.select();
	make_dl_eval_onblur(o);
	compute();
}

var url="http://"+window.location.hostname+"/liner2/dlist/get_dynlist.php";
if (window.location.hostname=="192.168.0.101") var url="http://192.168.0.101/liner2/dlist/get_dynlist.php";

function getlist(){

	if(dlmode==0){
		chars=obj.value.substring(0,2);
		if(dlkey == undefined) return;
		if(eval("r"+dlkey+"[chars];"))return;
	}else{
		chars=obj.value;
	}

	var myAjax = new Ajax.Request(url,{
		method: 'post', 
		parameters: '&o='+chars+'&key='+dlkey+'&mode='+dlmode, 
		onComplete: make
	});
}

function make(xhr){//charge et cache les données
	if(xhr.status==404){alert("404 : "+url);return;}
	if(!xhr.responseText){
		var dats=new Array();
	}else{
		var dats=xhr.responseText.split("\n");
	}
	var tmp=new Array();
	for(i=0;i<dats.length;i++)tmp[i]=dats[i].split("\t");
	
	if(dlmode==0){
		eval("r"+dlkey+"[chars]=tmp;");
	}else{
		dltmp=tmp;
	}
	compute();
}

// #44304 - 22Dec2011 - JMabulay - Start
var arrSpecialChar = new Array();
arrSpecialChar['c']= 'ç';
var globalStrWithSpecialChar = "";
// #44304 - 22Dec2011 - JMabulay - End

function compute(){//generate droplist depending of the input value
	
	//if(chars.length<2)return false;
	//DATAS

	if(dlmode==0){
		if(!eval("r"+dlkey+"[chars];"))return false;
		var rlen=eval("r"+dlkey+"[chars].length;");
		if(rlen==0)return false;

		var str=obj.value.toLowerCase();
		var strln=obj.value.length;

		dltmp=new Array();
		for(i=0;i<rlen;i++){
			//var compare=r1[chars][i][1].substring(0,strln).toLowerCase();
			var compare=eval("r"+dlkey+"[chars][i][1].substring(0,strln).toLowerCase();");
			var compare2=eval("r"+dlkey+"[chars][i][1].substring(0,strln+8).toLowerCase();"); // Added by Renaud on 2008-02-13 : to allow "order / " vessels
			//if(compare==str||compare2=="order / "+str)dltmp[dltmp.length]=eval("r"+dlkey+"[chars][i];"); // Commented out #44304 - 22Dec2011 - JMabulay - Start
			
			
			// #44304 - 22Dec2011 - JMabulay - Start
			// 1. Get the last key. 
			// 2. Compare it to the array of arrSpecialChar
			// 3. If found, include it in the display

			inputKey = str.substring(str.length - 1 , str.length);
			strSubstring = str.substring(0 , str.length - 1);
			strWithSpecialChar = strSubstring + arrSpecialChar[inputKey];
			if(arrSpecialChar[inputKey]){
				inputKey = arrSpecialChar[inputKey];
			}
			
			if(compare==str || compare2=="order / "+str || globalStrWithSpecialChar == compare)
			{				
				dltmp[dltmp.length]=eval("r"+dlkey+"[chars][i];");
			}
			else if( strWithSpecialChar == compare )
			{ 
				globalStrWithSpecialChar = strWithSpecialChar;
				dltmp[dltmp.length]=eval("r"+dlkey+"[chars][i];");
			}
			else if( (globalStrWithSpecialChar + inputKey).substring(0, str.length) == compare)
			{
				globalStrWithSpecialChar = (globalStrWithSpecialChar + inputKey).substring(0, str.length);
				dltmp[dltmp.length]=eval("r"+dlkey+"[chars][i];");
			}				
			// #44304 - 22Dec2011 - JMabulay - Start			
		}
	}else{
		//mode "contain" ou "end with"
	}
	
	//window.status="compute. Mode:"+dlmode+" - Key:"+dlkey+" - Chars:"+chars;
	
	selnum=0;
	//$("view").value=dltmp;//DEBUG

	// HTML //
	var rows=new Array();
	
	var tmpcols="";
	if (dlwcols[dlkey].length>1) {
		tmpcols+="<col />";
		tmpcols+="<col width='"+dlwcols[dlkey][1]+"%' />";
		if (dlwcols[dlkey].length==3) tmpcols+="<col width='"+dlwcols[dlkey][2]+"%' />";
	}
	
	for(i=0;i<dltmp.length;i++){
		rows[i]="<TR ID=itm"+i+" ONMOUSEDOWN=rowsel("+i+") style='cursor:pointer;'><TD><NOBR>"+dltmp[i][1];
		if(dltmp[i][2])rows[i]+="<TD ALIGN=RIGHT><NOBR>"+dltmp[i][2];
		if(dltmp[i][3])rows[i]+="<TD ALIGN=RIGHT><NOBR>"+dltmp[i][3];
	}

	if(dltmp.length==0){rows[0]="<TR><TD>No results</TR>";}
	//$("ddn").innerHTML="<TABLE WIDTH='100%' BORDER=0 CLASS=dl STYLE='border-collapse:collapse;'>"+rows.join("\n")+"</TABLE>";
	$("ddn").innerHTML="<TABLE WIDTH='100%' BORDER=0 STYLE='border-collapse:collapse;font-family:verdana;font-size:11px;overflow:hidden;white-space:nowrap;table-layout:fixed;'>"+tmpcols+rows.join("\n")+"</TABLE>";

	
	$("ddn").style.width=dlwmemo+"px";

	//DIV RESIZE
	if(dltmp.length==0){
		$("ddn").style.height=18;
	}else if(dltmp.length<=15){
		$("ddn").style.height=(dltmp.length*18);
	}else{
		$("ddn").style.height=270;//270 is 18px*15itm
		$("ddn").style.width=(parseInt(dlwmemo)+17)+"px";
	}

	$("ddn").show();
	if(dltmp.length>0)$("itm"+selnum).addClassName("sel");//selection le premier element

}



function rowsel(i){
	selnum=i;
	//make_dl_eval_onblur(obj);
	dl_eval_onblur();
}

function set(){
	//console.trace();
	if(dltmp.length==0) {
		obj.value="";
		return;
	}
	// Beg rno - 2008-02-13 - clean vessel name key 10
	var tmp=dltmp[selnum][1];
	var lg=tmp.length;
	if (tmp.substr(0,5)=="order") tmp=tmp.substr(8,lg);
	tmp=tmp.replace(/(<([^>]+)>)/ig,"");
	lg=tmp.length;
	if (tmp.substr(lg-4,lg)==" cur"||tmp.substr(lg-4,lg)==" exn"||tmp.substr(lg-4,lg)==" gsn") tmp=tmp.substr(0,lg-4);
	dltmp[selnum][1]=tmp;
	// End rno
	obj.value=dltmp[selnum][1];
	eval(obj.name+"_id="+dltmp[selnum][0]);
	obj.title=dltmp[selnum][1];
	window.status="set "+obj.name+": "+dltmp[selnum];
}


function dlb(){// ONBLUR
	if (obj.value.length==1) obj.value="";
	$("ddn").hide();
	//window.setTimeout('set()', 100);
	set();
	//setTimeout('set()', 10);
	return;
}

function make_dl_eval_onblur(o) {
	var obf=o.onblur.toString();
	obf=obf.split("\n").join("");
	obf=obf.split("this").join("\$('"+obj.id+"')")
	var obf_regexp=new RegExp("[{}]+","g");
	obf=obf.split(obf_regexp);
	dlevalblur=obf[1];
}

function dl_eval_onblur() {
	var tmp=dlevalblur;
	window.status=tmp;
	eval(tmp);
}

function dlu(e){//dl key up
	
	if(obj.value.length<2)return;

	if (document.all){ //ie 
		e = window.event;
		n = e.keyCode;
	}else if(document.layers){ 
		n = e.which; 
	}else{
		n = e.which; 
	}
	window.status="key up, "+n;
	switch(n){
		case 13://return
		case 37:
		case 38:
		case 39:
		case 40:
			return false;
			break;

		case 118://begin with
			dlmode=0;
			break;
	
		case 119://contain
			dlmode=1;
			break;
		
		case 120://endwith
			dlmode=2;
			break;

	}
	//window.status="key up, "+obj.value;
	getlist();
	compute();
	//return false;
}

function dld(e){//dl key down
	//return false;
	if (document.all){ //ie 
		e = window.event;
		n = e.keyCode;
	}else if(document.layers){ 
		n = e.which; 
	}else{
		n = e.which; 
	}

	if(dltmp.length<1)return;
	switch(n){
		case 13://RETURN;
			//set();
			dlb();
			return false;
			break;

		case 38://up
			$("itm"+selnum).removeClassName("sel");
			if(selnum==0)selnum=dltmp.length-1;
			else selnum--;
			$("itm"+selnum).addClassName("sel");
			$('ddn').scrollTop=selnum*15-9*15;
			return false;
			break;

		case 40://down
			$("itm"+selnum).removeClassName("sel");
			selnum++;
			if(selnum>=dltmp.length)selnum=0;
			$("itm"+selnum).addClassName("sel");
			$('ddn').scrollTop=selnum*15-9*15;
			return false;
			break;
	}

	return;
}

document.write("<DIV ID=ddn STYLE='position:absolute;background:white;display:none;border:solid;border-width:1;overflow:auto;z-index:27;'></DIV>");

