/**
 * @include jquery_dispose
 * @require jquery
 */
(function( $ ){
	
	function bindAll(){
		$('*').each(function( i ){
			if( i % 3 == 0 )// each three elements
				$(this).bind('change foo bar', function(){}).data('cucu', {});
		});
		var a = 1;
	};
	
	var dummy = {};
	$.data( dummy );
	for( var expando in dummy ) break;
	
	function each_bound( node, fn ){
		node = node || document;
		
		var nodes = node.getElementsByTagName('*'),
			index = nodes.length,
			events;
			
		nodes[ index ] = node;
		
		do{
			node = nodes[ index ];
			if( node && node.nodeType == 1 && node[ expando ] && ( events = $.data(node, 'events') ) )
				fn( node, events );
				
		}while( index-- );
	};
	
	function my_dispose(){
		each_bound( document, function( node ){
			$.event.remove( node );
			$.removeData( node );
		});
	};
	
	function jq_dispose(){
		// adding removeData
		$("*").add(document).unbind().removeData();
	};
	
	var fns = [
		bindAll,
		function(){
			Benchmarker().run( 1, my_dispose, 'my_dispose', true );
		},
		bindAll,
		function(){
			Benchmarker().run( 1, jq_dispose, 'jq_dispose', true );
		}
	];
	
	function run(){
		var fn = fns.shift();
		if( fn ){
			setTimeout(function(){
				fn();
				run();
			}, 500 );
		}
	};
	
	run();
	

})( jQuery );
