function cookie( name , value , options )
{
	if( typeof value != 'undefined' )
	{
		// name and value given, set cookie
		options = options || {};
		if( value === null )
		{
			value			= '';
			options.expires	= -1;
		}

		var expires = '';
		if( options.expires && ( typeof options.expires == 'number' || options.expires.toUTCString ) )
		{
			var date;

			if( typeof options.expires == 'number' )
			{
				date = new Date();
				date.setTime( date.getTime() + ( options.expires * 24 * 60 * 60 * 1000 ) );
			}
			else
			{
				date = options.expires;
			}

			expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
		}

		var path   = options.path   ? '; path='   + ( options.path   )	: '';
		var domain = options.domain ? '; domain=' + ( options.domain )	: '';
		var secure = options.secure ? '; secure'						: '';

		document.cookie = [ name , '=' , encodeURIComponent( value ) , expires , path , domain , secure ].join( '' );
	}
	else
	{
		// only name given, get cookie
		var cookieValue = null;

		if( document.cookie && document.cookie != '' )
		{
			var cookies = document.cookie.split( ';' );

			for( var i = 0; i < cookies.length; i++ )
			{
				var cookie = cookies[ i ].trim();

				// Does this cookie string begin with the name we want?
				if( cookie.substring( 0 , name.length + 1 ) == ( name + '=' ) )
				{
					cookieValue = decodeURIComponent( cookie.substring( name.length + 1 ) );
					break;
				}
			}
		}

		return cookieValue;
	}
}
function parseDomain(
  sUrl
) 
{
  	//
	// Get domain
	//
	var pattern	= new RegExp( "(http|ftp|https)://(.*?)/.*$" );
	var url		= sUrl.match( pattern );
	var domain	= url[ 2 ];
	var port	= "80";
	
	//
	// Check for optional port
	//
	if( domain.indexOf( ":" ) != -1 )
	{
		port   = domain.substring( domain.indexOf( ":" ) + 1 , domain.length         );
		domain = domain.substring(                         0 , domain.indexOf( ":" ) );
	}
	
	//
	// Return domain/port object
	//
	return { domain: domain , port: port };
}

function parseDomainArray(
  sUrl
)
{
	//
	// Get host
	//
	var host = parseDomain( sUrl );
	
	//
	// Split to determine subdomains and reverse array
	//
	var splits = host.domain.split( "." );
	splits.reverse();
	
	//
	// Loop through splits and build subdomain array
	//
	var domain  = "";				
	var domains = new Array();
	
	for( var i = 0, ii = splits.length; i < ii; i++ )
	{
		domain = splits[ i ] + ( domain == "" ? "" : "." ) + domain;
		
		if( ( i == 0     ) &&
			( i < ii - 1 ) )
		{
			continue;
		}
		
		domains.push( domain );
	}
	
	//
	// Return array
	//
	return domains;
}


String.prototype.trim = function()
{
	return this.replace( /^\s+|\s+$/g , '' );
}
