Proszę o ocenę kalkulatora w JS

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<meta http-equiv="content-type" content="text/html; charset=UTF-8" /> form
{
width: 227px;
height: 321px;
border: 1px solid #000;
text-align: center;
}
input[type=text]
{
margin-top: 10px;
padding-top: 20px;
width: 189px;
height: 29px;
text-align: right;
}
input[type=button]
{
width: 56px;
height: 40px;
text-align: center;
}
<script type="text/javascript" src="kalkulator.js"></script>
<form action="" method="post"> <input id="phrase" type="text" disabled="disabled" value="" />
<input type="button" onclick="delString(); return false;" name="delStringA" value="<-" /> <input type="button" onclick="reset(); return false;" name="resetAll" value="C" /> <input type="button" onclick="result(); return false;" name="mathResult" value="=" />
<input type="button" name="action" value="7" /> <input type="button" name="action" value="8" /> <input type="button" name="action" value="9" />
<input type="button" name="action" value="4" /> <input type="button" name="action" value="5" /> <input type="button" name="action" value="6" />
<input type="button" name="action" value="1" /> <input type="button" name="action" value="2" /> <input type="button" name="action" value="3" />
<input type="button" name="action" value="0" /> <input type="button" name="action" value="+" /> <input type="button" name="action" value="-" />
<input type="button" name="action" value="/" /> <input type="button" name="action" value="*" /> <input type="button" name="action" value="." />
//definujemy tablice znaków
var keys = new Array();
keys[96] = 0;
keys[97] = 1;
keys[98] = 2;
keys[99] = 3;
keys[100] = 4;
keys[101] = 5;
keys[102] = 6;
keys[103] = 7;
keys[104] = 8;
keys[105] = 9;
keys[106] = '*';
keys[107] = '+';
keys[109] = '-';
keys[110] = '.';
keys[111] = '/';
document.onkeydown = checkKeycode;
window.onload = function()
{
inputs = document.getElementsByTagName('input');
for(i=0; i<inputs.length; i++)
{
if(inputs[i].getAttribute("name") != null && inputs[i].getAttribute("name") == "action")
{
inputs[i].onclick = function ()
{
addAction(this.value);
}
}
}
}
function $(id)
{
return document.getElementById(id);
}
function inArray(needle, haystack)
{
var length = haystack.length;
for(var i = 0; i < length; i++)
{
if(haystack[i] == needle)
return true;
}
return false;
}
function checkKeycode(e)
{
var keycode;
if (window.event)
keycode = window.event.keyCode;
else if (e)
keycode = e.which;
if(keycode == 8) //jeżeli kasujemy ostatni znak Backspace
delString();
else if(keycode == 13) //jeżeli klikamy enter w celu sprawdzeniu wyniku
result();
else if((keycode >= 96) && (keycode <= 114))
{
if(typeof keys[keycode] != "undefined")
addAction(keys[keycode]);
}
}
//wykonywanie działań
function result()
{
$ob = $('phrase');
if($ob.value.length > 0)
{
$result = eval($ob.value);
if(Math.abs($result) == Infinity)
$result = "Nie można dzielić przez 0";
$ob.value = $result;
}
else
alert('Podaj jakieś dane!');
}
//funkcja dopisująca do pola działanie
function addAction(ob)
{
if($('phrase').value.match(/przez.*?/) != null)
$('phrase').value = '';
$how = $('phrase').value.length;
if($how > 0)
{
$last = $('phrase').value.substr($how-1,$how); //sprawdzamy ostatnio wprowadzony znak
/*
sprawdzamy, czy nowy znak do prowadzenia nie jest identyczny do przedostatniego
nie możemy dodać np ** ale możemy dodać np 55 więc należy też sprawdzić czy nowy obiekt jest liczbą, a nie znakiem
*/
if((ob == $last) && isNaN(ob))
ob = '';
}
$('phrase').value += ob;
}
//funkcja usuwająca ostatni znak
function delString()
{
$how = $('phrase').value.length;
if($how > 0)
$('phrase').value = $('phrase').value.substr(0,$how-1);
}
//funkcja resetująca pole z wynikiem
function reset()
{
$('phrase').value = '';
}