if (typeof ws == 'undefined')
	var ws = {};

/**
 * Strips whitespace and leading 'w' followed by '.', to lowercase
 * @param String
 */
ws.DomainName = function(domain_name)
{
	if (typeof domain_name != 'string')
		throw 'Expected string';

	this.name = domain_name.replace(/\s+/, '').toLowerCase().replace(/^w+\./, '');
};
ws.DomainName.prototype = {

	/**
	 * @var String
	 */
	name: '',

	/**
	 * Strips toplevel extension
	 * 
	 * @return String
	 */
	getBase: function()
	{
		return this.name.replace(/\.[a-z]+(\.[a-z]+)?$/, '');
	},

	/**
	 * Returns toplevel extension without leading dot
	 *
	 * @return String
	 */
	getTld: function()
	{
		var test = 'www.' + this.name;
		var matches = test.match(/^www\.[a-z0-9\-]+\.([a-z]+)(\.[a-z]+)?$/);
		if (!matches)
			return;

		var tld = matches[1];
		if (typeof matches[2] != 'undefined')
			tld += matches[2];
		return tld;
	},

	/**
	 * Throws an exception if $base is invalid
	 * 
	 * @param String
	 * @return Boolean
	 * @throws Error, ws.DomainName.InvalidBase
	 */
	validateBase: function(base)
	{
		if (typeof base != 'string')
			throw 'Expected string';

		if (base.match(/^-|-$|--/))
			throw new ws.DomainName.InvalidBase("Domeinnamen mogen niet beginnen met koppelteken (-) en er mogen geen twee koppeltekens achter elkaar staan (--).");

		if (!base.match(/^[a-z0-9\-]+$/i))
			throw new ws.DomainName.InvalidBase('Domeinnamen mogen alleen alfanummerieke tekens en koppeltekens (-) bevatten.');

		if (base.length < 3)
			throw new ws.DomainName.InvalidBase('Domeinnamen moeten minimaal 3 tekens bevatten.');

		return true;
	},

	/**
	 * @return String
	 */
	toString: function()
	{
		return this.name;
	}

};

ws.DomainName.Exception = Error;
ws.DomainName.Exception.prototype = new Error;

ws.DomainName.InvalidBase = ws.DomainName.Exception;
ws.DomainName.InvalidBase.prototype = new ws.DomainName.Exception;
