var prev; jQuery.fn.extend({ selectbox: function(a) { return this.each(function() { new jQuery.SelectBox(this, a) }) } }); jQuery.SelectBox = function(t, e) { var b = e || {}; b.inputClass = b.inputClass || "selectbox"; b.containerClass = b.containerClass || "selectbox-wrapper"; b.hoverClass = b.hoverClass || "current"; b.currentClass = b.currentClass || "selected"; b.disabledClass = b.disabledClass || "disabled"; b.onChangeCallback = b.onChangeCallback || false; b.onChangeParams = b.onChangeParams || false; b.debug = b.debug || false; var k = t.id; var f = 0; var d = false; var s = 0; var r = jQuery(t); var p = h(b); var c = m(b); r.hide().before(c).before(p); q(); c.click(function() { if (!d) { p.toggle() } }).keydown(function(u) { switch (u.keyCode) { case 38: u.preventDefault(); l(-1); break; case 40: u.preventDefault(); l(1); break; case 13: u.preventDefault(); $("li." + b.hoverClass).trigger("click"); break; case 27: i(); break } }).blur(function() { if (p.is(":visible") && s > 0) { if (b.debug) { console.log("container visible and has focus") } } else { if ((jQuery.browser.msie && jQuery.browser.version.substr(0, 1) < 8) || jQuery.browser.safari) { if (document.activeElement.getAttribute("id").indexOf("_container") == -1) { i() } else { c.focus() } } else { i() } } }); function i() { s = 0; p.hide() } function q() { p.append(n(c.attr("id"))).hide(); var u = c.css("width"); p.width(u) } function h(v) { var u = document.createElement("div"); p = jQuery(u); p.attr("id", k + "_container"); p.addClass(v.containerClass); p.css("display", "none"); return p } function m(u) { var v = jQuery("<input />"); v.attr("id", k + "_input"); v.attr("type", "text"); v.addClass(u.inputClass); v.attr("autocomplete", "off"); v.attr("readonly", "readonly"); v.attr("tabIndex", r.attr("tabindex")); v.css("width", r.css("width")); return v } function l(v) { var u = jQuery("li", p); if (!u || u.length == 0) { return false } f += v; if (f < 0) { f = u.size() } else { if (f > u.size()) { f = 0 } } a(u, f); u.removeClass(b.hoverClass); jQuery(u[f]).addClass(b.hoverClass) } function a(v, w) { var u = jQuery(v[w]).get(0); var v = p.get(0); if (u.offsetTop + u.offsetHeight > v.scrollTop + v.clientHeight) { v.scrollTop = u.offsetTop + u.offsetHeight - v.clientHeight } else { if (u.offsetTop < v.scrollTop) { v.scrollTop = u.offsetTop } } } function g() { var u = jQuery("li." + b.currentClass, p).get(0); var v = ("" + u.id).split("_"); var w = v[v.length - 1]; r.get(0).selectedIndex = $("li", p).index(u); c.val($(u).html().replace("&amp;", "&")); b.onChangeParams = { selectedVal: r.val() }; if (b.onChangeCallback) { b.onChangeCallback(b.onChangeParams) } return true } function o() { return r.val() } function j() { return c.val() } function n(v) { var w = new Array(); var u = document.createElement("ul"); r.children("option").each(function() { var x = document.createElement("li"); x.setAttribute("id", v + "_" + $(this).val()); x.innerHTML = $(this).html(); if ($(this).is(":selected")) { c.val($(this).html().replace("&amp;", "&")); $(x).addClass(b.currentClass) } if ($(this).hasClass("disabled")) { $(x).addClass(b.disabledClass) } u.appendChild(x); $(x).mouseover(function(y) { s = 1; if (b.debug) { console.log("over on : " + this.id) } jQuery(y.target, p).addClass(b.hoverClass) }).mouseout(function(y) { s = -1; if (b.debug) { console.log("out on : " + this.id) } jQuery(y.target, p).removeClass(b.hoverClass) }).click(function(y) { if (!$(this).hasClass("disabled")) { var z = $("li." + b.hoverClass, p).get(0); if (b.debug) { console.log("click on :" + this.id) } $("li." + b.currentClass, p).removeClass(b.currentClass); $(this).addClass(b.currentClass); g(); r.get(0).blur(); i() } }) }); return u } };
