(function(a) {
a.fn.suggestor = function(m) {
var f;
var d;
var s = "";
var j = false;
var i = 0;
var h = 0;
var l = false;
var c = false;
var r = 5;
var n = 1;
var o;
var k;
var b;
var p;
var q;
var g;
var t = false;
var e = {
init: function(u, w) {
t = false;
f = a("
");
f.addClass("suggestorBox");
f.css("display", "none");
f.css("position", "absolute");
f.css("text-align", "left");
f.css("font-size", u.css("font-size"));
if (typeof w.boxCssInfo === "undefined") {
f.css("border", "1px solid #cccccc");
f.css("-webkit-box-shadow", "0 3px 2px 0px rgba(0, 0, 0, 0.1), 0 3px 2px 0px rgba(236, 236, 236, 0.6)");
f.css("-moz-box-shadow", "0 3px 2px 0px rgba(0, 0, 0, 0.1), 0 3px 2px 0px rgba(236, 236, 236, 0.6)");
f.css("box-shadow", "0 3px 2px 0px rgba(0, 0, 0, 0.1), 0 3px 2px 0px rgba(236, 236, 236, 0.6)");
f.css("background-color", "#fff")
} else {
f.css(w.boxCssInfo)
}
d = u;
d.attr("autocomplete", "off");
j = false;
s = d.val();
o = w.ajaxinfo;
n = w.minterm;
b = w.searchForm;
p = w.listSelectedCssInfo;
q = w.listDeselectedCssInfo;
k = w.adjustWidthVal;
g = w.boxCssInfo;
f.hover(function() {
l = true
}, function() {
l = false
});
this.resize();
var v = this;
a(window).resize(function() {
v.resize()
});
a("body").append(f)
},
suggest: function() {
t = true;
this.resize();
var u = this;
s = d.val();
i = 0;
h = 0;
if (s.length < n) {
f.css("display", "none");
t = false;
return
}
a.ajax({
url: o.url,
type: "get",
dataType: "jsonp",
cache: false,
data: {
query: d.val(),
fields: o.fn,
num: o.num * 2,
lang: o.lang
},
traditional: true
}).done(function(v) {
u.createAutoCompleteList(v)
}).fail(function(w, x, v) {
t = false;
return
})
},
createAutoCompleteList: function(A) {
if (A.response.status !== 0) {
f.css("display", "none");
return
}
var y = A.response.result.hits;
var u = this;
i = 0;
if (typeof y !== "undefined") {
var B = [];
for (var C = 0; C < y.length; C++) {
B.push(y[C].text)
}
var v = a("
");
v.css("list-style", "none");
v.css("padding", "0");
v.css("margin", "2px");
for (var z = 0; z < B.length && i < o.num; z++) {
var F = B[z];
var D = true;
var E = a(v.children("li"));
for (var x = 0; x < E.length; x++) {
if (F === a(E.get(x)).html()) {
D = false
}
}
if (D) {
var w = a("");
w.html(F);
w.click(function() {
var G = a(this).html();
u.fixList();
d.val(G);
if (typeof b !== "undefined") {
b.submit()
}
});
w.hover(function() {
h = a(this).closest("ol").children("li").index(this) + 1;
a(this).closest("ol").children("li").each(function(G) {
if (G === h - 1) {
if (typeof p === "undefined") {
a(this).css("background-color", "#e5e5e5")
} else {
a(this).css(p)
}
} else {
if (typeof q !== "undefined") {
a(this).css(q)
} else {
if (typeof g === "undefined" || typeof g["background-color"] === "undefined") {
a(this).css("background-color", "#ffffff")
} else {
a(this).css("background-color", g["background-color"])
}
}
}
})
}, function() {
if (h === a(this).closest("ol").children("li").index(this) + 1) {
if (typeof q !== "undefined") {
a(this).css(q)
} else {
if (typeof g === "undefined" || typeof g["background-color"] === "undefined") {
a(this).css("background-color", "#ffffff")
} else {
a(this).css("background-color", g["background-color"])
}
}
h = 0
}
});
w.css("padding", "2px");
v.append(w);
i++
}
}
if (i > 0 && d.val().length >= n) {
f.html("");
f.append(v);
f.css("display", "block")
} else {
f.css("display", "none")
}
} else {
f.css("display", "none")
}
this.resize();
t = false
},
selectlist: function(u) {
if (f.css("display") === "none") {
return
}
if (u === "down") {
h++
} else {
if (u === "up") {
h--
} else {
return
}
}
j = true;
if (h < 0) {
h = i
} else {
if (h > i) {
h = 0
}
}
f.children("ol").children("li").each(function(v) {
if (v === h - 1) {
if (typeof p === "undefined") {
a(this).css("background-color", "#e5e5e5")
} else {
a(this).css(p)
}
d.val(a(this).html())
} else {
if (typeof q !== "undefined") {
a(this).css(q)
} else {
if (typeof g === "undefined" || typeof g["background-color"] === "undefined") {
a(this).css("background-color", "#ffffff")
} else {
a(this).css("background-color", g["background-color"])
}
}
}
});
if (h === 0) {
d.val(s)
}
},
fixList: function() {
if (h > 0) {
d.val(a(f.children("ol").children("li").get(h - 1)).html())
}
s = d.val();
j = false;
f.css("display", "none");
i = 0
},
resize: function() {
f.css("top", d.offset().top + d.height() + 6);
f.css("left", d.offset().left);
f.css("height", "auto");
f.css("width", "auto");
if (f.width() < d.width() + k) {
f.width(d.width() + k)
}
}
};
e.init(a(this), m);
a(this).keydown(function(u) {
if ((u.keyCode >= 48 && u.keyCode <= 90) || (u.keyCode >= 96 && u.keyCode <= 105) || (u.keyCode >= 186 && u.keyCode <= 226) || u.keyCode === 8 || u.keyCode === 32 || u.keyCode === 46) {
c = true;
j = false
} else {
if (u.keyCode === 38) {
if (f.css("display") !== "none") {
u.preventDefault()
}
e.selectlist("up")
} else {
if (u.keyCode === 40) {
if (f.css("display") === "none") {
e.suggest()
} else {
e.selectlist("down")
}
} else {
if (u.keyCode === 13) {
if (j) {
e.fixList()
}
}
}
}
}
});
a(this).keyup(function(u) {
if ((u.keyCode >= 48 && u.keyCode <= 90) || (u.keyCode >= 96 && u.keyCode <= 105) || (u.keyCode >= 186 && u.keyCode <= 226) || u.keyCode === 8 || u.keyCode === 32 || u.keyCode === 46) {
c = true;
j = false
} else {
if (u.keyCode === 38) {}
}
});
a(this).blur(function() {
if (!l) {
e.fixList()
}
});
setInterval(function() {
if (r < 5) {
r = r + 1
} else {
if (d.val() !== s) {
if (!j && c && !t) {
e.suggest();
r = 0
}
}
}
}, 100)
}
})(jQuery);