
(function ($, $x, $p) {

	$p.href = new function () {
		var self = this;

		self.construct = function () {
			
			self.location = $.url('');
			
			var loc = $.url();
			var fragment = loc.attr('fragment');
			if (!fragment || (fragment.indexOf('?') == -1 && fragment.indexOf('.') == -1))
				return;

			loc.merge(fragment, {mergeQuery: true}).attr('fragment', null).open();
		};
		
		self.load = function () {
			$('[data-xwpage-ajax-href]').live('click', function () {
				var elm = $(this);
				var target = $('#' + elm.attr('data-xwpage-ajax-target'));
				$p.ajax.get(elm.attr('data-xwpage-ajax-href'), {
					aoe: target.get(0),
					onReceive: function (data) {
						target.html(data);
					}
				});
				self.set(elm.attr('data-xwpage-href') ? elm.attr('data-xwpage-href') : elm.attr('href'));
				return false;
			});
		
		};
		
		self.set = function (href) {
			self.location.merge(href, {mergeQuery: true});
			var href = $.url().attr('hash', self.location.build()).build();
			var hash = href.substr(href.indexOf('#') + 1);
			hash = unescape(hash);
			location.href = href.substr(0, href.indexOf('#') + 1) + hash;

			jQuery('[data-xwpage-href]').each(function () {
				this.href = $.url(this.href).merge(hash, {mergeQuery: true}).merge($(this).attr('data-xwpage-href'), {mergeQuery: true}).build();
			});
			
		};
		
		self.construct();
		
	};

})(jQuery, xwp.xwpage, xwp.xwpage.plugins);