// kuller.js - hacks to fill and motivate kuller's controls
//  see notes in kuller.html and kuller.pl

var kLock = 0;          // toggles on/off, as the user clicks on the palette 'kpalet'
var kPick = 'backg';    // starting point, should agree with the 'checked' value of 'picfg'
var kFont = 'Times';    // starting point, a value of the 'kfont' select-list
var kSize = '24';
var kText = 'Now sleeps the crimson petal, now the white;<p>#0 oO &nbsp; #1 iI lL';
var kFrame = 'silver';
var kBackg = 'white';
var kForeg = 'black';
var kPopup = '';
var kulr16 = 0;

var kWin;
var kDemo;

// all of these global vars are only default values; the .html or .pl can override them;

function kinit () {
    if (kPopup > '') {
        kWin = window.open(kPopup,'KullerDemo'
            ,'width=880,height=440,top=0,left=110,dependent,alwaysRaised=0');
        setTimeout("kini()",500);
    } else {
        var t = document.createElement("table");
        document.body.appendChild(t);
        t.width = '100%'; 
        t.cellPadding = '40px';
        t.border = 1;
        t.id = 'colrdemo';
        var r = t.insertRow(t.rows.length); r.align = 'center';
        var d = r.insertCell(r.cells.length); d.id = 'colrbrdr';
        t = document.createElement("table");
        d.appendChild(t);
        t.cellPadding = '40px';
        t.border = 1;
        r = t.insertRow(t.rows.length); r.align = 'left';
        d = r.insertCell(r.cells.length); d.id = 'colrshow';
        kWin = window;
        kini();
    }
}

function kini () {
    var f;
    f = document.getElementById('ktext');
    f.value = kText;
    f = document.getElementById('kfsiz');
    f.value = kSize;
    f = document.getElementById('frame');
    f.value = kFrame;
    f = document.getElementById('backg');
    f.value = kBackg;
    f = document.getElementById('foreg');
    f.value = kForeg;
    picfg();
    kpalet();
    kfnts();
    kLock = !kLock;
    frzclr();
}

function ktach () {
    var demo = kWin.document.getElementById('colrdemo');
    if (demo == null) { status = 'I-E cannot attach/detach.'; return; }
    kDemo = demo.cloneNode(1);
    if (kWin == window) {
        kWin = window.open('','KullerDemo'
            ,'width=880,height=440,top=0,left=110,dependent,alwaysRaised=0');
        setTimeout("kdtach()",500);
        document.body.removeChild(demo);
    } else {
        document.body.appendChild(kDemo);
        kWin.close();
        kWin = window;
    }
}

function kdtach () {
    var doc = kWin.document;
    doc.body.appendChild(kDemo);
}

function kexit () {
    if (kWin != window) { kWin.close(); }
}

function picfg () {
    var c = '';
    var s = '<input type=radio name=picfg value=frame'
    if (kPick == 'frame') { s += ' checked=checked '; c = kFrame; }
    s    += ' onclick="frmpic(' +"'"+ 'frame' +"'"+ ');" >Frame<br>';
    s    += '<input type=radio name=picfg value=backg'
    if (kPick == 'backg') { s += ' checked=checked '; c = kBackg; }
    s    += ' onclick="frmpic(' +"'"+ 'backg' +"'"+ ');" >Picture<br>';
    s    += '<input type=radio name=picfg value=foreg'
    if (kPick == 'foreg') { s += ' checked=checked '; c = kForeg; }
    s    += ' onclick="frmpic(' +"'"+ 'foreg' +"'"+ ');" >Text<br>';
    var f = document.getElementById('picfg');
    f.innerHTML = s;
    if (c.substring(0,1) == '#') {
        var r = c.substring(1,3);
        var g = c.substring(3,5);
        var b = c.substring(5);
        f = document.getElementById('bcolrr'); f.value = r;
        f = document.getElementById('bcolrg'); f.value = g;
        f = document.getElementById('bcolrb'); f.value = b;
    }
}

//  the default font is whatever is in kFont; there is no such thing as a web-safe font list,
//  although some fonts are safer than others; kuller's list is just a bunch of
//  popular fonts, with the ones most common (according to a couple of helpful sites)
//  in the 'ok' list, some that are fairly widespread in the 'iffy' list,
//  and some really cool ones that you really don't want to rely on in the 'dont' list;
//  we do our best to guide our user:
function kfnts () {
    var ok = new Array (
            'Times',
            'Times New Roman',
            'Courier',
            'Courier New',
            'Arial',
            'Arial Black',
            'Verdana',
            'Tahoma',
            'Trebuchet MS',
            'Helvetica',
            'Arial Narrow',
            'Georgia',
            'Century',
            'Century Gothic',
            'Comic Sans MS',
            'Impact'
        );
    var iffy = new Array (
            'Lucida Console',
            'Lucida Sans Unicode',
            'Bookman Oldstyle',
            'Book Antiqua',
            'Geneva',
            'Monaco',
            'Skia',
            'Garamond',
            'Palatino'
        );
    var dont = new Array (
            'Bitstream Vera Sans',
            'Bitstream Vera Sans Mono',
            'Bitstream Vera Serif',
            'Utopia',
            'New Century Schoolbook',
            'Fixed',
            'Fixedsys',
            'Everson mono terminal',
            'Nimbus Mono',
            'Century Schoolbook L',
            'URW Grotesk T',
            'WingDings',
            'Symbol',
            'Klingon',
            'Zapf Dingbats',
            'Ventilate'
        );
    var s = '<select name=kfont id=kfont onkeyup="showtst();" onclick="showtst();">';
    var i = 0;
    for (i = 0; i < ok.length; i++) {
        s += '<option style="background-color:#00cc00;" ';  // make 'em green
        if (ok[i] == kFont) { s += ' selected=selected '; } //  the color only shows in the list, not in the select box, on f-f;
        s += 'value="' + ok[i] + '">' + ok[i] + '(ok)';     //  so we put a little tag on the text;
    }
    var i = 0;
    for (i = 0; i < iffy.length; i++) {
        s += '<option style="background-color:#cccc00;" ';  // yellow for caution
        if (iffy[i] == kFont) { s += ' selected=selected '; }
        s += 'value="' + iffy[i] + '">' + iffy[i] + '(??)';
    }
    var i = 0;
    for (i = 0; i < dont.length; i++) {
        s += '<option style="background-color:#cc0000;" ';  // red, don't use this!
        if (dont[i] == kFont) { s += ' selected=selected '; }
        s += 'value="' + dont[i] + '">' + dont[i] + '(!!)';
    }
    s += '</select>';
    var f = document.getElementById('kfnts');
    f.innerHTML = s;
}

function kpalet () {
    var clr6 = new Array (
                '00','33','66','99','cc','ff'
                );
    var clr16 = new Array (
                '00','11','22','33','44','55','66','77','88','99','aa','bb','cc','dd','ee','ff'
                );
    var clr = clr6;
    var fnt = '10pt';
    if (kulr16) { clr = clr16; fnt = '3pt'; }
    var r = 0;
    var g = 0;
    var b = 0;
    var s = '';
    for (g = 0; g < clr.length; g++) {
        for (r = 0; r < clr.length; r++) {
            for (b = 0; b < clr.length; b++) {
                s += '<a style="font-size:'+fnt+';font-stretch:narrower;background-color:#';
                s += clr[r] + clr[g] + clr[b] + ';color:#';
                s += clr[r] + clr[g] + clr[b] + ';" ';
                s += ' onmouseover="showclr(';
                s += "'"+ clr[r] + "'"+ ',' + "'"+ clr[g] + "'"+ ',' + "'"+ clr[b]+"'";
                s += ');">|</a>';
            };
        };
        s += '<br>';
    };
    var f = document.getElementById('kpalet');
    f.innerHTML = s;
};

function kWebSafe() { kulr16 = !kulr16; kpalet(); }

function incfnt (evt) {
    switch (evt.keyCode) {
        case 38: sizfnt('u'); return(false); break;
        case 40: sizfnt('d'); return(false); break;
        default: break;
    }
    return(true);
};

function sizfnt (updn) {
    var f = document.getElementById('kfsiz');
    var s = f.value;
    var n = parseInt(s,10);
    if (updn == 'u') { n++; if (n > 99) { n = 99; } }
    if (updn == 'd') { n--; if (n < 0)   { n = 0; } }
    if (n < 10) {
        f.value = '0' + n.toString(10);
    } else {
        f.value = n.toString(10);
    }
    showtst();
}

function inckey (clr,evt) {
    switch (evt.keyCode) {
        case 38: incclr(clr,'u'); return(false); break;
        case 40: incclr(clr,'d'); return(false); break;
        default: break;
    }
    return(true);
};

function incclr (clr,updn) {
    var fld = 'bcolr' + clr;
    var f;
    f = document.getElementById(fld);
    var c = f.value;
    var n = parseInt(c,16);
    if (updn == 'u') { n++; if (n > 255) { n = 255; } }
    if (updn == 'd') { n--; if (n < 0)   { n = 0;   } }
    if (n < 16) {
        f.value = '0' + n.toString(16);
    } else {
        f.value = n.toString(16);
    }
    setclr();
}

function setclr () {
    var f = document.getElementById('bcolrr');
    var r = f.value;
    f = document.getElementById('bcolrg');
    var g = f.value;
    f = document.getElementById('bcolrb');
    var b = f.value;
    f = document.getElementById(kPick);
    f.value = '#' + r + g + b;
    showtst();
}

function showclr (rclr,gclr,bclr) {
    if (kLock) { return; }
    var f = document.getElementById('bcolrr');
    f.value = rclr;
    f = document.getElementById('bcolrg');
    f.value = gclr;
    f = document.getElementById('bcolrb');
    f.value = bclr;
    f = document.getElementById(kPick);
    f.value = '#' + rclr + gclr + bclr;
    showtst();
}

function frzclr () {
    var f = document.getElementById('sendb');
    f.focus();
    kLock = !kLock;
    f = document.getElementById('selct');
    if (kLock) {
        f.value = ' LOCKED.  ';
    } else {
        f.value = 'Selecting:';
    }
    showtst();
}

function frmpic (pft) {
    kPick = pft;
    var f = document.getElementById(pft);
    var c = f.value;
    var n = c.substring(0,1);
    if (n == '#') {;
        var r = c.substring(1,3);
        var g = c.substring(3,5);
        var b = c.substring(5);
        c = kLock;
        kLock = 0;
        showclr(r,g,b);
        kLock = c;
    }
}

function showtst () {
    var frame = document.getElementById('frame');
    var backg = document.getElementById('backg');
    var foreg = document.getElementById('foreg');
    var frameclr = frame.value;
    var foregclr = foreg.value;
    var backgclr = backg.value;
    var f = document.getElementById('kfont');
    kFont = f.value;
    f = document.getElementById('kfsiz');
    kSize = f.value;
    f = document.getElementById('ktext');
    kText = f.value;
    f = kWin.document.getElementById('colrbrdr');
    f.style.backgroundColor = frameclr;
    f = kWin.document.getElementById('colrshow');
    f.style.backgroundColor = backgclr;
    f.style.color = foregclr;
    f.style.fontFamily = kFont;
    f.style.fontSize = kSize + 'pt';
    if (kText != '') {
        f.innerHTML = kText;
    }
}

