// ----------------------------------------------------------------------------
// 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(" moto balade circuit roulage piste calendrier itineraire road book ",
" balade moto motards route  ",
" itineraire moto parcours balade carte road-book  ",
" circuit liste recensement france coordonnees piste ",
" dates journees circuit  ",
" circuit albi roulage moto piste date calendier entrainement  ",
" circuit ales roulage moto piste date calendier entrainement  ",
" circuit bresse roulage moto piste date calendier entrainement  ",
" circuit bourbonnais-moulin roulage moto piste date calendier entrainement  ",
" circuit carole roulage moto piste date calendier entrainement  ",
" circuit castelet paul ricard voici calendrier 2010 journees roulage sur ",
" circuit chambley voici calendrier 2010 journees roulage sur ",
" circuit chenevriere voici calendrier 2010 journees roulage sur ",
" circuit croix-en-ternoisroulage moto piste date calendier entrainement  ",
" circuit dijon roulage moto piste date calendier entrainement  ",
" circuit folembray voici calendrier 2010 journees roulage sur ",
" circuit haute-saintonge roulage moto piste date calendier entrainement  ",
" circuit issoire roulage moto piste date calendier entrainement  ",
" circuit ledenon roulage moto piste date calendier entrainement  ",
" circuit le-mans roulage moto piste date calendier entrainement  ",
" circuit ecuyers roulage moto piste date calendier entrainement  ",
" circuit vigeant roulage moto piste date calendier entrainement  ",
" circuit luc voici calendrier 2010 journees roulage sur ",
" circuit lfg roulage moto piste date calendier entrainement  ",
" circuit lurcis-levis roulage moto piste date calendier entrainement  ",
" circuit magny-cours roulage moto piste date calendier entrainement  ",
" circuit mas-du-clos roulage moto piste date calendier entrainement  ",
" circuit nogaro roulage moto piste date calendier entrainement  ",
" circuit pau-arnos roulage moto piste date calendier entrainement  ",
" l'album photo tout meilleurs moments forum  ",
" balade moto piste photo album 2007 ",
" balade moto piste photo album 2008 ",
" balade moto piste photo album 2009 ",
" lien site moto  ",
" contact motoslick webmaster e-mail ",
" video motoslick moto  ",
" confirmation d'envoi  ");
urlsArray = new Array("../site_moto/index.html",
"../motoslick_tour/index.html",
"../itinraire_moto/index.html",
"../aaa_index_circuit/index.html",
"../calendrier/index.html",
"../albi/index.html",
"../roulage_ales/index.html",
"../roulage_bresse/index.html",
"../roulage_bourbonnais-moulins/index.html",
"../roulage_carole/index.html",
"../castelet/index.html",
"../chambley/index.html",
"../chenevriere/index.html",
"../roulage_croix-en-ternois/index.html",
"../roulage_dijon-prenois/index.html",
"../folembray/index.html",
"../roulage_haute-saintonge/index.html",
"../roulage_issoire/index.html",
"../roulage_ledenon/index.html",
"../roulage_le-mans/index.html",
"../roulage_les-ecuyers/index.html",
"../roulage_le-vigeant/index.html",
"../leluc/index.html",
"../roulage_lfg/index.html",
"../roulage_lurcis-levis/index.html",
"../roulage_magny-cours/index.html",
"../roulage_mas-du-clos/index.html",
"../roulage_nogaro/index.html",
"../roulage_pau-arnos/index.html",
"../albumphoto_moto/index.html",
"../photo_07/index.html",
"../photo_08/index.html",
"../photo_09/index.html",
"../lien/index.html",
"../contact/index.html",
"../video_motos/index.html",
"../messageenvoye/index.html");
titlesArray = new Array("Motoslick-site moto",
"Motoslick tour-balade moto annuel",
"Itinéraire routier",
"circuits-moto-en-france",
"Les dates pour vos journées circuit",
"Roulage Moto 2010 circuit Albi",
"Roulage Moto 2010 circuit d'Ales",
"Roulage Moto 2010 circuit Bresse",
"Roulage Moto 2010 circuit Bourbonnais-Moulin",
"Roulage Moto 2010 circuit Carole",
"Roulage Moto 2010 circuit Paul Ricard Castelet",
"Roulage Moto 2010 circuit Chambley",
"Roulage Moto 2010 circuit Chenevrière",
"Roulage Moto 2010 circuit Croix-en-Ternois",
"Roulage Moto 2010 circuit Dijon-Prenois",
"Roulage Moto 2010 circuit Folembray",
"Roulage Moto 2010 circuit Haute-Saintonge",
"Roulage Moto 2010 circuit Issoire",
"Roulage Moto 2010 circuit Ledenon",
"Roulage Moto 2010 circuit du Mans",
"Roulage Moto 2010 circuit Ecuyers",
"Roulage Moto 2010 circuit Vigeant",
"Roulage Moto 2010 circuit Le Luc",
"Roulage Moto 2010 circuit Ferté-Gaucher",
"Roulage Moto 2010 circuit Lurcis-Levis",
"Roulage Moto 2010 circuit Magny-Cours",
"Roulage Moto 2010 circuit Mas-du-Clos",
"Roulage Moto 2010 circuit Nogaro",
"Roulage Moto 2010 circuit Pau-Arnos",
"L'album photo",
"album photo motoslick 2007",
"album photo motoslick 2008",
"album photo motoslick 2009",
"liens favoris",
"contact motoslick",
"video",
"Confirmation d'envoi");
descArray = new Array("organisation balades et sortie circuit à moto,forum moto en Haute-Savoie",
"Balade moto annuel motoslick tour regroupant les motards membres du forum.",
"liste de differents itineraires a parcourir en moto",
"liste des circuits moto en france et leurs coordonnées",
"",
"présentation et calendrier de roulages 2010 sur le circuit d'albi",
"présentation et calendrier de roulages 2010 sur le circuit d'ales",
"présentation et calendrier de roulages 2010 sur le circuit de la bresse",
"présentation et calendrier de roulages 2010 sur le circuit du bourbonnais",
"présentation et calendrier de roulages 2010 sur le circuit de carole",
"présentation et calendrier de roulages 2010 sur le circuit de Paul Ricard",
"présentation et calendrier de roulages 2010 sur le circuit de Chambley",
"présentation et calendrier de roulages 2010 sur le circuit de la Chenevrière",
"présentation et calendrier de roulages 2010 sur le circuit de croix en ternois",
"présentation et calendrier de roulages 2010 sur le circuit de dijon prenois",
"présentation et calendrier de roulages 2010 sur le circuit de Folembray",
"présentation et calendrier de roulages 2010 sur le circuit de haute saintonge",
"présentation et calendrier de roulages 2010 sur le circuit d'issoire",
"présentation et calendrier de roulages 2010 sur le circuit du lédenon",
"présentation et calendrier de roulages 2010 sur le circuit du mans",
"présentation et calendrier de roulages 2010 sur le circuit des ecuyers",
"présentation et calendrier de roulages 2010 sur le circuit du vigeant",
"présentation et calendrier de roulages 2010 sur le circuit du Luc",
"présentation et calendrier de roulages 2010 sur le circuit de la ferte gaucher(lfg)",
"présentation et calendrier de roulages 2010 sur le circuit de lurcis levis",
"présentation et calendrier de roulages 2010 sur le circuit de magny cours",
"présentation et calendrier de roulages 2010 sur le circuit du mas du clos",
"présentation et calendrier de roulages 2010 sur le circuit de nogaro",
"présentation et calendrier de roulages 2010 sur le circuit de pau arnos",
"Tout les meilleurs moments du forum ...",
"les différentes photo lié à nos balade moto ou sortie circuit de ses dernières années",
"",
"",
"voici les différents sites partenaires",
"les coordonnées du webmaster",
"toutes les vidéo moto de notre site",
"");
sublinksArray = new Array(37);
var linksCount = 37;


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>");
}
