I have this Brainfuck interpreter:

<!-- begin snippet: js hide: false -->

<!-- language: lang-js -->

    // Credit goes to where it is due
    function throwException(cause, index) {
        // Execute when there is an error in Brainf*** code
        $('p#output').text("Interpreting Terminated because " + cause + " at char index " + index);
    }

    function runBrainfuck(data) {
        console.time("Running Brainf*** code");
        var memory = new Array(); // memory

        // Initialize memory
        console.time("Initialize memory");
        for(var i = 0; i < 30000; i++) {
            memory[i] = 0;
        }
        console.timeEnd("Initialize memory");

        var p = 0; // pointer to memory
        $('p#output').text("");

        // Loop through the Brainf*** code
        var data = $('#code').val();

        for(var j = 0; j < data.length; j++) {
            switch(true) {
                case data[j] === ">": // go right one cell
                   if(p < 30000) {
                       p++;
                   } else {
                       throwException("There are only 30000 usable cells of memory.", j); // are you using too many cells?
                   }
                   break;
                case data[j] === "<": // go left one cell
                   if(p > 0) {
                       p--;
                   } else {
                       throwException("Cannot decrement pointer when it is at first cell.", j); // are you going below cell 0?
                   }
                   break;
                case data[j] === "+": // Increment cell value
                   memory[p]++;
                   if(memory[p] > 255) {
                       memory[p] = 0; // Whoops, overflown the memory!
                   }
                   break;
                case data[j] === "-": // decrement cell value
                   if(memory[p] > 0) {
                       memory[p]--;
                   } else {
                       memory[p] = 255; // Overflow back to 255
                   }
                   break;
                case data[j] === ".": // put character to screen
                   var memoryChar = String.fromCharCode(memory[p]);
                   if(memoryChar == '\n') {
                       memoryChar = ""; // Turn newlines into linebreaks
                   }
                   $('p#output').append(String.fromCharCode(memory[p]));
                   break;
                case data[j] === ",":
                   memory[p] = window.prompt("Please enter one character").charCodeAt(0); // Set memory to the character code
                   break;
                case data[j] === "[": // start loop
                   if(memory[p] != 0) {
                       continue;
                   } else {
                       var openLoopCnt = 0; // number of open loops
                       for(var k = j; k < data.length; k++) {
                           if(data[k] === '[') {
                               openLoopCnt++; // Another open loop is in existence
                           } else if(data[k] === ']') {
                               openLoopCnt++; // Decrement open count

                               if(openLoopCnt === 0) {
                                   j = k;
                                   break;
                               }
                           }
                       }
                       if(openLoopCnt != 0) {
                           throwException("Open loop.", j);
                       }
                   }
                   break;
               case data[j] === "]": // end loop
                   if(memory[p] != 0) {
                       var closedLoopCnt = 0; // Due to the fact that we are at closing loops, we use closedLoopCnt
                       for(var l = j; l >= 0; l--) {
                            if(data[l] === "]") {
                                closedLoopCnt++;
                            } else if(data[l] === "[") {
                                closedLoopCnt--;
                            }

                            if(closedLoopCnt === 0) {
                                j = l;
                                break;
                            }
                       }
                       if(closedLoopCnt != 0) {
                            throwException("Too many loop closings.", i);
                       }
                   }
                   break;
            }
        }
        console.timeEnd("Running Brainf*** code");

        console.time("Saving output in localStorage");
        localStorage.setItem("brainfuck_output", $('#output').text());
        console.timeEnd("Saving output in localStorage");
    }

<!-- language: lang-html -->

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <h1>Interpret your Brainf*** code!</h1>
    <form action="#" method="get" id="brainf***" onsubmit="runBrainfuck($('#code').val())">
        <label for="brainf***">Brainf*** code:</label> <br />
        <textarea name="code" rows="25" cols="70" id="code"></textarea> <br />
        <input type="submit" value="Interpret Brainf*** code!" />
    </form>
    <h2>Brainf*** output:</h2>
    <p id="output"></p>

<!-- end snippet -->

I will accept any review about cleanliness and other tips for this. I also am wondering if there is a [great] way to rewrite the JavaScript part using jQuery's `window.jQuery.submit()` function.