Por usar el mismo nombre para el textbox y para el parámetro de la función no significa que por arte de mágia se vaya a pasar un valor automáticamente al llamar a la función, ya que no le estás pasando ningún valor.
Ya te han resuelto la duda y te han epxlicado la razón, pero bueno, de todas formas te muestro este ejemplo para que trates de indentar el código (por el amor de dios), y de paso evaluar si el texto es numérico (Integer) para habilitar el botón:
- <html> 
-     <head> 
-   
-         <script type='text/javascript'> 
-   
-             function IsEven(value) { 
-                 if (value%2==0) { 
-                     alert("El numero introducido es par"); 
-   
-                 } else { 
-                     alert("El numero introducido es impar"); 
-                 } 
-             } 
-   
-             function IsInteger(str) { 
-                 bt_calculate.disabled = !(/^[0-9]{1,10}$/.test(str) && str <= Number.MAX_SAFE_INTEGER); 
-             } 
-   
-         </script> 
-   
-     </head> 
-   
-     <body> 
-         NUMBER:  
-         <input type="text"  
-                name="tb_number"  
-                id ="tb_number" 
-                onkeyup="IsInteger(tb_number.value)"> 
-   
-         <input type="button"  
-                name="bt_calculate"  
-                id ="bt_calculate"  
-                value="CALCULAR"  
-                disabled="disabled"  
-                onclick="IsEven(tb_number.value)"> 
-     </body> 
-   
- </html> 
(etiqueta js para que la sintaxis se resalte mejor)
Saludos!