(function (e, c) { var f = function (j, i) { var m = e(j), i = e.extend({}, e.fn.jqDropDown.defaults, i), p, r, n = i.defaultOption, l, h, k, s = i.effect, o = i.effectSpeed, q = e('<ul class="' + i.optionListName + '" style="display:none;"></ul>'); p = m.width(); m.hide().after('<div class="' + i.containerName + '" style="position:relative;"></div>'); if (n && n !== "") { l = n } else { l = m.find('option[selected="selected"]').text() || m.find("option:eq(0)").text() } h = e('<a href="#" class="' + i.toggleBtnName + '">' + l + "</a>"); r = m.next("div." + i.containerName); r.append(h); q.append(d(m, i)); k = q.find("a"); h.after(q); g(r, p, i); e(document).bind("mousedown", function (u) { var t = e(u.target); if (e(document.activeElement).hasClass(i.toggleBtnName) || e(document.activeElement).hasClass(i.optionListName)) { if (!t.hasClass(i.optionGroupName) && !t.hasClass(i.toggleBtnName)) { if (t.parents().filter(q).length) { h.data("index", q.find("li").index(t.parent())).focus(); b(h, t, i) } else { if (e(document.activeElement).hasClass(i.toggleBtnName) && q.is(":visible").length) { s === "fade" ? q.fadeOut(o) : q.hide(); return false } else { if (e(document.activeElement).hasClass(i.toggleBtnName) && !q.filter(":visible").length) { h.blur(); return false } else { if (i.modal) { return false } } } } s === "fade" ? q.fadeOut(o) : q.hide(); return false } else { return false } } }); k.bind("mouseenter click", function (u) { var t = e(this); u.preventDefault(); q.find("a.selected").removeClass("selected"); t.addClass("selected"); h.data("index", q.find("li").index(t.parent())) }); h.bind("mousedown keydown focusout click", function (y) { var z = e(this), B, t = z.data("index") || 0, v = false, u, x = q.find("a"), A; if (y.type === "mousedown" && y.which === 1) { i.beforeToggle.call(this); a(z, q, i); x.removeClass("selected"); z.focus(); q.find("li:eq(" + t + ") a").addClass("selected"); if (q.is(":hidden")) { s === "fade" ? e("." + i.optionListName).fadeOut(o) : e("." + i.optionListName).hide(); s === "fade" ? q.fadeIn(o) : q.show() } else { s === "fade" ? q.fadeOut(o) : q.hide() } i.afterToggle.call(this) } if (y.type === "keydown") { switch (y.keyCode) { case 9, 27: s === "fade" ? q.fadeOut(o) : q.hide(); break; case 13: e(document).trigger("mousedown", [{ target: q.find("li:eq(" + z.data("index") + ") a:eq(0)")}]); break; case 38: y.preventDefault(); x.removeClass("selected"); for (var w = t - 1; w >= 0; w--) { B = q.find("li:eq(" + (w) + ")"); if (!B.hasClass(i.optionGroupName)) { t = w; break } } break; case 40: y.preventDefault(); x.removeClass("selected"); for (var w = t + 1; w < q.find("li").length; w++) { B = q.find("li:eq(" + (w) + ")"); if (!B.hasClass(i.optionGroupName)) { t = w; break } } break; default: A = String.fromCharCode(y.which).toLowerCase(); for (var w = t + 1; w < q.find("li").length; w++) { B = q.find("li:eq(" + (w) + ")"); if (B.text().slice(0, 1).toLowerCase() === A && !B.hasClass(i.optionGroupName)) { x.removeClass("selected"); t = w; v = true; break } } if (!v) { for (var w = 0; w < t; w++) { B = q.find("li:eq(" + (w) + ")"); if (B.text().slice(0, 1).toLowerCase() === A && !B.hasClass(i.optionGroupName)) { x.removeClass("selected"); t = w; break } } } break } z.data("index", t); u = q.find("li:eq(" + z.data("index") + ") a:eq(0)"); u.addClass("selected"); b(z, u, i) } else { return false } }) }; function b(h, i, j) { var k, l; if (i && i.text() !== "") { h.text(i.text()).append("<span></span>") } if (j.placeholder) { k = e(j.placeholder); j.useValue ? l = i.attr("rel") : l = i.text(); if (k.is("input")) { k.val(l) } else { k.text(l) } } j.optionChanged.call(this) } function d(l, n) { var j, m, o = "", h, k = ""; if (n.data.length) { j = n.data } else { j = l.find("option,optgroup") } if (n.defaultOption && n.defaultOption !== "") { o += '<li class="' + n.optionName + '"><a href="#">' + n.defaultOption + "</a></li>" } for (m = 0; m < j.length; m++) { h = e(j[m]); if (h.is(":selected") && !n.defaultOption) { k = "selected" } if (h.is("option")) { o += '<li class="' + n.optionName + '"><a class="' + k + '" href="#" rel="' + h.val() + '">' + h.text() + "</a></li>" } else { o += '<li class="' + n.optionGroupName + '">' + h.attr("label") + "</li>" } k = "" } return o } function g(o, h, n) { var j = o.find("ul:eq(0)"), m = o.find("ul > li > a"), i = o.find("a:eq(0)"), l = parseInt(i.css("padding-left"), 10) + parseInt(i.css("padding-right"), 10), k; a(i, j, n); if (n.defaultStyle) { o.find("li." + n.optionGroupName).length > 0 ? k = 20 : k = 4; j.css({ width: h + l }); i.css({ width: j.width() - l }).append("<span></span>"); m.css({ "padding-left": k }) } } function a(k, j, m) { var i, l, h; l = parseInt(k.css("padding-top"), 10) + parseInt(k.css("padding-bottom"), 10) || 0; h = parseInt(k.css("border-top-width"), 10) + parseInt(k.css("border-bottom-width"), 10) || 0; if (m.direction === "up" || (k.offset().top + j.height() + 20) > e(c).height() + e(c).scrollTop()) { i = -(j.height() + l - h) } else { i = k.height() + l + h } j.css({ top: i }) } e.fn.jqDropDown = function (h) { return this.each(function () { var i = e(this); if (i.data("jqDropDown")) { return } var j = new f(this, h); i.data("jqDropDown", j) }) }; e.fn.jqDropDown.Debug = function (h) { if (c.console && c.console.log) { c.console.log("hilight selection count: " + h.text()) } }; e.fn.jqDropDown.defaults = { effect: "default", effectSpeed: 400, modal: false, data: {}, defaultOption: null, containerName: "ddContainer", toggleBtnName: "ddToggle", optionListName: "ddOptionList", optionGroupName: "optgroup", optionName: "ddOption", defaultStyle: true, placeholder: null, useValue: true, direction: "down", beforeToggle: function () { }, afterToggle: function () { }, optionChanged: function () { } } } (jQuery, window, undefined));
