﻿/**
* jQuery.query - Query String Modification and Creation for jQuery
* Written by Blair Mitchelmore (blair DOT mitchelmore AT gmail DOT com)
* Licensed under the WTFPL (http://sam.zoy.org/wtfpl/).
* Date: 2008/05/28
*
* @author Blair Mitchelmore
* @version 2.0.1
*
**/
//http://plugins.jquery.com/project/query-object
new function(n) { var p = n.separator || '&'; var r = n.spaces === false ? false : true; var s = n.suffix === false ? '' : '[]'; var u = n.prefix === false ? false : true; var v = u ? n.hash === true ? "#" : "?" : ""; jQuery.query = new function() { var h = function(o, t) { return o != undefined && o !== null && (!!t ? o.constructor == t : true) }; var j = function(a) { var m, rx = /\[([^[]*)\]/g, match = /^(\S+?)(\[\S*\])?$/.exec(a), base = match[1], tokens = []; while (m = rx.exec(match[2])) tokens.push(m[1]); return [base, tokens] }; var k = function(a, b, c) { var o, token = b.shift(); if (typeof a != 'object') a = null; if (token === "") { if (!a) a = []; if (h(a, Array)) { a.push(b.length == 0 ? c : k(null, b.slice(0), c)) } else if (h(a, Object)) { var i = 0; while (a[i++] != null); a[--i] = b.length == 0 ? c : k(a[i], b.slice(0), c) } else { a = []; a.push(b.length == 0 ? c : k(null, b.slice(0), c)) } } else if (token && token.match(/^\s*[0-9]+\s*$/)) { var d = parseInt(token, 10); if (!a) a = []; a[d] = b.length == 0 ? c : k(a[d], b.slice(0), c) } else if (token) { var d = token.replace(/^\s*|\s*$/g, ""); if (!a) a = {}; if (h(a, Array)) { var e = {}; for (var i = 0; i < a.length; ++i) { e[i] = a[i] } a = e } a[d] = b.length == 0 ? c : k(a[d], b.slice(0), c) } else { return c } return a }; var l = function(a) { var c = this; c.keys = {}; if (a.queryObject) { jQuery.each(a.get(), function(a, b) { c.SET(a, b) }) } else { jQuery.each(arguments, function() { var q = "" + this; q = q.replace(/^[?#]/, ''); q = q.replace(/[;&]$/, ''); if (r) q = q.replace(/[+]/g, ' '); jQuery.each(q.split(/[&;]/), function() { var a = this.split('=')[0]; var b = this.split('=')[1]; if (!a) return; if (/^[+-]?[0-9]+\.[0-9]*$/.test(b)) b = parseFloat(b); else if (/^[+-]?[0-9]+$/.test(b)) b = parseInt(b, 10); b = (!b && b !== 0) ? true : b; if (b !== false && b !== true && typeof b != 'number') b = decodeURIComponent(b); c.SET(a, b) }) }) } return c }; l.prototype = { queryObject: true, has: function(a, b) { var c = this.get(a); return h(c, b) }, GET: function(a) { if (!h(a)) return this.keys; var b = j(a), base = b[0], tokens = b[1]; var c = this.keys[base]; while (c != null && tokens.length != 0) { c = c[tokens.shift()] } return typeof c == 'number' ? c : c || "" }, get: function(a) { var b = this.GET(a); if (h(b, Object)) return jQuery.extend(true, {}, b); else if (h(b, Array)) return b.slice(0); return b }, SET: function(a, b) { var c = !h(b) ? null : b; var d = j(a), base = d[0], tokens = d[1]; var e = this.keys[base]; this.keys[base] = k(e, tokens.slice(0), c); return this }, set: function(a, b) { return this.copy().SET(a, b) }, REMOVE: function(a) { return this.SET(a, null).COMPACT() }, remove: function(a) { return this.copy().REMOVE(a) }, EMPTY: function() { var c = this; jQuery.each(c.keys, function(a, b) { delete c.keys[a] }); return c }, empty: function() { return this.copy().EMPTY() }, copy: function() { return new l(this) }, COMPACT: function() { function build(c) { var d = typeof c == "object" ? h(c, Array) ? [] : {} : c; if (typeof c == 'object') { function add(o, a, b) { if (h(o, Array)) o.push(b); else o[a] = b } jQuery.each(c, function(a, b) { if (!h(b)) return true; add(d, a, build(b)) }) } return d } this.keys = build(this.keys); return this }, compact: function() { return this.copy().COMPACT() }, toString: function() { var i = 0, queryString = [], chunks = [], self = this; var f = function(a, b, c) { if (!h(c) || c === false) return; var o = [b]; if (c !== true) { o.push("="); o.push(encodeURIComponent(c)) } a.push(o.join("")) }; var g = function(c, d) { var e = function(a) { return !d || d == "" ? [a].join("") : [d, "[", a, "]"].join("") }; jQuery.each(c, function(a, b) { if (typeof b == 'object') g(b, e(a)); else f(chunks, e(a), b) }) }; g(this.keys); if (chunks.length > 0) queryString.push(v); queryString.push(chunks.join(p)); return queryString.join("") } }; return new l(location.search, location.hash) } } (jQuery.query || {});