﻿/*
* @author stuartb
* @date 2008.10.08
* @description Wizard forms made easy.
*/

jQuery.fn.wizard = function(settings) {
    settings = jQuery.extend({
        show: function(element) { return true; },
        prevnext: true,
        submitpage: null,
        initialize: function() { return true; },
        navigate: function() { return true; },
        cancel: function() { return true; },
        next: function() { return true; },
        submit: function() { return true; }
    }, settings);

    // Hide all pages at first.
    jQuery(this).children(".wizard-content").hide();
    jQuery(this).children(".wizard-content:first").show();
    settings.show(jQuery(this).children(".wizard-content:first"));

    // Also highlight the first nav item.
    jQuery(this).children(".wizard-guide").children("li:first").addClass("wizard-guide-select");

    // Wire progress thingy
    jQuery(this).children(".wizard-guide").children("li").children("a").click(function() {
        var target = jQuery(this).attr("href");
        var flag = navigateAction(this);

        if (!flag) {
            return false;
        }

        jQuery(this).parent().parent().parent().children(".wizard-content").hide();
        jQuery(target).slideDown('normal');
        settings.show(jQuery(target));
        jQuery(this).parent().parent().children('li').removeClass('wizard-guide-select', 'normal');
        jQuery(this).parent().addClass('wizard-guide-select', 'normal');
        return false;
    });

    // Prevent form submission on a wizard page...
    jQuery(this).children(".wizard-content").each(function(i) {
        // unless there is a submit button on this page
        if ((settings.submitpage == null && jQuery(this).find('input[type="submit"]').length < 1) ||
    (settings.submitpage != null && !$(this).is(settings.submitpage))) {
            $(this).find('input,select').keypress(function(event) {
                return event.keyCode != 13;
            });
        }
    });

    if (settings.prevnext) {
        // Add prev/next step buttons
        jQuery(this).children(".wizard-content")
            .append('<div class="wizard-content-submit"></div>')
            .children(".wizard-content-submit")
            .append('<input type="button" class="wizard-content-submit-cancel left" value="" /><input type="button" id="moveToNext" class="wizard-content-submit-next right" value="" /><input type="button" class="wizard-content-submit-previous right" value="" />');

        jQuery('.wizard-content:first input[type="button"].wizard-content-submit-previous').hide(); // hide prev button on first page
        jQuery('.wizard-content:last input[type="button"]#moveToNext').removeClass('wizard-content-submit-next').addClass('wizard-content-submit-finish');  // hide next button on last page
        jQuery('.wizard-content:last .wizard-content-submit').append('<input type="button" id="EEO" class="wizard-content-submit-eeo-hide right" value="" />');
        $(".wizard-content-submit-eeo-hide").click(function() { window.open('/_layouts/MaerskCom/VacancyApplicationEEO.aspx'); return false; });
        
        // Wire cancel/prev/next step buttons
        jQuery(this).children(".wizard-content")
            .children(".wizard-content-submit")
            .children('input[type="button"].wizard-content-submit-cancel').click(function() {
                cancelAction();
            });
        jQuery(this).children(".wizard-content")
            .children(".wizard-content-submit")
            .children('input[type="button"].wizard-content-submit-previous').click(function() {
                var wizardpage = jQuery(this).parent().parent(); // wizard-content-submit div, wizard-content div
                var wizardnav = wizardpage.parent().children(".wizard-guide")

                wizardpage.hide();
                wizardpage.prev().slideDown();
                settings.show(wizardpage.prev());

                try { wizardpage.prev().find("input:first").focus(); } catch (err) { }
                wizardnav.children('li').removeClass('wizard-guide-select', 'normal');
                wizardnav.children('li').children('a[href="#' + wizardpage.attr('id') + '"]').parent('li').prev().addClass('wizard-guide-select', 'normal');
            });
        jQuery(this).children(".wizard-content")
        .children(".wizard-content-submit")
        .children('input[type="button"]#moveToNext').click(function() {
            var flag = nextAction(this);

            if (!flag) {
                return false;
            }

            var wizardpage = jQuery(this).parent().parent(); // wizard-content-submit div, wizard-content div
            var wizardnav = wizardpage.parent().children(".wizard-guide")

            wizardpage.hide();
            wizardpage.next().slideDown();
            settings.show(wizardpage.next());

            try { wizardpage.prev().find("input:first").focus(); } catch (err) { }
            wizardnav.children('li').removeClass('wizard-guide-select', 'normal');
            wizardnav.children('li').children('a[href="#' + wizardpage.attr('id') + '"]').parent('li').next().addClass('wizard-guide-select', 'normal');
        });
        jQuery(this).children(".wizard-content")
        .children(".wizard-content-submit")
        .children('input[type=button].wizard-content-submit-finish').click(function() {
            var flag = submitAction();

            if (!flag) {
            
                var wizardpage = jQuery(this).parent().parent();
                wizardpage.slideDown();
                settings.show(wizardpage);
                return false;
            }
        });
        
        initializeAction();
    }

    return jQuery(this);
};