| Current Path : /home/digilove/public_html/components/com_marketplace/js/msdropdown/ |
| Current File : /home/digilove/public_html/components/com_marketplace/js/msdropdown/jquery.dd.min.js |
// MSDropDown - jquery.dd.js
// author: Marghoob Suleman - http://www.marghoobsuleman.com/
// Date: 10 Nov, 2012
// Version: 3.5.2
// Revision: 27
// web: 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
*/
var msBeautify = msBeautify || {};
(function($) {
msBeautify = {
version: { msDropdown: '3.5.2' },
author: "Marghoob Suleman",
counter: 20,
debug: function(v) {
if (v !== false) {
$(".ddOutOfVision").css({ height: 'auto', position: 'relative' });
} else {
$(".ddOutOfVision").css({ height: '0px', position: 'absolute' });
}
},
oldDiv: '',
create: function(id, settings, type) {
type = type || "dropdown";
var data;
switch (type.toLowerCase()) {
case "dropdown":
case "select":
data = $(id).msDropdown(settings).data("dd");
break;
}
return data;
}
};
$.msDropDown = {}; //Legacy
$.msDropdown = {}; //camelCaps
$.extend(true, $.msDropDown, msBeautify);
$.extend(true, $.msDropdown, msBeautify);
// make compatibiliy with old and new jquery
if ($.fn.prop === undefined) { $.fn.prop = $.fn.attr; }
if ($.fn.on === undefined) {
$.fn.on = $.fn.bind;
$.fn.off = $.fn.unbind;
}
if (typeof $.expr.createPseudo === 'function') {
//jQuery 1.8 or greater
$.expr[':'].Contains = $.expr.createPseudo(function(arg) { return function(elem) { return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0; }; });
} else {
//lower version
$.expr[':'].Contains = function(a, i, m) { return $(a).text().toUpperCase().indexOf(m[3].toUpperCase()) >= 0; };
}
//dropdown class
function dd(element, settings) {
var settings = $.extend(true, {
byJson: { data: null, selectedIndex: 0, name: null, size: 0, multiple: false, width: 250 },
mainCSS: 'dd',
height: 120, //not using currently
visibleRows: 7,
rowHeight: 0,
showIcon: true,
zIndex: 9999,
useSprite: false,
animStyle: 'slideDown',
event: 'click',
openDirection: 'auto', //auto || alwaysUp || alwaysDown
jsonTitle: true,
style: '',
disabledOpacity: 0.7,
disabledOptionEvents: true,
childWidth: 0,
enableCheckbox: false, //this needs to multiple or it will set element to multiple
checkboxNameSuffix: '_mscheck',
append: '',
prepend: '',
reverseMode: true, //it will update the msdropdown UI/value if you update the original dropdown - will be usefull if are using knockout.js or playing with original dropdown
roundedCorner: true,
enableAutoFilter: true,
on: { create: null, open: null, close: null, add: null, remove: null, change: null, blur: null, click: null, dblclick: null, mousemove: null, mouseover: null, mouseout: null, focus: null, mousedown: null, mouseup: null }
}, settings);
var $this = this; //this class
var holderId = { postElementHolder: '_msddHolder', postID: '_msdd', postTitleID: '_title', postTitleTextID: '_titleText', postChildID: '_child' };
var css = { dd: settings.mainCSS, ddTitle: 'ddTitle', arrow: 'ddArrow arrowoff', ddChild: 'ddChild', ddTitleText: 'ddTitleText', disabled: 'disabled', enabled: 'enabled', ddOutOfVision: 'ddOutOfVision', borderTop: 'borderTop', noBorderTop: 'noBorderTop', selected: 'selected', divider: 'divider', optgroup: "optgroup", optgroupTitle: "optgroupTitle", description: "description", label: "ddlabel", hover: 'hover', disabledAll: 'disabledAll' };
var css_i = { li: '_msddli_', borderRadiusTp: 'borderRadiusTp', ddChildMore: 'border shadow', fnone: "fnone" };
var isList = false,
isMultiple = false,
isDisabled = false,
cacheElement = {},
element, orginial = {},
isOpen = false;
var DOWN_ARROW = 40,
UP_ARROW = 38,
LEFT_ARROW = 37,
RIGHT_ARROW = 39,
ESCAPE = 27,
ENTER = 13,
ALPHABETS_START = 47,
SHIFT = 16,
CONTROL = 17,
BACKSPACE = 8,
DELETE = 46;
var shiftHolded = false,
controlHolded = false,
lastTarget = null,
forcedTrigger = false,
oldSelected, isCreated = false;
var doc = document,
ua = window.navigator.userAgent,
isIE = ua.match(/msie/i);
settings.reverseMode = settings.reverseMode.toString();
settings.roundedCorner = settings.roundedCorner.toString();
var isArray = function(obj) {
return (Object.prototype.toString.call(obj) == "[object Array]") ? true : false;
};
var msieversion = function() {
var msie = ua.indexOf("MSIE");
if (msie > 0) { // If Internet Explorer, return version number
return parseInt(ua.substring(msie + 5, ua.indexOf(".", msie)));
} else { // If another browser, return 0
return 0;
};
};
var checkDataSetting = function() {
settings.mainCSS = $("#" + element).data("maincss") || settings.mainCSS;
settings.visibleRows = $("#" + element).data("visiblerows") || settings.visibleRows;
if ($("#" + element).data("showicon") == false) { settings.showIcon = $("#" + element).data("showicon"); };
settings.useSprite = $("#" + element).data("usesprite") || settings.useSprite;
settings.animStyle = $("#" + element).data("animstyle") || settings.animStyle;
settings.event = $("#" + element).data("event") || settings.event;
settings.openDirection = $("#" + element).data("opendirection") || settings.openDirection;
settings.jsonTitle = $("#" + element).data("jsontitle") || settings.jsonTitle;
settings.disabledOpacity = $("#" + element).data("disabledopacity") || settings.disabledOpacity;
settings.childWidth = $("#" + element).data("childwidth") || settings.childWidth;
settings.enableCheckbox = $("#" + element).data("enablecheckbox") || settings.enableCheckbox;
settings.checkboxNameSuffix = $("#" + element).data("checkboxnamesuffix") || settings.checkboxNameSuffix;
settings.append = $("#" + element).data("append") || settings.append;
settings.prepend = $("#" + element).data("prepend") || settings.prepend;
settings.reverseMode = $("#" + element).data("reversemode") || settings.reverseMode;
settings.roundedCorner = $("#" + element).data("roundedcorner") || settings.roundedCorner;
settings.enableAutoFilter = $("#" + element).data("enableautofilter") || settings.enableAutoFilter;
//make string
settings.reverseMode = settings.reverseMode.toString();
settings.roundedCorner = settings.roundedCorner.toString();
settings.enableAutoFilter = settings.enableAutoFilter.toString();
};
var getElement = function(ele) {
if (cacheElement[ele] === undefined) {
cacheElement[ele] = doc.getElementById(ele);
}
return cacheElement[ele];
};
var getIndex = function(opt) {
var childid = getPostID("postChildID");
return $("#" + childid + " li." + css_i.li).index(opt);
};
var createByJson = function() {
if (settings.byJson.data) {
var validData = ["description", "image", "title"];
try {
if (!element.id) {
element.id = "dropdown" + msBeautify.counter;
};
settings.byJson.data = eval(settings.byJson.data);
//change element
var id = "msdropdown" + (msBeautify.counter++);
var obj = {};
obj.id = id;
obj.name = settings.byJson.name || element.id; //its name
if (settings.byJson.size > 0) {
obj.size = settings.byJson.size;
};
obj.multiple = settings.byJson.multiple;
var oSelect = createElement("select", obj);
for (var i = 0; i < settings.byJson.data.length; i++) {
var current = settings.byJson.data[i];
var opt = new Option(current.text, current.value);
for (var p in current) {
if (p.toLowerCase() != 'text') {
var key = ($.inArray(p.toLowerCase(), validData) != -1) ? "data-" : "";
opt.setAttribute(key + p, current[p]);
};
};
oSelect.options[i] = opt;
};
getElement(element.id).appendChild(oSelect);
oSelect.selectedIndex = settings.byJson.selectedIndex;
$(oSelect).css({ width: settings.byJson.width + 'px' });
//now change element for access other things
element = oSelect;
} catch (e) {
throw "There is an error in json data.";
};
};
};
var init = function() {
//set properties
createByJson();
if (!element.id) {
element.id = "msdrpdd" + (msBeautify.counter++);
};
element = element.id;
$this.element = element;
checkDataSetting();
isDisabled = getElement(element).disabled;
var useCheckbox = settings.enableCheckbox;
if (useCheckbox.toString() === "true") {
getElement(element).multiple = true;
settings.enableCheckbox = true;
};
isList = (getElement(element).size > 1 || getElement(element).multiple == true) ? true : false;
//trace("isList "+isList);
if (isList) { isMultiple = getElement(element).multiple; };
mergeAllProp();
//create layout
createLayout();
//set ui prop
updateProp("uiData", getDataAndUI());
updateProp("selectedOptions", $("#" + element + " option:selected"));
var childid = getPostID("postChildID");
oldSelected = $("#" + childid + " li." + css.selected);
if (settings.reverseMode === "true") {
$("#" + element).on("change", function() {
setValue(this.selectedIndex);
});
};
//add refresh method
getElement(element).refresh = function(e) {
$("#" + element).msDropdown().data("dd").refresh();
};
};
/********************************************************************************************/
var getPostID = function(id) {
return element + holderId[id];
};
var getInternalStyle = function(ele) {
var s = (ele.style === undefined) ? "" : ele.style.cssText;
return s;
};
var parseOption = function(opt) {
var imagePath = '',
title = '',
description = '',
value = -1,
text = '',
className = '',
imagecss = '',
index;
if (opt !== undefined) {
var attrTitle = opt.title || "";
//data-title
if (attrTitle != "") {
var reg = /^\{.*\}$/;
var isJson = reg.test(attrTitle);
if (isJson && settings.jsonTitle) {
var obj = eval("[" + attrTitle + "]");
};
title = (isJson && settings.jsonTitle) ? obj[0].title : title;
description = (isJson && settings.jsonTitle) ? obj[0].description : description;
imagePath = (isJson && settings.jsonTitle) ? obj[0].image : attrTitle;
imagecss = (isJson && settings.jsonTitle) ? obj[0].imagecss : imagecss;
index = opt.index;
};
text = opt.text || '';
value = opt.value || '';
className = opt.className || "";
//ignore title attribute if playing with data tags
title = $(opt).prop("data-title") || $(opt).data("title") || (title || "");
description = $(opt).prop("data-description") || $(opt).data("description") || (description || "");
imagePath = $(opt).prop("data-image") || $(opt).data("image") || (imagePath || "");
imagecss = $(opt).prop("data-imagecss") || $(opt).data("imagecss") || (imagecss || "");
index = $(opt).index();
};
var o = { image: imagePath, title: title, description: description, value: value, text: text, className: className, imagecss: imagecss, index: index };
return o;
};
var createElement = function(nm, attr, html) {
var tag = doc.createElement(nm);
if (attr) {
for (var i in attr) {
switch (i) {
case "style":
tag.style.cssText = attr[i];
break;
default:
tag[i] = attr[i];
break;
};
};
};
if (html) {
tag.innerHTML = html;
};
return tag;
};
/********************************************************************************************/
/*********************** <layout> *************************************/
var hideOriginal = function() {
var hidid = getPostID("postElementHolder");
if ($("#" + hidid).length == 0) {
var obj = { style: 'height: 0px;overflow: hidden;position: absolute;', className: css.ddOutOfVision };
obj.id = hidid;
var oDiv = createElement("div", obj);
$("#" + element).after(oDiv);
$("#" + element).appendTo($("#" + hidid));
} else {
$("#" + hidid).css({ height: 0, overflow: 'hidden', position: 'absolute' });
};
getElement(element).tabIndex = -1;
};
var createWrapper = function() {
var brdRds = (settings.roundedCorner == "true") ? " borderRadius" : "";
var obj = {
className: css.dd + " ddcommon" + brdRds
};
var intcss = getInternalStyle(getElement(element));
var w = $("#" + element).outerWidth();
obj.style = "width: " + w + "px;";
if (intcss.length > 0) {
obj.style = obj.style + "" + intcss;
};
obj.id = getPostID("postID");
obj.tabIndex = getElement(element).tabIndex;
var oDiv = createElement("div", obj);
return oDiv;
};
var createTitle = function() {
var selectedOption;
if (getElement(element).selectedIndex >= 0) {
selectedOption = getElement(element).options[getElement(element).selectedIndex];
} else {
selectedOption = { value: '', text: '' };
}
var spriteClass = "",
selectedClass = "";
//check sprite
var useSprite = $("#" + element).data("usesprite");
if (useSprite) { settings.useSprite = useSprite; };
if (settings.useSprite != false) {
spriteClass = " " + settings.useSprite;
selectedClass = " " + selectedOption.className;
};
var brdRdsTp = (settings.roundedCorner == "true") ? " " + css_i.borderRadiusTp : "";
var oTitle = createElement("div", { className: css.ddTitle + spriteClass + brdRdsTp });
//divider
var oDivider = createElement("span", { className: css.divider });
//arrow
var oArrow = createElement("span", { className: css.arrow });
//title Text
var titleid = getPostID("postTitleID");
var oTitleText = createElement("span", { className: css.ddTitleText + selectedClass, id: titleid });
var parsed = parseOption(selectedOption);
var arrowPath = parsed.image;
var sText = parsed.text || "";
if (arrowPath != "" && settings.showIcon) {
var oIcon = createElement("img");
oIcon.src = arrowPath;
if (parsed.imagecss != "") {
oIcon.className = parsed.imagecss + " ";
};
};
var oTitleText_in = createElement("span", { className: css.label }, sText);
oTitle.appendChild(oDivider);
oTitle.appendChild(oArrow);
if (oIcon) {
oTitleText.appendChild(oIcon);
};
oTitleText.appendChild(oTitleText_in);
oTitle.appendChild(oTitleText);
var oDescription = createElement("span", { className: css.description }, parsed.description);
oTitleText.appendChild(oDescription);
return oTitle;
};
var createFilterBox = function() {
var tid = getPostID("postTitleTextID");
var brdRds = (settings.roundedCorner == "true") ? "borderRadius" : "";
var sText = createElement("input", { id: tid, type: 'text', value: '', autocomplete: 'off', className: 'text shadow ' + brdRds, style: 'display: none' });
return sText;
};
var createChild = function(opt) {
var obj = {};
var intcss = getInternalStyle(opt);
if (intcss.length > 0) { obj.style = intcss; };
var css2 = (opt.disabled) ? css.disabled : css.enabled;
css2 = (opt.selected) ? (css2 + " " + css.selected) : css2;
css2 = css2 + " " + css_i.li;
obj.className = css2;
if (settings.useSprite != false) {
obj.className = css2 + " " + opt.className;
};
var li = createElement("li", obj);
var parsed = parseOption(opt);
if (parsed.title != "") {
li.title = parsed.title;
};
var arrowPath = parsed.image;
if (arrowPath != "" && settings.showIcon) {
var oIcon = createElement("img");
oIcon.src = arrowPath;
if (parsed.imagecss != "") {
oIcon.className = parsed.imagecss + " ";
};
};
if (parsed.description != "") {
var oDescription = createElement("span", {
className: css.description
}, parsed.description);
};
var sText = opt.text || "";
var oTitleText = createElement("span", {
className: css.label
}, sText);
//checkbox
if (settings.enableCheckbox === true) {
var chkbox = createElement("input", {
type: 'checkbox',
name: element + settings.checkboxNameSuffix + '[]',
value: opt.value || "",
className: "checkbox"
}); //this can be used for future
li.appendChild(chkbox);
if (settings.enableCheckbox === true) {
chkbox.checked = (opt.selected) ? true : false;
};
};
if (oIcon) {
li.appendChild(oIcon);
};
li.appendChild(oTitleText);
if (oDescription) {
li.appendChild(oDescription);
} else {
if (oIcon) {
oIcon.className = oIcon.className + css_i.fnone;
};
};
var oClear = createElement("div", { className: 'clear' });
li.appendChild(oClear);
return li;
};
var createChildren = function() {
var childid = getPostID("postChildID");
var obj = { className: css.ddChild + " ddchild_ " + css_i.ddChildMore, id: childid };
if (isList == false) {
obj.style = "z-index: " + settings.zIndex;
} else {
obj.style = "z-index:1";
};
var childWidth = $("#" + element).data("childwidth") || settings.childWidth;
if (childWidth) {
obj.style = (obj.style || "") + ";width:" + childWidth;
};
var oDiv = createElement("div", obj);
var ul = createElement("ul");
if (settings.useSprite != false) {
ul.className = settings.useSprite;
};
var allOptions = getElement(element).children;
for (var i = 0; i < allOptions.length; i++) {
var current = allOptions[i];
var li;
if (current.nodeName.toLowerCase() == "optgroup") {
//create ul
li = createElement("li", { className: css.optgroup });
var span = createElement("span", { className: css.optgroupTitle }, current.label);
li.appendChild(span);
var optChildren = current.children;
var optul = createElement("ul");
for (var j = 0; j < optChildren.length; j++) {
var opt_li = createChild(optChildren[j]);
optul.appendChild(opt_li);
};
li.appendChild(optul);
} else {
li = createChild(current);
};
ul.appendChild(li);
};
oDiv.appendChild(ul);
return oDiv;
};
var childHeight = function(val) {
var childid = getPostID("postChildID");
if (val) {
if (val == -1) { //auto
$("#" + childid).css({ height: "auto", overflow: "auto" });
} else {
$("#" + childid).css("height", "300px");
};
return false;
};
//else return height
var iHeight;
var totalOptions = getElement(element).options.length;
if (totalOptions > settings.visibleRows || settings.visibleRows) {
var firstLI = $("#" + childid + " li:first");
var margin = parseInt(firstLI.css("padding-bottom")) + parseInt(firstLI.css("padding-top"));
if (settings.rowHeight === 0) {
$("#" + childid).css({ visibility: 'hidden', display: 'block' }); //hack for first child
settings.rowHeight = Math.ceil(firstLI.height());
$("#" + childid).css({ visibility: 'visible' });
if (!isList || settings.enableCheckbox === true) {
$("#" + childid).css({ display: 'none' });
};
};
iHeight = ((settings.rowHeight + margin) * Math.min(settings.visibleRows, totalOptions)) + 3;
} else if (isList) {
iHeight = $("#" + element).height(); //get height from original element
};
return iHeight;
};
var applyChildEvents = function() {
var childid = getPostID("postChildID");
$("#" + childid).on("click", function(e) {
if (isDisabled === true) return false;
//prevent body click
e.preventDefault();
e.stopPropagation();
if (isList) {
bind_on_events();
};
});
$("#" + childid + " li." + css.enabled).on("click", function(e) {
if (e.target.nodeName.toLowerCase() !== "input") {
close(this);
};
});
$("#" + childid + " li." + css.enabled).on("mousedown", function(e) {
if (isDisabled === true) return false;
oldSelected = $("#" + childid + " li." + css.selected);
lastTarget = this;
e.preventDefault();
e.stopPropagation();
//select current input
if (settings.enableCheckbox === true) {
if (e.target.nodeName.toLowerCase() === "input") {
controlHolded = true;
};
};
if (isList === true) {
if (isMultiple) {
if (shiftHolded === true) {
$(this).addClass(css.selected);
var selected = $("#" + childid + " li." + css.selected);
var lastIndex = getIndex(this);
if (selected.length > 1) {
var items = $("#" + childid + " li." + css_i.li);
var ind1 = getIndex(selected[0]);
var ind2 = getIndex(selected[1]);
if (lastIndex > ind2) {
ind1 = (lastIndex);
ind2 = ind2 + 1;
};
for (var i = Math.min(ind1, ind2); i <= Math.max(ind1, ind2); i++) {
var current = items[i];
if ($(current).hasClass(css.enabled)) {
$(current).addClass(css.selected);
};
};
};
} else if (controlHolded === true) {
$(this).toggleClass(css.selected); //toggle
if (settings.enableCheckbox === true) {
var checkbox = this.childNodes[0];
checkbox.checked = !checkbox.checked; //toggle
};
} else {
$("#" + childid + " li." + css.selected).removeClass(css.selected);
$("#" + childid + " input:checkbox").prop("checked", false);
$(this).addClass(css.selected);
if (settings.enableCheckbox === true) {
this.childNodes[0].checked = true;
};
};
} else {
$("#" + childid + " li." + css.selected).removeClass(css.selected);
$(this).addClass(css.selected);
};
//fire event on mouseup
} else {
$("#" + childid + " li." + css.selected).removeClass(css.selected);
$(this).addClass(css.selected);
};
});
$("#" + childid + " li." + css.enabled).on("mouseenter", function(e) {
if (isDisabled === true) return false;
e.preventDefault();
e.stopPropagation();
if (lastTarget != null) {
if (isMultiple) {
$(this).addClass(css.selected);
if (settings.enableCheckbox === true) {
this.childNodes[0].checked = true;
};
};
};
});
$("#" + childid + " li." + css.enabled).on("mouseover", function(e) {
if (isDisabled === true) return false;
$(this).addClass(css.hover);
});
$("#" + childid + " li." + css.enabled).on("mouseout", function(e) {
if (isDisabled === true) return false;
$("#" + childid + " li." + css.hover).removeClass(css.hover);
});
$("#" + childid + " li." + css.enabled).on("mouseup", function(e) {
if (isDisabled === true) return false;
e.preventDefault();
e.stopPropagation();
if (settings.enableCheckbox === true) {
controlHolded = false;
};
var selected = $("#" + childid + " li." + css.selected).length;
forcedTrigger = (oldSelected.length != selected || selected == 0) ? true : false;
fireAfterItemClicked();
unbind_on_events(); //remove old one
bind_on_events();
lastTarget = null;
});
/* options events */
if (settings.disabledOptionEvents == false) {
$("#" + childid + " li." + css_i.li).on("click", function(e) {
if (isDisabled === true) return false;
fireOptionEventIfExist(this, "click");
});
$("#" + childid + " li." + css_i.li).on("mouseenter", function(e) {
if (isDisabled === true) return false;
fireOptionEventIfExist(this, "mouseenter");
});
$("#" + childid + " li." + css_i.li).on("mouseover", function(e) {
if (isDisabled === true) return false;
fireOptionEventIfExist(this, "mouseover");
});
$("#" + childid + " li." + css_i.li).on("mouseout", function(e) {
if (isDisabled === true) return false;
fireOptionEventIfExist(this, "mouseout");
});
$("#" + childid + " li." + css_i.li).on("mousedown", function(e) {
if (isDisabled === true) return false;
fireOptionEventIfExist(this, "mousedown");
});
$("#" + childid + " li." + css_i.li).on("mouseup", function(e) {
if (isDisabled === true) return false;
fireOptionEventIfExist(this, "mouseup");
});
};
};
var removeChildEvents = function() {
var childid = getPostID("postChildID");
$("#" + childid).off("click");
$("#" + childid + " li." + css.enabled).off("mouseenter");
$("#" + childid + " li." + css.enabled).off("click");
$("#" + childid + " li." + css.enabled).off("mouseover");
$("#" + childid + " li." + css.enabled).off("mouseout");
$("#" + childid + " li." + css.enabled).off("mousedown");
$("#" + childid + " li." + css.enabled).off("mouseup");
};
var triggerBypassingHandler = function(id, evt_n, handler) {
$("#" + id).off(evt_n, handler);
$("#" + id).trigger(evt_n);
$("#" + id).on(evt_n, handler);
};
var applyEvents = function() {
var id = getPostID("postID");
var tid = getPostID("postTitleTextID");
var childid = getPostID("postChildID");
$("#" + id).on(settings.event, function(e) {
if (isDisabled === true) return false;
fireEventIfExist(settings.event);
//prevent body click
e.preventDefault();
e.stopPropagation();
open(e);
});
$("#" + id).on("keydown", function(e) {
var k = e.which;
if (!isOpen && (k == ENTER || k == UP_ARROW || k == DOWN_ARROW ||
k == LEFT_ARROW || k == RIGHT_ARROW ||
(k >= ALPHABETS_START && !isList))) {
open(e);
if (k >= ALPHABETS_START) {
showFilterBox();
} else {
e.preventDefault();
e.stopImmediatePropagation();
};
};
});
$("#" + id).on("focus", wrapperFocusHandler);
$("#" + id).on("blur", wrapperBlurHandler);
$("#" + tid).on("blur", function(e) {
//return focus to the wrapper without triggering the handler
triggerBypassingHandler(id, "focus", wrapperFocusHandler);
});
applyChildEvents();
$("#" + id).on("dblclick", on_dblclick);
$("#" + id).on("mousemove", on_mousemove);
$("#" + id).on("mouseenter", on_mouseover);
$("#" + id).on("mouseleave", on_mouseout);
$("#" + id).on("mousedown", on_mousedown);
$("#" + id).on("mouseup", on_mouseup);
};
var wrapperFocusHandler = function(e) {
fireEventIfExist("focus");
};
var wrapperBlurHandler = function(e) {
fireEventIfExist("blur");
};
//after create
var fixedForList = function() {
var id = getPostID("postID");
var childid = getPostID("postChildID");
if (isList === true && settings.enableCheckbox === false) {
$("#" + id + " ." + css.ddTitle).hide();
$("#" + childid).css({ display: 'block', position: 'relative' });
//open();
} else {
if (settings.enableCheckbox === false) {
isMultiple = false; //set multiple off if this is not a list
};
$("#" + id + " ." + css.ddTitle).show();
$("#" + childid).css({ display: 'none', position: 'absolute' });
//set value
var first = $("#" + childid + " li." + css.selected)[0];
$("#" + childid + " li." + css.selected).removeClass(css.selected);
var index = getIndex($(first).addClass(css.selected));
setValue(index);
};
childHeight(childHeight()); //get and set height
};
var fixedForDisabled = function() {
var id = getPostID("postID");
var opc = (isDisabled == true) ? settings.disabledOpacity : 1;
if (isDisabled === true) {
$("#" + id).addClass(css.disabledAll);
} else {
$("#" + id).removeClass(css.disabledAll);
};
};
var fixedSomeUI = function() {
//auto filter
var tid = getPostID("postTitleTextID");
if (settings.enableAutoFilter == "true") {
$("#" + tid).on("keyup", applyFilters);
};
//if is list
fixedForList();
fixedForDisabled();
};
var createLayout = function() {
var oDiv = createWrapper();
var oTitle = createTitle();
oDiv.appendChild(oTitle);
//auto filter box
var oFilterBox = createFilterBox();
oDiv.appendChild(oFilterBox);
var oChildren = createChildren();
oDiv.appendChild(oChildren);
$("#" + element).after(oDiv);
hideOriginal(); //hideOriginal
fixedSomeUI();
applyEvents();
var childid = getPostID("postChildID");
//append
if (settings.append != '') {
$("#" + childid).append(settings.append);
};
//prepend
if (settings.prepend != '') {
$("#" + childid).prepend(settings.prepend);
};
if (typeof settings.on.create == "function") {
settings.on.create.apply($this, arguments);
};
};
var selectUI_LI = function(indexes) {
var childid = getPostID("postChildID");
$("#" + childid + " li." + css_i.li).removeClass(css.selected);
if (settings.enableCheckbox === true) {
$("#" + childid + " li." + css_i.li + " input.checkbox").prop("checked", false);
};
if (isArray(indexes) === true) {
for (var i = 0; i < indexes.length; i++) {
updateNow(indexes[i]);
};
} else {
updateNow(indexes);
};
function updateNow(index) {
$($("#" + childid + " li." + css_i.li)[index]).addClass(css.selected);
if (settings.enableCheckbox === true) {
$($("#" + childid + " li." + css_i.li)[index]).find("input.checkbox").prop("checked", "checked");
};
};
};
var selectMutipleOptions = function(bySelected, useIndexes) {
var childid = getPostID("postChildID");
var selected = bySelected || $("#" + childid + " li." + css.selected); //bySelected or by argument
for (var i = 0; i < selected.length; i++) {
var ind = (useIndexes === true) ? selected[i] : getIndex(selected[i]);
getElement(element).options[ind].selected = "selected";
};
setValue(selected);
};
var fireAfterItemClicked = function() {
//console.log("fireAfterItemClicked")
var childid = getPostID("postChildID");
var selected = $("#" + childid + " li." + css.selected);
if (isMultiple && (shiftHolded || controlHolded) || forcedTrigger) {
getElement(element).selectedIndex = -1; //reset old
};
var index;
if (selected.length == 0) {
index = -1;
} else if (selected.length > 1) {
//selected multiple
selectMutipleOptions(selected);
} else {
//if one selected
index = getIndex($("#" + childid + " li." + css.selected));
};
if ((getElement(element).selectedIndex != index || forcedTrigger) && selected.length <= 1) {
forcedTrigger = false;
var evt = has_handler("change");
getElement(element).selectedIndex = index;
setValue(index);
//local
if (typeof settings.on.change == "function") {
var d = getDataAndUI();
settings.on.change(d.data, d.ui);
};
$("#" + element).trigger("change");
};
};
var setValue = function(index, byvalue) {
if (index !== undefined) {
var selectedIndex, value, selectedText;
if (index == -1) {
selectedIndex = -1;
value = "";
selectedText = "";
updateTitleUI(-1);
} else {
//by index or byvalue
if (typeof index != "object") {
var opt = getElement(element).options[index];
getElement(element).selectedIndex = index;
selectedIndex = index;
value = parseOption(opt);
selectedText = (index >= 0) ? getElement(element).options[index].text : "";
updateTitleUI(undefined, value);
value = value.value; //for bottom
} else {
//this is multiple or by option
selectedIndex = (byvalue && byvalue.index) || getElement(element).selectedIndex;
value = (byvalue && byvalue.value) || getElement(element).value;
selectedText = (byvalue && byvalue.text) || getElement(element).options[getElement(element).selectedIndex].text || "";
updateTitleUI(selectedIndex);
//check if this is multiple checkbox
};
};
updateProp("selectedIndex", selectedIndex);
updateProp("value", value);
updateProp("selectedText", selectedText);
updateProp("children", getElement(element).children);
updateProp("uiData", getDataAndUI());
updateProp("selectedOptions", $("#" + element + " option:selected"));
};
};
var has_handler = function(name) {
//True if a handler has been added in the html.
var evt = { byElement: false, byJQuery: false, hasEvent: false };
var obj = $("#" + element);
//console.log(name)
try {
//console.log(obj.prop("on" + name) + " "+name);
if (obj.prop("on" + name) !== null) {
evt.hasEvent = true;
evt.byElement = true;
};
} catch (e) {
//console.log(e.message);
}
// True if a handler has been added using jQuery.
var evs;
if (typeof $._data == "function") { //1.8
evs = $._data(obj[0], "events");
} else {
evs = obj.data("events");
};
if (evs && evs[name]) {
evt.hasEvent = true;
evt.byJQuery = true;
};
return evt;
};
var bind_on_events = function() {
unbind_on_events();
$("body").on("click", close);
//bind more events
$(document).on("keydown", on_keydown);
$(document).on("keyup", on_keyup);
//focus will work on this
};
var unbind_on_events = function() {
$("body").off("click", close);
//bind more events
$(document).off("keydown", on_keydown);
$(document).off("keyup", on_keyup);
};
var applyFilters = function(e) {
if (e.keyCode < ALPHABETS_START && e.keyCode != BACKSPACE && e.keyCode != DELETE) {
return false;
};
var childid = getPostID("postChildID");
var tid = getPostID("postTitleTextID");
var sText = getElement(tid).value;
if (sText.length == 0) {
$("#" + childid + " li:hidden").show(); //show if hidden
childHeight(childHeight());
} else {
$("#" + childid + " li").hide();
var items = $("#" + childid + " li:Contains('" + sText + "')").show();
if ($("#" + childid + " li:visible").length <= settings.visibleRows) {
childHeight(-1); //set autoheight
};
if (items.length > 0 && !isList || !isMultiple) {
$("#" + childid + " ." + css.selected).removeClass(css.selected);
$(items[0]).addClass(css.selected);
};
};
if (!isList) {
adjustOpen();
};
};
var showFilterBox = function() {
if (settings.enableAutoFilter == "true") {
var id = getPostID("postID");
var tid = getPostID("postTitleTextID");
if ($("#" + tid + ":hidden").length > 0 && controlHolded == false) {
$("#" + tid + ":hidden").show().val("");
//blur the wrapper without triggering the handler
triggerBypassingHandler(id, "blur", wrapperBlurHandler);
getElement(tid).focus();
};
};
};
var hideFilterBox = function() {
var tid = getPostID("postTitleTextID");
if ($("#" + tid + ":visible").length > 0) {
$("#" + tid + ":visible").hide();
getElement(tid).blur();
};
};
var on_keydown = function(evt) {
var tid = getPostID("postTitleTextID");
var childid = getPostID("postChildID");
switch (evt.keyCode) {
case DOWN_ARROW:
case RIGHT_ARROW:
evt.preventDefault();
evt.stopPropagation();
//hideFilterBox();
next();
break;
case UP_ARROW:
case LEFT_ARROW:
evt.preventDefault();
evt.stopPropagation();
//hideFilterBox();
previous();
break;
case ESCAPE:
case ENTER:
evt.preventDefault();
evt.stopPropagation();
close();
var selected = $("#" + childid + " li." + css.selected).length;
forcedTrigger = (oldSelected.length != selected || selected == 0) ? true : false;
fireAfterItemClicked();
unbind_on_events(); //remove old one
lastTarget = null;
break;
case SHIFT:
shiftHolded = true;
break;
case CONTROL:
controlHolded = true;
break;
default:
if (evt.keyCode >= ALPHABETS_START && isList === false) {
showFilterBox();
};
break;
};
if (isDisabled === true) return false;
fireEventIfExist("keydown");
};
var on_keyup = function(evt) {
switch (evt.keyCode) {
case SHIFT:
shiftHolded = false;
break;
case CONTROL:
controlHolded = false;
break;
};
if (isDisabled === true) return false;
fireEventIfExist("keyup");
};
var on_dblclick = function(evt) {
if (isDisabled === true) return false;
fireEventIfExist("dblclick");
};
var on_mousemove = function(evt) {
if (isDisabled === true) return false;
fireEventIfExist("mousemove");
};
var on_mouseover = function(evt) {
if (isDisabled === true) return false;
evt.preventDefault();
fireEventIfExist("mouseover");
};
var on_mouseout = function(evt) {
if (isDisabled === true) return false;
evt.preventDefault();
fireEventIfExist("mouseout");
};
var on_mousedown = function(evt) {
if (isDisabled === true) return false;
fireEventIfExist("mousedown");
};
var on_mouseup = function(evt) {
if (isDisabled === true) return false;
fireEventIfExist("mouseup");
};
var option_has_handler = function(opt, name) {
//True if a handler has been added in the html.
var evt = { byElement: false, byJQuery: false, hasEvent: false };
if ($(opt).prop("on" + name) != undefined) {
evt.hasEvent = true;
evt.byElement = true;
};
// True if a handler has been added using jQuery.
var evs = $(opt).data("events");
if (evs && evs[name]) {
evt.hasEvent = true;
evt.byJQuery = true;
};
return evt;
};
var fireOptionEventIfExist = function(li, evt_n) {
if (settings.disabledOptionEvents == false) {
var opt = getElement(element).options[getIndex(li)];
//check if original has some
if (option_has_handler(opt, evt_n).hasEvent === true) {
if (option_has_handler(opt, evt_n).byElement === true) {
opt["on" + evt_n]();
};
if (option_has_handler(opt, evt_n).byJQuery === true) {
switch (evt_n) {
case "keydown":
case "keyup":
//key down/up will check later
break;
default:
$(opt).trigger(evt_n);
break;
};
};
return false;
};
};
};
var fireEventIfExist = function(evt_n) {
//local
if (typeof settings.on[evt_n] == "function") {
settings.on[evt_n].apply(this, arguments);
};
//check if original has some
if (has_handler(evt_n).hasEvent === true) {
if (has_handler(evt_n).byElement === true) {
getElement(element)["on" + evt_n]();
} else if (has_handler(evt_n).byJQuery === true) {
switch (evt_n) {
case "keydown":
case "keyup":
//key down/up will check later
break;
default:
$("#" + element).triggerHandler(evt_n);
break;
};
};
return false;
};
};
/******************************* navigation **********************************************/
var scrollToIfNeeded = function(opt) {
var childid = getPostID("postChildID");
//if scroll is needed
opt = (opt !== undefined) ? opt : $("#" + childid + " li." + css.selected);
if (opt.length > 0) {
var pos = parseInt(($(opt).position().top));
var ch = parseInt($("#" + childid).height());
if (pos > ch) {
var top = pos + $("#" + childid).scrollTop() - (ch / 2);
$("#" + childid).animate({ scrollTop: top }, 500);
};
};
};
var next = function() {
var childid = getPostID("postChildID");
var items = $("#" + childid + " li:visible." + css_i.li);
var selected = $("#" + childid + " li:visible." + css.selected);
selected = (selected.length == 0) ? items[0] : selected;
var index = $("#" + childid + " li:visible." + css_i.li).index(selected);
if ((index < items.length - 1)) {
index = getNext(index);
if (index < items.length) { //check again - hack for last disabled
if (!shiftHolded || !isList || !isMultiple) {
$("#" + childid + " ." + css.selected).removeClass(css.selected);
};
$(items[index]).addClass(css.selected);
updateTitleUI(index);
if (isList == true) {
fireAfterItemClicked();
};
scrollToIfNeeded($(items[index]));
};
if (!isList) {
adjustOpen();
};
};
function getNext(ind) {
ind = ind + 1;
if (ind > items.length) {
return ind;
};
if ($(items[ind]).hasClass(css.enabled) === true) {
return ind;
};
return ind = getNext(ind);
};
};
var previous = function() {
var childid = getPostID("postChildID");
var selected = $("#" + childid + " li:visible." + css.selected);
var items = $("#" + childid + " li:visible." + css_i.li);
var index = $("#" + childid + " li:visible." + css_i.li).index(selected[0]);
if (index >= 0) {
index = getPrev(index);
if (index >= 0) { //check again - hack for disabled
if (!shiftHolded || !isList || !isMultiple) {
$("#" + childid + " ." + css.selected).removeClass(css.selected);
};
$(items[index]).addClass(css.selected);
updateTitleUI(index);
if (isList == true) {
fireAfterItemClicked();
};
if (parseInt(($(items[index]).position().top + $(items[index]).height())) <= 0) {
var top = ($("#" + childid).scrollTop() - $("#" + childid).height()) - $(items[index]).height();
$("#" + childid).animate({ scrollTop: top }, 500);
};
};
if (!isList) {
adjustOpen();
};
};
function getPrev(ind) {
ind = ind - 1;
if (ind < 0) {
return ind;
};
if ($(items[ind]).hasClass(css.enabled) === true) {
return ind;
};
return ind = getPrev(ind);
};
};
var adjustOpen = function() {
var id = getPostID("postID");
var childid = getPostID("postChildID");
var pos = $("#" + id).offset();
var mH = $("#" + id).height();
var wH = $(window).height();
var st = $(window).scrollTop();
var cH = $("#" + childid).height();
var top = $("#" + id).height(); //this close so its title height
var direction = settings.openDirection.toLowerCase();
if (((wH + st) < Math.floor(cH + mH + pos.top) || direction == 'alwaysup') && direction != 'alwaysdown') {
top = cH;
$("#" + childid).css({ top: "-" + top + "px", display: 'block', zIndex: settings.zIndex });
if (settings.roundedCorner == "true") {
$("#" + id).removeClass("borderRadius borderRadiusTp").addClass("borderRadiusBtm");
};
var top = $("#" + childid).offset().top;
if (top < -10) {
$("#" + childid).css({ top: (parseInt($("#" + childid).css("top")) - top + 20 + st) + "px", zIndex: settings.zIndex });
if (settings.roundedCorner == "true") {
$("#" + id).removeClass("borderRadiusBtm borderRadiusTp").addClass("borderRadius");
};
};
} else {
$("#" + childid).css({ top: top + "px", zIndex: settings.zIndex });
if (settings.roundedCorner == "true") {
$("#" + id).removeClass("borderRadius borderRadiusBtm").addClass("borderRadiusTp");
};
};
//hack for ie zindex
//i hate ie :D
if (isIE) {
if (msieversion() <= 7) {
$('div.ddcommon').css("zIndex", settings.zIndex - 10);
$("#" + id).css("zIndex", settings.zIndex + 5);
};
};
};
var open = function(e) {
if (isDisabled === true) return false;
var id = getPostID("postID");
var childid = getPostID("postChildID");
if (!isOpen) {
isOpen = true;
if (msBeautify.oldDiv != '') {
$("#" + msBeautify.oldDiv).css({ display: "none" }); //hide all
};
msBeautify.oldDiv = childid;
$("#" + childid + " li:hidden").show(); //show if hidden
adjustOpen();
var animStyle = settings.animStyle;
if (animStyle == "" || animStyle == "none") {
$("#" + childid).css({ display: "block" });
scrollToIfNeeded();
if (typeof settings.on.open == "function") {
var d = getDataAndUI();
settings.on.open(d.data, d.ui);
};
} else {
$("#" + childid)[animStyle]("fast", function() {
scrollToIfNeeded();
if (typeof settings.on.open == "function") {
var d = getDataAndUI();
settings.on.open(d.data, d.ui);
};
});
};
bind_on_events();
} else {
if (settings.event !== 'mouseover') {
close();
};
};
};
var close = function(e) {
isOpen = false;
var id = getPostID("postID");
var childid = getPostID("postChildID");
if (isList === false || settings.enableCheckbox === true) {
$("#" + childid).css({ display: "none" });
if (settings.roundedCorner == "true") {
$("#" + id).removeClass("borderRadiusTp borderRadiusBtm").addClass("borderRadius");
};
};
unbind_on_events();
if (typeof settings.on.close == "function") {
var d = getDataAndUI();
settings.on.close(d.data, d.ui);
};
//rest some old stuff
hideFilterBox();
childHeight(childHeight()); //its needed after filter applied
$("#" + childid).css({ zIndex: 1 });
//update the title in case the user clicked outside
updateTitleUI(getElement(element).selectedIndex);
};
/*********************** </layout> *************************************/
var mergeAllProp = function() {
try {
orginial = $.extend(true, {}, getElement(element));
for (var i in orginial) {
if (typeof orginial[i] != "function") {
$this[i] = orginial[i]; //properties
};
};
} catch (e) {
//silent
};
$this.selectedText = (getElement(element).selectedIndex >= 0) ? getElement(element).options[getElement(element).selectedIndex].text : "";
$this.version = msBeautify.version.msDropdown;
$this.author = msBeautify.author;
};
var getDataAndUIByOption = function(opt) {
if (opt != null && typeof opt != "undefined") {
var childid = getPostID("postChildID");
var data = parseOption(opt);
var ui = $("#" + childid + " li." + css_i.li + ":eq(" + (opt.index) + ")");
return { data: data, ui: ui, option: opt, index: opt.index };
};
return null;
};
var getDataAndUI = function() {
var childid = getPostID("postChildID");
var ele = getElement(element);
var data, ui, option, index;
if (ele.selectedIndex == -1) {
data = null;
ui = null;
option = null;
index = -1;
} else {
ui = $("#" + childid + " li." + css.selected);
if (ui.length > 1) {
var d = [],
op = [],
ind = [];
for (var i = 0; i < ui.length; i++) {
var pd = getIndex(ui[i]);
d.push(pd);
op.push(ele.options[pd]);
};
data = d;
option = op;
index = d;
} else {
option = ele.options[ele.selectedIndex];
data = parseOption(option);
index = ele.selectedIndex;
};
};
return { data: data, ui: ui, index: index, option: option };
};
var updateTitleUI = function(index, byvalue) {
var titleid = getPostID("postTitleID");
var value = {};
if (index == -1) {
value.text = " ";
value.className = "";
value.description = "";
value.image = "";
} else if (typeof index != "undefined") {
var opt = getElement(element).options[index];
value = parseOption(opt);
} else {
value = byvalue;
};
//update title and current
$("#" + titleid).find("." + css.label).html(value.text);
getElement(titleid).className = css.ddTitleText + " " + value.className;
//update desction
if (value.description != "") {
$("#" + titleid).find("." + css.description).html(value.description).show();
} else {
$("#" + titleid).find("." + css.description).html("").hide();
};
//update icon
var img = $("#" + titleid).find("img");
if (img.length > 0) {
$(img).remove();
};
if (value.image != "" && settings.showIcon) {
img = createElement("img", { src: value.image });
$("#" + titleid).prepend(img);
if (value.imagecss != "") {
img.className = value.imagecss + " ";
};
if (value.description == "") {
img.className = img.className + css_i.fnone;
};
};
};
var updateProp = function(p, v) {
$this[p] = v;
};
var updateUI = function(a, opt, i) { //action, index, opt
var childid = getPostID("postChildID");
var wasSelected = false;
switch (a) {
case "add":
var li = createChild(opt || getElement(element).options[i]);
var index;
if (arguments.length == 3) {
index = i;
} else {
index = $("#" + childid + " li." + css_i.li).length - 1;
};
if (index < 0 || !index) {
$("#" + childid + " ul").append(li);
} else {
var at = $("#" + childid + " li." + css_i.li)[index];
$(at).before(li);
};
removeChildEvents();
applyChildEvents();
if (settings.on.add != null) {
settings.on.add.apply(this, arguments);
};
break;
case "remove":
wasSelected = $($("#" + childid + " li." + css_i.li)[i]).hasClass(css.selected);
$("#" + childid + " li." + css_i.li + ":eq(" + i + ")").remove();
var items = $("#" + childid + " li." + css.enabled);
if (wasSelected == true) {
if (items.length > 0) {
$(items[0]).addClass(css.selected);
var ind = $("#" + childid + " li." + css_i.li).index(items[0]);
setValue(ind);
};
};
if (items.length == 0) {
setValue(-1);
};
if ($("#" + childid + " li." + css_i.li).length < settings.visibleRows && !isList) {
childHeight(-1); //set autoheight
};
if (settings.on.remove != null) {
settings.on.remove.apply(this, arguments);
};
break;
};
};
/************************** public methods/events **********************/
this.act = function() {
var action = arguments[0];
Array.prototype.shift.call(arguments);
switch (action) {
case "add":
$this.add.apply(this, arguments);
break;
case "remove":
$this.remove.apply(this, arguments);
break;
default:
try {
getElement(element)[action].apply(getElement(element), arguments);
} catch (e) {
//there is some error.
};
break;
};
};
this.add = function() {
var text, value, title, image, description;
var obj = arguments[0];
if (typeof obj == "string") {
text = obj;
value = text;
opt = new Option(text, value);
} else {
text = obj.text || '';
value = obj.value || text;
title = obj.title || '';
image = obj.image || '';
description = obj.description || '';
//image:imagePath, title:title, description:description, value:opt.value, text:opt.text, className:opt.className||""
opt = new Option(text, value);
$(opt).data("description", description);
$(opt).data("image", image);
$(opt).data("title", title);
};
arguments[0] = opt; //this option
getElement(element).add.apply(getElement(element), arguments);
updateProp("children", getElement(element)["children"]);
updateProp("length", getElement(element).length);
updateUI("add", opt, arguments[1]);
};
this.remove = function(i) {
getElement(element).remove(i);
updateProp("children", getElement(element)["children"]);
updateProp("length", getElement(element).length);
updateUI("remove", undefined, i);
};
this.set = function(prop, val) {
if (typeof prop == "undefined" || typeof val == "undefined") return false;
prop = prop.toString();
try {
updateProp(prop, val);
} catch (e) { /*this is ready only */ };
switch (prop) {
case "size":
getElement(element)[prop] = val;
if (val == 0) {
getElement(element).multiple = false; //if size is zero multiple should be false
};
isList = (getElement(element).size > 1 || getElement(element).multiple == true) ? true : false;
fixedForList();
break;
case "multiple":
getElement(element)[prop] = val;
isList = (getElement(element).size > 1 || getElement(element).multiple == true) ? true : false;
isMultiple = getElement(element).multiple;
fixedForList();
updateProp(prop, val);
break;
case "disabled":
getElement(element)[prop] = val;
isDisabled = val;
fixedForDisabled();
break;
case "selectedIndex":
case "value":
if (prop == "selectedIndex" && isArray(val) === true) {
$("#" + element + " option").prop("selected", false);
selectMutipleOptions(val, true);
selectUI_LI(val); //setValue is being called from selectMutipleOptions
} else {
getElement(element)[prop] = val;
selectUI_LI(getElement(element).selectedIndex);
setValue(getElement(element).selectedIndex);
};
break;
case "length":
var childid = getPostID("postChildID");
if (val < getElement(element).length) {
getElement(element)[prop] = val;
if (val == 0) {
$("#" + childid + " li." + css_i.li).remove();
setValue(-1);
} else {
$("#" + childid + " li." + css_i.li + ":gt(" + (val - 1) + ")").remove();
if ($("#" + childid + " li." + css.selected).length == 0) {
$("#" + childid + " li." + css.enabled + ":eq(0)").addClass(css.selected);
};
};
updateProp(prop, val);
updateProp("children", getElement(element)["children"]);
};
break;
case "id":
//please i need this. so preventing to change it. will work on this later
break;
default:
//check if this is not a readonly properties
try {
getElement(element)[prop] = val;
updateProp(prop, val);
} catch (e) {
//silent
};
break;
};
};
this.get = function(prop) {
return $this[prop] || getElement(element)[prop]; //return if local else from original
};
this.visible = function(val) {
var id = getPostID("postID");
if (val === true) {
$("#" + id).show();
} else if (val === false) {
$("#" + id).hide();
} else {
return ($("#" + id).css("display") == "none") ? false : true;
};
};
this.debug = function(v) {
msBeautify.debug(v);
};
this.close = function() {
close();
};
this.open = function() {
open();
};
this.showRows = function(r) {
if (typeof r == "undefined" || r == 0) {
return false;
};
settings.visibleRows = r;
childHeight(childHeight());
};
this.visibleRows = this.showRows;
this.on = function(type, fn) {
$("#" + element).on(type, fn);
};
this.off = function(type, fn) {
$("#" + element).off(type, fn);
};
this.addMyEvent = this.on;
this.getData = function() {
return getDataAndUI()
};
this.namedItem = function() {
var opt = getElement(element).namedItem.apply(getElement(element), arguments);
return getDataAndUIByOption(opt);
};
this.item = function() {
var opt = getElement(element).item.apply(getElement(element), arguments);
return getDataAndUIByOption(opt);
};
//v 3.2
this.setIndexByValue = function(val) {
this.set("value", val);
};
this.destroy = function() {
var hidid = getPostID("postElementHolder");
var id = getPostID("postID");
$("#" + id + ", #" + id + " *").off();
getElement(element).tabIndex = getElement(id).tabIndex;
$("#" + id).remove();
$("#" + element).parent().replaceWith($("#" + element));
$("#" + element).data("dd", null);
};
this.refresh = function() {
setValue(getElement(element).selectedIndex);
};
//Create msDropDown
init();
};
//bind in jquery
$.fn.extend({
msDropDown: function(settings) {
return this.each(function() {
if (!$(this).data('dd')) {
var mydropdown = new dd(this, settings);
$(this).data('dd', mydropdown);
};
});
}
});
$.fn.msDropdown = $.fn.msDropDown; //make a copy
})(jQuery);