//========================================================================
// diva_generic.js
//
// UPD: Uwe Dierolf, 04.12.2003
//
// Vorlage: kvk_generic.js bzw. kvk-last.js 
// pref_buttons(), init_form(index), cookie_name(), auto_fill_form(form)   
//
//
// neu oder in Anlehnung an Fkt. aus kvk_generic.js bzw. kvk-last.js 
//
// checke_toggleAll(formObject), uncheck_group(formObject), set_focus(form),
// save_prefs(form), load_prefs(form)
//========================================================================

//--------------------------------------------------------------------
// Überprüft, ob wenigstens ein Element (ausgenommen das Element mit dem Wert
// "alle"), das den selben Namen wie formObject besitzt aktiviert bzw. markiert
// ist. Ist dies der Fall, wird die zugehörige Checkbox mit dem Wert "alle"
// deaktivert, andernfalls aktiviert. Bei den Elementen kann es sich um Checkboxen 
// oder Selektionsfelder handeln.  
//--------------------------------------------------------------------
function check_toggleAll(formObject){
    var atLeastOneElementTrue = false
    var form = formObject.form
    var indexOfAll = -1

    if (formObject.type == "checkbox"){
        for(var i = 0; i < form.elements.length; i++) {
            if ((form.elements[i].type == "checkbox") &&
                (form.elements[i].name == formObject.name)){
                if (form.elements[i].value == "alle"){
                     indexOfAll = i
                }
                else if (form.elements[i].checked){
                    atLeastOneElementTrue = true
                    break
                }
            }
        }
    }
    else if (formObject.type == "select-one"){
        if (formObject.selectedIndex > -1){
            atLeastOneElementTrue = true
        }
    }
    else if (formObject.type == "select-multiple"){
        for(var j = 0; j < formObject.length; j++){
            if (formObject.options[j].selected){
                atLeastOneElementTrue = true
                break
            }
        }
    }
        
    // "all" checkbox aktualisieren und Index suchen falls noch nicht ermittelt
    if (indexOfAll > -1){
        form.elements[indexOfAll].checked = !atLeastOneElementTrue
    }
    else{
        for (var k = 0; k < form.elements.length; k++){
            if ((form.elements[k].type == "checkbox") &&
                (form.elements[k].name == formObject.name) &&
                (form.elements[k].value == "alle")){
                form.elements[k].checked = !atLeastOneElementTrue
            }
        }
    }
}
                    
                       
//--------------------------------------------------------------------
// Wenn es sich bei formObject um eine checkbox mit dem Wert "alle" handelt und
// diese checkbox aktiviert ist, dann werden alle Elemente, die den gleichen Namen
// wie formObject besitzen deaktiviert. 
//--------------------------------------------------------------------
function uncheck_group(formObject){
    var form = formObject.form

    if ((formObject.type == "checkbox") && (formObject.value == "alle") &&
        (formObject.checked)){
        for(var i = 0; i < form.elements.length; i++) {
            if ((form.elements[i].name == formObject.name)&&
                (form.elements[i].value != "alle")){
                if (form.elements[i].type == "checkbox"){
                    form.elements[i].checked = false
                }
                else if (form.elements[i].type == "select-multiple"){
                    for(var j = 0; j < form.elements[i].length; j++){
                        form.elements[i].options[j].selected = false
                    }
                }
            }
        }
    }
}

//--------------------------------------------------------------------
// Einstellungs-Knoepfe in die Suchmaske schreiben
//--------------------------------------------------------------------
function pref_buttons() {
	document.write("<font size=\"2\" face=\"arial,helvetica\">")
	document.write("<a href=\"http://www.ubka.uni-karlsruhe.de/hylib/kvk_help.html\#einstellungen\"></a>")
	document.write("<input type=\"button\" class=\"buttoncl\"  value=\"Sichern\" onClick=\"save_prefs(this.form)\" title=\"Aktuelle Einstellungen sichern\">&nbsp;")
	document.write("<input type=\"button\" class=\"buttoncl\" value=\"Laden\" onClick=\"load_prefs(this.form)\" title=\"Gesicherte Einstellungen laden\"></font>")
}

// Initialisierung "onLoad". Aufruf mit der Indexnummer des Suchformulars
function init_form(index) {
	var form = document.forms[index]
	load_prefs(form)
	auto_fill_form(form)
	set_focus(form)
}

//--------------------------------------------------------------------
// Focus setzen
//--------------------------------------------------------------------
function set_focus(form) {
	form.elements["freitext"].focus()
}

//--------------------------------------------------------------------
// Status aller Checkboxen und Selektionsfelder von form in einem
// Cookie sichern. Der Status von Checkboxen und Selektionsfeldern mit
// Mehrfachauswahl wird als 0 oder 1 abgelegt. Bei Selektionsfeldern mit
// Einfachauswahl wird der ausgewählte Index abgelegt.  
//--------------------------------------------------------------------
function save_prefs(form) {
	var expires = new Date()
	// Ein Jahr
	expires.setTime(expires.getTime() + 31536000000)
	var cookie = cookie_name() + "="
	for (var i = 0; i < form.elements.length; i++) {
            if ((form.elements[i].type == "checkbox")||(form.elements[i].type == "radio")){
                if (form.elements[i].checked) cookie += "1"
                else cookie += "0"
            }
            else if (form.elements[i].type == "select-one"){
                cookie += form.elements[i].selectedIndex 
            }
            else if (form.elements[i].type == "select-multiple"){
                for (var k = 0; k < form.elements[i].length; k++)
                    if (form.elements[i].options[k].selected) cookie += "1"
                    else cookie += "0"
            }
        }
	cookie += "; expires=" + expires.toGMTString()
	document.cookie = cookie
	set_focus(form)
}

//--------------------------------------------------------------------
// Status aller Checkboxen und Selektionsfelder von form aus einem Cookie
// einlesen. Die Interpretation des Cookie Strings erfolgt analog zur
// Speicherung -> save_prefs(form) 
//--------------------------------------------------------------------
function load_prefs(form) {
	var exp = new RegExp(cookie_name() + "=([^;, ]+)")
	if (exp.test(document.cookie)) var prefs = RegExp.$1
	else return

	// 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 = prefs.split("")

        // Status von Selektionsfeldern und Checkboxen entsprechend des Cookies
        // setzen
        var n = 0
	for (var j = 0; j < form.elements.length; j++){
            if ((form.elements[j].type=="checkbox")||(form.elements[j].type=="radio"))
                form.elements[j].checked = (bits[n++] == "1")
            else if (form.elements[j].type == "select-one")
                form.elements[j].selectedIndex = bits[n++] 
            else if (form.elements[j].type == "select-multiple"){
                for (var k = 0; k < form.elements[j].length; k++){
                    form.elements[j].options[k].selected = (bits[n++] == "1")
                }
            }
        }

	set_focus(form)
}

//--------------------------------------------------------------------
// Name des Einstellungs-Cookies
//--------------------------------------------------------------------
function cookie_name() {
	return 'diva_navigator-prefs'
}

//--------------------------------------------------------------------
// 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
}

