// ----------------------------------------------------------------------------
// Lauyan Software Javascript Search Engine 1.1
//
// This file is the JavaScript search engine for a website created by TOWeb
//
// Copyright (C) LAUYAN SOFTWARE
// web: http://www.lauyan.com
// ----------------------------------------------------------------------------

STR_SEARCH_QUERY_MSG = "Résultats de la recherche pour";
STR_NO_RESULT = "Aucun résultat trouvé";
STR_SCORE = "Score";
STR_TERMS = "Termes";
STR_SEARCH_SIZE = "20";
MIN_WORD_LEN = 2;
DISPLAY_SRCH_INFO = 1;
USE_UTF8 = 0;
REMOVE_ACCENTS = 1;
BOLD_LINKS = 0;
ONLINE_WEBSITE = 1;
ALLWORDSONLY = 0;
namesArray = new Array(" correcteur correctrice services correction avant edition relecture fautes conseils manuscrits biographie romans nouvelles orthographe ecrits grammaire ponctuation pleonasme expression devis reecriture ",
" correcteur fautes orthographe grammaire corrections corriger manuscrits romans memoires pages weeb typographie ponctuation trucs astuces ecrire tarifs exemple devis ",
" correcteur fautes orthographe grammaire corrections corriger manuscrits autoedition romans memoires pages weeb typographie ponctuation trucs astuces ecrire tarifs exemple devis ",
" correcteur correction formation lacunes metier cec romans nouvelles manuscrit sites  ",
" correcteur fautes orthographe grammaire corrections corriger manuscrits romans memoires pages weeb typographie ponctuation trucs astuces ecrire tarifs exemple devis ",
" correcteur tarif devis gratuit typographie dactylographie romans nouvelles memoires sites confidentialite service relecture correction syntaxe ponctuation coquilles grammaire ",
" correcteur correction fautes orthographe regles grammaire corriger manuscrits romans typographie ponctuation accents tirets trucs astuces tarifs ",
" formulaire contact  ",
" correcteur fautes orthographe grammaire corrections corriger manuscrits romans memoires pages weeb typographie ponctuation trucs astuces ecrire tarifs exemple devis ",
" corriger dire ecrire questions reponses ",
" autoedition fabrication creation livre publier etapes publication corrections corriger manuscrits mise page  ",
" ecriture aide entraide syndrome page blanche  ",
"  ",
"  ",
"  ",
"  ",
"  ",
"  ",
"  ",
"  ",
"  ",
"  ",
"  ",
"  ",
"  ",
"  ",
"  ",
"  ",
"  ",
"  ",
"  ",
" corrections corriger typographie ponctuation trucs astuces ecrire ",
"  ",
"  ",
" pourquoi correcteur  ",
" mcae autoedition autoedite detracteurs plublier  ");
urlsArray = new Array("../topic/index.html",
"../plandusite/index.html",
"../topic2/index.html",
"../topic1/index.html",
"../mapage/index.html",
"../tarifs/index.html",
"../trucsetastuces/index.html",
"../contact/index.html",
"../communiquedepres/index.html",
"../faqs/index.html",
"../commentfabriquer/index.html",
"../critureentraide/index.html",
"../topic7/index.html",
"../topic18/index.html",
"../topic8/index.html",
"../topic13/index.html",
"../topic14/index.html",
"../topic12/index.html",
"../topic21/index.html",
"../mapage1/index.html",
"../topic4/index.html",
"../topic20/index.html",
"../topic19/index.html",
"../topic16/index.html",
"../topic5/index.html",
"../topic9/index.html",
"../topic15/index.html",
"../topic10/index.html",
"../topic23/index.html",
"../topic11/index.html",
"../topic22/index.html",
"../topic6/index.html",
"../topic3/index.html",
"../topic17/index.html",
"../pourquoiuncorrec/index.html",
"../lautoedition/index.html");
titlesArray = new Array("Calista-Corrections-correcteur-correctrice",
"Corrections-prestations-devis",
"Calista-Corrections – correcteur, correctrice",
"Calista-Corrections – correcteur, correctrice",
"L'impact des mots",
"Tarifs - Devis",
"Correction typographie",
"Formulaire de contact",
"Calista-Corrections – correcteur, correctrice",
"Comment écrire, comment dire...",
"Comment fabriquer son livre",
"Écriture, entraide",
"Calista-Corrections – correcteur, correctrice",
"Calista-Corrections – correcteur, correctrice",
"Calista-Corrections – correcteur, correctrice",
"Calista-Corrections – correcteur, correctrice",
"Calista-Corrections – correcteur, correctrice",
"Calista-Corrections – correcteur, correctrice",
"Calista-Corrections – correcteur, correctrice",
"Calista-Corrections – correcteur, correctrice",
"Calista-Corrections – correcteur, correctrice",
"Calista-Corrections – correcteur, correctrice",
"Calista-Corrections – correcteur, correctrice",
"Calista-Corrections – correcteur, correctrice",
"Calista-Corrections – correcteur, correctrice",
"Calista-Corrections – correcteur, correctrice",
"Calista-Corrections – correcteur, correctrice",
"Calista-Corrections – correcteur, correctrice",
"Calista-Corrections – correcteur, correctrice",
"Calista-Corrections – correcteur, correctrice",
"Calista-Corrections – correcteur, correctrice",
"Calista-Corrections – correcteur, correctrice",
"Calista-Corrections – correcteur, correctrice",
"Calista-Corrections – correcteur, correctrice",
"Pourquoi un correcteur",
"Calista-Corrections – correcteur, correctrice");
descArray = new Array("Bien choisir son correcteur, machine ou intelligence humaine. Liste de prestations,",
"Service de corrections de tous documents : romans, nouvelles, Mémoires, sites.",
"propositions de liens liés à la littérature.",
"formation,service de corrections,lacunes,métier,CEC,romans, nouvelles, Mémoires, sites.",
"corrections,lecture,mots,déchiffrer, romans, nouvelles, Mémoires, sites.",
"Devis et tarifs pour le service de relecture, correction simple, correction approfondie, correction avec réécriture, dactylographie. Formulaire demand...",
"Règes typhographiques, exemples des possibilités de la touche Alt du clavier, disposition des espaces.",
"",
"communiqué de presse,cheminement avant édition,éditeurs,",
"Réponses à comment écrire, comment dire.",
"Comment créer vous-même votre livre ? Je vous propose toutes les étapes à suivre pour réaliser votre projet.",
"Ce site s’adresse à tous les auteurs, jeunes ou confirmés, souhaitant se décharger des contraintes, souvent fastidieuses, de la correction. Vous y tro...",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"Comment dire, comment écrire",
"",
"",
"",
"");
sublinksArray = new Array(36);
var linksCount = 36;


function SubmitSearch(n)
{
	var p = document.getElementsByName("jse_query");
	var idx = n;  if( p < 0) return false;
	if( p && p[idx] && p[idx].value != "" ) {
	if( (p[idx].value).replace(/^\s+|\s+$/g, '') != "" ) {
		p = document.getElementsByName("jse_form");
		if( p && p[idx] )
			p[idx].submit();
		return true;
	  }
	}
	return false;
}
function switchSearchLang(lang,emptycart)
{
	var params = "";
	var currURL = document.location.href;
	var newURL = (currURL.lastIndexOf('_frame/search2') >= 0) ? "search2":"search";
	if( lang != "" )
		newURL += "-"+lang;
	newURL += ".html";
	var paramIndex = currURL.lastIndexOf('?');
	if( paramIndex > -1 )
		newURL += "?" + currURL.substr( paramIndex + 1 );
	if( emptycart && typeof(CleanShopcart) != "undefined" )
		CleanShopcart();
	document.location.href = newURL;
	return false;
}

// getParam returns the value of the specified GET parameter
function getParam(paramName)
{
    paramStr = document.location.search;
    if( paramStr == "" )
        return "";
    if( paramStr.charAt(0) == "?" )
        paramStr = paramStr.substr(1);
    arg = (paramStr.split("&"));
    for( i=0; i<arg.length; i++ ) 
    {
      arg_values = arg[i].split("=")
      if( unescape(arg_values[0]) == paramName ) 
      {
         if( USE_UTF8 == 1 && self.decodeURIComponent ) // check if decodeURIComponent() is defined
            ret = decodeURIComponent(arg_values[1]);
         else
            ret = unescape(arg_values[1]);  // IE 5.0 and older does not have decodeURI
         return ret;
      }
    }
    return "";
}

function getQueryParam()
{
  var query = getParam("jse_query");
  query = query.replace(/[\++]/g, " ");  // replace any '+' with spaces
  query = query.replace(/\</g, "&lt;");
  query = query.replace(/[\"+]/g, " ");
	return query;
}

function replaceAll(str,from,to) 
{
    var idx = str.indexOf(from);
    while( idx > -1 ) {
        str = str.replace(from, to); 
        idx = str.indexOf(from);
    }
    return str;
}

// lowercase, remove quotes and accents
function formatChars(str) 
{
    str = str.toLowerCase();
    if( REMOVE_ACCENTS ) 
    {
      var a = "àáâãäåòóôõöèéêëçìíîïùúûüÿñ";
      var b = "aaaaaaoooooeeeeciiiiuuuuyn";
      for( i=0; i<a.length; i++ )
        str = replaceAll( str, a.charAt(i), b.charAt(i) );
    }
    str = replaceAll( str, "'", " " );
    return str;
}

function SortCompare(a, b)
{
  if( a[2] == b[2] )
  {  
    if (a[1] < b[1]) return 1;
    else if (a[1] > b[1]) return -1;
    else return 0;
  }
  else if (a[2] < b[2]) return 1;
    else return -1;
}

function jseSearch( internal )
{
  // get params
  var rootURL = '';
	var SelfURL = document.location.href;
  var paramIndex = SelfURL.indexOf("?");    
  if (paramIndex > -1)
     SelfURL = SelfURL.substr(0, paramIndex);
  paramIndex = SelfURL.indexOf("#");
  if (paramIndex > -1)
    SelfURL = SelfURL.substr(0, paramIndex);        
	if (ONLINE_WEBSITE) 
	{
		paramIndex = SelfURL.lastIndexOf('/');
		if (paramIndex > -1) 
		{
			rootURL = SelfURL.substr(0, paramIndex);
			paramIndex = rootURL.lastIndexOf('/');
			if (paramIndex > -1) {
				rootURL = SelfURL.substr(0, paramIndex+1);
			} else
			  rootURL = '';
		}
	}	
  SelfURL = SelfURL.replace(/\</g, "&lt;");
  SelfURL = SelfURL.replace(/\"/g, "&quot;");

  var query = getQueryParam();

  // display the search form
  var lnktarget = "";
/*	if( internal == null || internal != 1 )
	{
    document.writeln("<form method=\"get\" action=\"" + SelfURL + "\">");
    document.writeln("<input type=\"text\" name=\"jse_query\" size=\"" + STR_SEARCH_SIZE + "\" value=\"" + query + "\" />");
    document.writeln("<input type=\"submit\" value=\"" + STR_SEARCH_BUTTON + "\" />");
    document.writeln("</form>");
  }
  */
  if( internal == 1 ) {
	 lnktarget = "\" target=\"_blank";
  }
	
  query = formatChars(query);
  if( query.length == 0 ) return;
  
  var found=0, t=0, k=0, score=0, subscore=0, i=0;
  var keyword = "", tmp = "";
  var searchWords = new Array();

  // split search query by spaces
  searchWords = query.split(" ");
	if( internal == null || internal != 1 ) {
		document.writeln( "<span class='wg-paragraph'>" + STR_SEARCH_QUERY_MSG + " : <strong>" +query+"</span></strong><br>");
  }
  // init result table information
  res_table = new Array(linksCount);
  for( t=0; t<linksCount; t++ )
  {
    res_table[t] = new Array(4);
    res_table[t][0] = 0;  // index
    res_table[t][1] = 0;  // score
    res_table[t][2] = 0;  // words found
    res_table[t][3] = ""; // sublinks (output string)
  }
  var significantwords = 0;

  // begin search ...
  for( i=0; i<searchWords.length; i++ )
  {
    keyword = searchWords[i];
    if( keyword.length > MIN_WORD_LEN ) // skip "small" words
	{
	  significantwords++;
	  for(var q=0; q<linksCount; q++ )
	  {
	    t = q;
	    score = 0;
	
	    // search for keywords (an exact word doubles the score)
		  tmp = formatChars(descArray[t]);
	    if( tmp.indexOf(keyword) != -1 ) score++;
	    if( tmp.indexOf(' '+keyword+' ') != -1 ) score+=2;
		  tmp = formatChars(titlesArray[t]);
	  	if( tmp.indexOf(keyword) != -1 ) score++;
		  if( tmp.indexOf(' '+keyword+' ') != -1 ) score+=2;
	    if( namesArray[t].indexOf(keyword) != -1 ) score++;
	    if( namesArray[t].indexOf(' '+keyword+' ') != -1 ) score+=2;
	
		// search for keywords in sublinks (i.e. bookmarks)
	    k = q+1;
		while( k <= linksCount )
		{
			tmp = descArray[k];
			if( tmp == null || tmp.charAt(0) != '&' ) break;
			subscore = 0;
			tmp = formatChars(descArray[k]);
			if( tmp.indexOf(keyword) != -1 ) subscore++;
			if( tmp.indexOf(' '+keyword+' ') != -1 ) subscore+=2;
			tmp = formatChars(titlesArray[k]);
			if( tmp.indexOf(keyword) != -1 ) subscore++;
			if( tmp.indexOf(' '+keyword+' ') != -1 ) subscore+=2;
			if( namesArray[k].indexOf(keyword) != -1 ) subscore++;
			if( namesArray[k].indexOf(' '+keyword+' ') != -1 ) subscore+=2;
			
			if( subscore > 0 )
			{
				var idx = urlsArray[t].indexOf('@');
				if( idx > 0 ) 
				{
					var lnk = urlsArray[k].substr(0, idx)
					if( res_table[t][3].indexOf( lnk ) == -1 )
						res_table[t][3] += "<tr><td width='35'>&nbsp;</td><td><a href=\"" + urlsArray[k].substr(idx+1) + "\" name=\"" + lnk + "\">" + titlesArray[k] + "</a></td></tr>";
				} else if( res_table[t][3].indexOf( "\"" + urlsArray[k] + "\"" ) == -1 )
					res_table[t][3] += "<tr><td width='35'>&nbsp;</td><td><a href=\"" + urlsArray[k] + lnktarget + "\">" + titlesArray[k] + "</a></td></tr>";
//	           		if( B OLD_LINKS )  res_table[t][3] += "<tr><td width='50'>&nbsp</td><td><b><a href='" + urlsArray[k] +"'>" + titlesArray[k] + "</a></b></td></tr>";
				score += subscore;
			}	
			k++;
		}
		q = k-1;
				
	    if( score > 0 )
	    {
	      res_table[t][0] = t;
	      res_table[t][1] += score;
	      res_table[t][2]++;
	      found++;
	    }
	  }
	}
  }
  if( found == 0 ) {
    document.write("<p class='wg-paragraph'><b>" + STR_NO_RESULT + "</b></p>");
  } 
  else 
  {
/*	if( ALLWORDSONLY )
	{
		//  if all words only then we recount and filter amoung the results to get the total of found items
		found = 0;
		for( var z=0; z<itemsCount; z++ )
			if( res_table[z][1] > 0 ) // display only results with a positive score
			if( !ALLWORDSONLY || (ALLWORDSONLY && res_table[z][2] == significantwords) )
				found++;
	}
  */
	// sort by words found and scores
    res_table.sort(SortCompare);	
    // display the results
	document.writeln( '<div class="wg-paragraph">' );
    for( q=0; q<found; q++ )
      if( res_table[q][1] > 0 ) // display only results with a positive score
	  if( !ALLWORDSONLY || (ALLWORDSONLY && res_table[q][2] == significantwords) )
	  {
		t = res_table[q][0];    // get page index

		var lnk = urlsArray[t] + lnktarget;
		var idx = urlsArray[t].indexOf('@');
		if( idx > 0 ) 
			lnk = urlsArray[t].substr(idx+1);
			
		if( BOLD_LINKS ) {
		  document.writeln("<br><b>" + (q+1) + ". <a href=\"" + lnk + "\">" + titlesArray[t] + "</a></b>" );
		} else
		  document.writeln("<br><b>" + (q+1) + ".</b> <a href=\"" + lnk + "\">" + titlesArray[t] + "</a>" );
        if( descArray[t].length > 2 )
          document.writeln("<br>" + descArray[t] );
        if( DISPLAY_SRCH_INFO ) 
		{
			document.write("<br><span style='font-size: 80%; font-style: italic;'>");
			if( !ALLWORDSONLY )
			  document.write("" + STR_TERMS + ": " + res_table[q][2] + " - " );
			document.write("" + STR_SCORE + ": " + res_table[q][1] );
			if( urlsArray[t].indexOf('@') > 0 ) {
			  document.writeln(" - URL: 'TOWeb demonstration'</span>");
			} else if(ONLINE_WEBSITE) {
			  document.writeln(" - URL: " + rootURL + urlsArray[t].substr(3) + "</span>");
			} else
			  document.writeln(" - URL: " + urlsArray[t] + "</span>");
      	}
		if( res_table[q][3].length > 0 ) { 
      	  document.writeln( '<table class="wg-paragraph">' + res_table[q][3] + '</table>' );
      	} else document.writeln("<br>");
      }
 	document.writeln( '</div>' );
  }
  document.writeln("<br>");
}
