/*TITLE: Client-Side Request Object for javascript by Andrew Urquhart (UK)
HOME: http://andrewu.co.uk/request.asp
COPYRIGHT: You are free to use this script for any use you deem it suitable
for. However, you may not pass it off as your own work. This comment message
must remain with the script, removing it forfeits your right to use the script
for free. Do not redistribute, instead provide a link to the HOME URL. 
Donations from commercial or government users are always appreciated! This 
script is provided as is, with no warranty. Use it at your own risk. I do 
not guarantee that it is error free. © Andrew Urquhart 2002-01-07 14:29
MODIFICATIONS:
If you make any improvements or find/fix any bugs, please send me a copy.
If your modifications are useful I'll add your name to a contributors list.
VERSION: #0.67 Beta 2002-01-07 14:29*/
function RObj(ea) {
var LS="";var QS=new Object()
function Err(arg) {if (ea) alert("Request Object Error:\n====================\n"+arg)}
function URID(t) {var d="";if (t) {for (var i=0; i<t.length; ++i) {var c=t.charAt(i);d+=(c=="+" ? " ":c);};};return unescape(d);}
function OL(o) {var l=0;for (var i in o) {if (typeof(o[i])!="function") l++;};return l;}
function AK(key) {var auk=true;for (var u in QS) {if (typeof(QS[u])!="function" && u.toString().toLowerCase()==key.toLowerCase()) {auk=false;return u;}};if (auk) {QS[key]=new Object();QS[key].toString=function() {return TS(QS[key])};QS[key].Count=function() {return OL(QS[key])};QS[key].Count.toString=function() {return OL(QS[key]).toString()};QS[key].Item=function(e) {if (typeof(e)=="undefined") return QS[key];else {if (typeof(e)=="number") {var a=QS[key][Math.ceil(e)];if (typeof(a)=="undefined") Err("ERROR: Index out of range in\nRequest.QueryString(\""+key+"\").Item("+e+")");return a;}else Err("ERROR: Expecting numeric input in\nRequest.QueryString(\""+key+"\").Item(\""+e+"\")");}};QS[key].Item.toString=function(e) {if (typeof(e)=="undefined") return QS[key].toString();else {var a=QS[key][e];if (typeof(a)=="undefined") Err("ERROR: Index out of range in\nRequest.QueryString(\""+key+"\").Item("+e+")");return a.toString();};};QS[key].Key=function(e) {var t=typeof(e);if (t=="string") {var a=QS[key][e];return (typeof(a)!="undefined" && a && a.toString() ? e:"");}else Err("ERROR: Object doesn't support this property or method\nRequest.QueryString.Key("+(e?e:"")+")");};QS[key].Key.toString=function() {return "undefined"};};return key}
function AVTK(key, val) {if (key!="") {var key=AK(key);var l=OL(QS[key]);QS[key][l+1]=val;}}
function TS(o) {var s="";for (var i in o) {var ty=typeof(o[i]);if (ty=="object") s+=TS(o[i]);else if (ty!="function") s+=o[i]+", ";};var l=s.length;if (l>1) return(s.substring(0,l-2));return (s=="" ? "undefined":s);}
function KM(k, o) {var k=k.toLowerCase();for (var u in o) {if (typeof(o[u])!="function" && u.toString().toLowerCase()==k) return u;};}
if (window.location && window.location.search) {LS=window.location.search;var l=LS.length;if (l>0) {LS=LS.substring(1,l);var preAmpAt=0;var ampAt=-1;var eqAt=-1;var k=0;var skip=false;for (var i=0; i<l; ++i) {var c=LS.charAt(i);if (LS.charAt(preAmpAt)=="=" || (preAmpAt==0 && i==0 && c=="=")) skip=true;if (c=="=" && eqAt==-1 && !skip) eqAt=i;if (c=="&" && ampAt==-1) {if (eqAt!=-1) ampAt=i;if (skip) preAmpAt=i+1;skip=false;};if (ampAt>eqAt) {AVTK(URID(LS.substring(preAmpAt,eqAt)),URID(LS.substring(eqAt+1,ampAt)));preAmpAt=ampAt+1;eqAt=ampAt=-1;++k;};};if (LS.charAt(preAmpAt)!="=" && (preAmpAt!=0 || i!=0 || c!="=")) {if (preAmpAt!=l) {if (eqAt!=-1) AVTK(URID(LS.substring(preAmpAt,eqAt)),URID(LS.substring(eqAt+1,l)));else if (preAmpAt!=l-1) AVTK(URID(LS.substring(preAmpAt,l)),"");};if (l==1) AVTK(LS.substring(0,1),"");};};};var TC=OL(QS);if (!TC) TC=0
QS.toString=function() {return LS.toString()};QS.Count=function() {return (TC ? TC:0)};QS.Count.toString=function() {return (TC ? TC.toString():"0")};QS.Item=function(e) {if (typeof(e)=="undefined") return LS;else {if (typeof(e)=="number") {var e=Math.ceil(e);var c=0;for (var i in QS) {if (typeof(QS[i])!="function" && ++c==e) return QS[i];};Err("ERROR: Index out of range in\nRequest.QueryString().Item("+e+")");}else return QS[KM(e, QS)];};return "undefined";};QS.Item.toString=function() {return LS.toString()};QS.Key=function(e) {var t=typeof(e);if (t=="number") {var e=Math.ceil(e);var c=0;for (var i in QS) {if (typeof(QS[i])!="function" && ++c==e) return i;}}else if (t=="string") {var e=KM(e, QS);var a=QS[e];return (typeof(a)!="undefined" && a && a.toString() ? e:"");}else Err("ERROR: Wrong number of arguments or invalid property assignment\nRequest.QueryString().Key("+(e?e:"")+")");Err("ERROR: Index out of range in\nRequest.QueryString().Item("+e+")");};QS.Key.toString=function() {Err("ERROR: Wrong number of arguments or invalid property assignment\nRequest.QueryString().Key");}
this.QueryString=function(k) {if (typeof(k)=="undefined") return QS;else {var k=KM(k, QS);if (typeof(QS[k])=="undefined") {t=new Object();t.Count=function() {return 0};t.Count.toString=function() {return "0"};t.toString=function() {return "undefined"};t.Item=function(e) {return "undefined"};t.Item.toString=function() {return "undefined"};t.Key=function(e) {Err("ERROR: Object doesn't support this property or method\nRequest.QueryString.Key("+(e?e:"")+")");};t.Key.toString=function() {return "undefined"};return t;}if (typeof(k)=="number") return QS.Item(k);else return QS[k];}}
this.QueryString.toString=function() {return LS.toString();};this.QueryString.Count=function() {return (TC ? TC:0)};this.QueryString.Count.toString=function() {return (TC ? TC.toString():"0")};this.QueryString.Item=function(e) {if (typeof(e)=="undefined") return LS.toString();else {if (typeof(e)=="number") {var e=Math.ceil(e);var c=0;for (var i in QS) {if (typeof(QS[i])!="function" && ++c==e) return QS[i];};Err("ERROR: Index out of range in\nRequest.QueryString.Item("+e+")");}else return QS[KM(e, QS)];}if (typeof(e)==("number")) Err("ERROR: Index out of range in\nRequest.QueryString.Item("+e+")");return "undefined";}
this.QueryString.Item.toString=function() {return LS.toString()};this.QueryString.Key=function(e) {var t=typeof(e);if (t=="number") {var e=Math.ceil(e);var c=0;for (var i in QS) {if (typeof(QS[i])=="object" && (++c==e)) {return i;}}}else if (t=="string") {var e=KM(e, QS);var a=QS[e];return (typeof(a)!="undefined" && a && a.toString() ? e:"");}else Err("ERROR: Wrong number of arguments or invalid property assignment\nRequest.QueryString.Key("+(e?e:"")+")");Err("ERROR: Index out of range in\nRequest.QueryString.Item("+e+")");};this.QueryString.Key.toString=function() {Err("ERROR: Wrong number of arguments or invalid property assignment\nRequest.QueryString.Key");};this.Version=0.67;this.Author="<A HREF=\"http://andrewu.co.uk/request.asp?ref=CSJSRequestObjectSrc\">Andrew Urquhart</A>";}
var Request=new RObj(true);