﻿/* Created by jankoatwarpspeed.com - extended & modified for TM 8/2011*/

(function($) {
    $.fn.formToWizard = function(options) {
        options = $.extend({
            submitButton: "",
            aspnetValidate: true,
            showStepNumbers: true
        }, options);

        var element = this;

        var steps = $(element).find("fieldset");
        var count = steps.size();
        var submmitButtonName = "#" + options.submitButton;
        $(submmitButtonName).hide();

        // 2
        $(element).before("<ul id='steps'></ul>");

        steps.each(function(i) {

            $(this).wrap("<div id='step" + i + "'></div>");
            $(this).append("<p id='step" + i + "commands'></p>");

            // 2
            var name = $(this).find("legend").html();
            if (options.showStepNumbers) {
                $("#steps").append("<li id='stepDesc" + i + "'>Step " + (i + 1) + "<span>" + name + "</span></li>");
            } else {
                $("#steps").append("<li id='stepDesc" + i + "'><span id='stepHead" + (i) + "' style='cursor:pointer;font-size:.5em;'>" + name + "</span></li>");
                $("#stepHead" + (i)).bind("click", function(e) {
                    hideAllSteps(i);
                    $("#step" + i).show();
                    selectStep(i);
                });
            }

            if (options.showStepNumbers) {
                if (i == 0) {
                    if (count > 1) {
                        createNextButton(i);
                    }
                    selectStep(i);
                }
                else if (i == count - 1) {
                    $("#step" + i).hide();
                    createPrevButton(i);
                }
                else {
                    $("#step" + i).hide();
                    createPrevButton(i);
                    createNextButton(i);
                }
            } else {

                if (i == 0) {
                    selectStep(i);
                } else {
                    $("#step" + i).hide();
                }
            }

        });


        function createPrevButton(i) {
            var stepName = "step" + i;
            $("#" + stepName + "commands").append("<a href='#' id='" + stepName + "Prev' class='prev'>< Back</a>");

            $("#" + stepName + "Prev").bind("click", function(e) {
                $("#" + stepName).hide();
                $("#step" + (i - 1)).show();
                $(submmitButtonName).hide();
                selectStep(i - 1);
            });
        }

        function createNextButton(i) {
            var stepName = "step" + i;
            $("#" + stepName + "commands").append("<a href='#' id='" + stepName + "Next' class='next'>Next ></a>");

            $("#" + stepName + "Next").bind("click", function(e) {
                if (options.aspnetValidate == true) {
                    if (Page_ClientValidate(stepName)) {
                        $("#" + stepName).hide();
                        $("#step" + (i + 1)).show();
                        if (i + 2 == count)
                            $(submmitButtonName).show();
                        selectStep(i + 1);
                    }
                } else {
                    $("#" + stepName).hide();
                    $("#step" + (i + 1)).show();
                    if (i + 2 == count)
                        $(submmitButtonName).show();
                    selectStep(i + 1);
                }
            });
        }

        function selectStep(i) {
            $("#steps li").removeClass("current");
            $("#stepDesc" + i).addClass("current");
        }
        function hideAllSteps(stepToShow) {
            steps.each(function(i) {
                if (i != stepToShow) {
                    var stepName = "step" + i;
                    $("#" + stepName).hide();
                }
            });
        }
    }
})(jQuery); 
