// ----------------------------------------------------------------------------
// 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("  ",
" formations deuil perinatal offertes printemps intervenants chers milieu sante notre mission est principalement regrouper parents vivant afin aider traverser cette difficile epreuve toutefois avons coeur leur prise charge infirmieres medecins autres lors leurs passages dans etablissements c'est pourquoi jugeons important communiquer services mises niveau cours offerts travers permettre familiariser avec d'augmenter comprehension emotions peuvent vivre endeuilles n'hesitez pas plus d'information l'equipe orphelins ",
" Étienne drapeau  ",
" couples recherches focus groupe bonjour suis recherche accepteraient participer group servira fins formation finance l'hopital maisonneuve-rosemont mars j'offrirai premiere serie formations l'intervention deuil perinatal s'adressera intervenants travailleurs sociaux psychologues soins spirituels infirmieres medecins etc vise developpement d'habiletes d'intervention lorsqu'un couple vit perte perinatale selectionnes devront repondre aux criteres suivant avoir vecu partie totalement dans hopital peu importe lequel etre pret discuter deroulement comportements personnel soignant leur egard ete aidant nuisible exemple deplacer lundi fevrier entre 17h30 18h30 aura lieu collation sera servie accepter d'etre filme techniciens audio-visuel signer formulaire consentement parents interesses doivent aussi mesure tolerer presence d'une femme enceinte puisque moi-meme j'animerai vivent actuellement nouvelle grossesse sont egalement bienvenus souhaitant communiquer directement avec moi courriel telephone plus tard jeudi mes coordonnees isabelle madore 514-252-3400 poste 2866 imadore hmr@ssss gouv ca ",
" ruban epinglette deuil perinatal deces bebe mortinaissance mort in-utero utero fausse-couche interruption medicale grossesse img avortement accouchement premature prematurite neonatalogie hopital sainte-justine chu ste-justine pierre boucher charl reves envoles nouveaux groupe soutien cafe causerie nos petits anges paradis ange peine entraide ressources parents orphelins parent orphelin association maman papa mere pere psychologue infirmiere medecin gynecologue obstetricien sage femme sage-femme accoucheuse ",
" eprouvons actuellement difficultes recevoir commandes internet risquons pas veuillez svp commander epinglette telephone 514 686-4880 courriel l'adresse info@parentsorphelins org sommes desoles probleme sachez travaillons regler merci comprehension ",
" l'association parents orphelins mis sur pied campagne sensibilisation cause deuil perinatal 2008 faire elle creee ruban bleu rose symbolisant quebecois s'inspirant faisait dans d'autres pays travers monde explication symbolique veut commemorer passage bebes decedes vie gens ont aimes est utilise representer garcons filles sont unis juxtaposes forme boucle afin d'illustrer l'entraide rassemblement desirez appuyer cette initiative meme occasion aider financement procurez-vous son epinglette l'effigie tous profits ventes d'epinglettes reinvestis poursuivre mission celle-ci ",
" deuil perinatal quebec  ",
" quelques chiffres l'association parents orphelins travaille continuellement l'amelioration ses donnees sur situation actuelle deuil perinatal quebec sujet elle invite tout chercheur professionnel ayant acces travaux recherches etudes statistiques communiquer avec ",
" l'association parents orphelins quebecoise vivant deuil perinatal est organisme sans but lucratif jour juin 2008 ensuite etre enregistre officiellement septembre administre vivent ",
" mission positionnement  ",
"  ",
" naissance l'association  ",
" membres fondatrices l'association leurs histoires parents orphelins jour grace travail l'amitie quatre mamans orphelines d'abord avant tout parce cinq petits bebes ont existes voici comment maelie raphael gabriel lili-jeanne maram permis meres s'unir mettre sur pied ",
" conseil d'administration actuel l'association est forme six administratrices ayant toutes vecues deuil perinatal ",
"",
"",
"",
"",
"",
"",
" mot porte parole  ",
" ruban quebecois deuil perinatal  ",
" calendrier  ",
" services offerts pouvez agrandir l'image cliquant dessus ",
" devenir membre  ",
" donner plusieurs possibilites s'offrent desirez contribuer financement l'association parents orphelins voici cinq ",
" joindre  ",
" amis l'association parents orphelins  ",
" temoignages membres  ",
" repertoire quebecois ressources d'aide deuil perinatal  ",
" photographes offrant souvenirs aux parents endeuilles certains offrent gratuitement leurs services vivent deuil perinatal travers quebec afin leur permettent conserver bebe ils deplacent l'hopital prendre photographies remettent ensuite celles-ci dans semaines suivants retour maison ",
" archives l'association  ",
" archives fevrier 2010  ",
" archives decembre 2009  ",
" archives novembre 2009  ",
" archives d'octobre 2009  ",
" fete anges 2009 depuis plusieurs annees grande nommee ¨fete anges¨ lieu octobre dans villes monde afin commemorer passage petits bebes vie ceux ont aimes nommer quelques montreal quebec saguenay riviere loup font parties celles l'on voir cette annee centaines ballons s'envoler ciel dernier ",
" texte valerie dorion fete anges montreal 2009  ",
" fete anges 2009  ");
urlsArray = new Array("../topic/index.html",
"../formationsauxint/index.html",
"../lafetedesanges20/index.html",
"../focusgroup/index.html",
"../magasin/index.html",
"../magasin/page1.html",
"../magasin/page2.html",
"../ledeuilperinatal/index.html",
"../lasituationauque/index.html",
"../mapage1/index.html",
"../lassociation1/index.html",
"../missionetpositi1/index.html",
"../lassociation/index.html",
"../albumphoto2/index.html",
"../lequipeactuelle/index.html",
"../lequipeactuelle/page1.html",
"../lequipeactuelle/page2.html",
"../lequipeactuelle/page3.html",
"../lequipeactuelle/page4.html",
"../lequipeactuelle/page5.html",
"../lequipeactuelle/page6.html",
"../mapage6/index.html",
"../lerubanquebecois/index.html",
"../lesservices/index.html",
"../naissancedunpro1/index.html",
"../topic1/index.html",
"../mapage5/index.html",
"../topic3/index.html",
"../lesservices1/index.html",
"../voscommentaires/index.html",
"../mapage3/index.html",
"../photographes/index.html",
"../archives/index.html",
"../fevrier2010/index.html",
"../decembre2009/index.html",
"../novembre2009/index.html",
"../octobre2009/index.html",
"../journeemondialed/index.html",
"../textevaleriedori/index.html",
"../trombinoscope/index.html");
titlesArray = new Array("Parents Orphelins",
"Formations en deuil périnatal offertes ce printemps par et pour des intervenants",
"Étienne Drapeau",
"Couples recherchés pour un focus groupe",
"Boutique de l'Association",
"ATTENTION!",
"Épinglette à l'effigie du ruban québécois du deuil périnatal.",
"Le deuil périnatal au Québec",
"Quelques chiffres",
"L'Association",
"Mission et positionnement",
"Parents Orphelins",
"Naissance de l'Association",
"Les membres fondatrices de l'Association... et leurs histoires",
"Le conseil d'administration actuel",
"Véronique Latte, présidente",
"Anie Grondin, vice-présidente",
"Sophie Delay, trésorière",
"Geneviève Beaupré, secrétaire",
"Marie-Christine Boucher, administratrice",
"Chantal Blouin, administratrice",
"Mot de la porte parole",
"Le ruban québécois du deuil périnatal",
"Le calendrier",
"Services offerts",
"Devenir membre",
"Donner",
"Nous joindre",
"Les amis de l'Association Parents Orphelins",
"Témoignages des membres",
"Répertoire québécois des ressources d'aide au deuil périnatal",
"Photographes offrant des souvenirs aux parents endeuillés",
"Archives de l'Association",
"Archives de février 2010",
"Archives de décembre 2009",
"Archives de novembre 2009",
"Archives d'octobre 2009",
"La Fête des anges 2009",
"Texte lu par Valérie Dorion à la Fête des anges de Montréal 2009",
"Fête des Anges 2009");
descArray = new Array("",
"Chers intervenants du milieu de la santé,  Notre mission est principalement de regrouper les parents vivant un deuil périnatal afin de les aider à tra...",
"",
"Bonjour,   Je suis à la recherche de 4 à 5 couples qui accepteraient de participer à un focus group qui servira à des fins de formation financé par l'...",
"",
"&",
"&",
"",
"L'Association Parents Orphelins travaille continuellement à l'amélioration de ses données et chiffres sur la situation actuelle du deuil périnatal au ...",
"Parents Orphelins, l'Association québécoise des parents vivant un deuil périnatal, est un organisme sans but lucratif qui a vu le jour le 10 juin 2008...",
"",
"",
"",
"L'Association Parents Orphelins a vu le jour grace au travail et à l'amitié de quatre mamans orphelines, mais d'abord et avant tout parce que cinq pet...",
"Le conseil d'administration de l'Association est formé de six administratrices ayant toutes vécues un deuil périnatal.",
"&",
"&",
"&",
"&",
"&",
"&",
"",
"",
"",
"Vous pouvez agrandir l'image en cliquant dessus",
"",
"Plusieurs possibilités s'offrent à vous si vous désirez contribuer au financement de l'Association Parents Orphelins, en voici cinq:",
"",
"",
"",
"",
"Certains photographes offrent gratuitement leurs services aux parents qui vivent un deuil périnatal à travers le Québec, afin de leur permettent de co...",
"",
"",
"",
"",
"",
"Depuis plusieurs années une grande fête nommée la ¨Fête des anges¨ a lieu en octobre dans plusieurs villes du monde afin de commémorer le passage de p...",
"",
"");
sublinksArray = new Array(40);
var linksCount = 40;


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>");
}
