﻿/**
<!
(c) 2003-2004 Chhahari.com
Original Author: Rajesh B. Shrestha, 2003
Version: 1.5

10 March 2005 Richard Wordingham: Merged isConsonant & display_consonants_comb_helpbar
13 March 2005 Richard Wordingham: Only generate one actual argument for display_enter() in
                                                                  drawKeyboardLayout.
14 March 2005 Richard Wordingham: Correct other call of display_enter()!  Single code for Netscape & IE,
                                                                  and used for all browsers.  Renamed char chars to avoid clash with
                                                                  reserved word.

Feel free to copy, modify and distribute as long as this header is kept intact.
-->
*/

var stdrow0 = new Array (96, 33, 64, 35, 36, 37, 94, 38, 42, 40, 41, 95, 43);
var stdrow1 = new Array (96, 49, 50, 51, 52, 53, 54, 55, 56, 57, 48, 45, 61);
var stdrow2 = new Array (113, 119, 101, 114, 116, 121, 117, 105, 111, 112, 91, 93, 92);
var stdrow3 = new Array (97, 115, 100, 102, 103, 104, 106, 107, 108, 59, 39);
var stdrow4 = new Array (122, 120, 99, 118, 98, 110, 109, 44, 46, 47);
var stdrow5 = new Array (130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142);

var numrow3 = new Array (49, 50, 51);
var numrow2 = new Array (52, 53, 54);
var numrow1 = new Array (55, 56, 57);
var numrow0 = new Array (45, 48, 46);

var shiftrow0 = new Array (130, 39, 139, 140, 160, 141, 161, 142, 162, 132, 152, 131, 43);
var shiftrow1 = new Array (126, 33, 64, 35, 36, 37, 94, 38, 42, 40, 41, 95, 43);
var shiftrow2 = new Array (81, 87, 69, 82, 84, 89, 85, 73, 79, 80, 123, 125, 124);
var shiftrow3 = new Array (65, 83, 68, 70, 71, 72, 74, 75, 76, 58, 34);
var shiftrow4 = new Array (90, 88, 67, 86, 66, 78, 77, 60, 62, 63);
var shiftrow5 = new Array (150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162);

function kbd_char (val, desc, rclass) {

	this.val = val;
	this.desc = desc;
	this.rclass= rclass;
}

function handleKeyDown() {

//                  document.getElementsByName('F1')[0].focus();
//                  var el = document.getElementById('F1');
	F1.focus();
	var kbd = keyboard.value;
//                  if (el.focus) el.focus();

	if (window.event.keyCode == 8) { 		// check for backspace character
          		clearHelpBars();
		backspacePnemonic();
	}

   	if (keyboard_modifier.value == "shift")
		return;

	if (window.event.shiftKey) {
		toggle_shift_kbd(kbd);
		keyboard_modifier.value = "shift";
		return;
	}

	keyboard_modifier.value = "";
}

function handleKeyUp() {

	var kbd = keyboard.value;

   	if (keyboard_modifier.value == "shift") {
		toggle_shift_kbd(kbd);
		keyboard_modifier.value = "";
		return;
	}

	clearKey();
}

function clearKey() {

	if (key_pressed.value == "") return;

	var btn = eval (key_pressed.value);
	if (btn.style != undefined) onMouseOutBtn(btn);
	key_pressed.value = "";
}

function clearField (target) {

	if (target.document.body.innerHTML=='')
		return;
	
	if (!confirm ("साच्‍चै पुरा मेट्‍ने हो?"))
		return;

	target.document.body.innerHTML='';
          	clearHelpBars();
	target.focus();
}

/**
 * Displays character on the target invoked when the user types a character
 * on the keyboard.
 **/
function displayKey (target) {
//	alert ("Key pressed is " + window.event.keyCode);
	var code;
        	var kbd;

	var keycode = window.event.keyCode;

	if (window.event.keyCode == 13) {  		// check for newline character
          		clearHelpBars();
		code = " <br/>";
		addWordToDB(lastword, lastwordchar);

	} else if (window.event.keyCode == 32) { 		// check for space character
	          	clearHelpBars();
		code = " &nbsp;";
		addWordToDB(lastword, lastwordchar);

	} else {
		kbd = keyboard.value;
		code = eval (kbd + '[' + window.event.keyCode + ']');
		code = code.val;

		// for pnemonic
		setPnemonic (code);

		clearKey();
		key_pressed.value = kbd + window.event.keyCode;
		var btn = eval (kbd + window.event.keyCode);
		if (btn.style != undefined) onMouseOverBtn(btn);

	}

	if (code == undefined) code = "&#" + window.event.keyCode + ";";

//	therange=target.document.body.createTextRange();
	selectionRange = target.document.selection.createRange();
//	if (therange.inRange(selectionRange))
		selectionRange.pasteHTML(code);
//	else
//	   	target.document.body.innerHTML += code;

          	clearHelpBars();

        display_consonants_comb_helpbar (code, selectionRange);

	bold.focus();
}

/**
 * Adds the given character in the target. 
 * Uses global variables selectionRange and F1 for now. @@@@
 **/
function addChar (chars) {
	lastword += chars;
        	selectionRange.pasteHTML(chars);
       	// target.pasteHTML(chars);
         	clearHelpBars();
         	clearPnemonicBar();
       	F1.focus();
}

/**
 * Invoked when the user clicks on the "Backspace" button on the virtual keyboard on screen.
 **/
function backspace(target) {

   	curvalue = target.document.body.innerHTML;
   	curlength = curvalue.length
   	curvalue = curvalue.substring(0,curlength-1)
  	 target.document.body.innerHTML = curvalue;
          	clearHelpBars();
	backspacePnemonic();
   	target.focus();
}

/**
 * Displays character on the target invoked when the user mouse-clicks a character
 * on-screen.
 **/
function display_char (ch, target) {

   	target.focus();
	var html = ch.value;

	// for pnemonic
	setPnemonic (html);

	therange=target.document.body.createTextRange()
	selectionRange = target.document.selection.createRange()
	if (therange.inRange(selectionRange))
		selectionRange.pasteHTML(html);
	else
   		target.document.body.innerHTML += html;
   	ch.blur();

          	clearHelpBars();

        display_consonants_comb_helpbar (ch.value, selectionRange);

   	target.focus();
}

/**
 * Displays a newline on the target when invoked by the mouse click on Enter button.
 **/
function display_enter (target) {
 	target.document.body.innerHTML += "<br/>";
 	target.focus();
          	clearHelpBars();
}

function display_tab (ch, target) {
   return;
}

function display_alt (ch, target) {
   return;
}

function display_ctrl (ch, target) {
   return;
}

function display_fn (ch, target) {
   return;
}

/**
 * Displays a space character on the target when activated by the mouse click
 * on the spacebar button.
 **/
function display_space (target) {
	addWordToDB(lastword, lastwordchar);
   	target.focus();
	selectionRange = target.document.selection.createRange()
	selectionRange.pasteHTML("&nbsp;");
          	clearHelpBars();
}

function toggle_shift_kbd (keyboard) {

   if (keyboard_mode.value == "shift") {
	keyboard_mode.value = "";
   	hideDiv (keyboard + "_shiftrow");
   	showDiv(keyboard + "_stdrow");
   } else {
	keyboard_mode.value = "shift";
   	hideDiv (keyboard + "_stdrow");
   	showDiv(keyboard + "_shiftrow");
   }

}

// var IE = (navigator.appName == "Microsoft Internet Explorer") ? 1 : 0;
// var NS = (navigator.appName == "Netscape") ? 1 : 0;

function showDiv(div){
//	if(IE)	eval('document.all.'+div+'.style.visibility="visible"');
//	if (NS) {
        	var targetLayer = document.getElementById(div);
        	targetLayer.style.visibility = "visible";
//	}
}

function hideDiv(div){

//	if(IE) eval('document.all.'+div+'.style.visibility="hidden"');
//	if (NS) {
        	var targetLayer = document.getElementById(div);
        	targetLayer.style.visibility = "hidden";
//	}
}

function check_browser() {

	var bname = navigator.appName;
	var bversion = navigator.appVersion;

	if (bname.indexOf("Netscape") != -1) {
		browser_alert();
	}

	if (bname.indexOf("Microsoft") != -1) {

		if (bversion.indexOf("3.") > -1) {
			browser_alert();
		}
	}
}

function browser_alert() {

	alert ("Please note that this is not a supported platform! Supported browser platform is Microsoft Internet Explorer 5.0 or higher on Windows XP. You may proceed but functionality is not guaranteed." );

}

function onMouseOverBtn (btn) {

	if (btn.style == undefined) return;
	
	btn.style.backgroundColor = 'lightyellow';
	btn.style.color = 'black';
}

function onMouseOutBtn (btn) {
	
	if (btn.style == undefined) return;

	btn.style.backgroundColor = '';
	btn.style.color = '';
}

function HighlightField(theField) {
	theField.focus()
	therange=theField.document.body.createTextRange()
	therange.execCommand("Copy")
	window.status="Contents highlighted and copied to clipboard!"
	setTimeout("window.status=''",1800)
	therange.select();
}

function drawXKeyboardLayout(kbd, layout) {

	var lrow;

	document.write ('<div id="' + kbd + '_' + layout + '">');
	document.write ('<table border="0" cellspacing="0" cellpadding="0">');
	document.write ('<tr>');
	document.write ('<td>');
	document.write ('<table border="0" cellspacing="0" cellpadding="1">');

	// top row
	document.write ('<tr>');
	document.write ('<td>');
	lrow = eval (layout + "1");
	draw_row (kbd, lrow);
	document.write ('<input type="button" class="backspace" value="Back" onclick="backspace(F1); this.blur()"/>');
	document.write ('</td>');
	document.write ('</tr>');

	document.write ('<tr>');
	document.write ('<td>');
	document.write ('<input type="button" class="tab" value="TAB" onclick="display_tab(this, F1)"/>\n');
	lrow = eval (layout + "2");
	draw_row (kbd, lrow);
	document.write ('</td>');
	document.write ('</tr>');

	document.write ('<tr>');
	document.write ('<td>');
	if (layout == "stdrow") 
		document.write ('<input type="button" class="caps" value="CAPS" onclick="toggle_shift_kbd(keyboard.value)"/>\n');
	else 
		document.write ('<input type="button" class="caps_shift" value="CAPS" onclick="toggle_shift_kbd(keyboard.value)"/>\n');
	lrow = eval (layout + "3");
	draw_row (kbd, lrow);
	document.write('<input type="button" id="enterKey" class="enter" value="Enter" onclick="display_enter(F1)"/>');
	document.write ('</td>');
	document.write ('</tr>');

	document.write ('<tr>');
	document.write ('<td>');
	if (layout == "stdrow") 
		document.write ('<input type="button" class="shift" value="Shift" onmousedown="toggle_shift_kbd(&quot;' + kbd + '&quot;)"/>\n');
	else
		document.write ('<input type="button" class="shiftmode" value="Shift" onmouseup="toggle_shift_kbd(&quot;' + kbd + '&quot;)"/>\n');
	lrow = eval (layout + "4");
	draw_row (kbd, lrow);
	if (layout == "stdrow") 
		document.write ('<input type="button" class="shift" value="Shift" onmousedown="toggle_shift_kbd(&quot;' + kbd + '&quot;)"/>\n');
	else
		document.write ('<input type="button" class="shiftmode" value="Shift" onmouseup="toggle_shift_kbd(&quot;' + kbd + '&quot;)"/>\n');
	document.write ('</td>');
	document.write ('</tr>');

	document.write ('<tr>');
	document.write ('<td>');
	document.write ('<input type="button" class="fn" value="Fn" onclick="display_alt(this, F1)"/>\n');
	lrow = eval (layout + "5");
	draw_row (kbd, lrow);
	document.write ('<input type="button" class="fn" value="Fn" onclick="display_fn(this, F1)"/>\n');
	document.write ('</td>');
	document.write ('</tr>');

	document.write ('<tr>');
	document.write ('<td>');
	document.write ('<input type="button" class="ctrl" value="Ctrl" onclick="display_ctrl(this, F1)"/>\n');
	document.write ('<input type="button" class="alt" value="Alt" onclick="display_alt(this, F1)"/>\n');
	document.write ('<input type="button" class="space" value="(c) 2003-2004 Chhahari.com" onclick="display_space(F1); this.blur()"/>\n');
	document.write ('<input type="button" class="alt" value="Alt" onclick="display_alt(this, F1)"/>\n');
	document.write ('<input type="button" class="ctrl" value="Ctrl" onclick="display_ctrl(this, F1)"/>\n');
	document.write ('</td>');
	document.write ('</tr>');

	document.write ('</table>');
	document.write ('</td>');

	document.write ('<td width="25"/>');
	document.write ('<td>');
	drawNumLayout (kbd);
	document.write ('</td>');

	document.write ('</tr>');
	document.write ('</table>');	
	document.write ('</div>');
}

function drawKeyboardLayout(kbd, layout) {

	var lrow;

	document.write ('<div id="' + kbd + '_' + layout + '">');
	document.write ('<table border="0" cellspacing="0" cellpadding="0">');
	document.write ('<tr>');
	document.write ('<td>');
	document.write ('<table border="0" cellspacing="0" cellpadding="1">');

	// top row
	document.write ('<tr>');
	document.write ('<td>');
	lrow = eval (layout + "1");
	draw_row (kbd, lrow);
	document.write ('<input type="button" class="backspace" value="Back" onclick="backspace(F1); this.blur()"/>');
	document.write ('</td>');
	document.write ('</tr>');

	document.write ('<tr>');
	document.write ('<td>');
	document.write ('<input type="button" class="tab" value="TAB" onclick="display_tab(this, F1)"/>\n');
	lrow = eval (layout + "2");
	draw_row (kbd, lrow);
	document.write ('</td>');
	document.write ('</tr>');

	document.write ('<tr>');
	document.write ('<td>');
	if (layout == "stdrow") 
		document.write ('<input type="button" class="caps" value="CAPS" onclick="toggle_shift_kbd(keyboard.value)"/>\n');
	else 
		document.write ('<input type="button" class="caps_shift" value="CAPS" onclick="toggle_shift_kbd(keyboard.value)"/>\n');
	lrow = eval (layout + "3");
	draw_row (kbd, lrow);
	document.write('<input type="button" class="enter" value="Enter" onclick="display_enter( F1)"/>');
	document.write ('</td>');
	document.write ('</tr>');

	document.write ('<tr>');
	document.write ('<td>');
	if (layout == "stdrow") 
		document.write ('<input type="button" class="shift" value="Shift" onmousedown="toggle_shift_kbd(&quot;' + kbd + '&quot;)"/>\n');
	else
		document.write ('<input type="button" class="shiftmode" value="Shift" onmouseup="toggle_shift_kbd(&quot;' + kbd + '&quot;)"/>\n');

	lrow = eval (layout + "4");
	draw_row (kbd, lrow);
	if (layout == "stdrow") 
		document.write ('<input type="button" class="shift" value="Shift" onmousedown="toggle_shift_kbd(&quot;' + kbd + '&quot;)"/>\n');
	else
		document.write ('<input type="button" class="shiftmode" value="Shift" onmouseup="toggle_shift_kbd(&quot;' + kbd + '&quot;)"/>\n');
	document.write ('</td>');
	document.write ('</tr>');

	document.write ('<tr>');
	document.write ('<td>');
	document.write ('<input type="button" class="ctrl" value="Ctrl" onclick="display_ctrl(this, F1)"/>\n');
	document.write ('<input type="button" class="alt" value="Alt" onclick="display_alt(this, F1)"/>\n');
	document.write ('<input type="button" class="space" value="(c) 2003-2004 Chhahari.com" onclick="display_space(this, F1); this.blur()"/>\n');
	document.write ('<input type="button" class="alt" value="Alt" onclick="display_alt(this, F1)"/>\n');
	document.write ('<input type="button" class="ctrl" value="Ctrl" onclick="display_ctrl(this, F1)"/>\n');
	document.write ('</td>');
	document.write ('</tr>');

	document.write ('</table>');
	document.write ('</td>');

	document.write ('<td width="25"/>');
	document.write ('<td>');
	drawNumLayout (kbd);
	document.write ('</td>');

	document.write ('</tr>');
	document.write ('</table>');	
	document.write ('</div>');
}

function draw_row (kbd, lrow) {

	var i;

	for (i=0; i < lrow.length; i++) {
		var obj = eval (kbd + "[" + lrow[i] + "]");
		if (obj == undefined) obj = "";

		var ch = obj.val;
		if (ch == undefined) ch = " ";
		var rclass = obj.rclass;

		if (rclass == undefined || rclass == "") 
			rclass = "char";
		if (rclass == "char" && i > 4) 
			rclass = "char2";
			
		var desc = obj.desc;

		document.write('<input type="button" id="' + kbd+lrow[i] + '" class="' + rclass + '" value="' + ch + '" onclick="display_char(this, F1)" onmouseover="onMouseOverBtn(this)" onmouseout="onMouseOutBtn(this)" title="' + desc + '" />\n');

	}
}

function drawNumLayout (kbd) {

	document.write ('<table border="0" cellspacing="1" cellpadding="1">');
	document.write ('<tr>');
	document.write ('<td>');
	document.write ('<input type="button" value="@" class="key" onclick="display_char(this, F1)" />\n');
	document.write ('<input type="button" value="/" class="key" onclick="display_char(this, F1)" />\n');
	document.write ('<input type="button" value="*" class="key" onclick="display_char(this, F1)" />\n');
	document.write ('</td>');
	document.write ('<td>');
	document.write ('<input type="button" value="-" class="key" onclick="display_char(this, F1)" />');
	document.write ('</td>');
	document.write ('</tr>');

	document.write ('<tr>');
	document.write ('<td>');
	lrow = eval ("numrow1");
	draw_row (kbd, lrow);
	document.write ('</td>');
	document.write ('<td rowspan="2"><input type="button" class="vnum" value="+" onclick="display_char(this, F1)" /></td>');
	document.write ('</tr>');

	document.write ('<tr>');
	document.write ('<td>');
	lrow = eval ("numrow2");
	draw_row (kbd, lrow);
	document.write ('</td>');
	document.write ('</tr>');

	document.write ('<tr>');
	document.write ('<td>');
	lrow = eval ("numrow3");
	draw_row (kbd, lrow);
	document.write ('</td>');
	document.write ('<td rowspan="2">');
	document.write ('<input type="button" class="vnum" value="Ent" onclick="display_enter( F1)" />');
	document.write ('</td>');
	document.write ('</tr>');

	document.write ('<tr>');
	document.write ('<td colspan="2">');
	var obj = eval (kbd + "[48]");
	if (obj == undefined) obj = "";
	var ch = obj.val;
	document.write ('<input type="button" class="hnum" id="' + kbd + '48" value="' + ch + '" onclick="display_char(this, F1)" />\n');
	document.write ('<input type="button" value="." class="key" onclick="display_char(this, F1)" />\n');
	document.write ('</td>');
	document.write ('</tr>');

	document.write ('</table>');
}