/**
 * 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
 */


function detectIElte6() {
	var browser1=navigator.appName
	var b_version1=navigator.appVersion
	var version1=parseFloat(b_version1)

	if ( b_version1.indexOf("MSIE 6.0")!=-1 ) {
	//alert("IE"+b_version1)
		return 1;
	}
	else {
		return 0;
	}
}

function OSCFieldSuggest1(id, file_layout, file_data) {
  base1 = this;
  base1.FILE_XSLT_LAYOUT = file_layout;
  base1.FILE_XML_DATA = file_data;
  base1._OBJ = document.getElementById(id);
  base1.name = 'test';
  base1.index = -1;
  base1.maxindex = 0;
  base1.hideSuggest = true;
  if(base1._OBJ) {
    //define the functions..
    base1.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 requestIntance;
    };
    base1.loadDocument = function(file, funcAfterDocumentLoaded) {
      var myRequest = base1.createXmlHttpRequest();
      myRequest.open('GET', file, true);
      myRequest.onreadystatechange = function(e) {
        if(myRequest.readyState == 4 && myRequest.status == 200) {
          funcAfterDocumentLoaded(myRequest);
//        } else if(myRequest.readyState == 4) {
        } else if(myRequest.readyState == 4 && myRequest.status != 0) {	// who has better idea please suggest --Bee
          //error file isn't loaded.. 
          alert("Sorry, the file " + file + " couldn't loaded!");
        }
      };
      myRequest.send(null);
    };
    base1.parseXmlDocument = function(xsltLayout, xmlData) {
      var xmlDoc = xmlData.documentElement;
      if (xmlDoc.childNodes[0].childNodes.length > 0){
        if(document.all) {
          return(xmlData.transformNode(xsltLayout));
        } else {
          var processor = new XSLTProcessor();
          processor.importStylesheet(xsltLayout);
          var result = processor.transformToDocument(xmlData);
          var xmls = new XMLSerializer();
          var str = xmls.serializeToString(result);
//          var re = new RegExp("&lt;b&gt;", "gi");
//          var re1 = new RegExp("&lt;/b&gt;", "gi");
//          return(str.replace(re, '<b>').replace(re1, '</b>'));
          var re = new RegExp("&lt;span style=\"color: #999;\"&gt;", "gi");
          var re1 = new RegExp("&lt;/span&gt;", "gi");
          return(str.replace(re, '<span style="color: #999;">').replace(re1, '</span>'));
        }
      } else {
        return '';
      }
    };
    base1.getDocumentOffsetTop = function(obj) {
      return(parseInt(obj.offsetTop) + ((obj.offsetParent) ? base1.getDocumentOffsetTop(obj.offsetParent) : 0));
    };
    base1.getDocumentOffsetLeft = function(obj) {
      return(parseInt(obj.offsetLeft) + ((obj.offsetParent) ? base1.getDocumentOffsetLeft(obj.offsetParent) : 0));
    };
    base1.show = function() {
      base1._OBJ_panel.style.visibility = 'visible';
    };
    base1.hide = function() {
	  if (base1.hideSuggest)
		base1._OBJ_panel.style.visibility = 'hidden';
    };
    base1.suggestList = function() {

		base1.loadDocument(base1.FILE_XML_DATA + "?" + base1.name + "=" + base1._OBJ.value, function(request) {
        //base1.loadDocument(base1base1.FILE_XML_DATA + "?" + base1._OBJ.name + "=" + base1._OBJ.value, function(request) {
       
        var parceResult = base1.parseXmlDocument(base1._xsltSheet, request.responseXML);
        if (parceResult != '') {
          base1._OBJ_panel.innerHTML = parceResult;
          base1._OBJ_panel.style.top = (base1.getDocumentOffsetTop(base1._OBJ) + base1._OBJ.offsetHeight) + "px";
          base1._OBJ_panel.style.left = (base1.getDocumentOffsetLeft(base1._OBJ) - 0) + "px";
          base1.show();
        } else {
          base1.hide();
        }
      });
    };
    //load xslt layout
    base1.loadDocument(base1.FILE_XSLT_LAYOUT, function(request) {
      base1._xsltSheet = request.responseXML;
    });
    //create html panel to show
    base1._OBJ_panel = document.createElement('div');
    base1._OBJ_panel.style.visibility = 'hidden';
    base1._OBJ_panel.style.position = 'absolute';
    base1._OBJ_panel.style.overflow = 'auto';
    base1._OBJ_panel.style.height = '350';
    base1._OBJ_panel.style.border = '0px solid #000000';
    base1._OBJ_panel.style.top = 0 + "px";
    base1._OBJ_panel.style.left = 0 + "px";
    base1._OBJ_panel.style.zIndex = 10000;
    base1._OBJ.parentNode.appendChild(base1._OBJ_panel);
    //set the events
    base1._OBJ.onkeyup = function(e) {
      if( navigator.appName.indexOf("Microsoft") == -1 ) {
        event = e;
      }
      var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
      if(base1._OBJ.value.length > 0 ) {
        if( keyCode != 40 && keyCode != 38 && keyCode != 13 ) {
          base1.suggestList();
          base1.index = -1;
          base1.maxindex = 0;
        } else {
          base1.getDestinations(e);  
        }  
      } 
    };
    base1._OBJ.onblur = function(e) { //lost focus
      //waiting a few milli sec. .. before hide the clicked panel ;)
      //alert('base1._OBJ.onblur');
      if (base1._OBJ.value == '') base1._OBJ.value = '';
      base1.hideSuggest = true;
      setTimeout(function() {
        base1.hide();
      }, 500);
    };

    base1._OBJ.onfocus = function(e) { //got focus
      if (base1._OBJ.value == '') base1._OBJ.value = '';
      if(base1._OBJ.value.length > 0) {
        base1.suggestList();
      }
    };

    base1._OBJ_panel.onblur = function(e) {
	 base1.hideSuggest = true 
      setTimeout(function() {
        base1.hide();
      }, 500);
    }
    base1._OBJ_panel.onfocus = function(e) { //got focus
		//alert('base1._OBJ.onfocus');
		base1.hideSuggest = false;
    };
    base1.getDestinations = function (e) {

        if( navigator.appName.indexOf("Microsoft") == -1 ) {
          event = e;
        }        
        var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
        //if( document.getElementById('tr_'+base1.index) == undefined || document.getElementById('tr_'+base1.index) == null ) {
          //  base1.index = 0;
        //}
        if( (keyCode == 38 || keyCode == 40) && base1.index != -1 ) {
            if( document.getElementById('tr'+(base1.index)) != undefined || document.getElementById('tr'+(base1.index)) != null ) {
                document.getElementById('tr'+(base1.index)).onmouseout(); 
            }  
        }                
        if( keyCode == 40 ) {//cursor down
            base1.index++;
            if( document.getElementById('tr'+base1.index) != undefined || document.getElementById('tr'+base1.index) != null ) {
              document.getElementById('tr'+base1.index).onmouseover();
              base1.maxindex = base1.index;
              base1._OBJ_panel.scrollTop = base1._OBJ_panel.scrollTop + 5; 
            }            
        } else if( keyCode == 38 ) {//cursor up 
          if( base1.index !=0 && base1.index != -1 ) {
            base1.index--;
            if( document.getElementById('tr'+(base1.index)) != undefined || document.getElementById('tr'+(base1.index)) != null ) {
              document.getElementById('tr'+base1.index).onmouseover();
            } else {
              document.getElementById('tr'+base1.maxindex).onmouseover();
            }
            base1._OBJ_panel.scrollTop = base1._OBJ_panel.scrollTop - 5;  
          } else {
            base1.index = -1;
          }              
        }                           
    };     
  } else {
    //no field found..
    alert("Field with ID " + id + " couldn't found!");
  }  
};

document.onkeyup = function(event) {
  if( event != null && event != undefined ) {
    var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
    if(keyCode == 13 && oscSearchSuggest1.index != -1) {
      document.getElementById('td'+oscSearchSuggest1.index).onclick();
      return false;      
    } else {
      return true;
    }
  }  
}

