/*!
 * $Id: utils.js 488 2009-02-24 05:44:42Z luke_schreur $
 * $Date: 2009-02-24 16:44:42 +1100 (Tue, 24 Feb 2009) $
 */

/**
 * Creates a delegate to maintain proper scope when refering to callbacks
 * or event handers.
 * 
 * @param obj A reference to a object that owns the method.
 * @param fn A string that indicates the method to be called.
 * 
 * @return A function.
 */
function delegate(obj, fn)
{
	return function()
	{
		return obj[ fn ].apply(obj, arguments);
	};
}

function openPopup( url, title, w, h, scroll )
{
	lp = (screen.width)  ? (screen.width  - w) / 2 : 0;
	tp = (screen.height) ? (screen.height - h) / 2 : 0;
	
	settings = 'height='+h+',width='+w+',top='+tp+',left='+lp+',scrollbars='+scroll+',resizable=no';

	window.open(url, null, settings);
}

/**
 * 
 */
function getURLParam(url, param)
{
	var result = null;
	
	url = String( url );
	
	if( url.indexOf("?") > -1 && url.indexOf(param + "=") > -1 )
	{
		var i = url.indexOf(param + "=") + (param + "=").length;
		var j = url.indexOf("&", i);

		result = url.substring(i, j > -1 ? j : url.length );
	}
	
	return( unescape( result ) );
}

/**
 * 
 */
function setURLParam(url, param, value)
{
	url = String( url );
	
	if( url.indexOf("?") < 0 )
	{
		url += "?" + param + "=" + value;
	}
	else
	{
		url += "&";
		
		if( url.indexOf(param + "=") > -1 )
		{
			var i = url.indexOf(param + "=") + (param + "=").length;
			var j = url.indexOf("&", i);
			
			url = url.substring(0, i) + value + url.substring(j, url.length);
		}
		
		if( url.charAt( url.length - 1 ) == "&" )
		{
			url = url.substring(0, url.length - 1);
		}
	}
	
	return( url );
}

/**
 *
 */
function clearURLParam( url, param )
{
	url = String( url );
	
	value = getURLParam( url, param );
	
	return( url.replace(param + "=" + value, "") );
}

/**
 *
 */
function getURLHash( url )
{
	var i;
	var result = null;
	
	url = String( url );
	
	i = url.indexOf("#");
	
	if( i > -1 )
	{
		result = url.substring(i + 1, url.length  );
	}
	
	return( result );
}

/**
 * 
 */
function setURLHash( url, hash )
{
	var i;
	
	url = String( url );
	
	if( ( i = url.indexOf("#") ) > -1 )
	{
		url = url.substring( 0, i ) + "#" + hash;
	}
	else
	{
		url += "#" + hash;
	}
	
	return( url );
}

/*!
 * EOF;
 */
