/* Merged Plone Javascript file
 * This file is dynamically assembled from separate parts.
 * Some of these parts have 3rd party licenses or copyright information attached
 * Such information is valid for that section,
 * not for the entire composite file
 * originating files are separated by ----- filename.js -----
 */

/* ----- formsubmithelpers.js ----- */
function inputSubmitOnClick(event) {
    if (!event) var event = window.event; // IE compatibility

    if (hasClassName(this, 'submitting')) {
        return confirm(window.form_resubmit_message);
    } else {
        addClassName(this, 'submitting');
    }
    return true;
}

function registerSubmitHandler() {
    var nodes = cssQuery('input[type=submit]');
    for (var i=0; i<nodes.length; i++) {
        var node = nodes[i];
        if (!node.onclick) {
            node.onclick = inputSubmitOnClick;
        }
    }
}
registerPloneFunction(registerSubmitHandler);


/* ----- jsorder.js ----- */

function jsorder_findObjectID(obj) {
    var a = jsorder_findElement(obj, "a");
    var req = decodeURI(a.href).split("?");
    var args = req[1].split("&");
    for (var n = 0; n < args.length; n++) {
        if (args[n].slice(0, 3) == "id=") {
	    return args[n].slice(3);
	}
    }
    throw "no id found";
}

function jsorder_findElement(obj, tagName) {
    tagName = tagName.toUpperCase();
    while (obj != null && obj.tagName != tagName) {
         obj = obj.parentNode;
    }
    return obj;
}

function jsorder_stopEvent(event) {
    if (document.all) {
        event.cancelBubble = true;
        event.returnValue = false;
    } else {
        event.preventDefault();
        event.stopPropagation();
    }
    return false;
}

function jsorder_switchClasses(a, b) {
    var tmp = a.className;
    a.className = b.className;
    b.className = tmp;
}

function jsorder_baseuri(uri) {
    var url = decodeURI(uri).split("/");
    if (url[url.length - 1] != "") {
        url.length = url.length - 1;
    }
    return url.join("/");
}

function jsorder_rpc(func, args) {
    var uri = jsorder_baseuri(document.URL);
    var srv = XMLRPC.getService(uri);
    var res = srv.call(func, args);
    return res;
}

function jsorder_moveUp(event) {
    var ev = event ? event : window.event;
    var target = ev.target ? ev.target : ev.srcElement;
    var obj = jsorder_findElement(target, "tr");
    var prev = obj.previousSibling;
    while (prev && obj.nodeName != prev.nodeName) {
        prev = prev.previousSibling;
    }
    if (prev) {
        prev.parentNode.insertBefore(obj, prev);
        jsorder_switchClasses(obj, prev);
        var id = jsorder_findObjectID(target);
	var args = new Array(id, "up");
        jsorder_rpc("jsorder_move", args);
    }
    return jsorder_stopEvent(event);
}

function jsorder_moveDown(event) {
    var ev = event ? event : window.event;
    var target = ev.target ? ev.target : ev.srcElement;
    var obj = jsorder_findElement(target, "tr");
    var next = obj.nextSibling;
    while (next && obj.nodeName != next.nodeName) {
        next = next.nextSibling;
    }
    if (next) {
        next.parentNode.insertBefore(next, obj);
        jsorder_switchClasses(next, obj);
        var id = jsorder_findObjectID(target);
	var args = new Array(id, "down");
        jsorder_rpc("jsorder_move", args);
    }
    return jsorder_stopEvent(event);
}

function jsorder_addActions(obj) {
    var links = obj.getElementsByTagName("a");
    for (var n = 0; n < links.length; n++) {
        var a = links[n]; 
        if (a.className == "up" || a.href.search(/\/folder_position\?position=up/) >= 0) {
	    registerEventListener(a, "click", jsorder_moveUp);
        }
        if (a.className == "down" || a.href.search(/\/folder_position\?position=down/) >= 0) {
	    registerEventListener(a, "click", jsorder_moveDown);
        }
    }
}

function jsorder_init() {
    var tables = document.getElementsByTagName("table");
    for (var n = 0; n < tables.length; n++) {
        if (tables[n].className == "listing") {
            jsorder_addActions(tables[n]);
        }
    }
}

registerPloneFunction(jsorder_init);


