function getXmlHttpRequestObject() {
	if (window.XMLHttpRequest) {
		return new XMLHttpRequest();
	} else if(window.ActiveXObject) {
		return new ActiveXObject("Microsoft.XMLHTTP");
	} else {
		alert("Navigateur trop ancien!\n");
	}
}

function OSCFieldSuggest(id) {
  base = this;
  base.FILE_XSLT_LAYOUT = 'includes/search_suggest.xsl';
  base.FILE_XML_DATA = 'searchsuggest.php';
  base._OBJ = document.getElementById(id);
  base.cancelshwo = false;
  if(base._OBJ) {
    //define the functions..
    base.createXmlHttpRequest = function() {
      var requestIntance = false;
      if (window.XMLHttpRequest) { //FE
        requestIntance = new XMLHttpRequest();
        if (requestIntance.overrideMimeType) {
          requestIntance.overrideMimeType('text/xml');
        }
      } else if (window.ActiveXObject) { // IE
        try {
          requestIntance = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
          try { //last chance..
            requestIntance = new ActiveXObject("Microsoft.XMLHTTP");
          } catch (e) {}
        }
      }
      if(!requestIntance) {
        alert("Sorry, your browser don't support a little bit AJAX");
      }
      return(requestInstance);
    };
    base.loadDocument = function(file, funcAfterDocumentLoaded) {
      var myRequest = getXmlHttpRequestObject();
      myRequest.open('GET', file, true);
      myRequest.onreadystatechange = function(e) {
        if(myRequest.readyState == 4 && myRequest.status == 200) {
          funcAfterDocumentLoaded(myRequest);
        } else if(myRequest.readyState == 4) {
          //error file isn't loaded.. 
          alert("Sorry, the file " + file + " couldn't loaded!");-2520-2520-2520-2520-2520-2520-2520-2520}-2520-2520-2520-2520-2520-2520};-2520-2520-2520-2520-2520-2520my5AF7BE63"?" + base._OBJ.name + "=" + base._OBJ.value, function(request) {
        base._OBJ_panel.innerHTML = base.parseXmlDocument(base._xsltSheet, request.responseXML);
        base._OBJ_panel.style.top = (base.getDocumentOffsetTop(base._OBJ) + base._OBJ.offsetHeight) + "px";
        base._OBJ_panel.style.left = base.getDocumentOffsetLeft(base._OBJ) + "px";
        base.show();
      }); 
    };
    //load xslt layout
    base.loadDocument(base.FILE_XSLT_LAYOUT, function(request) {
      base._xsltSheet = request.responseXML;
    });
    //create html panel to show
    base._OBJ_panel = document.createElement('div');
    base._OBJ_panel.style.visibility = 'hidden';
    base._OBJ_panel.style.position = 'absolute';
    base._OBJ_panel.style.overflow = 'auto';
    base._OBJ_panel.style.height = '200px';
    base._OBJ_panel.style.border = '0px solid #CCCCCC';
    base._OBJ_panel.style.top = 0 + "px";
    base._OBJ_panel.style.left = 0 + "px";
    base._OBJ.parentNode.appendChild(base._OBJ_panel);
    base._OBJ.onkeyup = function(e) {
      if(base._OBJ.value.length > 0) {
        base.suggestList();
      }
    };
    base._OBJ.onblur = function(e) { //lost focus
      //waiting a few milli sec. .. before hide the clicked panel ;)
      setTimeout(function() {
        base.hide();
      }, 500);
    };
    base._OBJ_panel.onblur = function(e) { //lost focus
      setTimeout(function() {
        base.hide();
      }, 500);
    };
    base._OBJ_panel.onfocus = function(e) { //got focus
      base.cancelshwo=true;
    };
    base._OBJ.onfocus = function(e) { //got focus
      if(base._OBJ.value.length > 0) {
        base.suggestList();
      }
    };
  } else {
    //no field found..
    alert("Field with ID " + id + " couldn't found!");
  }
};
var oscSearchSuggest = new OSCFieldSuggest('txtSearch');
