(function () {
    var timeout = 1000;

    waitForProtex();

    function waitForProtex() {
        if (typeof(protex) !== "undefined" && protex) {
            protex.onInjectionDone("protex");
        }
        /*if (typeof(protex) !== "undefined") {
            //initializeProtex();    
        }*/
        else {
            setTimeout(function() { waitForProtex(); }, timeout);
        }
    }
    
    //NOTE:
    // Protex uses three global functions:
    // protexSetTargetShape (exported from GWT)
    // exported protexCheckAnswer (exported from GWT)
    // It calls protexIsReady with a deferred command when it has finished 
    // initialization and has drawn itself
    
    function updateProtexField() {
            var problem = $('#protex_container').parents('.problem');
            var input_field = problem.find('input[type=hidden]');
            var protex_answer = protexCheckAnswer();
            var value = {protex_answer: protex_answer};
            //console.log(JSON.stringify(value));
            input_field.val(JSON.stringify(value));
        }
        
    protexIsReady = function() {
        //Load target shape
        var target_shape = $('#target_shape').val();
        protexSetTargetShape(target_shape);
            
        //Get answer from protex and store it into the hidden input field
        //when Check button is clicked
        var fold_button = $("#fold-button");
        fold_button.on('click', function(){
            var problem = $('#protex_container').parents('.problem');
            var input_field = problem.find('input[type=hidden]');
            var protex_answer = protexCheckAnswer();
            var value = {protex_answer: protex_answer};
            //console.log(JSON.stringify(value));
            input_field.val(JSON.stringify(value));
        });
        updateProtexField();              
    };

    
    /*function initializeProtex() {
        //Check to see if the two exported GWT functions protexSetTargetShape 
        // and protexCheckAnswer have been appended to global scope -- this 
        //happens at the end of onModuleLoad() in GWT
        if (typeof(protexSetTargetShape) === "function" &&
            typeof(protexCheckAnswer) === "function") {
            
            //Load target shape
            var target_shape = $('#target_shape').val();
            //protexSetTargetShape(target_shape);
            
            //Get answer from protex and store it into the hidden input field
            //when Check button is clicked
            var problem = $('#protex_container').parents('.problem');
            var check_button = problem.find('input.check');
        	var input_field = problem.find('input[type=hidden]');
            check_button.on('click', function() {
                var protex_answer = protexCheckAnswer();
                var value = {protex_answer: protex_answer};
                input_field.val(JSON.stringify(value));
            });
            
            //TO DO: Fix this, it works but is utterly ugly and unreliable
            setTimeout(function() {
              protexSetTargetShape(target_shape);}, 2000);

        }
        else {
            setTimeout(function() {initializeProtex(); }, timeout);
        }
    }*/
}).call(this);