
var Util = {
	extractQueryStringParams: function(url)
	{
		var queryString = url.substring(url.indexOf('?') + 1);
		var parts = queryString.split('&');
		var params = {};
		for ( var i = 0; i < parts.length; i++ )
		{
			var keyValue = parts[i].split('=');
			params[keyValue[0]] = keyValue[1];
		}
		return params;
	},
	
	isDescendantOf: function(parent, descendant)
	{
		if ( parent == descendant )
		{
			return false;
		}
		if ( parent.contains )
		{
			return parent.contains(descendant);
		}
		var children = parent.childNodes;
		for ( var i = 0; i < children.length; i++ )
		{
			var child = children[i];
			if ( child == descendant || this.isDescendantOf(child, descendant) )
			{
				return true;	
			}
		}
		return false;
	},
	
	isOwnMouseOutEventOf: function(element, event)
	{
		var from = event.target || event.fromElement;
		var to = event.relatedTarget || event.toElement;
		return element != to
			&& !this.isDescendantOf(element, to)
			&& ( element == from || this.isDescendantOf(element, from) );
	},
	
	isOwnMouseOverEventOf: function(element, event)
	{
		var from = event.relatedTarget || event.fromElement;
		var to = event.target || event.toElement;
		return element != from
			&& !this.isDescendantOf(element, from)
			&& ( element == to || this.isDescendantOf(element, to) );
	}
};
