TR.referral = function() {
    function init() {
	$(document).ready(function() {
	    initReferral();
	});
    }

    function initReferral() {
	// focus on recipient name if logged in...
	if ($("#input-senderName").attr("type") == "hidden") {
	    $("#input-recipientName").focus();
	}
	else {
	    $("#input-senderName").focus();
	}

	$("#input-senderName").keyup(updateMessage);
	$("#input-recipientName").keyup(updateMessage);
	// $("*[name='userMessage']").keyup(updateMessage);
	
	// initReferralValidation();
	$("form[name='referral']").validate({
	    errorPlacement: function (error, element) {
		element.closest(".field").find(".message-row").html(error);
		// error.appendTo(  );
	    },
	    rules: {
		senderName: {
		    minlength: 2,
		    maxlength: 32
		},
		senderEmail: {
		    email: true
		},
		recipientName: {
		    minlength: 2,
		    maxlength: 32
		},
		recipientEmail: {
		    email: true
		}
	    }
	});

	updateMessage();
    }

    function initReferralValidation() {
	TR.validation.initNameValidation("senderName");
	TR.validation.initEmailValidation("senderEmail");
	TR.validation.initNameValidation("recipientName");
	TR.validation.initEmailValidation("recipientEmail");

	var formName = "referral";
	var form = $("form[name='" + formName + "']");
	$(form).submit(function() {
	    return validateReferralForm();
	});
    }

    function validateReferralForm() {
	var valid = true;
	// in reverse order to set the relevant focus
	valid = TR.validation.validateEmail("recipientEmail") && valid;
	valid = TR.validation.validateName("recipientName") && valid;
	valid = TR.validation.validateEmail("senderEmail", true) && valid;
	valid = TR.validation.validateName("senderName") && valid;
	return valid;
    }

    function createP(text) {
	var paragraph = document.createElement("p");
	$(paragraph).text(text);
	return paragraph;
    }
    function createPre(text) {
	var paragraph = document.createElement("pre");
	$(paragraph).text(text);
	return paragraph;
    }

    function updateMessage() {
	var target = $(".message-panel");

	var recipientName = getValue("recipientName", "<recipient-name>");
	var senderName    = getValue("senderName", "<sender-name>");
	// var userMessage = getValue("userMessage", "");
	
	$(target).empty();

	if (false && userMessage.length > 0) {
	    $(target)
		.append(createPre(userMessage))
		.append(createP("-" + senderName))
		.append("<br/>")
	    ;
	}
	$(target).append(createP("Dear " + recipientName + ","));

	if (typeof(window["studyId"]) != "undefined") {
	    var a = document.createElement("a");
	    a.href = base_url() + "study/" + studyId;
	    $(a).attr("tabindex", 100);
	    $(a).text(studyTitle);
	    var p = createP(senderName + " suggests that you should check out this study: ")
	    $(p).append(a);
            $(p).append(" at <a href='" + base_url() + "'>TrialReach.com</a>.");
	    $(target)
		.append(p)
	    ;
	}
	else {
	    var p = createP(senderName);
	    $(p).append(" suggests that you should check out <a href='" + base_url() + "'>TrialReach.com</a>.<br/>");
	    $(target).append(p);
	}
	$(target).append("<p>Hope to see you there soon,<br/>The <a href='" + base_url() + "'>TrialReach.com</a> team.</p>");

	$("input[name='message']").val($(target).html());
    }

    function getValue(name, def) {
	var value = $("*[name='" + name + "']").val();
	value = trim(value);
	try {
	if (value.length == 0) {
	    return def;
	}
	}
	catch (exception) {
	    alert("name: " + name);
	}
	return value;
    }

    function trim(text, def) {
	if (typeof(text) == "undefined") {
	    return def;
	}
	text = text.replace(/^\s+|\s+$/g,"");
	return text;
    }
    

    return {
	init: init
    };
}();


