implemented virtual keyboard