/*! jQuery UI Widget 1.8.2
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses. */
(function($){
var _remove=$.fn.remove;
$.fn.remove=function(selector,keepData){
return this.each(function(){
if(!keepData){if(!selector||$.filter(selector,[this]).length){$("*",this).add(this).each(function(){$(this).triggerHandler("remove");});}}
return _remove.call($(this),selector,keepData);
});
};
$.widget=function(name,base,prototype){
var namespace=name.split(".")[0],fullName;name=name.split(".")[1];fullName=namespace+"-"+name;
if(!prototype){prototype=base;base=$.Widget;}
$.expr[":"][fullName]=function(elem){return !!$.data(elem,name);};
$[namespace]=$[namespace]||{};
$[namespace][name]=function(options,element){if(arguments.length){this._createWidget(options,element);}};
var basePrototype=new base();
basePrototype.options=$.extend({},basePrototype.options);
$[namespace][name].prototype=$.extend(true,basePrototype,{namespace:namespace,widgetName:name,widgetEventPrefix:$[namespace][name].prototype.widgetEventPrefix||name,widgetBaseClass:fullName},prototype);
$.widget.bridge(name,$[namespace][name]);
};
$.widget.bridge=function(name,object){
$.fn[name]=function(options){
var isMethodCall=typeof options==="string",args=Array.prototype.slice.call(arguments,1),returnValue=this;
options=!isMethodCall&&args.length?$.extend.apply(null,[true,options].concat(args)):options;
if(isMethodCall&&options.substring(0,1)==="_"){return returnValue;}
if(isMethodCall){this.each(function(){var instance=$.data(this,name),methodValue=instance&&$.isFunction(instance[options])?instance[options].apply(instance,args):instance;
if(methodValue!==instance&&methodValue!==undefined){returnValue=methodValue;return false;}});}
else{this.each(function(){var instance=$.data(this,name);
if(instance){if(options){instance.option(options);}instance._init();}else{$.data(this,name,new object(options,this));}});}
return returnValue;
};
};
$.Widget=function(options,element){if(arguments.length){this._createWidget(options,element);}};
$.Widget.prototype={
widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},
_createWidget:function(options,element){
this.element=$(element).data(this.widgetName,this);this.options=$.extend(true,{},this.options,$.metadata&&$.metadata.get(element)[this.widgetName],options);
var self=this;this.element.bind("remove."+this.widgetName,function(){self.destroy();});
this._create();
this._init();
},
_create:function(){},
_init:function(){},
destroy:function(){
this.element.unbind("."+this.widgetName).removeData(this.widgetName);
this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled "+"ui-state-disabled");
},
widget:function(){return this.element;},
option:function(key,value){
var options=key,self=this;
if(arguments.length===0){return $.extend({},self.options);}
if(typeof key==="string"){
if(value===undefined){return this.options[ key ];}
options={};options[key]=value;}
$.each(options,function(key,value){self._setOption(key,value);});
return self;
},
_setOption:function(key,value){this.options[key]=value;
if(key==="disabled"){this.widget()[value?"addClass":"removeClass"](this.widgetBaseClass+"-disabled"+" "+"ui-state-disabled").attr("aria-disabled",value);}
return this;
},
enable:function(){return this._setOption("disabled",false);},
disable:function(){return this._setOption("disabled",true);},
_trigger:function(type,event,data){var callback=this.options[type];
event=$.Event(event);event.type=(type===this.widgetEventPrefix?type:this.widgetEventPrefix+type).toLowerCase();data=data||{};
if(event.originalEvent){for(var i=$.event.props.length,prop;i;){prop=$.event.props[--i];event[prop]=event.originalEvent[prop];}}
this.element.trigger(event,data);
return !($.isFunction(callback)&&callback.call(this.element[0],event,data)===false||event.isDefaultPrevented());
}
};
})(jQuery);
