var VisualString = 
{
	Author: "Kris Baker",
	Company: "Visual String",
	Copyright: "2007",
	Version: "0.12 alpha",
	Libraries: 
	[
		'VisualString.Form',
		'VisualString.Xslt'
	],
	LibraryPath: '/js/VisualString/',
	
	RegisterHelp: function(elementId, helpContainerId, helpText)
	{
		var element = $(elementId);
		var helpContainer = $(helpContainerId);
		helpContainer.style.position = 'absolute';
		helpContainer.style.left = '0px';
		helpContainer.style.top = '0px';
		Element.hide(helpContainer);
		helpContainer.style.zIndex = 1000;
		
		if (document.all)
		{
			element.onmouseover = function()
			{
				helpContainer.innerHTML = helpText;
				
				if (!Element.visible(helpContainer))
				{
					var x = event.clientX + document.body.scrollLeft;
					var y = event.clientY + document.body.scrollTop;
					
					helpContainer.style.left = x + 'px';
					helpContainer.style.top = (y + 12) + 'px';
					Element.show(helpContainer);
				}
			};
		}
		else
		{
			element.onmouseover = function(event)
			{
				helpContainer.innerHTML = helpText;
				
				if (!Element.visible(helpContainer))
				{
					var x = event.pageX;
					var y = event.pageY;
					
					helpContainer.style.left = x + 'px';
					helpContainer.style.top = (y + 12) + 'px';
					Element.show(helpContainer);
				}
			};
		}
		
		element.onmouseout = function (event)
		{
			Element.hide(helpContainer);
		};
	},

	clearList: function(select)
	{
		var numOptions = select.options.length;
		
		for (var i = numOptions - 1; i >= 0; --i)
			$(select).options[i] = null;
	},

	addListItem: function(select, text, value, index)
	{
		var item = document.createElement('option');
		item.text = text;
		item.value = value;
		
		if (index == 0 || index)
			$(select).options.add(item, index);
		else
			$(select).options.add(item);
	},

	RegularExpressions:
	{
		ValidEmail: /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/
	},
	
	Load: function()
	{
		VisualString.Libraries.each
		(
			function (library)
			{
				document.write('<script type="text/javascript" src="' + VisualString.LibraryPath + library + '.js"></script>');
			}
		)
	}
}

String.format = function()
{
	if (arguments.length == 0)
		return;
	else if (arguments.length == 1)
		return arguments[0];
	else
	{
		var formatString = arguments[0];
		
		for (var i = 1; i < arguments.length; ++i)
			formatString = formatString.replace(new RegExp('\\{' + (i - 1) + '\\}', 'g'), arguments[i]);
			
		return formatString;
	}
}

String.isNullOrEmpty = function(str)
{
	return typeof(str) == 'undefined' || str == null || str.length == 0;
}

Array.prototype.TypeName = 'Array';
Array.prototype.append = Array.prototype.push;
Array.prototype.appendFormat = function()
{
	if (arguments.length == 0)
		return;
	else if (arguments.length == 1)
		this.push(arguments[0]);
	else
	{
		var formatString = arguments[0];
		
		for (var i = 1; i < arguments.length; ++i)
			formatString = formatString.replace(new RegExp('\\{' + (i - 1) + '\\}', 'g'), arguments[i]);
			
		this.push(formatString);
	}
}

VisualString.Load();
