function AjaxNavigation()
{
	this.params = new Object();
}

AjaxNavigation.params = new Object();

AjaxNavigation.clearParams = function()
{
	this.params = new Object();
}

AjaxNavigation.setParams = function( p, include_action)
{
	this.clearParams();
	
	for( var i in p )
		if ( include_action || i != "action" )
			this.params[i] = p[i];
}

AjaxNavigation.addParam = function(key,value)
{
	this.params[key] = value;
}

AjaxNavigation.getParam = function( key )
{
	return this.params[key] ? this.params[key] : false;
}

AjaxNavigation.extractInfo = function( href )
{
	bookmark = href.split( "#" );
	
	if ( bookmark.length < 2 )
		return false;
	
	return bookmark;
}

AjaxNavigation.updateAddress = function()
{
	str = AjaxNavigation.arrayToQuery( this.params );
	
	History.addHistory( str );
	HistoryQueue[ str ] = AjaxNavigation.callFunction;
	
	
	AjaxNavigation.callFunction = "";
}

AjaxNavigation.queryToArray = function( q, c_key, c_pair )
{
	c_key 	= c_key ? c_key : ':';
	c_pair 	= c_pair ? c_pair : ',';
	
	ret_array = new Object();
	
	pairs = q.split( c_pair );
	
	for( i = 0; i < pairs.length; i++ )
	{
		cur_pair = pairs[i].split( c_key );
		ret_array[cur_pair[0]] = cur_pair[1];
	}
	
	return ret_array;
}

AjaxNavigation.arrayToQuery = function( a, c_key, c_pair )
{
	c_key 	= c_key ? c_key : ':';
	c_pair 	= c_pair ? c_pair : ',';
	
	temp_array = new Array();

	for( i in a )
		temp_array.push( i + c_key + a[i] );
	
	return temp_array.join( c_pair );
}

AjaxNavigation.hasData = function( href )
{
	href = href ? href : document.location.href;
	
	return ( href.split( "#" ).length > 1 );
}

AjaxNavigation.getParamFromURL = function( k, href )
{
	href = href ? href : document.location.href;
	
	if ( AjaxNavigation.hasData( href ) )
	{
		a = AjaxNavigation.queryToArray( href.split('#')[1] );
		if ( a[k] )
			return a[k];
	}
	
	return false
}


HistoryQueue = new Object();

AjaxNavigation.historyChanged = function( hash )
{
	eval( HistoryQueue[hash] );	
}

History.addEventListener('historyChange', AjaxNavigation.historyChanged );
