﻿/// <reference path="jquery-latest-vsdoc.js" />
(function ($) {
	$.fn.entitysuggest = function (url, type, options) {
		var opts = $.extend({}, $.fn.suggest.defaults, getOptions(type, options));
		return this.each(function () {
			var entitysuggest = new suggest(this, url, opts);

			entitysuggest.toString = function () {
				return "[entitysuggest]";
			};
		});
	};

	function getOptions(type, options) {
		var defaults = {
			valueField: "Id",
			minChars: 3
		}

		switch (type) {
			case "Administrator":
				defaults.columns = ["Name", "Email", "Position"];
				defaults.textField = "Name";
				break;
			case "AppointmentType":
				defaults.columns = ["Name"];
				defaults.textField = "Name"
				break;
			case "Article":
				defaults.columns = ["Title", "Url"];
				defaults.textField = "Title";
				break;
			case "Employer":
				defaults.columns = ["Name", "Email", "EmployerType"];
				defaults.textField = "Name";
				break;
			case "Organisation":
				defaults.columns = [
				{ "Name": function (r) { return r["Name"] + delimitedValue(' - ', r["Division"], null); } },
				"Email"
			];
				defaults.textField = function (r) {
					return r["Name"] + delimitedValue(' - ', r["Division"], null);
				};
				break;
			case "OrganisationContact":
				defaults.columns = [
				{ "Name": function (r) { return delimitedValue(null, r["Title"], " ") + r["LastName"] + ", " + r["FirstName"]; } },
				{ "Organisation": "OrganisationName" }
			];
				defaults.textField = function (r) { return delimitedValue(null, r["Title"], " ") + r["LastName"] + ", " + r["FirstName"]; };
				break;
			case "Individual":
				defaults.columns = [
				{ "Name": function (r) { return delimitedValue(null, r["Title"], " ") + r["LastName"] + ", " + r["FirstName"]; } },
				"Email"
			];
				defaults.textField = function (r) {
					return delimitedValue(null, r["Title"], " ") + r["LastName"] + ", " + r["FirstName"];
				};
				break;
			case "Advertisement":
				defaults.columns = [
				"Title", { "Organisation": "OrganisationName" }
			];
				defaults.textField = "Title";
				break;
			case "Event":
				defaults.columns = [
				"Title",
				"Venue"
			];
				defaults.textField = "Title"
				break;
			case "Faq":
				defaults.columns = ["Title"];
				defaults.textField = "Title";
				break;
			case "Job":
				defaults.columns = ["Title", { "Employer": "EmployerName" }, "Commences"];
				defaults.textField = "Title";
				break;
			case "JobSeeker":
				defaults.columns = [
				{ "Name": function (r) { return r["FirstName"] + ' ' + r["LastName"] } },
				{ "Student No.": "ExternalId" },
				"Email"
			];
				defaults.textField = function (r) {
					return r["FirstName"] + ' ' + r["LastName"] + delimitedValue(' (', r["ExternalId"], ')');
				};
				break;
			case "Link":
				defaults.columns = ["Title", "Url"];
				defaults.textField = "Title";
				break;
			case "Message":
				defaults.columns = ["Title", "Body"];
				defaults.textField = "Title";
				break;
			case "News":
				defaults.columns = ["Title", "Author"];
				defaults.textField = "Title";
				break;
			case "Quiz":
				defaults.columns = ["Title"];
				defaults.textField = "Title";
				break;
			case "Resource":
				defaults.columns = ["Title", "Type"];
				defaults.textField = "Title";
				break;
			case "Form":
				defaults.columns = ["Title"];
				defaults.textField = "Title";
				break;
		}
		var opts = $.extend({}, defaults, options);

		opts.params = {
			type: type,
			maxResults: options.maxResults,
			current: options.current,
			active: options.active,
			withdrawn: options.withdrawn,
			approval: options.approval,
			distributed: options.distributed

		};

		return opts;
	}

	function delimitedValue(before, value, after) {
		if (value == '' || value == null) return '';
		else return (before == null ? "" : before) + value + (after == null ? "" : after);
	}
})(jQuery);
