//----------------------------------------------------
// KVK-Erweiterung auf jquery-Basis
// Copyright by Uwe Dierolf, KIT-Bibliothek Karlsruhe
// März 2010
// HTML5 localStorage added on 28.04.2011
//----------------------------------------------------

kvk_cookie_alles    = 'kvk-cookie-alles';
kvk_cookie_kataloge = 'kvk-cookie-kataloge';
var localStorageDisabled = false;
var kvkGlobals = {};
kvkGlobals.allKvkPrefs = {};
kvkGlobals.debugging = true;


$(document).ready( kvk_init );

sessiontestname = "kvk-session"
cookie_domain = "ubka.uni-karlsruhe.de"

function kvk_init() {
    disableDebuggingForProduction();
    debug('kvk_init');
    init_localStorage();

    // in new KVK page pref_buttons are inserted via jQuery without document.write
    if (pref_buttons_ID_exists()) pref_buttons();

    loadForm()
    var form = document.forms[0]
    auto_fill_form(form)

    $('#auswahl_loeschen').click(uncheckAllCatalogs );
    $('#clearFields').click(clearFields );
    $('#KVK_FORM').submit(saveForm);
    $('#nurDigitaleMedien').click(showDigitaleMedien);
    showDigitaleMedien();

    $('.Katalogauswahl').bind('click', toggleCatalogCheckboxes );

    // Den Suchtext im Feld Freitextsuche selektieren, damit man ihn direkt Ã¼berschreiben kann
    $("#freitext").select();

    // jQuery UI
    $('#sortable').sortable({ stop: sortStop });
}       

function showDigitaleMedien() {
    if ($('#nurDigitaleMedien').attr('checked')) {
	$('.katalog_checkboxen :checkbox:not(.digitaleMedien)').attr('disabled', 'disabled');
    } else {
	$('.katalog_checkboxen :checkbox:not(.digitaleMedien)').attr('disabled', '');
    }
}

function sortStop(event, ui) {
    doStatistics('changePrefsOrder')
    savePrefsOrder()
}

function savePrefsOrder() {
    // alert('savePrefsOrder')
    var savedPrefs = $('.savedPref')
    var orderedPrefs = []
    for (var i=0; i<savedPrefs.length; i++) {
	var id = savedPrefs[i].id
	id = 'kvk-' + id
	orderedPrefs.push(id)
    }
    mySetCookie('kvk-prefsOrder', orderedPrefs.toString())
}

function getPrefsOrder() {
    // debug('getPrefsOrder')
    var orderedPrefs = myGetCookie('kvk-prefsOrder');
    if (!orderedPrefs || orderedPrefs == 'undefined') return Array()
    orderedPrefs = orderedPrefs.split(',')
    return orderedPrefs
}

// 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 + "\">")

    if (document.URL.indexOf(cookie_domain) < 0) {
	// alert("schreibe cookie via cookie_relay Skript")
	print_cookie_relay_image();
    }
}

// Gibt IMG-Tag auf das cookie_relay_script aus, um
// Sitzungs-Test-Cookie Domainuebergreifend zu setzen. "onSubmit"
// Aufruf scheint hier Probleme zu machen, Aufruf deshalb schon
// on_load via generate_session()
function print_cookie_relay_image() {
    document.write("<img src=\"" + cookie_relay_script + "?" + sessiontestname + "=" + session + "\">")
}


// 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, "");

	if (isbn_temp.length == 13 && isbn_temp.search(/^\d+$/) != -1) {
	    // EAN
	    for (var i = 0; i < 13; i++) {
		ungueltig += (1 + 2 * (i % 2)) * isbn_temp.charAt(i);
	    }
	    ungueltig %= 10;

	} else 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?");
}


// 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 loeschen
function clearFields() {
    $(":input[type=text]").attr("value",'');
    set_focus()
}                       

// Keinen Katalog auswÃ¤hlen
function uncheckAllCatalogs() {
    $(".katalog_checkboxen :input[type=checkbox]").attr('checked', false);

}

function uncheckNeuesFenster() {
    $("#neuesFensterCheckbox").attr('checked', false);
}

function uncheckNurDigitaleMedien() {
    $("#nurDigitaleMedien").attr('checked', false);
}

// Buttons für "Einstellung sicher/laden" in der übergebenen Sprache "lang" drucken
// http://icons.iconarchive.com/icons/dryicons/simplistica/48/add-icon.png
// http://icons.iconarchive.com/icons/dryicons/simplistica/48/delete-icon.png

function pref_buttons() {
    pref_buttons_writeHtml();
    loadAllPrefs()
    setPropertiesAndEventsForPrefs()
    deleteIconsSetzen();
    addIconSetzen();
}

function pref_buttons_ID_exists() {
    return $('#pref_buttons').length;
}

function pref_buttons_writeHtml() {
    var lang = $(':input[name=lang]').val();
    var einstellungen = getStringRess('myCatalogs',lang);
    // in div id="addPrefBtn" werden per showPref die gespeicherten Katalogauswahlen platziert
    if (pref_buttons_ID_exists()) {
	var html = '<td class="spalten_hylib"><p class="thema" id="jTipp1" jTip="/kvk/kvk/kvk_jquery_tooltips.html Tipp1"><b>' + einstellungen + '</b><span id="html5_watermark"></span><br>\n'
		 + "</p>\n"
		 + '<div id="sortable" class="savedPrefs ui-sortable">\n'
		 + "</div>\n"
		 + '<div id="addPrefBtn"><img class="savePref"> neu</div>\n'
		 + "</td>\n";
	$('#pref_buttons').html(html);
    } else {
	document.write('<tr><td class="spalten_hylib"><p class="thema" id="jTipp1" jTip="/kvk/kvk/kvk_jquery_tooltips.html Tipp1"><b>', einstellungen, '</b><span id="html5_watermark"></span><br>');
	document.write("</p>");
	document.write('<div id="sortable" class="savedPrefs ui-sortable">');
	document.write("</div>");
	document.write('<div id="addPrefBtn"><img class="savePref"> neu</div>');
	document.write("</td></tr>");
    }
    if (localStorageEnabled()) showLocalStorageWatermark();
}

function getJSONobject(stringOrObject) {
    if (typeof(stringOrObject) == 'string') {
	return $.evalJSON(stringOrObject);
    } else {
	return stringOrObject;
    }
}

function loadAllPrefs() {
    debug('loadAllPrefs');
    var orderedPrefs = getPrefsOrder();
    kvkGlobals.allKvkPrefs = myFilterCookie('^kvk-pref-|^kvkStorage-kvk-pref-');
    var numberOfPrefs = orderedPrefs.length;
    if (numberOfPrefs > 0) {
	doStatistics('loadAllPrefs ' + numberOfPrefs)
    }
    for (var i=0; i<numberOfPrefs; i++) {
	var property = orderedPrefs[i]
	if (localStorageEnabled()) {
	    property = 'kvkStorage-' + property;
	}
	var pref = getJSONobject(kvkGlobals.allKvkPrefs[property])
	if (pref == undefined) continue
	// String-Casting, da timestamp intern als number behandelt 
	// wird und darauf match nicht funktioniert
	var timestamp = String(pref.timestamp)
	var text = pref.text
	if (! timestamp.match(/recent/)) showPref(timestamp,text)
    }
    deleteUnusedPrefs();
}

// Damit unbenutzte Cookies und localStorage-Einträge gelöscht werden
function deleteUnusedPrefs() {
    debug('deleteUnusedPrefs');
    var orderedPrefsArray = getPrefsOrder();
    var usedPrefs = orderedPrefsArray.toString();
    // debug('usedPrefs = ' + usedPrefs);
    var allPrefs = kvkGlobals.allKvkPrefs;
    for (var pref in allPrefs) {
	if (pref.match('recent')) continue;
	var isInUsedPrefs = usedPrefs.match(pref);
	if (isInUsedPrefs) {
	    debug(pref + ' is in use');
	} else {
	    debug(pref + ' is in NOT use and will be deleted now');
	    myDeleteCookie(pref);
	    delete kvkGlobals.allKvkPrefs[pref];
	}
    }
}

function showPrefHelper(name,value) {
    value = getJSONobject(value)
    var text = value.text
    var timestamp = value.timestamp
    showPref(timestamp,text)
}

function saveForm() {
    savePref('recent','Letzte Auswahl')
    return true;
}

function loadForm() {
    var loadRecent = true
    loadPref(null,loadRecent)
}

function loadPref(event,loadDefault) {
    if (loadDefault == true) {
	var theID = 'pref-recent'
    } else {
	var theID = event.target.id;
    }
    var cookieName = 'kvk-' + theID
    // alert('loadPref theID=' + theID + ' cookieName=' + cookieName)
    uncheckAllCatalogs();
    uncheckNeuesFenster();
    uncheckNurDigitaleMedien();
    // formValues ist bei jquery.cookies.2.0.1.js ein String
    // formValues ist bei jquery.cookies.2.2.0.js ein Objekt
    var cookieValue = myGetCookie(cookieName);
    if (! cookieValue) return

    var cookieValue = getJSONobject(cookieValue)
    var formValues = getJSONobject(cookieValue.formValues)
    $('#KVK_FORM').values(formValues);
    showDigitaleMedien();
}

function setPropertiesAndEventsForPrefs() {
    $('.savedPref')
	.css({'padding': '2px 0'})
	.css({'cursor': 'pointer'})
	.attr('title','Katalogauswahl laden, Ändern der Reihenfolge geht mit Drag and Drop')
	.bind('click',loadPref)
	.bind('mouseover',hilitePref)
	.bind('mouseout',unhilitePref);
}

function hilitePref(event) {
    // event.stopPropagation();
    var theID = event.target.id;
    if (theID == null || theID == "") return
    // if ($.browser.msie) return
    $('#' + theID).css({'background':'#EEEEEE'})
}

function unhilitePref(event) {
    // event.stopPropagation();
    var theID = event.target.id;
    if (theID == null || theID == "") return
    // if ($.browser.msie) return
    $('#' + theID).css({'background':''})
}

// ToDo: Icon rechts ausrichten
function deleteIconsSetzen() {
    $('.deletePref') 
	.css({'vertical-align': 'middle'})
	.attr('title','Katalogauswahl löschen')
	.attr('width',18)
	.attr('src','http://www.ubka.uni-karlsruhe.de/kvk/kvk/icon-delete.gif')
	.bind('click',deletePref);
	// .attr('src','http://icons.iconarchive.com/icons/dryicons/simplistica/48/delete-icon.png')
}

function deletePref(event) {
    event.stopPropagation();
    var theID = event.target.id;
    var thePrefID = 'pref-'+theID.match(/([0-9]+)/)[0];
    var text = $('#' + thePrefID).text();

    if (text == "") return;  // seit jQuery 1.5 kommt die Abfrage mehrmals

    var ok = confirm('Soll die Katalogauswahl "' + text + '"gelöscht werden?')
    if (!ok) return 
    doStatistics('deletePref')
    // alert('deletePref theID=' + theID + 'thePrefID=' + thePrefID)
    deletePrefCookie(thePrefID)
    $('#' + thePrefID).remove()
    savePrefsOrder()
}

function deletePrefCookie(thePrefID) {
    var cookieName = 'kvk-' + thePrefID
    // alert('deletePrefCookie ' + cookieName)
    myDeleteCookie(cookieName)
}

function addIconSetzen() {
    $('.savePref')
	.css({'vertical-align': 'middle'})
	.css({'cursor': 'pointer'})
	.css({'padding': '4px 0'})
	.attr('title','Neue Katalogauswahl speichern')
	.attr('width',18)
	.attr('src','http://www.ubka.uni-karlsruhe.de/kvk/kvk/icon-add.gif')
	.bind('click',addPref)
	// .attr('src','http://icons.iconarchive.com/icons/dryicons/simplistica/48/add-icon.png')
    $('#addPrefBtn')
	.css({'cursor': 'pointer'})
	.bind('mouseover',hilitePref)
	.bind('mouseout',unhilitePref)
	.bind('click',addPref)
}

function addPref(event) {
    event.stopPropagation();
    var timestamp = event.timeStamp
    var text = prompt('Wie wollen Sie die zu sichernden Einstellungen bezeichnen?','Name der Katalogauswahl')
    if (text == null) return
    // alert('text=' + text)
    savePref(timestamp,text)

    // Falls nun die Summe aller Cookies zu groÃŸ ist, kann es zu einem
    // 400-er Error, Bad Request kommen - dann muss die Einstellung wieder gelÃ¶scht werden

    var actualCookieSize = document.cookie.length
    if (document.cookie.length > 5000) {
        alert('Sie kÃ¶nnen derzeit keine weiteren Einstellungen sichern, da sonst Ihr Cookie zu groÃŸ wird');
	deletePrefCookie('pref-' + timestamp)
        return false
    }
    doStatistics('addPref ' + text)
    showPref(timestamp,text)
    savePrefsOrder()
}

// http://www.howtocreate.co.uk/tutorials/javascript/objects
function prefObject() {
    this.text = ""
    this.timestamp = ""
    this.formValues = ""
    this.toString = function () {
	return this.timestamp + ' ' + this.text + ' ' + this.formValues
    }

}

function myFilterCookie(cookieNameRegExp) {
    var returnValue = {};
    if (localStorageEnabled()) {
	if( typeof cookieNameRegExp === 'string' ) {
	    cookieNameRegExp = new RegExp( cookieNameRegExp );
	}
	// alert('typeof localStorage = ' + typeof localStorage);
	// alert('localStorage == null ' + (localStorage == null));
	// alert('localStorage == undefined ' + (localStorage == 'undefined'));
	// alert('localStorage == empty object ' + (localStorage == {}));
	// alert('localStorage.length = ' + localStorage.length);
	// if (localStorage) {
	    // alert('localStorage is not empty');
	// } else {
	    // alert('localStorage is empty');
	// }
	if (localStorage.length == 0) return returnValue;

	for (key in localStorage) {
	    if( key.match( cookieNameRegExp ) ) {
		var val = localStorage.getItem(key);
		debug('myFilterCookie: localStorage["' + key + '"] = ' + val.substr(0,30) + '...');
		returnValue[key] = localStorage.getItem(key); 
	    }
	}
	return returnValue;
    } else {
	return $.cookies.filter(cookieNameRegExp);
    }
}

function myGetCookie(cookieName) {
    var value;
    if (localStorageEnabled()) {
	cookieName = 'kvkStorage-' + cookieName;
	value = localStorage.getItem(cookieName);
    } else {
	value = $.cookies.get(cookieName);
    }
    debug('myGetCookie ' + cookieName + ' = ' + value);
	return value;
}

function mySetCookie(cookieName, cookieValue) {
    if (localStorageEnabled()) {
	cookieName = 'kvkStorage-' + cookieName;
	localStorage.setItem(cookieName, cookieValue);
    } else {
	// var options = {expiresAt: new Date(2020, 0, 1) , path: location.pathname};
	var options = {expiresAt: new Date(2020, 0, 1)};
	$.cookies.set(cookieName, cookieValue, options);
    }
    debug('mySetCookie ' + cookieName + ' = ' + cookieValue);
}

function myDeleteCookie(cookieName) {
    if (localStorageEnabled()) {
	localStorage.removeItem('kvkStorage-' + cookieName);
    } else {
	$.cookies.del(cookieName);
    }
}

function savePref(timestamp,text) {
    // alert('savePref ' + timestamp + ' ' + text)
    var katalogSelector = '.katalog_checkboxen :input[type=checkbox]:checked';
    var timeoutAndNewWindowSelector = '.morePrefs , #nurDigitaleMedien';
    var selector = katalogSelector + ',' + timeoutAndNewWindowSelector;
    var formValues = $(selector).values();
    // in standard stehen die Default-Werte drin --> lÃ¶schen
    delete formValues['standard'];
    if (formValues == '' || formValues == null) return;

    var pref = new prefObject();
    pref.text = text;
    pref.timestamp = timestamp;
    pref.formValues = $.toJSON(formValues);
    var cookieName = 'kvk-pref-' + timestamp;
    var cookieValue =  $.toJSON(pref);
    mySetCookie(cookieName, cookieValue);
}

function showPref(timestamp,text) {
    // var html = '<div id="pref-@timestamp@" class="savedPref">@text@ <img id="delBtn-@timestamp@" class="deletePref"> </div>'
    var html = '<div id="pref-@timestamp@" class="savedPref"><img id="delBtn-@timestamp@" class="deletePref"> @text@</div>'
    html = html.replace(/@timestamp@/g,timestamp)
    html = html.replace('@text@',text)
    $('.savedPrefs').append(html)
    // $('#addPrefBtn').before(html)
    deleteIconsSetzen()
    setPropertiesAndEventsForPrefs()
}

// 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"
}

function set_focus() { $("#freitext").select(); }


function toggle_verbuende(event) {
    var isChecked = $("#Verbuende").attr('checked');
    $('.istVerbund').attr('checked',isChecked);
}
function toggle_buchhandel() {
    var isChecked = $("#Buchhandel").attr('checked');
    $('.istBuchhandel').attr('checked',isChecked);
}
function toggleCatalogCheckboxes(event) {
    var theID = event.target.id;
    var isChecked = $("#" + theID).attr('checked');
    $(".ist" + theID).attr('checked',isChecked);
}

//---------------------------------------------------------
// String-Ressourcen
//---------------------------------------------------------

function getStringRess(label,lang) {
    var strings = {
	'myCatalogs' : {
	    'de' : 'Meine Kataloge',
	    'en' : 'My catalogs'
	},
	'prefs' : {
	    'de' : 'Einstellungen',
	    'en' : 'Preferences',
	    'fr' : 'Options',
	    'it' : 'Impostazioni'
	},
	'text1' : {
	    'de' : 'Der erste Text',
	    'en' : 'The first Text'
	}
    }
    strings = getJSONobject(strings)
    var str = strings[label][lang]
    // nimm englisch als Default
    if (! str) str = strings[label]['en']
    return str
}

//---------------------------------------------------------
// Debugging
//---------------------------------------------------------

function debug(txt) {
    // ohne window.debugging wird eine JS Error geworfen, 
    // falls debugging nicht deklariert wurde
    if (window.debugging != true) return;
    if (typeof(console) != 'undefined') console.log(txt);
    // else alert(txt);
}

// Falls mal ein selector-Ausdruck falsch ist, kann man so wenigstens 
// per debug-Aufruf erkennen, dass das wrapped set leer ist

(function($){
  $.fn.debugWrappedSet = function(txt) {
    // debug('this.size = ' + this.size());
    if (this.size() == 0) { 
	debug('wrappedSet is empty ! info=' + txt);
    }
    return this;
  }
}) (jQuery);

function getTimestamp() {
    return new Date().getTime();
}


// Suchfelder der Maske automatisch mit den entsprechenden Daten aus einem
// eventuell vorhandenen Querystring ausfuellen

function auto_fill_form(form) {
    var autosubmit = 0
    var query = location.search
    if (query.indexOf("?") == 0) query = query.substring(1)
    if (!query.length) return 0
    var pairs = query.split("&")
    var catalogs=document.getElementsByName("kataloge");
    for(var i = 0; i < pairs.length; i++) {
	var pair = pairs[i].split("=");
	if (document.getElementsByName("input-charset").length
	    && document.getElementsByName("input-charset").item(0).value.indexOf("utf-8") >= 0) {
	    var key = decodeURIComponent(pair[0]);
	    var val = decodeURIComponent(pair[1]);
	} else {
	    var key = unescape(pair[0]);
	    var val = unescape(pair[1]);
	}

	if (key == "autosubmit") {
	    autosubmit = 1;
	} else if (key == "kataloge") {
	    for(var j=0; j<catalogs.length; j++) {
	       if( (catalogs[j].type=="checkbox")
	           && ((catalogs[j].value==val) || (val=="alle"))) {
	       
		    catalogs[j].checked=true;
		    if (!(val=="alle")) break;
	       }
	   }
	} else {
	    // Eingabefelder fÃ¼llen
	    $(':input[type=text]').each(function(index) {
		if (key == $(this).attr('name')) form.elements[key].value = val
	    });
	}
    }

    // autosubmit nur, wenn ein Katalog ausgewÃ¤hlt ist
    if (autosubmit)
      for(var j=0; j<catalogs.length; j++) {
        if (catalogs[j].checked==true) {
          form.submit();
          break;
        }
      }
    return 0
}

function doStatistics(logdataStr) {
    debug('doStatistics ' + logdataStr);
    if (logdataStr != "") {
        logdataStr = "kvk myCatalogs " + logdataStr;
	if (localStorageEnabled()) {
	    logdataStr = logdataStr + ' localStorageEnabled HTML5';
	}
	logdataStr = logdataStr + ' UA ' + navigator.userAgent;
        $.get('/hylib/statistics.php', {logdata: logdataStr });
    }
}

function debug(txt) {
    // ohne window.debugging wird eine JS Error geworfen, 
    // falls debugging nicht deklariert wurde
    if (kvkGlobals.debugging != true) return;
    if (typeof(console) != 'undefined') console.log(txt);
    // alert(txt);
}

function disableDebuggingForProduction() {
    // Sicherstellen, dass auf Produktion debugging immer false ist
    if ($('#debuggingIsTrue').length != 1) {
	kvkGlobals.debugging = false;
    }
}

// -------------------------------------------
// use locale storage if possible
// ToDo: First time save existing cookie values
// -------------------------------------------

function localStorageEnabled() {
    if  (isFirefox() && !isFirefox4orHigher()) return false;  // localstorage merkt sich nichts dauerhaft
    if (localStorageDisabled == true)  return false;
    return Modernizr.localstorage;
}

function showLocalStorageWatermark() {
    // $('#html5_watermark').text(' (html5)');
    $('#html5_watermark').html(' <img src="/javascript/img/html5_18x18.gif">');
}

function init_localStorage() {
    // showBrowserInfo();
    if (localStorageEnabled()) {
	debug('localStorage is enabled');
	showLocalStorageWatermark();
	saveCookies2localStorage();
    }
}

function noOfKvkStorageItems(prefs) {
    if (prefs == {}) return 0;
    var count = 0;
    for (var pref in prefs) count++;
    return count;
}

function showBrowserInfo() {
    debug(
	'appCodeName = ' + navigator.appCodeName + "\n" + 
	'appName = ' + navigator.appName + "\n" + 
	'appVersion = ' + navigator.appVersion + "\n" + 
	'cookieEnabled = ' + navigator.cookieEnabled + "\n" + 
	'language = ' + navigator.language + "\n" + 
	'systemLanguage = ' + navigator.systemLanguage + "\n" + 
	'userAgent = ' + navigator.userAgent + "\n" + 
	'userLanguage = ' + navigator.userLanguage + "\n" + 
	'appCodeName = ' + navigator.appCodeName
    );
}

function isFirefox() {
    var ua = navigator.userAgent;
    var result = false;
    if (ua) {
	result = (ua.match('Firefox/|SeaMonkey/') != null);
    }
    return result;
}

function isFirefox4orHigher() {
    var ua = navigator.userAgent;
    var result = false;
    if (ua) {
	result = (ua.match('Firefox/[4-9]+') != null);
    }
    return result;
}

function saveCookies2localStorage() {
    debug('saveCookies2localStorage started');
    if (! localStorageEnabled()) return 0; // no browser support for localStorage
    if (localStorage.getItem('kvkStorageActived') !== null) return 0; // cookies already saved
    // var allPrefsInLocalStorage = myFilterCookie('^kvkStorage-kvk-pref-');
    // if (noOfKvkStorageItems(allPrefsInLocalStorage) > 0) return 0;

    debug('saveCookies2localStorage ... in progress');
    // disable localStorage for myXxxCookie-Functions to get cookies values
    localStorageDisabled = true;
    var orderedPrefs = myGetCookie('kvk-prefsOrder');
    debug('kvkStorage-kvk-prefsOrder = ' ,orderedPrefs);
    localStorage.setItem('kvkStorage-kvk-prefsOrder',orderedPrefs);

    var count = 0;
    var allPrefsInCookies = myFilterCookie('^kvk-pref-');
    for (var pref in allPrefsInCookies) {
        var key = 'kvkStorage-' + pref;
	var val = $.toJSON(allPrefsInCookies[pref]);
	debug(key + ' = ' + val);
        localStorage.setItem(key, val);
	count++;
    }
    localStorageDisabled = false;
    debug('saveCookies2localStorage saved ' + count + ' cookies');

    localStorage.setItem('kvkStorageActived',getTimestamp());
    doStatistics('saveCookies2localStorage saved ' + count + ' cookies');
    // alert('Ihre KVK-Einstellungen werden nun nicht mehr in Cookies sondern nach HTML5-Standard im sogenannten "localStorage" gespeichert und bleiben so auch nach einem Neustart Ihres Browsers erhalten!');
    // in new KVK page pref_buttons are inserted via jQuery without document.write
    // so I do not have to reload the whole page
    if (pref_buttons_ID_exists()) {
	pref_buttons();
    } else {
	window.location.reload();
    }
    return count;
}

