String.prototype.trim = function () {
        return this.replace(/^\s*/, "").replace(/\s*$/, "");
}

YAHOO.namespace("windows");

function init() {
    YAHOO.windows.loading = 
    		new YAHOO.widget.Panel("wait",  
    			{ width:"300px",
    			  fixedcenter:true, 
    			  close:false,
    			  draggable:false, 
    			  modal:true,
    			  visible:false
    			} 
    		);
    YAHOO.windows.loading.setHeader("We're guessing...");
    YAHOO.windows.loading.setBody('<img src="/images/loading.gif" />');
    YAHOO.windows.loading.render(document.body);
    /**/
    YAHOO.windows.result =
        new YAHOO.widget.Dialog("result",
                { width : "30em",
                  fixedcenter : true,
                  visible : false, 
                  close:false,
                  constraintoviewport : true,
                  modal:true,
                  buttons : [ { text:"Yes", handler:handleYes, isDefault:true },
                       { text:"No", handler:handleNo } ]
                 }
            );
    YAHOO.windows.result.render();
    /**/
    YAHOO.windows.feedback =
        new YAHOO.widget.Dialog("feedback",
                { width : "30em",
                  fixedcenter : true,
                  visible : false, 
                  close:false,
                  constraintoviewport : true,
                  modal:true,
                  buttons : [ { text:"Teach us!", handler:handleSubmit, isDefault:true }]
                 }
            );
    YAHOO.windows.feedback.render();
}

function do_guess() {
    var text = document.getElementById("text");
    if (text.value=="") {
        alert("We're good but we can't guess with no text");
        text.focus();
        return;
    }
    if (text.value.trim().length<20) {
        alert("We're good but we can't guess with a  very short text");
        text.focus();
        return;
    }
    YAHOO.windows.loading.show();

    var callback = {
        success : function(o) {
            try {
                YAHOO.windows.response = eval("(" + o.responseText  + ")");
            } catch (e) {
                this.failure();
                return;
            }
            display_result();
        },
        failure : function(o) {
            alert("Connection failed, please retry");
            YAHOO.windows.loading.hide();
        }
    }
    var conn = YAHOO.util.Connect.asyncRequest("POST", "/doguess.php?r=" + new Date().getTime(), callback,"text=" + escape(text.value));
}

function display_result() {
    var f = document.getElementById("lang-out");
    var text = document.getElementById("text");
    f.innerHTML = YAHOO.windows.response.lang;
    YAHOO.windows.loading.hide();
    YAHOO.windows.result.show();
    text.value="";
}

function handleYes() {
    YAHOO.windows.result.hide();
}
function handleNo() {
    YAHOO.windows.result.hide();
    YAHOO.windows.feedback.show();
}
function handleSubmit() {
    var lang = document.getElementById("clang").value;
    if (lang=="") {
        return;
    }
    YAHOO.windows.feedback.hide();
    var conn = YAHOO.util.Connect.asyncRequest("POST", "/doteach.php?r=" + new Date().getTime(), {},"id=" + YAHOO.windows.response.id + "&lang=" + lang);
}
    YAHOO.util.Event.on("send", "click", do_guess);
YAHOO.util.Event.onDOMReady(init);
