django_console_init = function(event) {
    var xhr_factory = function() {
        var xmlhttp;
        /* Special IE only code ... */
        /*@cc_on
          @if (@_jscript_version >= 5)
              try {
                  xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
              } catch (e) {
                  try {
                      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
                  } catch (E) {
                      xmlhttp = false;
                  }
             }
          @else
             xmlhttp = false;
        @end @*/
        if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
            try {
                xmlhttp = new XMLHttpRequest();
            } catch (e) {
                xmlhttp = false;
            }
        }
        return xmlhttp;
    };

    var console_input_form = document.getElementById('console-input');
    var console_buffer = document.getElementById('console-buffer');

    console_input_form.history = [''];
    console_input_form.history_cursor = 0;

    console_input_form.action = 'javascript:void(0)';

    console_input_form.input.onkeypress = function (event) {
        if (event.keyCode == 38 || event.keyCode == 40) {
            if (event.keyCode == 38) {
                console_input_form.history_cursor -= 1;
                if (console_input_form.history_cursor < 0) {
                    console_input_form.history_cursor = 0;
                }
            } else if (event.keyCode == 40) {
                console_input_form.history_cursor += 1;
                if (console_input_form.history_cursor >=
                    console_input_form.history.length) {
                    console_input_form.history_cursor = (
                        console_input_form.history.length - 1);
                }
            }
            input_text = console_input_form.history[
                console_input_form.history_cursor];
            event.target.value = input_text;
        } else {
            console_input_form.history[
                console_input_form.history.length - 1] = event.target.value;
        }
    };

    console_input_form.onsubmit = function (event) {
        var input_field = event.target.input;
        input_text = input_field.value;

        var request = xhr_factory();
        request.open('POST', document.location.href, false);
        request.setRequestHeader(
            'Content-Type', 'application/x-www-form-urlencoded');
        request.send('async=1&input=' + escape(input_text));

        // dumb way to detect a redirect
        if (request.responseText.match(/[\n\r\t ]*<!DOCTYPE/g)) {
            return window.location.reload();
        }
        document.getElementById('console-buffer').innerHTML += request.responseText;

        input_field.value = '';
        input_field.focus();

        console_input_form.history_cursor = console_input_form.history.length;
        console_input_form.history.push('');
    };

    if (console_input_form.input) {
        console_input_form.input.focus();
    }
};


if (window.attachEvent) {
    window.attachEvent('onload', django_console_init);
} else {
    window.addEventListener('load', django_console_init, false);
}
