// JavaScript Document

/* global event handlers
=========================================================================== */
function aalMouseDown(e) {
	if (aalDropdownOpen) aalDD.mouseDownBody(e);
	if (aalOverlayMenuOpen) aalOverlayMouseDownBody(e);
	return true;
}
/* end global event handlers
=========================================================================== */
/* styled overlay menus
=========================================================================== */
var aalOverlayOpenId = "";
var aalOverlayClickedId = "";
var aalOverlayMenuOpen = false;

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


function aalInitOverlay() {
	document.body.onmousedown = aalMouseDown;

	// Overlay menus with default behavior
	aalAddOverlayEvents("aalOverlayLnk");

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


function aalShowOverlay(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";
			aalOverlayOpenId = menuId;
		    aalOverlayMenuOpen = true;
			aalOverlayClickedId = "";
		}
	}

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


function aalHideOverlay(menuId) {
	if ($(menuId)) {
		$(menuId).style.display = "none";
		aalOverlayOpenId = '';
	    aalOverlayMenuOpen = false;
	}

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


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


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

		// menu
		var menuId = aalGetOverlayMenuId(btn);
		if ($(menuId)) {
			$(menuId).onmousedown = aalOverlayMouseDownMenu;
		}

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

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


function aalOverlayMouseDownBtn(e) {
	// Get the menu id
	var menuId = aalGetOverlayMenuId(this);
	aalOverlayClickedId = menuId;
	return true;
}


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


function aalOverlayMouseDownBody(e) {
	// Close the open overlay menu, unless the mouse is inside the menu
	// or the menu button.
	if (aalOverlayOpenId != aalOverlayClickedId) {
		aalHideOverlay(aalOverlayOpenId);
	}
	aalOverlayClickedId = "";
	return true;
}
/* end styled overlay menus
=========================================================================== */


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

// aal dropdown menu (JavaScript object literal)
var aalDD = {
	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 = 'aalDDWireLtg';

		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:#000 url(images/dropdownmenu/btn_ltg_left.gif) 0 0 no-repeat;';
			var rightBgStyle = 'background:url(images/dropdownmenu/btn_ltg_right.gif) 100% 0 no-repeat;';

			switch (buttonClass) {
				case 'aalDDWire':
					leftBgStyle = 'background:#000 url(images/dropdownmenu//btn_wire_left.gif) 0 0 no-repeat;';
					rightBgStyle = 'background:url(images/dropdownmenu/btn_wire_right.gif) 100% 0 no-repeat;';
					break;
				case 'aalBlkBgWhtBox':
					leftBgStyle = 'background:#000 url(images/dropdownmenu/btn_blk_left.gif) 0 0 no-repeat;';
					rightBgStyle = 'background:url(images/dropdownmenu/btn_blk_right.gif) 100% 0 no-repeat;';
					break;
			}


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

			strContent += '		<div class="'+buttonClass+'">'+"\n";
			strContent += '			<div class="aalDDBtn" onmousedown="return aalDD.mouseDownBtn(event, \''+menuId+'\');" onclick="return aalDD.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="aalDDBtnLeft" style="'+leftBgStyle+'"></div></td>'+"\n";
			strContent += '						<td width="'+buttonTextWidth+'">'+"\n";
			strContent += '							<div class="aalDDValueContainer">'+"\n";
			strContent += '								<div id="'+menuId+'_Val" class="aalDDValue" style="width:'+buttonTextWidth+'px;">'+buttonText+'</div>'+"\n";
			strContent += '						</td>'+"\n";
			strContent += '						<td width="'+buttonTextRPad+'"><img src="images/dropdowns/btn_icon_disabled.gif" alt="" border="0"></td>'+"\n";
			strContent += '					</tr>'+"\n";
			strContent += '				</table>'+"\n";
			strContent += '			</div><!--/aalDDBtn -->'+"\n\n";
			strContent += '		</div><!--/'+buttonClass+' -->'+"\n\n";

			strContent += '	</div><!--/aalDDContainer -->'+"\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 = 'aalDDWireLtg';

		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:#000 url(images/btn_ltg_left.gif) 0 0 no-repeat;';
			var rightBgStyle = 'background:url(images/dropdownmenu/btn_ltg_right.gif) 100% 0 no-repeat;';

			switch (buttonClass) {
				case 'aalDDWire':
					leftBgStyle = 'background:#000 url(images/dropdownmenu/btn_wire_left.gif) 0 0 no-repeat;';
					rightBgStyle = 'background: url(images/dropdownmenu/btn_wire_right.gif) 100% 0 no-repeat;';
					break;
			}


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

			strContent += '		<div class="aalDDBoxContainer" style="background:#cc0000;">'+"\n";
			strContent += '		<div class="aalDDBox" id="'+menuId+'" style="width:'+menuWidth+'px;" onmousedown="return aalDD.mouseDown(event, \''+menuId+'\');">'+"\n";
			strContent += '			<div class="aalDDBoxHeader"><div class="aalDDBoxHeaderTL"></div><div class="aalDDBoxHeaderTR"></div></div>'+"\n";
			strContent += '			<div class="aalDDBoxContent">'+"\n";

			strContent += '				<div class="aalDDContent" style="width:'+fullRowWidth+'px;">'+"\n";
			strContent += '					<div class="aalPad6Top"></div>'+"\n";
			strContent += '					<div class="aalDDList" 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:aalDD.select('+i+',\''+this.encodeAttr(displayedValue[i])+'\',\''+this.encodeAttr(internalValue[i])+'\');">'+displayedValue[i]+'</a></li>'+"\n";
				}
				else if (disabledRow[i]) {
					strContent += '						<li class="aalDDSeparator"><span>'+displayedValue[i]+'</span></li>'+"\n";
				}
				else {
					strContent += '						<li><a href="javascript:aalDD.select('+i+',\''+this.encodeAttr(displayedValue[i])+'\',\''+this.encodeAttr(internalValue[i])+'\');">'+displayedValue[i]+'</a></li>'+"\n";
				}
			}
			strContent += '						</ul>'+"\n";
			strContent += '					</div>'+"\n";
			strContent += '					<div class="aalPad8Top"></div>'+"\n";
			strContent += '				</div><!-- /aalDDContent -->'+"\n";

			strContent += '			</div><!-- /aalDDBoxContent -->'+"\n";
			strContent += '			<div class="aalDDBoxFooter"><div class="aalDDBoxFooterBL"></div><div class="aalDDBoxFooterBR"></div></div>'+"\n";
			strContent += '		</div><!--/aalDDBox-->'+"\n";
			strContent += '		</div><!--/aalDDBoxContainer-->'+"\n";

			strContent += '		<div class="'+buttonClass+'" >'+"\n";
			strContent += '			<div  class="aalDDBtn" onmousedown="return aalDD.mouseDownBtn(event, \''+menuId+'\');" onclick="return aalDD.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="aalDDBtnLeft" style="'+leftBgStyle+'"></div></td>'+"\n";
			strContent += '						<td width="'+buttonTextWidth+'" >'+"\n"; /* fundo da janela */
			strContent += '							<div class="aalDDValueContainer">'+"\n";
			strContent += '								<div id="'+menuId+'_Val" class="aalDDValue" style="width:'+buttonTextWidth+'px;">'+buttonText+'</div>'+"\n";
			strContent += '						</td>'+"\n";
			strContent += '						<td width="'+buttonTextRPad+'"><img src="images/icons/btn_icon.gif" alt="" border="0"></td>'+"\n";
			strContent += '					</tr>'+"\n";
			strContent += '				</table>'+"\n";
			strContent += '			</div><!--/aalDDBtn -->'+"\n\n";
			strContent += '		</div><!--/'+buttonClass+' -->'+"\n\n";

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

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

			// capture mousedown
			document.body.onmousedown = aalMouseDown;
		}//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="aalDDOvrBoxContainer">'+"\n";
			strContent += '		<div class="clear"><img src="imagens/1.gif" width="1" height="1" border="0" alt=""></div>'+"\n";
			strContent += '		<div class="aalDDOvrBox" id="'+menuId+'" style="width:'+menuWidth+'px;left:'+leftPos+'px; top:'+topPos+'px;" onmousedown="return aalDD.mouseDown(event, \''+menuId+'\');">'+"\n";
			strContent += '			<div class="aalDDBoxHeader"><div class="aalDDBoxHeaderTL"></div><div class="aalDDBoxHeaderTR"></div></div>'+"\n";
			strContent += '			<div class="aalDDBoxContent">'+"\n";
			strContent += '				<div class="aalDDOvrCloseContainer"><div class="aalDDOvrClose" onclick="aalDD.close(); return true;"><img src="http://i.aal.net/aal/.element/img/2.0/global/dropdowns/overlay_close.png" width="12" height="12" alt="" border="0"></div></div>'+"\n";
			strContent += '				<div class="aalDDContent" style="width:'+fullRowWidth+'px;">'+"\n";
			strContent += '					<div class="aalDDOvrTitle" style="width:'+menuTitleWidth+'px;overflow:hidden;">'+title+'</div>'+"\n";
			strContent += '					<div class="aalDDList" 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><!-- /aalDDList -->'+"\n";
			strContent += '					<div class="aalPad12Top"></div>'+"\n";
			strContent += '				</div><!-- /aalDDContent -->'+"\n";
			strContent += '			</div><!-- /aalDDBoxContent -->'+"\n";
			strContent += '			<div class="aalDDBoxFooter"><div class="aalDDBoxFooterBL"></div><div class="aalDDBoxFooterBR"></div></div>'+"\n";
			strContent += '		</div><!--/aalDDOvrBox-->'+"\n";
			strContent += ' </div><!--/aalDDOvrBoxContainer-->'+"\n";
			strContent += "\n\n";
			// draw the new content
			$(wrapId).innerHTML = strContent;
*/
			// capture mousedown
			document.body.onmousedown = aalMouseDown;

		}//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:aalDD.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;
				aalDropdownOpen = true;
			}
		}
	},

	close: function() {
		if ($(this.curId)) {
			$(this.curId).style.display = "none";
			this.curId = '';
			aalDropdownOpen = 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
=========================================================================== */

