// ************************************************************************************************
//
// Javascript-Ergänzungen für www.jb-electronics.de
//
// Nixie-Suche für die Nixie-Sammlung
//
// Copyright www.jb-electronics.de
//
// last modified 00:05 15.04.2010
//
//
// ************************************************************************************************

// ************************************************************************************************
// Globale Variablen
var KEYWORD = "";

// Hilfsvariable bei erstem Durchlauf
var FIRST = true;

// "Datenbank" für die Nixies
var liste = new Array(	new N("5853-ST", "5853st", 1),
						new N("5870-S", "5870s", 1),
						new N("58GA-S", "58gas", 0),
						new N("6844A", "6844a", 0),
						new N("7153", "7153", 1),
						new N("8037", "8037", 0),
						new N("8422", "8422", 0),
						new N("B-40225-AL", "b40225al", 1),
						new N("B-4031", "b4031", 1),
						new N("B-5025", "b5025", 0),
						new N("B-50325", "b50325", 1),
						new N("B-5034", "b5034", 0),
						new N("B-5035", "b5035", 0),
						new N("B-5092", "b5092", 1),
						new N("B-54362", "b54362", 0),
						new N("B-54365", "b54365", 0),
						new N("B-5448", "b5448", 0),
						new N("B566M", "b566m", 1),
						new N("B-5971", "b5971", 1),
						new N("B-5992", "b5992", 0),
						new N("B-5992", "b5992_2", 0),
						new N("B-59956", "b59956", 1),
						new N("B-5xx9", "b5xx9", 1),
						new N("B-6032", "b6032", 1),
						new N("B-6037", "b6037", 0),
						new N("B-7031", "b7031", 1),
						new N("B-7094", "b7094", 1),
						new N("B-7971", "b7971", 1),
						new N("B-8091", "b8091", 1),
						new N("B-8091", "b8091_2", 1),
						new N("B-8091", "b8091_3", 1),
						new N("B-8971", "b8971", 1),
						new N("B-9012", "b9012", 0),
						new N("CD11", "cd11", 1),
						new N("CD12", "cd12", 1),
						new N("CD14", "cd14", 1),
						new N("CD24", "cd24", 1),
						new N("CD43", "cd43", 1),
						new N("CD46", "cd46", 1),
						new N("CD56", "cd56", 1),
						new N("CD61", "cd61", 0),
						new N("CD66A", "cd66a", 0),
						new N("CD69", "cd69", 1),
						new N("CD78", "cd78", 0),
						new N("CD80P", "cd80p", 1),
						new N("CD81", "cd81", 0),
						new N("CD90P", "cd90p", 0),
						new N("CD94", "cd94", 1),
						new N("CK-8650", "ck8650", 0),
						new N("CK-8754", "ck8754", 0),
						new N("F9020AA", "f9020aa", 1),
						new N("F9020AA", "f9020aa_2", 1),
						new N("F9080", "f9080", 1),
						new N("F9080BA", "f9080ba", 1),
						new N("F9092A", "f9092a", 0),
						new N("F9138A", "f9138a", 0),
						new N("G10/200E", "g10200e", 1),
						new N("GA1", "ga1", 1),
						new N("GA11", "ga11", 1),
						new N("GA12", "ga12", 1),
						new N("GA21", "ga21", 1),
						new N("GF-37-AH", "gf37ah", 0),
						new N("GI-10", "gi10", 1),
						new N("GI-21", "gi21", 1),
						new N("GN-1", "gn1", 1),
						new N("GN-1", "gn1_2", 1),
						new N("GN-2A", "gn2a", 1),
						new N("GN-4", "gn4", 1),
						new N("GN-4", "gn4_2", 1),
						new N("GN-5", "gn5", 1),
						new N("GN-5A", "gn5a", 1),
						new N("GN-6A", "gn6a", 0),
						new N("GNP-7", "gnp7", 0),
						new N("GR10A", "gr10a", 1),
						new N("GR10G", "gr10g", 1),
						new N("GR10G", "gr10g_2", 1),
						new N("GR10H", "gr10h", 1),
						new N("GR10J", "gr10j", 1),
						new N("GR10J", "gr10j_2", 1),
						new N("GR10J", "gr10j_3", 1),
						new N("GR10J/F", "gr10jf", 1),
						new N("GR10K", "gr10k", 1),
						new N("GR10K", "gr10k_2", 1),
						new N("GR10M", "gr10m", 1),
						new N("GR10M/U", "gr10mu", 1),
						new N("GR10N", "gr10n", 1),
						new N("GR-111", "gr111", 0),
						new N("GR2J", "gr2j", 1),
						new N("GR2M", "gr2m", 1),
						new N("GR-414", "gr414", 1),
						new N("GR-628", "gr628", 1),
						new N("GS-4", "gs4", 1),
						new N("GS-6", "gs6", 0),
						new N("HB-106", "hb106", 1),
						new N("HI544", "hi544", 1),
						new N("HI549", "hi549", 1),
						new N("IN-1", "in1", 1),
						new N("IN-12A", "in12a", 1),
						new N("IN-12B", "in12b", 1),
						new N("IN-4", "in14", 1),
						new N("IN-15A", "in15a", 1),
						new N("IN-15B", "in15b", 1),
						new N("IN-16", "in16", 1),
						new N("IN-17", "in17", 1),
						new N("IN-18", "in18", 1),
						new N("IN-19A", "in19a", 1),
						new N("IN-19B", "in19b", 1),
						new N("IN-19V", "in19v", 1),
						new N("IN-2", "in2", 1),
						new N("IN-28", "in28", 1),
						new N("IN-4", "in4", 1),
						new N("IN-7A", "in7a", 0),
						new N("IN-8", "in8", 1),
						new N("IN-8-2", "in8_2", 0),
						new N("JAN-8422", "jan8422", 0),
						new N("LC-511", "lc511", 0),
						new N("LC-531", "lc531", 0),
						new N("LC-631", "lc631", 1),
						new N("LD-8007", "ld8007", 0),
						new N("LD-817", "ld817", 1),
						new N("LD-912", "ld912", 0),
						new N("LL-552", "ll552", 0),
						new N("LL-553", "ll553", 0),
						new N("MG-17F", "mg17f", 0),
						new N("MG-17G", "mg17g", 1),
						new N("N.I.1", "ni1", 1),
						new N("N.I.2", "ni2", 1),
						new N("NL-1212", "nl1212", 1),
						new N("NL-4031", "nl4031", 1),
						new N("NL-4998", "nl4998", 1),
						new N("NL-5016", "nl5016", 0),
						new N("NL-50911", "nl50911", 1),
						new N("NL-5441", "nl5441", 0),
						new N("NL-5441-A", "nl5441a", 1),
						new N("NL-6844-A", "nl6844a", 0),
						new N("NL-7009", "nl7009", 1),
						new N("NL-7037", "nl7037", 1),
						new N("NL-7038", "nl7038", 1),
						new N("NL-7094", "nl7094", 1),
						new N("NL-8091", "nl8091", 1),
						new N("NL-840", "nl840", 1),
						new N("NL-843", "nl843", 1),
						new N("NL-918", "nl918", 1),
						new N("NL-924", "nl924", 1),
						new N("NL-925", "nl925", 1),
						new N("NL-926", "nl926", 1),
						new N("NL-934", "nl934", 1),
						new N("NL-950-S", "nl950s", 1),
						new N("NUP102", "nup102", 1),
						new N("RD.125.", "rd125", 1),
						new N("TAF1317A", "taf1317a", 0),
						new N("TAU7030", "tau7030", 0),
						//new N("unbekannte Nixie", "unknown1", 0),
						new N("QS18-12", "qs1812", 0),
						new N("SZ-8", "sz8", 1),
						new N("XN-1", "xn1", 1),
						new N("XN-2", "xn2", 1),
						new N("XN-3", "xn3", 0),
						new N("YN-3", "yn3", 0),
						new N("Z510M", "z510m", 0),
						new N("Z520M", "z520m", 1),
						new N("Z522M", "z522m", 1),
						new N("Z524M", "z524m", 0),
						new N("Z5600M", "z5600m", 1),
						new N("Z560M", "z560m", 1),
						new N("Z5660M", "z5660m", 0),
						new N("Z566M", "z566m", 0),
						new N("Z5670M", "z5670m", 0),
						new N("Z567M", "z567m", 1),
						new N("Z568M", "z568m", 1),
						new N("Z570M", "z570m", 1),
						new N("Z570M", "z570m_unbekannt", 1),
						new N("Z571M", "z571m", 0),
						new N("ZM1000", "zm1000", 1),
						new N("ZM1000", "zm1000_amperex", 1),
						new N("ZM1001", "zm1001", 1),
						new N("ZM1001", "zm1001_amperex", 1),
						new N("ZM1020", "zm1020", 1),
						new N("ZM1021", "zm1021", 1),
						new N("ZM1022", "zm1022", 1),
						new N("ZM1025", "zm1025", 0),
						new N("ZM1028", "zm1028", 0),
						new N("ZM1040", "zm1040_mullard", 0),
						new N("ZM1040", "zm1040_tesla", 1),
						new N("ZM1043", "zm1043", 0),
						new N("ZM1043S", "zm1043s", 1),
						new N("ZM1049", "zm1049", 1),
						new N("ZM1050", "zm1050", 0),
						new N("ZM1080", "zm1080_telefunken", 1),
						new N("ZM1080", "zm1080_telefunken_2", 1),
						new N("ZM1080", "zm1080_valvo", 1),
						new N("ZM1083", "zm1083", 0),
						new N("ZM1100", "zm1100", 1),
						new N("ZM1120", "zm1120_siemens", 1),
						new N("ZM1120", "zm1120_telefunken", 1),
						new N("ZM1162", "zm1162", 1),
						new N("ZM1172", "zm1172", 1),
						new N("ZM1180", "zm1180", 1),
						new N("ZM1180", "zm1180_siemens_2", 1),
						new N("ZM1180", "zm1180_wf", 1),
						new N("ZM1182", "zm1182", 0),
						new N("ZM1183", "zm1183", 0),
						new N("ZM1200", "zm1200", 1),
						new N("ZM1202", "zm1202", 1),
						new N("ZM1206", "zm1206", 1),
						new N("ZM1210", "zm1210", 1),
						new N("ZM1222", "zm1222", 1),
						new N("ZM1240", "zm1240", 0),
						new N("ZM1241", "zm1241", 0),
						new N("ZM1242", "zm1242", 1),
						new N("ZM1242", "zm1242_2", 1),
						new N("ZM1243", "zm1243", 0),
						new N("ZM1263", "zm1263", 0),
						new N("ZM1290", "zm1290", 0),
						new N("ZM1292", "zm1292", 0),
						new N("ZM1350", "zm1350", 0),
						new N("ZM1410", "zm1410", 0)
						
					);

// ************************************************************************************************
// Klasse für Nixies
function N (Name, shortName, article) {
	this.Name = Name;
	this.shortName = shortName;
	this.article = article;
}

// ************************************************************************************************
// zeigt das Suchformular an
function showSearchForm () {

	// Schalte entsprechende div auf sichtbar
	getResultDiv().style.display = "block";	
	
	// und hebe entsprechende Textbox hervor
	if (LANG == DE) {
		document.getElementById("nixiesuche").focus();
		document.getElementById("nixiesuche").select();
	} else {
		document.getElementById("nixiesearch").focus();
		document.getElementById("nixiesearch").select();
	}
	
}

// ************************************************************************************************
// initialisiere die Suche
function initSearch (textboxID) {

	// Extrahiere das Suchwort
	KEYWORD = document.getElementById(textboxID).value;	
	
	// Bei nicht-leerer Suchanfrage: Suche durchführen
	if (KEYWORD != "") {
	
		document.getElementById(textboxID).focus();
		showSearchForm();
		doSearch();

	}

}

// ************************************************************************************************
// liefert die Textbox des jeweiligen Suchfensters zurück
function getResultDiv () {

	if (LANG == DE) {
		return document.getElementById('NixieSearchDE');
	} else {
		return document.getElementById('NixieSearchEN');
	}
	
}	

// ************************************************************************************************
// führt die eigentliche Suche durch
function doSearch () {

	// Variablen
	var gefunden = false;
	
	/*// zweiter odere höhere Durchlauf?
	// lösche eventuell vorhandene vorherige Suchergebnisse
	//if (!FIRST) {
		var oldDiv = getResultDiv();
		var tmp = oldDiv.removeChild(oldDiv.lastChild);
		tmp = oldDiv.removeChild(oldDiv.lastChild);
	}*/
	if (!FIRST) {
		getResultDiv().removeChild(getResultDiv().lastChild);
	}

	// Stelle die Suchergebnisse innerhalb einer umschließenden <div> zusammen
	var innerHTML = "";
	innerHTML += "<div><table width='100%'>"
	
	// bei englischer Sprache: Setze die Links durch Hinzufügen von "?lang=en" auf englisch
	var language_flag = "";
	if (LANG == EN) {
		language_flag = "?lang=en";
	}
	
	// Tabellenlayout der Suchergebnisse; sonstige Suchvariablen
	var ROWS = 4, WIDTH = 100 / ROWS;
	var spalte = 0, treffer = 0;
	
	// Forme das Keyword in einen Regulären Ausdruck um
	var Ausdruck = new RegExp(simplify(KEYWORD));
	
	// führe Suche durch
	for (i = 0; i < liste.length; i++) {
	
		// Hole Shortname
		var n = liste[i].shortName;
		
		// passt der Suchbegriff auf den Namen?
		if (Ausdruck.test(simplify(liste[i].Name.toLowerCase()))) {
		
			// Suchvariablen
			spalte++;
			treffer++;
			
			// Tabellenlayout erstellen
			if (spalte > ROWS) {
				spalte = 1;
			}
			if (spalte == 1) {
				innerHTML += "<tr>"
			}
			
			// Suchergebnis erstellen, entweder mit oder ohne Link zur Artikelseite
			if (liste[i].article != 0) {
				innerHTML += "<td width='" + WIDTH + "%' height='250px' style='border: 0;'><a href='n_" + n + ".htm" + language_flag + "'><img style='margin-bottom: 0;' src='../../../images/elektronik/nixies/n_sammlung/" + n + ".jpg' alt='" + liste[i].Name + "'></a><p class='small'><a href='n_" + n + ".htm' onclick='closeResults();'>" + liste[i].Name + "</a></p></td>";
			} else {
				innerHTML += "<td width='" + WIDTH + "%' height='250px' style='border: 0;'><img style='margin-bottom: 0;' src='../../../images/elektronik/nixies/n_sammlung/" + n + ".jpg' alt='" + liste[i].Name + "'><p class='small'>" + liste[i].Name;
				if (LANG == DE) {
					innerHTML += " (leider noch keine separate Fotoseite vorhanden)</p></td>";
				} else {
					innerHTML += " (no separate article available yet)</p></td>";
				}
			}
			
			// Tabellenlayout erstellen
			if (spalte == ROWS) {
				innerHTML += "</tr>"
			}
			
			// Suchvariable
			gefunden = true;

		}
		
	}
	innerHTML += "</table>"

	// Zeige den Suchbegriff an
	var innerHTML_first = "";
	if (LANG == DE) {
		innerHTML_first = "<p>Eingegebener Suchbegriff: <b><i>" + maskiere(KEYWORD) + "</i></b>, Treffer: <b><i>" + treffer + "</i></b></p>";
	} else {
		innerHTML_first = "<p>Search query: <b><i>" + maskiere(KEYWORD) + "</i></b>, matches: <b><i>" + treffer + "</i></b></p>";
	}
	
	// Meldung bei keinem Fund
	if (!gefunden) {
		if (LANG == DE) {
			innerHTML  = "<p id='resultsNixieSearch'>Leider nichts gefunden...</p>";
		} else {
			innerHTML  = "<p id='resultsNixieSearch'>No results...</p>";
		}
		
	// Ansonsten noch ein paar Hinweise.
	} else {
	
		if (LANG == DE) {
			innerHTML += "<p>Klicken Sie auf die Bilder der Nixies, um (wenn vorhanden) zu den jeweiligen Unterseiten zu gelangen.</p></div>";
		} else {
			innerHTML += "<p>Click on the images of the Nixie tubes to visit the separate arcticles (if available).</p></div>";
		}
		
	}
	
	// Zeige Suchergebnisse an (d.h. erzeuge <div>[results]</div>)
	var container = getResultDiv();
	var resultsDiv = document.createElement("div");
	resultsDiv.innerHTML = innerHTML_first + innerHTML;
	//resultsDiv.appendChild(document.createTextNode(innerHTML));	
	container.appendChild(resultsDiv);
	
	// erster Suchdurchlauf vorbei
	FIRST = false;
	
}

// ************************************************************************************************
// reagiert auf Tastendruck
function check (e) {

	// Escape: Suche schließen
	if (e.keyCode == 27) {
		hideSearchForm();
	}
	
	// F2: Suche anzeigen
	if (e.keyCode == 113) {
		showSearchForm();
	}
	
}

// ************************************************************************************************
// schließt das Suchfenster
function hideSearchForm () {

	document.getElementById('NixieSearchDE').style.display = "none";
	document.getElementById('NixieSearchEN').style.display = "none";

}

// ************************************************************************************************
// dient zur Vereinfachung eines Röhren-Namens, entfernt störende Zeichen
function simplify (s) {

	return s.replace(/ /g, "").replace(/-/g, "").replace(/\//g, "").replace(/\./g, "").replace(/\*/, ".+").toLowerCase();
	
}

// ************************************************************************************************
// entfernt HTML-Steuerzeichen
function maskiere (s) {

	return s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
	
}