FormsClassParser.addRules({
	//
	// Check if the username exists and if so, display either
	// a warning message on the html page or pop up an alert.
	//
	// Usage:
	// (On the username input form:)
	// - HTML message: class="validate_username::[id_of_element_with_user_exists_message]"
	// - Alert: class="validate_username"
	//
	validate_username : {
		onload : function () {
			this.validate_username = {};
			//
			// Store initial username / message container element.
			//
			if (this.className.match(/validate_username::([^: ]+)/))
				this.validate_username.msgcontainer = $(RegExp.$1);
			if (this.validate_username.msgcontainer) {
				this.validate_username.msgcontainer.style.display = "none";
				this.validate_username.msgcontainer.style.visibility = "hidden";
			}
			this.validate_username.initial = this.value;
		},
		'onblur,onformsubmit' : function () {
			if (this.value && this.value != this.validate_username.initial) {
				//
				// Ajax request to username.cgi, with as parameter the username 
				// entered. If "true" is returned by the cgi, the username exists
				// so we display the message container or the alert and focus
				// on the username input field.
				//
				var myelem = this;
				var myAjax = new Ajax.Request(
					'/group/Registration/cgi-bin/username.cgi', {
						method: 'post',
						parameters: 'username='  + myelem.value,
						onComplete: function (originalRequest) {
							if (originalRequest.responseText == "false") {
								if (myelem.validate_username.msgcontainer) {
									myelem.validate_username.msgcontainer.style.display = "none";
									myelem.validate_username.msgcontainer.style.visibility = "hidden";
								}
								return true;
							} else {
								if (myelem.validate_username.msgcontainer) {
									myelem.validate_username.msgcontainer.style.display = "block";
									myelem.validate_username.msgcontainer.style.visibility = "visible";
									myelem.select() && setTimeout(function(){myelem.focus(); myelem.select();}, 50);
									return false;
								}
								return block_alert(myelem, "User \"" + myelem.value + "\" already exists.");
							}
						}
					}
				);
			}
		}
	}
});