   (function(){ 
        
     var after_type_cast = {}; 
     var before_type_cast = {}; 
     var cached = false; 
        
     jQuery.query = function(cast) { 
       if(!cached) { 
	 // remove leading ? and trailing & 
	 var q = location.search.replace(/^\?/,'').replace(/\&$/,'').split('&'); 
	 for( var i = q.length - 1; i >= 0; i-- ) { 
	   var p = q[i].split('='), key = p[0], val = p[1]; 
	   before_type_cast[key] = val; 
	   // convert floats 
	   if(/^[0-9.]+$/.test(val)) 
	     val = parseFloat(val); 
	   // convert booleans 
	   if(/^(true|false)$/.test(val)) 
	     val = (val == 'true'); 
	   // ingnore empty values 
	   if(val) 
	     after_type_cast[key] = val; 
	 } 
	 cached = true; 
       } 
       return cast === false ? before_type_cast : after_type_cast; 
     }; 

   })(); 

