var barcodeBuf = ""
var barcodeShown = false

function showBarcode(text) {
    if (!barcodeShown) {
        document.getElementById('barcode').classList.add('shown')
        barcodeShown = true
    }
    document.getElementById('barcodeContent').textContent = text
}

function hideBarcode() {
    if (barcodeShown) {
        document.getElementById('barcode').classList.remove('shown')
        barcodeShown = false
    }
    return ""
}

function barcodeKeyPress( event ) { // takes input from either keyboard or barcode scanner
    var key = String.fromCharCode( event.charCode )
    var input = document.getElementById( 'crement' )
    var inputcount = document.querySelectorAll( '[type="text"]' ).length + document.querySelectorAll( '[type="number"]' ).length 
    if ( input && inputcount == 1 ) { // focus in 'crement' when no other input fields only
        input.focus()
    }
    var focused = document.activeElement
    if ( !focused || focused == document.body ) {
        focused = null
    } else if ( document.querySelector ) {
        focused = document.querySelector( ":focus" )
    }
    if (
        !event.ctrlKey && !event.altKey // no hotkeys used
        && ( focused == null || focused.tagName != "INPUT" ) // focus not in input fielf for manual input
    ) {
        if ( event.keyCode === 13 ) { // carriage return
            var input = document.getElementById( 'barcodeInput' )
            if ( input && barcodeBuf.length > 0 ) {
                input.setAttribute( 'value', barcodeBuf )
                input.parentNode.submit()
                return
            }
            barcodeBuf = ""
            event.preventDefault()
        } else if ( event.keyCode === 27 ) { // escape
            console.log( "escape" )
            barcodeBuf=hideBarcode()
            event.preventDefault()
        } else if ( event.keyCode === 8 ) { // backspace
            console.log( "backspace" )
            barcodeBuf = barcodeBuf.substring( 0, barcodeBuf.length - 1  )
            showBarcode( barcodeBuf )
            if ( barcodeBuf.length <= 0 ) {
                barcodeBuf = hideBarcode()
            }
            event.preventDefault()
        } else if ( event.keyCode == 0 ) { // e.g. F-Keys are 112 to 123, A-Za-z0-9 all are 0.
            console.log( "some input: " + barcodeBuf + "[" + key + "] <= {" + event.keyCode + "}" )
            barcodeBuf += key
            showBarcode( barcodeBuf )
            event.preventDefault()
        }
    }
}
