// ----------------------------------------------------------------------------
// Lauyan Software Javascript Search Engine 1.0
//
// This file is the JavaScript search engine for a website created by TOWeb
//
// Copyright (C) LAUYAN SOFTWARE 2006
// web: http://www.lauyan.com
// ----------------------------------------------------------------------------

STR_SEARCH_QUERY_MSG = "Résultats de la recherche pour";
STR_NO_RESULT = "Aucun résultat trouvé";
STR_SEARCH_BUTTON = "Rechercher";
STR_SCORE = "Score";
STR_TERMS = "Termes";
STR_SEARCH_SIZE = "40";
MIN_WORD_LEN = 2;
DISPLAY_SRCH_INFO = 1;
USE_UTF8 = 0;
REMOVE_ACCENTS = 1;
BOLD_LINKS = 0;
ONLINE_WEBSITE = 1;

namesArray = new Array(" chirurgie esthetique muriel bessis association arches ",
" chirurgie esthetique muriel bessis association ",
" commandements  ",
" chirurgie esthetique muriel bessis association ",
" lois  ",
" reussites  ",
" ratages  ",
" risques  ",
" forums  ",
" rejoignez-nous  ",
" nos liens  ",
" l'arches dans medias  ");
urlsArray = new Array("../accueil/index.html",
"../topic/index.html",
"../monblog1/index.html",
"../topic1/index.html",
"../mapage/index.html",
"../mapage1/index.html",
"../mapage2/index.html",
"../mapage3/index.html",
"../liens/index.html",
"../lescoordonneesde/index.html",
"../nosliens/index.html",
"../larchesdanslesme/index.html");
titlesArray = new Array("ARCHES",
"ARCHES",
"LES 10 COMMANDEMENTS",
"ARCHES",
"LES LOIS",
"Les réussites",
"Les ratages",
"Les risques",
"LES FORUMS",
"Rejoignez-nous",
"Nos liens",
"L'ARCHES dans les médias");
descArray = new Array("Association des réussites et des ratés de la chirurgie esthétique",
"Association des réussites et des ratés de la chirurgie esthétique",
"",
"Association des réussites et des ratés de la chirurgie esthétique",
"",
"",
"",
"",
"",
"",
"",
"");
sublinksArray = new Array(12);
var linksCount = 12;


// 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 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()
{
  // 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 = getParam("jse_query");
  query = query.replace(/[\++]/g, " ");  // replace any '+' with spaces
  query = query.replace(/\</g, "&lt;");
  query = query.replace(/[\"+]/g, " ");

  // display the search form
  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>");

  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(" ");
  document.write( "" + STR_SEARCH_QUERY_MSG + " : <strong>" +query+"</strong><br>");

  // init result table information
  res_table = new Array(linksCount);
  for( t=0; t<linksCount; t++ )
  {
    res_table[t] = new Array(3);
    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)
  }

  // begin search ...
  for( i=0; i<searchWords.length; i++ )
  {
    keyword = searchWords[i];
    if( keyword.length > MIN_WORD_LEN ) // skip small words
	  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 )
				{
	        if( res_table[t][3].indexOf( "'" + urlsArray[k] + "'" ) == -1 )
	        {
/*	           		if( BOLD_LINKS ) { 
						res_table[t][3] += "<tr><td width='50'>&nbsp</td><td><b><a href='" + urlsArray[k] +"'>" + titlesArray[k] + "</a></b></td></tr>";
					} else	
*/	          res_table[t][3] += "<tr><td width='35'>&nbsp</td><td><a href='" + urlsArray[k] +"'>" + titlesArray[k] + "</a></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><b>" + STR_NO_RESULT + "</b></p>");
  } 
  else 
  {
    // sort by words found and scores
    res_table.sort(SortCompare);	
    // display the results
    for( q=0; q<found; q++ )
      if( res_table[q][1] > 0 ) // display only results with a positive score
	    {
        t = res_table[q][0];    // get page index
        if( BOLD_LINKS ) {
          document.writeln("<br><b>" + (q+1) + ". <a href=" + urlsArray[t] +">" + titlesArray[t] + "</a></b>" );
        } else
          document.writeln("<br><b>" + (q+1) + ".</b> <a href=" + urlsArray[t] +">" + 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;'>" + STR_TERMS + ": " + res_table[q][2] + " - " + STR_SCORE + ": " + res_table[q][1] );
					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>' + res_table[q][3] + '</table>' );
      	} else document.writeln("<br>");
      }
  }
  document.writeln("<br>");
}
