

/* styled overlay menus
=========================================================================== */
var MIOverlayOpenId = "";
var MIOverlayClickedId = "";
var MIOverlayMenuOpen = false;

// Map menu id's to button classes, for determining later on if the current menu
// is one with non-default behavior.
var MIOverlayClass = [];


function MIInitOverlay() {
	document.body.onmousedown = MIMouseDown;

	// Overlay menus with default behavior
	MIAddOverlayEvents("MIOverlayLnk");

	// Add code here for overlay menus with non-default behavior
}


function MIShowOverlay(menuId) {
	if ($(menuId)) {
		// If the menu is already open, close it
		if ($(menuId).style.display == "block") {
			$(menuId).style.display = "none";
		}
		else {
			$(menuId).style.display = "block";
			MIOverlayOpenId = menuId;
		    MIOverlayMenuOpen = true;
			MIOverlayClickedId = "";
		}
	}

	// Add code here for overlay menus with non-default behavior
}


function MIHideOverlay(menuId) {
	if ($(menuId)) {
		$(menuId).style.display = "none";
		MIOverlayOpenId = '';
	    MIOverlayMenuOpen = false;
	}

	// Add code here for overlay menus with non-default behavior
}


function MIGetOverlayMenuId(btn) {
	// Get the id parameter from href="javascript:foo('myId')"
	return btn.href.substring(btn.href.indexOf("'") + 1, btn.href.lastIndexOf("'"));
}


function MIAddOverlayEvents(btnClass) {
	var btnArray = document.getElementsByClassName(btnClass);
	for (var i = 0; i < btnArray.length; i++) {
		// button
		var btn = btnArray[i];
		btn.onmousedown = MIOverlayMouseDownBtn;

		// menu
		var menuId = MIGetOverlayMenuId(btn);
		if ($(menuId)) {
			$(menuId).onmousedown = MIOverlayMouseDownMenu;
		}

		// Store the button class associated with the menu id
	    MIOverlayClass[menuId] = btnClass;

		// Mac Safari image-rollover bug
		if ((navigator.userAgent.indexOf("Safari") != -1)
		 && (navigator.userAgent.indexOf("Mac") != -1)) {
			// If MIImgSwap() is called by the onmouseout event
			if (btn.onmouseout && btn.onmouseout.toString().indexOf("MIImgSwap") != -1) {
				// Make onclick call the onmouseout event handler
				btn.onclick = function onclick() { this.onmouseout(); return true; };
			}
		}
	}
}


function MIOverlayMouseDownBtn(e) {
	// Get the menu id
	var menuId = MIGetOverlayMenuId(this);
	MIOverlayClickedId = menuId;
	return true;
}


function MIOverlayMouseDownMenu(e) {
	// Get the menu id
	MIOverlayClickedId = this.id;
	return true;
}


function MIOverlayMouseDownBody(e) {
	// Close the open overlay menu, unless the mouse is inside the menu
	// or the menu button.
	if (MIOverlayOpenId != MIOverlayClickedId) {
		MIHideOverlay(MIOverlayOpenId);
	}
	MIOverlayClickedId = "";
	return true;
}
/* end styled overlay menus
=========================================================================== */


/* styled dropdowns
=========================================================================== */
var MIDropdownOpen = false;

// MI dropdown menu (JavaScript object literal)
var MIDD = {
	curId: "", // id of currently-open dropdown
	ignoreMouseDownBody: false,
	menus: [],

	rowHeight: 17,
	combinedBorderWidth: 20,
	scrollbarWidth: 18,

	minMenuWidth: 105,
	maxMenuWidth: 400,
	defaultMenuWidth: 205,
	defaultRowWidth: 150,
	combinedRowLRPad: 18,
	scrollbarRPad: 12,


	buildDisabledDropdown: function(menuId, buttonWidth, buttonClass, hiddenListSuffix) {
		// default parameters
		if (!buttonWidth) buttonWidth = 140;
		if (!buttonClass) buttonClass = 'MIDDWireLtg';

		var wrapId = menuId + "_wrap";
		var listId = menuId + "_list" + (hiddenListSuffix ? '_' + hiddenListSuffix : '');

		if ($(wrapId) && $(listId)) {

			// hide the <select>
			$(listId).style.display = "none";

			// Get the displayed value for the first select option
			var listItems = $(listId).options;
			var buttonText = listItems[0].innerHTML;

			var buttonTextLPad = 10;
			var buttonTextRPad = 34;
			var buttonTextWidth = buttonWidth - (buttonTextLPad + buttonTextRPad);

			var leftBgStyle = 'background:#fff url(http://redesign.milkeninstitute.org/dd/dropdown/btn_ltg_left.gif) 0 0 no-repeat;';
			var rightBgStyle = 'background:url(http://redesign.milkeninstitute.org/dd/dropdown/btn_ltg_right.gif) 100% 0 no-repeat;';

			switch (buttonClass) {
				case 'MIDDWire':
					leftBgStyle = 'background:#fff url(http://redesign.milkeninstitute.org/dd/dropdown/btn_wire_left.gif) 0 0 no-repeat;';
					rightBgStyle = 'background:url(http://redesign.milkeninstitute.org/dd/dropdown/btn_wire_right.gif) 100% 0 no-repeat;';
					break;
				case 'MIBlkBgWhtBox':
					leftBgStyle = 'background:#fff url(http://redesign.milkeninstitute.org/dd/dropdown/btn_blk_left.gif) 0 0 no-repeat;';
					rightBgStyle = 'background:url(http://redesign.milkeninstitute.org/dd/dropdown/btn_blk_right.gif) 100% 0 no-repeat;';
					break;
			}


			// build content for the button
			var strContent = "\n\n\n\n";
			strContent += '	<div class="MIDDContainer" style="width:'+buttonWidth+'px;">'+"\n";

			strContent += '		<div class="'+buttonClass+'">'+"\n";
			strContent += '			<div class="MIDDBtn" onmousedown="return MIDD.mouseDownBtn(event, \''+menuId+'\');" onclick="return MIDD.open(\''+menuId+'\')" style="'+rightBgStyle+'">'+"\n";
			strContent += '				<table width="'+buttonWidth+'" border="0" cellspacing="0" cellpadding="0">'+"\n";
			strContent += '					<tr>'+"\n";
			strContent += '						<td width="'+buttonTextLPad+'"><div class="MIDDBtnLeft" style="'+leftBgStyle+'"></div></td>'+"\n";
			strContent += '						<td width="'+buttonTextWidth+'">'+"\n";
			strContent += '							<div class="MIDDValueContainer">'+"\n";
			strContent += '								<div id="'+menuId+'_Val" class="MIDDValue" style="width:'+buttonTextWidth+'px;color:#c5c5c5;">'+buttonText+'</div>'+"\n";
			strContent += '						</td>'+"\n";
			strContent += '						<td width="'+buttonTextRPad+'"><img src="http://redesign.milkeninstitute.org/dd/dropdown/btn_icon_disabled.gif" alt="" border="0"></td>'+"\n";
			strContent += '					</tr>'+"\n";
			strContent += '				</table>'+"\n";
			strContent += '			</div><!--/MIDDBtn -->'+"\n\n";
			strContent += '		</div><!--/'+buttonClass+' -->'+"\n\n";

			strContent += '	</div><!--/MIDDContainer -->'+"\n";
			strContent += "\n\n";

			// draw the new content
			$(wrapId).innerHTML = strContent;

			// reset the list
			$(listId).selectedIndex = 0;

		}//else id of select not found [ abort ]
	},

	buildDropdown: function(menuId, buttonWidth, menuWidth, numVisibleRows, buttonClass, hiddenListSuffix) {
		// default parameters
		if (!buttonWidth) buttonWidth = 140;
		if (!menuWidth) menuWidth = this.defaultMenuWidth;
		if (!numVisibleRows) numVisibleRows = 10;
		if (!buttonClass) buttonClass = 'MIDDWireLtg';

		if (menuWidth < this.minMenuWidth) menuWidth = this.minMenuWidth;
		if (menuWidth > this.maxMenuWidth) menuWidth = this.maxMenuWidth;

		var wrapId = menuId + "_wrap";
		var listId = menuId + "_list" + (hiddenListSuffix ? '_' + hiddenListSuffix : '');

		this.menus[menuId] = new Array();
		this.menus[menuId].listId = listId;
		this.menus[menuId].updateFirstRow = false;

		if ($(wrapId) && $(listId)) {
			// hide the <select>
			$(listId).style.display = "none";

			var displayedValue = new Array();
			var internalValue = new Array();
			var disabledRow = new Array();

			var listItems = $(listId).options;
			for (var i=0;i<listItems.length;i++) {
				displayedValue[i] = listItems[i].innerHTML;
				internalValue[i] = listItems[i].value;
				disabledRow[i] = listItems[i].disabled;
			}
			var selectedRow = $(listId).selectedIndex;

			// If no row was explicitly selected
			if (selectedRow == 0) {
				// See if the first row matches one of the later rows
				for (i=1;i<displayedValue.length;i++) {
					if (displayedValue[i] == displayedValue[0]) {
						selectedRow = i;
						this.menus[menuId].updateFirstRow = true;
						break;
					}
				}
			}
			var buttonText = displayedValue[selectedRow];
			var numRows = displayedValue.length;

			var buttonTextLPad = 10;
			var buttonTextRPad = 34;
			var buttonTextWidth = buttonWidth - (buttonTextLPad + buttonTextRPad);

			// minus left and right borders
			var fullRowWidth = menuWidth - this.combinedBorderWidth;

			// without scrollbar
			var visibleRowsHeight = numRows * this.rowHeight;
			var rowWidth = fullRowWidth;

			// with scrollbar
			if (numRows > numVisibleRows) {
				visibleRowsHeight = numVisibleRows * this.rowHeight;
				rowWidth -= 10;
			}

			var leftBgStyle = 'background:url(http://redesign.milkeninstitute.org/dd/dropdown/btn_ltg_left.gif) 0 0 no-repeat;';
			var rightBgStyle = 'background:url(http://redesign.milkeninstitute.org/dd/dropdown/btn_ltg_right.gif) 100% 0 no-repeat;';

			switch (buttonClass) {
				case 'MIDDWire':
					leftBgStyle = 'background:url(http://redesign.milkeninstitute.org/dd/dropdown/btn_wire_left.gif) 0 0 no-repeat;';
					rightBgStyle = 'background:url(http://redesign.milkeninstitute.org/dd/dropdown/btn_wire_right.gif) 100% 0 no-repeat;';
					break;
				case 'MIBlkBgWhtBox':
					leftBgStyle = 'background:url(http://redesign.milkeninstitute.org/dd/dropdown/btn_blk_left.gif) 0 0 no-repeat;';
					rightBgStyle = 'background:url(http://redesign.milkeninstitute.org/dd/dropdown/btn_blk_right.gif) 100% 0 no-repeat;';
					break;
			}


			// build content for the menu
			var strContent = "\n\n\n\n";
			strContent += '	<div class="MIDDContainer" style="width:'+buttonWidth+'px;">'+"\n";

			strContent += '		<div class="MIDDBoxContainer">'+"\n";
			strContent += '		<div class="MIDDBox" id="'+menuId+'" style="width:'+menuWidth+'px;" onmousedown="return MIDD.mouseDown(event, \''+menuId+'\');">'+"\n";
			strContent += '			<div class="MIDDBoxHeader"><div class="MIDDBoxHeaderTL"></div><div class="MIDDBoxHeaderTR"></div></div>'+"\n";
			strContent += '			<div class="MIDDBoxContent">'+"\n";

			strContent += '				<div class="MIDDContent" style="width:'+fullRowWidth+'px;">'+"\n";
			strContent += '					<div class="MIPad6Top"></div>'+"\n";
			strContent += '					<div class="MIDDList" style="height:'+visibleRowsHeight+'px; width:'+rowWidth+'px;">'+"\n";
			strContent += '						<ul>'+"\n";

			for (var i=0;i<displayedValue.length;i++) {
				if ((i==0) && (this.menus[menuId].updateFirstRow)) {
					strContent += '						<li id="'+menuId+'_hdnVal"><a href="javascript:MIDD.select('+i+',\''+this.encodeAttr(displayedValue[i])+'\',\''+this.encodeAttr(internalValue[i])+'\');">'+displayedValue[i]+'</a></li>'+"\n";
				}
				else if (disabledRow[i]) {
					strContent += '						<li class="MIDDSeparator"><span>'+displayedValue[i]+'</span></li>'+"\n";
				}
				else {
					strContent += '						<li><a href="javascript:MIDD.select('+i+',\''+this.encodeAttr(displayedValue[i])+'\',\''+this.encodeAttr(internalValue[i])+'\');">'+displayedValue[i]+'</a></li>'+"\n";
				}
			}
			strContent += '						</ul>'+"\n";
			strContent += '					</div>'+"\n";
			strContent += '					<div class="MIPad8Top"></div>'+"\n";
			strContent += '				</div><!-- /MIDDContent -->'+"\n";

			strContent += '			</div><!-- /MIDDBoxContent -->'+"\n";
			strContent += '			<div class="MIDDBoxFooter"><div class="MIDDBoxFooterBL"></div><div class="MIDDBoxFooterBR"></div></div>'+"\n";
			strContent += '		</div><!--/MIDDBox-->'+"\n";
			strContent += '		</div><!--/MIDDBoxContainer-->'+"\n";

			strContent += '		<div class="'+buttonClass+'">'+"\n";
			strContent += '			<div class="MIDDBtn" onmousedown="return MIDD.mouseDownBtn(event, \''+menuId+'\');" onclick="return MIDD.open(\''+menuId+'\')" style="'+rightBgStyle+'">'+"\n";
			strContent += '				<table width="'+buttonWidth+'" border="0" cellspacing="0" cellpadding="0">'+"\n";
			strContent += '					<tr>'+"\n";
			strContent += '						<td width="'+buttonTextLPad+'"><div class="MIDDBtnLeft" style="'+leftBgStyle+'"></div></td>'+"\n";
			strContent += '						<td width="'+buttonTextWidth+'">'+"\n";
			strContent += '							<div class="MIDDValueContainer">'+"\n";
			strContent += '								<div id="'+menuId+'_Val" class="MIDDValue" style="width:'+buttonTextWidth+'px;">'+buttonText+'</div>'+"\n";
			strContent += '						</td>'+"\n";
			strContent += '						<td width="'+buttonTextRPad+'"><img src="http://redesign.milkeninstitute.org/dd/dropdown/btn_icon.gif" alt="" border="0"></td>'+"\n";
			strContent += '					</tr>'+"\n";
			strContent += '				</table>'+"\n";
			strContent += '			</div><!--/MIDDBtn -->'+"\n\n";
			strContent += '		</div><!--/'+buttonClass+' -->'+"\n\n";

			strContent += '	</div><!--/MIDDContainer -->'+"\n";
			strContent += "\n\n";

			// draw the new content
			$(wrapId).innerHTML = strContent;

			// capture mousedown
			
		}//else id of select not found [ abort ]
	},

	buildOverlay: function(menuId, menuWidth, numVisibleRows, dx, dy) {
		// default parameters
		if (!menuWidth) menuWidth = this.defaultMenuWidth;
		if (!numVisibleRows) numVisibleRows = 10;

		if (menuWidth < this.minMenuWidth) menuWidth = this.minMenuWidth;
		if (menuWidth > this.maxMenuWidth) menuWidth = this.maxMenuWidth;

		var leftPos = -20;
		var topPos = 1;
		if (dx) leftPos += dx;
		if (dy) topPos += dy;

		var wrapId = menuId + "_wrap";
		var listId = menuId + "_list";
		var titleId = menuId + "_title";

		if ($(wrapId) && $(titleId) && $(listId)) {
			// hide the list
			$(listId).style.display = "none";

			var title = $(titleId).innerHTML;

			// Get the displayed value for each select option
			var listItems = $(listId).getElementsByTagName('li');
			var displayedList = new Array();
			for (var i=0;i<listItems.length;i++) {
				displayedList[i] = listItems[i].innerHTML;
			}

			var numRows = displayedList.length;

			var menuTitleRPad = 60;
			var menuTitleWidth = menuWidth - menuTitleRPad;

			// minus left and right borders
			var fullRowWidth = menuWidth - this.combinedBorderWidth;

			// without scrollbar
			var visibleRowsHeight = numRows * this.rowHeight;
			var rowWidth = menuWidth - this.combinedBorderWidth;

			// with scrollbar
			if (numRows > numVisibleRows) {
				visibleRowsHeight = numVisibleRows * this.rowHeight;
				rowWidth -= 10;
			}


			// build content for the menu
			var strContent = "\n\n\n\n";
			strContent += ' <div class="MIDDOvrBoxContainer">'+"\n";
			strContent += '		<div class="clear"><img src="http://redesign.milkeninstitute.org/dd/dropdown/1.gif" width="1" height="1" border="0" alt=""></div>'+"\n";
			strContent += '		<div class="MIDDOvrBox" id="'+menuId+'" style="width:'+menuWidth+'px;left:'+leftPos+'px; top:'+topPos+'px;" onmousedown="return MIDD.mouseDown(event, \''+menuId+'\');">'+"\n";
			strContent += '			<div class="MIDDBoxHeader"><div class="MIDDBoxHeaderTL"></div><div class="MIDDBoxHeaderTR"></div></div>'+"\n";
			strContent += '			<div class="MIDDBoxContent">'+"\n";
			strContent += '				<div class="MIDDOvrCloseContainer"><div class="MIDDOvrClose" onclick="MIDD.close(); return true;"><img src="dropdown/overlay_close.png" width="12" height="12" alt="" border="0"></div></div>'+"\n";
			strContent += '				<div class="MIDDContent" style="width:'+fullRowWidth+'px;">'+"\n";
			strContent += '					<div class="MIDDOvrTitle" style="width:'+menuTitleWidth+'px;overflow:hidden;">'+title+'</div>'+"\n";
			strContent += '					<div class="MIDDList" style="height:'+visibleRowsHeight+'px;width:'+rowWidth+'px;">'+"\n";
			strContent += '						<ul>'+"\n";

			for (var i=0;i<displayedList.length;i++) {
				strContent += '					<li>'+displayedList[i]+'</li>'+"\n";
			}
			strContent += '						</ul>'+"\n";
			strContent += '					</div><!-- /MIDDList -->'+"\n";
			strContent += '					<div class="MIPad12Top"></div>'+"\n";
			strContent += '				</div><!-- /MIDDContent -->'+"\n";
			strContent += '			</div><!-- /MIDDBoxContent -->'+"\n";
			strContent += '			<div class="MIDDBoxFooter"><div class="MIDDBoxFooterBL"></div><div class="MIDDBoxFooterBR"></div></div>'+"\n";
			strContent += '		</div><!--/MIDDOvrBox-->'+"\n";
			strContent += ' </div><!--/MIDDOvrBoxContainer-->'+"\n";
			strContent += "\n\n";
			// draw the new content
			$(wrapId).innerHTML = strContent;

			// capture mousedown
			document.body.onmousedown = MIMouseDown;

		}//else id of select not found [ abort ]
	},


	select: function(index, displayedValue, internalValue) {
		if ($(this.curId)) {
			var menuId = this.curId;

			// close the dropdown
			this.close();

			// change the displayed dropdown value (button text)
			if ($(menuId + '_Val')) {
				$(menuId + '_Val').innerHTML = displayedValue;
			}

			// set the first row of the menu to the current value
			if ((this.menus[menuId].updateFirstRow) && $(menuId + '_hdnVal')) {
				$(menuId+'_hdnVal').innerHTML = '<a href="javascript:MIDD.select(' + index + ',\'' + this.encodeAttr(displayedValue) + '\',\'' + this.encodeAttr(internalValue) + '\')">' + displayedValue + '</a>';
			}

			var listId = this.menus[menuId].listId;
			if ($(listId)) {
				// if the value has changed
				if ($(listId).selectedIndex != index) {
					// set the index of the selected option for the invisible <select>
					$(listId).selectedIndex = index;

					// If an onchange event handler exists
					if ($(listId).onchange) {
						$(listId).onchange();
					}
				}
			}

			// if a callback function exists
			try {
				var onChoose = eval(menuId + '_OnChoose');
				if (onChoose) {
					onChoose();
				}
			}
			catch(err) {
			}
		}
	},

	open: function(id) {
		if($(id)) {
			// Was the same menu clicked again?
			var sameMenu = (this.curId == id);

			// If a menu is already open
			this.close();

			// If a different menu was clicked
			if (!sameMenu) {
				$(id).style.display = "block";
				this.curId = id;
				MIDropdownOpen = true;
			}
		}
	},

	close: function() {
		if ($(this.curId)) {
			$(this.curId).style.display = "none";
			this.curId = '';
			MIDropdownOpen = false;
		}
	},

	encodeAttr: function(str) {
		str=str.replace(/\\/g,'\\\\');
		str=str.replace(/\'/g,'\\\'');
		str=str.replace(/\"/g,'&quot;');
		str=str.replace(/\0/g,'\\0');
		return str;
	},

	mouseDown: function(e, id) {
		this.ignoreMouseDownBody = true;
		return true;
	},

	mouseDownBtn: function(e, id) {
		// True if the same dropdown button was clicked again.
		this.ignoreMouseDownBody = (id && (this.curId == id));
		return true;
	},

	mouseDownBody: function(e) {
		if (!this.ignoreMouseDownBody) {
			this.close();
		}
		this.ignoreMouseDownBody = false;
		return true;
	}
}
/* end styled dropdowns
=========================================================================== */

