// ----------------------------------------------------------------------------
// Lauyan Software Javascript Search Engine 1.0
//
// 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_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("  ",
"  ",
" circuit  ",
" rallycross  ",
" resultats  ",
" partenaires  ",
" diaporama  ",
" liens trouvez ici tous utiles championnat france rallycross cliquant sur images  ",
" inscription  ",
" circuit  ",
" pilotes 2008  ",
" offres speciales  ",
" 2009  ",
" 2008  ",
" 2007  ",
" saison 2006  ",
" 2005  ",
" 2004  ",
" 2003  ",
" 2009  ",
" 2009 d1a  ",
" 2009  ",
" 2009  ",
" 2009 logan  ",
" 2008  ",
" 2008  ",
" 2008  ",
" 2008  ",
" 2008 logan  ",
" 2007  ",
" 2007  ",
" 2007  ",
" 2007  ",
" 2006  ",
" 2006  ",
" 2006  ",
" 2006  ",
" 2006 challenge  ",
" 2005  ",
" 2005  ",
" 2005  ",
" 2005  ",
" 2005 challenge  ",
"  ",
"  ",
"  ",
"  ",
"  ",
"  ",
"  ",
"  ",
"  ",
"  ",
" edition 2008  ",
" edition 2007  ",
" photos circuit  ",
" fond d'ecran  ",
"  ",
" contact contacter completez formulaire  ",
" http france meteofrance com meteo previsions portlet path=previsionsville 360440 ",
" calendrier 2008  ",
"  ",
"  ",
" locations voitures  ",
" petites annonces  ");
urlsArray = new Array("../accueil/index.html",
"../topic1/index.html",
"../aproposdemoi/index.html",
"../lerallycross/index.html",
"../resultats/index.html",
"../mapage7/index.html",
"../mapage/index.html",
"../topic3/index.html",
"../inscription/index.html",
"../albumphoto1/index.html",
"../liens/index.html",
"../offresspeciales/index.html",
"../2009/index.html",
"../2007b/index.html",
"../mapage5/index.html",
"../mapage1/index.html",
"../2005/index.html",
"../2004/index.html",
"../mapage8/index.html",
"../2008d11/index.html",
"../2009d1a/index.html",
"../2009d3/index.html",
"../2009d4/index.html",
"../2009logan/index.html",
"../2008d1/index.html",
"../2008d2/index.html",
"../2007d31/index.html",
"../2007d41/index.html",
"../2007d1/index.html",
"../mapage2/index.html",
"../2007d2/index.html",
"../2007d3/index.html",
"../2007d4/index.html",
"../mapage3/index.html",
"../mapage4/index.html",
"../2006d3/index.html",
"../2006d4/index.html",
"../2006c2/index.html",
"../2005d1/index.html",
"../2005d2/index.html",
"../2005d3/index.html",
"../mapage6/index.html",
"../2005c2/index.html",
"../davypresetation/index.html",
"../pascalpresentati/index.html",
"../diaporamadavy/index.html",
"../diaporamapascal/index.html",
"../davypresentation/index.html",
"../diaporamadavy2/index.html",
"../davypresentatio1/index.html",
"../groupederubrique/index.html",
"../video2009/index.html",
"../photos2008/index.html",
"../rallycross2008/index.html",
"../albumphoto/index.html",
"../photosducircuit/index.html",
"../fonddecran/index.html",
"../groupederubriqu1/index.html",
"../contact/index.html",
"../meteo1/index.html",
"../calendrier2008/index.html",
"../archive2008/index.html",
"../archive/index.html",
"../mapage9/index.html",
"../petitesannonces/index.html");
titlesArray = new Array("RALLYCROSS DE CHATEAUROUX",
"RALLYCROSS DE CHATEAUROUX",
"Circuit",
"Le Rallycross",
"Résultats",
"partenaires",
"diaporama",
"liens",
"Inscription",
"circuit",
"pilotes 2008",
"Offres spéciales",
"2009",
"2008",
"2007",
"saison 2006",
"2005",
"2004",
"2003",
"2009 D1",
"2009 D1A",
"2009 D3",
"2009 D4",
"2009 logan",
"2008 D1",
"2008 D2",
"2008 D3",
"2008 D4",
"2008 logan",
"2007 D1",
"2007 D2",
"2007 D3",
"2007 D4",
"2006  D1",
"2006 D2",
"2006 D3",
"2006 D4",
"2006 C2 challenge",
"2005 D1",
"2005 D2",
"2005 D3",
"2005 D4",
"2005 C2 challenge",
"RALLYCROSS DE CHATEAUROUX",
"RALLYCROSS DE CHATEAUROUX",
"RALLYCROSS DE CHATEAUROUX",
"RALLYCROSS DE CHATEAUROUX",
"RALLYCROSS DE CHATEAUROUX",
"RALLYCROSS DE CHATEAUROUX",
"RALLYCROSS DE CHATEAUROUX",
"RALLYCROSS DE CHATEAUROUX",
"RALLYCROSS DE CHATEAUROUX",
"RALLYCROSS DE CHATEAUROUX",
"édition 2008",
"édition 2007",
"photos du circuit",
"fond d'écran",
"RALLYCROSS DE CHATEAUROUX",
"contact",
"http://france.meteofrance.com/france/meteo?PREVISIONS_PORTLET.path=previsionsville/360440",
"Calendrier 2008",
"RALLYCROSS DE CHATEAUROUX",
"RALLYCROSS DE CHATEAUROUX",
"Locations de voitures",
"Petites annonces");
descArray = new Array("",
"",
"",
"",
"",
"",
"",
"Trouvez ici tous les liens utiles du championnat de France de Rallycross en cliquant sur les images... ",
"  ",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"wallpaper du site du rallycross de Chateauroux St Maur : fond d'écran",
"",
"",
"Pour nous contacter complétez ce formulaire :",
"",
"",
"",
"",
"",
"");
sublinksArray = new Array(65);
var linksCount = 65;


ALLWORDSONLY = 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 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 = getParam("jse_query");
  query = query.replace(/[\++]/g, " ");  // replace any '+' with spaces
  query = query.replace(/\</g, "&lt;");
  query = query.replace(/[\"+]/g, " ");

  // 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>");
  }	
	else
	{
	 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( "" + 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)
  }
  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 )
			{
				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><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
	  if( !ALLWORDSONLY || (ALLWORDSONLY && res_table[q][2] == significantwords) )
	    {
        t = res_table[q][0];    // get page index
        if( BOLD_LINKS ) {
          document.writeln("<br><b>" + (q+1) + ". <a href=\"" + urlsArray[t] + lnktarget + "\">" + titlesArray[t] + "</a></b>" );
        } else
          document.writeln("<br><b>" + (q+1) + ".</b> <a href=\"" + urlsArray[t] + lnktarget + "\">" + 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 (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>");
}

