| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886 | 
							- /*----------------------------------------------------------------------------
 
-  * JavaScript for webhelp search
 
-  *----------------------------------------------------------------------------
 
-  This file is part of the webhelpsearch plugin for DocBook WebHelp
 
-  Copyright (c) 2007-2008 NexWave Solutions All Rights Reserved.
 
-  www.nexwave.biz Nadege Quaine
 
-  http://kasunbg.blogspot.com/ Kasun Gajasinghe
 
-  */
 
- //string initialization
 
- var htmlfileList = "htmlFileInfoList.js";
 
- var htmlfileinfoList = "htmlFileInfoList.js";
 
- var useCJKTokenizing = false;
 
- var w = new Object();
 
- var scoring = new Object();
 
- var searchTextField = '';
 
- var no = 0;
 
- var noWords = 0;
 
- var partialSearch = "<font class=\"highlightText\">There is no page containing all the search terms.<br>Partial results:</font>";
 
- var warningMsg = '<div style="padding: 5px;margin-right:5px;;background-color:#FFFF00;">';
 
- warningMsg+='<b>Please note that due to security settings, Google Chrome does not highlight';
 
- warningMsg+=' the search results in the right frame.</b><br>';
 
- warningMsg+='This happens only when the WebHelp files are loaded from the local file system.<br>';
 
- warningMsg+='Workarounds:';
 
- warningMsg+='<ul>';
 
- warningMsg+='<li>Try using another web browser.</li>';
 
- warningMsg+='<li>Deploy the WebHelp files on a web server.</li>';
 
- warningMsg+='</div>';
 
- txt_filesfound = 'Results';
 
- txt_enter_at_least_1_char = "You must enter at least one character.";
 
- txt_enter_more_than_10_words = "Only first 10 words will be processed.";
 
- txt_browser_not_supported = "Your browser is not supported. Use of Mozilla Firefox is recommended.";
 
- txt_please_wait = "Please wait. Search in progress...";
 
- txt_results_for = "Results for: ";
 
- /* This function verify the validity of search input by the user
 
-   Cette fonction verifie la validite de la recherche entrre par l utilisateur */
 
- function Verifie(searchForm) {
 
-     // Check browser compatibility
 
-     if (navigator.userAgent.indexOf("Konquerer") > -1) {
 
-         alert(txt_browser_not_supported);
 
-         return;
 
-     }
 
-     searchTextField = trim(document.searchForm.textToSearch.value);
 
-     searchTextField = searchTextField.replace(/['"]/g,'');
 
- 	var expressionInput = searchTextField;
 
-     $.cookie('textToSearch', expressionInput);
 
-     if (expressionInput.length < 1) {
 
-         // expression is invalid
 
-         alert(txt_enter_at_least_1_char);
 
-         // reactive la fenetre de search (utile car cadres)
 
-         document.searchForm.textToSearch.focus();
 
-     }
 
-     else {
 
-     var splitSpace = searchTextField.split(" ");
 
-        var splitWords = [];
 
-         for (var i = 0 ; i < splitSpace.length ; i++) {     
 
-           var splitDot = splitSpace[i].split(".");
 
-           
 
-           if(!(splitDot.length == 1)){
 
-             splitWords.push(splitSpace[i]);
 
-           }
 
-           
 
-           for (var i1 = 0; i1 < splitDot.length; i1++) {
 
-                var splitColon = splitDot[i1].split(":");
 
-             for (var i2 = 0; i2 < splitColon.length; i2++) {
 
-                 var splitDash = splitColon[i2].split("-");
 
-                  for (var i3 = 0; i3 < splitDash.length; i3++) {
 
-                      if (splitDash[i3].split("").length > 0) {
 
-                            splitWords.push(splitDash[i3]);
 
-                        }
 
-                  }
 
-             }
 
-           }
 
-        }
 
-        noWords = splitWords;
 
-     	if (noWords.length > 9){
 
-           // Allow to search maximum 10 words
 
-     		alert(txt_enter_more_than_10_words);
 
-     		expressionInput = '';
 
-     		for (var x = 0 ; x < 10 ; x++){
 
-     			expressionInput = expressionInput + " " + noWords[x]; 
 
-     		}    		
 
-     		Effectuer_recherche(expressionInput);
 
-     		document.searchForm.textToSearch.focus();
 
-     	} else {
 
- 	        // Effectuer la recherche
 
-              expressionInput = '';
 
-           for (var x = 0 ; x < noWords.length ; x++) {
 
-                  expressionInput = expressionInput + " " + noWords[x]; 
 
-              }
 
- 	        Effectuer_recherche(expressionInput);
 
- 	        // reactive la fenetre de search (utile car cadres)
 
- 	        document.searchForm.textToSearch.focus();        
 
-     	}
 
-     }
 
- }
 
- var stemQueryMap = new Array();  // A hashtable which maps stems to query words
 
- /* This function parses the search expression, loads the indices and displays the results*/
 
- function Effectuer_recherche(expressionInput) {
 
-     /* Display a waiting message */
 
-     //DisplayWaitingMessage();
 
-     /*data initialisation*/
 
-     var searchFor = "";       // expression en lowercase et sans les caracte    res speciaux
 
-     //w = new Object();  // hashtable, key=word, value = list of the index of the html files
 
-     scriptLetterTab = new Scriptfirstchar(); // Array containing the first letter of each word to look for
 
-     var wordsList = new Array(); // Array with the words to look for
 
-     var finalWordsList = new Array(); // Array with the words to look for after removing spaces
 
-     var linkTab = new Array();
 
-     var fileAndWordList = new Array();
 
-     var txt_wordsnotfound = "";
 
-     // --------------------------------------
 
-     // Begin Thu's patch 
 
-     /*nqu: expressionInput, la recherche est lower cased, plus remplacement des char speciaux*/
 
-     //The original replacement expression is: 
 
-     //searchFor = expressionInput.toLowerCase().replace(/<\//g, "_st_").replace(/\$_/g, "_di_").replace(/\.|%2C|%3B|%21|%3A|@|\/|\*/g, " ").replace(/(%20)+/g, " ").replace(/_st_/g, "</").replace(/_di_/g, "%24_");
 
-     //The above expression was error prone because it did not deal with words that have a . as part of the word correctly, for example, document.txt
 
-     
 
-     //Do not automatically replace a . with a space
 
-     searchFor = expressionInput.toLowerCase().replace(/<\//g, "_st_").replace(/\$_/g, "_di_").replace(/%2C|%3B|%21|%3A|@|\/|\*/g, " ").replace(/(%20)+/g, " ").replace(/_st_/g, "</").replace(/_di_/g, "%24_");
 
-     
 
-     //If it ends with a period, replace it with a space
 
-     searchFor = searchFor.replace(/[.]$/,"");
 
-     // End Thu's Patch
 
-     // ------------------------------------------
 
-     searchFor = searchFor.replace(/  +/g, " ");
 
-     searchFor = searchFor.replace(/ $/, "").replace(/^ /, "");
 
-     wordsList = searchFor.split(" ");
 
-     wordsList.sort();
 
-     //set the tokenizing method
 
-     useCJKTokenizing = typeof indexerLanguage != "undefined" && (indexerLanguage == "zh" || indexerLanguage == "ja" || indexerLanguage == "ko");
 
-     //If Lucene CJKTokenizer was used as the indexer, then useCJKTokenizing will be true. Else, do normal tokenizing.
 
-     // 2-gram tokenizinghappens in CJKTokenizing, 
 
-     //If doStem then make tokenize with Stemmer
 
-     var finalArray;
 
-     if (doStem){
 
- 	    if(useCJKTokenizing){
 
- 	        finalWordsList = cjkTokenize(wordsList);
 
-           finalArray = finalWordsList;
 
- 	    } else { 
 
- 	        finalWordsList = tokenize(wordsList);
 
-           finalArray = finalWordsList;
 
- 	    }
 
-     } else if(useCJKTokenizing){
 
-           finalWordsList = cjkTokenize(wordsList);
 
-           finalArray = finalWordsList;
 
-          } else{
 
-     //load the scripts with the indices: the following lines do not work on the server. To be corrected
 
-     /*if (IEBrowser) {
 
-      scriptsarray = loadTheIndexScripts (scriptLetterTab);
 
-      } */
 
-     /**
 
-      * Compare with the indexed words (in the w[] array), and push words that are in it to tempTab.
 
-      */
 
-     var tempTab = new Array();
 
- 	
 
-     // ---------------------------------------
 
-     // Thu's patch
 
-     //Do not use associative array in for loop, for example:
 
-     //for(var t in finalWordsList)
 
-     //it causes errors when finalWordList contains 
 
-     //stemmed words such as: kei from the stemmed word: key
 
-     for(var t=0;t<finalWordsList.length;++t){
 
-         var aWord=finalWordsList[t];
 
-         //w is a Map like Object, use the current word in finalWordList as the key
 
-         if(w[aWord] == undefined){
 
-             txt_wordsnotfound += aWord + " ";
 
- 	        }
 
-         else{
 
-             tempTab.push(aWord);
 
-     		}
 
-     	}
 
-     	finalWordsList = tempTab;		
 
-     //Check all the inputs to see if the root words are in the finalWordsList, if not add them there
 
-     var inputs = expressionInput.split(' ');
 
-     // Thu's Patch 
 
-     // -------------------------------------------
 
-     
 
-     txt_wordsnotfound = expressionInput;
 
- 	finalWordsList = removeDuplicate(finalWordsList);
 
-     
 
-    }
 
-     if (finalWordsList.length) {
 
-       //search 'and' and 'or' one time
 
-       fileAndWordList = SortResults(finalWordsList);
 
-       
 
-       if (fileAndWordList == undefined){
 
-         	var cpt = 0;
 
-       } else {
 
-       	  var cpt = fileAndWordList.length;
 
- 		  var maxNumberOfWords = fileAndWordList[0][0].motsnb;
 
-       }
 
- 	  if (cpt > 0){
 
- 		var searchedWords = noWords.length;
 
- 		var foundedWords  = fileAndWordList[0][0].motslisteDisplay.split(",").length;
 
- 		//console.info("search : " + noWords.length + "   found : " + fileAndWordList[0][0].motslisteDisplay.split(",").length);
 
- 		if (searchedWords != foundedWords){
 
- 			linkTab.push(partialSearch);
 
- 		}
 
- 	  }
 
- 	  
 
-       
 
-       for (var i = 0; i < cpt; i++) {
 
- 			
 
- 			var hundredProcent = fileAndWordList[i][0].scoring + 100 * fileAndWordList[i][0].motsnb;
 
- 			var ttScore_first = fileAndWordList[i][0].scoring;
 
- 			var numberOfWords = fileAndWordList[i][0].motsnb;
 
- 			
 
-             if (fileAndWordList[i] != undefined) {
 
-                 linkTab.push("<p>" + txt_results_for + " " + "<span class=\"searchExpression\">" + fileAndWordList[i][0].motslisteDisplay + "</span>" + "</p>");
 
-                 linkTab.push("<ul class='searchresult'>");
 
-                 for (t in fileAndWordList[i]) {
 
-                     //linkTab.push("<li><a href=\"../"+fl[fileAndWordList[i][t].filenb]+"\">"+fl[fileAndWordList[i][t].filenb]+"</a></li>");
 
- 				                        
 
-                     var ttInfo = fileAndWordList[i][t].filenb;
 
-                     // Get scoring
 
-                     var ttScore = fileAndWordList[i][t].scoring;
 
-                     var tempInfo = fil[ttInfo];
 
- 				    
 
-                     var pos1 = tempInfo.indexOf("@@@");
 
-                     var pos2 = tempInfo.lastIndexOf("@@@");
 
-                     var tempPath = tempInfo.substring(0, pos1);
 
-                     var tempTitle = tempInfo.substring(pos1 + 3, pos2);
 
-                     var tempShortdesc = tempInfo.substring(pos2 + 3, tempInfo.length);
 
-                     
 
-                     // toc.html will not be displayed on search result
 
-                     if (tempPath == 'toc.html'){
 
-                         continue;
 
-                     }
 
-                     /*
 
-                     //file:///home/kasun/docbook/WEBHELP/webhelp-draft-output-format-idea/src/main/resources/web/webhelp/installation.html
 
-                     var linkString = "<li><a href=" + tempPath + ">" + tempTitle + "</a>";
 
-                     // var linkString = "<li><a href=\"installation.html\">" + tempTitle + "</a>";
 
-                     */
 
-                     var split = fileAndWordList[i][t].motsliste.split(",");
 
-                     // var splitedValues = expressionInput.split(" ");
 
- 					// var finalArray = split.concat(splitedValues);					
 
- 					
 
-                     arrayString = 'Array(';
 
-                     for(var x in finalArray){
 
-                       if (finalArray[x].length > 2 || useCJKTokenizing){
 
-                     		arrayString+= "'" + finalArray[x] + "',";
 
-                     	} 
 
-                     }
 
-                     arrayString = arrayString.substring(0,arrayString.length - 1) + ")";
 
-                     var idLink = 'foundLink' + no;
 
-                     var linkString = '<li><a id="' + idLink + '" href="' + tempPath + '" class="foundResult">' + tempTitle + '</a>';
 
-                     var starWidth = (ttScore * 100/ hundredProcent)/(ttScore_first/hundredProcent) * (numberOfWords/maxNumberOfWords);
 
-                     starWidth = starWidth < 10 ? (starWidth + 5) : starWidth;
 
-                     // Keep the 5 stars format
 
-                     if (starWidth > 85){
 
- 						starWidth = 85;
 
- 					}
 
- 					/*
 
- 					var noFullStars = Math.ceil(starWidth/17);
 
- 					var fullStar  = "curr";
 
- 					var emptyStar = "";
 
- 					if (starWidth % 17 == 0){
 
- 						// am stea plina
 
- 						
 
- 					} else {
 
- 						
 
- 					}
 
- 					console.info(noFullStars);
 
- 					*/
 
-                     // Also check if we have a valid description
 
-                     if ((tempShortdesc != "null" && tempShortdesc != '...')) {
 
-                     
 
-                         linkString += "\n<div class=\"shortdesclink\">" + tempShortdesc + "</div>";
 
-                     }
 
-                     linkString += "</li>";
 
-                     
 
-                     // Add rating values for scoring at the list of matches	
 
- 					linkString += "<div id=\"rightDiv\">";
 
- 					linkString += "<div id=\"star\">";
 
- 					//linkString += "<div style=\"color: rgb(136, 136, 136);\" id=\"starUser0\" class=\"user\">" 
 
- 					//				+ ((ttScore * 100/ hundredProcent)/(ttScore_first/hundredProcent)) * 1 + "</div>";
 
- 	                linkString += "<ul id=\"star0\" class=\"star\">";
 
- 					linkString += "<li id=\"starCur0\" class=\"curr\" style=\"width: " + starWidth + "px;\"></li>";
 
- 	                linkString += "</ul>";
 
- 	                
 
- 	                linkString += "<br style=\"clear: both;\">";
 
- 	                linkString += "</div>";
 
- 					linkString += "</div>";
 
-                     //linkString += '<b>Rating: ' + ttScore + '</b>';
 
-                                            
 
-                     linkTab.push(linkString);
 
-                     no++;
 
-                 }
 
-                 linkTab.push("</ul>");
 
-             }
 
-         }
 
-     }
 
-     var results = "";
 
-     if (linkTab.length > 0) { 
 
-         /*writeln ("<p>" + txt_results_for + " " + "<span class=\"searchExpression\">"  + cleanwordsList + "</span>" + "<br/>"+"</p>");*/
 
-         results = "<p>";
 
-         //write("<ul class='searchresult'>");
 
-         for (t in linkTab) {
 
-             results += linkTab[t].toString();
 
-         }
 
-         results += "</p>";
 
-     } else {
 
-         results = "<p>" + localeresource.search_no_results + " <span class=\"searchExpression\">" + txt_wordsnotfound + "</span>" + "</p>";
 
-     }
 
-     
 
-     
 
-     // Verify if the browser is Google Chrome and the WebHelp is used on a local machine
 
-     // If browser is Google Chrome and WebHelp is used on a local machine a warning message will appear
 
-     // Highlighting will not work in this conditions. There is 2 workarounds
 
-     if (verifyBrowser()){
 
-         document.getElementById('searchResults').innerHTML = results;
 
-     } else {
 
-         document.getElementById('searchResults').innerHTML = warningMsg + results;
 
-     }
 
-     
 
- }
 
- // Verify if the stemmed word is aproximately the same as the searched word
 
- function verifyWord(word, arr){
 
- 	for (var i = 0 ; i < arr.length ; i++){
 
- 		if (word[0] == arr[i][0] 
 
- 			&& word[1] == arr[i][1] 
 
- 			//&& word[2] == arr[i][2]
 
- 			){
 
- 			return true;
 
- 		}
 
- 	}
 
- 	return false;
 
- }
 
- // Look for elements that start with searchedValue.
 
- function wordsStartsWith(searchedValue){
 
- 	var toReturn = '';
 
- 	for (var sv in w){
 
- 		if (searchedValue.length < 3){
 
- 			continue;
 
- 		} else {
 
- 			if (sv.toLowerCase().indexOf(searchedValue.toLowerCase()) == 0){
 
- 				toReturn+=sv + ","; 
 
- 			}
 
- 		}
 
- 	}
 
- 	return toReturn.length > 0 ? toReturn : undefined;
 
- }
 
- function tokenize(wordsList){
 
-     var stemmedWordsList = new Array(); // Array with the words to look for after removing spaces
 
-     var cleanwordsList = new Array(); // Array with the words to look for
 
-     // -------------------------------------------------
 
-     // Thu's patch
 
-     for(var j=0;j<wordsList.length;++j){
 
-         var word = wordsList[j];
 
-         var originalWord=word;
 
-         if(typeof stemmer != "undefined" ){
 
-             var stemmedWord=stemmer(word);
 
-             if(w[stemmedWord]!=undefined){
 
-             stemQueryMap[stemmer(word)] = word;
 
-             }
 
-             else{
 
-                 stemQueryMap[originalWord]=originalWord;
 
-             }
 
-         } else {
 
-             if(w[word]!=undefined){
 
-             stemQueryMap[word] = word;
 
-         }
 
-             else{
 
-                 stemQueryMap[originalWord]=originalWord;
 
-             }
 
-         }
 
-     } 
 
-      //stemmedWordsList is the stemmed list of words separated by spaces.
 
-     for (var t=0;t<wordsList.length;++t) {
 
-         wordsList[t] = wordsList[t].replace(/(%22)|^-/g, "");
 
-         if (wordsList[t] != "%20") {
 
-             scriptLetterTab.add(wordsList[t].charAt(0));
 
-             cleanwordsList.push(wordsList[t]);
 
-         }
 
-     }
 
-     if(typeof stemmer != "undefined" ){
 
-         //Do the stemming using Porter's stemming algorithm
 
-         for (var i = 0; i < cleanwordsList.length; i++) {			
 
-             var stemWord = stemmer(cleanwordsList[i]);			
 
-             if(w[stemWord]!=undefined){
 
-             stemmedWordsList.push(stemWord);
 
-         }
 
-             else{
 
-                 stemmedWordsList.push(cleanwordsList[i]);               
 
-             }
 
-         }
 
-     // End Thu's patch
 
-     // -------------------------------------------
 
-     } else {
 
-         stemmedWordsList = cleanwordsList;
 
-     }
 
-     return stemmedWordsList;
 
- }
 
- //Invoker of CJKTokenizer class methods.
 
- function cjkTokenize(wordsList){
 
-     var allTokens= new Array();
 
-     var notCJKTokens= new Array();
 
-     var j=0;
 
-     for(j=0;j<wordsList.length;j++){
 
-         var word = wordsList[j];
 
-         if(getAvgAsciiValue(word) < 127){
 
-             notCJKTokens.push(word);
 
-         } else { 
 
-             var tokenizer = new CJKTokenizer(word);
 
-             var tokensTmp = tokenizer.getAllTokens();
 
-             allTokens = allTokens.concat(tokensTmp);
 
-         }
 
-     }
 
-     allTokens = allTokens.concat(tokenize(notCJKTokens));
 
-     return allTokens;
 
- }
 
- //A simple way to determine whether the query is in english or not.
 
- function getAvgAsciiValue(word){
 
-     var tmp = 0;
 
-     var num = word.length < 5 ? word.length:5;
 
-     for(var i=0;i<num;i++){
 
-         if(i==5) break;
 
-         tmp += word.charCodeAt(i);
 
-     }
 
-     return tmp/num;
 
- }
 
- //CJKTokenizer
 
- function CJKTokenizer(input){
 
-     this.input = input;
 
-     this.offset=-1;
 
-     this.tokens = new Array(); 
 
-     this.incrementToken = incrementToken;
 
-     this.tokenize = tokenize;
 
-     this.getAllTokens = getAllTokens;
 
-     this.unique = unique;
 
-     function incrementToken(){
 
- 		if(this.input.length - 2 <= this.offset){
 
- 		//	console.log("false "+offset);
 
- 			return false;
 
- 		}
 
- 		else {
 
- 			this.offset+=1;
 
- 			return true;
 
- 		}
 
- 	}
 
- 	function tokenize(){
 
- 		//document.getElementById("content").innerHTML += x.substring(offset,offset+2)+"<br>";
 
- 		return this.input.substring(this.offset,this.offset+2);
 
- 	}
 
- 	function getAllTokens(){
 
- 		while(this.incrementToken()){
 
- 			var tmp = this.tokenize();
 
- 			this.tokens.push(tmp);
 
- 		}
 
-         return this.unique(this.tokens);
 
- //		document.getElementById("content").innerHTML += tokens+" ";
 
- //		document.getElementById("content").innerHTML += "<br>dada"+sortedTokens+" ";
 
- //		console.log(tokens.length+"dsdsds");
 
- 		/*for(i=0;i<tokens.length;i++){
 
- 			console.log(tokens[i]);
 
- 			var ss = tokens[i] == sortedTokens[i];
 
- //			document.getElementById("content").innerHTML += "<br>dada"+un[i]+"- "+stems[i]+"   "+ ss;
 
- 			document.getElementById("content").innerHTML += "<br>"+sortedTokens[i];
 
- 		}*/
 
- 	}
 
- 	function unique(a)
 
- 	{
 
- 	   var r = new Array();
 
- 	   o:for(var i = 0, n = a.length; i < n; i++)
 
- 	   {
 
- 	      for(var x = 0, y = r.length; x < y; x++)
 
- 	      {
 
- 		 if(r[x]==a[i]) continue o;
 
- 	      }
 
- 	      r[r.length] = a[i];
 
- 	   }
 
- 	   return r;
 
- 	} 
 
- }
 
- /* Scriptfirstchar: to gather the first letter of index js files to upload */
 
- function Scriptfirstchar() {
 
-     this.strLetters = "";
 
-     this.add = addLettre;
 
- }
 
- function addLettre(caract) {
 
-     if (this.strLetters == 'undefined') {
 
-         this.strLetters = caract;
 
-     } else if (this.strLetters.indexOf(caract) < 0) {
 
-         this.strLetters += caract;
 
-     }
 
-     return 0;
 
- }
 
- /* end of scriptfirstchar */
 
- /*main loader function*/
 
- /*tab contains the first letters of each word looked for*/
 
- function loadTheIndexScripts(tab) {
 
-     //alert (tab.strLetters);
 
-     var scriptsarray = new Array();
 
-     for (var i = 0; i < tab.strLetters.length; i++) {
 
-         scriptsarray[i] = "..\/search" + "\/" + tab.strLetters.charAt(i) + ".js";
 
-     }
 
-     // add the list of html files
 
-     i++;
 
-     scriptsarray[i] = "..\/search" + "\/" + htmlfileList;
 
-     //debug
 
-     for (var t in scriptsarray) {
 
-         //alert (scriptsarray[t]);
 
-     }
 
-     tab = new ScriptLoader();
 
-     for (t in scriptsarray) {
 
-         tab.add(scriptsarray[t]);
 
-     }
 
-     tab.load();
 
-     //alert ("scripts loaded");
 
-     return (scriptsarray);
 
- }
 
- /* ScriptLoader: to load the scripts and wait that it's finished */
 
- function ScriptLoader() {
 
-     this.cpt = 0;
 
-     this.scriptTab = new Array();
 
-     this.add = addAScriptInTheList;
 
-     this.load = loadTheScripts;
 
-     this.onScriptLoaded = onScriptLoadedFunc;
 
- }
 
- function addAScriptInTheList(scriptPath) {
 
-     this.scriptTab.push(scriptPath);
 
- }
 
- function loadTheScripts() {
 
-     var script;
 
-     var head;
 
-     head = document.getElementsByTagName('head').item(0);
 
-     //script = document.createElement('script');
 
-     for (var el in this.scriptTab) {
 
-         //alert (el+this.scriptTab[el]);
 
-         script = document.createElement('script');
 
-         script.src = this.scriptTab[el];
 
-         script.type = 'text/javascript';
 
-         script.defer = false;
 
-         head.appendChild(script);
 
-     }
 
- }
 
- function onScriptLoadedFunc(e) {
 
-     e = e || window.event;
 
-     var target = e.target || e.srcElement;
 
-     var isComplete = true;
 
-     if (typeof target.readyState != undefined) {
 
-         isComplete = (target.readyState == "complete" || target.readyState == "loaded");
 
-     }
 
-     if (isComplete) {
 
-         ScriptLoader.cpt++;
 
-         if (ScriptLoader.cpt == ScriptLoader.scripts.length) {
 
-             ScriptLoader.onLoadComplete();
 
-         }
 
-     }
 
- }
 
- /*
 
- function onLoadComplete() {
 
-     alert("loaded !!");
 
- } */
 
- /* End of scriptloader functions */
 
-  
 
- // Array.unique( strict ) - Remove duplicate values
 
- function unique(tab) {
 
-     var a = new Array();
 
-     var i;
 
-     var l = tab.length;
 
-     if (tab[0] != undefined) {
 
-         a[0] = tab[0];
 
-     }
 
-     else {
 
-         return -1;
 
-     }
 
-     for (i = 1; i < l; i++) {
 
-         if (indexof(a, tab[i], 0) < 0) {
 
-             a.push(tab[i]);
 
-         }
 
-     }
 
-     return a;
 
- }
 
- function indexof(tab, element, begin) {
 
-     for (var i = begin; i < tab.length; i++) {
 
-         if (tab[i] == element) {
 
-             return i;
 
-         }
 
-     }
 
-     return -1;
 
- }
 
- /* end of Array functions */
 
- /*
 
-  Param: mots= list of words to look for.
 
-  This function creates an hashtable:
 
-  - The key is the index of a html file which contains a word to look for.
 
-  - The value is the list of all words contained in the html file.
 
-  Return value: the hashtable fileAndWordList
 
-  */
 
- function SortResults(mots) {
 
-     var fileAndWordList = new Object();
 
-     if (mots.length == 0 || mots[0].length == 0) {
 
-         return null;
 
-     }
 
-     
 
-     
 
-     // In generated js file we add scoring at the end of the word
 
-     // Example word1*scoringForWord1,word2*scoringForWord2 and so on
 
-     // Split after * to obtain the right values
 
-     var scoringArr = Array();
 
-     for (var t in mots) {
 
-         // get the list of the indices of the files.
 
-         var listNumerosDesFicStr = w[mots[t].toString()];
 
-         if (listNumerosDesFicStr != undefined) {
 
-             //alert ("listNumerosDesFicStr "+listNumerosDesFicStr);
 
-             var tab = listNumerosDesFicStr.split(",");
 
-             //for each file (file's index):
 
-             for (var t2 in tab) {
 
-                 var tmp = '';
 
-                 var idx = '';
 
-                 var temp = tab[t2].toString();
 
-                 if (temp.indexOf('*') != -1) {
 
-                     idx = temp.indexOf('*');
 
-                     tmp = temp.substring(idx + 3, temp.length);
 
-                     temp = temp.substring(0, idx);
 
-                 }
 
-                 scoringArr.push(tmp);
 
-                 if (fileAndWordList[temp] == undefined) {
 
-                     fileAndWordList[temp] = "" + mots[t];
 
-                 } else {
 
-                     fileAndWordList[temp] += "," + mots[t];
 
-                 }
 
-                 //console.info("fileAndWordList[" + temp + "]=" + fileAndWordList[temp] + " : " + tmp);
 
-             }
 
-         }
 
-     }
 
-     var fileAndWordListValuesOnly = new Array();
 
-     // sort results according to values
 
-     var temptab = new Array();
 
-     finalObj = new Array();
 
-     for (t in fileAndWordList) {    	
 
-     	finalObj.push(new newObj(t,fileAndWordList[t]));
 
-     }
 
-     if ( finalObj.length == 0 ) {   // None of the queried words are not in the index (stemmed or not)
 
-         return null;
 
-     }
 
-     finalObj = removeDerivates(finalObj);
 
-     for (t in finalObj) {
 
-         tab = finalObj[t].wordList.split(',');
 
-         var tempDisplay = new Array();
 
-         for (var x in tab) {        		
 
-             if(stemQueryMap[tab[x]] != undefined && doStem){
 
-                 tempDisplay.push(stemQueryMap[tab[x]]); //get the original word from the stem word.                
 
-             } else {
 
-                 tempDisplay.push(tab[x]); //no stem is available. (probably a CJK language)
 
-             }
 
-         }
 
-         var tempDispString = tempDisplay.join(", ");
 
- 				var index;
 
- 				for (x in fileAndWordList) {
 
- 					if (x === finalObj[t].filesNo) {
 
- 						index = x;
 
- 						break;
 
- 					}
 
- 				}
 
- 				var scoring = findRating(fileAndWordList[index], index);	
 
-         temptab.push(new resultPerFile(finalObj[t].filesNo, finalObj[t].wordList, tab.length, tempDispString, scoring));
 
-         fileAndWordListValuesOnly.push(finalObj[t].wordList);        
 
-     }
 
-     fileAndWordListValuesOnly = unique(fileAndWordListValuesOnly);
 
-     fileAndWordListValuesOnly = fileAndWordListValuesOnly.sort(compare_nbMots);
 
-     var listToOutput = new Array();
 
-     for (var fawlvoIdx in fileAndWordListValuesOnly) {
 
-         for (t in temptab) {
 
-             if (temptab[t].motsliste == fileAndWordListValuesOnly[fawlvoIdx]) {
 
-                 if (listToOutput[fawlvoIdx] == undefined) {
 
-                     listToOutput[fawlvoIdx] = new Array(temptab[t]);
 
-                 } else {
 
-                     listToOutput[fawlvoIdx].push(temptab[t]);
 
-                 }
 
-             }
 
-         }
 
-     }		
 
-   // Sort results by scoring, descending on the same group
 
- 	for (var ltoIdx in listToOutput) {
 
- 	    listToOutput[ltoIdx].sort(function(a, b){
 
- 			return b.scoring - a.scoring;
 
- 		});
 
- 	}
 
- 	// If we have groups with same number of words, 
 
- 	// will sort groups by higher scoring of each group
 
- 	for (var i = 0; i < listToOutput.length - 1; i++) {
 
- 		for (var j = i + 1; j < listToOutput.length; j++) {
 
- 			if (listToOutput[i][0].motsnb < listToOutput[j][0].motsnb 
 
- 				|| (listToOutput[i][0].motsnb == listToOutput[j][0].motsnb
 
- 				&& listToOutput[i][0].scoring < listToOutput[j][0].scoring)
 
- 				) {
 
- 				var x = listToOutput[i];
 
- 				listToOutput[i] = listToOutput[j];
 
- 				listToOutput[j] = x;
 
- 			}
 
- 		}
 
- 	}
 
-     return listToOutput;
 
- }
 
- // Remove derivates words from the list of words
 
- function removeDerivates(obj){
 
- 	var toResultObject = new Array();	
 
- 	for (i in obj){
 
- 		var filesNo  = obj[i].filesNo;
 
- 		var wordList = obj[i].wordList;
 
- 		var wList = wordList.split(",");		
 
- 		var searchedWords = searchTextField.toLowerCase().split(" ");
 
- 		for (var k = 0 ; k < searchedWords.length ; k++){
 
- 			for (var j = 0 ; j < wList.length ; j++){				
 
- 				if (wList[j].startsWith(searchedWords[k])){
 
- 					wList[j] = searchedWords[k];
 
- 				}
 
- 			}
 
- 		}
 
- 		wList = removeDuplicate(wList);
 
- 		var recreateList = '';
 
- 		for(var x in wList){
 
- 			recreateList+=wList[x] + ",";
 
- 		}
 
- 		recreateList = recreateList.substr(0, recreateList.length - 1);
 
- 		toResultObject.push(new newObj(filesNo, recreateList));
 
- 	}
 
- 	return toResultObject;
 
- }
 
- function newObj(filesNo, wordList){
 
- 	this.filesNo = filesNo;
 
- 	this.wordList = wordList;
 
- }
 
- // Add a new parameter. Scoring.
 
- function resultPerFile(filenb, motsliste, motsnb, motslisteDisplay, scoring, group) {
 
- 	//10 - spring,time - 2 - spring, time - 55 - 3
 
-     this.filenb = filenb;
 
-     this.motsliste = motsliste;
 
-     this.motsnb = motsnb;
 
-     this.motslisteDisplay= motslisteDisplay;
 
-     
 
-     this.scoring = scoring;
 
-     
 
- }
 
- function findRating(words, nr){
 
-     var sum = 0;
 
-     var xx = words.split(',');
 
-     for (jj = 0 ; jj < xx.length ; jj++){
 
-         var wrd = w[xx[jj]].split(',');
 
-         for (var ii = 0 ; ii < wrd.length ; ii++){
 
-             var wrdno = wrd[ii].split('*');
 
-             if (wrdno[0] == nr){
 
-                 sum+=parseInt(wrdno[1]);
 
-             }
 
-         }
 
-     }
 
-     return sum;
 
- }
 
- function compare_nbMots(s1, s2) {
 
-     var t1 = s1.split(',');
 
-     var t2 = s2.split(',');
 
-     //alert ("s1:"+t1.length + " " +t2.length)
 
-     if (t1.length == t2.length) {
 
-         return 0;
 
-     } else if (t1.length > t2.length) {
 
-         return 1;
 
-     } else {
 
-         return -1;
 
-     }
 
-     //return t1.length - t2.length);
 
- }
 
- // return false if browser is Google Chrome and WebHelp is used on a local machine, not a web server 
 
- function verifyBrowser(){
 
-     var returnedValue = true;    
 
-     var browser = BrowserDetect.browser;
 
-     var addressBar = window.location.href;
 
-     if (browser == 'Chrome' && addressBar.indexOf('file://') === 0){
 
-         returnedValue = false;
 
-     }
 
-     
 
-     return returnedValue;
 
- }
 
- // Remove duplicate values from an array
 
- function removeDuplicate(arr) {
 
-    var r = new Array();
 
-    o:for(var i = 0, n = arr.length; i < n; i++) {
 
-       for(var x = 0, y = r.length; x < y; x++) {
 
-          if(r[x]==arr[i]) continue o;
 
-       }
 
-       r[r.length] = arr[i];
 
-    }
 
-    return r;
 
- }
 
- // Create startsWith method
 
- String.prototype.startsWith = function(str) {
 
- 	return (this.match("^"+str)==str);
 
- }
 
- function trim(str, chars) {
 
- 	return ltrim(rtrim(str, chars), chars);
 
- }
 
-  
 
- function ltrim(str, chars) {
 
- 	chars = chars || "\\s";
 
- 	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
 
- }
 
-  
 
- function rtrim(str, chars) {
 
- 	chars = chars || "\\s";
 
- 	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
 
- }
 
 
  |