/**
 * Description of formHandling.js
 *
 * @author Phil Sorrell
 * @version 0.13
 */

addDOMLoadEvent(addDatePicker);
addDOMLoadEvent(setupNotes);
addDOMLoadEvent(setupRepeater);
addDOMLoadEvent(cleverFieldsets);

function addDatePicker ()
{
    var x = $$('.formHandling .fhCalendar');
    
    for(var i=0; i < x.length; i++)
    {
	datePickerController.datePickers[$(x[i])];
    }	
}

function setupNotes ()
{
    var y = $$('.formHandling');
    for (var p=0; p < y.length; p++)
    {
        if ($(y[p]).hasClassName('fhHelpTrigger'))
        {
            $(y[p]).select('.fhNoteTrigger').each(function(s) {
                Event.observe(s, 'click', function(e)     {
                    s.up('.fhHoldingElement').down('.fhNote').show();
                    Event.stop(e);  
                }, false);
                s.style.visibility = "visible";
            });

            $(y[p]).select('.fhNote').each(function(s) {
                s.hide();
            });
        } else if ($(y[p]).hasClassName('fhHelpTriggerFancyZoom'))
        {
            $(y[p]).select('.fhNoteTrigger').each(function(s) {
                if (s.hasClassName('small')) helpWidth = 300; 
                else if (s.hasClassName('medium')) helpWidth = 450;
                else helpWidth = 600;
                s.writeAttribute({href: "#" + s.up(".fhHoldingElement").down('.fhNote').identify()});
                new FancyZoom(s.identify(), {width: helpWidth});
                s.style.visibility = "visible";
            });

            $(y[p]).select('.fhNote').each(function(s) {
                s.hide();
            });
        } else {
            $(y[p]).select('.fhNoteTrigger').each(function(s) {
                s.hide();
            }); 
        }
    }
}

function setupRepeater ()
{
    // this function allows repeater fields to be built dynamically
}

function cleverFieldsets ()
{
    var y = $$('.fhCleverFieldsets');
    for (var p=0; p < y.length; p++)
    {
        $(y[p]).select('.formHandlingButtons').each(function(s) {
            s.hide();
        });
        var x = $(y[p]).select('fieldset');
        errorMessage = "";
        for (var i=0; i < x.length; i++)
        {
            errors = $(x[i]).select(".fhErrors");
            if (errors.length>0) errorMessage += ' <li><a onclick="jumpFieldset(' + $(x[i]).identify() + ');" href="#">' + $(x[i]).down("legend").innerHTML + '</a></li>';

            if (i==x.length-1) $(x[i]).addClassName("last")
            fieldsetNav = '<table class="fhFieldsetNav"><tr><td class="previous">';
            if (i>0) fieldsetNav += '<a class="previous" href="#">Previous Section (' + $(x[i]).previous('fieldset').down('legend').innerHTML + ')</a>';
            fieldsetNav += '</td><td class="next">';
            if (i<x.length-1) fieldsetNav += '<a class="next" href="#">Next Section (' + $(x[i]).next('fieldset').down('legend').innerHTML + ')</a>';
            fieldsetNav += '</td></tr></table>';
            $(x[i]).insert ({after: fieldsetNav});

            if (i>0) hideFieldset($(x[i]));

            if (i<x.length-1) {
                Event.observe($(x[i]).next('.fhFieldsetNav').down('a.next'), 'click', function(e)     {
                        hideFieldset(this.up('.fhFieldsetNav').previous('fieldset'));
                        showFieldset(this.up('.fhFieldsetNav').next('fieldset'));
                        this.up('.fhFieldsetNav').next('fieldset').scrollTo();
                        Event.stop(e);
                }, false);
            }

            if (i>0) {
                Event.observe($(x[i]).next('.fhFieldsetNav').down('a.previous'), 'click', function(e)     {
                        hideFieldset(this.up('.fhFieldsetNav').previous('fieldset'));
                        showFieldset(this.up('.fhFieldsetNav').previous('fieldset').previous('fieldset'));
                        this.up('.fhFieldsetNav').previous('fieldset').previous('fieldset').scrollTo();
                        Event.stop(e);
                }, false);
            }
        }

        for (i=0; i < x.length; i++)
        {
            legendExtension = ' (section ' + (i+1) + ' of ' + x.length + ')';
            $(x[i]).down("legend").insert ({bottom: legendExtension});
        }

        if (errorMessage != "") $(y[p]).insert({top: '<div class="error"><p>The follow sections have errors:</p><ul>' + errorMessage + '</ul></div>'});
    }
}

function hideFieldset(x)
{
    x.hide();
    x.next('.fhFieldsetNav').hide();
    if (x.hasClassName('last')) x.next('.formHandlingButtons').hide();
}

function jumpFieldset(fieldset)
{
    x = $(fieldset).up('form').select('fieldset');
    for (i=0; i < x.length; i++)
    {
        hideFieldset($(x[i]));
    }
    showFieldset($(fieldset));
}

function showFieldset(y)
{
    Effect.Appear(y, {duration: 0.3});
    Effect.Appear(y.next('.fhFieldsetNav'), {duration: 0.3});
    if (y.hasClassName('last')) Effect.Appear(y.next('.formHandlingButtons'), {duration: 0.3});
}