	function inviter_sendRequest(method,params){
		var query = '';
		if (params) for (name in params ) query = query + "inviter_" + name + "=" + escape(params[name]) + "&";

		query = query + "controller=" + escape("cnt_tellfriend_contacts_ajax");
		query = query + "&AJAX_JOB=" + escape(method);
		inviter_onRequestStart();
  		new Ajax.Request('/ajax.php?', {
	  		method: 'post',
	  		parameters: query,
	  		onFailure: function(transport){
			  	inviter_onRequestEnd();
				$("inviter_message").update(transport.responseText);
			},
	  		onSuccess: function(transport){
				inviter_onRequestEnd();
				evalRicoAjaxResponse(transport);
			}
		});
	}
	/**
	 * Called right bevore the ajax request starts.
	 */
	function inviter_onRequestStart(){
		$("inviter_message").update('<div><img src="/bin_images/animated_clock.gif" alt=""><span>Please stand by</span></div>');
	}
	/**
	 * Called right after the ajax request returns and befor the response processing.
	 */
	function inviter_onRequestEnd(){
	    $("inviter_message").update("");
	}
	/**
	 * If you click on a contact in the "inviter"
	 */
	function inviter_onClickContact(element){
		var values = element.value.split('|');
		if (element.checked)
		    inviter_addContact(values[0],values[1]);
		else
		    inviter_removeContact(values[0],values[1]);

	}
	/**
	 * Add a new contact to the lines with the email addresses.
	 */
	function inviter_addContact(email,name){
		var i = 0;
		var contactLine = false;
		var firstEmptyLine = false;
		while (  $("tell_friend_" + i ) ) {
		    contactLine = $("tell_friend_" + i);
		    var nameField = contactLine.childNodes[1].firstChild;
		    var emailField = contactLine.childNodes[2].firstChild;
		    if (!firstEmptyLine && nameField.value == "" && emailField.value == "") firstEmptyLine = contactLine;
		    var doReturn = false;
			if (nameField.value == name ){
			    doReturn = true;
				if (emailField.value == "") emailField.value = email;
			}
			if (emailField.value == email ){
                doReturn = true;
				if (nameField.value == "") nameField.value = name;
			}
			if (doReturn) return true;
			i++;
		}
		if (firstEmptyLine) {
		    firstEmptyLine.childNodes[1].firstChild.value = name;
		    firstEmptyLine.childNodes[2].firstChild.value = email;
		}
		else {
    		add_line(email,name);
		}

  		return true;
	}
	/**
	 * Romve a contact. Not yet implemented.
	 */
	function inviter_removeContact(email){
	    remove_line(email);
	}
	/**
	 * Fetchs contacts via ajax request.
	 */
	function inviter_getContacts(){
	    if (!$("inviter_service")) {
	        // Show the login form
	    	inviter_sendRequest(
				"getForm"
			)
		}
		else {
		    // Fetch the contacts
		    inviter_sendRequest(
				"getContacts", {
					email: $("inviter_email").value,
					password: $("inviter_password").value,
					service: $("inviter_service").value
				}
			);
		}
	}
