/*

PHP EMAIL CATCHER

- search functionality
- save/ restore view settings

*/

// ----------------------------------------------------------------------
// cnstants
// ----------------------------------------------------------------------
const tableId = 'messagestable';
const searchId = 'search';

const lsVar_prefix = "emailcatcher_";
const lsVar_search = lsVar_prefix + "_search";
const lsVar_header = lsVar_prefix + "_showHeader";
const lsVar_source = lsVar_prefix + "_showSource";

var bViewHeader = lsGet(lsVar_header, 1);
var bViewSource = lsGet(lsVar_source, 0);


// ----------------------------------------------------------------------
// functions
// ----------------------------------------------------------------------

/**
 * Helper load a variable from local storage
 * @param {string} key           key to read from localstorage
 * @param {*}      defaultvalue  default value if "null" or "NaN" was returned
 * @returns 
 */
function lsGet(key, defaultvalue) {
    var val = localStorage.getItem(key);
    if (val == "null" || val == "NaN") {
        return defaultvalue;
    }
    return val;
}

// ----------------------------------------------------------------------

/**
 * read search field and hide non matching rows
 * @returns void
 */
function filterTable() {
    var sFilter = document.getElementById(searchId).value;
    localStorage.setItem(lsVar_search, sFilter);
    var table = document.getElementById(tableId);
    if (!table) {
        return false;
    }
    var rows = table.rows;
    for (var i = 1; i < rows.length; i++) {
        if (rows[i].innerText.toLowerCase().indexOf(sFilter.toLowerCase()) == -1) {
            rows[i].style.display = 'none';
        }
        else {
            rows[i].style.display = 'table-row';
        }
    }
}

// ----------------------------------------------------------------------

/**
 * Show / hide message header
 * @global integer  bViewHeader   flag: view header - 1=yes; 0=no
 */
function viewHideHeader() {
    if (!document.getElementById('msg-header')) {
        return false;
    }
    document.getElementById('msg-header').style.display = bViewHeader ? 'block' : 'none';
    document.getElementById('btn-header').className = bViewHeader ? 'button active' : 'button';
    return true;
}

/**
 * toggle message headers; it inverst bViewHeader and calls viewHideHeader function
 * @global integer  bViewHeader   flag: view header - 1=yes; 0=no
 * @returns true
 */
function toggleViewHeader() {
    bViewHeader = Math.abs(bViewHeader - 1);
    localStorage.setItem(lsVar_header, bViewHeader);
    viewHideHeader();
    return true;
}

/**
 * Show message source or html
 * @global integer  bViewSource   flag: view html or source - 1=show source; 0=show html
 */
function viewSource(bSource) {
    if (!document.getElementById('msg-html')) {
        return false;
    }
    document.getElementById('msg-html').style.display = bSource ? 'none' : 'block';
    document.getElementById('msg-source').style.display = bSource ? 'block' : 'none';

    document.getElementById('btn-html').className = bSource ? 'button' : 'button active';
    document.getElementById('btn-source').className = bSource ? 'button active' : 'button';

    if (bSource != bViewSource) {
        bViewSource = bSource;
        localStorage.setItem(lsVar_source, bSource);
    }
    return true;
}

// ----------------------------------------------------------------------
// main
// ----------------------------------------------------------------------

// --- search field and filter table
document.getElementById(searchId).value = '' + lsGet(lsVar_search, '');

document.getElementById(searchId).addEventListener('keyup', filterTable);
document.getElementById(searchId).addEventListener('keypress', filterTable);
filterTable();

// --- view settings
var bViewHeader = Math.round(lsGet(lsVar_header, 1));
var bViewSource = Math.round(lsGet(lsVar_source, 0));

if (bViewHeader !== 0 && bViewHeader !== 1) {
    bViewHeader = 1;
}

viewHideHeader();
viewSource(bViewSource);

// ----------------------------------------------------------------------