(function($){
	/* to debug objects 
	usage: $("div p").debug();	*/
	$.fn.debug = function(){
		return this.each(function(){
			window.console?console.log(this):null;
		});
	};	
	
	/* to dump objects (http://binnyva.blogspot.com/2005/10/dump-function-javascript-equivalent-of.html) */
	dump = function(a,l){
		var d="";//dumped
		if(!l)l=0;//level
		var l_p = "";//level padding
		for(var j=0;j<l+1;j++) l_p+="  ";
		if(typeof(a)=='object'){//Array/Hashes/Objects
			for(var i=0;i<a.length;i++){
				var v=a[i]; 
				if(typeof(v)=='object'){//when Array,
					d+=l_p+"'"+i+"' ==>";
					d+=dump(v,l+1);
				}else{
					d+=l_p+"'"+i+"' => \""+v+"\"\n";
				}
			}
		}else{//Stings/Chars/Numbers etc.
			d=typeof(a)+" : "+a;
		}
		return d;
	}
	
	/* to show a msg (debugging only) 
	usage: (second param require Firebug extension)	
		say("this is a message","warn|log|info");
	*/		
	say = function(what,type){
		type=type||'log';
		window.console?eval("console."+type+"(what)"):alert(dump(what));
	}
	
	/* to highlight an element (beta)
	default: firstEvent:focus | activeClass:onFocus | lastEvent:blur
	usage:
		$("input:text, input:password, textarea").highlight();		
		$("ul li").highlight({ firstEvent:'mouseover', activeClass:'hover', lastEvent:'mouseout' });
	*/
	$.fn.highlight = function(settings){
		settings = jQuery.extend({
			activeClass:'onFocus',
			firstEvent:'focus',
			lastEvent:'blur'
		},settings);
		$(this)[settings.firstEvent](function(){ 
			$(this).addClass(settings.activeClass) 
		});
		$(this)[settings.lastEvent](function(){ 
			$(this).removeClass(settings.activeClass) 
		});
	}
	
	/* to preload images 
	usage: $.preloadImages("image1.gif", "/path/to/image2.png", "some/image3.jpg");
	*/
	$.preloadImages = function(){
		for(var i = 0; i<arguments.length; i++){
			$("<img>").attr("src", arguments[i]);
	 	}
	}
	
	/* kill default event 
	usage: myfunction(e){ kill(e); doStuffs() }	
	*/
	kill = function(e) {
		if (!e) e = window.event;
		(e.stopPropagation) ? e.stopPropagation() : e.cancelBubble = true;
		(e.preventDefault) ? e.preventDefault() : e.returnValue = false;
		return false;
	}
	
	

})(jQuery);