function showSpinner() 
{
	var content = $('#content');
	var positioning = 'top: ' + ($(document).scrollTop() + ($(window).height() / 2) - (32 / 2)) + 'px; left: ' + (content.offset().left + (content.width() / 2) - (32 / 2)) + 'px; width: 32px; height: 32px;';
	var spinner = '<div class="spinner" style="position: absolute; ' + positioning + '"></div>';
	content.append(spinner);
}

function bindAjaxEvents()
{
	var links = $("a.ajax");
	links.unbind('click');
	links.click(function()
	{
		return Page.instance().update(this.href);	
	});

	var submits = $("input[type='submit'].ajax");
	submits.unbind('click');
	submits.click(function()
	{
		return Page.instance().update(this.form.action, this.form.method, $(this.form).serialize() + '&' + this.name + '=' + this.value);
	});

	//bind thickbox events
	$('.thickbox').unbind('click'); 
	tb_init('a.thickbox, area.thickbox, input.thickbox');
}

$(document).ready(function()
{
	if(!($.browser.msie && $.browser.version.substr(0,1) == '6')) //Disable AJAX for IE6
	{
		if(navigator.userAgent.indexOf("Series60") < 0) //Disable AJAX history for Nokia Series60
		{
			if(location.hash)
			{
				var url = document.location.href.split('#');
		
				var name = (url[0].lastIndexOf('/') ? url[0].substring(url[0].lastIndexOf('/') + 1).split('?') : url[0].split('?'));
				name[0] = name[0].split('.')[0];
				name[0] = (name[0] ? name[0] : 'front-page') + (name[1] != undefined ? '?' + name[1] : '');
	
				var hash = (url[1].lastIndexOf('/') ? url[1].substring(url[1].lastIndexOf('/') + 1).split('?') : url[1].split('?'));
				hash[0] = hash[0].split('.')[0];
				hash[0] = (hash[0] ? hash[0] : 'front-page') + (hash[1] != undefined ? '?' + hash[1] : '');
	
				if(name[0] == hash[0])
					Page.instance().ignore();
			}
			else
				Page.instance().ignore();

			$.history.init(function(_action)
			{
				Page.instance().load((_action ? _action : 'front-page'));
			});
		}
		bindAjaxEvents();
	}
});

var Page = (function()
{
	var _instance = null;
	return new function() 
	{
		this.instance = function()
		{
			if(_instance === null)
				_instance = 
				{
					_ignore: false,
					_new: false,
					_method: null,
					_data: null,
					_params: null,

					ignore: function()
					{
						this._ignore = true;
					},

					update: function(_url, _method, _data)
					{
// 						if($.browser.msie && $.browser.version.substr(0,1) == '6')
// 							return true;
						this._method = _method;
						this._data = _data;

						var url = (_url.lastIndexOf('/') ? _url.substring(_url.lastIndexOf('/') + 1).split('?') : _url.split('?'));
						var urlParts = url[0].split('.');

						var action = (urlParts[0] ? urlParts[0] : 'front-page');
						var query = (url[1] != undefined ? '?' + url[1] : '');
						var token = action + query;

						this._new = true;
						if(navigator.userAgent.indexOf("Series60") >= 0) //Disable AJAX history for Nokia Series60
							this.load(token);
						else
							$.history.load(token); 

						return false;
					},

					load: function(_url)
					{
						if(this._ignore)
						{
							this._ignore = false;
							return false;
						}



						var url = _url.split('?');
						var urlParts = url[0].split('.');
						var contentUrl = urlParts[0] + '.content';
						if(url[1] !== undefined)
							contentUrl = contentUrl + '?' + url[1];
					
						$.ajax
						({
							type: (this._method == undefined || this._method == null ? 'GET' : this._method),
							url: contentUrl,
							data: this._data,
							success: function(result)
							{
								$('#content').html(result);
							},
							failure: function(result)
							{
								$('#content').html(result);
							},
							complete: function()
							{
								bindAjaxEvents();
								if(Page.instance()._new)
								{
									scroll(0,0);
									Page.instance()._new = false;
								}
							}

						});
						showSpinner();
						this._method = 'GET';
						this._data = null;

						return true;
					},

					updateTarget: function(_target, _url, _method, _data)
					{
						var url = (_url.lastIndexOf('/') ? _url.substring(_url.lastIndexOf('/') + 1).split('?') : _url.split('?'));
						var urlParts = url[0].split('.');
						var moduleUrl = urlParts[0] + '.module';
						if(url[1] !== undefined)
							moduleUrl = moduleUrl + '?' + url[1];
					
						$.ajax
						({
							type: (_method == undefined || _method == null ? 'GET' : _method),
							url : moduleUrl,
							data : _data,
							success: function(result)
							{
								$(_target).html(result);
							},
							failure: function(result)
							{
								$(_target).html(result);
							}
						});
						return false;
					}
				};
			return _instance;
		}
	}
})();

// Byter css klass. Jquery baserad.
function changeClass(id, class1, class2)
{
	$(id).hasClass(class1) ? $(id).removeClass(class1).addClass(class2) : $(id).removeClass(class2).addClass(class1);
}

$.fn.extend(
{
	switchClass: function(class1, class2) 
	{
		return ($(this).hasClass(class1) ? $(this).removeClass(class1).addClass(class2) : $(this).removeClass(class2).addClass(class1));
	}
});