/*
 * plop.js by Al
 *
 * $Id: plop.js,v 1.6 2007/07/29 03:17:03 al Exp $
 *
 */

var TribunePatate = {};

function getGeneratedAtTag() {
    var metaTags = document.getElementsByTagName("meta");
    for (var i = 0; i < metaTags.length; i++) {
        if (metaTags[i].name == 'generated-at') {
            return metaTags[i];
        }
    }
}

function getGenerationTime() {
    return getGeneratedAtTag().content;
}

function setGenerationTime(new_time) {
    getGeneratedAtTag().content = new_time;
}

XMLDocument.prototype.getElementContentByName = function (name) {
    return this.getElementsByTagName(name)[0].textContent ||
        this.getElementsByTagName(name)[0]; // for Konqueror
};

function postLine() {
    var req;
    if ((! TribunePatate.textInput.value) || 
            TribunePatate.textInput.value.match("^\\s*$")) {
        return false;
    }
    setCursorStyle("progress");
    req = createXMLHttpRequest();
    setResponseHandler(req);
    req.open('POST', document.URL, true); 
    req.setRequestHeader("Content-Type",
            "application/x-www-form-urlencoded; charset=UTF-8");
    req.send('origin=ajax&text=' + encodeURIComponent(TribunePatate.textInput.value));
    TribunePatate.textInput.value = '';
    return false;
}

function setResponseHandler(req) {
    req.onreadystatechange = function () {
        var post, resp, prev_modif_time;
        if (req.readyState == 4) {
            if (req.status == 200) {
                resp = req.responseXML;
                if (resp.documentElement.tagName == "error") {
                    alert(resp.getElementContentByName("msg"));
                } else {
                    prev_modif_time = resp.getElementContentByName("prev_modif_time");
                    if (prev_modif_time > getGenerationTime()) {
                        // If someone has modified the page since we downloaded it,
                        // we need to reload the page to see the changes.
                        window.location.reload(true);
                    } else {
                        // If not, we just add the new message to the current page.
                        setGenerationTime(resp.getElementContentByName("time"));
                        post = { 
                            timeString: resp.getElementContentByName("pretty_time"), 
                            contentString: resp.getElementContentByName("content")
                        };
                        addPostToPage(document.getElementById("message_list"), post);
                    }
                }
            } else {
                alert('Désolé, les tuyaux sont bouchés !');
            }
            setCursorStyle("auto");
        }
    };
}

function getElementContentByName(doc, name) {
    return doc.getElementsByTagName(name)[0].textContent;
}

function setCursorStyle(style) {
    document.body.style.cursor = style;
    TribunePatate.textInput.style.cursor = style;
    if (TribunePatate.submit) {
        TribunePatate.submit.style.cursor = style;
    }
}

function createXMLHttpRequest() { 
    var req; 
    if (window.XMLHttpRequest) { 
        try { 
            req = new XMLHttpRequest(); 
        } catch(e) { 
            req = false; 
        } 
    } else if (window.ActiveXObject) { 
        try { 
            req = new ActiveXObject("Microsoft.XMLHTTP"); 
        } catch(e) { 
            req = false; 
        } 
    } 
    return req; 
}

function hey(a) {
    var input = document.getElementById('input');
    var date_str = a.innerHTML.replace(/&nbsp;/, ' ');
    input.value = input.value + date_str + '> ';
    input.focus();
} 

window.onload = function () {
    TribunePatate.submit = document.getElementById("submit");
    TribunePatate.textInput = document.getElementById("input");
    TribunePatate.inputForm = document.getElementById("input_form");
    TribunePatate.inputForm.onsubmit = postLine;
};

//EOF
