
$(function()
{
	n$.signal('dom.load');
});


(function() {
	var 
		window = this,

		undefined,

		// for later pupose (noConfict)
		_n$ = window.n$,

		// for later pupose (noConfict)
		_netshaker = window.netshaker,

		netshaker = window.netshaker = window.n$ = new function()
		{
			var 
				_signals = {},
				_callbacks = {};

			this.signal = function(signal)
			{
				if ( !(_signals[signal]) ) {
					// ('no callbacks for signal '+signal);
					return;
				}

				var 
					callbacks = _signals[signal],
					callback;

				for ( var i=0; i<callbacks.length; i++ ) {				
					callback = callbacks[i];
					callback.method();
				}
			}

			this.on = function(signal, callback, params)
			{
				var 
					signals = signal.split(', '),
					signal;

				for (var i=0; i<signals.length; i++ ) {
					signal = signals[i];
					if ( !(_signals[signal]) ) {
						_signals[signal] = new Array();
					}
					_signals[signal].push({method: callback, params: params});
				}
			}

			this.extend_ = function (module)
			{
				module.apply(this);
			}
		}
})();


n$.extend_(function()
{
	var platform = null;
	this.platform =
	{
		init: function(name)
		{
			platform = name;
		},

		get: function(property)
		{
			if ( 'identifier' === property ) {
				return platform;
			}
			return null;
		}
	};
});

n$.extend_(function()
{
	this.document = new function()
	{
		var parent = this;

		this.cookie = new function()
		{
			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;
			};
		};

		this.param = new function()
		{
			this.get = function(p, def)
			{
				var
					def = def || undefined,
					parameters = decodeURIComponent(parent.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(parent.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);
			};
		};
	};
});


/*
n$.extend(function()
{
	this.testmethod = function()
	{
		
	}
});

n$.testmethod();
*/


/*
n$.on('dom.reset, dom.load', function(signal)
{
	alert(signal.name);
});

n$.signal('dom.reset');
*/

