// ----------------------------------------------------------------------------
// 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(" yang  ",
" yang communication propose services suivants permettre entreprise parfaire son image aux yeux ses clients prospects conseil relations presse organisation d'evenements analyse discours dans medias enquetes d'opinion informations ladha@yang be ",
" remplacez texte description article peut etre aussi long souhaitez pouvez laisser lignes blanches aerer presentation egalement demarrer sous-paragraphe commencant ligne caractere comme illustre ci-dessous exemple titre formater utilisant elements syntaxe suivant mettre mots italique attirer l'attention soulignant mots gras combiner styles precedents placer dessus image l'editeur d'images cela cliquer sur modifier puis rendez-vous l'onglet ajouter ceci utile rupture stock promotion  ",
" yang coaching collaborateurs propose formations individuelles groupe ces sont donnees anne pflimlin sur themes suivants prise parole public face camera radio techniques d'interview gestion son image expression orale comportementale informations anne@yang be ",
" anne pflimlin est productrice journaliste animatrice television elle intervient entre autres sur liberty sous nom d'anne ladha-pflimlin tres regulierement chaines japonaises anglaises allemandes suivi formation juriste puis l'ecole superieure journalisme paris nombreuses missions relations publiques ainsi l'enseignement prise parole public lui ont permis d'acquerir large experience monde communication ses cours d'expression orale comportementale aux plus grands chefs d'entreprises internationaux langues font coach repute petite niece pierre ancien maire strasbourg president conseil mariee mere deux enfants etudiants l'essec lycee francais bruxelles ",
" anne pflimlin  ",
" references electrabel axa bel rtl sas institute bongrain nostalgie european communication school shop channel japan home shopping europe radio contact euro 2000 liberty baladins miroir ecole superieure journalisme paris business lawyers directory royal racing club bruxelles tourisme vins mendoza argentine decision  ",
" liens  ",
" contacts  ");
urlsArray = new Array("../topic/index.html",
"../topic2/index.html",
"../topic2/index.html",
"../catalogue/index.html",
"../catalogue/index.html",
"../topic1/index.html",
"../references/index.html",
"../topic3/index.html",
"../topic4/index.html");
titlesArray = new Array("YANG  ",
"YANG communication",
"Nom de l'article",
"YANG coaching",
"Anne Pflimlin en bref...",
"Anne Pflimlin",
"Références",
"Liens",
"Contacts");
descArray = new Array("",
"YANG vous propose les services suivants pour permettre à votre entreprise de parfaire son image aux yeux de ses clients et prospects :  - conseil en c...",
"&",
"Pour vous ou vos collaborateurs, YANG propose des formations individuelles ou en groupe. Ces formations sont données par Anne Pflimlin sur les thèmes ...",
"&",
"",
" - Electrabel - AXA - Bel RTL - SAS Institute - Bongrain - Nostalgie - European Communication School - Shop Channel Japan - Home Shopping Europe - Rad...",
"",
"");
sublinksArray = new Array(9);
var linksCount = 9;


// 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)
  }

  // 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] + lnktarget + "\">" + 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] + 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;'>" + 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>");
}

