/* global event handlers
=========================================================================== */
function listmenuMouseDown(e) {
	if (listmenuDropdownOpen) listmenuDD.mouseDownBody(e);
	if (listmenuOverlayMenuOpen) listmenuOverlayMouseDownBody(e);
	return true;
}
/* end global event handlers
=========================================================================== */


/* styled overlay menus
=========================================================================== */
var listmenuOverlayOpenId = "";
var listmenuOverlayClickedId = "";
var listmenuOverlayMenuOpen = false;

// Map menu id's to button classes, for determining later on if the current menu
// is one with non-default behavior.
var listmenuOverlayClass = [];


function listmenuInitOverlay() {
	document.body.onmousedown = listmenuMouseDown;

	// Overlay menus with default behavior
	listmenuAddOverlayEvents("listmenuOverlayLnk");

	// Add code here for overlay menus with non-default behavior
}


function listmenuShowOverlay(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";
			listmenuOverlayOpenId = menuId;
		    listmenuOverlayMenuOpen = true;
			listmenuOverlayClickedId = "";
		}
	}

	// Add code here for overlay menus with non-default behavior
}


function listmenuHideOverlay(menuId) {
	if ($(menuId)) {
		$(menuId).style.display = "none";
		listmenuOverlayOpenId = '';
	    listmenuOverlayMenuOpen = false;
	}

	// Add code here for overlay menus with non-default behavior
}


function listmenuGetOverlayMenuId(btn) {
	// Get the id parameter from href="javascript:foo('myId')"
	return btn.href.substring(btn.href.indexOf("'") + 1, btn.href.lastIndexOf("'"));
}


function listmenuAddOverlayEvents(btnClass) {
	var btnArray = document.getElementsByClassName(btnClass);
	for (var i = 0; i < btnArray.length; i++) {
		// button
		var btn = btnArray[i];
		btn.onmousedown = listmenuOverlayMouseDownBtn;

		// menu
		var menuId = listmenuGetOverlayMenuId(btn);
		if ($(menuId)) {
			$(menuId).onmousedown = listmenuOverlayMouseDownMenu;
		}

		// Store the button class associated with the menu id
	    listmenuOverlayClass[menuId] = btnClass;

		// Mac Safari image-rollover bug
		if ((navigator.userAgent.indexOf("Safari") != -1)
		 && (navigator.userAgent.indexOf("Mac") != -1)) {
			// If listmenuImgSwap() is called by the onmouseout event
			if (btn.onmouseout.toString().indexOf("listmenuImgSwap") != -1) {
				// Make onclick call the onmouseout event handler
				btn.onclick = function onclick() { this.onmouseout(); return true; };
			}
		}
	}
}


function listmenuOverlayMouseDownBtn(e) {
	// Get the menu id
	var menuId = listmenuGetOverlayMenuId(this);
	listmenuOverlayClickedId = menuId;
	return true;
}


function listmenuOverlayMouseDownMenu(e) {
	// Get the menu id
	listmenuOverlayClickedId = this.id;
	return true;
}


function listmenuOverlayMouseDownBody(e) {
	// Close the open overlay menu, unless the mouse is inside the menu
	// or the menu button.
	if (listmenuOverlayOpenId != listmenuOverlayClickedId) {
		listmenuHideOverlay(listmenuOverlayOpenId);
	}
	listmenuOverlayClickedId = "";
	return true;
}
/* end styled overlay menus
=========================================================================== */


/* styled dropdowns
=========================================================================== */
var listmenuDropdownOpen = false;

// CRESUS Agro-annuaire.com dropdown menu (JavaScript object literal)
var listmenuDD = {
	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 = 'listmenuDDWireLtg';

		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(imgcommon/btn_ltg_left.gif) 0 0 no-repeat;';
			var rightBgStyle = 'background:url(imgcommon/btn_ltg_right.gif) 100% 0 no-repeat;';

			switch (buttonClass) {
				case 'listmenuDDWire':
					leftBgStyle = 'background:#fff url(imgcommon/btn_wire_left.gif) 0 0 no-repeat;';
					rightBgStyle = 'background:url(imgcommon/btn_wire_right.gif) 100% 0 no-repeat;';
					break;
				case 'listmenuBlkBgWhtBox':
					leftBgStyle = 'background:#fff url(imgcommon/btn_blk_left.gif) 0 0 no-repeat;';
					rightBgStyle = 'background:url(imgcommon/btn_blk_right.gif) 100% 0 no-repeat;';
					break;
			}


			// build content for the button
			var strContent = "\n\n\n\n";
			strContent += '	<div class="listmenuDDContainer" style="width:'+buttonWidth+'px;">'+"\n";

			strContent += '		<div class="'+buttonClass+'">'+"\n";
			strContent += '			<div class="listmenuDDBtn" onmousedown="return listmenuDD.mouseDownBtn(event, \''+menuId+'\');" onclick="return listmenuDD.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="listmenuDDBtnLeft" style="'+leftBgStyle+'"></div></td>'+"\n";
			strContent += '						<td width="'+buttonTextWidth+'">'+"\n";
			strContent += '							<div class="listmenuDDValueContainer">'+"\n";
			strContent += '								<div id="'+menuId+'_Val" class="listmenuDDValue" style="width:'+buttonTextWidth+'px;color:#c5c5c5;">'+buttonText+'</div>'+"\n";
			strContent += '						</td>'+"\n";
			strContent += '						<td width="'+buttonTextRPad+'"><img src="imgcommon/btn_icon_disabled.gif" alt="" border="0"></td>'+"\n";
			strContent += '					</tr>'+"\n";
			strContent += '				</table>'+"\n";
			strContent += '			</div><!--/listmenuDDBtn -->'+"\n\n";
			strContent += '		</div><!--/'+buttonClass+' -->'+"\n\n";

			strContent += '	</div><!--/listmenuDDContainer -->'+"\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 = 'listmenuDDWireLtg';

		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; // tet7akem fel position du Titre (---selectionner une catégorie----)
			var buttonTextRPad = 19; // décalage du icone triangulaire rouge -khaled- vers la droite ou ver la gauche
			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:#fff url(imgcommon/btn_ltg_left.gif) 0 0 no-repeat;';
			var rightBgStyle = 'background:url(imgcommon/btn_ltg_right.gif) 100% 0 no-repeat;';

			switch (buttonClass) {
				case 'listmenuDDWire':
					leftBgStyle = 'background:#fff url(imgcommon/btn_wire_left.gif) 0 0 no-repeat;';
					rightBgStyle = 'background:url(imgcommon/btn_wire_right.gif) 100% 0 no-repeat;';
					break;
				case 'listmenuBlkBgWhtBox':
					leftBgStyle = 'background:#fff url(imgcommon/btn_blk_left.gif) 0 0 no-repeat;';
					rightBgStyle = 'background:url(imgcommon/btn_blk_right.gif) 100% 0 no-repeat;';
					break;
			}


			// build content for the menu
			var strContent = "\n\n\n\n";
			strContent += '	<div class="listmenuDDContainer" style="width:'+buttonWidth+'px;">'+"\n";

			strContent += '		<div class="listmenuDDBoxContainer">'+"\n";
			strContent += '		<div class="listmenuDDBox" id="'+menuId+'" style="width:'+menuWidth+'px;" onmousedown="return listmenuDD.mouseDown(event, \''+menuId+'\');">'+"\n";
			strContent += '			<div class="listmenuDDBoxHeader"><div class="listmenuDDBoxHeaderTL"></div><div class="listmenuDDBoxHeaderTR"></div></div>'+"\n";
			strContent += '			<div class="listmenuDDBoxContent">'+"\n";

			strContent += '				<div class="listmenuDDContent" style="width:'+fullRowWidth+'px;">'+"\n";
			strContent += '					<div class="listmenuPad6Top"></div>'+"\n";
			strContent += '					<div class="listmenuDDList" 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:listmenuDD.select('+i+',\''+this.encodeAttr(displayedValue[i])+'\',\''+this.encodeAttr(internalValue[i])+'\');">'+displayedValue[i]+'</a></li>'+"\n";
				}
				else if (disabledRow[i]) {
					strContent += '						<li class="listmenuDDSeparator"><span>'+displayedValue[i]+'</span></li>'+"\n";
				}
				else {
					strContent += '						<li><a href="javascript:listmenuDD.select('+i+',\''+this.encodeAttr(displayedValue[i])+'\',\''+this.encodeAttr(internalValue[i])+'\');">'+displayedValue[i]+'</a></li>'+"\n";
				}
			}
			strContent += '						</ul>'+"\n";
			strContent += '					</div>'+"\n";
			strContent += '					<div class="listmenuPad8Top"></div>'+"\n";
			strContent += '				</div><!-- /listmenuDDContent -->'+"\n";

			strContent += '			</div><!-- /listmenuDDBoxContent -->'+"\n";
			strContent += '			<div class="listmenuDDBoxFooter"><div class="listmenuDDBoxFooterBL"></div><div class="listmenuDDBoxFooterBR"></div></div>'+"\n";
			strContent += '		</div><!--/listmenuDDBox-->'+"\n";
			strContent += '		</div><!--/listmenuDDBoxContainer-->'+"\n";

			strContent += '		<div class="'+buttonClass+'">'+"\n";
			strContent += '			<div class="listmenuDDBtn" onmousedown="return listmenuDD.mouseDownBtn(event, \''+menuId+'\');" onclick="return listmenuDD.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="listmenuDDBtnLeft" style="'+leftBgStyle+'"></div></td>'+"\n";
			strContent += '						<td width="'+buttonTextWidth+'">'+"\n";
			strContent += '							<div class="listmenuDDValueContainer">'+"\n";
			strContent += '								<div id="'+menuId+'_Val" class="listmenuDDValue" style="width:'+buttonTextWidth+'px;">'+buttonText+'</div>'+"\n";
			strContent += '						</td>'+"\n";
			strContent += '						<td width="'+buttonTextRPad+'"><img src="imgcommon/btn_icon.gif" alt="" border="0"></td>'+"\n";
			strContent += '					</tr>'+"\n";
			strContent += '				</table>'+"\n";
			strContent += '			</div><!--/listmenuDDBtn -->'+"\n\n";
			strContent += '		</div><!--/'+buttonClass+' -->'+"\n\n";

			strContent += '	</div><!--/listmenuDDContainer -->'+"\n";
			strContent += "\n\n";

			// draw the new content
			$(wrapId).innerHTML = strContent;

			// capture mousedown
			document.body.onmousedown = listmenuMouseDown;
		}//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="listmenuDDOvrBoxContainer">'+"\n";
			strContent += '		<div class="clear"><img src="imgcommon/1.gif" width="1" height="1" border="0" alt=""></div>'+"\n";
			strContent += '		<div class="listmenuDDOvrBox" id="'+menuId+'" style="width:'+menuWidth+'px;left:'+leftPos+'px; top:'+topPos+'px;" onmousedown="return listmenuDD.mouseDown(event, \''+menuId+'\');">'+"\n";
			strContent += '			<div class="listmenuDDBoxHeader"><div class="listmenuDDBoxHeaderTL"></div><div class="listmenuDDBoxHeaderTR"></div></div>'+"\n";
			strContent += '			<div class="listmenuDDBoxContent">'+"\n";
			strContent += '				<div class="listmenuDDOvrCloseContainer"><div class="listmenuDDOvrClose" onclick="listmenuDD.close(); return true;"><img src="imgcommon/overlay_close.png" width="12" height="12" alt="" border="0"></div></div>'+"\n";
			strContent += '				<div class="listmenuDDContent" style="width:'+fullRowWidth+'px;">'+"\n";
			strContent += '					<div class="listmenuDDOvrTitle" style="width:'+menuTitleWidth+'px;overflow:hidden;">'+title+'</div>'+"\n";
			strContent += '					<div class="listmenuDDList" 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><!-- /listmenuDDList -->'+"\n";
			strContent += '					<div class="listmenuPad12Top"></div>'+"\n";
			strContent += '				</div><!-- /listmenuDDContent -->'+"\n";
			strContent += '			</div><!-- /listmenuDDBoxContent -->'+"\n";
			strContent += '			<div class="listmenuDDBoxFooter"><div class="listmenuDDBoxFooterBL"></div><div class="listmenuDDBoxFooterBR"></div></div>'+"\n";
			strContent += '		</div><!--/listmenuDDOvrBox-->'+"\n";
			strContent += ' </div><!--/listmenuDDOvrBoxContainer-->'+"\n";
			strContent += "\n\n";
			// draw the new content
			$(wrapId).innerHTML = strContent;

			// capture mousedown
			document.body.onmousedown = listmenuMouseDown;

		}//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:listmenuDD.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;
				listmenuDropdownOpen = true;
			}
		}
	},

	close: function() {
		if ($(this.curId)) {
			$(this.curId).style.display = "none";
			this.curId = '';
			listmenuDropdownOpen = 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
=========================================================================== */
