SELDropDownListBehavior.prototype = { initialize: function(elements) { // Elements if (this.isValid(elements.GlobalContainer)) this._globalContainer = elements.GlobalContainer;
if (this.isValid(elements.HeaderContainer)) this._headerContainer = elements.HeaderContainer;
if (this.isValid(elements.HeaderText)) this._headerText = elements.HeaderText;
if (this.isValid(elements.ArrowImage)) this._arrowImage = elements.ArrowImage;
if (this.isValid(elements.ListBox)) this._listBox = elements.ListBox;
if (this.isValid(elements.SelectedIndexField)) this._selectedIndexField = elements.SelectedIndexField;
// Properties if (this.isValid(elements.ArrowImageUrl)) this._arrowImageUrl = elements.ArrowImageUrl;
if (this.isValid(elements.ArrowImageHoverUrl)) this._arrowImageHoverUrl = elements.ArrowImageHoverUrl;
if (this.isValid(elements.AutoPostBack)) this._autoPostBack = elements.AutoPostBack;
if (this.isValid(elements.SelectedIndexChangeClientScript)) this._selectedIndexChangeClientScript = elements.SelectedIndexChangeClientScript;
if (this.isValid (elements.DoPostBackElementID)) this._doPostBackElementID = elements.DoPostBackElementID;
// CSS if (this.isValid(elements.ItemCssClass)) this._itemCssClass = elements.ItemCssClass;
if (this.isValid(elements.ItemHoverCssClass)) this._itemHoverCssClass = elements.ItemHoverCssClass;
if (this.isValid(elements.ItemAlternateCssClass)) this._itemAlternateCssClass = elements.ItemAlternateCssClass;
if (this.isValid(elements.ItemAlternateHoverCssClass)) this._itemAlternateHoverCssClass = elements.ItemAlternateHoverCssClass;
if (this.isValid (elements.ItemSelectedCssClass)) this._itemSelectedCssClass = elements.ItemSelectedCssClass;
if (this.isValid(elements.ItemSelectedHoverCssClass)) this._itemSelectedHoverCssClass = elements.ItemSelectedHoverCssClass; },
measureSize: function() { var storeObjs = [];
// save elements which will be setted to display="block" from display="none" var curObj = this._globalContainer; while (curObj != null) { if (curObj.style != null && curObj.style.display == "none") { storeObjs[storeObjs.length++] = { "obj": curObj, "display": curObj.style.display, "visibility": curObj.style.visibility }; curObj.style.visibility = "hidden"; curObj.style.display = ""; } curObj = curObj.parentNode; }
var headerWidth = this._headerText.offsetWidth + this._arrowImage.offsetWidth; var headerHeight = Math.max(this._headerText.offsetHeight, this._arrowImage.offsetHeight);
// restore the style.display and style.visibility for (var i = 0; i < storeObjs.length; i++) { storeObjs[i].obj.style.display = storeObjs[i].display; storeObjs[i].obj.style.visibility = storeObjs[i].visibility; } },
regEvents: function() { // reg events of listItems var listItems = this.get_listItems(); for (var i = 0; i < listItems.length; i++) { var item = listItems[i]; $addHandler(item, "mouseover", this.getItemMouseOverHandler (item)); $addHandler(item, "click", this.getItemClickHandler(item)); }
showListBox: function() { if (this._listBox != null) this._listBox.style.display = "block";
this.resetAllListItemsCssClass();
// Set selectedItem to MouseOver Class if no ItemSelectedCssClass was setted var selectedListItem = this.get_selectedListItem(); if (selectedListItem && !this._itemSelectedCssClass) { if (this.get_selectedIndex() % 2 == 1 && this._itemAlternateHoverCssClass) selectedListItem.className = this._itemAlternateHoverCssClass; else selectedListItem.className = this._itemAlternateCssClass; } },
resetAllListItemsCssClass: function() { // set class of all item/alternate items var listItems = this.get_listItems(); var selectedIndex = this.get_selectedIndex();
for (var i = 0; i < listItems.length; i++) { var listItem = listItems[i]; if (i == selectedIndex && this._itemSelectedCssClass) listItem.className = this._itemSelectedCssClass; else { if (i % 2 == 1 && this.isValid (this._itemAlternateCssClass)) listItem.className = this._itemAlternateCssClass; else listItem.className = this._itemCssClass; } } },
setListItemMouseOver: function(listItem) { this.resetAllListItemsCssClass(); var index = this.get_listItemIndex(listItem);