
function isArray(obj) {
	   		if (obj.constructor.toString().indexOf("Array") == -1)
	 	    	return false;
	  		else
	     	 	return true;
	}


if(typeof URL=="undefined")
{
	var URL  = {
		hash:window.location.hash,
		pathname:window.location.pathname,
		search:window.location.search,
		host:window.location.host,
		protocol:window.location.protocol,
		hashTable:null,
		searchTable:null,

		/* Creates URL.hashTable from window.location.hash */
		getHashTable:function()
		{
			var start;
			var z=0;
			var getList=[];
			var getTable=[];
			var tableValues;
			var name="";
			var value="";
			var unescapedName;

			getList=location.hash.substring(1).split('&');

			for(var i=0;i<getList.length;i++){
				if(getList[i].indexOf('=')!=-1){
					name=getList[i].split('=')[0];
					unescapedName=unescape(name);
					name=escape(unescapedName.replace('[]',''));

					value=getList[i].split('=')[1];

					if(unescapedName.indexOf('[]')!=-1){
						if(getTable[name]){
							getTable[name][getTable[name].length]=value;
						}else{
							getTable[name]=[];
							getTable[name][0]=value;
						}
					}else{
						getTable[name]=value;
					}
				}
			}

			URL.hashTable=getTable;
		},

		/* Creates URL.searchTable from window.location.search */

		getSearchTable:function()
		{
			var start;
			var z=0;
			var getList=[];
			var getTable=[];
			var tableValues;
			var name="";
			var value="";
			var unescapedName;

			if(URL.search)
				getList=location.search.substring(1).split('&');

			for(var i=0;i<getList.length;i++){
				if(getList[i].indexOf('=')!=-1){
					name=getList[i].split('=')[0];
					unescapedName=unescape(name);
					name=escape(unescapedName.replace('[]',''));


					value=getList[i].split('=')[1];

					if(unescapedName.indexOf('[]')!=-1){
						if(getTable[name]){
							getTable[name][getTable[name].length]=value;
						}else{
							getTable[name]=[];
							getTable[name][0]=value;
						}
					}else{
						getTable[name]=value;
					}
				}
			}
			URL.searchTable=getTable;
		},

		/* Creates (or replaces if exists) new value in URL.searchTable */

		setNewSearchValue:function(key,value){
			URL.searchTable[key]=value;
			URL.createNewSearch();
		},

		removeSearchKey:function(key){
			if(typeof URL.searchTable[key]!="undefined")
				delete(URL.searchTable[key]);
			URL.createNewSearch();
		},

		/* Converts URL.searchTable into string and sets URL.search */

		createNewSearch:function(){
			URL.search='';
			var i;
			for (var key in URL.searchTable){
				if(isArray(URL.searchTable[key])){
					i=0;
					while(URL.searchTable[key][i])
						URL.search+=key+'[]='+URL.searchTable[key][i++]+'&';
				}else{
					URL.search+=key+'='+URL.searchTable[key]+'&';
				}
			}
			if(URL.search!='')
				URL.search=URL.search.substring(0,URL.search.length-1);
		},

		/* Creates (or replaces if exists) new value in URL.hashTable */

		setNewHashValue:function(key,value){
			URL.hashTable[key]=value;
			URL.createNewHash();
		},

		/* Converts URL.hashTable into string and sets URL.hash */

		createNewHash:function(){
			URL.hash='';
			var i;
			for (var key in URL.hashTable){
				if(isArray(URL.hashTable[key])){
					i=0;
					while(URL.hashTable[key][i])
						URL.hash+=key+'[]='+URL.hashTable[key][i++]+'&';
				}else{
					URL.hash+=key+'='+URL.hashTable[key]+'&';
				}
			}
			if(URL.hash!='')
				URL.hash=URL.hash.substring(0,URL.hash.length-1);
		},

		/* Creates complete url from new values of URL.search and URL.hash */

		createNewURL:function(){
			URL.newURL=URL.protocol+'//'+URL.host;
			if((URL.pathname)&&(URL.pathname!='/'))URL.newURL+=URL.pathname;
			if(URL.search)URL.newURL+='?'+URL.search;
			if(URL.hash)URL.newURL+=URL.hash;
		},

		restoreURL:function(){
			URL.getHashTable();
			URL.getSearchTable();
		}
	};

	URL.getHashTable();
	URL.getSearchTable();
}
