var init = jQuery.prototype.init;
jQuery.prototype.init = function(a,c) {
	// Call the original init and save the result
	var r = init.apply(this, arguments);
	
	// Copy over properties if they exist already
	if (a && a.selector)
		r.context = a.context, r.selector = a.selector;
		
	// Set properties
	if ( typeof a == 'string' )
		r.context = c || document, r.selector = a;
	
	// Return the result
	return r;
};


jQuery._behaviorStack = [];

jQuery.fn.addBehavior = function(creator,extra){
	if(!this.selector)
		return;
	if(extra) {
		var on = creator;
		var creator = extra;
	} else {
		on = false;
	}
	jQuery._behaviorStack.push({
		'event'		: on,
		'selector'	: this.selector,
		'creator'	: creator
	});
	if(on!==false) {
		jQuery(this.selector).bind(on,creator);
	} else {
		jQuery(this.selector).each(creator);
	}
}

jQuery.fn.addAjaxBehavior = function(creator,extra){
	if(!this.selector) {
		return;
	}	
	if(extra) {
		var on      = creator;
		var creator = extra;
	} else {
		on = false;
	}
	jQuery._behaviorStack.push({
		'event'		: on,
		'selector'	: this.selector,
		'creator'	: creator,
		'persistent': true
	});
	if(on!==false) {
		jQuery(this.selector).bind(on,creator);
	} else {
		jQuery(this.selector).each(creator);
	}
}



jQuery(document).ajaxComplete(function(){
	if(jQuery._behaviorStack.length) {
		jQuery.each(jQuery._behaviorStack,function(i,behavior){
			if(!behavior.persistent)
				return;
			if(behavior.event) {
				jQuery(behavior.selector).bind(behavior.event,behavior.creator);
			} else {
				jQuery(behavior.selector).each(behavior.creator);
			}
		});
	}
});

