/* * jQuery Selectbox plugin 0.2 * * Copyright 2011-2012, Dimitar Ivanov (http://www.bulgaria-web-developers.com/projects/javascript/selectbox/) * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license. * * Date: Tue Jul 17 19:58:36 2012 +0300 */ (function($) { (function($, undefined) { var PROP_NAME = "selectbox", FALSE = false, TRUE = true; function Selectbox() { this._state = []; this._defaults = { classHolder : "sbHolder", classHolderDisabled : "sbHolderDisabled", classSelector : "sbSelector", classOptions : "sbOptions", classGroup : "sbGroup", classSub : "sbSub", classDisabled : "sbDisabled", classToggleOpen : "sbToggleOpen", classToggle : "sbToggle", classFocus : "sbFocus", speed : 200, effect : "slide", onChange : null, onOpen : null, onClose : null } } $.extend(Selectbox.prototype, { _isOpenSelectbox : function(target) { if (!target) { return FALSE } var inst = this._getInst(target); return inst.isOpen }, _isDisabledSelectbox : function(target) { if (!target) { return FALSE } var inst = this._getInst(target); return inst.isDisabled }, _attachSelectbox : function(target, settings) { if (this._getInst(target)) { return FALSE } var $target = $(target), self = this, inst = self._newInst($target), sbHolder, sbSelector, sbToggle, sbOptions, s = FALSE, optGroup = $target.find("optgroup"), opts = $target.find("option"), olen = opts.length; $target.attr("sb", inst.uid); $.extend(inst.settings, self._defaults, settings); self._state[inst.uid] = FALSE; $target.hide(); function closeOthers() { var key, sel, uid = this.attr("id").split("_")[1]; for (key in self._state) { if (key !== uid) { if (self._state.hasOwnProperty(key)) { sel = $("select[sb='"+key+"']")[0]; if (sel) { self._closeSelectbox(sel) } } } } } sbHolder = $("
", { id : "sbHolder_" + inst.uid, "class" : inst.settings.classHolder, tabindex : $target.attr("tabindex") }); sbSelector = $("", { id : "sbSelector_" + inst.uid, href : "#", "class" : inst.settings.classSelector, click : function(e) { e.preventDefault(); closeOthers.apply($(this), []); var uid = $(this).attr("id").split("_")[1]; if (self._state[uid]) { self._closeSelectbox(target) } else { self._openSelectbox(target) } } }); sbToggle = $("", { id : "sbToggle_" + inst.uid, href : "#", "class" : inst.settings.classToggle, click : function(e) { e.preventDefault(); closeOthers.apply($(this), []); var uid = $(this).attr("id").split("_")[1]; if (self._state[uid]) { self._closeSelectbox(target) } else { self._openSelectbox(target) } } }); sbToggle.appendTo(sbHolder); sbOptions = $("