﻿var currentFocus = null;
jQuery(':input').focus( function() {
    currentFocus = this;
}).blur( function() {
    currentFocus = null;
});

function check_keypress(e){

	if(calcFlag){
		return true;
	}
	if(currentFocus!=null) {return true;}
	if(navigator.appName == "Netscape"){
		var keycode = e.which;
	}else{
		var keycode = event.keyCode;
	}

    var zero_key = 48;
    var nine_key = 57;
    var decimal_key = 46;
    var C_key = 67;
    var E_key = 69;
    var M_key = 77;
    var P_key = 80;
    var plus_key = 43;
    var minus_key = 45;
    var multiply_key = 42;
    var divide_key = 47;
    var percent_key = 37;
    var cr_key = 13;
    var equals_key = 61;
    var power_key = 94;


    // CONVERT CHARACTER KEYS TO UPPER CASE
    if ( keycode >= 97 && keycode <= 122 )
        keycode -= 32;
    if ( keycode >= zero_key && keycode <= nine_key ){
            var Num = keycode - zero_key;
        NumPressed ( Num );
        return ( false );
    }
    else if ( keycode == decimal_key ){
        Decimal();
        return(false);
             }
             else if(keycode == equals_key || keycode == cr_key ){
                     Operation("=");
                     return(false);
          }
                  else if(keycode == plus_key){
            Operation("+");
            return(false);
            }
                        else if(keycode == minus_key){
                                Operation("-");
                                return(false);
                             }
                            else if(keycode == multiply_key){
                                    Operation ("*");
                                    return(false);
                                 }
                                else if(keycode == divide_key){
                                        Operation("/");
                                        return(false);
                                    }
                                    else if(keycode == percent_key){
                                            Operation('%');
                                            return(false);
                                         }
                                         else if(keycode == C_key || keycode == 27 ){
                                                Clear();
                                                return(false);
                                                }
                                               else if(keycode == E_key){
                                                        ClearEntry();
                                                        return(false);
                                                    }
                                                    else if(keycode == M_key || keycode == P_key){
                                                            Neg();
                                                            return(false);
                                                            }
                                                         else if(keycode == power_key){
                                                                Operation('^');
                                                                return(false);
                                                                }

                                                         else if(keycode == 0){
                                                             Clear();
                                                             return(false);
                                                         }

                                                                else{
                                                                        validateNumeric("Not A Number", keycode);
                                                                        return(false);
                                                                    }
        return(true);
    }


    var bName = navigator.appName.substring (0,3);

    document.onkeypress = check_keypress;
    if(bName == "Net")
        document.captureEvents(Event.KEYPRESS);

    // Module-level variables
    var Accum = 0;            // Previous number (operand) awaiting operation
    var FlagNewNum = false;        // Flag to indicate a new number (operand) is being entered
    var PendingOp = "";        // Pending operation waiting for completion of second operand

    function NumPressed(Num){
        var calculator = document.calculator;
        if(FlagNewNum){
            calculator.ReadOut.value  = Num;
            FlagNewNum = false;
        }
        else{
                    if(calculator.ReadOut.value == "0")
            calculator.ReadOut.value = Num;
                    else
            calculator.ReadOut.value += Num;
                    }
    }

    function Operation(Op){
        var calculator = document.calculator;

                if(FlagNewNum && PendingOp != "=");

        // User is hitting op keys repeatedly, so don't do anything
        else{
                    FlagNewNum = true;
                    if('+' == PendingOp)
                Accum += parseFloat(calculator.ReadOut.value);
                    else if('-' == PendingOp)
                Accum -= parseFloat(calculator.ReadOut.value);
                         else if('/' == PendingOp)
                                    Accum /= parseFloat(calculator.ReadOut.value);
                              else if('*' == PendingOp){
                                       Accum *= parseFloat(calculator.ReadOut.value);
                                     }
                               else if('^' == PendingOp)
                                            Accum = Math.pow(Accum, parseFloat(calculator.ReadOut.value));
                                         else if('%' == PendingOp){
                                            Accum = ( parseFloat(calculator.ReadOut.value)/100)*parseFloat(Accum);
                                            FlagNewNum = true;
                                         }
                                         else
                                                    Accum = parseFloat(calculator.ReadOut.value);

                        calculator.ReadOut.value = Accum;
            PendingOp = Op;
            }
          }

        function SqrT(){
             var calculator = document.calculator;
             Accum = Math.sqrt(parseFloat(calculator.ReadOut.value));
             calculator.ReadOut.value = Accum;
             FlagNewNum=true;
        }

        function Inverse(){
                var calculator = document.calculator;
                Accum = parseFloat(1/parseFloat(calculator.ReadOut.value));
                calculator.ReadOut.value = Accum;
                FlagNewNum=true;
        }

    function Decimal(){
        var calculator = document.calculator;
        if(FlagNewNum){
            calculator.ReadOut.value = "0.";
            FlagNewNum = false;
        }
        else{
                    if ( calculator.ReadOut.value.indexOf ( "." ) == -1 )
                calculator.ReadOut.value += ".";
        }
    }

    function ClearEntry(){
        var calculator = document.calculator;
        // Remove current number and reset state
        calculator.ReadOut.value = "0";
        FlagNewNum = true;
                validateNumeric(123);
                return false;
    }

    function Clear(){
        // Clear accumulator and pending operation, and clear display
        Accum = 0;
        PendingOp = "";
        ClearEntry();
    }

    function Neg(){
        var calculator = document.calculator;
        calculator.ReadOut.value = parseFloat ( calculator.ReadOut.value ) * -1;
    }

    function Percent(){
        var calculator = document.calculator;

        calculator.ReadOut.value = ( parseFloat(calculator.ReadOut.value)/100)*parseFloat(Accum);
                FlagNewNum = true;
    }

        function Power(){
            Result = Math.pow(Result, CurrentValue);
        }


/*** Numeric Validation ***/
function CalcKeyCode(aChar) {
      var character = aChar.substring(0,1);
      var code = aChar.charCodeAt(0);
      return code;
    }

function validateNumeric(textContent, key){
	if(navigator.appName == "Netscape"){
		var keycode = key;
	}else{
		var keycode = event.keyCode;
	}
	if(keycode==27){
		document.getElementById("errorMessage").innerHTML = '';
		return false;
	}
                    var ValidChars = "0123456789.+-";
            var IsNumber=true;
            var Char;
               for (i = 0; i < textContent.length && IsNumber == true; i++){
                  Char = textContent.charAt(i);
                  if (ValidChars.indexOf(Char) == -1){
                     IsNumber = false;
                   }
                }
            if(IsNumber == false){
                document.getElementById("errorMessage").innerHTML = '*الرجاء إدخال رقم صحيح';
                document.getElementById("ReadOut").value = "" ;
            }
            else {
                document.getElementById("errorMessage").innerHTML = '';
            }
               return IsNumber;
    }
/*** Numeric Validation ***/

