//alert(1);
/**
 * osCommerce: JS OSCFieldSuggest
 *
 * File: includes/class.OSCFieldSuggestjs
 * Version: 1.0
 * Date: 2007-03-28 17:49
 * Author: Timo Kiefer - timo.kiefer_(at)_kmcs.de
 * Organisation: KMCS - www.kmcs.de
 * Licence: General Public Licence 2.0
 */

/**
 * The field gots a suggestlist..
 *
 * @param id please give your fields an ID
 * @param file_layout the xslt document
 * @param file_data the xml document, that will be generated
 * @example
 *   var myFieldSuggestion = new OSCFieldSuggest('search_field_id', 'includes/search_suggest.xsl', 'searchsuggest.php');
 *   //params will be automatically added like searchsuggest.php?myformfieldname=myformfieldvalue
 */

//o:function ajax7suggest(id, file_layout, file_data) {
function aj7tip(id) {
	//alert(1);
  base = this;
//o:  base.FILE_XSLT_LAYOUT = file_layout;
//o:  base.FILE_XML_DATA = file_data;
  base.FILE_XML_DATA = 'aj7tip.php';//&:
  
  base.dateLastKey = 0;
  base.lastShowed='';
  
  base._OBJ = document.getElementById(id);
  if(base._OBJ) {
  	//alert(2);
    //define the functions..
    base.createXmlHttpRequest = function() {
      var requestInstance = false;
      if (window.XMLHttpRequest) { //FE
        requestInstance = new XMLHttpRequest();
        if (requestInstance.overrideMimeType) {
          requestInstance.overrideMimeType('text/xml');
        }
      } else if (window.ActiveXObject) { // IE
        try {
          requestInstance = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
          try { //last chance..
            requestInstance = new ActiveXObject("Microsoft.XMLHTTP");
          } catch (e) {}
        }
      }
      if(!requestInstance) {
        alert("Sorry, your browser don't support a little bit AJAX");
      }
      return(requestInstance);
    };
    base.loadDocument = function(file, funcAfterDocumentLoaded) {

    	//alert('22: '+file);

      var myRequest = base.createXmlHttpRequest();
      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..
//o:		      alert("Sorry, the file " + file + " couldn't loaded!");
        }
      };
      myRequest.send(null);
    };
/*o:
    base.parseXmlDocument = function(xsltLayout, xmlData) {
      if(document.all) {
        return(xmlData.transformNode(xsltLayout));
      } else {
      	//alert(2);
        var processor = new XSLTProcessor();
        processor.importStylesheet(xsltLayout);
        var result = processor.transformToDocument(xmlData);
        //alert('2:'+result);
        var xmls = new XMLSerializer();
        //alert('3:'+xmls.serializeToString(result));
        return(xmls.serializeToString(result));
      }
    };
*/
    base.getDocumentOffsetTop = function(obj) {
      return(parseInt(obj.offsetTop) + ((obj.offsetParent) ? base.getDocumentOffsetTop(obj.offsetParent) : 0));
    };
    base.getDocumentOffsetLeft = function(obj) {
      return(parseInt(obj.offsetLeft) + ((obj.offsetParent) ? base.getDocumentOffsetLeft(obj.offsetParent) : 0));
    };
    base.show = function() {
      base._OBJ_panel.style.visibility = 'visible';
    };

    var iR=0;
    base.hide = function() {
      base._OBJ_panel.style.visibility = 'hidden';
      iR = 1;
    };
    base.suggestList = function() {
//    	var now = new Date();
//    	if( now.getTime()-base.dateLastKey<50 || base.lastShowed==base._OBJ.value){
//	        setTimeout(function(){base.suggestList();}, 20);
//    		return;
//    	}

        //if( base.lastShowed==base._OBJ.value ) return;
    	
    	//alert('3: '+base.FILE_XML_DATA + "?id="+base._OBJ.name+'&' + base._OBJ.name + "=" + base._OBJ.value);

    	base.loadDocument(base.FILE_XML_DATA + "?id="+base._OBJ.name+'&' + base._OBJ.name + "=" + base._OBJ.value + '&l='+base._OBJ.value.length, function(request) {
//  	base.loadDocument(base.FILE_XML_DATA + "&kwd=" + base._OBJ.value, function(request) {

        //alert('222:'+request.responseText);
        //alert('222:'+base._xsltSheet);

//o:    base._OBJ_panel.innerHTML = base.parseXmlDocument(base._xsltSheet, request.responseXML);
        base._OBJ_panel.innerHTML = request.responseText;//&:
        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();

//        base.lastShowed = base._OBJ.value;
        //alert(base.lastShowed);
        //alert(base._OBJ.value);
  //      setTimeout(function(){base.suggestList();}, 20);

//      alert('111:'+base._OBJ_panel.innerHTML);
      });
    };

//    setTimeout(function(){base.suggestList();}, 20);
    
/*
    //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.className = "aj7tip";
//  base._OBJ_panel.id = "aj7tip";
/*
    base._OBJ_panel.style.visibility = 'hidden';
    base._OBJ_panel.style.position = 'absolute';
    base._OBJ_panel.style.overflow = 'auto';
    base._OBJ_panel.style.height = '100px';
    base._OBJ_panel.style.border = '1px solid #CCCCCC';
    base._OBJ_panel.style.top = 0 + "px";
    base._OBJ_panel.style.left = 0 + "px";
*/


    base._OBJ.parentNode.appendChild(base._OBJ_panel);

    //set the events
    base._OBJ.onkeydown = function(e) {

    	var keyCode = bw.ie ? window.event.keyCode : e.keyCode;

    	var now = new Date();
    	base.dateLastKey = now.getTime();

    	if( keyCode==13 ){ //enter
    		if( base._OBJ_panel.style.visibility!='hidden' ){
				base.hide();
//				return false;
    		}
//    		else{
				return true;
//    		}
    	}else if( keyCode==40 ){ //arrow down
    	 	if( iR && document.getElementById('aS'+(iR+1))){
    	 		document.getElementById('aS'+iR).className = 'n';
    	 		document.getElementById('tdS'+iR).className = 'bgWhite';
    	 	}
			if( document.getElementById('aS'+(iR+1)) ){
				iR++;
			}
			document.getElementById('aS'+iR).className = 'aj7tipHover';
			document.getElementById('tdS'+iR).className = 'bgGray';
			setTip(document.getElementById('aS'+iR), iR);
    	}else if( keyCode==38 ){ //arrow up
    	 	if( iR ){
    	 		document.getElementById('aS'+iR).className = 'n';
    	 		document.getElementById('tdS'+iR).className = 'bgWhite';
    	 	}
			iR--;
			if( !document.getElementById('aS'+iR) ){
				//iR = 1;
			}
			if( iR>0 ){
				document.getElementById('aS'+iR).className = 'aj7tipHover';
				document.getElementById('tdS'+iR).className = 'bgGray';
				setTip(document.getElementById('aS'+iR), iR);
			}
			return false;
    	}else{
//    		var now = new Date();
//    		base.dateLastKey = now.getTime();
    		//alert(base.dateLastKey);
    		
		    setTimeout(function(){
        		base.suggestList();
      		}, 20);
    	}
    };


    base._OBJ.onblur = function(e) { //lost focus
      //waiting a few milli sec. .. before hide the clicked panel ;)
      setTimeout(function() {
        base.hide();
      }, 100);
    };
    base._OBJ.onfocus = function(e) { //got focus
      if(base._OBJ.value.length > 0) {
        base.suggestList();
      }
    };
  } else {
    //no field found..
//    alert(id);
//o:    alert("Field with ID " + id + " couldn't found!");
  }
};