
function validateAdd()
{
    // TODO: fill out this validation routine!
    return true;
}

function initEditBox()
{
    // Note that getElementsByClassName() is provided by Prototype
    var editables = document.getElementsByClassName("editable");
    // By design, there is only one "editable" block per link page
    var editable = editables[0];
    editable.onclick = makeEditable;
}

function makeEditable(event)
{
    // Find out which HTML element was clicked so that link 
    // clicks can be filtered out
    var target;
    if (!event) var event = window.event;
    if (event.target) {
        target = event.target;
    } else if (event.srcElement) {
        target = event.srcElement;
    }
    if (target.nodeType == 3) {
        // Safari bug
        target = target.parentNode;
    }
    var targetTag = target.tagName ? target.tagName.toLowerCase() : null;
    if (targetTag == 'a' || target.id == "linkTitle") {
        return;
    } else {
        // Get link ID
        var linkId = this.id.slice(9);

        // Show edit box, hide link box
        var link = document.getElementById("link_" + linkId);
        var editForm = document.getElementById("editbox");
        link.style.display = "none";
        editForm.style.display = "block";
    }
}

function hideEditBox(elemId)
{
    link = document.getElementById(elemId);
    editForm = document.getElementById("editbox");

    editForm.style.display = "none";
    link.style.display = "block";
}

function updateLink(id)
{
    var url = document.getElementById("editUrl").value;
    var title = document.getElementById("editTitle").value;
    var description = document.getElementById("editDescription").value;

    var progress = document.getElementById("progress");
    var savingMsg = document.createTextNode(" saving...");
    var savedMsg = document.createTextNode(" saved!");

    removeAllChildNodes(progress);

    var loadingFunc = function(t) {
        progress.appendChild(savingMsg);
    }

    var loadedFunc = function(t) {
        progress.removeChild(savingMsg);
        progress.appendChild(savedMsg);
    }

    var errFunc = function(t) {
        var errTxt = "Error " + t.status + ": " + t.statusText;
        var errMsg = document.createTextNode(errTxt);
        progress.removeChild(savingMsg);
        progress.appendChild(errMsg);
    }

    var successFunc = function(t) {
        var pageTitle = document.getElementById("linkTitle");
        var pageUrl = document.getElementById("linkUrl");
        var pageDescription = document.getElementById("linkDescription");
        var titleTxtNode = document.createTextNode(title);
        var descriptionTxtNode = document.createTextNode(description);

        pageUrl.href = url;
        pageTitle.removeChild(pageTitle.firstChild);
        pageTitle.appendChild(titleTxtNode);
        pageDescription.value = description;
        removeAllChildNodes(pageDescription);
        pageDescription.appendChild(descriptionTxtNode);

        var response = eval(t.responseText);
        if (response[0]) {
            progress.removeChild(savedMsg);
            var linkId = "link_" + id;
            hideEditBox(linkId);
            new Effect.Highlight(linkId, {endcolor: '#FFFFFF'});
        } else {
            var errTxtNode = document.createTextNode("Error: " + response[1]);
            progress.removeChild(savedMsg);
            progress.appendChild(errTxtNode);
            new Effect.Highlight(progress, {startcolor: '#CC3D3D', endcolor: '#ECECEC'});
        }
    }
    
    var endpoint = "http://www.spaceshipnofuture.org/linkomatic/ajax.php";
    var params = "mode=updateLink&url=" + encodeURIComponent(url) + 
        "&title=" + encodeURIComponent(title) + 
        "&description=" + encodeURIComponent(description) + 
        "&id=" + id;
    var options = {
        method: 'post',
        parameters: params,
        onLoading: loadingFunc,
        onLoaded: loadedFunc,
        onFailure: errFunc,
        onSuccess: successFunc
    }

    new Ajax.Request(endpoint, options);
    return false;
}

