( function($) {

	/*
	 * Tabs Extensions
	 */

	/*
	 * wafSelect
	 */
	$.extend($.ui.tabs.prototype,
			{
			    refresh:    function(index) {
			    	if (this.options.selected == index) {
			    		// load
			    		this.load(index);
			    	} else {
			    		// select
			    		this.select(index);
			    	}
			    },
			    /**
			     * 
			     */
				wafSelect : function(index, handler) {
					if (this.anchors.eq(index).data("cache.tabs")) {
						this.select(index);
						handler(null, this._ui(this.anchors[index],
								this.panels[index]));
					} else if (this.options.selected == index
							&& this.element.queue("tabs").length == 0) {
						handler(null, this._ui(this.anchors[index],
								this.panels[index]));
					} else {
						var self = this;
						if (this.options.selected != index
								&& this.element.queue("tabs").length > 0) {
							if (this.options.ajaxOptions == null) {
								this.options.ajaxOptions = {};
							}
							this.options.ajaxOptions.success = function(r, s) {
								self.options.ajaxOptions.success = function(r,
										s) {
									self.options.ajaxOptions.success = null;
									handler(null, self._ui(self.anchors[index],
											self.panels[index]));
								};
								self.select(index);
							}
						} else {
							if (this.options.ajaxOptions == null) {
								this.options.ajaxOptions = {};
							}
							this.options.ajaxOptions.success = function(r, s) {
								self.options.ajaxOptions.success = null;
								handler(null, self._ui(self.anchors[index],
										self.panels[index]));
							};
							if (this.options.selected != index) {
								this.select(index);
							}
						}
					}
				}
			});
	
	$.History.regexps = [];
    $.History.bindRegexp = function(regexp, handler, context, data) {
        $.History.regexps.push({
            regexp: regexp,
            handler: handler,
            context: context,
            data: data
        });
    };
    $.History.bind(function(hash) {
        $.each($.History.regexps, function(i, val) {
            var result = val.regexp.exec(hash);
            val.regexp.lastIndex = 0;
            if (result) {
                result.shift();
                result.push(val.data);
                val.handler.apply(val.context, result);
                return false;
            }
        });
    });
    $.History.changeState = function(state) {
        $.History.setHash(state);
        $.History.setState(state);
    };
    
})(jQuery);

