// Parse url
function ds_url(url, type)
{
	if(url.lastIndexOf('/') >= 0)
		url = url.substring(url.lastIndexOf('/') + 1);

	var parts = url.split('?');
	if(!parts[0])
		parts[0] = 'front-page';
	else if(parts[0].indexOf('.') >= 0)
		parts[0] = parts[0].substring(0, parts[0].indexOf('.'));

	var ds_url = parts[0];
	if(type !== undefined)
		ds_url = ds_url + '.' + type;
	if(parts[1] !== undefined)
		ds_url = ds_url + '?' + parts[1];		
	return ds_url;
}

// Get path as a string
function ds_path(url)
{
	var ds_path = url;
	if(url === undefined)
		ds_path = document.location.href;	
	if(ds_path.indexOf('#') >= 0)
		ds_path = ds_path.substring(0, ds_path.indexOf('#'));
	if(ds_path.indexOf('/') >= 0)
		ds_path = ds_path.substring(0, ds_path.lastIndexOf('/'));
	return ds_path;
}

// Get default target as a string
function ds_default(type, url)
{
	var ds_default = url;
	if(url === undefined)
		ds_default = document.location.href;	
	if(ds_default.indexOf('#') >= 0)
		ds_default = ds_default.substring(0, ds_default.indexOf('#'));
	return ds_url(ds_default, type)
}

// Get target as a string
function ds_target(type, url)
{
	if(url === undefined)
		url = document.location.href;		
	if(url.indexOf('#') >= 0)
		return ds_url(url.substring(url.indexOf('#') + 1), type);
	else
		return ds_default(type, url);
}

// Load content from url
function ds_load(url, data)
{
	if(url === undefined)
		url = document.location.href;
	return $('#content').load(ds_target('content', url), data);
}

// Load moudle content from url
function ds_module_load(url, data)
{
	if(url === undefined)
		url = document.location.href;	
	return $('#content').load(ds_target('module', url), data);
}

// Load parent content from url
function ds_parent_load(url, data)
{
	if(url === undefined)
		url = parent.document.location.href;
	return parent.$('#content').load(ds_target('content', url), data);
}

// Reload content
function ds_reload()
{
	return ds_load();
}

// Reload module content
function ds_module_reload()
{
	return ds_module_load();
}

// Reload parent content
function ds_parent_reload()
{
	return ds_parent_load();
}


$(function()
{
	// Bind an event to window.onhashchange that, when the history state changes,
	// gets the url from the hash and fetches new content to be displayed.
	$(window).bind('hashchange', function(e)
	{
		$('#content').load(ds_url(e.fragment, 'content'));
	});
	// Handle the hash the page may have loaded with	
	if(document.location.hash.length > 0 && ds_url(document.location.hash) != ds_default())
		$(window).trigger('hashchange');
		
	$("a.ajax").live('click', function(e)
	{
		e.preventDefault();
		if(ds_target() == ds_url($(this).attr('href'))) // Reload current state
			ds_reload();
		else // Set new state
			$.bbq.pushState('#' + $(this).attr('href'));
		$("body").one('ajaxStop', function() { scroll(0, 0); });
	});
	
	// Bind events to ajaxStart and ajaxStop
	$("body").ajaxStart(function() 
	{
		// Show busy cursor.
		$('<div id="mask">').appendTo($("body"));
	});

	$("body").ajaxStop(function() 
	{
		// Hide busy cursor.
		$('#mask').remove();
		thickbox_events();
	});
	
	// bind focus blur
	$("input, select, textarea").live('focus blur', function() 
	{ 
		$(this).toggleClass('focus'); 
	});

	//bind dialog events
	$("a.dialog").live('click', function(e)
	{
		//$('body').addClass('ds_busy');		
		e.preventDefault();
		$('<iframe src="' + this.href + '" />').dialog(
		{
			title: $(this).attr('title'),
			autoOpen: true,
			width: 500,
			height: 400,
			modal: true,
			resizable: true,
			autoResize: true,
			overlay: 
			{
				opacity: 0.5,
				background: "black"
			},
			close: function()
			{
				ds_parent_reload();
			}
		}).width(475);
	});
});

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

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


//Deprecated - DO NOT USE
function changeClass(id, class1, class2)
{
	$(id).hasClass(class1) ? $(id).removeClass(class1).addClass(class2) : $(id).removeClass(class2).addClass(class1);
}

var Page = (function()
{
	var _instance = null;
	return new function()
	{
		this.instance = function()
		{
			if(_instance === null)
				_instance = 
				{
					update: function(url, method, data) 
					{
						var url = ds_target('content', url);
						$.ajax
						({
							type: (method == undefined || method == null ? 'GET' : method),
							url: url,
							data: data,
							success: function(result) 
							{ 
								$('#content').html(result); 
								thickbox_events();
							}
						});
						return false; 
					},
					updateTarget: function(target, url, method, data)
					{
						var url = ds_target('module', url);
						$.ajax
						({
							type: (method == undefined || method == null ? 'GET' : method),
							url: url,
							data: data,
							success: function(result) 
							{ 
								$(target).html(result); 
								thickbox_events();
							}
						});
						return false;
					}
				};
			return _instance;
		}
	}
})();