// -*- 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 addOnloadEvent(fnc){
 if ( typeof window.addEventListener != "undefined" )
 window.addEventListener( "load", fnc, false );
 else if ( typeof window.attachEvent != "undefined" ) {
 window.attachEvent( "onload", fnc );
 }
 else {
 if ( window.onload != null ) {
 var oldOnload = window.onload;
 window.onload = function ( e ) {
 oldOnload( e );
 window[fnc]();
 };
 }
 else
 window.onload = fnc;
 }
}

function fillIf(element, current, fill)
{
 if (element.value == current) {
 element.value = fill;
 }
}

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);
    }
}

var texts = {
     'user_address': '* Address',
     'user_zipcode': '* Zip Code',
     'user_suite': 'Apt #'
}

function clearAll(form) {
	return function() {
		 for (var field_i=0;field_i<form.elements.length;field_i++) {
		   var element = form.elements[field_i];
		   var name = element.name;
		   if (texts[name] !== undefined) {
         fillIf(element, texts[name], '');
	  	 }
	   }
	 }
}

function dreLoad()
{

  for (var form_i=0;form_i<document.forms.length;form_i++) {
	 var form = document.forms[form_i];
	 for (var field_i=0;field_i<form.elements.length;field_i++) {
		 var element = form.elements[field_i];
		 var name = element.name;
		 if (texts[name] !== undefined) {
			 element.onclick = function() {fillIf(this, texts[this.name], '')};
			 element.onblur = function() {fillIf(this, '', texts[this.name])};
       fillIf(element, '', texts[name]);
		 }
	 }
	   // set up the form to clear on submit

   if (form.onsubmit) {
    form.onsubmit = compositeFunc(clearAll(form), address.form.onsubmit);
   } else {
    form.onsubmit = clearAll(form);
   }
  }

}
addOnloadEvent(dreLoad);




