function QueryParser(str) { /******************** QueryParser ********************** ********************* by Airshow ********************** *** http://www.daniweb.com/forums/member512379.html *** ********* Please keep this attribution intact *********/ if (str) { str = unescape(str); if (str.indexOf("?") === 0) { str = str.substring(1); } var args = str.split("&"); for (var i = 0; i < args.length; i++) { var pair = args[i].split("="); if (pair.length >= 1) { var prop = pair.shift(); this[prop] = (pair.length == 1) ? pair[0] : (pair.length > 1) ? pair.join('=') : ''; } } } this.set = function (prop, value) { return this[prop] = value; }; this.clear = function (prop) { if(typeof this[prop] !== 'undefined') { this.set(prop, null); return true; } else { return false; } }; this.build = function (baseURL, hashName) { baseURL = (!baseURL || typeof baseURL !== 'string') ? '?' : (baseURL.indexOf("?") === -1) ? (baseURL + '?') : baseURL; hashName = (!hashName || typeof hashName !== 'string') ? '' : (hashName.indexOf("#") === -1) ? ('#' + hashName) : hashName; var strArray = []; for (var prop in this) { if (typeof this[prop] !== 'undefined' && typeof this[prop] !== 'function' && this[prop] !== null) { strArray.push([prop, '=', this[prop]].join('')); } } return baseURL + strArray.join('&') + hashName; }; this.buildLink = function (baseURL, linkTxt) { var url = this.build(baseURL); return [ '', ((!linkTxt) ? url : linkTxt), '' ].join(''); }; }