(function ($) {
"use strict";
$.suggestifyObject = function (element, arr) {
var options = [];
arr.values.forEach(function (item) {
//options.push(item.Key);
options.push(item);
});
var defaults = {}
var suggestions = options;
var startingCharPosition = arr.startingCharPosition;
var $output = $('
');
//var $output;
var plugin = this;
plugin.settings = {}
var $element = $(element),
element = element;
plugin.init = function () {
plugin.settings = $.extend({}, defaults, options);
$output.insertAfter($element);
$output.hide();
$element.on("input", keyHandler);
$element.on("focusout", focusout);
$element.on("keydown", keydown);
}
var focusout = function () {
$output.hide();
var textOutput = $(".selected", $output).text();
if (textOutput != "") {
$element.val(textOutput).attr("url", $(".selected", $output).find("span.bold").attr("url"));
}
}
var keydown = function (event) {
if (event.keyCode == 13) {
if ($(".selected", $output).length > 0) {
$element.val($(".selected", $output).text()).attr("url", $(".selected", $output).find("span.bold").attr("url"));
}
setTimeout(function () { $element.parent().find("a").click(); }, 500);
}
else if (event.keyCode == 40) {
event.preventDefault();
if ($(".selected", $output).length == 0)
{
$($output.children()[0]).addClass("selected");
}
else if ($(".selected", $output).next().length != 0) {
$(".selected", $output).next().addClass("selected");
$(".selected", $output).prev().removeClass("selected");
}
else if ($(".selected", $output).next().length == 0) {
$(".selected", $output).removeClass("selected");
$($output.children()[0]).addClass("selected");
}
$element.val($(".selected", $output).text()).attr("url", $(".selected", $output).find("span.bold").attr("url"));
}
else if (event.keyCode == 38) {
event.preventDefault();
if ($(".selected", $output).prev().length != 0) {
$(".selected", $output).prev().addClass("selected");
$(".selected", $output).next().removeClass("selected");
}
$element.val($(".selected", $output).text()).attr("url", $(".selected", $output).find("span.bold").attr("url"));
}
else if (event.keyCode == 9) {
event.preventDefault();
if ($(".selected", $output).length == 0) {
$($output.children()[0]).addClass("selected");
}
else if ($(".selected", $output).next().length != 0) {
$(".selected", $output).next().addClass("selected");
$(".selected", $output).prev().removeClass("selected");
}
$element.val($(".selected", $output).text()).attr("url", $(".selected", $output).find("span.bold").attr("url"));
}
else if (event.keyCode == 27) {
$output.hide();
}
}
var keyHandler = function () {
var ins = $element.val();
$output.empty();
$output.hide();
if ($element.val().length > startingCharPosition) {
var words = getWord(ins);
if (words.length > 0) {
for (var i = 0; i < words.length; ++i) {
if (words.length == 1) {
$("" + words[i] + "").appendTo($output).click(function () {
$element.val($(this).html());
}).addClass("selected");
}
else {
$("" + words[i] + "").appendTo($output).click(function () {
$element.val($(this).html());
}).mouseover(function () {
$output.children().each(function (i, val) {
$(this).removeClass("selected");
});
$(this).addClass("selected");
});
}
}
$output.show();
}
}
}
var getWord = function (beginning) {
var words = new Array();
for (var i = 0; i < suggestions.length; ++i) {
var j = -1;
if(!IsNullOrUndefined(suggestions[i].OtherName)) {
if (suggestions[i].OtherName.toUpperCase().indexOf(beginning.toUpperCase()) == 0) {
words[words.length] = "" + suggestions[i].OtherName.substr(0, beginning.length) + "" + suggestions[i].OtherName.substr(beginning.length, suggestions[i].OtherName.length);
continue;
}
}
if(!IsNullOrUndefined(suggestions[i].FirstName)) {
if (suggestions[i].FirstName.toUpperCase().indexOf(beginning.toUpperCase()) == 0) {
words[words.length] = String.format("{0} {1}", suggestions[i].LastName, "" + suggestions[i].FirstName.substr(0, beginning.length) + "" + suggestions[i].FirstName.substr(beginning.length, suggestions[i].FirstName.length));
continue;
}
}
if(!IsNullOrUndefined(suggestions[i].LastName)) {
if (suggestions[i].LastName.toUpperCase().indexOf(beginning.toUpperCase()) == 0) {
words[words.length] = String.format("{0} {1}", "" + suggestions[i].LastName.substr(0, beginning.length) + "" + suggestions[i].LastName.substr(beginning.length, suggestions[i].LastName.length), suggestions[i].FirstName);
}
}
if (!IsNullOrUndefined(suggestions[i].Key)) {
if (suggestions[i].Key.toUpperCase().indexOf(beginning.toUpperCase()) == 0) {
words[words.length] = "" + suggestions[i].Key.substr(0, beginning.length) + "" + suggestions[i].Key.substr(beginning.length, suggestions[i].Key.length);
continue;
}
}
}
return words;
}
plugin.init();
}
$.fn.suggestifyObject = function (options) {
return this.each(function () {
if (undefined == $(this).data('suggestifyObject')) {
var plugin = new $.suggestifyObject(this, options);
$(this).data('suggestifyObject', plugin);
}
});
}
})(jQuery);