function urlParser(url)
	{
	var pattern = /^(?:([a-zA-Z]+:\/\/)?([a-zA-Z0-9_\.-]+))?(?:((?:\/[a-zA-Z0-9_-]+)*\/)(?:((?:[a-zA-Z_\.0-9-]*))(?:\?)?([^#]*)?(.*)?)?)?$/;
	var parts   = url.match(pattern);
	var i=0;

	if(parts == null)
		{
		parts = new Array('','','','','','','');
		}

	this.scheme = (typeof(parts[1])!='undefined')?parts[1]:'';
	this.serverName = (typeof(parts[2])!='undefined')?parts[2]:'';
	this.path = (typeof(parts[3])!='undefined')?parts[3]:'';
	this.file = (typeof(parts[4])!='undefined')?parts[4]:'';
	this.last = (typeof(parts[6])!='undefined')?parts[6]:'';

	if(typeof(parts[5])!='undefined' && parts[5] != '')
		{
		var varsPart = parts[5].split("&");
		}
	else
		var varsPart = new Array();

	var nameValue = new Array();
	this.vars = new Object();

	for(i=0; i<varsPart.length; i++)
		{
		nameValue = varsPart[i].split("=");

		if(nameValue.length == 2)
			this.vars[nameValue[0]] = nameValue[1];
		else
			this.vars[nameValue[0]] = '';
		}

	this.addVariable = function (name, value)
		{
		value = value.toString();
		if(!value.indexOf('&') && !value.indexOf('?') && !value.indexOf('%') && !value.indexOf(' '))
			this.vars[name] = value;
		else
			{
			this.vars[name] = value.replace(/%/g,escape('%')).replace(/\?/g,escape('?')).replace(/&/g,escape('&'));
			}
		};

	this.removeVariable = function (name)
		{
		var newVars = new Object();

		for(var varName in this.vars)
			{
			if(varName != name)
				newVars[varName] = this.vars[varName];
			}

		this.vars = newVars;
		};

	this.removeAll= function ()
		{
		this.vars = new Object();
		};

	this.replace = function(name,value)
		{
		var vars = new Object();

		for(var varName in this.vars)
			{
			if(varName == name && value != null)
				{
				vars[varName] = value;
				inserted = true;
				}
			else if(varName == name && value == null)
				{
				}
			else
				{
				vars[varName] = this.vars[varName];
				}
			}

		if(value != null)
			vars[name] = value;

		var output = this.scheme + this.serverName + this.path + this.file, varStr = "";

		for(varName in vars)
			{
			varStr += varName+"="+vars[varName]+"&";
			}

		varStr = varStr.substr(0,varStr.length - 1);

		if(varStr!='')
			output += "?"+varStr;

		output += this.last;

		return output;
		}

	this.toString = function()
		{
		var output = this.scheme + this.serverName + this.path + this.file, varStr = "";
		
		for(name in this.vars)
			{
			varStr += name+"="+this.vars[name]+"&";
			}

		varStr = varStr.substr(0,varStr.length - 1);

		if(varStr!='')
			output += "?"+varStr;

		output += this.last;

		return output;
		};
	}

function LoadUrl(name,value,url)
	{
	url1 = new urlParser(url);
	url1.addVariable(name,value);

	return url1.toString();
	}

function UniqueUrl(name,value,url)
	{
	url1 = new urlParser(url);

	var duplicate=url1.vars;

	for(var VarName in duplicate)
		{
		if (VarName!=name) 	
			{
			url1.removeVariable(VarName);
			}
		}

	if (value!='')
	url1.addVariable(name,value);
	return url1.toString();
	}

function RemoveUrl(variables,url)
	{
	url1 = new urlParser(url);

	if (variables.length!='undefined')
		{	
		for(var VarKey in variables)
			{
			url1.removeVariable(variables[VarKey]);
			}
		}
	else if (variables!='')
		{
		url1.removeVariable(variables);
		}

	return url1.toString();
	}

function ChangeUrl(variables,url)
	{
	url1 = new urlParser(url);

	if (variables.length!='undefined')
		{	
		var vars = url1.vars;
		for(name in vars)
			{
			var check=0;
			for (VarKey in variables)
				{
				if (variables[VarKey]==name)
					check=1;
				}

			if (check==0)
				{
				url1.removeVariable(name);
				}
			}
		}
	else if (variables!='')
		{
		var vars = url1.Vars();
		for(name in vars)
			{
			if (variables!=name)
				{
				url1.removeVariable(name);
				}
			}
		}

	return url1.toString();
	}


