;(function($){var
f=function(){},emptyInstance=function(c){f.prototype=(c._constructor||c).prototype;return new f();},callConstructor=function(obj,args){return obj.init.apply(emptyInstance(obj),args);},getConstructor=function(){return(function(list){var constructor=arguments.callee,obj=this instanceof constructor?this:emptyInstance(constructor);if(list&&list._constructor===constructor)
return obj.setArray(list.get());return obj.init.apply(obj,arguments);});};var $collection=$.collection=getConstructor();$.extend($collection,{extend:$.extend,fn:$collection.prototype,statics:'extend,build,include,implement',build:function(){var constr=getConstructor();this.include(constr,this,$collection.statics);constr.prototype=constr.fn=emptyInstance(this);constr._constructor=constr.fn._constructor=constr;return constr;},include:function(target,source,methods,parse){if(!methods||!methods.slice){[].unshift.call(arguments,this);return this.include.apply(this,arguments);}
$.each(methods.split?methods.split(/\s?,\s?/):methods,function(i,func){target[func]=parse?parse(source[func],func,source):source[func];});return target;},implement:function(source,methods){this.fn.include(source,methods,function(method){return function(){var args=arguments;return this.map(function(){return method.apply(this,args);});};});}});$collection.extend($collection.fn,{extend:$collection.extend,include:$collection.include,init:function(els){var items=typeof els=='object'&&'length'in els?els:arguments;return this.setArray(items);},filter:function(filter){if(typeof filter!='function'){var out=filter.constructor==Array?filter:[filter];filter=function(){return $.inArray(this,out)!=-1;};}
return this.pushStack($.grep(this,function(e,i){return filter.call(e,i);}));},not:function(right){right=this.filter(right);return this.filter(function(){return $.inArray(this,right)==-1;});},is:function(s){return!!(s&&this.filter(s).length);},add:function(){return this.pushStack($.merge(this.get(),callConstructor(this,arguments)));},pushStack:function(items){var ret=emptyInstance(this).setArray(items.get?items.get():items);ret.prevObject=this;return ret;},end:function(){return this.prevObject||callConstructor(this);},attr:function(key,value){return value===undefined?this[0]!=null&&this[0][key]:this.each(function(){this[key]=value;});}});$collection.fn.include($.fn,'each,extend,index,setArray,get,size,eq,slice,map,andSelf');})(jQuery);