JS-based virtual keyboard