new function(settings){var $separator=settings.separator||"&",$spaces=settings.spaces===false?false:true,$suffix=settings.suffix===false?"":"[]",$prefix=settings.prefix===false?false:true,$hash=$prefix?settings.hash===true?"#":"?":"",$numbers=settings.numbers===false?false:true;jQuery.query=new function(){var is=function(o,t){return o!=undefined&&o!==null&&(!!t?o.constructor==t:true)},parse=function(path){var m,rx=/\[([^[]*)\]/g,match=/^([^[]+?)(\[.*\])?$/.exec(path),base=match[1],tokens=[];while(m=rx.exec(match[2]))tokens.push(m[1]);return [base,tokens]},set=function(target,tokens,value){var o,token=tokens.shift();if(typeof target!="object")target=null;if(token===""){if(!target)target=[];if(is(target,Array))target.push(tokens.length==0?value:set(null,tokens.slice(0),value));else if(is(target,Object)){var i=0;while(target[i++]!=null);target[--i]=tokens.length==0?value:set(target[i],tokens.slice(0),value)}else{target=[];target.push(tokens.length==0?value:set(null,tokens.slice(0),value))}}else if(token&&token.match(/^\s*[0-9]+\s*$/)){var index=parseInt(token,10);if(!target)target=[];target[index]=tokens.length==0?value:set(target[index],tokens.slice(0),value)}else if(token){var index=token.replace(/^\s*|\s*$/g,"");if(!target)target={};if(is(target,Array)){for(var temp={},i=0;i<target.length;++i)temp[i]=target[i];target=temp}target[index]=tokens.length==0?value:set(target[index],tokens.slice(0),value)}else return value;return target},queryObject=function(a){var self=this;self.keys={};if(a.queryObject)jQuery.each(a.get(),function(key,val){self.SET(key,val)});else jQuery.each(arguments,function(){var q=""+this;q=q.replace(/^[?#]/,"");q=q.replace(/[;&]$/,"");if($spaces)q=q.replace(/[+]/g," ");jQuery.each(q.split(/[&;]/),function(){var key=decodeURIComponent(this.split("=")[0]||""),val=decodeURIComponent(this.split("=")[1]||"");if(!key)return;if($numbers)if(/^[+-]?[0-9]+\.[0-9]*$/.test(val))val=parseFloat(val);else if(/^[+-]?[0-9]+$/.test(val))val=parseInt(val,10);val=!val&&val!==0?true:val;if(val!==false&&val!==true&&typeof val!="number")val=val;self.SET(key,val)})});return self};queryObject.prototype={queryObject:true,has:function(key,type){var value=this.get(key);return is(value,type)},GET:function(key){if(!is(key))return this.keys;var parsed=parse(key),base=parsed[0],tokens=parsed[1],target=this.keys[base];while(target!=null&&tokens.length!=0)target=target[tokens.shift()];return typeof target=="number"?target:target||""},"get":function(key){var target=this.GET(key);if(is(target,Object))return jQuery.extend(true,{},target);else if(is(target,Array))return target.slice(0);return target},SET:function(key,val){var value=!is(val)?null:val,parsed=parse(key),base=parsed[0],tokens=parsed[1],target=this.keys[base];this.keys[base]=set(target,tokens.slice(0),value);return this},"set":function(key,val){return this.copy().SET(key,val)},REMOVE:function(key){return this.SET(key,null).COMPACT()},remove:function(key){return this.copy().REMOVE(key)},EMPTY:function(){var self=this;jQuery.each(self.keys,function(key,value){delete self.keys[key]});return self},load:function(url){var hash=url.replace(/^.*?[#](.+?)(?:\?.+)?$/,"$1"),search=url.replace(/^.*?[?](.+?)(?:#.+)?$/,"$1");return new queryObject(url.length==search.length?"":search,url.length==hash.length?"":hash)},empty:function(){return this.copy().EMPTY()},copy:function(){return new queryObject(this)},COMPACT:function(){function build(orig){var obj=typeof orig=="object"?is(orig,Array)?[]:{}:orig;if(typeof orig=="object"){function add(o,key,value){if(is(o,Array))o.push(value);else o[key]=value}jQuery.each(orig,function(key,value){if(!is(value))return true;add(obj,key,build(value))})}return obj}this.keys=build(this.keys);return this},compact:function(){return this.copy().COMPACT()},toString:function(){var i=0,queryString=[],chunks=[],self=this,encode=function(str){str=str+"";if($spaces)str=str.replace(/ /g,"+");return encodeURIComponent(str)},addFields=function(arr,key,value){if(!is(value)||value===false)return;var o=[encode(key)];if(value!==true){o.push("=");o.push(encode(value))}arr.push(o.join(""))},build=function(obj,base){var newKey=function(key){return !base||base==""?[key].join(""):[base,"[",key,"]"].join("")};jQuery.each(obj,function(key,value){if(typeof value=="object")build(value,newKey(key));else addFields(chunks,newKey(key),value)})};build(this.keys);chunks.length>0&&queryString.push($hash);queryString.push(chunks.join($separator));return queryString.join("")}};return new queryObject(location.search,location.hash)}}(jQuery.query||{})