// -*- mode: java -*-
/*
 * Javascript utilities 
 *
 * provides utility functions
 *
 * REQUIRES: 
 * PROVIDES:
 *
 * clickOnce() -- set up all forms on page to disable all submit buttons on
 *    submit
 *
 * compositeFunc(first,second) -- create a composite function that calls the
 *     first function then the second, returning the return value of the 
 *     second
 *
 * swapDisplay(elid1,elid2) -- swap display settings of two elements.
 */

function clickOnce(submits)
{
    for (var i = 0; i < submits.length; i++) {
	i.disabled = true;
    }

    return true;
}

function compositeFunc(first,second)
{
    return function() {
        first();
        return second();
    }
}

function installClickOnce()
{
    if (!document.getElementById) return;

    var frms = document.getElementsByTagName('FORM');
    for (var i = 0; i < frms.length; i++) {
	var sbmts = new Array();
	var inpts = frms[i].getElementsByTagName('INPUT');
	for (var j = 0; j < inpts.length; j++) {
	    if (inpts[i].getAttribute('type') == 'submit') {
		sbmts.push(inpts[i]);
	    }
	}

	if (frms[i].onsubmit) {
	    frms[i].onsubmit = compositeFunc(curryClickOnce(sbmts),
					     frms[i].onsubmit);
	} else {
	    frms[i].onsubmit = curryClickOnce(sbmts);
	}
    }
}

function swapDisplay(elid1,elid2)
{
    if (!document.getElementById) return;

    var el1 = document.getElementById(elid1);
    var el2 = document.getElementById(elid2);

    var tmp = el1.style.display;
    el1.style.display = el2.style.display;
    el2.style.display = tmp;
}

// private

function curryClickOnce(submits)
{
    return function () {
	clickOnce(submits);
    }
}
