﻿var vkb_csShiftKeyValue = "Shift";
var vkb_csBackspaceKeyValue = "\u2190";
var vkb_csClearKeyValue = "Clear";
var vkb_csCapsLockKeyValue = "Caps Lock";

var vkb_aControlKeys = new Array(
  vkb_csShiftKeyValue,
  vkb_csBackspaceKeyValue,
  vkb_csClearKeyValue,
  vkb_csCapsLockKeyValue
);

var vkb_aAttributes = new Array();

function vkb_getKeyboardAttributes(oKb) {

for (var i = 0; i < vkb_aAttributes.length; i++) {
    var oAttributes = vkb_aAttributes[i];
    if (oAttributes.obj == oKb) {
      return oAttributes;
    }
  }
  
  vkb_aAttributes[vkb_aAttributes.length] = {
    obj: oKb, 
    control: null, 
    isShifted: false, 
    isShiftPressed: false, 
    isCapsLockPressed: false
  };
    
  return vkb_aAttributes[vkb_aAttributes.length-1];
  
}

function vkb_isControlKey(sKey) {

  for(var i=0; i < vkb_aControlKeys.length; ++i) {
    if(vkb_aControlKeys[i].toLowerCase() == sKey.toLowerCase()) {
      return true;
    }
  } 
  return false;
}

function vkb_processNonControlKeys(oKb, fProcessor) {
  var aInput = oKb.getElementsByTagName("input");
  for (var i = 0; i < aInput.length; i++) {
    var oInput = aInput[i];
    if (!vkb_isControlKey(oInput.value)) {
      fProcessor(oInput);
    }
  }
}

function vkb_processNonControlKeysById(sKbId, fProcessor) {
  var oKbDiv = document.getElementById(sKbId);
  vkb_processNonControlKeys(oKbDiv, fProcessor);
}

function vkb_allToUpperCaseById(sKbId) {
  vkb_processNonControlKeysById(sKbId, function(oInput) {oInput.value = oInput.value.toUpperCase();});
}

function vkb_allToLowerCaseById(sKbId) {
  vkb_processNonControlKeysById(sKbId, function(oInput) {oInput.value = oInput.value.toLowerCase();});
}

function vkb_allToUpperCase(oKb) {
  vkb_processNonControlKeys(oKb, function(oInput) {oInput.value = oInput.value.toUpperCase();});
}

function vkb_allToLowerCase(oKb) {
  vkb_processNonControlKeys(oKb, function(oInput) {oInput.value = oInput.value.toLowerCase();});
}

function vkb_getSenderKeyboard(oSender) {
  return oSender.parentNode.parentNode;
}

function vkb_setKeyboardShifted(oKeyboard, bIsShifted) {
  var oKbAttributes = vkb_getKeyboardAttributes(oKeyboard);
  if (bIsShifted) {
    vkb_allToUpperCase(oKeyboard);
    oKbAttributes.isShifted = true;
  }
  else {
    vkb_allToLowerCase(oKeyboard);
    oKbAttributes.isShifted = false;
  };
}

function vkb_keyPressed(oSender) {
  
  var oKeyboard = vkb_getSenderKeyboard(oSender);
  var oKbAttributes = vkb_getKeyboardAttributes(oKeyboard);

  var oTextInput = oKbAttributes.control;
  
  if (!vkb_isControlKey(oSender.value)) {
    oTextInput.value += oSender.value;
    if (oKbAttributes.isShiftPressed) {
      oKbAttributes.isShiftPressed = false;
      vkb_setKeyboardShifted(oKeyboard, !oKbAttributes.isShifted);
    }
  }
  else {
    
    if (oSender.value == vkb_csCapsLockKeyValue) {
      oKbAttributes.isShiftPressed = false;
      oKbAttributes.isCapsLockPressed = !oKbAttributes.isCapsLockPressed;
      vkb_setKeyboardShifted(oKeyboard, oKbAttributes.isCapsLockPressed);
      oSender.style.color = (oKbAttributes.isCapsLockPressed ? "red" : "black");
    }
    else if (oSender.value == vkb_csShiftKeyValue){
      vkb_setKeyboardShifted(oKeyboard, !oKbAttributes.isShifted);
      oKbAttributes.isShiftPressed = !oKbAttributes.isShiftPressed;
      
    }
    else if (oSender.value == vkb_csBackspaceKeyValue) {
      if (oTextInput.value.length > 0) {
        oTextInput.value = oTextInput.value.substr(0, oTextInput.value.length - 1);
      };
    }
    else if (oSender.value == vkb_csClearKeyValue) {
      oTextInput.value = "";
    }
  }
  
  oTextInput.focus();
}


function vkb_assosiateKeyboard(sKeyboardId, sControlId) {
  var oKeyboard = document.getElementById(sKeyboardId);
  var oInput = document.getElementById(sControlId);
  var oKeyboardAttributes = vkb_getKeyboardAttributes(oKeyboard);
  oKeyboardAttributes.control = oInput;
}

/*

// The style example for virtual keyboard

<style>
.virtual-keyboard {
  width: 357px;
	padding: 4px 4px 4px 4px;
}
.virtual-keyboard input {
  width: 25px;
  height: 25px;
  font-size: 11px;
}

.virtual-keyboard .numbers-line {
  padding-left: 32px;
}

.virtual-keyboard .q-line {
  padding-left: 47px;
}

.virtual-keyboard .space-line {
  padding-left: 100px;
}
</style>

*/

function vkb_createKeyboard(sKeyboardHolderEpement, sInputToFillId) {
  var oInputToFill = document.getElementById(sInputToFillId);
  var oKeyboardHolderEpement = document.getElementById(sKeyboardHolderEpement);
	
  var oKeyboard = document.createElement("div");
  oKeyboard.className = "virtual-keyboard";
  oKeyboardHolderEpement.appendChild(oKeyboard);
  
  var oKeyboardAttributes = vkb_getKeyboardAttributes(oKeyboard);
  
  oKeyboardAttributes.control = oInputToFill;
  oKeyboardAttributes.isShifted = false;
  oKeyboardAttributes.isShiftPressed = false;
  oKeyboardAttributes.isCapsLockPressed = false;
  
//	window.alert("Hello");
	
  oKeyboard.innerHTML =  
  '  <!-- <div id="keyboard1" class="virtual-keyboard" > --> ' +
  '    <div class="numbers-line">' +
  '      <input type="button" tabindex="1000" value="1"   onclick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" value="2" onClick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" value="3" onClick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" value="4" onClick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" value="5" onClick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" value="6" onClick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" value="7" onClick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" value="8" onClick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" value="9" onClick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" value="0" onClick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" value="-" onClick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" style="width: 50px; font-size: 12px" value="&#8592;" onClick="vkb_keyPressed(this); return false;"/></div>' +
  '    <div class="q-line">' +
  '      <input type="button" tabindex="1000" value="q" onClick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" value="w" onClick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" value="e" onClick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" value="r" onClick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" value="t" onClick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" value="y" onClick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" value="u" onClick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" value="i" onClick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" value="o" onClick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" value="p" onClick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" value="_"  onclick="vkb_keyPressed(this); return false;"/></div>' +
  '    <div class="a-line">' +
  '      <input type="button" tabindex="1000" style="width: 60px; font-size: 9px" value="Caps Lock" onClick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" value="a" onClick="vkb_keyPressed(this); return false;" ' +
  '      /><input type="button" tabindex="1000" value="s" onClick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" value="d" onClick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" value="f" onClick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" value="g" onClick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" value="h" onClick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" value="j" onClick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" value="k" onClick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" value="l" onClick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" value="|" onClick="vkb_keyPressed(this); return false;"/></div>' +
  '    <div class="z-line">' +
  '      <input type="button" tabindex="1000" style="width: 78px; font-size: 9px" value="Shift" onClick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" value="z" onClick="vkb_keyPressed(this); return false;"' +
  '     /><input type="button" tabindex="1000" value="x" onClick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" value="c" onClick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" value="v" onClick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" value="b" onClick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" value="n" onClick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" value="m" onClick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" value="," onClick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" value="." onClick="vkb_keyPressed(this); return false;"' +
  '      /><input type="button" tabindex="1000" value="?" onClick="vkb_keyPressed(this); return false;"/></div>' +
  '    <div class="space-line">' +
  '      <input type="button" tabindex="1000" style="width: 175px;" value=" " onClick="vkb_keyPressed(this); return false;" ' +
  '      /><img style="width:22px; height:1px; margin: 0 0 0 0;"' +
  '      /><input id="clear" tabindex="1000" type="button" style="width: 60px; font-size: 9px" value="Clear" onClick="vkb_keyPressed(this); return false;"/></div>' +
  '  <!-- </div> -->';
  
  
}																						 
