var result = [];
var lastRequest;
var DEBUG = 0;

// can't believe this needed to be written.
Object.prototype.keys = function ()
{
    var keys = [];
    for(i in this) if (this.hasOwnProperty(i))
    {
	keys.push(i);
    }
    return keys;
}

function refresh() {
    debug("list: " + result);
    dojo.byId("toBeReplaced").innerHTML =  "<ul><li>" + result.join("</li><li>") + "</li></ul>";
}
function last(s) {
    return s.charAt(s.length - 1);
}

function isDigit(s) {
    return ("1234567890".indexOf(last(keys)) != -1) ;
}

function debug(s) {
    if (DEBUG) { dojo.byId("debug").innerHTML += "<p>" +  s + "</p>"; }
}

function completionType() {
    var radioGroup = document.getElementsByName('completionMethod');
    
    // this is filthy
    for (var i=0;i<radioGroup.length;i++){
	if (radioGroup[i].checked==true) { return radioGroup[i].value; }
    }
    alert("hm, shouldn't ever happen. Ur browser iz borken.");
}


var acceptableKeys = {
    "Alphabetical": function(l) { return ((l>= "A") && (l<="z")); },
    "Numbers":      function(l) { return "1234567890 ".indexOf(l) != -1; }
};

function acceptable(l) {
    return acceptableKeys[completionType()](l);
}



function finalClean() {
    keys = dojo.byId("keys").value || "";
    while (keys.length>0 && ! acceptable(last(keys))) {
	keys = keys.substring(0, keys.length-1);
    }
    dojo.byId("keys").value = keys;
    return keys;
}




function callback(keys, message) {
    
    dojo.xhrGet({
	url: "/fcgi-bin/predictive?input=" + keys + "&message=" + message + "&method=" + completionType() ,
	load: function(response, ioArgs){
	    res = eval('(' + response + ')');
	    lastRequest = keys;
	    result = res.keys();
	    refresh();
	    return response;
	},
	error: function(response, ioArgs){
	    dojo.byId("toBeReplaced").innerHTML = 
		"An error occurred, with response: " + response + ". keys was " + keys + ", message was " + message;
	    return response;
	},
	form: "myForm"
    });
}






function getText() {  
    //The form data is sent to the given URL using a POST method, 
    //rather than a GET by using the dojo.xhrPost function.

    message = dojo.byId("message").innerHTML || "";
    keys = dojo.byId("keys").value || "";
    if (keys.length == 0) {callback("", message) ; } // bail out early

    // keys = cleanInput();

    l = last(keys);
    switch(l) {
    case ' ':
	acceptWord();
	callback("", dojo.byId("message").innerHTML);
	return;
    case '+':
	result.push(result.shift());
	refresh();
	break;
    case '-':
	result.unshift(result.pop());
	refresh();
	break;
    default:
	if(keys != lastRequest && acceptable(l) ) {
	    callback(keys, message);
	    return;
	}
    }

    // non-numeric input, just throw it away.
    finalClean();

}


function acceptWord() {
    if (result.length>0) {
	dojo.byId("message").innerHTML += ' ' + result[0];
	dojo.byId("keys").value = "";
	result = []; // result is no longer valid
    }
}





