new function(settings){var $separator=settings.separator||"&";var $spaces=settings.spaces===false?false:true;var $suffix=settings.suffix===false?"":"[]";var $prefix=settings.prefix===false?false:true;var $hash=$prefix?settings.hash===true?"#":"?":"";var $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);
};var 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];};var 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)){var temp={};for(var 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;};var 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]||"");var 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];var 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;var parsed=parse(key),base=parsed[0],tokens=parsed[1];var 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");var 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;var encode=function(str){str=str+"";
if($spaces){str=str.replace(/ /g,"+");}return encodeURIComponent(str);};var 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(""));};var 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);if(chunks.length>0){queryString.push($hash);}queryString.push(chunks.join($separator));return queryString.join("");}};return new queryObject(location.search,location.hash);
};}(jQuery.query||{});
