( function() {

	var Dom = YAHOO.util.Dom;
	var Event = YAHOO.util.Event;
	var DDM = YAHOO.util.DragDropMgr;
	var Selector = YAHOO.util.Selector;
	var Connect = YAHOO.util.Connect;

	// ////////////////////////////////////////////////////////////////////////////
	// example app
	// ////////////////////////////////////////////////////////////////////////////
	YAHOO.limacity.Register = {

		init : function() {
			Register = YAHOO.limacity.Register;

			Register.checkUsername();
			Register.checkPasswords();
			Register.checkEMail();
		},

		getInfo : function(field) {
			return YAHOO.util.Selector.query('span.info', field.parentNode, true);
		},

		addExclamation : function(field) {
			info = Register.getInfo(field);
			info.innerHTML += '<img src="images/layout/icons/exclamation.png" alt="Fehler!" /> ';

		},

		addTick : function(field) {
			info = Register.getInfo(field);
			info.innerHTML += '<img src="images/layout/icons/tick.png" alt="Alles okay!" /> ';

		},
		
		addLoading : function(field) {
			info = Register.getInfo(field);
			info.innerHTML += '<img src="images/loader.gif" alt="laden.." /> ';

		},

		addMessage : function(field, className, message) {
			info = Register.getInfo(field);

			info.innerHTML = info.innerHTML + '<span class="' + className
					+ '">' + message + '</span> ';

		},

		clearInfo : function(field) {
			info = Register.getInfo(field);
			info.innerHTML = '';
		},

		checkUsername : function() {

			field = Dom.get('username');
			Register.clearInfo(field);
			
			if (!field.value)
				return;

			field.value = field.value.toLowerCase();

			if ((field.value.match(/^[a-z]+[a-z\-0-9]+[a-z0-9]+$/) == field.value) && (field.value.length <= 32)) {
				Register.addLoading(field);
				Connect.asyncRequest('POST', '/ajax_check_username', {
					success :Register.handleUsernameResult
				}, 'username=' + field.value);
			} else {
				Register.addExclamation(field);
				Register
						.addMessage(
								field, 'exclamation', 
								'Der Benutzername muss mindestens 3 und maximal 32 Zeichen lang sein und darf nur aus den Zeichen a-z, 0-9 (allerdings nicht am Anfang) und einem Bindestrich (allerdings nicht am Anfang oder Ende) bestehen!');
			}

		},

		handleUsernameResult : function(o) {
			field = Dom.get('username');
			Register.clearInfo(field);

			if (o.responseText.length > 0) {
				Register.addExclamation(field);
				Register.addMessage(field, 'exclamation',
						'Dieser Benutzername ist leider schon vergeben!');
			} else {
				Register.addTick(field);
			}
		},

		checkEMail : function() {
			field1 = Dom.get('email1');
			field2 = Dom.get('email2');
			
			Register.clearInfo(field1);
			Register.clearInfo(field2);
			
			if (!field1.value)
				return;

			match = field1.value
					.match(/^([\w-]+\.)*[\w-]+@([\w-]+\.)+([a-z]{2,4})$/i);
			if (!match || match[0] != field1.value || field1.value.length > 120) {
				Register.addExclamation(field1);
				Register.addMessage(field1, 'exclamation', 'Dies ist keine g&uuml;ltige E-Mail-Adresse, maximal 120 Zeichen!');
				return;
			}
			
			if (field1.value && field2.value && field2.value != field1.value) {
				Register.addExclamation(field1);
				Register.addExclamation(field2);
				Register.addMessage(field2, 'exclamation', 'Hier stimmen die beiden E-Mail-Adressen nicht &uuml;berein!');
			} else if (field1.value && field2.value && field1.value == field2.value) {
				Register.addTick(field1);
				Register.addTick(field2);
			}

		},

		checkPasswords : function() {

			p1 = Dom.get('password1');
			p2 = Dom.get('password2');
			
			regex = /^(([a-zA-Z][\w-]*[\d]+[\w-]*)|([\d][\w-]*[a-zA-Z]+[\w-]*))$/;
			
			Register.clearInfo(p1);
			Register.clearInfo(p2);
			
			if(p1.value && (p1.value.length < 6 || p1.value.length > 64 || !regex.test(p1.value))) {
				Register.addExclamation(p1);
				Register.addMessage(p1, 'exclamation', 'Bitte mindestens 6 und maximal 64 Zeichen, davon eine Ziffer, keine Sonderzeichen!');
				return;
			}

			if (p1.value && p2.value && p2.value != p1.value) {
				Register.addExclamation(p1);
				Register.addExclamation(p2);
				Register.addMessage(p2, 'exclamation', 'Hier stimmen die beiden Passw&ouml;rter nicht &uuml;berein!');
			} else if (p1.value && p2.value && p1.value == p2.value) {
				Register.addTick(p1);
				Register.addTick(p2);
			}

		}
	};

	Event.onDOMReady(YAHOO.limacity.Register.init, YAHOO.limacity.Register,
			true);

})();

