(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 2)
	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)
			.bind(settings.firstEvent,function(){
				$(this).addClass(settings.activeClass)
			})
			.bind(settings.lastEvent,function(){
				$(this).removeClass(settings.activeClass)
			})
	}	
	
	/* to preload images 
	usage: preload("img1.gif","img2.jpg");
	*/
	preloadImages = function(){
		var images = new Array();
		var path = preloadImages.arguments[0];
		for (i=1; i < preloadImages.arguments.length; i++){
			images[i] = new Image();
			images[i].src = path + preloadImages.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;
	}
	
	/* call a link 
	usage: goto('index.php') */
	goto = function(url){
		window.location = url;
	}
	
	/* Definition List Accordion 
	usage: 
		<dl id='test'>...
		$("#test").DLaccordion()
	*/
	$.fn.DLaccordion = function(){
		$(this).each(function(){
			selectedItem = window.location.href.split("#")[1] || false; //if url has #number
			var titles = $("dt",this);
			if (!selectedItem) selectedItemObj = $(titles).filter(":first");
			else selectedItemObj = $("#item-"+selectedItem);			
			selectedItemObj.addClass("selected").next().css("display","block");
			titles.click(function(e){
				kill(e);
				if( !$(this).is(".selected") ){
					$(this).siblings("dt").removeClass("selected").siblings("dd").filter(":visible").slideUp();
					//.hide();
					$(this).addClass("selected").next().slideDown();
				}
			});			
		});
	}
	
	/* Get URL variables
	usage:
		url -> www.site.com?myVar=100
		urlVar = getURLvar("myVar"); //returns 100
	*/
	getURLvar = function(name){
		name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
		var regexS = "[\\?&]"+name+"=([^&#]*)";
		var regex = new RegExp( regexS );
		var results = regex.exec( window.location.href );
		return results == null ? "" : results[1];
	}
	
	/* new PopUp Window
	usage:
		popup("myURL.htm","myWindow","scrollbar=no");
	*/
	popup = function(url, name, properties){
		var newPopup = window.open(url, name, properties);
	}
	
})(jQuery);
