var Namecheck = new Class({

	initialize: function() {
		this.nameIsValid = true;
		this.sensitiveWords = new Array("DENTIST", "PHARMACY", "EUROPEAN", "NATIONAL", "KING", "QUEEN", "INTERNATIONAL", "HOLDING", "GROUP", "GRUPPE", "FOUNDATION", "SOCIETY");
		this.sonderzeichen = new Array('ä', 'ü', 'ö', 'ß');
		this.stringToCheck = '';
		this.feedback = new Array();
		this.showFeedbackHere = $('custom-feedback');
	},

	doCheck: function(str) {
		var cleanedString = str.clean();
		if (cleanedString == '' || cleanedString == undefined) {
			return false;
		};

		this.stringToCheck = cleanedString;

		this.nameIsValid = true;
		this.feedback = new Array();

		this.checkSensitiveWords();
		this.checkSonderzeichen();
		
		this.feedback = this.array_unique(this.feedback);

		return this.nameIsValid;
	},

	checkSensitiveWords: function() {

		var words = this.stringToCheck.split(' ');

		words.each(function(word) {
			if (this.sensitiveWords.contains(word.toUpperCase())) {
				var tel = '+49 228 95750 - 88';
				this.nameIsValid = false;
				var feedbackStrings = {
					'DENTIST': 'Die Bezeichnung "' + word + '" ist nicht möglich aufgrund gesetzlicher Restriktionen.',
					'PHARMACY': 'Die Bezeichnung "' + word + '" ist nicht möglich aufgrund gesetzlicher Restriktionen.',
					'EUROPEAN': 'Die Bezeichnung "' + word + '" ist nicht möglich aufgrund gesetzlicher Restriktionen.',
					'NATIONAL': 'Die Bezeichnung "' + word + '" ist nicht möglich aufgrund gesetzlicher Restriktionen.',
					'KING': 'Die Bezeichnung "' + word + '" ist nicht möglich aufgrund gesetzlicher Restriktionen.',
					'QUEEN': 'Die Bezeichnung "' + word + '" ist nicht möglich aufgrund gesetzlicher Restriktionen.',
					'INTERNATIONAL': 'Die Bezeichnung "' + word + '" ist nur bedingt möglich. Der Zusatz INTERNATIONAL besagt, dass 50% der Aktivität der Limited im Ausland stattfinden muss. Es müssen mindestens zwei Länder angegeben werden in denen Sie mit der Limited tätig zu sein beabsichtigen. <br />Bitte setzen Sie sich diesbezüglich mit uns unter ' + tel + ' in Verbindung.',
					'HOLDING': 'Die Bezeichnung "' + word + '" ist nur bedingt möglich. „Holding“ darf sich laut dem Companies Act 2006, nur eine Gesellschaft nennen, die mindestens 51% der Anteile an einer anderen Gesellschaft behält.<br />Bitte setzen Sie sich diesbezüglich mit uns unter ' + tel + ' in Verbindung.',
					'QUEEN': 'Die Bezeichnung "' + word + '" ist nicht möglich aufgrund gesetzlicher Restriktionen.<br />Bitte setzen Sie sich diesbezüglich mit uns unter ' + tel + ' in Verbindung.',
					'GROUP': 'Die Bezeichnung "' + word + '" ist nur bedingt möglich. Es müssen mindestens zwei Gesellschaften genannt werden, die zu der Group / Gruppe gehören. Diese Gesellschaften müssen aber keine Anteile an der zu gründenden Limited halten.<br />Bitte setzen Sie sich diesbezüglich mit uns unter ' + tel + ' in Verbindung.',
					'GRUPPE': 'Die Bezeichnung "' + word + '" ist nur bedingt möglich. Es müssen mindestens zwei Gesellschaften genannt werden, die zu der Group/Gruppe gehören. Diese Gesellschaften müssen keine Anteile an der zu gründenden Limited halten.<br />Bitte setzen Sie sich diesbezüglich mit uns unter ' + tel + ' in Verbindung.',
					'FOUNDATION': 'Die Bezeichnung "' + word + '" ist nur bedingt möglich. Die Limited muss nachgewiesen karitativen Zwecken dienen.<br />Bitte setzen Sie sich diesbezüglich mit uns unter ' + tel + ' in Verbindung.',
					'SOCIETY': 'Die Bezeichnung "' + word + '" ist nur bedingt möglich. Die Limited muss nachgewiesen nur gemeinnützigen Zwecken dienen (non-profit Klausel). Eine Dividendenauszahlung ist nicht erlaubt.<br />Bitte setzen Sie sich diesbezüglich mit uns unter ' + tel + ' in Verbindung.'
				};
				this.feedback.push(feedbackStrings[word.toUpperCase()]);
				
			};
		},
		this);

	},

	checkSonderzeichen: function() {
		this.sonderzeichen.each(function(sz) {
			if (this.stringToCheck.contains(sz)) {
				this.nameIsValid = false;
				this.feedback.push('Bitte verwenden Sie keine deutschen Umlaute und Sonderzeichen');
			};
		},
		this);
	},

	showFeedback: function() {
		this.showFeedbackHere.getElement('p').set('html', this.feedback.join('<br /><br />'));
		this.showFeedbackHere.setStyle('display', 'block');
		// this.showFeedbackHere.text = "asd";
	},
	array_unique: function(ar) {
		if (ar instanceof Array) {
			var sorter = {};
			var out = [];
			for (var i = 0, j = ar.length; i < j; i++) {
				if (!sorter[ar[i] + typeof ar[i]]) {
					out.push(ar[i]);
					sorter[ar[i] + typeof ar[i]] = true;
				}
			}
		}
		return out || ar;		
	}

}); // Namecheck END

window.addEvent('domready', function() {

	// namecheck-instanz
	var nc = new Namecheck();

	if ($('ltdnamecheck-form')) {

		$('ltdnamecheck-form').addEvent('submit', function(e) {
			e.stop();
		});
		// REQUEST START
		$('checkname-button').addEvent('click', function(e) {
			e.stop();

			$('custom-feedback').setStyle('display', 'none');
			$('available').setStyle('display', 'none');
			$('unavailable').setStyle('display', 'none');
			$('notpossible').setStyle('display', 'none');

			// aufruf client-namecheck
			if (nc.doCheck($('namecheck-tf').value) == false) {
				nc.showFeedback();
				return false;
			};

			var myRequest = new Request({

				method: 'post',
				url: jsBaseURL + 'namecheck',

				onRequest: function() {
					$('namecheck-spinner').setStyle('display', 'block');

				},

				onSuccess: function(res) {
					$('namecheck-spinner').setStyle('display', 'none');

					switch (res) {

					case "true":
						$('available').setStyle('display', 'block');
						break;
					case "false":
						$('unavailable').setStyle('display', 'block');
						break;
					case "notpossible":
						$('notpossible').setStyle('display', 'block');
						break;
					}

				}
			});

			myRequest.send('name=' + $('namecheck-tf').value);

			return true;
		});
		// REQUEST ENDE
		// Cookie mit dem Namen setzen
		$('orderFromNamecheck').addEvent('click', function() {
			Cookie.write('limitedname', $('namecheck-tf').value);
		});

	}
});
