var VisualString = 
{
	Author: "Kris Baker",
	Company: "Visual String",
	Copyright: "2006",
	Version: "0.11 alpha",
	Libraries: 
	[
		'VisualString.Xslt',
		'VisualString.Form',
		'VisualString.LoadingMessage'
	],
	LibraryPath: 'js/VisualString/',

	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>');
			}
		)
	},
	
	Days: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
	
	Months: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
	
	AddZero: function(num)
	{
	    if (num < 10)
	        return '0' + num;
	    else
	        return num;
	},
	
	GmtDate: function(date)
	{
	    var gmtDate = String.format('{0}, {1} {2} {3} {4}:{5}:{6} GMT', 
	                    VisualString.Days[date.getDay()], 
	                    VisualString.AddZero(date.getDate()),
	                    VisualString.Months[date.getMonth()],
	                    date.getFullYear(),
	                    VisualString.AddZero(date.getHours()),
	                    VisualString.AddZero(date.getMinutes()),
	                    VisualString.AddZero(date.getSeconds()));
	                    
        return gmtDate;
	},
	
	setCookie: function(name, value, date)
    {   
        var expireDate = null;
        
        if (date)
            expireDate = VisualString.GmtDate(date);
            
        document.cookie = expireDate == null ? 
            name + "=" + value :
            name + "=" + value + "; expires=" + expireDate + "; path=/";
    },
    
    getCookie: function(name)
    {
        var cookiePartList = document.cookie.split(';');
        for (var i = 0; i < cookiePartList.length; ++i)
        {
            if (cookiePartList[i].search(/\=/g) >= 0)
            {
                var nameValuePair = cookiePartList[i].split('=');
                if (nameValuePair.length < 2)
                    continue;
                    
                var namePart = nameValuePair[0];
                var valuePart = nameValuePair[1];
                namePart = namePart.replace(/[ ]*/g, '');
                
                if (namePart == name)
                    return valuePart;
            }
        }
        
        return '';
    },
    
    deleteCookie: function(name)
    {
        document.cookie = name + "=; expires=Fri, 31 Dec 1999 23:59:59 GMT;";
    },
    
    clearList: function(select)
	{
	    select = $(select);
		var numOptions = select.options.length;
		
		for (var i = 0; i < numOptions; ++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);
	}
}

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.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();
