(function(a) { jQuery.fn.toChecklist = function(f) { var d = function(m, k) { var j; var i = function(n) { if (n > 3) { j = a(k).attr("showSelectedItems"); a(k).attr("showSelectedItems", "false") } }; var l = function() { a(k).attr("showSelectedItems", j) }; switch (m) { case "clearAll": var g = "li:has(input:checked)"; break; case "checkAll": var g = "li:has(input:not(:checked,:disabled))"; break; case "invert": var g = "li:has(input)"; break; default: alert("toChecklist Plugin says:\n\nWarning - Invalid action requested on checklist.\nThe action requested was: " + m); break } var h = a(g, k).length; i(h); a(g, k).each(function(n) { if (n == h - 2 && h > 3) { l() } a(this).trigger("click") }) }; if (typeof f == "string") { this.each(function() { if (!a(this).isChecklist()) { return true } d(f, this) }); return a } f = jQuery.extend({ addScrollBar: true, addSearchBox: false, searchBoxText: "Type here to search list...", showCheckboxes: true, showSelectedItems: false, submitDataAsArray: true, preferIdOverName: true, cssChecklist: "checklist", cssChecklistHighlighted: "checklistHighlighted", cssLeaveRoomForCheckbox: "leaveRoomForCheckbox", cssEven: "even", cssOdd: "odd", cssChecked: "checked", cssDisabled: "disabled", cssShowSelectedItems: "showSelectedItems", cssFocused: "focused", cssFindInList: "findInList", cssBlurred: "blurred", cssOptgroup: "optgroup" }, f); var b = function(g) { alert("jQuery Plugin Error (Plugin: toChecklist)\n\n" + g) }; var e = (f.addScrollBar) ? "overflow-y: auto; overflow-x: hidden;" : ""; var c = (f.showCheckboxes) ? "padding-left: 25px" : "padding-left: 3px"; this.each(function() { var n = a(this); var u = n.attr("id"); if (u == "" || !f.preferIdOverName) { u = n.attr("name").replace(/\[\]/, ""); if (u == "") { b('Can\'t convert element to checklist.\nYour SELECT element must have a "name" attribute and/or an "id" attribute specified.'); return a } } var r = n.height(); var m = n.width(); if (a.browser.msie) { m += 4 } else { m += 3 } if (this.type != "select-multiple" && this.type != "select-one") { b('Can\'t convert element to checklist.\nExpecting SELECT element with "multiple" attribute.'); return a } else { if (this.type == "select-one") { return a } } var t = function() { var B = a(this).attr("value"); if (B == "") { B = this.innerHTML } B = B.replace(/ /g, "_"); var E = u + "_" + B; var C = a(this).attr("innerHTML"); var A = ""; if (a(this).attr("disabled")) { var w = ' disabled="disabled"'; var D = ' class="disabled"' } else { var w = ""; var D = ""; var A = (a(this).attr("selected")) ? 'checked="checked"' : "" } var h = (f.submitDataAsArray) ? "[]" : ""; a(this).replaceWith('<li tabindex="0"><input type="checkbox" value="' + B + '" name="' + u + h + '" id="' + E + '" ' + A + w + ' /><label for="' + E + '"' + D + ">" + C + "</label></li>"); if (f.showCheckboxes === false) { a("#" + E).css("position", "absolute").css("left", "-50000px") } else { a("label[for=" + E + "]").addClass(f.cssLeaveRoomForCheckbox) } }; a("optgroup", n).each(function() { a("option", this).each(t); a(this).replaceWith('<li class="' + f.cssOptgroup + '">' + a(this).attr("label") + "</li>" + a(this).html()) }); a("option", n).each(t); a("li:first", n).each(function() { if (a(this).hasClass("optgroup")) { a(this).css("border-top", "none") } }); var s = u + "_checklist"; n.replaceWith('<div id="' + u + '"><div id="' + s + '"><ul>' + n.attr("innerHTML") + "</ul></div></div>"); var p = "#" + s; a("#" + u).attr("showSelectedItems", f.showSelectedItems.toString()); a(p).css("position", "relative"); var v = 0; if (f.addSearchBox) { var k = function() { this.value = ""; a(this).removeClass(f.cssBlurred) }; var x = function() { this.value = this.defaultValue; a(this).addClass(f.cssBlurred) }; a(p).before('<div class="findInList" id="' + u + '_findInListDiv"><input type="text" value="' + f.searchBoxText + '" id="' + u + '_findInList" class="' + f.cssBlurred + '" /></div>'); a("#" + u + "_findInList").css("width", m); a("#" + u + "_findInList").bind("focus.focusSearchBox", k).bind("blur.blurSearchBox", x).keyup(function(w) { var h = this; if (this.value == "") { a(p).attr("scrollTop", 0); a(this).unbind("keydown.tabToFocus"); return false } a("label", p).each(function() { if (!a(this).is(":disabled")) { var C = a(this).html().toLowerCase(); var D = h.value.toLowerCase(); if (C.indexOf(D) == 0) { var A = this; var B = this.parentNode.offsetTop; a(p).attr("scrollTop", B); a(h).unbind("blur.blurSearchBox").unbind("keydown.tabToFocus").bind("keydown.tabToFocus", function(E) { if (E.keyCode == 9) { E.preventDefault(); a(A.parentNode).bind("blur.restoreDefaultText", function() { var F = a(h).attr("defaultValue"); a(h).attr("value", F).addClass(f.cssBlurred).bind("blur.blurSearchBox", x); a(this).unbind("blur.restoreDefaultText") }).bind("keydown.tabBack", function(F) { if (F.keyCode == 9 && F.shiftKey) { F.preventDefault(); a(h).unbind("focus.focusSearchBox").removeClass(f.cssBlurred).bind("focus.focusSearchBox", k).bind("blur.blurSearchBox", x).focus(); a(this).unbind("keydown.tabBack") } }).focus(); a(this).unbind("keydown.tabToFocus") } }); return false } } }); return }); v = a("#" + u + "_findInListDiv").height() + 3 } a(p).addClass(f.cssChecklist); if (f.addScrollBar) { a(p).height(r - v).width(m) } else { a(p).height("100%").width(m) } a("ul", p).addClass(f.cssChecklist); a("li:even", p).addClass(f.cssEven); a("li:odd", p).addClass(f.cssOdd); a("li", p).focus(function() { a(this).addClass(f.cssFocused) }).blur(function(h) { a(this).removeClass(f.cssFocused) }); a("li", p).each(function() { if (a("input", this).attr("checked")) { a(this).addClass(f.cssChecked) } }); var l = function() { if (a("li", p).hasClass(f.cssChecked)) { a(p).addClass(f.cssChecklistHighlighted) } else { a(p).removeClass(f.cssChecklistHighlighted) } }; var i = function() { if (a(this).attr("tagName") != "LI") { return } if (a(this).is("li:has(input)")) { a(this).focus() } else { a(this).next().each(i) } }; var y = function(h) { if (h.type == "keydown") { if (h.keyCode == 32 || h.keyCode == 13) { h.preventDefault() } if (h.keyCode == 9 && !h.shiftKey) { h.preventDefault(); a(this).unbind("keydown.tabBack").blur().next().each(i) } else { if (h.keyCode == 9 && h.shiftKey) { } } if (h.keyCode != 32) { return } } a("label", this).unbind(); if (h.target.tagName != "INPUT" && h.target.tagName != "LABEL") { a("input", this).trigger("click") } var w = a("input", this).get(0); j(w); if (a("#" + u).attr("showSelectedItems") === "true") { q() } }; var j = function(h) { if (h.checked) { a(h).parent().addClass(f.cssChecked) } else { a(h).parent().removeClass(f.cssChecked) } l() }; var z = function() { a(this).parent().focus() }; a("li:has(input)", p).click(y).keydown(y); a("label", p).focus(z); a("input", p).focus(z); l(); var o = function(h) { a("input", this).each(function() { this.checked = this.defaultChecked; j(this); if (f.showSelectedItems) { q() } }).parent() }; a("form:has(div." + f.cssChecklist + ")").bind("reset.fixFormElems", o); var g = "#" + u + "_selectedItems"; if (f.showSelectedItems) { a(g).addClass(f.cssShowSelectedItems) } var q = function() { a(g).html(""); a("label", p).each(function() { if (a(this).parent().hasClass(f.cssChecked)) { var h = jQuery.trim(this.innerHTML); a(g).append("<li>" + h + "</li>") } }) }; if (f.showSelectedItems) { q() } }) }; jQuery.fn.isChecklist = function() { var b = false; this.each(function() { var c = a("#" + this.id + "_checklist", this).get(); b = (this.tagName == "DIV" && c); return false }); return (b) ? true : false } })(jQuery);
