// ----------------------------------------------------------------------------
// 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 = 0;
USE_UTF8 = 0;
REMOVE_ACCENTS = 1;
BOLD_LINKS = 0;
ONLINE_WEBSITE = 1;
ALLWORDSONLY = 0;
namesArray = new Array(" accueil bonjour bienvenue toute l'equipe sarl nouvelles visions souhaite agreable visite sur l'ensemble ses espaces representant differentes activites produits societe ",
" mug mugs personnalises cadeaux cadeau personnalise objets offrir noel tatouage rigolo tasses tasse personnalisation personnalisation celtique anniversaire cafe boire chocolat boutique linux vaisselle valentin decoration decore decorer chiens coeur amour plaisir animaux photo golf faience fete mere meres marrants messages idee idees homme femme affaire lui elle original originaux maman papa frere soeur peres nouveautes nouvelles visions angers grand idee objet publicitaire associations entreprise promotionnel trophee chocolats chats clan guildes identitaire  ",
" mug tasse photo magique tapis souris puzzle nounours t-shirt tee-shirt personnalise tee shirt sac cabas cartes postales affiches deco bonnes affaires cadeaux fete meres coussin frises murales idee cadeau peluches personnalisees plaque rue plaques portrait bande dessinee encadree puzzles personnalises supports muraux taie d'oreiller personnalisee souris tee-shirts ardoise carrelage faience serviettes personnalisation objets personnalisation tshirts ",
" devis imprimerie edition etiquettes etiquette vin vins bouteille personnalisees impression adhesives autocollantes code barre creation etiquette cadeau fabricant ruban carton adhesive noel planche imprimante badge magnetique imprimeur carte visite cartes faire creer modele fidelite espace publicitaire objet support plaquette marquage systemes etiquetage logiciel etiquetage produits industriel ",
" produits personnalises voici images differents l'on peut personnaliser photos fichiers graphismes etc  ",
" tirelire ceramique blanche personnalisable d'apres photos  ",
" saisissez texte paragraphe ici ",
" saisissez texte paragraphe ici ",
" saisissez texte paragraphe ici ",
" saisissez texte paragraphe ici ",
" lot  ",
" lot  ",
" saisissez texte paragraphe ici ",
" saisissez texte paragraphe ici ",
" tres jolie boite bijoux bois style acajou avec interieur velours doux toucher dans couvercle est integre carreau ceramique qu'il possible decorer photo ",
" saisissez texte paragraphe ici ",
" saisissez texte paragraphe ici ",
" saisissez texte paragraphe ici ",
" saisissez texte paragraphe ici ",
" demande renseignements souhaitez plus amples informations veuillez utiliser formulaire ci-dessous  ",
" demande renseignements ete transmise recevrez reponse email dans plus brefs delais  ",
" blog prive entreprise interne informations societe infos nouvelles visions ",
" mug mugs cadeaux personnalises cadeau personnalise objets offrir noel tatouage rigolo tasses tasse personnalisation personnalisation celtique anniversaire cafe boire chocolat boutique linux vaisselle valentin decoration decore decorer chiens coeur amour plaisir animaux photo golf faience fete mere meres marrants messages idee idees homme femme affaire lui elle original originaux photo magique tapis souris puzzle nounours t-shirt tee-shirt tee shirt sac cabas cartes postales affiches deco bonnes affaires coussin frises murales peluches personnalisees plaque rue plaques portrait bande dessinee encadree puzzles supports muraux taie d'oreiller personnalisee souris tee-shirts ardoise carrelage maman papa frere soeur peres nouveautes nouvelles visions angers grand idee objet publicitaire associations entreprise promotionnel trophee chocolats chats clan guildes identitaire  ",
" veuillez contacter hesitez contacter questions produits travaux question personnalisation ");
urlsArray = new Array("../accueil/index.html",
"../mugs/index.html",
"../produits_perso/index.html",
"../travaux_imprimerie/index.html",
"../produitspersonna/index.html",
"../produitspersonna/page1.html",
"../produitspersonna/page2.html",
"../produitspersonna/page3.html",
"../produitspersonna/page4.html",
"../produitspersonna/page5.html",
"../produitspersonna/page6.html",
"../produitspersonna/page7.html",
"../produitspersonna/page8.html",
"../produitspersonna/page9.html",
"../produitspersonna/page10.html",
"../produitspersonna/page11.html",
"../produitspersonna/page12.html",
"../produitspersonna/page13.html",
"../produitspersonna/page14.html",
"../formulaire/index.html",
"../envois/index.html",
"../blog/index.html",
"../recherche/index.html",
"../contacts/index.html");
titlesArray = new Array("NOUVELLES VISIONS - Accueil de la Boutique de la Personnalisation",
"NOUVELLES VISIONS - Nos mugs personnalisés et décorés",
"NOUVELLES VISIONS - Nos produits à personnaliser",
"NOUVELLES VISIONS - Travaux d'Imprimerie",
"NOUVELLES VISIONS",
"Tirelire en Céramique",
"Tapis de Souris",
"Puzzle",
"Sac Cabas",
"Housse de Coussin",
"Sous-verre en bois mélaminé",
"Sous-verre en tissu",
"Panneau Mémo",
"Ours en peluche",
"Boite à Bijoux",
"Serviette de toilette",
"Plaque de cou avec chaine",
"Marque page en alu",
"Plaque de porte",
"NOUVELLES VISIONS",
"NOUVELLES VISIONS",
"NOUVELLES VISIONS - Nos dernières Informations",
"NOUVELLES VISIONS",
"NOUVELLES VISIONS - Pour nous contacter");
descArray = new Array("Entreprise spécialisée dans les objets et cadeaux personnalisés pour les particuliers, revendeurs, magasins spécialisés.",
"Mugs personnalisés et décorés ou à personnaliser pour particuliers, associations, entreprises. Divers cadeaux et objets personnalisés à offrir pour di...",
"Produits à personnaliser pour particuliers, associations, entreprises. Divers cadeaux et objets personnalisés à offrir pour divers évènements, anniver...",
"Nous réalisons des étiquettes adhésives ou non ainsi que des cartes ou différents travaux d'imprimerie.",
"Voici, en images, les différents produits que l'on peut personnaliser vos photos, fichiers, graphismes, etc...",
"&",
"&",
"&",
"&",
"&",
"&",
"&",
"&",
"&",
"&",
"&",
"&",
"&",
"&",
"Si vous souhaitez de plus amples informations, veuillez utiliser le formulaire ci-dessous.",
"Votre demande de renseignements a été transmise et vous recevrez une réponse par email dans les plus brefs délais.",
"Rubrique indiquant les dernières informations concernant notre société et ses sites web associés.",
"Société spécialisée dans les objets personnalisés et décorés pour les particuliers, entreprises, organismes et revendeurs. Grands choix de produits te...",
"Rubrique affichant tous les moyens pour nous contacter et nous demander des informations.");
sublinksArray = new Array(24);
var linksCount = 24;


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>");
}

