//----------------------------------------------------------------------------------------------------------------------------------------
// Geben Sie hier Ihre Konfigurationsdatei an.
// Wenn Sie eine angepasste Version bestellt haben ist dies normalerweise nicht erforderlich.
// Wenn Sie die Vollversion bestellt haben, nehmen Sie die Einstellungen bitte im Adminbereich vor.
//----------------------------------------------------------------------------------------------------------------------------------------
if(! ISFConfigFile){
    var ISFConfigFile = 'http://suchfeld.storedit.de/entertainmarket_com/isf_cfg.js';
}
//----------------------------------------------------------------------------------------------------------------------------------------
//  Alle Einstellungen werden in der Konfigurationsdatei vorgenommen.
//  Eine Anpassung des nachfolgenden Codes ist nicht erforderlich.
//  Weitere Informationen zur Konfiguration finden Sie in der beiliegenden
//  Dokumentation unter dem Punkt "Die Konfigurationsdatei des ISF-Frontend"
//----------------------------------------------------------------------------------------------------------------------------------------

    /* ------------------------------- *\         /----------------\       /----------------------\       /----------------------\
    |                                   |         | Redundante     |       | Datenspeicherung     |       |                      |
    |   Intelligent Search Field ISF    |  -----> | Datenerfassung | ----> | Statistiken          |       | Statistik            |
    |   Autor: Kristian Fischer         |         \----------------/       | Langzeitgedächnis    |       | Analyse              |
    |                                   |                                  | Webcrawler           |       | Kontrolle            | 
    |                                   |  <-----------------------------> | Datenerfassung       | <---> |                      |
    |   ISF-Frontend Ihrer Besucher     |                                  | Basisdatensätze      |       | ISF-Backend / Admin  |
    |                                   |         /----------------\       | Lernvorgänge         |       |                      |
    |   Suchvorschläge                  |         | Redundante     |       | Datenaufbereitung    |       | Besucherwünsche      |
    |   Eingabeprüfung (Ort/Mail/Bank)  |  <----- | Datenausgabe   | <---- | Datenauslieferung    |       | Angebote             |
    |   Eingabevervollständigung        |         \----------------/       \----------------------/       | Lernverhalten        |
    |   Rechtschreibprüfung             |                                                                 |                      |
    |                                   |                                                                 \----------------------/
    \* ------------------------------- */

//-----------------------------------------------------------------------------------------------------------------------------------------
var ISF_VERSION = 1.05;
//-----------------------------------------------------------------------------------------------------------------------------------------

//-----------------------------------------------------------------------------------------------------------------------------------------
            /*   please, don't edit, don't waste our time  */
//-----------------------------------------------------------------------------------------------------------------------------------------

/* hide */
var debug = 0;
var ISFBasicFunctions = {
	init: function () {
           if(ISFConfigFile){
              if(! ISF.configLoaded){
	         ISF.loadData(ISFConfigFile);
	         ISF.configLoaded = 1;
		 ISF.onLoadFunctions = [];
		 if ((window.onload === undefined) || (window.onload === null)) {

		 }else{
                     ISF.onLoadFunctions.push(window.onload);
		 }
		 ISFBasicFunctions.addEvent(window, "load", ISF.initOnLoad, false);
	      }


	      if(document.body && document.body.lastChild && window.ISPC && window.ISFready.now){
                 ISF.init();
	      }else{
	         setTimeout(arguments.callee, 100);
	      }

	   }
	   // ISFBasicFunctions.addEvent(window, "load", ISF.init, false);
	},
	addEvent: function (objRef, eventType, functionToCall, captureSwitch) {
	   if (objRef.addEventListener) {
	      objRef.addEventListener(eventType, functionToCall, captureSwitch);
	      return true;
	   } else if (objRef.attachEvent) {
	      return objRef.attachEvent("on"+eventType, functionToCall);
	   } else {
	      // error handling
	      return false;
	   }
	},
	findPos: function(obj){
	   var curleft = curtop = 0;
	   if(obj.offsetParent){
	      curleft = obj.offsetLeft
	      curtop = obj.offsetTop
	      while(obj = obj.offsetParent){
	         curleft += obj.offsetLeft;
	         curtop  += obj.offsetTop;
	      }
	   }
	   return [curleft,curtop];
	},
	calcPopupPosition: function(mcoords,winsize){
	   var xoff = yoff = xwin = ywin = xpos = ypos = 0;

	   if(window.pageYOffset){
	      yoff = window.pageYOffset;
	   }else if(document.documentElement && document.documentElement.scrollTop){
	      yoff = document.documentElement.scrollTop;
	   }else if(document.body && document.body.scrollTop){
	      yoff = document.body.scrollTop;
	   }

	   if(window.pageXOffset){
	      xoff = window.pageXOffset;
	   }else if(document.documentElement && document.documentElement.scrollLeft){
	      xoff = document.documentElement.scrollLeft;
	   }else if(document.body && document.body.scrollLeft){
	      xoff = document.body.scrollLeft;
	   }

	   if(self.innerHeight){
	      xwin = self.innerWidth;
	      ywin = self.innerHeight;
	   }else if (document.documentElement && document.documentElement.clientHeight){
	      xwin = document.documentElement.clientWidth;
	      ywin = document.documentElement.clientHeight;
	   }else if(document.body){
	      xwin = document.body.clientWidth;
	      ywin = document.body.clientHeight;
	   }

	   if((mcoords[1] - yoff - winsize[1] - 25) < 0){
	      ypos = mcoords[1] + 25;
	   } else {
	      ypos = (mcoords[1] - (20 + winsize[1]));
	   }

	   xpos = mcoords[0];

	   /*
	   if((mcoords[0] - xoff + (winsize[0] / 2)) > xwin){
	      xpos = (xwin - 20 - winsize[0] + xoff);	
	   } else if((mcoords[0] - xoff - (winsize[0] / 2)) < 0){
	      xpos =  20 + xoff;
	   } else{
	      xpos = mcoords[0] - (winsize[0] / 2);
	   }
	   */
	   
	   return [xpos,ypos];
	},
	uriEncodeString: function(txt){
	   if(typeof encodeURIComponent=="function"){
	      return encodeURIComponent(txt);
	   }else{
	      return escape(txt);
	   }
	},    
	catchEvent: function(e){
            var targ;
	    if(!e){
	        var e = window.event;
                if(!e){
                   if(PageEnv.LastActiveElement){
                       e = PageEnv.LastActiveElement;
	               PageEnv.LastActiveElement = false;
		   }else{
	               return false;
		   }
	        }
	    }
	    PageEnv.LastActiveElement = e;
	    if(e.target){
	       targ = e.target;
	    } else if(e.srcElement){
	       targ = e.srcElement;
	    }
	    if(targ){
	       if((targ.nodeType)&&(targ.nodeType == 3)){
	          targ  = targ.parentNode;
	       }
	    }
	    return targ;
        },
	utf8_encode: function(string) {
    	   string = string.replace(/\r\n/g,"\n");
    	   var utftext = "";
    	   var start, end;
     	   start = end = 0;
    	   for (var n = 0; n < string.length; n++) {
        	var c = string.charCodeAt(n);
        	var enc = null; 
        	if (c < 128) {
            		end++;
        	}else if((c > 127) && (c < 2048)) {            
			enc = String.fromCharCode((c >> 6) | 192) + String.fromCharCode((c & 63) | 128);
        	}else {
            		enc = String.fromCharCode((c >> 12) | 224) + String.fromCharCode(((c >> 6) & 63) | 128) + String.fromCharCode((c & 63) | 128);
        	}        
		if (enc != null){
            		if (end > start){
                		utftext += string.substring(start, end); 
	                }
            		utftext += enc;
            		start = end = n+1;
        	}
     	   }
    	   if (end > start){
              utftext += string.substring(start, string.length);
    	   } 
    	   return utftext;
        }
};
var PageEnv = {
	selfURL : window.location.href,
	IdCount : 1000,
	NodeConfig : {},
	NodeParams : {}	
};
var ISF = {
	init: function () {
	   if(debug){ window.status = "ISF init"; } 
	   if(debug){ window.status = "ISPC"; } 

	   for (var i = 0; i < ISPC.Pages.length; i++){
	       if(ISPC.Pages[i].Switch == "on"){
	          for(var s = 0; s < ISPC.Pages[i].Urls.length; s++){
		      //if(ISPC.Pages[i].Urls[s] == PageEnv.selfURL){
		      if((PageEnv.selfURL.indexOf(ISPC.Pages[i].Urls[s]) == 0) || (ISPC.Pages[i].Urls[s] == "*")){

		          //alert("Page found " + i + " " + s + " " + PageEnv.selfURL);
			  if(ISPC.Pages[i].onLoad){
			     if(ISPC.Pages[i].onLoad.length){
			        for(var n in ISPC.Pages[i].onLoad){

				   if(debug){ window.status = ISPC.Pages[i].onLoad[n]; }

                                   if(ISPC.Pages[i].onLoad[n] == "init"){
	                              ISF.onLoadFunctions.push(ISF.init);
				   }			        
                                }
                             }
	                     ISPC.Pages[i].onLoad = [];
                          }
			  for(var f = 0; f < ISPC.Pages[i].Forms.length; f++){
			      if((ISPC.Pages[i].Forms[f].Switch == "on") && (! ISPC.Pages[i].Forms[f].Loaded)){
				  

			          if(debug){ window.status = "Page found " + i + " " + s + " "+ f + " " + PageEnv.selfURL + " " + ISPC.Pages[i].Forms[f].IdxNr; }

				  var thisForm = document.getElementsByTagName("form")[ISPC.Pages[i].Forms[f].IdxNr];

				  if(debug){ window.status = "Form: " + ISPC.Pages[i].Forms[f].IdxNr + " => " + thisForm; }

				  if(thisForm){


				      ISPC.Pages[i].Forms[f].Loaded = true;
				  
				      if(debug){ window.status = "Form found " + ISPC.Pages[i].Forms[f].IdxNr;}


				      var thisConfig = ISPC.Pages[i].Forms[f];
				      ISF.activateForm(thisConfig,thisForm);
				      ISF.activateFields(thisConfig,thisForm);
				   }



			      }
			  }
		      }
		  }
	       }
	   }
	},
	initOnLoad: function() {
	   if(ISF.onLoadFunctions.length){
	      for(var i in ISF.onLoadFunctions){
		 ISF.onLoadFunctions[i].apply();
	      }
	   }
	},
	dispatchAll: function(arg) {
	   if(!arg){
	      return;
	   }
	   if(typeof arg == "boolean"){
		return arg;
	   }
	   if(arg == "true"){
	      var res = new Boolean(true);
	   }else{
	      var res = new Boolean(false);
	   }  
	   return res;
	},
	activateForm : function(thisCfg,thisForm) {
           var thisId = thisForm.id;
           if(! thisId){
	      PageEnv['IdCount'] = PageEnv['IdCount'] + 1;
	      thisId = PageEnv['IdCount'];
	      thisForm.id = thisId;
	   }

           PageEnv.NodeConfig[thisId] = thisCfg;
	   PageEnv.NodeParams[thisId] = new Object();
           var thisEvents = thisCfg["Events"];


	   for(var i in thisEvents){
	      if(thisEvents[i]['function'] == "submitForm"){
	         ISFBasicFunctions.addEvent(thisForm, thisEvents[i]['event'], ISF.submitForm, false);
	      }else if(thisEvents[i]['function'] == "adminSubmit"){
	         ISFBasicFunctions.addEvent(thisForm, thisEvents[i]['event'], ISF.adminSubmit, false);
	      }
	      PageEnv.NodeParams[thisId][thisEvents[i]['event']] = thisEvents[i]['params'];
	      if(debug){ window.status = "activateForm: " + i + " " + thisEvents[i]['event'] + " " + thisEvents[i]['params']; }
          }

        },
	activateFields : function(thisCfg,thisNode) {
           var ThisId   = thisNode.id;
           var ThisName = thisNode.name;
	   if(thisNode.tagName){
              var ThisTag = thisNode.tagName.toLowerCase();

	      //if(debug){ window.status = "Found " + ThisTag + " " + ThisName; }

	      if(thisCfg['Elements'][ThisTag]){
	         for(var i in thisCfg['Elements'][ThisTag]){
		     var found = 0;
		     if(thisCfg['Elements'][ThisTag][i].Switch == "on"){		        
		        if(thisCfg['Elements'][ThisTag][i].Name == ThisName){
		            found = 1;
			}
		     }

		     if(found == 1){
		        //var FieldCoords = ISFBasicFunctions.findPos(thisNode);
			var FieldCfg    = thisCfg['Elements'][ThisTag][i];
			if(FieldCfg.Rotate){
			    if(FieldCfg.Rotate == "on"){
			        var thisTime = new Date();
				if(! FieldCfg.Name){
				   FieldCfg.Name = thisNode.name;
				}
				thisNode.name = FieldCfg.Name + '_' + thisTime.getTime();
				FieldCfg.NewName = thisNode.name;
			    }
			}
			if(! thisNode.id){
			   thisNode.id = FieldCfg.Id;
			}
			ISF.bindEventsTo(FieldCfg, thisNode);


		        if(debug){ window.status = "Found " + ThisTag + " " + ThisName + " " + thisNode.name; }
		     }
		 }
	      }
           }           
	   if (thisNode.hasChildNodes) {
              for(var i in thisNode.childNodes){
	         var res = this.activateFields(thisCfg,thisNode.childNodes[i]);
	      }
	   }
	},
	bindEventsTo : function(thisCfg,thisNode){
	    if(thisCfg.BindTo){
		var thisId = thisNode.id;
		if(! thisId){
		       PageEnv['IdCount'] = PageEnv['IdCount'] + 1;
		       thisId = PageEnv['IdCount'];
		       thisNode.id = thisId;
		}
                thisCfg['Id'] = thisId;
		PageEnv.NodeConfig[thisId] = thisCfg;
		PageEnv.NodeParams[thisId] = new Object();

	        for(var i in thisCfg.BindTo){
		    if(thisCfg.BindTo[i]['function'] == "setStyle"){
		         ISFBasicFunctions.addEvent(thisNode, thisCfg.BindTo[i]['event'], ISF.setStyles, false);
		    }
		    if(thisCfg.BindTo[i]['function'] == "SpellCheck"){
		         ISFBasicFunctions.addEvent(thisNode, thisCfg.BindTo[i]['event'], ISF.SpellCheck, false);
		    }
		    if(thisCfg.BindTo[i]['function'] == "SuggestTerms"){
		         ISFBasicFunctions.addEvent(thisNode, thisCfg.BindTo[i]['event'], ISF.SuggestTerms, false);
		    }
		    if(thisCfg.BindTo[i]['function'] == "closeSuggests"){
		         ISFBasicFunctions.addEvent(thisNode, thisCfg.BindTo[i]['event'], ISF.closeSuggests, false);
		    }
		    if(thisCfg.BindTo[i]['function'] == "setFocus"){
		         ISFBasicFunctions.addEvent(thisNode, thisCfg.BindTo[i]['event'], ISF.setFocus, false);
		    }
		    /* 
		    if(thisCfg.BindTo[i]['event'] == "load"){
			 ISF.onLoadFunctions.push(thisCfg.BindTo[i]['function']);
		    }
		    var funcString = 'ISF.' + thisCfg.BindTo[i]['function'];
		    ISFBasicFunctions.addEvent(thisNode, thisCfg.BindTo[i]['event'], eval(funcString), false);
		    alert("Bind " + thisNode + " " + thisNode.name + " " + thisCfg.BindTo[i]['event']); */

		    PageEnv.NodeParams[thisId][thisCfg.BindTo[i]['event']] = thisCfg.BindTo[i]['params'];				     
							     
		}
		if(thisCfg.Headline){
		    PageEnv.NodeParams[thisId]['Headline'] = thisCfg.Headline
		}
	    }

	},
	setFocus: function(e) {
	   var thisNode = ISFBasicFunctions.catchEvent(e);
	   if(thisNode.id){
	      PageEnv.activatedField = thisNode.id;
	      window.status = "Activated: " + thisNode.id;	   
	   }
	},
	fillAndSubmit: function() {
	   PageEnv.clicked = 1;
           var thisTarget   = document.getElementById(PageEnv.activatedField);
	   thisForm = thisTarget.form;
 	   PageEnv.submittedFormId = thisForm.id;
	   PageEnv.submittedFormEventType = 'submit';
	   PageEnv.submittedFormAction = thisForm.action;
	   PageEnv.submittedFormCaller = 'dblclickedSuggest';
	   thisForm.action = "javascript: ISF.dispatchAll()";
	   ISF.submitFormRotate();
	},
	submitForm: function(e) {
	   var thisForm = ISFBasicFunctions.catchEvent(e);

	   if(thisForm.form){
		thisForm = thisForm.form;
	   }

	   if(debug){ window.status = "Form: " + thisForm + " " + thisForm.id + " " + thisForm.nodeType; }

	   var thisId   = thisForm.id;
	   PageEnv.submittedFormId = thisId;
	   PageEnv.submittedFormEventType = e.type;
           PageEnv.submittedFormAction = thisForm.action;	
	   PageEnv.submittedFormCaller = 'search';
	   thisForm.action = "javascript: ISF.dispatchAll()";
	   var SpellCheck    = "off";
	   var SpellCheckUrl = "";

           if(PageEnv.NodeParams[thisId][e.type]){
	      var thisParams = PageEnv.NodeParams[thisId][e.type];
	      for(var i in thisParams){
		  var ParamVal    = thisParams[i].split(" ",2);
		  if((ParamVal[0] == "spellcheck")&&(ParamVal[1] == "on")){
		      SpellCheck = "on";
		  }
		  if((ParamVal[0] == "spellcheck_url")&&(SpellCheck == "on")){
		      SpellCheckUrl = ParamVal[1];
		  }
		  if(ParamVal[0] == "spellcheck_type"){
		      PageEnv.SpellCheckType = ParamVal[1];
		  }

              }
	      if(debug){ window.status = thisId + " " + thisForm.action + " " + thisParams.length + " " + PageEnv.NodeParams[thisId][e.type].length + " " + PageEnv.NodeParams[thisId][e.type] + " " + SpellCheck; }
	   }



	   if(SpellCheck == "on"){
	       var thisNode = document.getElementById(PageEnv.activatedField);
	       if(thisNode && thisNode.value){
	       	  var thisString = thisNode.value;

		  if(document.charset == "ISO-8859-1"){
			thisString = ISFBasicFunctions.utf8_encode(thisString);
		  }

	          var SearchString = SpellCheckUrl + "?callback=ISF.handleSpellCheck&q=" + ISFBasicFunctions.uriEncodeString(thisString);
	          ISF.loadData(SearchString);
	       }else{
	           ISF.submitFormRotate();
	       }
	   }else{
	       ISF.submitFormRotate();
	   }
	},
	handleSpellCheck: function(d) {
	    if(PageEnv.SpellCheckType == 'hidden'){
	        if(d.result.suggest){
		    var thisId = PageEnv.submittedFormId;
		    var eType  = PageEnv.submittedFormEventType;
		    var thisFieldName = '';
		    if(PageEnv.NodeParams[thisId][eType]){
		        var thisParams = PageEnv.NodeParams[thisId][eType];
			for(var i in thisParams){
			    var ParamVal = PageEnv.NodeParams[thisId][eType][i].split(" ",2);
			    if(ParamVal[0] == "field_dump"){ 
			        var SearchData  = ParamVal[1];
			    }
			    if(ParamVal[0] == "key"){ 
			        var CallerKey  = ParamVal[1];
			    }
			    if(ParamVal[0] == "caller"){ 
			        var Caller  = ParamVal[1];
			    }
			    if(ParamVal[0] == "callback"){ 
			        var CallBack  = ParamVal[1];
			    }
			    if((ParamVal[0] == "rotate") && (ParamVal[1] == "true")){ 
			        if(PageEnv.NodeConfig[thisId]['Elements']['input']){
				    for(var i in PageEnv.NodeConfig[thisId]['Elements']['input']){
				        if(PageEnv.NodeConfig[thisId]['Elements']['input'][i]['Name']){
					    var thisElement = document.getElementById(PageEnv.NodeConfig[thisId]['Elements']['input'][i]['Id']);
					    if(thisElement){
					        thisFieldName = PageEnv.NodeConfig[thisId]['Elements']['input'][i]['Name'];
	                                    }		             
			                }
		                    }
	                        }
		            }
                        }
	            }
		    if(thisFieldName){
		        var thisNode = document.getElementById(PageEnv.submittedFormId);
			var thisHiddenField = document.createElement("input");
			thisHiddenField.type = 'hidden';
			thisHiddenField.name = thisFieldName;
			thisHiddenField.value = d.result.suggest;
			thisNode.appendChild(thisHiddenField);
			if(SearchData){
			    var SearchString = SearchData + "?cmd=search&q=" + ISFBasicFunctions.uriEncodeString(d.result.suggest) + "&callback=ISF." + CallBack + "&caller=" + 
								ISFBasicFunctions.uriEncodeString(Caller) + "&key=" + ISFBasicFunctions.uriEncodeString(CallerKey);
			    ISF.loadData(SearchString);
			}else{
			    ISF.submitFormNow();	
			}		
	                return true;
		    }else{
		        ISF.submitFormRotate();
	                return true;
		    }
		}	    
	    }

	    var thisNode = document.getElementById(PageEnv.activatedField);
	    if(d.result.suggest){	        
	   	thisNode.value = d.result.suggest;
	    }
	    ISF.submitFormRotate();
            return true;
	},
	submitFormRotate: function() {
	   var thisId = PageEnv.submittedFormId;
	   var eType  = PageEnv.submittedFormEventType;
	   var thisForm = document.getElementById(thisId);
           if(PageEnv.NodeParams[thisId][eType]){
	      var thisParams = PageEnv.NodeParams[thisId][eType];
	      for(var i in thisParams){
		var ParamVal     = PageEnv.NodeParams[thisId][eType][i].split(" ",2);
		if(ParamVal[0] == "field_dump"){ 
		    var SearchData  = ParamVal[1];
		}
		if(ParamVal[0] == "caller"){ 
		    var Caller  = ParamVal[1];
		}
		if(ParamVal[0] == "callback"){ 
		    var CallBack  = ParamVal[1];
		}
		if(ParamVal[0] == "key"){ 
		    var CallerKey  = ParamVal[1];
		}
		if(ParamVal[0] == "SearchMode"){ 
		    var SearchMode  = ParamVal[1];
		}
		if((ParamVal[0] == "rotate") && (ParamVal[1] == "true")){ 
		   if(PageEnv.NodeConfig[thisId]['Elements']['input']){
		       for(var i in PageEnv.NodeConfig[thisId]['Elements']['input']){
                          if(PageEnv.NodeConfig[thisId]['Elements']['input'][i]['Name']){
                             var thisElement = document.getElementById(PageEnv.NodeConfig[thisId]['Elements']['input'][i]['Id']);
		             if(thisElement){
	                         thisElement.name = PageEnv.NodeConfig[thisId]['Elements']['input'][i]['Name'];
				 var thisString = thisElement.value;
                                 // alert(thisElement.name + " " + thisElement.value);
	                     }		             
			  }
		       }
	            }
		 }
              }
	   }


	   if(SearchData){
               var FormCaller = (PageEnv.submittedFormCaller)? PageEnv.submittedFormCaller : '';
	       var SearchString = SearchData + "?cmd=search&q=" + ISFBasicFunctions.uriEncodeString(thisString) + "&callback=ISF." + CallBack + "&caller=" + ISFBasicFunctions.uriEncodeString(Caller) + "&key=" + ISFBasicFunctions.uriEncodeString(CallerKey) + "&SearchMode=" + SearchMode + "&FormCaller=" + FormCaller;
	       ISF.loadData(SearchString);
	   }else{
		ISF.submitFormNow();	
	   }
	},

	submitFormNow: function(d) {
	   if(d && d.result.url){
	      document.location.href = d.result.url;
	   }else{
	      var thisForm = document.getElementById(PageEnv.submittedFormId);
	      thisForm.action = PageEnv.submittedFormAction;
	      thisForm.submit();
	   }
	   return false;
	},
	SuggestTerms : function(e) {
	    if(!e){
		var e = window.event;
	    } 
	    if(e.keyCode == 13) {
 		return false;
	    }
	    var thisNode = ISFBasicFunctions.catchEvent(e);
	    PageEnv.activatedField = thisNode.id;
	    PageEnv.waitingFieldId = thisNode.id;
	    PageEnv.waitingEventType = e.type;
	    setTimeout("ISF.SuggestTermsNow()",250);
	},	    
	SuggestTermsNow : function() {
	    var thisNode = document.getElementById(PageEnv.waitingFieldId);
	    if(!thisNode){
		return;
	    }
	    var SearchData    = "";
	    var SearchTopics  = "";
	    var SearchSort    = "";
	    var Caller        = "";
	    var OverMode      = "";
	    var ClickMode     = "";
	    var SuggestMode   = "";
	    var SuggestNum    = "";
	    var DblClickMode  = "";
	    for(var i in PageEnv.NodeParams[thisNode.id][PageEnv.waitingEventType]){
	        if(debug){ window.status = PageEnv.NodeParams[thisNode.id][PageEnv.waitingEventType][i]; }
		var ParamVal     = PageEnv.NodeParams[thisNode.id][PageEnv.waitingEventType][i].split(" ",2);
		if(ParamVal[0] == "src"){
		   SearchData = ParamVal[1];
		}
		if(ParamVal[0] == "topics"){
		   SearchTopics = ParamVal[1];
		}
		if(ParamVal[0] == "sort"){
		   SearchSort = ParamVal[1];
		}
		if(ParamVal[0] == "callback"){
		   CallBack = ParamVal[1];
		}
		if(ParamVal[0] == "key"){ 
		   var CallerKey  = ParamVal[1];
		}
		if(ParamVal[0] == "target"){ 
		   var Target  = ParamVal[1];
		   PageEnv.TargetId = ParamVal[1];
		}
		if(ParamVal[0] == "DblClickMode"){ 
		    DblClickMode  = ParamVal[1];
		}
		if(ParamVal[0] == "caller"){
		   Caller = ParamVal[1];
		}
		if(ParamVal[0] == "OverMode"){ 
		    OverMode = ParamVal[1];
		}
		if(ParamVal[0] == "ClickMode"){ 
		    ClickMode  = ParamVal[1];
		}
		if(ParamVal[0] == "SuggestMode"){ 
		    SuggestMode = ParamVal[1];
		}
		if(ParamVal[0] == "SuggestNum"){ 
		    SuggestNum = ParamVal[1];
		}
	    }			    
	    var thisString = thisNode.value;


	    if(thisString.length > 0){
		var SearchString = SearchData + "?q=" + ISFBasicFunctions.uriEncodeString(thisString) + "&callback=ISF." + CallBack + "&caller=" + ISFBasicFunctions.uriEncodeString(Caller) + "&key=" + ISFBasicFunctions.uriEncodeString(CallerKey) + "&OverMode=" +  OverMode + "&DblClickMode=" +  DblClickMode + "&ClickMode=" +  ClickMode + "&SuggestMode=" +  SuggestMode + "&SuggestNum=" +  SuggestNum;
		ISF.loadData(SearchString);

	        if(debug){ window.status = thisString + " " + thisString.length + " " + SearchData + " " + SearchTopics + " " + SearchSort; }

	    }else{
	        ISF.closeSuggests();
	    }
	    PageEnv.waitingFieldId = '';
	    PageEnv.waitingEventType = '';
	    return false;
	},
	popUpSuggests : function() {
	   var activeNode = document.getElementById("IsfSuggestPopUp");
	   if(activeNode){
	      if(debug){ window.status = "Still open"; }
              //ISF.cleanSuggests(activeNode);
	      return true;
	   }
	   if(!ISF_wsize){
	      var ISF_wsize = [200,120];
	   }

	   thisNode    = document.getElementById(PageEnv.activatedField);

	   var mpos    = ISFBasicFunctions.findPos(thisNode);
	   var pcoords = ISFBasicFunctions.calcPopupPosition(mpos,ISF_wsize);

	   var pos_x   = pcoords[0]  + "px";

	   /* var pos_y   = pcoords[1]  + "px"; */
	   /* workarround fuer storedit hier funktioniert die Positionserkennung nicht richtig */

	   var pos_y   = pcoords[1];
	   pos_y = (pos_y + 165);
	   pos_y = pos_y + "px";

	   /* ende */

	   if(debug){ window.status = pos_x + " " + pos_y; }


	   var thisDiv = document.createElement("div");
	   thisDiv.id  = "IsfSuggestPopUp";

	   thisDiv.style.position = "absolute";
	   // thisDiv.style.width    = ISF_wsize[0] + "px";
	   // thisDiv.style.height   = ISF_wsize[1] + "px";
	   thisDiv.style.top      = pos_y;
	   thisDiv.style.left     = pos_x;
	   thisDiv.style.display  = "inline";

	   /* var thisP   = document.createElement("p");
	   thisP.className = "header";
	   var thisTXT = document.createTextNode("Suchvorschl&auml;ge");	   
	   thisP.appendChild(thisTXT);
	   thisDiv.appendChild(thisP); */
	    
	   document.getElementsByTagName("body")[0].appendChild(thisDiv);
	   return false;
	},
	cleanSuggests : function(thisNode) {
           if(thisNode){
	      if (thisNode.hasChildNodes) {
	         var nodeElements = thisNode.childNodes.length;
                 for(var i = 0; i < nodeElements; i++){
		    try { var res = thisNode.removeChild(thisNode.childNodes[0]); } catch (e) {  alert(e) };
	         }
	      }
           }
	   return 1;
	},
	closeSuggests : function() {
	   if(PageEnv.mouseOnLink){
		return false;
	   }
	   setTimeout("ISF.closeSuggestsNow()", 100);
	},
	closeSuggestsNow : function() {
	   var activeNode = document.getElementById("IsfSuggestPopUp");
           if(activeNode){
              var res = ISF.cleanSuggests(activeNode);
	      document.getElementsByTagName("body")[0].removeChild(activeNode);
           }
           return false;
	},

	handleSuggestTerms : function(d) {
	   if(debug){ window.status = d; }
	   if((d.result.suggests)||(d.result.private)){
	      ISF.popUpSuggests();
	      var thisNode = document.getElementById("IsfSuggestPopUp");
	      var res = ISF.cleanSuggests(thisNode);
	      if(d.result.private){
	          for(var i in d.result.private){

	      	      var thisP   = document.createElement("div");
		      thisP.className = "resultSet";

		      var thisA   = document.createElement("a");
		      thisA.href  = 'javascript: ISF.dispatchAll()';
		      var thisId  = "IsfSuggestPopUpPrivate" + i;
		      thisA.id = thisId;

		      if(d.query.DblClickMode == "fill"){
		          ISFBasicFunctions.addEvent(thisA, "dblclick", ISF.thisTermToField, false);
		      }
		      if(d.query.DblClickMode == "search"){
		          ISFBasicFunctions.addEvent(thisA, "dblclick", ISF.fillAndSubmit, false);
		      }

		      if(d.query.ClickMode == "fill"){
		          ISFBasicFunctions.addEvent(thisA, "click", ISF.thisTermToField, false);
		      }
		      if(d.query.ClickMode == "search"){
		          thisA.href  = 'javascript: ISF.clickedTerm("' + d.result.private[i].words_id + '")';
		      }

		      thisA.title = d.result.private[i].urls_title;


		      PageEnv.NodeParams[d.result.private[i].words_id] = { 'src' : d.urls.src,
									   'callback': d.urls.callback,
									   'term' : d.result.private[i].words_word,
									   'url_id' : d.result.private[i].words_url_id,
									   'id' : d.result.private[i].words_id,
									   'rank' : d.result.private[i].words_rank,
									   'caller' : d.urls.caller,
									   'cmd' : d.urls.cmd };
		      if(d.query.OverMode == "fill"){
		      	 ISFBasicFunctions.addEvent(thisA, "mouseover", ISF.thisTermToField, false);		    
		      	 ISFBasicFunctions.addEvent(thisA, "mouseout", ISF.resetTerm, false);
		      }

		      var thisTXT = document.createTextNode(d.result.private[i].words_word);	   
		      thisA.appendChild(thisTXT);
		      thisP.appendChild(thisA);
		      thisNode.appendChild(thisP);
	          }
              }
	      if(d.result.suggests){
	          var thisId = document.getElementById(PageEnv.activatedField).id;
	      	  var thisP   = document.createElement("div");
		  thisP.className = "resultHeadline";
		  var thisTXT = document.createTextNode(PageEnv.NodeParams[thisId]['Headline']);
		  thisP.appendChild(thisTXT);
		  thisNode.appendChild(thisP);
	
	          for(var i in d.result.suggests){

	              var thisP   = document.createElement("div");
		      thisP.className = "resultSet";

		      var thisA   = document.createElement("a");
		      var thisId  = "IsfSuggestPopUp" + i;
		      thisA.id    = thisId;
		      thisA.title = d.result.suggests[i].urls_title;

		      PageEnv.NodeParams[d.result.suggests[i].words_id] = { 'src' : d.urls.src,
									    'callback': d.urls.callback,
									    'key': d.urls.key,
									    'term' : d.result.suggests[i].words_word,
									    'url_id' : d.result.suggests[i].words_url_id,
									    'id' : d.result.suggests[i].words_id,
									    'rank' : d.result.suggests[i].words_rank,
									    'caller' : d.urls.caller,
									    'cmd' : d.urls.cmd };

		      if(d.query.OverMode == "fill"){
		      	 ISFBasicFunctions.addEvent(thisA, "mouseover", ISF.thisTermToField, false);		    
		      	 ISFBasicFunctions.addEvent(thisA, "mouseout", ISF.resetTerm, false);
		      }else{
		      	 ISFBasicFunctions.addEvent(thisA, "mouseover", ISF.activateTerm, false);
		      	 ISFBasicFunctions.addEvent(thisA, "mouseout", ISF.resetTerm, false);
		      }
		      switch (d.query.DblClickMode) {
  			  case "fill":
    			     ISFBasicFunctions.addEvent(thisA, "dblclick", ISF.thisTermToField, false);
    			  break;
  			  case "search":
    			     ISFBasicFunctions.addEvent(thisA, "dblclick", ISF.fillAndSubmit, false);
    			  break;
  			  case "none":
    			     ISFBasicFunctions.addEvent(thisA, "dblclick", ISF.activateTerm, false);
    			  break;
		      };
		      switch (d.query.ClickMode) {
  			  case "fill":
			     thisA.href  = 'javascript: ISF.clickedTermToField("' + d.result.suggests[i].words_id + '")';
    			     /* ISFBasicFunctions.addEvent(thisA, "click", ISF.thisTermToField, false); */
    			  break;
  			  case "search":
   			     /* ISFBasicFunctions.addEvent(thisA, "click", ISF.fillAndSubmit, false); */
			     thisA.href  = 'javascript: ISF.clickedTerm("' + d.result.suggests[i].words_id + '")';
   			  break;
  			  case "none":
   			     ISFBasicFunctions.addEvent(thisA, "click", ISF.dispatchAll, false);
   			  break;
		      };

		      var thisTXT = document.createTextNode(d.result.suggests[i].words_word);	   
		      thisA.appendChild(thisTXT);
		      thisP.appendChild(thisA);
		      thisNode.appendChild(thisP);
	          }
              } 
            }else{
                 var res = ISF.closeSuggests();
	    }
            return false;
	},
        activateTerm : function(){
	    PageEnv.mouseOnLink = 1;
	},
        resetTerm : function(){
	    PageEnv.mouseOnLink = 0;
	},
        clickedTerm : function(id) {
 	    PageEnv.clicked = 1;
            PageEnv.mouseOnLink = 0;
	    var Cfg = PageEnv.NodeParams[id];

            var thisTarget = document.getElementById(PageEnv.activatedField);
	    thisTarget.value = Cfg['term'];

	    var SearchString = Cfg['src'] + "?url_id=" + Cfg['url_id'] + "&id=" + Cfg['id'] + "&q=" + Cfg['term'] + "&cmd=" + Cfg['cmd'] + "&callback=ISF." + Cfg['callback'] + "&caller=" + ISFBasicFunctions.uriEncodeString(Cfg['caller']) + "&key=" + ISFBasicFunctions.uriEncodeString(Cfg['key']);
	    ISF.loadData(SearchString);
	    ISF.closeSuggestsNow();
	},
	jumpTo : function(d) {
	   if(d.result.url){
	      document.location.href = d.result.url;
	   }
	},
        clickedTermToField : function(id) {
            PageEnv.mouseOnLink = 1;
	    var Cfg = PageEnv.NodeParams[id];
            var thisTarget = document.getElementById(PageEnv.activatedField);
	    thisTarget.value = Cfg['term'];
	},
	thisTermToField : function(e) {
            PageEnv.mouseOnLink = 1;
	    if(!e){
		var e = window.event;
	    }	
	    var thisNode = ISFBasicFunctions.catchEvent(e);
            var thisTarget = document.getElementById(PageEnv.activatedField);
	    thisTarget.value = thisNode.firstChild.nodeValue;
	},
	loadData : function(Target) {
	    ISF.s            = document.createElement("script");
	    ISF.s.type       = "text/javascript";
	    ISF.s.language   = "javascript";
	    ISF.s.charset    = "utf-8";
	    ISF.s.src        = Target;
	    document.getElementsByTagName('head')[0].appendChild(ISF.s);

	    if(debug){ window.status = "loading: " + ISF.s.src; }

	    return true;
	},
	setStyles : function(e) {
	    if(!e){
		var e = window.event;
	    }	
	    var thisNode = ISFBasicFunctions.catchEvent(e);
	    var thisString = "";
	    for(var i in PageEnv.NodeParams[thisNode.id][e.type]){
	        // alert(PageEnv.NodeParams[thisNode.id][e.type][i]);
		var ParamVal = PageEnv.NodeParams[thisNode.id][e.type][i].split(" ",2);
		thisNode.style[ParamVal[0]] =  ParamVal[1];
	    }
	    //if(debug){ window.status = thisNode.id + " " + e.type + " " +  PageEnv.NodeParams[thisNode.id][e.type] + " " +   PageEnv.NodeConfig[thisNode.id]['Name']; }
        }

};
ISFBasicFunctions.init();

