// -*- mode: java -*-
/*
 * Javascript rebuttal window library
 *
 * provides functions for controlling rebuttal windows.
 *
 * REQUIRES: util.js
 *           pop.js
 *
 * PROVIDES:
 *
 * installRebuttal() - call to set up the current window to pop a rebuttal
 *     window when it is exited by some means other than clicking a link or
 *     submitting a form.
 *
 * norebut() - turn off rebuttals; call in onclick of links and onsubmit
 *     of forms to prevent unwanted rebuttals. (installRebuttal will set 
 *     those up for you)
 *
 * rebut() - call to pop a rebuttal window (if one has not already been
 *     popped and if doRebut is true)
 *
 * rebutExit() - call INSIDE of rebut window to exit back to original 
 *     location (see returnTo below)
 * 
 * doRebut - set to true to enable rebut() calls to pop windows.
 *
 * rebutWin - the rebuttal window that has been popped
 *
 * rebutUrl - the URL to load in rebuttal window (default: rebut.php)
 * 
 * rebutWinName - the name of the rebut window (default: reminder)
 *
 * rebutWinW - width of rebut window (default: 500)
 *
 * rebutWinH - height of rebut window (default: 400)
 *
 * returnTo - url to return to on rebutExit(); set automatically to calling
 *     url, but you may override by resetting after calling installRebuttal()
 */

var doRebut;
var rebutWin = null;

var rebutUrl = 'rebut.php';
var rebutWinName = 'reminder';
var rebutWinW = 630;
var rebutWinH = 400;

var returnTo = null;

function installRebuttal()
{
    // rebuttal funcs require a modern browser that can do DOM manipulations
    if (!document.getElementById) {
        return;
    }

    // set up links to avoid popping rebut when clicked
    var links = document.getElementsByTagName('A');
    for (var i = 0; i < links.length; i++) {
        var ln = links[i];

        if (ln.onclick) {
            // already has an onclick; install ours on top of it
            ln.onclick = compositeFunc(norebut,ln.onclick);
        } else {
            ln.onclick = norebut;
        }
    }

    var forms = document.getElementsByTagName('FORM');
    for (var i = 0; i < forms.length; i++) {
        var fr = forms[i];
        if (fr.onsubmit) {
            fr.onsubmit = compositeFunc(norebut,fr.onsubmit);
        } else {
            fr.onsubmit = norebut;
        }
    }
    
    var st = window.location.toString();
    rebutUrl = rebutUrl + '?url=' + st;

    doRebut = true;
    returnTo = window.location.toString();
    window.onunload = rebut;
}

function rebut()
{
    if (doRebut && rebutWin == null) {
	rebutWin = pop(rebutWinName,rebutUrl,rebutWinW,rebutWinH);
	if (rebutWin !== null) {
	    rebutWin.openerHref = returnTo;
	    // alert("returnTo: " + returnTo + " w.o " + rebutWin.openerHref);
	    rebutWin.opener = window;
	    doRebut = false; // don't do it again
	}
    }
}

function norebut()
{
    doRebut = false;
}
