
String.prototype.parseURL = function(query)
{
	var
		url=this,
		rx=/^((?:ht|f|nn)tps?)\:\/\/(?:([^\:\@]*)(?:\:([^\@]*))?\@)?([^\/]*)([^\?\#]*)(?:\?([^\#]*))?(?:\#(.*))?$/,
		rg=[null,'scheme','user','pass','host','path','query','fragment'],
		r=url.match(rx),i,q,ret={};

	if ( null == r ) { return ret; }

	for ( i=1; i<rg.length; i++ ) {
		if ( undefined != r[i] ) {
			ret[rg[i]]=r[i];
		}
	}

	if (ret.path=='') ret.path='/';

	if ( query!=undefined && r[6]!=undefined ) {
		var q=r[6];
		ret.query={};
		q=q.split('&');
		for (var i=0; i<q.length; i++) {
			q[i]=q[i].split('=',2);
			ret.query[unescape(q[i][0])]=unescape(q[i][1]);
		}
	}

	return ret;
};


(function() {

	// if( !document.cookie ) { return; }

	// document.cookie = 'meincookie=meinwert; expires=Thu, 01-Jan-70 00:00:01 GMT;';
	// document.cookie = 'meincookie=meinwert;';
	// document.cookie = 'pp[parameter]=Hello World;';
// alert(document.cookie);
	// cookieName=cookieValue[;expires=dataAsString[;path=pathAsString[;domain=domainAsString[;secure]]]]

	page = {};

	var undefined = undefined;

	page.cookie = new function()
	{
		var parent = page;

		this.set = function(c, v, params)
		{
			var 
				params = params || {},
				global = params.global || false;

				// cookieName=cookieValue[;expires=dataAsString[;path=pathAsString[;domain=domainAsString[;secure]]]]
				document.cookie = c+'='+v+';';
		},

		this.unset = function(c)
		{
			var v = this.get(c)
			if ( v = undefined ) {
				return;
			}

			document.cookie = c+'='+v+'; expires=Thu, 01-Jan-70 00:00:01 GMT;';
		},

		this.get = function(c, def)
		{
			var 
				cookies = (new String(document.cookie)).split(';')
				cookie = [],
				cookieName = '',
				cookieValue = null;

			for ( var i in cookies ) {
				cookie = cookies[i].split('=');
				cookieName = cookie[0].replace(/\s/, '');
				cookieValue = cookie[1];
				if ( cookieName == c ) {
					return cookieValue;
				}
			}

			return null;
		}
	};

	// page.cookie.set('test', encodeURIComponent("bla=blub"));
	// page.cookie.unset('test');
	// alert(decodeURIComponent(page.cookie.get('test')));

	page.parameter = new function()
	{
		var 
			parent = page;

		this.get = function(p, def)
		{
			var
				def = def || undefined,
				parameters = decodeURIComponent(page.cookie.get('pp', '')).split(";"),
				parameter = [];

			if ( !p ) {
				return def; // throw new error('parameter name not provided');
			}

			for ( var i in parameters ) {
				parameter = parameters[i].split('=');
				if ( parameter[0] === p ) {
					return parameter[1];
				}
			}

			return def;
		};

		this.hasParameter = function(p)
		{
			return false;
		};

		this.set = function(p, v)
		{
			var
				parameters = [],
				_parameters = decodeURIComponent(page.cookie.get('pp', '')).split(";") || [],
				parameter = [];

			for ( var i in _parameters ) {
				parameter = _parameters[i].split('=');
				if ( 2 != parameter.length || parameter[0] === p ) {
					continue;
				}

				parameters.push(parameter.join('='));
			}

			if ( v ) {
				parent.cookie.set("pp", encodeURIComponent(parameters.join(';')+';'+p+'='+v));
			} else {
				parent.cookie.set("pp", encodeURIComponent(parameters.join(';')));
			}
		};

		this.unset = function(p)
		{
			this.set(p);
		};
	};

	/*
	$('a', 'body').live('click', function(e)
	{
		e.preventDefault();
		alert($(this).attr('href'));
	});
	*/

})();
