/**********  Recent Parts List Box  *********/

/*    Caret Functions     */
function getCaretEnd(obj){
     if(typeof obj.selectionEnd != "undefined"){
          return obj.selectionEnd;
     }else if(document.selection&&document.selection.createRange){
          var M=document.selection.createRange();
          var Lp=obj.createTextRange();
          Lp.setEndPoint("EndToEnd",M);
          var rb=Lp.text.length;
          if(rb>obj.value.length){
               return -1;
          }
          return rb;
     }
}
function getCaretStart(obj){
     if(typeof obj.selectionStart != "undefined"){
          return obj.selectionStart;
     }else if(document.selection&&document.selection.createRange){
          var M=document.selection.createRange();
          var Lp=obj.createTextRange();
          Lp.setEndPoint("EndToStart",M);
          var rb=Lp.text.length;
          if(rb>obj.value.length){
               return -1;
          }
          return rb;
     }
}
function setCaret(obj,l){
     obj.focus();
     if (obj.setSelectionRange){
          obj.setSelectionRange(l,l);
     }else if(obj.createTextRange){
          m = obj.createTextRange();          
          m.moveStart('character',l);
          m.collapse();
          m.select();
     }
}
/* ----------------- */

/*    Escape function   */
String.prototype.addslashes = function(){
     return this.replace(/([""\\\.\|\[\]\^\*\+\?\$\(\)])/g, '\\$1');
}
String.prototype.trim = function () {
    return this.replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1");
}
function actb(obj,evt,ca){
     /* ---- Variables ---- */
     var actb_timeOut = -1; // Autocomplete Timeout in ms (-1: autocomplete never time out)
     var actb_lim = 12;    // Number of elements autocomplete can show (-1: no limit)
     var actb_firstText = false; // should the auto complete be limited to the beginning of keyword?
     var actb_mouse = true; // Enable Mouse Support
     var actb_delimiter = new Array();
     /* var actb_delimiter = new Array(';',',');  // Delimiter for multiple autocomplete. Set it to empty array for single autocomplete */
     /* ---- Variables ---- */

     /* --- Styles --- */
     var actb_bgColor = '#999999';
     var actb_textColor = '#FFFFFF';
     var actb_hColor = '#EB9119';
     var actb_fFamily = 'Arial,Verdana';
     var actb_fSize = '12px';
     var actb_hStyle = 'text-decoration:underline;font-weight="bold"';
     /* --- Styles --- */

     /* ---- Don't touch :P---- */
     var actb_delimwords = new Array();
     var actb_cdelimword = 0;
     var actb_delimchar = new Array();
     var actb_keywords = new Array();
     var actb_display = false;
     var actb_pos = 0;
     var actb_total = 0;
     var actb_curr = null;
     var actb_rangeu = 0;
     var actb_ranged = 0;
     var actb_bool = new Array();
     var actb_pre = 0;
     var actb_toid;
     var actb_tomake = false;
     var actb_getpre = "";
     var actb_mouse_on_list = true;
     var actb_kwcount = 0;
     var actb_caretmove = false;
     /* ---- "Constants" ---- */

     
     actb_keywords = ca;
     actb_curr = obj;
     
     var oldkeydownhandler = document.onkeydown;
     var oldblurhandler = obj.onblur;
     var oldkeypresshandler = obj.onkeypress;

     document.onkeydown = actb_checkkey;
     obj.onblur = actb_clear;
     obj.onkeypress = actb_keypress;
     
     function actb_clear(evt){
          if (!evt) evt = event;
          document.onkeydown = oldkeydownhandler;
          actb_curr.onblur = oldblurhandler;
          actb_curr.onkeypress = oldkeypresshandler;
          actb_removedisp();
     }
     function actb_parse(n){
          if (actb_delimiter.length > 0){
               var t = actb_delimwords[actb_cdelimword].trim().addslashes();
               var plen = actb_delimwords[actb_cdelimword].trim().length;
          }else{
               var t = actb_curr.value.addslashes();
               var plen = actb_curr.value.length;
          }
          var tobuild = '';
          var i;

          if (actb_firstText){
               var re = new RegExp("^" + t, "i");
          }else{
               var re = new RegExp(t, "i");
          }
          var p = n.search(re);
                    
          for (i=0;i<p;i++){
               tobuild += n.substr(i,1);
          }
          tobuild += "<font style='"+(actb_hStyle)+"'>"
          for (i=p;i<plen+p;i++){
               tobuild += n.substr(i,1);
          }
          tobuild += "</font>";
          for (i=plen+p;i<n.length;i++){
               tobuild += n.substr(i,1);
          }
          return tobuild;
     }
     function curTop(){
          actb_toreturn = 0;
          obj = actb_curr;
          while(obj){
               actb_toreturn += obj.offsetTop;
               obj = obj.offsetParent;
          }
          return actb_toreturn;
     }
     function curLeft(){
          actb_toreturn = 0;
          obj = actb_curr;
          while(obj){
               actb_toreturn += obj.offsetLeft;
               obj = obj.offsetParent;
          }
          return actb_toreturn;
     }
     function actb_generate(){
          if (document.getElementById('tat_table')){ actb_display = false;document.body.removeChild(document.getElementById('tat_table')); } 
          if (actb_kwcount == 0){
               actb_display = false;
               return;
          }
          a = document.createElement('table');
          a.cellSpacing='1px';
          a.cellPadding='2px';
          a.style.position='absolute';
          a.style.top = eval(curTop() + actb_curr.offsetHeight) + "px";
          a.style.left = curLeft() + "px";
          a.style.backgroundColor=actb_bgColor;
          a.id = 'tat_table';
          document.body.appendChild(a);
          var i;
          var first = true;
          var j = 1;
          if (actb_mouse){
               a.onmouseout= actb_table_unfocus;
               a.onmouseover=actb_table_focus;
          }
          var counter = 0;
          for (i=0;i<actb_keywords.length;i++){
               if (actb_bool[i]){
                    counter++;
                    r = a.insertRow(-1);
                    if (first && !actb_tomake){
                         r.style.backgroundColor = actb_hColor;
                         first = false;
                         actb_pos = counter;
                    }else if(actb_pre == i){
                         r.style.backgroundColor = actb_hColor;
                         first = false;
                         actb_pos = counter;
                    }else{
                         r.style.backgroundColor = actb_bgColor;
                    }
                    r.id = 'tat_tr'+(j);
                    c = r.insertCell(-1);
                    c.style.color = actb_textColor;
                    c.style.fontFamily = actb_fFamily;
                    c.style.fontSize = actb_fSize;
                    c.innerHTML = actb_parse(actb_keywords[i]);
                    c.id = 'tat_td'+(j);
                    c.setAttribute('pos',j);
                    if (actb_mouse){
                         c.onclick=actb_mouseclick;
                         c.onmouseover = actb_table_highlight;
                    }
                    j++;
               }
               if (j - 1 == actb_lim && j < actb_total){
                    r = a.insertRow(-1);
                    r.style.backgroundColor = actb_bgColor;
                    c = r.insertCell(-1);
                    c.style.color = actb_textColor;
					//c.style.fontFamily = 'arial narrow';
                    c.style.fontFamily = actb_fFamily;
                    c.style.fontSize = actb_fSize;
                    c.align='center';
	                //c.innerHTML = "<img src='/images/arrowDown.jpg'>";
	                c.innerHTML = "<img align='left' src='/images/arrow_orange_right_down.gif'>";
                    if (actb_mouse){
                         c.onclick = actb_mouse_down;
                    }
                    break;
               }
          }
          actb_rangeu = 1;
          actb_ranged = j-1;
          actb_display = true;
          if (actb_pos <= 0) actb_pos = 1;
     }
     function actb_remake(){
          document.body.removeChild(document.getElementById('tat_table'));
          a = document.createElement('table');
          a.cellSpacing='1px';
          a.cellPadding='2px';
          a.style.position='absolute';
          a.style.top = eval(curTop() + actb_curr.offsetHeight) + "px";
          a.style.left = curLeft() + "px";
          a.style.backgroundColor=actb_bgColor;
          a.id = 'tat_table';
          if (actb_mouse){
               a.onmouseout= actb_table_unfocus;
               a.onmouseover=actb_table_focus;
          }
          document.body.appendChild(a);
          var i;
          var first = true;
          var j = 1;
          if (actb_rangeu > 1){
               r = a.insertRow(-1);
               r.style.backgroundColor = actb_bgColor;
               c = r.insertCell(-1);
               c.style.color = actb_textColor;
			   //c.style.fontFamily = 'arial narrow';
               c.style.fontFamily = actb_fFamily;
               c.style.fontSize = actb_fSize;
               c.align='left';
               //c.innerHTML = "<img src='/images/arrowUp.jpg'>";
               c.innerHTML = "<img align='left' src='/images/arrow_orange_left_up.gif'>";
               if (actb_mouse){
                    c.onclick = actb_mouse_up;
               }
          }
          for (i=0;i<actb_keywords.length;i++){
               if (actb_bool[i]){
                    if (j >= actb_rangeu && j <= actb_ranged){
                         r = a.insertRow(-1);
                         r.style.backgroundColor = actb_bgColor;
                         r.id = 'tat_tr'+(j);
                         c = r.insertCell(-1);
                         c.style.color = actb_textColor;
                         c.style.fontFamily = actb_fFamily;
                         c.style.fontSize = actb_fSize;
                         c.innerHTML = actb_parse(actb_keywords[i]);
                         c.id = 'tat_td'+(j);
                         c.setAttribute('pos',j);
                         if (actb_mouse){
                              c.onclick=actb_mouseclick;
                              c.onmouseover = actb_table_highlight;
                         }
                         j++;
                    }else{
                         j++;
                    }
               }
               if (j > actb_ranged) break;
          }
          if (j-1 < actb_total){
               r = a.insertRow(-1);
               r.style.backgroundColor = actb_bgColor;
               c = r.insertCell(-1);
               c.style.color = actb_textColor;
               //c.style.fontFamily = 'arial narrow';
               c.style.fontFamily = actb_fFamily;
               c.style.fontSize = actb_fSize;
               c.align='center';
               //c.innerHTML = "<img src='/images/arrowDown.jpg'>";
               c.innerHTML = "<img align='left' src='/images/arrow_orange_right_down.gif'>";
               if (actb_mouse){
                    c.onclick = actb_mouse_down;
               }
          }
     }
     function actb_goup(){
          if (!actb_display) return;
          if (actb_pos == 1) return;
          document.getElementById('tat_tr'+actb_pos).style.backgroundColor = actb_bgColor;
          actb_pos--;
          if (actb_pos < actb_rangeu) actb_moveup();
          document.getElementById('tat_tr'+actb_pos).style.backgroundColor = actb_hColor;
          if (actb_toid) clearTimeout(actb_toid);
          if (actb_timeOut > 0) actb_toid = setTimeout(function(){actb_mouse_on_list=0;actb_removedisp();},actb_timeOut);
     }
     function actb_godown(){
          if (!actb_display) return;
          if (actb_pos == actb_total) return;
          document.getElementById('tat_tr'+actb_pos).style.backgroundColor = actb_bgColor;
          actb_pos++;
          if (actb_pos > actb_ranged) actb_movedown();
          document.getElementById('tat_tr'+actb_pos).style.backgroundColor = actb_hColor;
          if (actb_toid) clearTimeout(actb_toid);
          if (actb_timeOut > 0) actb_toid = setTimeout(function(){actb_mouse_on_list=0;actb_removedisp();},actb_timeOut);
     }
     function actb_movedown(){
          actb_rangeu++;
          actb_ranged++;
          actb_remake();
     }
     function actb_moveup(){
          actb_rangeu--;
          actb_ranged--;
          actb_remake();
     }

     /* Mouse */
     function actb_mouse_down(){
          document.getElementById('tat_tr'+actb_pos).style.backgroundColor = actb_bgColor;
          actb_pos++;
          actb_movedown();
          document.getElementById('tat_tr'+actb_pos).style.backgroundColor = actb_hColor;
          actb_curr.focus();
          actb_moue_on_list = 0;
          if (actb_toid) clearTimeout(actb_toid);
          if (actb_timeOut > 0) actb_toid = setTimeout(function(){actb_mouse_on_list=0;actb_removedisp();},actb_timeOut);
     }
     function actb_mouse_up(evt){
          if (!evt) evt = event;
          if (evt.stopPropagation){
               evt.stopPropagation();
          }else{
               evt.cancelBubble = true;
          }
          document.getElementById('tat_tr'+actb_pos).style.backgroundColor = actb_bgColor;
          actb_pos--;
          actb_moveup();
          document.getElementById('tat_tr'+actb_pos).style.backgroundColor = actb_hColor;
          actb_curr.focus();
          actb_moue_on_list = 0;
          if (actb_toid) clearTimeout(actb_toid);
          if (actb_timeOut > 0) actb_toid = setTimeout(function(){actb_mouse_on_list=0;actb_removedisp();},actb_timeOut);
     }
     function actb_mouseclick(evt){
          if (!evt) evt = event;
          if (!actb_display) return;
          actb_mouse_on_list = 0;
          actb_pos = this.getAttribute('pos');
          actb_penter();
     }
     function actb_table_focus(){
          actb_mouse_on_list = 1;
     }
     function actb_table_unfocus(){
          actb_mouse_on_list = 0;
          if (actb_toid) clearTimeout(actb_toid);
          if (actb_timeOut > 0) actb_toid = setTimeout(function(){actb_mouse_on_list = 0;actb_removedisp();},actb_timeOut);
     }
     function actb_table_highlight(){
          actb_mouse_on_list = 1;
          document.getElementById('tat_tr'+actb_pos).style.backgroundColor = actb_bgColor;
          actb_pos = this.getAttribute('pos');
          while (actb_pos < actb_rangeu) actb_moveup();
          while (actb_pos > actb_ranged) actb_mousedown();
          document.getElementById('tat_tr'+actb_pos).style.backgroundColor = actb_hColor;
          if (actb_toid) clearTimeout(actb_toid);
          if (actb_timeOut > 0) actb_toid = setTimeout(function(){actb_mouse_on_list = 0;actb_removedisp();},actb_timeOut);
     }
     /* ---- */

     function actb_insertword(a){
          if (actb_delimiter.length > 0){
               str = '';
               l=0;
               for (i=0;i<actb_delimwords.length;i++){
                    if (actb_cdelimword == i){
                         str += a;
                         l = str.length;
                    }else{
                         str += actb_delimwords[i];
                    }
                    if (i != actb_delimwords.length - 1){
                         str += actb_delimchar[i];
                    }
               }
               actb_curr.value = str;
               setCaret(actb_curr,l);
          }else{
               actb_curr.value = a;
          }
          actb_mouse_on_list = 0;
          actb_removedisp();
     }

     function actb_penter(){
          if (!actb_display) return;
          actb_display = false;
          var word = '';
          var c = 0;
          for (var i=0;i<=actb_keywords.length;i++){
               if (actb_bool[i]) c++;
               if (c == actb_pos){
                    word = actb_keywords[i];
                    break;
               }
          }
          actb_insertword(word);
     }
     function actb_removedisp(){
          if (!actb_mouse_on_list){
               actb_display = false;
               if (document.getElementById('tat_table')){ document.body.removeChild(document.getElementById('tat_table')); }
               if (actb_toid) clearTimeout(actb_toid);
          }
     }
     function actb_keypress(){
          return !actb_caretmove;
     }
     function actb_checkkey(evt){
          if (!evt) evt = event;
          a = evt.keyCode;
          //DeeBo comment out --- caret_pos_start = getCaretStart(actb_curr);
          caret_pos_start = getCaretStart(actb_curr);
          actb_caretmove = 0;
          switch (a){
               case 38: case 33:
                    actb_goup();
                    actb_caretmove = 1;
                    return false;
                    break;
               case 40: case 34:
                    actb_godown();
                    actb_caretmove = 1;
                    return false;
                    break;
               case 13: case 9: 
                    actb_penter();
                    actb_caretmove = 1;
                    return false;
                    break;
               default:
                    setTimeout(function(){actb_tocomplete(a)},50);
                    break;
          }
     }

     function actb_tocomplete(kc){
          //Opto22 comment ---- if (kc == 38 || kc == 40 || kc == 13) return;
          if (kc == 38 || kc == 40 || kc == 13 || kc == 33 || kc == 34 || kc == 9) return;
          var i;
          if (actb_display){ 
               var word = 0;
               var c = 0;
               for (var i=0;i<=actb_keywords.length;i++){
                    if (actb_bool[i]) c++;
                    if (c == actb_pos){
                         word = i;
                         break;
                    }
               }
               actb_pre = word;
          }else{ actb_pre = -1};
          
          if (actb_curr.value == ''){
               actb_mouse_on_list = 0;
               actb_removedisp();
               return;
          }
          if (actb_delimiter.length > 0){
               caret_pos_start = getCaretStart(actb_curr);
               caret_pos_end = getCaretEnd(actb_curr);
               
               delim_split = '';
               for (i=0;i<actb_delimiter.length;i++){
                    delim_split += actb_delimiter[i];
               }
               delim_split = delim_split.addslashes();
               delim_split_rx = new RegExp("(["+delim_split+"])");
               c = 0;
               actb_delimwords = new Array();
               actb_delimwords[0] = '';
               for (i=0,j=actb_curr.value.length;i<actb_curr.value.length;i++,j--){
                    if (actb_curr.value.substr(i,j).search(delim_split_rx) == 0){
                         ma = actb_curr.value.substr(i,j).match(delim_split_rx);
                         actb_delimchar[c] = ma[1];
                         c++;
                         actb_delimwords[c] = '';
                    }else{
                         actb_delimwords[c] += actb_curr.value.charAt(i);
                    }
               }

               var l = 0;
               actb_cdelimword = -1;
               for (i=0;i<actb_delimwords.length;i++){
                    if (caret_pos_end >= l && caret_pos_end <= l + actb_delimwords[i].length){
                         actb_cdelimword = i;
                    }
                    l+=actb_delimwords[i].length + 1;
               }
               var t = actb_delimwords[actb_cdelimword].addslashes().trim();
          }else{
               var t = actb_curr.value.addslashes();
          }
          if (actb_firstText){
               var re = new RegExp("^" + t, "i");
          }else{
               var re = new RegExp(t, "i");
          }
          
          actb_total = 0;
          actb_tomake = false;
          actb_kwcount = 0;
          for (i=0;i<actb_keywords.length;i++){
               actb_bool[i] = false;
               if (re.test(actb_keywords[i])){
                    actb_total++;
                    actb_bool[i] = true;
                    actb_kwcount++;
                    if (actb_pre == i) actb_tomake = true;
               }
          }
          if (actb_toid) clearTimeout(actb_toid);
          if (actb_timeOut > 0) actb_toid = setTimeout(function(){actb_mouse_on_list = 0;actb_removedisp();},actb_timeOut);
          actb_generate();
     }
}

