// MSDropDown - uncompressed.jquery.dd // author: Marghoob Suleman - Search me on google // Date: 12th Aug, 2009 // Version: 2.38.4 // Revision: 38 // web: www.giftlelo.com | www.marghoobsuleman.com /* // msDropDown is free jQuery Plugin: you can redistribute it and/or modify // it under the terms of the either the MIT License or the Gnu General Public License (GPL) Version 2 */ ; (function ($) { var msOldDiv = ""; var dd = function (element, options) { var sElement = element; var $this = this; //parent this var options = $.extend({ height: 120, visibleRows: 7, rowHeight: 23, showIcon: true, zIndex: 9999, mainCSS: 'dd', useSprite: false, animStyle: 'slideDown', onInit: '', jsonTitle: true, style: '' }, options); this.ddProp = new Object(); //storing propeties; var oldSelectedValue = ""; var actionSettings = {}; actionSettings.insideWindow = true; actionSettings.keyboardAction = false; actionSettings.currentKey = null; var ddList = false; var config = { postElementHolder: '_msddHolder', postID: '_msdd', postTitleID: '_title', postTitleTextID: '_titletext', postChildID: '_child', postAID: '_msa', postOPTAID: '_msopta', postInputID: '_msinput', postArrowID: '_arrow', postInputhidden: '_inp' }; var styles = { dd: options.mainCSS, ddTitle: 'ddTitle', arrow: 'arrow', ddChild: 'ddChild', ddTitleText: 'ddTitleText', disabled: .30, ddOutOfVision: 'ddOutOfVision', borderTop: 'borderTop', noBorderTop: 'noBorderTop', selected: 'selected' }; var attributes = { actions: "focus,blur,change,click,dblclick,mousedown,mouseup,mouseover,mousemove,mouseout,keypress,keydown,keyup", prop: "size,multiple,disabled,tabindex" }; this.onActions = new Object(); var elementid = $(sElement).prop("id"); if (typeof (elementid) == "undefined" || elementid.length <= 0) { //assign and id; elementid = "msdrpdd" + $.msDropDown.counter++; //I guess it makes unique for the page. $(sElement).attr("id", elementid); }; var inlineCSS = $(sElement).prop("style"); options.style += (inlineCSS == undefined) ? "" : inlineCSS; var allOptions = $(sElement).children(); ddList = ($(sElement).prop("size") > 1 || $(sElement).prop("multiple") == true) ? true : false; if (ddList) { options.visibleRows = $(sElement).prop("size"); }; var a_array = {}; //stores id, html & value etc var currentP = 0; var isFilter = false; var oldHeight; var isClosing = false; var cacheElement = {}; var inputText = ""; var selectedItem; var getElement = function (ele) { if (typeof (cacheElement[ele]) == "undefined") { cacheElement[ele] = document.getElementById(ele); } return cacheElement[ele]; }; var getPostID = function (id) { return elementid + config[id]; }; var getOptionsProperties = function (option) { var currentOption = option; var styles = $(currentOption).prop("style"); return (typeof styles == "undefined") ? "" : styles.cssText; }; var matchIndex = function (index) { if (typeof this.selectedItem === 'undefined') this.selectedItem = $("#" + elementid + " option:selected"); if (this.selectedItem.length > 1) { for (var i = 0; i < this.selectedItem.length; i++) { if (index == this.selectedItem[i].index) { return true; }; }; } else if (this.selectedItem.length == 1) { if (this.selectedItem[0].index == index) { return true; }; }; return false; }; var createA = function (currentOptOption, current, currentopt, tp) { var aTag = ""; //var aidfix = getPostID("postAID"); var aidoptfix = (tp == "opt") ? getPostID("postOPTAID") : getPostID("postAID"); var aid = (tp == "opt") ? aidoptfix + "_" + (current) + "_" + (currentopt) : aidoptfix + "_" + (current); var arrow = ""; var t = ""; var clsName = ""; var pH = ""; //addition html clsName = ' ' + options.useSprite + ' ' + currentOptOption.className; arrow = $(currentOptOption).prop("title"); var reg = new RegExp(/^\{.*\}$/); var isJson = reg.test(arrow); if (options.jsonTitle == true && isJson == true) { if (arrow.length != 0) { var obj = eval("[" + arrow + "]"); img = (typeof obj[0].image == "undefined") ? "" : obj[0].image; t = (typeof obj[0].title == "undefined") ? "" : obj[0].title; pH = (typeof obj[0].postHTML == "undefined") ? "" : obj[0].postHTML; arrow = (img.length == 0) ? "" : ' '; }; } else { arrow = (arrow.length == 0) ? "" : ' '; }; var sText = $(currentOptOption).text(); var sValue = $(currentOptOption).val(); var sEnabledClass = ($(currentOptOption).prop("disabled") == true) ? "disabled" : "enabled"; a_array[aid] = { html: arrow + sText, value: sValue, text: sText, index: currentOptOption.index, id: aid, title: t }; var innerStyle = getOptionsProperties(currentOptOption); if (matchIndex(currentOptOption.index) == true) { aTag += ''; aTag += arrow + '' + sText + ''; if (pH !== "") { aTag += pH; }; aTag += ''; return aTag; }; var in_array = function (t) { var sText = t.toLowerCase(); if (sText.length == 0) return -1; var a = ""; for (var i in a_array) { var a_text = a_array[i].text.toLowerCase(); if (a_text.substr(0, sText.length) == sText) { a += "#" + a_array[i].id + ", "; }; }; return (a == "") ? -1 : a; }; var createATags = function () { var childnodes = allOptions; if (childnodes.length == 0) return ""; var aTag = ""; var aidfix = getPostID("postAID"); var aidoptfix = getPostID("postOPTAID"); childnodes.each(function (current) { var currentOption = childnodes[current]; //OPTGROUP if (currentOption.nodeName.toString().toLowerCase() == "optgroup") { aTag += "
"; aTag += "" + $(currentOption).prop("label") + ""; var optChild = $(currentOption).children(); optChild.each(function (currentopt) { var currentOptOption = optChild[currentopt]; aTag += createA(currentOptOption, current, currentopt, "opt"); }); aTag += "
"; } else { aTag += createA(currentOption, current, "", ""); }; }); return aTag; }; var createChildDiv = function () { var id = getPostID("postID"); var childid = getPostID("postChildID"); var sStyle = options.style; sDiv = ""; sDiv += '
0) { sText = $("#" + elementid + " option:selected").text(); arrow = $("#" + elementid + " option:selected").prop("title"); }; var img = ""; var t = ""; var reg = new RegExp(/^\{.*\}$/); var isJson = reg.test(arrow); if (options.jsonTitle == true && isJson == true) { if (arrow.length != 0) { var obj = eval("[" + arrow + "]"); img = (typeof obj[0].image == "undefined") ? "" : obj[0].image; t = (typeof obj[0].title == "undefined") ? "" : obj[0].title; arrow = (img.length == 0 || options.showIcon == false || options.useSprite != false) ? "" : ' '; }; } else { arrow = (arrow.length == 0 || arrow == undefined || options.showIcon == false || options.useSprite != false) ? "" : ' '; }; var sDiv = '
' + arrow + '' + sText + '
'; return sDiv; }; var applyEventsOnA = function () { var childid = getPostID("postChildID"); $("#" + childid + " a.enabled").unbind("click"); //remove old one $("#" + childid + " a.enabled").bind("click", function (event) { event.preventDefault(); manageSelection(this); setValue(); if (!ddList) { $("#" + childid).unbind("mouseover"); setInsideWindow(false); var sText = (options.showIcon == false) ? $(this).text() : $(this).html(); setTitleText(sText); //$this.data("dd").close(); $this.close(); }; //actionSettings.oldIndex = a_array[$($this).prop("id")].index; }); }; var createDropDown = function () { var changeInsertionPoint = false; var id = getPostID("postID"); var titleid = getPostID("postTitleID"); var titletextid = getPostID("postTitleTextID"); var childid = getPostID("postChildID"); var arrowid = getPostID("postArrowID"); var iWidth = $("#" + elementid).outerWidth(); var sStyle = options.style; if ($("#" + id).length > 0) { $("#" + id).remove(); changeInsertionPoint = true; }; var sDiv = '
options.visibleRows) { var margin = parseInt($("#" + childid + " a:first").css("padding-bottom")) + parseInt($("#" + childid + " a:first").css("padding-top")); var iHeight = ((options.rowHeight) * options.visibleRows) - margin; $("#" + childid).css("height", iHeight + "px"); } else if (ddList) { var iHeight = $("#" + elementid).height(); $("#" + childid).css("height", iHeight + "px"); }; //set out of vision if (changeInsertionPoint == false) { setOutOfVision(); addRefreshMethods(elementid); }; if ($("#" + elementid).prop("disabled") == true) { $("#" + id).css("opacity", styles.disabled); }; applyEvents(); //add events //arrow hightlight $("#" + titleid).bind("mouseover", function (event) { hightlightArrow(1); }); $("#" + titleid).bind("mouseout", function (event) { hightlightArrow(0); }); //open close events applyEventsOnA(); $("#" + childid + " a.disabled").css("opacity", styles.disabled); //alert("ddList "+ddList) if (ddList) { $("#" + childid).bind("mouseover", function (event) { if (!actionSettings.keyboardAction) { actionSettings.keyboardAction = true; $(document).bind("keydown", function (event) { var keyCode = event.keyCode; actionSettings.currentKey = keyCode; if (keyCode == 39 || keyCode == 40) { //move to next event.preventDefault(); event.stopPropagation(); next(); setValue(); }; if (keyCode == 37 || keyCode == 38) { event.preventDefault(); event.stopPropagation(); //move to previous previous(); setValue(); }; }); } }); }; $("#" + childid).bind("mouseout", function (event) { setInsideWindow(false); $(document).unbind("keydown", d_onkeydown); actionSettings.keyboardAction = false; actionSettings.currentKey = null; }); $("#" + titleid).bind("click", function (event) { setInsideWindow(false); if ($("#" + childid + ":visible").length == 1) { $("#" + childid).unbind("mouseover"); } else { $("#" + childid).bind("mouseover", function (event) { setInsideWindow(true); }); //alert("open "+elementid + $this); //$this.data("dd").openMe(); $this.open(); }; }); $("#" + titleid).bind("mouseout", function (evt) { setInsideWindow(false); }); if (options.showIcon && options.useSprite != false) { setTitleImageSprite(); }; }; var getByIndex = function (index) { for (var i in a_array) { if (a_array[i].index == index) { return a_array[i]; }; }; return -1; }; var manageSelection = function (obj) { var childid = getPostID("postChildID"); if ($("#" + childid + " a." + styles.selected).length == 1) { //check if there is any selected oldSelectedValue = $("#" + childid + " a." + styles.selected).text(); //i should have value here. but sometime value is missing //alert("oldSelectedValue "+oldSelectedValue); }; if (!ddList) { $("#" + childid + " a." + styles.selected).removeClass(styles.selected); }; var selectedA = $("#" + childid + " a." + styles.selected).prop("id"); if (selectedA != undefined) { var oldIndex = (actionSettings.oldIndex == undefined || actionSettings.oldIndex == null) ? a_array[selectedA].index : actionSettings.oldIndex; }; if (obj && !ddList) { $(obj).addClass(styles.selected); }; if (ddList) { var keyCode = actionSettings.currentKey; if ($("#" + elementid).prop("multiple") == true) { if (keyCode == 17) { //control actionSettings.oldIndex = a_array[$(obj).prop("id")].index; $(obj).toggleClass(styles.selected); //multiple } else if (keyCode == 16) { $("#" + childid + " a." + styles.selected).removeClass(styles.selected); $(obj).addClass(styles.selected); //shift var currentSelected = $(obj).prop("id"); var currentIndex = a_array[currentSelected].index; for (var i = Math.min(oldIndex, currentIndex) ; i <= Math.max(oldIndex, currentIndex) ; i++) { $("#" + getByIndex(i).id).addClass(styles.selected); }; } else { $("#" + childid + " a." + styles.selected).removeClass(styles.selected); $(obj).addClass(styles.selected); actionSettings.oldIndex = a_array[$(obj).prop("id")].index; }; } else { $("#" + childid + " a." + styles.selected).removeClass(styles.selected); $(obj).addClass(styles.selected); actionSettings.oldIndex = a_array[$(obj).prop("id")].index; }; //isSingle }; }; var addRefreshMethods = function (id) { //deprecated var objid = id; getElement(objid).refresh = function (e) { $("#" + objid).msDropDown(options); }; }; var setInsideWindow = function (val) { actionSettings.insideWindow = val; }; var getInsideWindow = function () { return actionSettings.insideWindow; //will work on this /* var childid = getPostID("postChildID"); return ($("#"+childid + ":visible").length == 0) ? false : true; */ }; var applyEvents = function () { var mainid = getPostID("postID"); var actions_array = attributes.actions.split(","); for (var iCount = 0; iCount < actions_array.length; iCount++) { var action = actions_array[iCount]; //var actionFound = $("#"+elementid).prop(action); var actionFound = has_handler(action); if (actionFound == true) { switch (action) { case "focus": $("#" + mainid).bind("mouseenter", function (event) { getElement(elementid).focus(); //$("#"+elementid).focus(); }); break; case "click": $("#" + mainid).bind("click", function (event) { //getElement(elementid).onclick(); $("#" + elementid).trigger("click"); }); break; case "dblclick": $("#" + mainid).bind("dblclick", function (event) { //getElement(elementid).ondblclick(); $("#" + elementid).trigger("dblclick"); }); break; case "mousedown": $("#" + mainid).bind("mousedown", function (event) { //getElement(elementid).onmousedown(); $("#" + elementid).trigger("mousedown"); }); break; case "mouseup": //has in close mthod $("#" + mainid).bind("mouseup", function (event) { //getElement(elementid).onmouseup(); $("#" + elementid).trigger("mouseup"); //setValue(); }); break; case "mouseover": $("#" + mainid).bind("mouseover", function (event) { //getElement(elementid).onmouseover(); $("#" + elementid).trigger("mouseover"); }); break; case "mousemove": $("#" + mainid).bind("mousemove", function (event) { //getElement(elementid).onmousemove(); $("#" + elementid).trigger("mousemove"); }); break; case "mouseout": $("#" + mainid).bind("mouseout", function (event) { //getElement(elementid).onmouseout(); $("#" + elementid).trigger("mouseout"); }); break; }; }; }; }; var setOutOfVision = function () { var sId = getPostID("postElementHolder"); $("#" + elementid).after("
"); $("#" + elementid).appendTo($("#" + sId)); }; var setTitleText = function (sText) { var titletextid = getPostID("postTitleTextID"); $("#" + titletextid).html(sText); }; var navigateA = function (w) { var where = w; var childid = getPostID("postChildID"); var visibleA = $("#" + childid + " a:visible"); var totalA = visibleA.length; var currentP = $("#" + childid + " a:visible").index($("#" + childid + " a.selected:visible")); var nextA; switch (where) { case "next": if (currentP < totalA - 1) { currentP++; nextA = visibleA[currentP]; }; break; case "previous": if (currentP < totalA && currentP > 0) { currentP--; nextA = visibleA[currentP]; }; break; }; if (typeof (nextA) == "undefined") { return false; }; $("#" + childid + " a." + styles.selected).removeClass(styles.selected); $(nextA).addClass(styles.selected); var selectedA = nextA.id; if (!ddList) { var sText = (options.showIcon == false) ? a_array[selectedA].text : $("#" + selectedA).html(); setTitleText(sText); setTitleImageSprite(a_array[selectedA].index); }; if (where == "next") { if (parseInt(($("#" + selectedA).position().top + $("#" + selectedA).height())) >= parseInt($("#" + childid).height())) { $("#" + childid).scrollTop(($("#" + childid).scrollTop()) + $("#" + selectedA).height() + $("#" + selectedA).height()); }; } else { if (parseInt(($("#" + selectedA).position().top + $("#" + selectedA).height())) <= 0) { $("#" + childid).scrollTop(($("#" + childid).scrollTop() - $("#" + childid).height()) - $("#" + selectedA).height()); }; }; }; var next = function () { navigateA("next"); }; var previous = function () { navigateA("previous"); }; var setTitleImageSprite = function (i) { if (options.useSprite != false) { var titletextid = getPostID("postTitleTextID"); var index = (typeof (i) == "undefined") ? getElement(elementid).selectedIndex : i; var sClassName = getElement(elementid).options[index].className; if (sClassName.length > 0) { var childid = getPostID("postChildID"); var id = $("#" + childid + " a." + sClassName).prop("id"); var backgroundImg = $("#" + id).css("background-image"); var backgroundPosition = $("#" + id).css("background-position"); if (backgroundPosition == undefined) { backgroundPosition = $("#" + id).css("background-position-x") + " " + $("#" + id).css("background-position-y"); }; var paddingLeft = $("#" + id).css("padding-left"); if (backgroundImg != undefined) { $("#" + titletextid).find("." + styles.ddTitleText).attr('style', "background:" + backgroundImg); }; if (backgroundPosition != undefined) { $("#" + titletextid).find("." + styles.ddTitleText).css('background-position', backgroundPosition); }; if (paddingLeft != undefined) { $("#" + titletextid).find("." + styles.ddTitleText).css('padding-left', paddingLeft); }; $("#" + titletextid).find("." + styles.ddTitleText).css('background-repeat', 'no-repeat'); $("#" + titletextid).find("." + styles.ddTitleText).css('padding-bottom', '2px'); }; }; }; var setValue = function () { //alert("setValue "+elementid); var childid = getPostID("postChildID"); var allSelected = $("#" + childid + " a." + styles.selected); if (allSelected.length == 1) { var sText = $("#" + childid + " a." + styles.selected).text(); var selectedA = $("#" + childid + " a." + styles.selected).prop("id"); if (selectedA != undefined) { var sValue = a_array[selectedA].value; getElement(elementid).selectedIndex = a_array[selectedA].index; }; //set image on title if using sprite if (options.showIcon && options.useSprite != false) setTitleImageSprite(); } else if (allSelected.length > 1) { //var alls = $("#"+elementid +" > option:selected").removeprop("selected"); for (var i = 0; i < allSelected.length; i++) { var selectedA = $(allSelected[i]).prop("id"); var index = a_array[selectedA].index; getElement(elementid).options[index].selected = "selected"; }; }; //alert(getElement(elementid).selectedIndex); var sIndex = getElement(elementid).selectedIndex; $this.ddProp["selectedIndex"] = sIndex; //alert("selectedIndex "+ $this.ddProp["selectedIndex"] + " sIndex "+sIndex); }; var has_handler = function (name) { // True if a handler has been added in the html. if ($("#" + elementid).prop("on" + name) != undefined) { return true; }; // True if a handler has been added using jQuery. var evs = $("#" + elementid).data("events"); if (evs && evs[name]) { return true; }; return false; }; var blur_m = function (evt) { $("#" + elementid).focus(); $("#" + elementid)[0].blur(); setValue(); $(document).unbind("mouseup", d_onmouseup); $(document).unbind("mouseup", blur_m); }; var checkMethodAndApply = function () { //console.log("calling checkMethodAndApply"); var childid = getPostID("postChildID"); if (has_handler('change') == true) { //alert(1); var currentSelected = a_array[$("#" + childid + " a.selected").prop("id")]; if (currentSelected != undefined) { var currentSelectedValue = currentSelected.text; if ($.trim(oldSelectedValue) !== $.trim(currentSelectedValue) && oldSelectedValue !== "") { $("#" + elementid).trigger("change"); }; } }; if (has_handler('mouseup') == true) { $("#" + elementid).trigger("mouseup"); }; if (has_handler('blur') == true) { $(document).bind("mouseup", blur_m); }; return false; }; var hightlightArrow = function (ison) { var arrowid = getPostID("postArrowID"); if (ison == 1) $("#" + arrowid).css({ backgroundPosition: '0 100%' }); else $("#" + arrowid).css({ backgroundPosition: '0 0' }); }; var setOriginalProperties = function () { //properties = {}; for (var i in getElement(elementid)) { if (typeof (getElement(elementid)[i]) !== 'function' && typeof (getElement(elementid)[i]) !== "undefined" && typeof (getElement(elementid)[i]) !== "null") { $this.set(i, getElement(elementid)[i], true); //true = setting local properties }; }; }; var setValueByIndex = function (prop, val) { if (getByIndex(val) != -1) { getElement(elementid)[prop] = val; var childid = getPostID("postChildID"); $("#" + childid + " a." + styles.selected).removeClass(styles.selected); $("#" + getByIndex(val).id).addClass(styles.selected); var sText = getByIndex(getElement(elementid).selectedIndex).html; setTitleText(sText); }; }; var addRemoveFromIndex = function (i, action) { if (action == 'd') { for (var key in a_array) { if (a_array[key].index == i) { delete a_array[key]; break; }; }; }; //update index var count = 0; for (var key in a_array) { a_array[key].index = count; count++; }; }; var shouldOpenOpposite = function () { var childid = getPostID("postChildID"); var main = getPostID("postID"); var pos = $("#" + main).offset(); var mH = $("#" + main).height(); var wH = $(window).height(); var st = $(window).scrollTop(); var cH = $("#" + childid).height(); var css = { zIndex: options.zIndex, top: (mH) + "px", display: "none" }; var ani = options.animStyle; var opp = false; var borderTop = styles.noBorderTop; $("#" + childid).removeClass(styles.noBorderTop); $("#" + childid).removeClass(styles.borderTop); if ((wH + st) < Math.floor(cH + mH + pos.top)) { var tp = cH; css = { zIndex: options.zIndex, top: "-" + tp + "px", display: "none" }; ani = "show"; opp = true; borderTop = styles.borderTop; }; return { opp: opp, ani: ani, css: css, border: borderTop }; }; var fireOpenEvent = function () { if ($this.onActions["onOpen"] != null) { eval($this.onActions["onOpen"])($this); }; }; var fireCloseEvent = function () { checkMethodAndApply(); if ($this.onActions["onClose"] != null) { eval($this.onActions["onClose"])($this); }; }; var d_onkeydown = function (event) { var childid = getPostID("postChildID"); var keyCode = event.keyCode; //alert("keyCode "+keyCode); if (keyCode == 8) { event.preventDefault(); event.stopPropagation(); //remove char inputText = (inputText.length == 0) ? "" : inputText.substr(0, inputText.length - 1); }; switch (keyCode) { case 39: case 40: //move to next event.preventDefault(); event.stopPropagation(); next(); break; case 37: case 38: //move to previous event.preventDefault(); event.stopPropagation(); previous(); break; case 27: case 13: $this.close(); setValue(); break; default: if (keyCode > 46) { inputText += String.fromCharCode(keyCode); }; var ind = in_array(inputText); if (ind != -1) { $("#" + childid).css({ height: 'auto' }); $("#" + childid + " a").hide(); $(ind).show(); var wf = shouldOpenOpposite(); $("#" + childid).css(wf.css); $("#" + childid).css({ display: 'block' }); } else { $("#" + childid + " a").show(); $("#" + childid).css({ height: oldHeight + 'px' }); }; break; }; if (has_handler("keydown") == true) { getElement(elementid).onkeydown(); }; return false; }; var d_onmouseup = function (event) { if (getInsideWindow() == false) { //alert("evt.target: "+event.target); //$this.data("dd").close(); $this.close(); }; return false; }; var d_onkeyup = function (event) { if ($("#" + elementid).prop("onkeyup") != undefined) { //$("#"+elementid).keyup(); getElement(elementid).onkeyup(); }; return false; }; /************* public methods *********************/ this.open = function () { if (($this.get("disabled", true) == true) || ($this.get("options", true).length == 0)) return; var childid = getPostID("postChildID"); if (msOldDiv != "" && childid != msOldDiv) { $("#" + msOldDiv).slideUp("fast"); $("#" + msOldDiv).css({ zIndex: '0' }); }; if ($("#" + childid).css("display") == "none") { var oldSelected = a_array[$("#" + childid + " a.selected").prop("id")]; if (oldSelected != undefined) oldSelectedValue = oldSelected.text; //keyboard action inputText = ""; oldHeight = $("#" + childid).height(); $("#" + childid + " a").show(); $(document).bind("keydown", d_onkeydown); $(document).bind("keyup", d_onkeyup); //end keyboard action //close onmouseup $(document).bind("mouseup", d_onmouseup); //check open var wf = shouldOpenOpposite(); $("#" + childid).css(wf.css); if (wf.opp == true) { $("#" + childid).css({ display: 'block' }); $("#" + childid).addClass(wf.border); fireOpenEvent(); } else { $("#" + childid)[wf.ani]("fast", function () { $("#" + childid).addClass(wf.border); fireOpenEvent(); }); }; if (childid != msOldDiv) { msOldDiv = childid; }; }; }; this.close = function () { var childid = getPostID("postChildID"); if (!$("#" + childid).is(":visible") || isClosing) return; isClosing = true; //console.log("calling close " + $("#"+childid).css("display")); if ($("#" + childid).css("display") == "none") { return false; }; var top = $("#" + getPostID("postTitleID")).position().top; var wf = shouldOpenOpposite(); //var oldHeight = $("#"+childid).height(); isFilter = false; if (wf.opp == true) { $("#" + childid).animate({ height: 0, top: top }, function () { $("#" + childid).css({ height: oldHeight + 'px', display: 'none' }); fireCloseEvent(); isClosing = false; }); } else { $("#" + childid).slideUp("fast", function (event) { fireCloseEvent(); $("#" + childid).css({ zIndex: '0' }); $("#" + childid).css({ height: oldHeight + 'px' }); isClosing = false; }); }; setTitleImageSprite(); $(document).unbind("keydown", d_onkeydown); $(document).unbind("keyup", d_onkeyup); $(document).unbind("mouseup", d_onmouseup); }; this.selectedIndex = function (i) { if (typeof (i) == "undefined") { return $this.get("selectedIndex"); } else { $this.set("selectedIndex", i); }; }; this.debug = function (is) { if (typeof (is) == "undefined" || is == true) { $("." + styles.ddOutOfVision).removeAttr("style"); } else { $("." + styles.ddOutOfVision).attr("style", "height:0px;overflow:hidden;position:absolute"); }; }; //update properties this.set = function (prop, val, isLocal) { //alert("- set " + prop + " : "+val); if (typeof prop == "undefined" || typeof val == "undefined") return false; $this.ddProp[prop] = val; if (isLocal != true) { switch (prop) { case "selectedIndex": setValueByIndex(prop, val); break; case "disabled": $this.disabled(val, true); break; case "multiple": getElement(elementid)[prop] = val; ddList = ($(sElement).prop("size") > 0 || $(sElement).prop("multiple") == true) ? true : false; if (ddList) { //do something var iHeight = $("#" + elementid).height(); var childid = getPostID("postChildID"); $("#" + childid).css("height", iHeight + "px"); //hide titlebar var titleid = getPostID("postTitleID"); $("#" + titleid).hide(); var childid = getPostID("postChildID"); $("#" + childid).css({ display: 'block', position: 'relative' }); applyEventsOnA(); }; break; case "size": getElement(elementid)[prop] = val; if (val == 0) { getElement(elementid).multiple = false; }; ddList = ($(sElement).prop("size") > 0 || $(sElement).prop("multiple") == true) ? true : false; if (val == 0) { //show titlebar var titleid = getPostID("postTitleID"); $("#" + titleid).show(); var childid = getPostID("postChildID"); $("#" + childid).css({ display: 'none', position: 'absolute' }); var sText = ""; if (getElement(elementid).selectedIndex >= 0) { var aObj = getByIndex(getElement(elementid).selectedIndex); sText = aObj.html; manageSelection($("#" + aObj.id)); }; setTitleText(sText); } else { //hide titlebar var titleid = getPostID("postTitleID"); $("#" + titleid).hide(); var childid = getPostID("postChildID"); $("#" + childid).css({ display: 'block', position: 'relative' }); }; break; default: try { //check if this is not a readonly properties getElement(elementid)[prop] = val; } catch (e) { //silent }; break; }; }; //alert("get " + prop + " : "+$this.ddProp[prop]); //$this.set("selectedIndex", 0); }; this.get = function (prop, forceRefresh) { if (prop == undefined && forceRefresh == undefined) { //alert("c1 : " +$this.ddProp); return $this.ddProp; }; if (prop != undefined && forceRefresh == undefined) { //alert("c2 : " +$this.ddProp[prop]); return ($this.ddProp[prop] != undefined) ? $this.ddProp[prop] : null; }; if (prop != undefined && forceRefresh != undefined) { //alert("c3 : " +getElement(elementid)[prop]); return getElement(elementid)[prop]; }; }; this.visible = function (val) { var id = getPostID("postID"); if (val == true) { $("#" + id).show(); } else if (val == false) { $("#" + id).hide(); } else { return $("#" + id).css("display"); }; }; this.add = function (opt, index) { var objOpt = opt; var sText = objOpt.text; var sValue = (objOpt.value == undefined || objOpt.value == null) ? sText : objOpt.value; var img = (objOpt["title"] == undefined || objOpt["title"] == null) ? '' : objOpt["title"]; var i = (index == undefined || index == null) ? getElement(elementid).options.length : index; getElement(elementid).options[i] = new Option(sText, sValue); if (img != '') getElement(elementid).options[i]["title"] = img; //check if exist var ifA = getByIndex(i); if (ifA != -1) { //replace var aTag = createA(getElement(elementid).options[i], i, "", ""); $("#" + ifA.id).html(aTag); //a_array[key] } else { var aTag = createA(getElement(elementid).options[i], i, "", ""); //add var childid = getPostID("postChildID"); $("#" + childid).append(aTag); applyEventsOnA(); }; }; this.remove = function (i) { getElement(elementid).remove(i); if ((getByIndex(i)) != -1) { $("#" + getByIndex(i).id).remove(); addRemoveFromIndex(i, 'd'); }; //alert("a" +a); if (getElement(elementid).length == 0) { setTitleText(""); } else { var sText = getByIndex(getElement(elementid).selectedIndex).html; setTitleText(sText); }; $this.set("selectedIndex", getElement(elementid).selectedIndex); }; this.disabled = function (dis, isLocal) { getElement(elementid).disabled = dis; //alert(getElement(elementid).disabled); var id = getPostID("postID"); if (dis == true) { $("#" + id).css("opacity", styles.disabled); $this.close(); } else if (dis == false) { $("#" + id).css("opacity", 1); }; if (isLocal != true) { $this.set("disabled", dis); }; }; //return form element this.form = function () { return (getElement(elementid).form == undefined) ? null : getElement(elementid).form; }; this.item = function () { //index, subindex - use arguments.length if (arguments.length == 1) { return getElement(elementid).item(arguments[0]); } else if (arguments.length == 2) { return getElement(elementid).item(arguments[0], arguments[1]); } else { throw { message: "An index is required!" }; }; }; this.namedItem = function (nm) { return getElement(elementid).namedItem(nm); }; this.multiple = function (is) { if (typeof (is) == "undefined") { return $this.get("multiple"); } else { $this.set("multiple", is); }; }; this.size = function (sz) { if (typeof (sz) == "undefined") { return $this.get("size"); } else { $this.set("size", sz); }; }; this.addMyEvent = function (nm, fn) { $this.onActions[nm] = fn; }; this.fireEvent = function (nm) { eval($this.onActions[nm])($this); }; this.showRows = function (r) { if (typeof r == "undefined" || r == 0) { return false }; var childid = getPostID("postChildID"); var fc = $("#" + childid + " a:first").height(); var dh = (fc == 0) ? options.rowHeight : fc; var iHeight = r * dh; $("#" + childid).css("height", iHeight + "px"); }; //end var updateCommonVars = function () { $this.set("version", $.msDropDown.version); $this.set("author", $.msDropDown.author); }; var init = function () { //create wrapper createDropDown(); //update propties //alert("init"); setOriginalProperties(); updateCommonVars(); if (options.onInit != '') { eval(options.onInit)($this); }; }; init(); }; //static $.msDropDown = { version: '2.38.4', author: "Marghoob Suleman", counter: 20, debug: function (v) { if (v == true) { $(".ddOutOfVision").css({ height: '20px', position: 'relative' }); } else { $(".ddOutOfVision").css({ height: '0px', position: 'absolute' }); }; }, create: function (id, opt) { return $(id).msDropDown(opt).data("dd"); } }; $.fn.extend({ msDropDown: function (options) { return this.each(function () { //if ($(this).data('dd')) return; // need to comment when using refresh method - will remove in next version var mydropdown = new dd(this, options); $(this).data('dd', mydropdown); }); } }); //fixed for prop if (typeof ($.fn.prop) == 'undefined') { $.fn.prop = function (w, v) { if (typeof v == "undefined") { return $(this).attr(w); }; try { $(this).attr(w, v); } catch (e) { //some properties are read only. }; }; }; })(jQuery);