// ----------------------------------------------------------------------------
// 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 = "40";
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(" faune vendee naturalistes vendeens nature naturaliste sortie environnement vendeen chiroptere loutre amphibien publications lettre geologie fritillaire enquete faunistique ",
" naturalistes vendeens naturaliste vendee adhesion cotisation blibliotheque ouvrages ",
" actualites naturalistes rencontres chiropteres grands ouest ",
" naturalistes vendee chiroptere loutre amphibien geologie botanique orchidee mammifere genette araignee serpent mollusque gasteropode ",
" chauve-souris vendee groupe chiroptere mammifere identification vendeen naturaliste liste chiropteres video ",
" loutre collision routiere epreinte vendee ",
" vendee sortie nature environnement vendeen chiroptere loutre amphibien botanique pointe arcay ",
" archives sorties ",
" publication lettre article scientifique naturaliste vendeen naturalistes revue ",
" lettre naturaliste vendee vendeens ",
" lettre naturalistes vendeens 1999 2000 2001  ",
" lettre naturalistes vendeens 2002 2003 2004  ",
" lettre naturalistes vendeens 2005 2006 2007  ",
" naturaliste vendeenbulletin scientifique revue ",
" naturaliste vendeen  ",
" bibliotheque virtuelle naturalistes vendeens  ",
" liens ",
" genette micromammiferes  ",
" geologie paleontologie  ",
" algologie marine  ",
" orchidees  ",
" mollusques terrestres  ",
" araignees  ",
" amphibiens reptiles  ",
" odoantes vendee liste odonates ",
" pteridophytes  ",
" botanique vendee fritillaire ",
" orthopteres clemot cle criquet sauterelles vendee ",
" lucanidae scarabacoidea cerambycidae  ",
" sos chauves-souris vendee chauve souris problemes ",
"  ",
" cloportes myriapodes  ",
" fritillaire  ",
" branchiopodes  ",
" mammiferes vendee atlas donnees micromammiferes mammalogie chiropteres chauves-souris  ",
" donnees mammiferes coordonnees vendee observation lapin taupe atlas sauvages ",
" mammiferes carte repartition vendee ",
" album mammiferes  ",
" atlas mammifere vendee sauvage ",
"  ",
" enquete fritillaire  ",
" mentions legales  ",
" agenda  ");
urlsArray = new Array("../topic/index.html",
"../lassosiation/index.html",
"../actualites/index.html",
"../lesactivites/index.html",
"../chriopteres/index.html",
"../loutre/index.html",
"../sorties/index.html",
"../archivessorties/index.html",
"../publication/index.html",
"../lalettredesnatur/index.html",
"../lalettre9901/index.html",
"../lalettre20022004/index.html",
"../lettre2005-2007/index.html",
"../lenaturalisteven/index.html",
"../somlenaturaliste/index.html",
"../bibliotheque/index.html",
"../liens/index.html",
"../genetteetmicroma/index.html",
"../geologiepaleonto/index.html",
"../algologiemarine/index.html",
"../orchidees/index.html",
"../mollusquesterres/index.html",
"../araignees/index.html",
"../amphibiensreptil/index.html",
"../odonates/index.html",
"../pteridophytes/index.html",
"../botanique/index.html",
"../orthopteres/index.html",
"../lucanidaescaraba/index.html",
"../soschauves-souri/index.html",
"../videochiro/index.html",
"../cloportesetmyria/index.html",
"../fritillaire/index.html",
"../branchiopodes/index.html",
"../atlasmammiferes/index.html",
"../datamamm/index.html",
"../docmamm/index.html",
"../mapage/index.html",
"../choixbase/index.html",
"../datamammgmap/index.html",
"../enquetefritillai/index.html",
"../mentions/index.html",
"../agenda/index.html");
titlesArray = new Array("Les Naturalistes Vendéens",
"Les Naturalistes Vendéens",
"Actualités",
"Les Naturalistes Vendéens",
"Groupe Chriroptères des Naturalistes Vendéens",
"LNV - Groupe Loutre",
"Sorties des Naturalistes Vendéens",
"Archives des sorties",
"Publications des Naturalistes Vendéens",
"La lettre des Naturalistes Vendéens",
"La lettre des Naturalistes Vendéens 1999, 2000 et 2001",
"La lettre des Naturalistes Vendéens 2002, 2003 et 2004",
"La lettre des Naturalistes Vendéens 2005, 2006 et 2007",
"Le Naturaliste Vendéen",
"Le Naturaliste Vendéen",
"Bibliothèque virtuelle des Naturalistes Vendéens",
"LNV - Liens",
"Genette et Micromammifères",
"Géologie, Paléontologie",
"Algologie marine",
"Orchidées",
"Mollusques terrestres",
"Araignées",
"Amphibiens, Reptiles",
"Odonates",
"Ptéridophytes",
"Botanique",
"LNV - Orthoptères",
"Lucanidae, Scarabacoidea et Cerambycidae",
"SOS Chauves-souris - Naturalistes Vendéens",
"Les Naturalistes Vendéens",
"Cloportes et Myriapodes",
"Fritillaire",
"Branchiopodes",
"LNV - Atlas des mammifères Vendée",
"LNV - Atlas des mammifères",
"LNV - Atlas des mammifères",
"Album mammifères",
"LNV - Atlas des mammifères",
"Les Naturalistes Vendéens",
"Enquête Fritillaire",
"Mentions légales",
"Agenda");
descArray = new Array("Association Les Naturalistes Vendéens (Vendée). Présentation de l'association, Activités, Publications, Sorties.",
"Les Naturalistes Vendéens. Présentation de l'association : actions, blibliothèque, adhésion...",
"Actualités des naturalistes vendéens, infos nature en Vendée, colloques, rencontres nature",
"Présentation des activités des Naturalistes Vendéens. Chauves-souris, odonates, mammifères, géologie....",
"Groupe Chriroptères Vendée. Les activités, les inventaires, des infos pratiques. liste des espèces de chauves-souris de Vendée.",
"Groupe loutre des naturalistes vendéens. Répartion de la loutre",
"Les sorties naturalistes des Naturalistes Vendéens",
"Vous trouverez sur cette page les archives des dates de sorties organisées par l'association.",
"Les publications des naturalistes vendéens : la lettre des Naturalistes, Le Naturalistes Vendéen (revue scientifique)",
"La lettre des Naturalistes Vendéens",
"",
"",
"",
"Revue annuelle scientifique : le naturalistes vendéen",
"",
"",
"Les liens du site des Naturalistes Vendéens",
"",
"",
"",
"",
"",
"",
"",
"Les odonates de vendée, liste des odonates de Vendée.",
"",
"Botanique, fritillaire pintade vendée",
"Orthoptères",
"",
"SOS Chauves-souris Vendée",
"",
"",
"",
"",
"Atlas des mammifères sauvage de Vendée. Projet coordonné par Julien Sudraud et Jean-Paul Paillat.",
"Formualire de transmission d'observation de mammifères, Atlas Mammifères suavges de vendée",
"Centre de documentation sur l'atlas des mammifères sauvages de Vendée",
"",
"transmettre une observation de mammifères sauavges en Vendée.",
"",
"",
"",
"");
sublinksArray = new Array(43);
var linksCount = 43;


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>");
}
