//Our XmlHttpRequest object to get the auto suggest
var searchReq = getXmlHttpRequestObject();
var _cursel=-1,_prev_cursel=0;
var _totalvms_items=0;
var data;
var last_request_ss='';
var viewport=350;
var time_lastkeyup=0;
var selcoice_enabled=true;
var hideSelectboxes=false;
var searchSuggestInterval=0;
var flag_over_search_suggest=false;
var search_next=false;

// Detect Browser and Page, Fix for selectbox layer bug
//if (document.getElementById('main_cat') && BrowserName == "IE" && parseInt(BrowserVersion) < 7) {
if (BrowserName == "IE" && BrowserVersion < 7) {
     hideSelectboxes=true;
}

//Gets the browser specific XmlHttpRequest Object
function getXmlHttpRequestObject() {
	if (window.XMLHttpRequest) {
		return new XMLHttpRequest();
	} else if(window.ActiveXObject) {
		return new ActiveXObject("Microsoft.XMLHTTP");
	} else {
                return false;
	}
}

function RTrimAll(str)
{
	if (str==null)
	{
		return str;
	}

	for(var i=str.length-1; str.charAt(i)==" " || str.charAt(i)=="\n" || str.charAt(i)=="\t"; i--);

	return str.substring(0,i+1);
}

function RemoveDoubleSpaces(str)
{
	/* lösung unschön aber möglichkeit der rekursion nicht gegeben da JS-ERROR: to much recursion bei langen zeichenketten*/
	var erg = str;
	var old = erg;
	var repStr = "#LEERZ#";

	erg = erg.replace(/(\s)\s+/,repStr);    //ersetze alle leerzeichenfolgen (mehr als ein leerzeichen) mit #LEERZ#
	while(old != erg)                       //durchlaufe schleife so lange bis nichts mehr ersetzt wird
	{
		old = erg;
		erg = erg.replace(/(\s)\s+/,repStr);
	}

	old = erg;
	erg = erg.replace(/#LEERZ#/, " ");      //ersetze alle #LEERZ# durch richtige leerzeichen
	while(old != erg)                       //so lange bis keine #LEERZ# mehr gefunden werden
	{
		old = erg;
		erg = erg.replace(/#LEERZ#/, " ");
	}

	return erg;     //wenn keine doppelten leerzeichen mehr gefunden wurden.
}


//Called from keyup on the search textbox.
//Starts the AJAX request.
function searchSuggest() {
        // request throtteling
        if (time_lastkeyup==0 || new Date().getTime()-time_lastkeyup<500) { return;   }

	//try to fix 'spacer search bug'
	//var str = document.getElementById('vm_search').value;
	var str = document.getElementById('vm_search').value;
	str = RTrimAll(str);
	str = RemoveDoubleSpaces(str);

        if (str==last_request_ss && !search_next) return;
        search_next=false;

	if (searchReq.readyState == 4 || searchReq.readyState == 0) {

                if (str.length<2) {
                    document.getElementById('vm_count_hits').style.display='none';
                    hideSuggestBox();
                    return;
                }

                last_request_ss=str;
                
                str = str.replace(/\//g, "%25252F");
                str = str.replace(/#/g, "%2523");

   	        searchReq.open("GET", '/s/vm/search/' + str, true);
                document.getElementById('loading_icon').src='/website-data/loading.gif';

		searchReq.onreadystatechange = handleSearchSuggest;
		searchReq.send(null);
  	}
}

function hideSuggestBox() {
       if (searchSuggestInterval!=0) window.clearInterval(searchSuggestInterval);
       document.getElementById('vm_search_suggest').style.display='none';
       // Workarout Hide select-boxes in IE
       if (hideSelectboxes) {
          if (document.getElementById('main_cat')) {
             document.getElementById('main_cat').style.display='block';
             document.getElementById('subcat').style.display='block';
          }
       }
}

//Called when the AJAX response is returned.
function handleSearchSuggest() {
	if (searchReq.readyState == 4) {
                document.getElementById('loading_icon').src='/website-data/loading-UN.gif';

		var ss = document.getElementById('vm_search_suggest');

                data = eval('(' + searchReq.responseText + ')');

                // update search count display
                document.getElementById('vm_count_hits').innerHTML='Treffer: '+data.vmcount;
                document.getElementById('vm_count_hits').style.display='inline';

                if (data.vmcount<=0) hideSuggestBox();
                else {
                   var suggest='';
                   _totalvms_items=data.vmcount;
                   _cursel=-1; _prev_cursel=0;
                   var words=last_request_ss.split(" ") //split using blank space as delimiter

     		   for(i=0; i < _totalvms_items; i++) {
                        desc=data.vmsuggests[i].n;
                        artikelnr=data.vmsuggests[i].nr;

                        // mark sstrings
                        for (j=0; j<words.length; j++) {
                           desc=desc.replace(new RegExp('('+words[j]+')',"ig"),'<b>$1</b>');
                           artikelnr=artikelnr.replace(new RegExp('('+words[j]+')',"ig"),'<b>$1</b>');
                        }

			//Build our element string.  This is cleaner using the DOM, but
			//IE doesn't support dynamically added attributes.
			suggest += '<tr onmousemove="javascript:selcoice_enabled=true" onmouseover="javascript:selByMouse('+i+');" ';
			suggest += 'onclick="javascript:setSearch(\''+data.vmsuggests[i].nr+'\')" ';
			suggest += 'class="suggest_link">';
                        suggest += '<td id="vms_item_name_'+i+'" class="name">'+ desc + '</td>';
                        suggest += '<td id="vms_item_nr_'+i+'" class="nr">' +artikelnr +'</td>';
                        suggest += '</tr>';
		   }
		   ss.innerHTML = '<table class="suggest_table"><tbody>'+suggest+'</tbody></table>';

                   // Workarout Hide select-boxes in IE
                   if (hideSelectboxes) {
                      if (document.getElementById('main_cat')) {
                        document.getElementById('main_cat').style.display='none';
                        document.getElementById('subcat').style.display='none';
                      }
                   }
                   ss.style.display='block';
                   ss.scrollTop=0;
                }

	}
}

//Mouse over function
function suggestOver(item) {
	div_value.className = 'suggest_link_over';
}
//Mouse out function
function suggestOut(item) {
	div_value.className = 'suggest_link';
}
//Click function
function setSearch(value) {
        document.location = "/s/vmsearch?vm_search="  + value;
}

function activateSuggestbox() {
  // enable intervall calls to searchSuggest()
  searchSuggestInterval=window.setInterval("searchSuggest()", 250);
}


function keypressed(keycode)
{
   activateSuggestbox()
   time_lastkeyup = new Date().getTime();

   switch (keycode)
   {
    case 37: break;	//left Arrow
    case 39: break;	//right Arrow
    case 38:   /* UP */
        if(_cursel>0) selByKeyboard(_cursel-1);
	return false;
        break;
    case 9:    /* TAB */
    case 40:   /* DOWN */
        if(_cursel<_totalvms_items-1)
	{
		selByKeyboard(_cursel+1);
	}
        return false;
        break;
    case 13:	//Enter
        if(_cursel >= 0 && _cursel <= _totalvms_items-1)
	{
		setSearch(data.vmsuggests[_cursel].nr);
	}
        else	//theor. nicht möglich
	{
		setSearch(document.getElementById('vm_search').value);
	}
        return false;
        break;
    case 27:   /* ESC */
	hideSuggestBox();
        break;

    }

}


function highlightItem(item) {

    _cursel=item;

    document.getElementById('vms_item_nr_'+_prev_cursel).className = 'nr';
    document.getElementById('vms_item_name_'+_prev_cursel).className = 'name';

    document.getElementById('vms_item_nr_'+item).className = 'nr_over';
    document.getElementById('vms_item_name_'+item).className = 'name_over';

    _prev_cursel=item;

}


function selByMouse(item) {
   if (selcoice_enabled==true) {   // prevent keyboard/mouse scrollingbug
      highlightItem(item);
   }
}

function selByKeyboard(item)
{
   selcoice_enabled=false;
   highlightItem(item);

   // check scrolling
   var el=document.getElementById('vms_item_nr_'+item);
   var ss=document.getElementById('vm_search_suggest');

   if (el.offsetTop-ss.scrollTop>=viewport-30)
   {
      ss.scrollTop+=el.offsetHeight;

   }

   if (el.offsetTop-ss.scrollTop<0)
   {
      ss.scrollTop-=el.offsetHeight;
   }

}

