// ___________________________________________________________________________
//
// Allgemeine JavaScript-Funktionen fuer Suchmasken
// ___________________________________________________________________________
//
// Copyright Uwe Dierolf, UB Karlsruhe, 03.07.2002
//
// ---------------------------------------------------------------------------
//
// ACHTUNG:
// Die Funktionen "load_prefs_opts(form, group)" und "save_prefs_opts(form)"
// und der Array "fields" MUESSEN zusaetzlich definiert sein (entweder in der
// Suchmaske oder in einer zusaetzlichen JavaScript-Datei; siehe kvk-last.js
// bzw. kvk_specific.js).
//
// 20.07.2002, Oliver Kern:
//	KVK-spezifische Elemente ausgelagert
// 05.08.2002, Oliver Kern:
//	Unschoenen Bug in "generate_session()" behoben (IE kann nicht auf
//	Strings wie auf Arrays zugreifen)
// 26.08.2002, Oliver Kern:
//	Funktion "auto_fill_form()" hinzugefuegt, die die Suchfelder in der
//	Maske automatisch mit den entsprechenden Daten aus einem eventuell
//	vorhandenen Querystring ausfuellt
// 07.05.2003, Arne Alex:
//	Funktion cookie_name() dahingehend veraendert, dass anstatt dem
//	Dateinamen (ohne .html-Endung) auch der Verzeichnisname verwendet
//	werden kann. Dadurch bessere Unterstuetzung fuer index.html-Dateien.
// 08.05.2003, Arne Alex:
//	Funktion checkISBN(isbn) hinzugefuegt. Problem: Enthaelt einen
//	String in deutscher Sprache.
// 09.05.2003, Arne Alex:
//	Funktion set_focus(form) geaendert, dass beim Laden der Seite nicht
//	mehr das Formular-Element "TI" den Fokus erhaelt, sondern das
//	erste Texteingabefeld. Damit funktioniert auch der CHZK, der
//	nicht "TI", sondern "SE" unterstuetzt.
//
// ___________________________________________________________________________
//

//Javascript for the Utah Multi-Catalog Search appearing on the Utah State Library Division web site and including only public libraries

// Name des Sitzungs-Test-Cookies/-CGI-Parameters (muss mit der
// KVK-Konfigurationsdatei uebereinstimmen) und Sitzungsnummer
sessiontestname = "kvk-session"

// Initialisierung "onLoad". Aufruf mit der Indexnummer des Suchformulars
function init_form(index) {
	var form = document.forms[index]
	auto_load_prefs(form)
	auto_fill_form(form)
	set_focus(form)
}

// Focus setzen, und zwar auf das erste Texteingabefeld im Formular
function set_focus(form) {
	for (var i = 0; i < form.elements.length; i++) {
		if (form.elements[i].type == "text") {
			form.elements[i].focus();
			break;
		}
	}

	// vorher:
	// form.elements["TI"].focus()
}

// Einstellungen automatisch laden
function auto_load_prefs(form) {
	if (no_cats_checked(form)) load_prefs(form)
}

// Gibt zurueck, ob schon Kataloge ausgewaehlt sind
function no_cats_checked(form) {
	for (var i = 0; i < form.kataloge.length; i++)
		if (form.kataloge[i].checked) return false
	return true
}

// Einstellungen laden
function load_prefs(form) {
	var exp = new RegExp(cookie_name() + "=([^;, ]+)")
	if (exp.test(document.cookie)) var prefs = RegExp.$1
	else return

	var groups = new Array()
	groups = prefs.split("&")

	// Nicht genuegend Gruppen vorhanden -> unbekanntes Format
	if (groups.length < 2) return

	if (load_prefs_opts) load_prefs_opts(form, groups[0])
	load_prefs_cats(form, groups[1])

	set_focus(form)
}

// Katalog-Einstellungen laden
function load_prefs_cats(form, group) {
	// Dieses Umschaufeln ist notwendig, da IE im Gegensatz zu NS nicht
	// direkt auf den String wie auf einen Array zugreifen kann
	var bits = new Array()
	bits = group.split("")

	// Nicht genuegend "Bits" vorhanden -> unbekannte Daten
	if (bits.length < form.kataloge.length) return

	for (var i = 0; i < form.kataloge.length; i++)
		form.kataloge[i].checked = (bits[i] == "1")
}

// Einstellungen sichern
function save_prefs(form) {
	var expires = new Date()
	// Ein Jahr
	expires.setTime(expires.getTime() + 31536000000)
	var cookie = cookie_name() + "="
	if (save_prefs_opts) cookie += save_prefs_opts(form) + "&"
	else cookie += "&"
	cookie += save_prefs_cats(form)
	cookie += "; expires=" + expires.toGMTString()
	document.cookie = cookie
	set_focus(form)
}

// Katalog-Einstellungen sichern
function save_prefs_cats(form) {
	var cats = ""
	for (var i = 0; i < form.kataloge.length; i++)
		if (form.kataloge[i].checked) cats += "1"
		else cats += "0"
	return cats
}

// Status einer Checkbox oder Index eines Dropdowns als Zahl zurueckgeben
function read_state(form, name) {
	switch(form.elements[name].type) {
	case "checkbox":
		if (form.elements[name].checked) return "1"
		else return "0"
	case "select-one":
		return form.elements[name].selectedIndex
	default:
		return 0
	}
}

// Katalogsatz markieren
function check_set(form, name, array) {

	var state = form.elements[name].checked
	for (var i = 0; i < array.length; i++)
		check_cat(form, array[i], state)
	set_focus(form)
}

// Katalog markieren
function check_cat(form, name, state) {
	for (var i = 0; i < form.kataloge.length; i++)
		if (form.kataloge[i].value == name){
			form.kataloge[i].checked = state;
		}
}

// Name des Einstellungs-Cookies
// Dateiname aus der URL der Suchmaske ohne Erweiterung + "-prefs"
function cookie_name() {
	var s = "kvk-unknown";
	if (((location.pathname.search("/([^/]+)\\.[^/]*$") != -1) && (RegExp.$1 != "index")) || (location.pathname.search("/([^/]+)/[^/]*$") != -1)) {
		s = RegExp.$1;
	}       
	return s + "-prefs";

	// Alter Code von Oliver Kern war:
	var name = location.pathname.substring(location.pathname.lastIndexOf("/") + 1)
	return name.substring(0, name.lastIndexOf(".")) + "-prefs"
}

// Suchfelder loeschen
function clear_fields(form) {
	for (var i = 0; i < fields.length; i++)
		form.elements[fields[i]].value = ""
	set_focus(form)
}

// Fuer Sitzungskonzept: generiert Zufalls-Zeichenkette und schreibt
// versteckten Parameter
function generate_session() {
	// G%($F$!!! IE 5.0 generiert zwar jedesmal eine neue Sitzungsnummer,
	// sendet aber beim zweiten Abschicken trotzdem denselben versteckten
	// Parameter wie beim erstenmal -> Workaround
	if(document.all) session="X7YZ1GHU"
	else {
		session = ""
		var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
		var chars = str.split("")
		for (var i = 0; i < 8; i++)
			session += chars[Math.round(Math.random() * 35)]
	}
	document.write("<input type=\"hidden\" name=\"" + sessiontestname + "\" value=\"" + session + "\">")
}

// Setzt Sitzungs-Test-Cookie. Muss "onSubmit" aufgerufen werden,
// damit auch mehrere Suchmasken parallel benutzt werden koennen
function set_session() {
	document.cookie = sessiontestname + "=" + session + "; domain=ubka.uni-karlsruhe.de; path=/"
}

// Suchfelder der Maske automatisch mit den entsprechenden Daten aus einem
// eventuell vorhandenen Querystring ausfuellen
function auto_fill_form(form) {
	var query = location.search
	if(query.indexOf("?") == 0) query = query.substring(1)
	if(!query.length) return 0
	var pairs = query.split("&")
	for(var i = 0; i < pairs.length; i++) {
		var pair = pairs[i].split("=")
		var key = unescape(pair[0])
		var val = unescape(pair[1])
		for(var j = 0; j < fields.length; j++) {
			if(key == fields[j]) {
				form.elements[key].value = val
				break
			}
		}
	}
	return 1
}

// Alle Kataloge auswählen
function check_all(form_el) {
        for (var i=0; i<form_el.kataloge.length; i++)
        {
                form_el.kataloge[i].checked = true
        }
}

// Keinen Katalog auswählen
function uncheck_all(form_el) {
        for (var i=0; i<form_el.kataloge.length; i++)
        {
                form_el.kataloge[i].checked = false;

        }
        form_el.ALLPUBLIC.checked = false;
	form_el.NORTHERNUTAH.checked = false;
	form_el.SALTLAKECOUNTY.checked = false;
        form_el.UTAHCOUNTY.checked = false;
}

///Clear All Fields and Checkboxes
function clear_all(form_el) {
        for (var i=0; i<form_el.kataloge.length; i++)
        {
                form_el.kataloge[i].checked = false;
        }
	form_el.NORTHERNUTAH.checked = false;
	form_el.SALTLAKECOUNTY.checked = false;
        form_el.UTAHCOUNTY.checked = false;
        form_el.TI.value = "";
        form_el.ST.value = "";
        form_el.AU.value = "";
}


// ISBN beim Abschicken der Suchanfrage auf Gueltigkeit ueberpruefen.
// Soll dem Benutzer Tippfehler ersparen, aber trotzdem nicht die Freiheit
// nehmen, nach ungueltigen ISBNs suchen zu lassen.
function checkISBN(isbn) {
    var ungueltig = 0;

    if (isbn.length > 0) {
        var isbn_temp = isbn.replace(/\s/g, "").replace(/-/, "").replace(/-/, "").replace(/-/, "");

        if (isbn_temp.length != 10 || isbn_temp.search(/[^\dxX]/) != -1 || isbn_temp.search(/x./i) != -1) {
            ungueltig = 1;
        } else {
            for (var i = 0; i < 10; i++) {
                ungueltig += (10 - i) * isbn_temp.charAt(i).replace(/x/i, "10");
            }
            ungueltig %= 11;
        }
    }
    return !ungueltig || confirm("Die angegebene ISBN (" + isbn + ") ist ungueltig. Wollen Sie trotzdem fortfahren?");
}


