// ----------------------------------------------------------------------------
// 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 = 1;
ONLINE_WEBSITE = 1;
ALLWORDSONLY = 0;
namesArray = new Array(" pocket transistors ",
" histoire first pocket transistor  ",
" comment debuter collection  ",
" pocket-transistors japon ",
" aladdin al-603 crown tr-680 tr-690 lafayette deluxe super-6 global gr-711 hilton transistors invicta model 200 civil defense juliette apr-206 kp-26 magnavox am-60 mellow-tone tr-604 national panasonic rf-511 realtone tr-1843 viscount 616 modele wilco 360 zephyr zr-620  ",
" aiwa ar-614 hitachi wh-662 wh-638 penney's 6tp-555 toshiba sanyo 6l-610 standard sr-g900l viscount model 725 j700fl zephyr 722 national channel master  ",
" tokyo transistor company goldtone omegas universal six transistors ptr-62b  ",
" national panasonic rf-511 standard micronic ruby g430  ",
" pocket-transistors a ",
" admiral pr-11 arvin 61r13 61r35 62r13 emerson 999 champion civil defense emergency 31p62 general electric p-1731b p915e p2751b jade j-102 motorola xp22dl victor 3-rh-21g 1-rh-13 sears silvertone 4208 1204 2201 rust westinghouse h732p7 york tr-102  ",
" zenith 500 ",
" zenith royal 125 ",
" pocket-transistors europe ",
" optalix to-100 ",
" philips lox20t l0x10t  ",
" pizon bros translitor pocket ",
" schaub lorentz pony ",
" solistor ",
" pocket transistors fabrication diverses saisissez message d'introduction groupe rubriques ",
" imperial im64 beovox  ",
" pocket-transistors post pockets >1980 ",
" box est toujours agreable trouver recepteur transistors dans son emballage d'origine  ",
" ecrins souvent ces petites merveilles l'electronique ont ete presentes dans etuis toute beaute voici quelques uns ",
" boy's radio ",
" pocket-transistors concepts ",
" angel coronet kings lloyd's star-lite tr-24 boy's radio windsor  ",
" channel master hitachi itt ",
" pocket-transistors accessoires ",
" pocket-transistors adaptateurs secteur ",
" pocket-transistors equivalence piles ",
" pocket-transistors archives ",
" data book  ",
" philco madison philips l3f18t 11rl080 22rl370 22rl583 pizon bros translitor 750 ribet-desjardins manille jade j-102 hitachi wh-825r national panasonic r-118 standard sr-h438 j-700 admiral pr-11 emerson 999 champion motorola xp22dl 3rh21g zenith  ",
" oceanic triton hitachi wh-825r york tr-102 ",
" clarville transisport sonneclair tr707 reela djinn  ",
" pocket-transistors bibliographie ",
" grammont pizon bros pizon-bros radio capte radio-capte ",
" pocket-transistors liens ",
" pocket-transistors quoi neuf  ");
urlsArray = new Array("../topic/index.html",
"../histoire/index.html",
"../collection/index.html",
"../groupederubrique/index.html",
"../japon/index.html",
"../typehorizontal/index.html",
"../tokyotransistor/index.html",
"../microradios/index.html",
"../groupederubriqu2/index.html",
"../usa/index.html",
"../zenith500/index.html",
"../zenithroyal/index.html",
"../groupederubriqu3/index.html",
"../optalix/index.html",
"../philips/index.html",
"../pizonbros/index.html",
"../schaub-lorentz/index.html",
"../solistor/index.html",
"../groupederubriqu6/index.html",
"../hong-kong/index.html",
"../postpocket/index.html",
"../box/index.html",
"../coffrets/index.html",
"../groupederubriqu1/index.html",
"../boysradio/index.html",
"../boysradioii/index.html",
"../sw/index.html",
"../groupederubriqu5/index.html",
"../accessoires/index.html",
"../battery/index.html",
"../groupederubriqu4/index.html",
"../databook/index.html",
"../archives/index.html",
"../schemas/index.html",
"../articlesrevues/index.html",
"../bibliographie/index.html",
"../pubsdepoque/index.html",
"../liens/index.html",
"../quoideneuf/index.html");
titlesArray = new Array("Pocket-Transistors",
"HISTOIRE DU FIRST POCKET TRANSISTOR",
"COMMENT DEBUTER UNE COLLECTION ?",
"POCKET-TRANSISTORS : JAPON",
"POCKET-TRANSISTORS : JAPON (Type vertical)",
"POCKET-TRANSISTORS : JAPON (Type horizontal)",
"TOKYO-TRANSISTOR COMPANY",
"POCKET-TRANSISTORS : MICRO RADIO",
"POCKET-TRANSISTORS : U.S.A",
"POCKET-TRANSISTORS : MARQUES",
"POCKET-TRANSISTORS : ZENITH ROYAL 500",
"POCKET-TRANSISTORS : ZENITH ROYAL",
"POCKET-TRANSISTORS : EUROPE",
"FRANCE : OPTALIX",
"HOLLANDE : PHILIPS",
"FRANCE : PIZON BROS",
"ALLEMAGNE : SCHAUB-LORENTZ",
"FRANCE : SOLISTOR",
"POCKET TRANSISTORS : FABRICATION DIVERSES",
"POCKET-TRANSISTORS : HONG-KONG",
"POCKET-TRANSISTORS : POST POCKETS (>1980)",
"BOX",
"ECRINS",
"POCKET-TRANSISTORS : BOY'S RADIO",
"POCKET-TRANSISTORS : CONCEPTS",
"POCKET-TRANSISTORS : MODELES",
"POCKET-TRANSISTORS : RECEPTEURS AVEC UNE BANDE ONDES COURTES",
"POCKET-TRANSISTORS : ACCESSOIRES",
"POCKET-TRANSISTORS : ADAPTATEURS SECTEUR",
"POCKET-TRANSISTORS : EQUIVALENCE DES PILES",
"POCKET-TRANSISTORS : ARCHIVES",
"DATA BOOK",
"Notices",
"SCHEMATHEQUE",
"ARTICLES REVUES",
"POCKET-TRANSISTORS : BIBLIOGRAPHIE",
"PUBLICITES D'EPOQUE",
"POCKET-TRANSISTORS : LIENS",
"POCKET-TRANSISTORS : QUOI DE NEUF ?");
descArray = new Array("",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"Saisissez le message d'introduction de votre groupe de rubriques",
"",
"",
"Il est toujours agréable de trouver un récepteur à transistors dans son emballage d'origine.",
"Souvent ces petites merveilles de l'électronique ont été présentés dans des écrins ou étuis de toute beauté.  En voici quelques uns :",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"Ces publicités sont extraites de revues comme : Le Haut-Parleur, Radio et TV, Toute la Radio ou Radio-Constructeur.  Elles permettent d'identifier un ...",
"",
"");
sublinksArray = new Array(39);
var linksCount = 39;


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>");
}

