// ----------------------------------------------------------------------------
// 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 = "25";
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(" mariage ",
" service  ",
" formule pro decouvrez rassemble chaque atout garantir reussite soirees  ",
" tarifs sono ",
" spectacles evenements  ",
" themes musicaux choisissez theme convient mieux inspirez differents soiree carte ",
" deroulement soiree voici comment deroule habituelle avec animation party packs consultez rubrique ",
" dj's  ",
" animation  ",
" questions frequemment posees ces concernent forfait soiree party packs consultez rubrique  ",
" exclusif conseils reussir soiree afin garantir reussite voici quelques suivre ",
" cours d'initiation salsa  ",
" offre prix souhaitez officielle suffit d'imprimer cette page retrouvez nos deux offres base formules plus elaborees sera propose sur precisions  ",
" salles soirees privees  ",
" party packs  ",
" decouvrez party pack  ",
" formules tarifs party packs pouvez commander directement l'aide formulaire reservation pack  ",
" video demonstration virtuel  ",
" commander party pack  ",
" autres services  ",
" bars restos souhaitez formule originale jouer musique dans etablissement recherchez fois atmospheres relaxantes aussi faire monter l'ambiance moment alors decouvrez virtuel smart  ",
" soirees prodj photos  ",
" livre d'or references  ",
" bruxelles belgique mariage sono location ",
" formulaire contact  ",
" nederlands  ",
" party pack economische all one feestformule waarom packs zijn beste oplossing voor feesten met minder dan 100 personen ingredienten verenigd het slagen van feest virtuele mixt muziek die verkiest wanneer dat zelf wilt danst onder vrienden zonder zorgen hoeven maken over ook bent dansvloer niet meer nodig smeken eenderd welk lied stressen feit stijl overeenkomt uwe moeten stoppen een bepaald uur enz avond verloopt zich precies naar wensen enige verplichting formules aangepast aan alle budgetten tarieven ",
" formules tarieven  ",
" contact  ",
" jeux animations ludiques envie donner ambiance ludique soiree simplement d'agrementer peu repas trouvez ici idees dont pouvez inspirer agrementer programme l'animation seront convenir avec veuillez contacter plus d'informations ",
" formulaire contact  ",
" mariages plus beau jour vie prodj anime regulierement ",
" drafs utilisez modele commencer page vierge ",
" bruxelles belgique mariage sono location ",
" bruxelles belgique mariage sono location ",
" emploi utilisez modele commencer page vierge ",
" bon commande prestations  ");
urlsArray = new Array("../start/index.html",
"../groupederubrique/dj",
"../lafomuleprodj/index.html",
"../tarifs/index.html",
"../spectacleseteven/index.html",
"../lamusique/index.html",
"../lasoiree/index.html",
"../ledj/index.html",
"../animation/index.html",
"../faqs/index.html",
"../conseils/index.html",
"../mapage3/index.html",
"../offre/index.html",
"../salles/index.html",
"../groupederubriqu1/index.html",
"../partypacks/index.html",
"../ppformules/index.html",
"../videodemo/index.html",
"../reservationpp/index.html",
"../autresservices/index.html",
"../barsrestos/index.html",
"../photos/index.html",
"../livredor/index.html",
"../intro/intro.html",
"../contact/index.html",
"../nl/index.html",
"../partypack_nl/index.html",
"../nlformulen/index.html",
"../nlcontact/index.html",
"../jeux/index.html",
"../contact1/index.html",
"../mapage4/index.html",
"../drafts/index.html",
"../confirmation/index.html",
"../vosphotos/index.html",
"../mapage/index.html",
"../commande/index.html");
titlesArray = new Array("DJ Bruxelles et Belgique animation",
"Service DJ",
"La formule Pro DJ",
"Tarifs DJ & Sono",
"Spectacles et évènements",
"Les Thèmes musicaux",
"Le déroulement de votre soirée",
"DJ's",
"Animation",
"Les questions fréquemment posées",
"Exclusif : les conseils pour réussir votre soirée",
"Cours d'initiation à la Salsa",
"Offre de Prix",
"Salles pour vos soirées privées",
"Les Party Packs",
"Sonorisation Bruxelles",
"Formules et tarifs des Party Packs",
"Video de démonstration du DJ virtuel",
"Commander un Party Pack",
"Autres services",
"Bars & Restos",
"Les soirées ProDj.be en photos",
"Livre d'or et références",
"DJ Bruxelles et Belgique animation",
"Formulaire de contact",
"Nederlands",
"Optimal Music",
"Formules en tarieven",
"Contact",
"Jeux et animations ludiques",
"Formulaire de contact",
"Mariages",
"drafs",
"DJ Bruxelles et Belgique animation",
"DJ Bruxelles et Belgique animation",
"Emploi",
"Bon de Commande de prestations");
descArray = new Array("DJ mariage",
"",
"Découvrez la formule Pro DJ qui rassemble chaque atout pour garantir la réussite de vos soirées :",
"DJ mariage Belgique",
"",
"Choisissez le Thème qui vous convient le mieux, ou inspirez vous des différents thèmes pour votre soirée à la carte.",
"Voici comment se déroule une soirée habituelle avec animation DJ : (pour les Party Packs consultez la rubrique Party Packs)",
"DJ  mariage",
"",
"Ces questions concernent le forfait SOIREE DJ  (pour les Party Packs consultez la rubrique Party Packs)",
"Afin de garantir la réussite de votre soirée, voici quelques conseils à suivre",
"",
"Si vous souhaitez une Offre de prix officielle, il vous suffit d'imprimer cette page. Vous y retrouvez les prix pour nos deux offres de base. Pour les...",
"",
"",
"Location sono Bruxelles",
"Vous pouvez commander directement à l'aide du formulaire de Réservation Party Pack.",
"",
"",
"",
"Vous souhaitez une formule originale pour jouer de la musique dans votre établissement... Vous recherchez à la fois des atmosphères relaxantes, mais a...",
"",
"",
"DJ Bruxelles et Belgique animation sono",
"",
"",
"Waarom de Party Packs ?  De Party Packs zijn de beste oplossing voor feesten met minder dan 100 personen. Al de ingrediënten zijn verenigd voor het sl...",
"",
"",
"Envie de donner une ambiance ludique à votre soirée, ou simplement d'agrémenter un peu le repas...   Vous trouvez ici des idées de jeux dont vous pouv...",
"",
"Pour le plus beau jour de votre vie,   ProDj.be anime régulièrement des mariages.",
"Utilisez ce modèle pour commencer une page vierge",
"DJ Bruxelles et Belgique animation sono",
"DJ Bruxelles et Belgique animation sono",
"Utilisez ce modèle pour commencer une page vierge",
"");
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>");
}
