diff --git a/ajax/libs/twitter-bootstrap-wizard/1.0/jquery.bootstrap.wizard.js b/ajax/libs/twitter-bootstrap-wizard/1.0/jquery.bootstrap.wizard.js new file mode 100644 index 000000000..a1a12fe50 --- /dev/null +++ b/ajax/libs/twitter-bootstrap-wizard/1.0/jquery.bootstrap.wizard.js @@ -0,0 +1,255 @@ +/*! + * jQuery twitter bootstrap wizard plugin + * Examples and documentation at: http://github.com/VinceG/twitter-bootstrap-wizard + * version 1.0 + * Requires jQuery v1.3.2 or later + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * Authors: Vadim Vincent Gabriel (http://vadimg.com), Jason Gill (www.gilluminate.com) + */ +;(function($) { +var bootstrapWizardCreate = function(element, options) { + var element = $(element); + var obj = this; + + // Merge options with defaults + var $settings = $.extend({}, $.fn.bootstrapWizard.defaults, options); + var $activeTab = null; + var $navigation = null; + + this.fixNavigationButtons = function() { + // Get the current active tab + if(!$activeTab.length) { + // Select first one + $navigation.find('a:first').tab('show'); + $activeTab = $navigation.find('li:first'); + } + + // See if we're currently in the first/last then disable the previous and last buttons + $($settings.previousSelector, element).toggleClass('disabled', (obj.firstIndex() >= obj.currentIndex())); + $($settings.nextSelector, element).toggleClass('disabled', (obj.currentIndex() >= obj.navigationLength())); + + // We are unbinding and rebinding to ensure single firing and no double-click errors + $($settings.nextSelector, element).unbind('click', obj.next); + $($settings.previousSelector, element).unbind('click', obj.previous); + $($settings.lastSelector, element).unbind('click', obj.last); + $($settings.firstSelector, element).unbind('click', obj.first); + // Next/Previous events + $($settings.nextSelector, element).one('click', obj.next); + $($settings.previousSelector, element).one('click', obj.previous); + $($settings.lastSelector, element).one('click', obj.last); + $($settings.firstSelector, element).one('click', obj.first); + + if($settings.onTabShow && typeof $settings.onTabShow === 'function' && $settings.onTabShow($activeTab, $navigation, obj.currentIndex())===false){ + return false; + } + }; + + this.next = function(e) { + + // If we clicked the last then dont activate this + if(element.hasClass('last')) { + return false; + } + + if($settings.onNext && typeof $settings.onNext === 'function' && $settings.onNext($activeTab, $navigation, obj.nextIndex())===false){ + return false; + } + + // Did we click the last button + $index = obj.nextIndex(); + if($index > obj.navigationLength()) { + } else { + $navigation.find('li:eq('+$index+') a').tab('show'); + } + }; + + this.previous = function(e) { + + // If we clicked the first then dont activate this + if(element.hasClass('first')) { + return false; + } + + if($settings.onPrevious && typeof $settings.onPrevious === 'function' && $settings.onPrevious($activeTab, $navigation, obj.previousIndex())===false){ + return false; + } + + $index = obj.previousIndex(); + if($index < 0) { + } else { + $navigation.find('li:eq('+$index+') a').tab('show'); + } + }; + + this.first = function(e) { + if($settings.onFirst && typeof $settings.onFirst === 'function' && $settings.onFirst($activeTab, $navigation, obj.firstIndex())===false){ + return false; + } + + // If the element is disabled then we won't do anything + if(element.hasClass('disabled')) { + return false; + } + $navigation.find('li:eq(0) a').tab('show'); + + }; + this.last = function(e) { + if($settings.onLast && typeof $settings.onLast === 'function' && $settings.onLast($activeTab, $navigation, obj.lastIndex())===false){ + return false; + } + + // If the element is disabled then we won't do anything + if(element.hasClass('disabled')) { + return false; + } + $navigation.find('li:eq('+obj.navigationLength()+') a').tab('show'); + }; + this.currentIndex = function() { + return $navigation.find('li').index($activeTab); + }; + this.firstIndex = function() { + return 0; + }; + this.lastIndex = function() { + return obj.navigationLength(); + }; + this.getIndex = function(e) { + return $navigation.find('li').index(e); + }; + this.nextIndex = function() { + return $navigation.find('li').index($activeTab) + 1; + }; + this.previousIndex = function() { + return $navigation.find('li').index($activeTab) - 1; + }; + this.navigationLength = function() { + return $navigation.find('li').length - 1; + }; + this.activeTab = function() { + return $activeTab; + }; + this.nextTab = function() { + return $navigation.find('li:eq('+(obj.currentIndex()+1)+')').length ? $navigation.find('li:eq('+(obj.currentIndex()+1)+')') : null; + }; + this.previousTab = function() { + if(obj.currentIndex() <= 0) { + return null; + } + return $navigation.find('li:eq('+parseInt(obj.currentIndex()-1)+')'); + }; + this.show = function(index) { + return element.find('li:eq(' + index + ') a').tab('show'); + }; + this.disable = function(index) { + $navigation.find('li:eq('+index+')').addClass('disabled'); + }; + this.enable = function(index) { + $navigation.find('li:eq('+index+')').removeClass('disabled'); + }; + this.hide = function(index) { + $navigation.find('li:eq('+index+')').hide(); + }; + this.display = function(index) { + $navigation.find('li:eq('+index+')').show(); + }; + this.remove = function(args) { + var $index = args[0]; + var $removeTabPane = typeof args[1] != 'undefined' ? args[1] : false; + var $item = $navigation.find('li:eq('+$index+')'); + + // Remove the tab pane first if needed + if($removeTabPane) { + var $href = $item.find('a').attr('href'); + $($href).remove(); + } + + // Remove menu item + $item.remove(); + }; + + $navigation = element.find('ul:first', element); + $activeTab = $navigation.find('li.active', element); + + if(!$navigation.hasClass($settings.tabClass)) { + $navigation.addClass($settings.tabClass); + } + + // Load onInit + if($settings.onInit && typeof $settings.onInit === 'function'){ + $settings.onInit($activeTab, $navigation, 0); + } + + // Load onShow + if($settings.onShow && typeof $settings.onShow === 'function'){ + $settings.onShow($activeTab, $navigation, obj.nextIndex()); + } + + // Work the next/previous buttons + obj.fixNavigationButtons(); + + $('a[data-toggle="tab"]', $navigation).on('click', function (e) { + // Get the index of the clicked tab + var clickedIndex = $navigation.find('li').index($(e.currentTarget).parent('li')); + if($settings.onTabClick && typeof $settings.onTabClick === 'function' && $settings.onTabClick($activeTab, $navigation, obj.currentIndex(), clickedIndex)===false){ + return false; + } + }); + + $('a[data-toggle="tab"]', $navigation).on('shown', function (e) { // use shown instead of show to help prevent double firing + $element = $(e.target).parent(); + var nextTab = $navigation.find('li').index($element); + + // If it's disabled then do not change + if($element.hasClass('disabled')) { + return false; + } + + if($settings.onTabChange && typeof $settings.onTabChange === 'function' && $settings.onTabChange($activeTab, $navigation, obj.currentIndex(), nextTab)===false){ + return false; + } + + $activeTab = $element; // activated tab + obj.fixNavigationButtons(); + }); +}; +$.fn.bootstrapWizard = function(options) { + //expose methods + if (typeof options == 'string') { + var args = Array.prototype.slice.call(arguments, 1) + if(args.length === 1) { + args.toString(); + } + return this.data('bootstrapWizard')[options](args); + } + return this.each(function(index){ + var element = $(this); + // Return early if this element already has a plugin instance + if (element.data('bootstrapWizard')) return; + // pass options to plugin constructor + var wizard = new bootstrapWizardCreate(element, options); + // Store plugin object in this element's data + element.data('bootstrapWizard', wizard); + }); +}; + +// expose options +$.fn.bootstrapWizard.defaults = { + tabClass: 'nav nav-pills', + nextSelector: '.wizard li.next', + previousSelector: '.wizard li.previous', + firstSelector: '.wizard li.first', + lastSelector: '.wizard li.last', + onShow: null, + onInit: null, + onNext: null, + onPrevious: null, + onLast: null, + onFirst: null, + onTabChange: null, + onTabClick: null, + onTabShow: null +}; + +})(jQuery); diff --git a/ajax/libs/twitter-bootstrap-wizard/1.0/jquery.bootstrap.wizard.min.js b/ajax/libs/twitter-bootstrap-wizard/1.0/jquery.bootstrap.wizard.min.js new file mode 100644 index 000000000..96e55f69e --- /dev/null +++ b/ajax/libs/twitter-bootstrap-wizard/1.0/jquery.bootstrap.wizard.min.js @@ -0,0 +1,19 @@ +/*! + * jQuery twitter bootstrap wizard plugin + * Examples and documentation at: http://github.com/VinceG/twitter-bootstrap-wizard + * version 1.0 + * Requires jQuery v1.3.2 or later + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * Authors: Vadim Vincent Gabriel (http://vadimg.com), Jason Gill (www.gilluminate.com) + */ +(function(e){var k=function(d,g){d=e(d);var b=this,a=e.extend({},e.fn.bootstrapWizard.defaults,g),f=null,c=null;this.fixNavigationButtons=function(){f.length||(c.find("a:first").tab("show"),f=c.find("li:first"));e(a.previousSelector,d).toggleClass("disabled",b.firstIndex()>=b.currentIndex());e(a.nextSelector,d).toggleClass("disabled",b.currentIndex()>=b.navigationLength());e(a.nextSelector,d).unbind("click",b.next);e(a.previousSelector,d).unbind("click",b.previous);e(a.lastSelector,d).unbind("click", +b.last);e(a.firstSelector,d).unbind("click",b.first);e(a.nextSelector,d).one("click",b.next);e(a.previousSelector,d).one("click",b.previous);e(a.lastSelector,d).one("click",b.last);e(a.firstSelector,d).one("click",b.first);if(a.onTabShow&&"function"===typeof a.onTabShow&&!1===a.onTabShow(f,c,b.currentIndex()))return!1};this.next=function(h){if(d.hasClass("last")||a.onNext&&"function"===typeof a.onNext&&!1===a.onNext(f,c,b.nextIndex()))return!1;$index=b.nextIndex();$index>b.navigationLength()||c.find("li:eq("+ +$index+") a").tab("show")};this.previous=function(h){if(d.hasClass("first")||a.onPrevious&&"function"===typeof a.onPrevious&&!1===a.onPrevious(f,c,b.previousIndex()))return!1;$index=b.previousIndex();0>$index||c.find("li:eq("+$index+") a").tab("show")};this.first=function(h){if(a.onFirst&&"function"===typeof a.onFirst&&!1===a.onFirst(f,c,b.firstIndex())||d.hasClass("disabled"))return!1;c.find("li:eq(0) a").tab("show")};this.last=function(h){if(a.onLast&&"function"===typeof a.onLast&&!1===a.onLast(f, +c,b.lastIndex())||d.hasClass("disabled"))return!1;c.find("li:eq("+b.navigationLength()+") a").tab("show")};this.currentIndex=function(){return c.find("li").index(f)};this.firstIndex=function(){return 0};this.lastIndex=function(){return b.navigationLength()};this.getIndex=function(a){return c.find("li").index(a)};this.nextIndex=function(){return c.find("li").index(f)+1};this.previousIndex=function(){return c.find("li").index(f)-1};this.navigationLength=function(){return c.find("li").length-1};this.activeTab= +function(){return f};this.nextTab=function(){return c.find("li:eq("+(b.currentIndex()+1)+")").length?c.find("li:eq("+(b.currentIndex()+1)+")"):null};this.previousTab=function(){return 0>=b.currentIndex()?null:c.find("li:eq("+parseInt(b.currentIndex()-1)+")")};this.show=function(a){return d.find("li:eq("+a+") a").tab("show")};this.disable=function(a){c.find("li:eq("+a+")").addClass("disabled")};this.enable=function(a){c.find("li:eq("+a+")").removeClass("disabled")};this.hide=function(a){c.find("li:eq("+ +a+")").hide()};this.display=function(a){c.find("li:eq("+a+")").show()};this.remove=function(a){var b="undefined"!=typeof a[1]?a[1]:!1;a=c.find("li:eq("+a[0]+")");b&&(b=a.find("a").attr("href"),e(b).remove());a.remove()};c=d.find("ul:first",d);f=c.find("li.active",d);c.hasClass(a.tabClass)||c.addClass(a.tabClass);if(a.onInit&&"function"===typeof a.onInit)a.onInit(f,c,0);if(a.onShow&&"function"===typeof a.onShow)a.onShow(f,c,b.nextIndex());b.fixNavigationButtons();e('a[data-toggle="tab"]',c).on("click", +function(d){d=c.find("li").index(e(d.currentTarget).parent("li"));if(a.onTabClick&&"function"===typeof a.onTabClick&&!1===a.onTabClick(f,c,b.currentIndex(),d))return!1});e('a[data-toggle="tab"]',c).on("shown",function(d){$element=e(d.target).parent();d=c.find("li").index($element);if($element.hasClass("disabled")||a.onTabChange&&"function"===typeof a.onTabChange&&!1===a.onTabChange(f,c,b.currentIndex(),d))return!1;f=$element;b.fixNavigationButtons()})};e.fn.bootstrapWizard=function(d){if("string"== +typeof d){var g=Array.prototype.slice.call(arguments,1);1===g.length&&g.toString();return this.data("bootstrapWizard")[d](g)}return this.each(function(b){b=e(this);if(!b.data("bootstrapWizard")){var a=new k(b,d);b.data("bootstrapWizard",a)}})};e.fn.bootstrapWizard.defaults={tabClass:"nav nav-pills",nextSelector:".wizard li.next",previousSelector:".wizard li.previous",firstSelector:".wizard li.first",lastSelector:".wizard li.last",onShow:null,onInit:null,onNext:null,onPrevious:null,onLast:null,onFirst:null, +onTabChange:null,onTabClick:null,onTabShow:null}})(jQuery); diff --git a/ajax/libs/twitter-bootstrap-wizard/1.1/jquery.bootstrap.wizard.js b/ajax/libs/twitter-bootstrap-wizard/1.1/jquery.bootstrap.wizard.js new file mode 100644 index 000000000..b556ba863 --- /dev/null +++ b/ajax/libs/twitter-bootstrap-wizard/1.1/jquery.bootstrap.wizard.js @@ -0,0 +1,280 @@ +/*! + * jQuery twitter bootstrap wizard plugin + * Examples and documentation at: http://github.com/VinceG/twitter-bootstrap-wizard + * version 1.0 + * Requires jQuery v1.3.2 or later + * Supports Bootstrap 2.2.x, 2.3.x, 3.0 + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * Authors: Vadim Vincent Gabriel (http://vadimg.com), Jason Gill (www.gilluminate.com) + */ +;(function($) { +var bootstrapWizardCreate = function(element, options) { + var element = $(element); + var obj = this; + + // selector skips any 'li' elements that do not contain a child with a tab data-toggle + var baseItemSelector = 'li:has([data-toggle="tab"])'; + + // Merge options with defaults + var $settings = $.extend({}, $.fn.bootstrapWizard.defaults, options); + var $activeTab = null; + var $navigation = null; + + this.rebindClick = function(selector, fn) + { + selector.unbind('click', fn).bind('click', fn); + } + + this.fixNavigationButtons = function() { + // Get the current active tab + if(!$activeTab.length) { + // Select first one + $navigation.find('a:first').tab('show'); + $activeTab = $navigation.find(baseItemSelector + ':first'); + } + + // See if we're currently in the first/last then disable the previous and last buttons + $($settings.previousSelector, element).toggleClass('disabled', (obj.firstIndex() >= obj.currentIndex())); + $($settings.nextSelector, element).toggleClass('disabled', (obj.currentIndex() >= obj.navigationLength())); + + // We are unbinding and rebinding to ensure single firing and no double-click errors + obj.rebindClick($($settings.nextSelector, element), obj.next); + obj.rebindClick($($settings.previousSelector, element), obj.previous); + obj.rebindClick($($settings.lastSelector, element), obj.last); + obj.rebindClick($($settings.firstSelector, element), obj.first); + + if($settings.onTabShow && typeof $settings.onTabShow === 'function' && $settings.onTabShow($activeTab, $navigation, obj.currentIndex())===false){ + return false; + } + }; + + this.next = function(e) { + + // If we clicked the last then dont activate this + if(element.hasClass('last')) { + return false; + } + + if($settings.onNext && typeof $settings.onNext === 'function' && $settings.onNext($activeTab, $navigation, obj.nextIndex())===false){ + return false; + } + + // Did we click the last button + $index = obj.nextIndex(); + if($index > obj.navigationLength()) { + } else { + $navigation.find(baseItemSelector + ':eq('+$index+') a').tab('show'); + } + }; + + this.previous = function(e) { + + // If we clicked the first then dont activate this + if(element.hasClass('first')) { + return false; + } + + if($settings.onPrevious && typeof $settings.onPrevious === 'function' && $settings.onPrevious($activeTab, $navigation, obj.previousIndex())===false){ + return false; + } + + $index = obj.previousIndex(); + if($index < 0) { + } else { + $navigation.find(baseItemSelector + ':eq('+$index+') a').tab('show'); + } + }; + + this.first = function(e) { + if($settings.onFirst && typeof $settings.onFirst === 'function' && $settings.onFirst($activeTab, $navigation, obj.firstIndex())===false){ + return false; + } + + // If the element is disabled then we won't do anything + if(element.hasClass('disabled')) { + return false; + } + $navigation.find(baseItemSelector + ':eq(0) a').tab('show'); + + }; + this.last = function(e) { + if($settings.onLast && typeof $settings.onLast === 'function' && $settings.onLast($activeTab, $navigation, obj.lastIndex())===false){ + return false; + } + + // If the element is disabled then we won't do anything + if(element.hasClass('disabled')) { + return false; + } + $navigation.find(baseItemSelector + ':eq('+obj.navigationLength()+') a').tab('show'); + }; + this.currentIndex = function() { + return $navigation.find(baseItemSelector).index($activeTab); + }; + this.firstIndex = function() { + return 0; + }; + this.lastIndex = function() { + return obj.navigationLength(); + }; + this.getIndex = function(e) { + return $navigation.find(baseItemSelector).index(e); + }; + this.nextIndex = function() { + return $navigation.find(baseItemSelector).index($activeTab) + 1; + }; + this.previousIndex = function() { + return $navigation.find(baseItemSelector).index($activeTab) - 1; + }; + this.navigationLength = function() { + return $navigation.find(baseItemSelector).length - 1; + }; + this.activeTab = function() { + return $activeTab; + }; + this.nextTab = function() { + return $navigation.find(baseItemSelector + ':eq('+(obj.currentIndex()+1)+')').length ? $navigation.find(baseItemSelector + ':eq('+(obj.currentIndex()+1)+')') : null; + }; + this.previousTab = function() { + if(obj.currentIndex() <= 0) { + return null; + } + return $navigation.find(baseItemSelector + ':eq('+parseInt(obj.currentIndex()-1)+')'); + }; + this.show = function(index) { + return element.find(baseItemSelector + ':eq(' + index + ') a').tab('show'); + }; + this.disable = function(index) { + $navigation.find(baseItemSelector + ':eq('+index+')').addClass('disabled'); + }; + this.enable = function(index) { + $navigation.find(baseItemSelector + ':eq('+index+')').removeClass('disabled'); + }; + this.hide = function(index) { + $navigation.find(baseItemSelector + ':eq('+index+')').hide(); + }; + this.display = function(index) { + $navigation.find(baseItemSelector + ':eq('+index+')').show(); + }; + this.remove = function(args) { + var $index = args[0]; + var $removeTabPane = typeof args[1] != 'undefined' ? args[1] : false; + var $item = $navigation.find(baseItemSelector + ':eq('+$index+')'); + + // Remove the tab pane first if needed + if($removeTabPane) { + var $href = $item.find('a').attr('href'); + $($href).remove(); + } + + // Remove menu item + $item.remove(); + }; + + var innerTabClick = function (e) { + // Get the index of the clicked tab + var clickedIndex = $navigation.find(baseItemSelector).index($(e.currentTarget).parent(baseItemSelector)); + if($settings.onTabClick && typeof $settings.onTabClick === 'function' && $settings.onTabClick($activeTab, $navigation, obj.currentIndex(), clickedIndex)===false){ + return false; + } + }; + + var innerTabShown = function (e) { // use shown instead of show to help prevent double firing + $element = $(e.target).parent(); + var nextTab = $navigation.find(baseItemSelector).index($element); + + // If it's disabled then do not change + if($element.hasClass('disabled')) { + return false; + } + + if($settings.onTabChange && typeof $settings.onTabChange === 'function' && $settings.onTabChange($activeTab, $navigation, obj.currentIndex(), nextTab)===false){ + return false; + } + + $activeTab = $element; // activated tab + obj.fixNavigationButtons(); + }; + + this.resetWizard = function() { + + // remove the existing handlers + $('a[data-toggle="tab"]', $navigation).off('click', innerTabClick); + $('a[data-toggle="tab"]', $navigation).off('shown shown.bs.tab', innerTabShown); + + // reset elements based on current state of the DOM + $navigation = element.find('ul:first', element); + $activeTab = $navigation.find(baseItemSelector + '.active', element); + + // re-add handlers + $('a[data-toggle="tab"]', $navigation).on('click', innerTabClick); + $('a[data-toggle="tab"]', $navigation).on('shown shown.bs.tab', innerTabShown); + + obj.fixNavigationButtons(); + }; + + $navigation = element.find('ul:first', element); + $activeTab = $navigation.find(baseItemSelector + '.active', element); + + if(!$navigation.hasClass($settings.tabClass)) { + $navigation.addClass($settings.tabClass); + } + + // Load onInit + if($settings.onInit && typeof $settings.onInit === 'function'){ + $settings.onInit($activeTab, $navigation, 0); + } + + // Load onShow + if($settings.onShow && typeof $settings.onShow === 'function'){ + $settings.onShow($activeTab, $navigation, obj.nextIndex()); + } + + $('a[data-toggle="tab"]', $navigation).on('click', innerTabClick); + + // attach to both shown and shown.bs.tab to support Bootstrap versions 2.3.2 and 3.0.0 + $('a[data-toggle="tab"]', $navigation).on('shown shown.bs.tab', innerTabShown); + + this.fixNavigationButtons(); +}; +$.fn.bootstrapWizard = function(options) { + //expose methods + if (typeof options == 'string') { + var args = Array.prototype.slice.call(arguments, 1) + if(args.length === 1) { + args.toString(); + } + return this.data('bootstrapWizard')[options](args); + } + return this.each(function(index){ + var element = $(this); + // Return early if this element already has a plugin instance + if (element.data('bootstrapWizard')) return; + // pass options to plugin constructor + var wizard = new bootstrapWizardCreate(element, options); + // Store plugin object in this element's data + element.data('bootstrapWizard', wizard); + }); +}; + +// expose options +$.fn.bootstrapWizard.defaults = { + tabClass: 'nav nav-pills', + nextSelector: '.wizard li.next', + previousSelector: '.wizard li.previous', + firstSelector: '.wizard li.first', + lastSelector: '.wizard li.last', + onShow: null, + onInit: null, + onNext: null, + onPrevious: null, + onLast: null, + onFirst: null, + onTabChange: null, + onTabClick: null, + onTabShow: null +}; + +})(jQuery); diff --git a/ajax/libs/twitter-bootstrap-wizard/1.1/jquery.bootstrap.wizard.min.js b/ajax/libs/twitter-bootstrap-wizard/1.1/jquery.bootstrap.wizard.min.js new file mode 100644 index 000000000..c30a36c97 --- /dev/null +++ b/ajax/libs/twitter-bootstrap-wizard/1.1/jquery.bootstrap.wizard.min.js @@ -0,0 +1,20 @@ +/*! + * jQuery twitter bootstrap wizard plugin + * Examples and documentation at: http://github.com/VinceG/twitter-bootstrap-wizard + * version 1.0 + * Requires jQuery v1.3.2 or later + * Supports Bootstrap 2.2.x, 2.3.x, 3.0 + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * Authors: Vadim Vincent Gabriel (http://vadimg.com), Jason Gill (www.gilluminate.com) + */ +(function(e){var k=function(d,g){d=e(d);var a=this,b=e.extend({},e.fn.bootstrapWizard.defaults,g),f=null,c=null;this.rebindClick=function(b,a){b.unbind("click",a).bind("click",a)};this.fixNavigationButtons=function(){f.length||(c.find("a:first").tab("show"),f=c.find('li:has([data-toggle="tab"]):first'));e(b.previousSelector,d).toggleClass("disabled",a.firstIndex()>=a.currentIndex());e(b.nextSelector,d).toggleClass("disabled",a.currentIndex()>=a.navigationLength());a.rebindClick(e(b.nextSelector,d), +a.next);a.rebindClick(e(b.previousSelector,d),a.previous);a.rebindClick(e(b.lastSelector,d),a.last);a.rebindClick(e(b.firstSelector,d),a.first);if(b.onTabShow&&"function"===typeof b.onTabShow&&!1===b.onTabShow(f,c,a.currentIndex()))return!1};this.next=function(h){if(d.hasClass("last")||b.onNext&&"function"===typeof b.onNext&&!1===b.onNext(f,c,a.nextIndex()))return!1;$index=a.nextIndex();$index>a.navigationLength()||c.find('li:has([data-toggle="tab"]):eq('+$index+") a").tab("show")};this.previous= +function(h){if(d.hasClass("first")||b.onPrevious&&"function"===typeof b.onPrevious&&!1===b.onPrevious(f,c,a.previousIndex()))return!1;$index=a.previousIndex();0>$index||c.find('li:has([data-toggle="tab"]):eq('+$index+") a").tab("show")};this.first=function(h){if(b.onFirst&&"function"===typeof b.onFirst&&!1===b.onFirst(f,c,a.firstIndex())||d.hasClass("disabled"))return!1;c.find('li:has([data-toggle="tab"]):eq(0) a').tab("show")};this.last=function(h){if(b.onLast&&"function"===typeof b.onLast&&!1=== +b.onLast(f,c,a.lastIndex())||d.hasClass("disabled"))return!1;c.find('li:has([data-toggle="tab"]):eq('+a.navigationLength()+") a").tab("show")};this.currentIndex=function(){return c.find('li:has([data-toggle="tab"])').index(f)};this.firstIndex=function(){return 0};this.lastIndex=function(){return a.navigationLength()};this.getIndex=function(a){return c.find('li:has([data-toggle="tab"])').index(a)};this.nextIndex=function(){return c.find('li:has([data-toggle="tab"])').index(f)+1};this.previousIndex= +function(){return c.find('li:has([data-toggle="tab"])').index(f)-1};this.navigationLength=function(){return c.find('li:has([data-toggle="tab"])').length-1};this.activeTab=function(){return f};this.nextTab=function(){return c.find('li:has([data-toggle="tab"]):eq('+(a.currentIndex()+1)+")").length?c.find('li:has([data-toggle="tab"]):eq('+(a.currentIndex()+1)+")"):null};this.previousTab=function(){return 0>=a.currentIndex()?null:c.find('li:has([data-toggle="tab"]):eq('+parseInt(a.currentIndex()-1)+")")}; +this.show=function(a){return d.find('li:has([data-toggle="tab"]):eq('+a+") a").tab("show")};this.disable=function(a){c.find('li:has([data-toggle="tab"]):eq('+a+")").addClass("disabled")};this.enable=function(a){c.find('li:has([data-toggle="tab"]):eq('+a+")").removeClass("disabled")};this.hide=function(a){c.find('li:has([data-toggle="tab"]):eq('+a+")").hide()};this.display=function(a){c.find('li:has([data-toggle="tab"]):eq('+a+")").show()};this.remove=function(a){var b="undefined"!=typeof a[1]?a[1]: +!1;a=c.find('li:has([data-toggle="tab"]):eq('+a[0]+")");b&&(b=a.find("a").attr("href"),e(b).remove());a.remove()};c=d.find("ul:first",d);f=c.find('li:has([data-toggle="tab"]).active',d);c.hasClass(b.tabClass)||c.addClass(b.tabClass);if(b.onInit&&"function"===typeof b.onInit)b.onInit(f,c,0);if(b.onShow&&"function"===typeof b.onShow)b.onShow(f,c,a.nextIndex());a.fixNavigationButtons();e('a[data-toggle="tab"]',c).on("click",function(d){d=c.find('li:has([data-toggle="tab"])').index(e(d.currentTarget).parent('li:has([data-toggle="tab"])')); +if(b.onTabClick&&"function"===typeof b.onTabClick&&!1===b.onTabClick(f,c,a.currentIndex(),d))return!1});e('a[data-toggle="tab"]',c).on("shown shown.bs.tab",function(d){$element=e(d.target).parent();d=c.find('li:has([data-toggle="tab"])').index($element);if($element.hasClass("disabled")||b.onTabChange&&"function"===typeof b.onTabChange&&!1===b.onTabChange(f,c,a.currentIndex(),d))return!1;f=$element;a.fixNavigationButtons()})};e.fn.bootstrapWizard=function(d){if("string"==typeof d){var g=Array.prototype.slice.call(arguments, +1);1===g.length&&g.toString();return this.data("bootstrapWizard")[d](g)}return this.each(function(a){a=e(this);if(!a.data("bootstrapWizard")){var b=new k(a,d);a.data("bootstrapWizard",b)}})};e.fn.bootstrapWizard.defaults={tabClass:"nav nav-pills",nextSelector:".wizard li.next",previousSelector:".wizard li.previous",firstSelector:".wizard li.first",lastSelector:".wizard li.last",onShow:null,onInit:null,onNext:null,onPrevious:null,onLast:null,onFirst:null,onTabChange:null,onTabClick:null,onTabShow:null}})(jQuery);