(function($){$.fn.formwizard=function(wizardSettings,validationSettings,formOptions){var settings=$.extend({historyEnabled:false,validationEnabled:false,formPluginEnabled:false,linkClass:".link",submitStepClass:".submit_step",back:":reset",next:":submit",textSubmit:'Submit',textNext:'Next',textBack:'Back',afterNext:undefined,afterBack:undefined,serverSideValidationUrls:undefined,callable:true},wizardSettings);var formOptionsSuccess=(formOptions)?formOptions.success:undefined;var formSettings=$.extend(formOptions,{success:function(data){if(formOptions&&formOptions.resetForm||!formOptions){navigate(0);if(settings.historyEnabled){$.historyLoad(0);}else{renderStep();}}
if(formOptionsSuccess){formOptionsSuccess(data);}else{alert("success");}}});var currentStep=0;var previousStep=undefined;var form=$(this);var steps=$(this).find(".step");var backButton=$(this).find(settings.back);var nextButton=$(this).find(settings.next);var activatedSteps=new Array();var isLastStep=false;nextButton.click(function(){if(settings.validationEnabled){var valid=true;$.each(form.find("input:enabled, select:enabled"),function(){if(form.validate().element($(this))==false)
valid=false;})
if(!valid)return false;}
if(isLastStep){if(settings.formPluginEnabled){form.ajaxSubmit(formSettings);return false;}
form.submit();return false;}
if(settings.serverSideValidationUrls){var options=settings.serverSideValidationUrls[currentStep];if(options!=undefined){var success=options.success;$.extend(options,{success:function(data,statusText){if((success!=undefined&&success(data,statusText))||(success==undefined)){continueToNextStep();}}})
form.ajaxSubmit(options);return false;}}
continueToNextStep();return false;});backButton.click(function(){if(settings.historyEnabled&&activatedSteps.length>0){history.back();}else if(activatedSteps.length>0){handleHistory(activatedSteps[activatedSteps.length-2]);}
if(settings.afterBack)
settings.afterBack({"currentStep":currentStep,"previousStep":previousStep,"isLastStep":isLastStep,"activatedSteps":activatedSteps});return false;});function continueToNextStep(){navigate(currentStep);renderStep();if(settings.historyEnabled){$.historyLoad(currentStep);}else{handleHistory(currentStep);}
if(settings.afterNext)
settings.afterNext({"currentStep":currentStep,"previousStep":previousStep,"isLastStep":isLastStep,"activatedSteps":activatedSteps});}
function renderStep(){backButton.removeAttr("disabled");nextButton.val(settings.textNext);if(previousStep!=undefined){steps.eq(previousStep).hide().find(":input").attr("disabled","disabled");}
steps.eq(currentStep).fadeIn().find(":input").removeAttr("disabled");if(isLastStep){for(var i=0;i<activatedSteps.length;i++){steps.eq(activatedSteps[i]).find(":input").removeAttr("disabled");}
nextButton.val(settings.textSubmit);}else if(currentStep==0){backButton.attr("disabled","disabled");}}
function checkIflastStep(step){var link=getLink(step);isLastStep=false;if((("."+link)==settings.submitStepClass)||(link==undefined&&(step*1)==steps.length-1)){isLastStep=true;}}
function navigate(step){var link=getLink(step);if(link){var navigationTarget=steps.index($("#"+link));if(navigationTarget==-1){return;}else{previousStep=currentStep;currentStep=navigationTarget;}
checkIflastStep(step);}else if(link==undefined&&!isLastStep){previousStep=currentStep;currentStep++;checkIflastStep(currentStep);}}
function getLink(step){var link=undefined;var links=steps.eq((step*1)).find(settings.linkClass);if(links!=undefined&&links.length==1){link=links.val();}else if(links!=undefined&&links.length>1){link=steps.eq((step*1)).find(settings.linkClass+":checked").val();}
return link;}
function handleHistory(hash){if(!hash){hash=0;}
if(activatedSteps[activatedSteps.length-2]==hash){var elem=activatedSteps.pop();}else{activatedSteps.push(hash);}
previousStep=currentStep;currentStep=hash;checkIflastStep(hash);renderStep();}
function resetWizard(){form.resetForm();currentStep=0;for(var i=0;i<activatedSteps.length;i++){steps.eq(activatedSteps[i]).hide().find(":input").attr("disabled","disabled");}
previousStep=undefined;activatedSteps=new Array();isLastStep=false;if(settings.historyEnabled){$.historyLoad(0);}else{renderStep();}}
if(settings.historyEnabled&&$.historyInit==undefined){settings.historyEnabled=false;alert("the history plugin needs to be included");}else if(settings.historyEnabled){$.historyInit(handleHistory);}else{handleHistory(0);}
if(settings.validationEnabled&&jQuery().validate==undefined){settings.validationEnabled=false;alert("the validation plugin needs to be included");}else if(settings.validationEnabled){form.validate(validationSettings);}
if(settings.formPluginEnabled&&jQuery().ajaxSubmit==undefined){settings.formPluginEnabled=false;alert("the form plugin needs to be included");}
steps.hide();renderStep();backButton.val(settings.textBack);if(settings.callable==true){$.fn.formwizard=function(event){switch(event){case'reset':resetWizard();break;}
return $(this);};}
return $(this);};})(jQuery);
