/* Created by jankoatwarpspeed.com */

(function($) {
    $.fn.formToWizard = function(options) {

        var element = this;

        var steps = $(element).find("fieldset.step:visible");
        var count = steps.size();
        var submitButtonName = "#" + options.submitButton;
        var $submitButton = $(submitButtonName).hide();


        options = $.extend($.fn, {
            submitButton: '',
            selectStep: function(to, from) {
                from = from == undefined ? 1 : from;

                if (count == 1) {
                    return;
                }
                $("#steps li").removeClass("current");
                $('div[step]').fadeOut("fast");

                $stepDesc = $('#stepDesc' + to);
                $stepDesc.addClass("current");

                var width = $('#stepDesc' + to).outerWidth();
                var offset = - (to - 1) * width;
                $('#steps').animate({marginLeft: offset}, 1000, 'swing', function() {
			$('[step=' + to + ']').fadeIn("slow");
		});
            } 
        }, options);

        // 2
        $(element).before("<div id='steps-wrap'><ul id='steps'></ul><div id=steps-login>&nbsp;</div></div>");

        steps.each(function(i) {
            i++;
            $this = $(this);
            $this
                .wrap("<div id='step" + i + "' " + "step=" + i + "></div>")
                .append("<p id='step" + i + "commands'></p>");

            // 2
            var legend = $this.find("legend");
            var name = legend.html();
            $("#steps").append("<li id='stepDesc" + i + "' " +
                "step=" + i + " class='stepdesc'" +
                "title='" + legend.attr('title') + 
                "'>" + strings_step + " " + i + "<div class=stepof> " + strings_of + " " + steps.length + "</div><span class=stepinfo>" + name + "</span></li>");

            if (count == 1) {
                createSubmitButton(i);
            } else if (i == 1) {
                createNextButton(i);
                $this.selectStep(i);
            }
            else if (i == count) {
                $("#step" + i).hide();
                createPrevButton(i);
                createSubmitButton(i);
            }
            else {
                $("#step" + i).hide();
                createPrevButton(i);
                createNextButton(i);
            }
        });

        function createSubmitButton(i) {
             var clone = $submitButton.clone()
                .css('display', 'inline')
                .css('float', 'right')
                .css('clear', 'none');
             $('#step' + i + 'commands').append(clone);
        }

        function createPrevButton(i) {
            var $steps = $('#steps');
            var prevstep = i - 1;
            var stepName = "step" + i;
            var prevstepName = "step" + prevstep;
            $("#" + stepName + "commands").append("<a href='#" + prevstepName +
                "' id='" + stepName + "Prev' class='prev'>< " + strings_back + "</a>");

            $("#" + stepName + "Prev").bind("click", function(e) {

                $(submitButtonName).hide();
                $(this).selectStep(prevstep, i);
            });
        }

        function createNextButton(i) {
            var nextstep = i + 1;
            var stepName = "step" + i;
            var nextstepName = "step" + nextstep;
            $("#" + stepName + "commands").append("<a href='#" + nextstepName +
                "' id='" + stepName + "Next' class='next'>" + strings_next + "></a>");

            var $steps = $('#steps');
            $("#" + stepName + "Next").bind("click", function(e) {

                if (nextstep == count) {
                    $(submitButtonName).show();
                }

		var stepIsValid = true;
		$("#" + stepName + " :input").each( function(index) {
			var xy;
			try {
				xy = element.validate().element($(this));
			}
			catch (dontcare) {
			}
			if(xy == undefined)
				xy = true;
			stepIsValid = xy && stepIsValid;
		});
		if (!stepIsValid) {
			return false;
		};

                $(this).selectStep(nextstep, i);
            });
        }

    }
})(jQuery); 

