/*
	JS Library	:	QueryString
	Description	:	QueryString manipulation library
	Author		:	Eung Chan Park
	Date		:	2009-03-03
*/

var QueryString = function()	{
	var KeyValue = function()	{
	    var Key = "";
	    var Value = "";
	};

	var private = {
		URLPart: "",
    	QueryStringCollection: null
	};
    
    var public = {
	    Init: function()   {
	        var sRawURL = window.location.href;
	        var sRawQS = "";
	        var iPos = sRawURL.indexOf("?");
	        var aPart, aSubPart;
	        var i;
	        var oKeyValue;
	        
	        private.QueryStringCollection = new Array();
	        
	        if (iPos > -1)  {
	        	private.URLPart = sRawURL.substring(0, iPos);
	            sRawQS = sRawURL.substring(iPos + 1);
	        }
	        else	{
	        	private.URLPart = sRawURL;
	        }
	        
	        if (sRawQS != "")   {
	            aPart = sRawQS.split("&");

	            for (i = 0; i < aPart.length; i++)  {
	                aSubPart = aPart[i].split("=");
	                oKeyValue = new KeyValue();
	                if (aSubPart.length > 0)    {
	                    oKeyValue.Key = aSubPart[0];
	                }
	                if (aSubPart.length > 1)    {
	                    oKeyValue.Value = aSubPart[1];
	                }
	                private.QueryStringCollection[private.QueryStringCollection.length] = oKeyValue;
	            }
	        }
		},
		
		Items: function()	{
			return private.QueryStringCollection;
		},

		Add: function(sKey, sValue)	{
			var bFound = false;
			var bProceed;
			var oNewKeyValue;
			var oKeyValue;
			var oNewCollection = new Array();
			var i;
			
			for (i = 0; i < private.QueryStringCollection.length; i++)	{
				oKeyValue = private.QueryStringCollection[i];
				bProceed = true;
				if (oKeyValue.Key == sKey)	{
					if (sValue == "")	{
						bProceed = false;
					}
					else	{
						oKeyValue.Value = sValue;
						bFound = true;
					}
				}
				if (bProceed)	{
					oNewCollection[oNewCollection.length] = oKeyValue;
				}
			}

			if (!bFound)	{
				oNewKeyValue = new KeyValue();
				oNewKeyValue.Key = sKey;
				oNewKeyValue.Value = sValue;
				oNewCollection[oNewCollection.length] = oNewKeyValue;
			}
			private.QueryStringCollection = oNewCollection;
		},

		Remove: function(sKey)	{
			var oNewCollection = new Array();
			var oKeyValue;
			var i;
			
			for (i = 0; i < private.QueryStringCollection.length; i++)	{
				oKeyValue = private.QueryStringCollection[i];
				if (oKeyValue.Key != sKey)	{
					oNewCollection[oNewCollection.length] = oKeyValue;
				}
			}

			private.QueryStringCollection = oNewCollection;
		},

		Clear: function()	{
			private.QueryStringCollection = new Array();
		},
			
		Get: function(sKey)	{
			var oKeyValue;
			var i;
			
			for (i = 0; i < private.QueryStringCollection.length; i++)	{
				oKeyValue = private.QueryStringCollection[i];
				if (oKeyValue.Key == sKey)	{
					return oKeyValue.Value;
				}
			}
			return "";
		},
			
		GetNewQueryString: function()	{
			var sQueryString = "";
			var oKeyValue;
			var i;
			
			for (i = 0; i < private.QueryStringCollection.length; i++)	{
				oKeyValue = private.QueryStringCollection[i];
				if (oKeyValue.Value != "")	{
					if (sQueryString != "") { sQueryString += "&"; }
					sQueryString += oKeyValue.Key + "=" + encodeURIComponent(oKeyValue.Value);
				}
			}

			if (sQueryString != "")	{
				return private.URLPart + "?" + sQueryString;
			}
			else	{
				return private.URLPart;
			}
		}
    }

    return public;
}();
