function cercaCookie(xname) {

	var xnameEQ = xname + "=";
	var xca = document.cookie.split(';');
	for(var xi=0;xi < xca.length;xi++) {
		var xc = xca[xi];
		while (xc.charAt(0)==' ') xc = xc.substring(1,xc.length);
		if (xc.indexOf(xnameEQ) == 0) return xc.substring(xnameEQ.length,xc.length);
	}
	return null;
}
function sendCookie(zname,zvalue,zdays) {
	if (zdays) {
		var zdate = new Date();
		zdate.setTime(zdate.getTime()+(zdays*24*60*60*1000));
		var zexpires = "; expires="+zdate.toGMTString();
	}
	else var zexpires = "";
	document.cookie = zname+"="+zvalue+zexpires+"; path=/";
}
function trovaog (valx) {
	if (document.getElementById(valx) != null) {
		return true;
	}
    else {
          return false;
	}
}
function esiste (oggetto) {
if (document.getElementById(oggetto) != null){
    return true;
}
else {
   return false;
}
}
/***********************************************
* Dynamic Ajax Content- © Dynamic Drive DHTML code library (www.dynamicdrive.com)
* This notice MUST stay intact for legal use
* Visit Dynamic Drive at http://www.dynamicdrive.com/ for full source code
***********************************************/
var bustcachevar=1 //bust potential caching of external pages after initial request? (1=yes, 0=no)
var loadedobjects=""
var rootdomain="http://"+window.location.hostname
var bustcacheparameter=""

function ajaxpage(url, containerid, loader, img, title){
if (navigator.userAgent.indexOf("Firefox") != -1 && loader!="ni" && esiste('medal5')){
	document.getElementById("medal5").style.top = "600px";
}

if (loader=="no"){ // a richiesta
	document.getElementById(containerid).innerHTML='<table width="220" style="background:#FFFFFF;border:solid #000000;border-width:1px;"><tr><td align="center"><font style="font-family: Perpetua; font-size: 18px; font-weight: bold;"><a href="javascript:ajaxpage(\'' + url +'\',\'medal5\',\'si\');" title="visualizza statistiche">visualizza statistiche</a></font><br><br><a href="javascript:ajaxpage(\'' + url +'\',\'medal5\',\'si\');" title="visualizza statistiche"><img src="../images/statistiche.png" alt="visualizza statistiche" title="visualizza statistiche" border="0"></a><p align=\"center\"><input type=\"button\" value=\"non visualizzare pił\" title=\"non visualizzare pił\" class=\"bottavv2\" id=\"b_$voce\" onclick=\"elimina(\'stats\');\"></p></td></tr></table>';
}
else {
	if (loader=="si"){ // sempre
			if (cercaCookie("sistats") == null){
			var msgst="<p align=\"center\"><input type=\"button\" value=\"visualizza sempre\" title=\"visualizzare sempre le statistiche\" class=\"bottavv2\" onclick=\"sendCookie('sistats','si','30');alert('Opzione attivata!');window.location.reload();\"></p>";
		}
		else {
			var msgst="";
		}
		document.getElementById(containerid).innerHTML='<table width="220" style="background:#FFFFFF;border:solid #000000;border-width:1px;"><tr><td align="center">caricamento statistiche in corso<br><img src="../images/caricamento.gif" alt="caricamento" title="caricamento">'+ msgst +'</td></tr></table>';
	}
	if (loader=="ni"){ // index lettere
		document.getElementById("stats2").innerHTML='<table width="240" height="142" style="background:#FFFFFF;border:solid #000000;border-width:1px;" cellpadding="3" cellspacing="2"><tr><td height="72" align="center"><img src="/Arda/images/' + img + '" alt="' + title + '" title="' + title +'" align="absmiddle"><span class="riass"><br>Vocaboli pił visitati</span>:</td></tr><tr><td valign="top" align="center" class="hits"><div id="stats" align="center">caricamento statistiche in corso<br><img src="http://www.bracegirdle.it/Arda/images/caricamento.gif" alt="caricamento" title="caricamento"></div></td></tr></table>';
	}
var page_request = false
if (window.XMLHttpRequest) // if Mozilla, Safari etc
page_request = new XMLHttpRequest()
else if (window.ActiveXObject){ // if IE
try {
page_request = new ActiveXObject("Msxml2.XMLHTTP")
} 
catch (e){
try{
page_request = new ActiveXObject("Microsoft.XMLHTTP")
}
catch (e){}
}
}
else
return false
page_request.onreadystatechange=function(){
loadpage(page_request, containerid)
}
if (bustcachevar) //if bust caching of external page
bustcacheparameter=(url.indexOf("?")!=-1)? "&"+new Date().getTime() : "?"+new Date().getTime()
page_request.open('GET', url+bustcacheparameter, true)
page_request.send(null)


}

}

function loadpage(page_request, containerid){
if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1))
document.getElementById(containerid).innerHTML=page_request.responseText;
	if(trovaog('tdriga')) {
		var val=document.getElementById("tdriga").value;
		document.getElementById("medal5").style.width = val;
		if (navigator.userAgent.indexOf("MSIE") != -1) {
			document.getElementById("medal5").style.top = "575px";
		}
	}
}

function loadobjs(){
if (!document.getElementById)
return
for (i=0; i<arguments.length; i++){
var file=arguments[i]
var fileref=""
if (loadedobjects.indexOf(file)==-1){ //Check to see if this object has not already been added to page before proceeding
if (file.indexOf(".js")!=-1){ //If object is a js file
fileref=document.createElement('script')
fileref.setAttribute("type","text/javascript");
fileref.setAttribute("src", file);
}
else if (file.indexOf(".css")!=-1){ //If object is a css file
fileref=document.createElement("link")
fileref.setAttribute("rel", "stylesheet");
fileref.setAttribute("type", "text/css");
fileref.setAttribute("href", file);
}
}
if (fileref!=""){
document.getElementsByTagName("head").item(0).appendChild(fileref)
loadedobjects+=file+" " //Remember this object as being already added to page
}
}
}

function visua() {

if((ind = navigator.appVersion.indexOf("MSIE")) > -1 && navigator.userAgent.indexOf("Opera") == -1) {
alert ('La ricerca con il browser Internet Explorer non e pienamente compatibile');
document.getElementById('ricerca').innerHTML='<form name="valcerca" onsubmit="return false; x=document.valcerca.cerca.value; highlightSearchTerms(x); document.valcerca.cerca.value=x;"> <input type="text" name="cerca"> <input type="button" name="num" value="0" onclick="q=document.valcerca.num.value; if (q == 1) { alert(\'Hai effettuato \'+q+\' ricerca\'); } else { alert(\'Hai effettuato \'+q+\' ricerche\');}">  <input type="button" value="Cerca parola" onclick="x=document.valcerca.cerca.value; nm=document.valcerca.num.value; if (nm == 5){ alert(\'Limite ricerche raggiunto. Ricaricare la pagina per effettuare nuove ricerche.\'); return false; } else { x=document.valcerca.cerca.value; nm=document.valcerca.num.value; conv(x); document.valcerca.cerca.value=x; x=x.toString().replace(/^[ \\t\\r\\n]+/,\'\').replace(/[ \\t\\r\\n]+$/,\'\'); if (x == \'\' || x == \' \' || x == \'   \'){ alert (\'Ricerca di soli spazi non consentita.\'); return false; } else { if (x.length < 3){ alert (\'La stringa deve essere almeno di 3 caratteri.\'); return false; } else { highlightSearchTerms(x); document.valcerca.cerca.value=x; document.getElementById(div).innerHTML=\'<font style=background-color:\'+colore+\'>\'+x+\'</font>\'; document.valcerca.num.value=++nm;}}};"></form><br><div id="c1"></div><div id="c2"></div><div id="c3"></div><div id="c4"></div><div id="c5">';
}
else {
document.getElementById('ricerca').innerHTML='<form name="valcerca" onsubmit="return false; x=document.valcerca.cerca.value; highlightSearchTerms(x); document.valcerca.cerca.value=x;"> <input type="text" name="cerca"> <input type="button" name="num" value="0" onclick="q=document.valcerca.num.value; if (q == 1) { alert(\'Hai effettuato \'+q+\' ricerca\'); } else { alert(\'Hai effettuato \'+q+\' ricerche\');}">  <input type="button" value="Cerca parola" onclick="x=document.valcerca.cerca.value; nm=document.valcerca.num.value; if (nm == 5){ alert(\'Limite ricerche raggiunto. Ricaricare la pagina per effettuare nuove ricerche.\'); return false; } else { x=document.valcerca.cerca.value; nm=document.valcerca.num.value; conv(x); document.valcerca.cerca.value=x; x=x.toString().replace(/^[ \\t\\r\\n]+/,\'\').replace(/[ \\t\\r\\n]+$/,\'\'); if (x == \'\' || x == \' \' || x == \'   \'){ alert (\'Ricerca di soli spazi non consentita.\'); return false; } else { if (x.length < 3){ alert (\'La stringa deve essere almeno di 3 caratteri.\'); return false; } else { highlightSearchTerms(x); document.valcerca.cerca.value=x; document.getElementById(div).innerHTML=\'<font style=background-color:\'+colore+\'>\'+x+\'</font>\'; document.valcerca.num.value=++nm;}}};"></form><br><div id="c1"></div><div id="c2"></div><div id="c3"></div><div id="c4"></div><div id="c5">';
}
}

function conv(str) {

// nm deve essere definito per il colore

if(nm == 0) {
div="c1";
colore="yellow";
}
if(nm == 1)
{
div="c2";
colore="green";
}
if(nm == 2)
{
div="c3";
colore="red";
}
if(nm == 3)
{
div="c4";
colore="purple";
}
if(nm == 4)
{
div="c5";
colore="orange";
}


var out = "", flag = 0;
for (i = 0; i < str.length; i++) {
if (str.charAt(i) != " ") {
out += str.charAt(i);
flag = 0;
}
else {
if(flag == 0) {
out += " ";
flag = 1;
      }
   }
}
x=out;
}


function doHighlight(bodyText, searchTerm, highlightStartTag, highlightEndTag) 
{
if ((!highlightStartTag) && (!highlightEndTag)) {

highlightStartTag = "<font style=\"background-color:"+colore+"\">";
highlightEndTag = "</font>";
}

var newText = "";
var i = -1;
var lcSearchTerm = searchTerm.toLowerCase();
var lcBodyText = bodyText.toLowerCase();
while (bodyText.length > 0) {
i = lcBodyText.indexOf(lcSearchTerm, i+1);
if (i < 0) {
newText += bodyText;
bodyText = "";
} else {
// skip anything inside an HTML tag
if (bodyText.lastIndexOf(">", i) >= bodyText.lastIndexOf("<", i)) {
// skip anything inside a <script> block
if (lcBodyText.lastIndexOf("/script>", i) >= lcBodyText.lastIndexOf("<script", i)) {
newText += bodyText.substring(0, i) + highlightStartTag + bodyText.substr(i, searchTerm.length) + highlightEndTag;
bodyText = bodyText.substr(i + searchTerm.length);
lcBodyText = bodyText.toLowerCase();
i = -1;
}
}
}
}
return newText;
}
/*
* This is sort of a wrapper function to the doHighlight function.
* It takes the searchText that you pass, optionally splits it into
* separate words, and transforms the text on the current web page.
* Only the "searchText" parameter is required; all other parameters
* are optional and can be omitted.
*/
function highlightSearchTerms(searchText, treatAsPhrase, warnOnFailure, highlightStartTag, highlightEndTag)
{
// if the treatAsPhrase parameter is true, then we should search for 
// the entire phrase that was entered; otherwise, we will split the
// search string so that each word is searched for and highlighted
// individually
if (treatAsPhrase) {
searchArray = [searchText];
} else {
searchArray = searchText.split(" ");
}
if (!document.body || typeof(document.body.innerHTML) == "undefined") {
if (warnOnFailure) {
alert("Sorry, for some reason the text of this page is unavailable. Searching will not work.");
}
return false;
}
var bodyText = document.body.innerHTML;
for (var i = 0; i < searchArray.length; i++) {
bodyText = doHighlight(bodyText, searchArray[i], highlightStartTag, highlightEndTag);
}
document.body.innerHTML = bodyText;
}


/** $Id: domLib.js 1880 2005-05-24 05:03:49Z dallen $ */
// {{{ docs <-- this is a VIM (text editor) text fold

/**
 * Title: DOM Library Core
 * Version: 0.65
 *
 * Summary:
 * A set of commonly used functions that make it easier to create javascript
 * applications that rely on the DOM.
 *
 * Updated: 2005/05/17
 *
 * Maintainer: Dan Allen <dan.allen@mojavelinux.com>
 * Maintainer: Jason Rust <jrust@rustyparts.com>
 *
 * License: LGPL
 */

// }}}
// {{{ global constants (DO NOT EDIT)

/**
 * Global constants (DO NOT EDIT)
 */

// -- Browser Detection --
var domLib_userAgent = navigator.userAgent.toLowerCase();
var domLib_isMac = navigator.appVersion.indexOf('Mac') != -1;
var domLib_isOpera = domLib_userAgent.indexOf('opera') != -1;
var domLib_isOpera7up = domLib_userAgent.match(/opera.(7|8)/i);
var domLib_isSafari = domLib_userAgent.indexOf('safari') != -1;
var domLib_isKonq = domLib_userAgent.indexOf('konqueror') != -1;
// Both konqueror and safari use the khtml rendering engine
var domLib_isKHTML = (domLib_isKonq || domLib_isSafari || domLib_userAgent.indexOf('khtml') != -1);
var domLib_isIE = (!domLib_isKHTML && !domLib_isOpera && (domLib_userAgent.indexOf('msie 5') != -1 || domLib_userAgent.indexOf('msie 6') != -1 || domLib_userAgent.indexOf('msie 7') != -1));
var domLib_isIE5up = domLib_isIE;
var domLib_isIE50 = (domLib_isIE && domLib_userAgent.indexOf('msie 5.0') != -1);
var domLib_isIE55 = (domLib_isIE && domLib_userAgent.indexOf('msie 5.5') != -1);
var domLib_isIE5 = (domLib_isIE50 || domLib_isIE55);
// safari and konq may use string "khtml, like gecko", so check for destinctive /
var domLib_isGecko = domLib_userAgent.indexOf('gecko/') != -1;
var domLib_isMacIE = (domLib_isIE && domLib_isMac);
var domLib_isIE55up = domLib_isIE5up && !domLib_isIE50 && !domLib_isMacIE;
var domLib_isIE6up = domLib_isIE55up && !domLib_isIE55;
var domLib_isIE7up = (domLib_isIE && domLib_userAgent.indexOf('msie 7') != -1);

// -- Browser Abilities --
var domLib_standardsMode = (document.compatMode && document.compatMode == 'CSS1Compat');
var domLib_useLibrary = (domLib_isOpera7up || domLib_isKHTML || domLib_isIE5up || domLib_isGecko || domLib_isMacIE || document.defaultView);
var domLib_hasBrokenTimeout = (domLib_isMacIE || (domLib_isKonq && domLib_userAgent.match(/konqueror\/3.([2-9])/) == null));
var domLib_canFade = (domLib_isGecko || domLib_isIE || domLib_isSafari || domLib_isOpera);
var domLib_canDrawOverSelect = (domLib_isMac || domLib_isOpera || domLib_isGecko || domLib_isIE7up);

// -- Event Variables --
var domLib_eventTarget = domLib_isIE ? 'srcElement' : 'currentTarget';
var domLib_eventButton = domLib_isIE ? 'button' : 'which';
var domLib_eventTo = domLib_isIE ? 'toElement' : 'relatedTarget';
var domLib_stylePointer = domLib_isIE ? 'hand' : 'pointer';
// NOTE: a bug exists in Opera that prevents maxWidth from being set to 'none', so we make it huge
var domLib_styleNoMaxWidth = domLib_isOpera ? '10000px' : 'none';
var domLib_hidePosition = '-1000px';
var domLib_scrollbarWidth = 14;
var domLib_autoId = 1;
var domLib_zIndex = 100;

// -- Detection --
var domLib_collisionElements;
var domLib_collisionsCached = false;

var domLib_timeoutStateId = 0;
var domLib_timeoutStates = new Hash();

// }}}
// {{{ DOM enhancements

if (!document.ELEMENT_NODE)
{
	document.ELEMENT_NODE = 1;
	document.ATTRIBUTE_NODE = 2;
	document.TEXT_NODE = 3;
	document.DOCUMENT_NODE = 9;
	document.DOCUMENT_FRAGMENT_NODE = 11;
}

Object.prototype.clone = function()
{
	var copy = {};
	for (var i in this)
	{
		var value = this[i];
		try
		{
			if (value != null && typeof(value) == 'object' && value != window && !value.nodeType)
			{
				// for IE5 which doesn't inherit prototype
				value.clone = Object.clone;
				copy[i] = value.clone();
			}
			else
			{
				copy[i] = value;
			}
		}
		catch(e)
		{
			copy[i] = value;
		}
	}

	return copy;
}

// }}}
// {{{ class Hash()

function Hash()
{
	this.length = 0;
	this.numericLength = 0; 
	this.elementData = [];
	for (var i = 0; i < arguments.length; i += 2)
	{
		if (typeof(arguments[i + 1]) != 'undefined')
		{
			this.elementData[arguments[i]] = arguments[i + 1];
			this.length++;
			if (arguments[i] == parseInt(arguments[i])) 
			{
				this.numericLength++;
			}
		}
	}
}

// using prototype as opposed to inner functions saves on memory 
Hash.prototype.get = function(in_key)
{
	return this.elementData[in_key];
}

Hash.prototype.set = function(in_key, in_value)
{
	if (typeof(in_value) != 'undefined')
	{
		if (typeof(this.elementData[in_key]) == 'undefined')
		{
			this.length++;
			if (in_key == parseInt(in_key)) 
			{
				this.numericLength++;
			}
		}
		return this.elementData[in_key] = in_value;
	}
	return false;
}

Hash.prototype.remove = function(in_key)
{
	var tmp_value;
	if (typeof(this.elementData[in_key]) != 'undefined')
	{
		this.length--;
		if (in_key == parseInt(in_key)) 
		{
			this.numericLength--;
		}
		tmp_value = this.elementData[in_key];
		delete this.elementData[in_key];
	}

	return tmp_value;
}

Hash.prototype.size = function()
{
	return this.length;
}

Hash.prototype.has = function(in_key)
{
	return typeof(this.elementData[in_key]) != 'undefined';
}

Hash.prototype.find = function(in_obj)
{
	for (var tmp_key in this.elementData) 
	{
		if (this.elementData[tmp_key] == in_obj) 
		{
			return tmp_key;
		}
	}
}

Hash.prototype.merge = function(in_hash)
{
	for (var tmp_key in in_hash.elementData) 
	{
		if (typeof(this.elementData[tmp_key]) == 'undefined') 
		{
			this.length++;
			if (tmp_key == parseInt(tmp_key)) 
			{
				this.numericLength++;
			}
		}

		this.elementData[tmp_key] = in_hash.elementData[tmp_key];
	}
}

Hash.prototype.compare = function(in_hash)
{
	if (this.length != in_hash.length) 
	{
		return false;
	}

	for (var tmp_key in this.elementData) 
	{
		if (this.elementData[tmp_key] != in_hash.elementData[tmp_key]) 
		{
			return false;
		}
	}
	return true;
}

// }}}
// {{{ domLib_isDescendantOf()

function domLib_isDescendantOf(in_object, in_ancestor)
{
	if (in_object == null)
	{
		return false;
	}

	if (in_object == in_ancestor)
	{
		return true;
	}

	while (in_object != document.documentElement)
	{
		try
		{
			if ((tmp_object = in_object.offsetParent) && tmp_object == in_ancestor)
			{
				return true;
			}
			else if ((tmp_object = in_object.parentNode) == in_ancestor)
			{
				return true;
			}
			else
			{
				in_object = tmp_object;
			}
		}
		// in case we get some wierd error, just assume we haven't gone out yet
		catch(e)
		{
			return false;
		}
	}
	return false;
}

// }}}
// {{{ domLib_detectCollisions()

/**
 * For any given target element, determine if elements on the page
 * are colliding with it that do not obey the rules of z-index.
 */
function domLib_detectCollisions(in_object, in_recover, in_useCache)
{
	// the reason for the cache is that if the root menu is built before
	// the page is done loading, then it might not find all the elements.
	// so really the only time you don't use cache is when building the
	// menu as part of the page load
	if (!domLib_collisionsCached)
	{
		var tags = [];
		tags[tags.length] = 'object';

		if (!domLib_canDrawOverSelect)
		{
			tags[tags.length] = 'select';
		}
		domLib_collisionElements = domLib_getElementsByTagNames(tags);
		domLib_collisionsCached = in_useCache;
	}

	// if we don't have a tip, then unhide selects
	if (in_recover)
	{
		for (var cnt = 0; cnt < domLib_collisionElements.length; cnt++)
		{
			var thisElement = domLib_collisionElements[cnt];

			if (!thisElement.hideList)
			{
				thisElement.hideList = new Hash();
			}

			thisElement.hideList.remove(in_object.id);
			if (!thisElement.hideList.length)
			{
				domLib_collisionElements[cnt].style.visibility = 'visible';
				if (domLib_isKonq)
				{
					domLib_collisionElements[cnt].style.display = '';
				}
			}
		}

		return;
	}
	else if (domLib_collisionElements.length == 0)
	{
		return;
	}

	// okay, we have a tip, so hunt and destroy
	var objectOffsets = domLib_getOffsets(in_object);

	for (var cnt = 0; cnt < domLib_collisionElements.length; cnt++)
	{
		var thisElement = domLib_collisionElements[cnt];

		// if collision element is in active element, move on
		// WARNING: is this too costly?
		if (domLib_isDescendantOf(thisElement, in_object))
		{
			continue;
		}

		// konqueror only has trouble with multirow selects
		if (domLib_isKonq &&
			thisElement.tagName == 'SELECT' &&
			(thisElement.size <= 1 && !thisElement.multiple))
		{
			continue;
		}

		if (!thisElement.hideList)
		{
			thisElement.hideList = new Hash();
		}

		var selectOffsets = domLib_getOffsets(thisElement); 
		var center2centerDistance = Math.sqrt(Math.pow(selectOffsets.get('leftCenter') - objectOffsets.get('leftCenter'), 2) + Math.pow(selectOffsets.get('topCenter') - objectOffsets.get('topCenter'), 2));
		var radiusSum = selectOffsets.get('radius') + objectOffsets.get('radius');
		// the encompassing circles are overlapping, get in for a closer look
		if (center2centerDistance < radiusSum)
		{
			// tip is left of select
			if ((objectOffsets.get('leftCenter') <= selectOffsets.get('leftCenter') && objectOffsets.get('right') < selectOffsets.get('left')) ||
			// tip is right of select
				(objectOffsets.get('leftCenter') > selectOffsets.get('leftCenter') && objectOffsets.get('left') > selectOffsets.get('right')) ||
			// tip is above select
				(objectOffsets.get('topCenter') <= selectOffsets.get('topCenter') && objectOffsets.get('bottom') < selectOffsets.get('top')) ||
			// tip is below select
				(objectOffsets.get('topCenter') > selectOffsets.get('topCenter') && objectOffsets.get('top') > selectOffsets.get('bottom')))
			{
				thisElement.hideList.remove(in_object.id);
				if (!thisElement.hideList.length)
				{
					thisElement.style.visibility = 'visible';
					if (domLib_isKonq)
					{
						thisElement.style.display = '';
					}
				}
			}
			else
			{
				thisElement.hideList.set(in_object.id, true);
				thisElement.style.visibility = 'hidden';
				if (domLib_isKonq)
				{
					thisElement.style.display = 'none';
				}
			}
		}
	}
}

// }}}
// {{{ domLib_getOffsets()

function domLib_getOffsets(in_object)
{
	var originalObject = in_object;
	var originalWidth = in_object.offsetWidth;
	var originalHeight = in_object.offsetHeight;
	var offsetLeft = 0;
	var offsetTop = 0;

	while (in_object)
	{
		offsetLeft += in_object.offsetLeft;
		offsetTop += in_object.offsetTop;
		in_object = in_object.offsetParent;
	}

	// MacIE misreports the offsets (even with margin: 0 in body{}), still not perfect
	if (domLib_isMacIE) {
		offsetLeft += 10;
		offsetTop += 10;
	}

	return new Hash(
		'left',		offsetLeft,
		'top',		offsetTop,
		'right',	offsetLeft + originalWidth,
		'bottom',	offsetTop + originalHeight,
		'leftCenter',	offsetLeft + originalWidth/2,
		'topCenter',	offsetTop + originalHeight/2,
		'radius',	Math.max(originalWidth, originalHeight) 
	);
}

// }}}
// {{{ domLib_setTimeout()

function domLib_setTimeout(in_function, in_timeout, in_args)
{
	if (typeof(in_args) == 'undefined')
	{
		in_args = [];
	}

	if (in_timeout == -1)
	{
		// timeout event is disabled
		return 0;
	}
	else if (in_timeout == 0)
	{
		in_function(in_args);
		return 0;
	}

	// must make a copy of the arguments so that we release the reference
	if (typeof(in_args.clone) != 'function')
	{
		in_args.clone = Object.clone;
	}

	var args = in_args.clone();

	if (!domLib_hasBrokenTimeout)
	{
		return setTimeout(function() { in_function(args); }, in_timeout);
	}
	else
	{
		var id = domLib_timeoutStateId++;
		var data = new Hash();
		data.set('function', in_function);
		data.set('args', args);
		domLib_timeoutStates.set(id, data);

		data.set('timeoutId', setTimeout('domLib_timeoutStates.get(' + id + ').get(\'function\')(domLib_timeoutStates.get(' + id + ').get(\'args\')); domLib_timeoutStates.remove(' + id + ');', in_timeout));
		return id;
	}
}

// }}}
// {{{ domLib_clearTimeout()

function domLib_clearTimeout(in_id)
{
	if (!domLib_hasBrokenTimeout)
	{
		if (in_id > 0) {
			clearTimeout(in_id);
		}
	}
	else
	{
		if (domLib_timeoutStates.has(in_id))
		{
			clearTimeout(domLib_timeoutStates.get(in_id).get('timeoutId'))
			domLib_timeoutStates.remove(in_id);
		}
	}
}

// }}}
// {{{ domLib_getEventPosition()

function domLib_getEventPosition(in_eventObj)
{
	var eventPosition = new Hash('x', 0, 'y', 0, 'scrollX', 0, 'scrollY', 0);

	// IE varies depending on standard compliance mode
	if (domLib_isIE)
	{
		var doc = (domLib_standardsMode ? document.documentElement : document.body);
		// NOTE: events may fire before the body has been loaded
		if (doc)
		{
			eventPosition.set('x', in_eventObj.clientX + doc.scrollLeft);
			eventPosition.set('y', in_eventObj.clientY + doc.scrollTop);
			eventPosition.set('scrollX', doc.scrollLeft);
			eventPosition.set('scrollY', doc.scrollTop);
		}
	}
	else
	{
		eventPosition.set('x', in_eventObj.pageX);
		eventPosition.set('y', in_eventObj.pageY);
		eventPosition.set('scrollX', in_eventObj.pageX - in_eventObj.clientX);
		eventPosition.set('scrollY', in_eventObj.pageY - in_eventObj.clientY);
	}

	return eventPosition;
}

// }}}
// {{{ domLib_cancelBubble()

function domLib_cancelBubble(in_event)
{
	var eventObj = in_event ? in_event : window.event;
	eventObj.cancelBubble = true;
}

// }}}
// {{{ domLib_getIFrameReference()

function domLib_getIFrameReference(in_frame)
{
	if (domLib_isGecko || domLib_isIE)
	{
		return in_frame.frameElement;
	}
	else
	{
		// we could either do it this way or require an id on the frame
		// equivalent to the name
		var name = in_frame.name;
		if (!name || !in_frame.parent)
		{
			return null;
		}

		var candidates = in_frame.parent.document.getElementsByTagName('iframe');
		for (var i = 0; i < candidates.length; i++)
		{
			if (candidates[i].name == name)
			{
				return candidates[i];
			}
		}

		return null;
	}
}

// }}}
// {{{ domLib_getElementsByClass()

function domLib_getElementsByClass(in_class)
{
	var elements = domLib_isIE5 ? document.all : document.getElementsByTagName('*');	
	var matches = [];	
	var cnt = 0;
	for (var i = 0; i < elements.length; i++)
	{
		if ((" " + elements[i].className + " ").indexOf(" " + in_class + " ") != -1)
		{
			matches[cnt++] = elements[i];
		}
	}

	return matches;
}

// }}}
// {{{

function domLib_getElementsByTagNames(in_list)
{
	var elements = [];
	for (var i = 0; i < in_list.length; i++)
	{
		var matches = document.getElementsByTagName(in_list[i]);
		for (var j = 0; j < matches.length; j++)
		{
			elements[elements.length] = matches[j];	
		}
	}

	return elements;
}

// }}}
// {{{ makeTrue()

function makeTrue()
{
	return true;
}

// }}}
// {{{ makeFalse()

function makeFalse()
{
	return false;
}


// {{{ settings (editable)
var domMenu_data = new Hash();
var domMenu_settings = new Hash();
domMenu_settings.set('global', new Hash(
'menuBarClass', 'domMenu_menuBar',
'menuElementClass', 'domMenu_menuElement',
'menuElementHoverClass', 'domMenu_menuElementHover',
'menuElementActiveClass', 'domMenu_menuElementHover',
'subMenuBarClass', 'domMenu_subMenuBar',
'subMenuElementClass', 'domMenu_subMenuElement',
'subMenuElementHoverClass', 'domMenu_subMenuElementHover',
'subMenuElementActiveClass', 'domMenu_subMenuElementHover',
'subMenuElementHeadingClass', 'domMenu_subMenuElementHeading',
'menuBarWidth', '100%',
'subMenuMinWidth', 'inherit',
'distributeSpace', true,
'axis', 'horizontal',
'verticalExpand', 'south',
'horizontalExpand', 'east',
'expandMenuArrowUrl', '/images/arrow.gif',
'subMenuWidthCorrection', 0,
'verticalSubMenuOffsetY', 0,
'verticalSubMenuOffsetX', 0,
'horizontalSubMenuOffsetX', 0,
'horizontalSubMenuOffsetY', 0,
'screenPadding', 0,
'openMouseoverMenuDelay', 300,
'openMousedownMenuDelay', -1,
'closeMouseoutMenuDelay', 800,
'closeClickMenuDelay', -1,
'openMouseoverSubMenuDelay', 300,
'openClickSubMenuDelay', -1,
'closeMouseoutSubMenuDelay', 300,
'closeClickSubMenuDelay', -1,
'baseZIndex', 100,
'baseUri', ''
));
// }}}
// {{{ global variables
/**
* The data for the menu is stored here, loaded from an external file
* @hash domMenu_data
*/
var domMenu_data;
var domMenu_selectElements;
var domMenu_scrollbarWidth = 14;
var domMenu_eventTo = domLib_isIE ? 'toElement' : 'relatedTarget';
var domMenu_eventFrom = domLib_isIE ? 'fromElement' : 'relatedTarget';
var domMenu_activeElement = new Hash();
/**
* Array of hashes listing the timouts currently running for opening/closing menus
* @array domMenu_timeouts
*/
var domMenu_timeouts = new Array();
domMenu_timeouts['open'] = new Hash();
domMenu_timeouts['close'] = new Hash();
/**
* Style to use for a link pointer, which is different between Gecko and IE
* @var domMenu_pointerStyle
*/
var domMenu_pointerStyle = domLib_isIE ? 'hand' : 'pointer';
// }}}
// {{{ domMenu_activate()
function domMenu_activate(in_containerId, in_disableWarning)
{
var container;
var data;
// make sure we can use the menu system
if (!domLib_useLibrary)
{
if (!in_disableWarning)
{
alert('domMenu: Browser not supported.  Menu will be disabled.');
}
return;
}
// make sure that this is a valid menu, 
// and that the menu actually has data
if (!(container = document.getElementById(in_containerId)) || 
!(data = domMenu_data.get(in_containerId)) ||
data.numericLength == 0) {
if (!in_disableWarning) {
alert('domMenu: Menu failed to load.');
}
return;
}
if (window.attachEvent) {
window.attachEvent('onunload', domMenu_fixCircleRefs);
}
// start with the global settings and merge in the local changes
if (!domMenu_settings.has(in_containerId)) {
domMenu_settings.set(in_containerId, new Hash());
}
var settings = domMenu_settings.get(in_containerId);
for (var i in domMenu_settings.get('global').elementData) {
if (!settings.has(i)) {
settings.set(i, domMenu_settings.get('global').get(i));
}
}
// populate the zero level element
container.data = new Hash(
'parentElement', false,
'numChildren', data.numericLength,
'childElements', new Hash(),
'level', 0,
'index', 1
);
// if we choose to distribute either height or width, determine ratio of each cell
var distributeRatio = Math.round(100/container.data.get('numChildren')) + '%';
// the first menu is the rootMenu, which is a child of the zero level element
var rootMenu = document.createElement('div');
rootMenu.id = in_containerId + '-0';
rootMenu.className = settings.get('menuBarClass');
container.data.set('subMenu', rootMenu);
var rootMenuTable = rootMenu.appendChild(document.createElement('table'));
if (domLib_isKonq || domLib_isMacIE) {
rootMenuTable.cellSpacing = 0;
}
rootMenuTable.style.border = 0;
rootMenuTable.style.borderCollapse = 'collapse';
rootMenuTable.style.width = settings.get('menuBarWidth');
var rootMenuTableBody = rootMenuTable.appendChild(document.createElement('tbody'));
var numSiblings = container.data.get('numChildren');
for (var index = 1; index <= numSiblings; index++) {
// create a row the first time if horizontal or each time if vertical
if (index == 1 || settings.get('axis') == 'vertical') {
var rootMenuTableRow = rootMenuTableBody.appendChild(document.createElement('tr'));
}
// create an instance of the root level menu element
var rootMenuTableCell = rootMenuTableRow.appendChild(document.createElement('td'));
rootMenuTableCell.style.padding = 0;
rootMenuTableCell.id = in_containerId + '-' + index;
// add element to list of parent children
container.data.get('childElements').set(rootMenuTableCell.id, rootMenuTableCell);
// assign the settings to the root level element
// NOTE: this is a problem if two menus are using the same data
rootMenuTableCell.data = data.get(index);
rootMenuTableCell.data.merge(new Hash(
'basename', in_containerId,
'parentElement', container,
'numChildren', rootMenuTableCell.data.numericLength,
'childElements', new Hash(),
'offsets', new Hash(),
'level', container.data.get('level') + 1,
'index', index
));
// assign the styles
rootMenuTableCell.style.cursor = 'default';
if (settings.get('axis') == 'horizontal') {
if (settings.get('distributeSpace')) {
rootMenuTableCell.style.width = distributeRatio;
}
}
// Needed for when the text wraps
rootMenuTableCell.style.verticalAlign = 'top';
var rootElement = rootMenuTableCell.appendChild(document.createElement('div'));
rootElement.className = settings.get('menuElementClass');
// fill in the menu element contents
var spanElement = rootElement.appendChild(document.createElement('span'));
// can't use createTextNode() because there might be img tags in the contents
spanElement.innerHTML = rootMenuTableCell.data.get('contents').replace(/\/\/\//, settings.get('baseUri'));
// add hover contents if needed
if (rootMenuTableCell.data.has('contentsHover')) {
spanElement = rootElement.appendChild(document.createElement('span'));
spanElement.style.display = 'none';
spanElement.innerHTML = rootMenuTableCell.data.get('contentsHover').replace(/\/\/\//, settings.get('baseUri'));
}
// MacIE has to have a newline at the end or else it barfs
// additionally, it MUST be added using createTextNode() or IE will crash!
if (domLib_isMacIE) {
rootMenuTableCell.appendChild(document.createTextNode("\n"));
}
// attach the events
rootMenuTableCell.onmouseover = domMenu_runMouseoverOpenEvent;
rootMenuTableCell.onmouseout = domMenu_runCloseEvent;
if (settings.get('openMousedownMenuDelay') >= 0 && rootMenuTableCell.data.get('numChildren')) {
rootMenuTableCell.onmousedown = domMenu_runMousedownOpenEvent;
// cancel mouseup so that it doesn't propogate to global mouseup event
rootMenuTableCell.onmouseup = domLib_cancelBubble;
if (domLib_isIE) {
rootMenuTableCell.ondblclick = domMenu_runMousedownOpenEvent;
}
}
else if (rootMenuTableCell.data.get('uri')) {
rootMenuTableCell.style.cursor = domMenu_pointerStyle;
rootMenuTableCell.onclick = domMenu_runResolveLink;
}
// prevent highlighting of text
if (domLib_isIE) {
rootMenuTableCell.onselectstart = makeFalse; 
}
rootMenuTableCell.oncontextmenu = makeFalse; 
}
// add the menu rootMenu to the zero level element
rootMenu = container.appendChild(rootMenu);
// even though most cases the top level menu does not go away, it could
// if this menu system is used by another process
domLib_detectCollisions(rootMenu, false, false);
}
// }}}
// {{{ domMenu_activateSubMenu()
function domMenu_activateSubMenu(in_parentElement)
{
// NOTE: submenus not supported in MacIE because of problems using
// appendChild on document.body
if (domLib_isMacIE) {
return;
}
// see if submenu already exists
if (in_parentElement.data.has('subMenu')) {
domMenu_toggleSubMenu(in_parentElement, 'visible');
return;
}
var settings = domMenu_settings.get(in_parentElement.data.get('basename'));
// build the submenu
var menu = document.createElement('div');
menu.id = in_parentElement.id + '-0';
menu.className = settings.get('subMenuBarClass');
menu.style.zIndex = settings.get('baseZIndex');
menu.style.position = 'absolute';
// position the menu in the upper left corner hidden so that we can work on it
menu.style.visibility = 'hidden';
menu.style.top = 0;
menu.style.left = 0;
in_parentElement.data.set('subMenu', menu);
var menuTable = menu.appendChild(document.createElement('table'));
// ** opera wants to make absolute tables width 100% **
if (domLib_isOpera) {
menuTable.style.width = '1px';
menuTable.style.whiteSpace = 'nowrap';
}
if (domLib_isKonq || domLib_isMacIE) {
menuTable.cellSpacing = 0;
}
menuTable.style.border = 0;
menuTable.style.borderCollapse = 'collapse';
var menuTableBody = menuTable.appendChild(document.createElement('tbody'));
var numSiblings = in_parentElement.data.get('numChildren');
for (var index = 1; index <= numSiblings; index++) {
var dataIndex = in_parentElement.data.get('level') == 1 && settings.get('verticalExpand') == 'north' && settings.get('axis') == 'horizontal' ? numSiblings + 1 - index : index;
var menuTableCell = menuTableBody.appendChild(document.createElement('tr')).appendChild(document.createElement('td'));
menuTableCell.style.padding = 0;
menuTableCell.id = in_parentElement.id + '-' + dataIndex;
// add element to list of parent children
in_parentElement.data.get('childElements').set(menuTableCell.id, menuTableCell);
// assign the settings to nth level element
menuTableCell.data = in_parentElement.data.get(dataIndex);
menuTableCell.data.merge(new Hash(
'basename', in_parentElement.data.get('basename'),
'parentElement', in_parentElement,
'numChildren', menuTableCell.data.numericLength,
'childElements', new Hash(),
'offsets', new Hash(),
'level', in_parentElement.data.get('level') + 1,
'index', index
));
// assign the styles
menuTableCell.style.cursor = 'default';
var element = menuTableCell.appendChild(document.createElement('div')); 
var outerElement = element;
outerElement.className = settings.get('subMenuElementClass'); 
if (menuTableCell.data.get('numChildren')) {
element = outerElement.appendChild(document.createElement('div'));
// FIXME: this should depend on which way we are opening the menu!
element.style.backgroundImage = 'url(' + settings.get('expandMenuArrowUrl') + ')';
element.style.backgroundRepeat = 'no-repeat';
element.style.backgroundPosition = 'right center';
// add appropriate padding to fit the arrow
element.style.paddingRight = '12px';
}
// fill in the menu item contents
if (domLib_isMacIE) {
// we don't support images in sub-menu elements in MacIE because in order for
// the menu to work consistently the data has to be added with createTextNode()
element.appendChild(document.createTextNode(menuTableCell.data.get('contents')));
// MacIE has to have a newline and it has to be added with createTextNode!
menuTableCell.appendChild(document.createTextNode("\n"));
}
else {
element.innerHTML = menuTableCell.data.get('contents');
}
// attach the events
menuTableCell.onmouseover = domMenu_runMouseoverSubOpenEvent;
menuTableCell.onmouseout = domMenu_runCloseEvent;
if (settings.get('openClickSubMenuDelay') >= 0 && menuTableCell.data.get('numChildren')) {
menuTableCell.onmousedown = domMenu_runClickSubOpenEvent;
menuTableCell.onmouseup = domLib_cancelBubble;
if (domLib_isIE) {
menuTableCell.ondblclick = domMenu_runClickSubOpenEvent;
}
}
else if (menuTableCell.data.get('uri')) {
menuTableCell.style.cursor = domMenu_pointerStyle;
menuTableCell.onclick = domMenu_runResolveLink;
}
else if (!menuTableCell.data.get('numChildren')) {
outerElement.className += ' ' + settings.get('subMenuElementHeadingClass');
}
// prevent highlighting of text
if (domLib_isIE) {
menuTableCell.onselectstart = makeFalse;
}
menuTableCell.oncontextmenu = makeFalse;
}
menu = document.body.appendChild(menu);
domMenu_toggleSubMenu(in_parentElement, 'visible');
}
// }}}
// {{{ domMenu_changeActivePath()
/**
* Close the old active path up to the new active element
* and return the value of the new active element (or the same if unchanged)
* NOTE: If the new active element is not set (false), the top level is assumed
*
* @return mixed new active element or false if not set
*/
function domMenu_changeActivePath(in_newActiveElement, in_oldActiveElement, in_closeDelay)
{
// protect against crap
if (!in_oldActiveElement && !in_newActiveElement) {
return false;
}
// cancel open timeouts since we know we are opening something different now
for (var i in domMenu_timeouts['open'].elementData) {
domLib_clearTimeout(domMenu_timeouts['open'].get(i));
}
// grab some info about this menu system...will this ever be null?
var basename = in_oldActiveElement ? in_oldActiveElement.data.get('basename') : in_newActiveElement.data.get('basename');
var settings = domMenu_settings.get(basename);
// build the old active path and unhighlight previously selected element, if appropriate
var oldActivePath = new Hash();
if (in_oldActiveElement) {
var tmp_newActiveLevel = in_newActiveElement ? in_newActiveElement.data.get('level') : -1;
var tmp_oldActivePathElement = in_oldActiveElement;
do {
// NOTE: using set() causes IE to lag and leaves behind highlighted artifacts!
oldActivePath.elementData[tmp_oldActivePathElement.id] = tmp_oldActivePathElement; 
// unhighlight if sibling of new element, even if it has open submenus
if (tmp_newActiveLevel >= 0 && tmp_oldActivePathElement.data.get('level') == tmp_newActiveLevel) {
domMenu_toggleHighlight(tmp_oldActivePathElement, false);
}
} while ((tmp_oldActivePathElement = tmp_oldActivePathElement.data.get('parentElement')) && tmp_oldActivePathElement.id != basename);
// unhighlight element immediately if no submenu (or submenu is closed)
if (!in_oldActiveElement.data.get('subMenu') || in_oldActiveElement.data.get('subMenu').style.visibility == 'hidden') {
domMenu_toggleHighlight(in_oldActiveElement, false);
}
}
// build the new path and...(explain me!)
var newActivePath = new Hash();
var intersectPoint;
if (in_newActiveElement) {
var actualActiveElement = in_newActiveElement;
window.status = in_newActiveElement.data.get('statusText') + ' ';
// in the event we have no old active element, just highlight new one and return
// without setting the new active element (handled later)
if (!in_oldActiveElement) {
domLib_clearTimeout(domMenu_timeouts['close'].get(in_newActiveElement.id));
domMenu_toggleHighlight(in_newActiveElement, true);
return false;
}
// if the new element is in the path of the old element, then pretend event is
// on the old active element
else if (oldActivePath.has(in_newActiveElement.id)) {
in_newActiveElement = in_oldActiveElement;
}
var tmp_newActivePathElement = in_newActiveElement;
do {
// if we have met up with the old active path, then record merge point
if (!intersectPoint && oldActivePath.has(tmp_newActivePathElement.id)) {
intersectPoint = tmp_newActivePathElement;
}
newActivePath.set(tmp_newActivePathElement.id, tmp_newActivePathElement); 
domLib_clearTimeout(domMenu_timeouts['close'].get(tmp_newActivePathElement.id));
// FIXME: this is ugly!
if (tmp_newActivePathElement != in_oldActiveElement || actualActiveElement == in_oldActiveElement) {
domMenu_toggleHighlight(tmp_newActivePathElement, true);
}
} while ((tmp_newActivePathElement = tmp_newActivePathElement.data.get('parentElement')) && tmp_newActivePathElement.id != basename);
// if we move to the child of the old active element
if (in_newActiveElement.data.get('parentElement') == in_oldActiveElement) {
return in_newActiveElement;
}
// if the new active element is in the old active path
else if (in_newActiveElement == in_oldActiveElement) {
return in_newActiveElement;
}
// find the sibling element
var intersectSibling;
if (intersectPoint && oldActivePath.length > 0) {
for (var i in oldActivePath.elementData) {
if (oldActivePath.get(i).data.get('parentElement') == intersectPoint) {
intersectSibling = oldActivePath.get(i);
break;
}
}
}
var isRootLevel = in_newActiveElement.data.get('level') == 1 ? true : false;
var closeDelay = isRootLevel ? settings.get('closeMouseoutMenuDelay') : settings.get('closeMouseoutSubMenuDelay');
}
else {
var isRootLevel = false;
var closeDelay = settings.get('closeMouseoutMenuDelay');
window.status = window.defaultStatus;
}
// override the close delay with that passed in
if (typeof(in_closeDelay) != 'undefined') {
closeDelay = in_closeDelay;
}
// if there is an intersect sibling, then we need to work from there up to 
// preserve the active path
if (intersectSibling) {
// only if this is not the root level to we allow the scheduled close
// events to persist...otherwise we close immediately
if (!isRootLevel) {
// toggle the sibling highlight (only one sibling highlighted at a time)
domMenu_toggleHighlight(intersectSibling, false);
}
// we are moving to another top level menu
// FIXME: clean this up
else {
// add lingering menus outside of old active path to active path
for (var i in domMenu_timeouts['close'].elementData) {
if (!oldActivePath.has(i)) {
var tmp_element = document.getElementById(i);
if (tmp_element.data.get('basename') == basename) {
oldActivePath.set(i, tmp_element);
}
}
}
}
}
// schedule the old active path to be closed
for (var i in oldActivePath.elementData) {
if (newActivePath.has(i)) {
continue;
}
// make sure we don't double schedule here
domLib_clearTimeout(domMenu_timeouts['close'].get(i));
if (isRootLevel) {
domMenu_toggleHighlight(oldActivePath.get(i), false); 
domMenu_toggleSubMenu(oldActivePath.get(i), 'hidden');
}
else {
domMenu_timeouts['close'].set(i, domLib_setTimeout(domMenu_runCloseMenu, closeDelay, [oldActivePath.get(i), basename]));
}
}
return in_newActiveElement;
}
// }}}
// {{{ domMenu_deactivate()
function domMenu_deactivate(in_basename, in_delay)
{
if (!in_delay) {
in_delay = 0;
}
domMenu_changeActivePath(false, domMenu_activeElement.get(in_basename), in_delay);
}
// }}}
// {{{ domMenu_openEvent()
/**
* Handle the mouse event to open a menu
*
* When an event is received to open the menu, this function is
* called, handles reinitialization of the menu state and sets
* a timeout interval for opening the submenu (if one exists)
*/
function domMenu_openEvent(in_this, in_event, in_delayType)
{
if (domLib_isGecko) {
window.getSelection().removeAllRanges();
}
// setup the cross-browser event object and target
var eventObj = domLib_isIE ? event : in_event;
var currentTarget = domLib_isIE ? in_this : eventObj.currentTarget;
var basename = currentTarget.data.get('basename');
var settings = domMenu_settings.get(basename);
// if we are moving amoungst DOM children of the same element, just ignore event
if (eventObj.type != 'mousedown' && domMenu_getElement(eventObj[domMenu_eventFrom], basename) == currentTarget) {
return;
}
// if we click on an open menu, close it
if (eventObj.type == 'mousedown' && domMenu_activeElement.get(basename)) {
domMenu_changeActivePath(false, domMenu_activeElement.get(basename), currentTarget.data.get('level') == 1 ? settings.get('closeClickMenuDelay') : settings.get('closeClickSubMenuDelay'));
return;
}
// if this element has children, popup the child menu
if (currentTarget.data.get('numChildren')) {
// the top level menus have no delay when moving between them
// so activate submenu immediately
if (currentTarget.data.get('level') == 1 && domMenu_activeElement.get(basename)) {
// ** I place changeActivePath() call here so the hiding of selects does not flicker **
// THOUGHT: instead I could tell changeActivePath to clear select ownership but not
// toggle visibility....hmmm....
domMenu_activateSubMenu(currentTarget);
// clear the active path and initialize the new one
domMenu_activeElement.set(basename, domMenu_changeActivePath(currentTarget, domMenu_activeElement.get(basename)));
}
else {
// clear the active path and initialize the new one
domMenu_activeElement.set(basename, domMenu_changeActivePath(currentTarget, domMenu_activeElement.get(basename)));
domMenu_timeouts['open'].set(currentTarget.id, domLib_setTimeout(domMenu_runOpenMenu, settings.get(in_delayType), [currentTarget, basename]));
}
}
else {
// clear the active path and initialize the new one
domMenu_activeElement.set(basename, domMenu_changeActivePath(currentTarget, domMenu_activeElement.get(basename)));
}
}
// }}}
// {{{ domMenu_closeEvent()
/**
* Handle the mouse event to close a menu
*
* When an mouseout event is received to close the menu, this function is
* called, sets a timeout interval for closing the menu.
*/
function domMenu_closeEvent(in_this, in_event)
{
// setup the cross-browser event object and target
var eventObj = domLib_isIE ? event : in_event;
var currentTarget = domLib_isIE ? in_this : eventObj.currentTarget;
var basename = currentTarget.data.get('basename');
var relatedTarget = domMenu_getElement(eventObj[domMenu_eventTo], basename);
// if the related target is not a menu element then we left the menu system
// at this point (or cannot discern where we are in the menu)
if (domMenu_activeElement.get(basename)) {
if (!relatedTarget) {
domMenu_changeActivePath(false, domMenu_activeElement.get(basename));
}
}
// we are highlighting the top level, but menu is not yet 'active'
else {
if (currentTarget != relatedTarget) {
domLib_clearTimeout(domMenu_timeouts['open'].get(currentTarget.id));
domMenu_toggleHighlight(currentTarget, false);
}
}
}    
// }}}
// {{{ domMenu_getElement()
function domMenu_getElement(in_object, in_basename)
{
while (in_object) {
try {
if (in_object.id && in_object.id.search(new RegExp('^' + in_basename + '(\\[[0-9]\\])*\\[[1-9]\\]$')) == 0) {
return in_object;
}
else {
in_object = in_object.parentNode;
}
}
catch(e) {
return false;
}
}
return false;
}
// }}}
// {{{ domMenu_correctEdgeBleed()
function domMenu_correctEdgeBleed(in_width, in_height, in_x, in_y, in_padding, in_axis)
{
if (domLib_isIE && !domLib_isIE5 && !domLib_isMacIE) {
var pageHeight = document.documentElement.clientHeight;
}
else if (!domLib_isKonq) {
var pageHeight = document.body.clientHeight;
}
else {
var pageHeight = window.innerHeight;
}
var pageYOffset = domLib_isIE ? document.body.scrollTop : window.pageYOffset;
var pageXOffset = domLib_isIE ? document.body.scrollLeft : window.pageXOffset;
if (in_axis == 'horizontal') {
var bleedRight = (in_x - pageXOffset) + in_width - (document.body.clientWidth - in_padding);
var bleedLeft = (in_x - pageXOffset) - in_padding;
// we are bleeding off the right, move menu to stay on page
if (bleedRight > 0) {
in_x -= bleedRight;
}
// we are bleeding to the left, move menu over to stay on page
// we don't want an 'else if' here, because if it doesn't fit we will bleed off the right
if (bleedLeft < 0) {
in_x += bleedLeft;
}
}
else {
var bleedTop = (in_y - pageYOffset) - in_padding;
var bleedBottom = (in_y - pageYOffset) + in_height - (pageHeight - in_padding);
// if we are bleeding off the bottom, move menu to stay on page
if (bleedBottom > 0) {
in_y -= bleedBottom;
}
// if we are bleeding off the top, move menu down
// we don't want an 'else if' here, because if we just can't fit it, bleed off the bottom
if (bleedTop < 0) {
in_y += bleedTop;
}
}
return new Array(in_x, in_y);
}
// }}}
// {{{ domMenu_toggleSubMenu()
function domMenu_toggleSubMenu(in_parentElement, in_style)
{
var subMenu = in_parentElement.data.get('subMenu');
if (subMenu && subMenu.style.visibility != in_style) {
var settings = domMenu_settings.get(in_parentElement.data.get('basename'));
var prefix = in_parentElement.data.get('level') == 1 ? 'menu' : 'subMenu';
var className = settings.get(prefix + 'ElementClass');
// :BUG: this is a problem if submenus click to open, then it won't
// have the right class when you click to close
if (in_style == 'visible') {
className += ' ' + settings.get(prefix + 'Element' + (in_style == 'visible' ? 'Active' : 'Hover') + 'Class');
}
in_parentElement.firstChild.className = className;
// position our submenu
if (in_style == 'visible') {
var tmp_offsets = domLib_getOffsets(in_parentElement);
if (in_parentElement.data.get('level') == 1) {
tmp_offsets.set('top', tmp_offsets.get('top') + settings.get('verticalSubMenuOffsetY'));
tmp_offsets.set('bottom', tmp_offsets.get('bottom') + settings.get('verticalSubMenuOffsetY'));
tmp_offsets.set('left', tmp_offsets.get('left') + settings.get('verticalSubMenuOffsetX'));
tmp_offsets.set('right', tmp_offsets.get('right') + settings.get('verticalSubMenuOffsetX'));
}
// reposition if there was a change in the parent position/size
if (!in_parentElement.data.get('offsets').compare(tmp_offsets)) {
in_parentElement.data.set('offsets', tmp_offsets);
if (settings.get('axis') == 'horizontal' && in_parentElement.data.get('level') == 1) {
var xCoor = tmp_offsets.get('left');
if (settings.get('verticalExpand') == 'north') {
var yCoor = tmp_offsets.get('top') - subMenu.offsetHeight - settings.get('verticalSubMenuOffsetY');
}
else {
var yCoor = tmp_offsets.get('bottom');
}
}
else {
var xCoor = tmp_offsets.get('right') + settings.get('horizontalSubMenuOffsetX');
var yCoor = tmp_offsets.get('top') + settings.get('horizontalSubMenuOffsetY');
if (domLib_isOpera || domLib_isSafari) {
var marginLeft = parseInt(document.defaultView.getComputedStyle(document.body, '').getPropertyValue('margin-left'));
var marginTop = parseInt(document.defaultView.getComputedStyle(document.body, '').getPropertyValue('margin-top'));
xCoor -= marginLeft;
yCoor -= marginTop;
}
}
var minWidth = settings.get('subMenuMinWidth');
var renderedWidth = subMenu.offsetWidth;
if (minWidth == 'inherit') {
minWidth = in_parentElement.offsetWidth + settings.get('subMenuWidthCorrection');
}
else if (minWidth == 'auto') {
minWidth = renderedWidth;
}
if (domLib_isKonq) {
// change with width of the first cell
subMenu.firstChild.firstChild.firstChild.firstChild.style.width = Math.max(minWidth, renderedWidth) + 'px';
}
else {
// change the width of the table
subMenu.firstChild.style.width = Math.max(minWidth, renderedWidth) + 'px';
}
var coordinates = domMenu_correctEdgeBleed(subMenu.offsetWidth, subMenu.offsetHeight, xCoor, yCoor, settings.get('screenPadding'), settings.get('axis'));
subMenu.style.left = coordinates[0] + 'px';
subMenu.style.top = coordinates[1] + 'px';
// ** if we inherit, it is necessary to check the parent element width again **
if (settings.get('axis') == 'horizontal' && settings.get('subMenuMinWidth') == 'inherit') {
subMenu.firstChild.style.width = Math.max(in_parentElement.offsetWidth + settings.get('subMenuWidthCorrection'), renderedWidth) + 'px';
}
}
}
// force konqueror to change the styles
if (domLib_isKonq) {
in_parentElement.firstChild.style.display = 'none';
in_parentElement.firstChild.style.display = '';
}
subMenu.style.visibility = in_style;
domLib_detectCollisions(subMenu, (in_style == 'hidden'), true);
}
}
// }}}
// {{{ domMenu_toggleHighlight()
function domMenu_toggleHighlight(in_element, in_status)
{
// if this is a heading, don't change the style
if (!in_element.data.get('numChildren') && !in_element.data.get('uri')) {
return;
}
var settings = domMenu_settings.get(in_element.data.get('basename'));
var prefix = in_element.data.get('level') == 1 ? 'menu' : 'subMenu';
var className = settings.get(prefix + 'ElementClass');
var highlightElement = in_element.firstChild;
var pseudoClass;
if (in_status) {
if (in_element.data.has('subMenu') && in_element.data.get('subMenu').style.visibility == 'visible') {
pseudoClass = 'Active';
}
else if (in_element.data.get('numChildren') || in_element.data.get('uri')) {
pseudoClass = 'Hover';
}
}
if (pseudoClass) {
className += ' ' + settings.get(prefix + 'Element' + pseudoClass + 'Class');
// if we are changing to hover, change the alt contents (only change if needs it)
if (highlightElement.childNodes.length == 2) {
//alert(highlightElement.lastChild);
}
if (highlightElement.childNodes.length == 2 && highlightElement.lastChild.style.display == 'none') {
highlightElement.firstChild.style.display = 'none';
highlightElement.lastChild.style.display = '';
}
}
else {
// if we are changing to non-hover, change the alt contents (only change if needs it)
if (highlightElement.childNodes.length == 2 && highlightElement.firstChild.style.display == 'none') {
highlightElement.lastChild.style.display = 'none';
highlightElement.firstChild.style.display = '';
}
}
highlightElement.className = className;
// force konqueror to change the styles
if (domLib_isKonq) {
highlightElement.style.display = 'none';
highlightElement.style.display = '';
}
}
// }}}
// {{{ domMenu_resolveLink()
function domMenu_resolveLink(in_this, in_event)
{
var eventObj = domLib_isIE ? event : in_event;
var currentTarget = domLib_isIE ? in_this : eventObj.currentTarget;
var basename = currentTarget.data.get('basename');
// close the menu system immediately when we resolve the uri
domMenu_changeActivePath(false, domMenu_activeElement.get(basename), 0);
var uri = currentTarget.data.get('uri');
if (uri) {
window.status = 'Resolving Link...';
uri = uri.replace(/\/\/\//, domMenu_settings.get(basename).get('baseUri'));
if (uri.indexOf('javascript: ') == 0) {
eval(uri.substring(12));
}
// open in current window
else if (!currentTarget.data.get('target') || currentTarget.data.get('target') == '_self') {
window.location = uri;
}
// open in new window
else {
window.open(uri, currentTarget.data.get('target'));
}
}
}
// }}}
// {{{ domMenu_fixCircleRefs()
// We try and get rid of all circular references by using the domMenu_runXXX()
// methods, but some are still left, so we run this function for IE
// @see http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&oe=UTF-8&selm=bcslfd%24ahl%241%248300dec7%40news.demon.co.uk
function domMenu_fixCircleRefs()
{
var clearElementProps = ['data', 'onmouseover', 'onmouseout', 'onmousedown', 
'onmouseup', 'ondblclick', 'onclick', 'onselectstart', 'oncontextmenu'];
var el;
for (var d = document.all.length; d--;) {
el = document.all[d];
for (var c = clearElementProps.length; c--;) {
el[clearElementProps[c]] = null;
}
}
}
// }}}
// {{{ domMenu_runXXX()
// All of these domMenu_runXXX() methods are used by the event handling sections to
// avoid the circular memory leaks caused by inner functions
function domMenu_runMouseoverOpenEvent(in_event) { domMenu_openEvent(this, in_event, 'openMouseoverMenuDelay'); }
function domMenu_runMousedownOpenEvent(in_event) { domMenu_openEvent(this, in_event, 'openMousedownMenuDelay'); }
function domMenu_runMouseoverSubOpenEvent(in_event) { domMenu_openEvent(this, in_event, 'openMouseoverSubMenuDelay'); }
function domMenu_runClickSubOpenEvent(in_event) { domMenu_openEvent(this, in_event, 'openClickSubMenuDelay'); }
function domMenu_runCloseEvent(in_event) { domMenu_closeEvent(this, in_event); }
function domMenu_runResolveLink(in_event) { domMenu_resolveLink(this, in_event); };
function domMenu_runCloseMenu(argv) 
{
domMenu_toggleHighlight(argv[0], false); 
domMenu_toggleSubMenu(argv[0], 'hidden');
// if this is the top level, then the menu is being deactivated
if (argv[0].data.get('level') == 1) {
domMenu_activeElement.set(argv[1], false);
}
}
function domMenu_runOpenMenu(argv)
{
if (!domMenu_activeElement.get(argv[1])) { 
domMenu_activeElement.set(argv[1], argv[0]); 
} 
domMenu_activateSubMenu(argv[0]);
}
// }}}
// {{{ domMenu_main: data
domMenu_data.set('domMenu_main', new Hash(
1, new Hash(
'contents', 'Indice',
'contentsHover', 'Indice',
'uri', 'http://www.bracegirdle.it/Arda/index.php',
'target', '_self',
'statusText', 'Indice Enciclopedia'),
2, new Hash(
'contents', 'Vocaboli',
'contentsHover', 'Vocaboli',
'uri', '',
'statusText', 'Vocaboli',
1, new Hash(
'contents', 'Elenco',
'uri', 'http://www.bracegirdle.it/Arda/elenco_vocaboli.php',
'statusText', 'elenco vocaboli'
),
2, new Hash(
'contents', 'cerca vocaboli',
'uri', 'http://www.bracegirdle.it/Arda/ricerca.php',
'statusText', 'ricerca vocaboli'
),
3, new Hash(
'contents', 'lettere A - M',
'uri', '',
'statusText', 'lettere A-M',
1, new Hash(
'contents', 'lettera A',
'uri', 'http://www.bracegirdle.it/Arda/A/index.php',
'statusText', 'lettera A'
),
2, new Hash(
'contents', 'lettera B',
'uri', 'http://www.bracegirdle.it/Arda/B/index.php',
'statusText', 'lettera B'
),
3, new Hash(
'contents', 'lettera C',
'uri', 'http://www.bracegirdle.it/Arda/C/index.php',
'statusText', 'lettera C'
),
4, new Hash(
'contents', 'lettera D',
'uri', 'http://www.bracegirdle.it/Arda/D/index.php',
'statusText', 'lettera D'
),
5, new Hash(
'contents', 'lettera E',
'uri', 'http://www.bracegirdle.it/Arda/E/index.php',
'statusText', 'lettera E'
),
6, new Hash(
'contents', 'lettera F',
'uri', 'http://www.bracegirdle.it/Arda/F/index.php',
'statusText', 'lettera F'
),
7, new Hash(
'contents', 'lettera G',
'uri', 'http://www.bracegirdle.it/Arda/G/index.php',
'statusText', 'lettera G'
),
8, new Hash(
'contents', 'lettera H',
'uri', 'http://www.bracegirdle.it/Arda/H/index.php',
'statusText', 'lettera H'
),
9, new Hash(
'contents', 'lettera I',
'uri', 'http://www.bracegirdle.it/Arda/I/index.php',
'statusText', 'lettera I'
),
10, new Hash(
'contents', 'lettera K',
'uri', 'http://www.bracegirdle.it/Arda/K/index.php',
'statusText', 'lettera K'
),
11, new Hash(
'contents', 'lettera L',
'uri', 'http://www.bracegirdle.it/Arda/L/index.php',
'statusText', 'lettera L'
),
12, new Hash(
'contents', 'lettera M',
'uri', 'http://www.bracegirdle.it/Arda/M/index.php',
'statusText', 'lettera M'
)
),
4, new Hash(
'contents', 'lettere N - Z',
'uri', '',
'statusText', 'lettere N-Z',
1, new Hash(
'contents', 'lettera N',
'uri', 'http://www.bracegirdle.it/Arda/N/index.php',
'statusText', 'lettera N'
),
2, new Hash(
'contents', 'lettera O',
'uri', 'http://www.bracegirdle.it/Arda/O/index.php',
'statusText', 'lettera O'
),
3, new Hash(
'contents', 'lettera P',
'uri', 'http://www.bracegirdle.it/Arda/P/index.php',
'statusText', 'lettera P'
),
4, new Hash(
'contents', 'lettera Q',
'uri', 'http://www.bracegirdle.it/Arda/Q/index.php',
'statusText', 'lettera Q'
),
5, new Hash(
'contents', 'lettera R',
'uri', 'http://www.bracegirdle.it/Arda/R/index.php',
'statusText', 'lettera R'
),
6, new Hash(
'contents', 'lettera S',
'uri', 'http://www.bracegirdle.it/Arda/S/index.php',
'statusText', 'lettera S'
),
7, new Hash(
'contents', 'lettera T',
'uri', 'http://www.bracegirdle.it/Arda/T/index.php',
'statusText', 'lettera T'
),
8, new Hash(
'contents', 'lettera U',
'uri', 'http://www.bracegirdle.it/Arda/U/index.php',
'statusText', 'lettera U'
),
9, new Hash(
'contents', 'lettera V',
'uri', 'http://www.bracegirdle.it/Arda/V/index.php',
'statusText', 'lettera V'
),
10, new Hash(
'contents', 'lettera W',
'uri', 'http://www.bracegirdle.it/Arda/W/index.php',
'statusText', 'lettera W'
),
11, new Hash(
'contents', 'lettera Z',
'uri', 'http://www.bracegirdle.it/Arda/Z/index.php',
'statusText', 'lettera Z'
)
)),
3, new Hash(
'contents', 'Categorie',
'contentsHover', 'Categorie',
'uri', '',
'statusText', 'categorie vocaboli',
1, new Hash(
'contents', 'Indice',
'uri', 'http://www.bracegirdle.it/Arda/categorie.php',
'statusText', 'indice categorie'
),
2, new Hash(
'contents', 'Legenda',
'uri', 'http://www.bracegirdle.it/Arda/legenda.php',
'statusText', 'legenda categorie'
),
3, new Hash(
'contents', 'Razze',
'uri', '',
'statusText', 'razze',
1, new Hash(
'contents', 'Uomini',
'uri', 'http://www.bracegirdle.it/Arda/uomini.php',
'statusText', 'uomini'
),
2, new Hash(
'contents', 'Donne',
'uri', 'http://www.bracegirdle.it/Arda/donne.php',
'statusText', 'donne'
),
3, new Hash(
'contents', 'Elfi e Mezzelfi',
'uri', 'http://www.bracegirdle.it/Arda/elfi.php',
'statusText', 'elfi e mezzelfi'
),
4, new Hash(
'contents', 'Elfe e Mezzelfe',
'uri', 'http://www.bracegirdle.it/Arda/elfe.php',
'statusText', 'elfe e mezzelfe'
),
5, new Hash(
'contents', 'Nani',
'uri', 'http://www.bracegirdle.it/Arda/nani.php',
'statusText', 'nani e nane'
),
6, new Hash(
'contents', 'Hobbit',
'uri', 'http://www.bracegirdle.it/Arda/hobbit.php',
'statusText', 'hobbit'
),
7, new Hash(
'contents', 'Spiriti',
'uri', '',
'statusText', 'spiriti'
),
8, new Hash(
'contents', 'Orchi',
'uri', 'http://www.bracegirdle.it/Arda/orchi.php',
'statusText', 'orchi'
),
9, new Hash(
'contents', 'Ent',
'uri', 'http://www.bracegirdle.it/Arda/ent.php',
'statusText', 'ent'
),
10, new Hash(
'contents', 'Draghi',
'uri', 'http://www.bracegirdle.it/Arda/draghi.php',
'statusText', 'draghi'
),
11, new Hash(
'contents', 'animali',
'uri', 'http://www.bracegirdle.it/Arda/animali.php',
'statusText', 'animali'
),
12, new Hash(
'contents', 'uccelli',
'uri', 'http://www.bracegirdle.it/Arda/uccelli.php',
'statusText', 'volatili'
),
13, new Hash(
'contents', 'altre creature',
'uri', '',
'statusText', 'altre creature'
),
14, new Hash(
'contents', 'alberi',
'uri', 'http://www.bracegirdle.it/Arda/alberi.php',
'statusText', 'alberi'
),
15, new Hash(
'contents', 'fiori ed erbe',
'uri', 'http://www.bracegirdle.it/Arda/fiori.php',
'statusText', 'fiori ed erbe'
)
),
4, new Hash(
'contents', 'Luoghi',
'uri', '',
'statusText', 'luoghi',
1, new Hash(
'contents', 'regni',
'uri', 'http://www.bracegirdle.it/Arda/regni.php',
'statusText', 'regni'
),
2, new Hash(
'contents', 'regioni',
'uri', 'http://www.bracegirdle.it/Arda/regioni.php',
'statusText', 'regioni'
),
3, new Hash(
'contents', 'isole',
'uri', 'http://www.bracegirdle.it/Arda/isole.php',
'statusText', 'isole'
),
4, new Hash(
'contents', 'cittą',
'uri', 'http://www.bracegirdle.it/Arda/citta.php',
'statusText', 'cittą'
),
5, new Hash(
'contents', 'villaggi',
'uri', 'http://www.bracegirdle.it/Arda/villaggi.php',
'statusText', 'villaggi'
),
6, new Hash(
'contents', 'fiumi, cascate, guadi',
'uri', 'http://www.bracegirdle.it/Arda/corsi_acqua.php',
'statusText', 'corsi d\'acqua'
),
7, new Hash(
'contents', 'laghi',
'uri', '',
'statusText', 'laghi'
),
8, new Hash(
'contents', 'mari, baie, golfi',
'uri', 'http://www.bracegirdle.it/Arda/mari.php',
'statusText', 'mari'
),
9, new Hash(
'contents', 'paludi e acquitrini',
'uri', 'http://www.bracegirdle.it/Arda/paludi.php',
'statusText', 'paludi'
),
10, new Hash(
'contents', 'montagne',
'uri', 'http://www.bracegirdle.it/Arda/monti.php',
'statusText', 'montagne'
),
11, new Hash(
'contents', 'grotte e caverne',
'uri', 'http://www.bracegirdle.it/Arda/caverne.php',
'statusText', 'grotte e caverne'
),
12, new Hash(
'contents', 'boschi e foreste',
'uri', 'http://www.bracegirdle.it/Arda/boschi.php',
'statusText', 'boschi e foreste'
),
13, new Hash(
'contents', 'colline',
'uri', 'http://www.bracegirdle.it/Arda/colline.php',
'statusText', 'colline'
),
14, new Hash(
'contents', 'pianure, valli, valichi',
'uri', 'http://www.bracegirdle.it/Arda/altre_alture.php',
'statusText', 'pianure, valli, valichi'
)
),
5, new Hash(
'contents', 'Costruzioni',
'uri', '',
'statusText', 'costruzioni',
1, new Hash(
'contents', 'edifici',
'uri', 'http://www.bracegirdle.it/Arda/edifici.php',
'statusText', 'edifici'
),
2, new Hash(
'contents', 'fortificazioni',
'uri', 'http://www.bracegirdle.it/Arda/fortificazioni.php',
'statusText', 'fortificazioni'
),
3, new Hash(
'contents', 'torri di segnalazione',
'uri', 'http://www.bracegirdle.it/Arda/collifaro.php',
'statusText', 'torri di segnalazione'
),
4, new Hash(
'contents', 'monumenti',
'uri', 'http://www.bracegirdle.it/Arda/monumenti.php',
'statusText', 'monumenti'
),
5, new Hash(
'contents', 'cancelli e porte',
'uri', 'http://www.bracegirdle.it/Arda/cancelli.php',
'statusText', 'cancelli e porte'
),
6, new Hash(
'contents', 'ponti',
'uri', '',
'statusText', 'ponti'
),
7, new Hash(
'contents', 'strade',
'uri', 'http://www.bracegirdle.it/Arda/strade.php',
'statusText', 'strade'
)
),
6, new Hash(
'contents', 'Oggetti',
'uri', '',
'statusText', 'oggetti',
1, new Hash(
'contents', 'armi',
'uri', 'http://www.bracegirdle.it/Arda/armi.php',
'statusText', 'armi'
),
2, new Hash(
'contents', 'gioielli',
'uri', 'http://www.bracegirdle.it/Arda/gioielli.php',
'statusText', 'gioielli'
),
3, new Hash(
'contents', 'metalli',
'uri', 'http://www.bracegirdle.it/Arda/metalli.php',
'statusText', 'metalli'
),
4, new Hash(
'contents', 'libri e documenti',
'uri', 'http://www.bracegirdle.it/Arda/documenti.php',
'statusText', 'documenti'
),
5, new Hash(
'contents', 'poesie',
'uri', '',
'statusText', 'poesie'
),
6, new Hash(
'contents', 'altri oggetti',
'uri', 'http://www.bracegirdle.it/Arda/oggetti.php',
'statusText', 'altri oggetti'
)
),
7, new Hash(
'contents', 'Eventi',
'uri', '',
'statusText', 'eventi',
1, new Hash(
'contents', 'guerre e battaglie',
'uri', 'http://www.bracegirdle.it/Arda/combattimenti.php',
'statusText', 'combattimenti'
),
2, new Hash(
'contents', 'ricorrenze',
'uri', '',
'statusText', 'ricorrenze'
),
3, new Hash(
'contents', 'eventi singoli',
'uri', 'http://www.bracegirdle.it/Arda/eventi.php',
'statusText', 'eventi singoli'
),
4, new Hash(
'contents', 'periodi',
'uri', '',
'statusText', 'periodi'
)
),
8, new Hash(
'contents', 'Altro',
'uri', '',
'statusText', 'altro',
1, new Hash(
'contents', 'razze',
'uri', 'http://www.bracegirdle.it/Arda/razze.php',
'statusText', 'razze'
),
2, new Hash(
'contents', 'gruppi',
'uri', 'http://www.bracegirdle.it/Arda/gruppi.php',
'statusText', 'gruppi'
),
3, new Hash(
'contents', 'linguaggi',
'uri', '',
'statusText', 'linguaggi'
),
4, new Hash(
'contents', 'titoli e soprannomi',
'uri', 'http://www.bracegirdle.it/Arda/titoli.php',
'statusText', 'titoli e soprannomi'
),
5, new Hash(
'contents', 'concetti e simboli',
'uri', 'http://www.bracegirdle.it/Arda/concetti.php',
'statusText', 'concetti e simboli'
)
)),
4, new Hash(
'contents', 'Guida',
'contentsHover', 'Guida',
'uri', '',
'statusText', 'guida',
1, new Hash(
'contents', 'abbreviazioni',
'uri', 'http://www.bracegirdle.it/Arda/abbreviazioni.php',
'statusText', 'abbreviazioni'
),
2, new Hash(
'contents', 'avvertenza',
'uri', 'http://www.bracegirdle.it/Arda/avvertenza.php',
'statusText', 'avvertenza'
),
3, new Hash(
'contents', 'FAQ',
'uri', 'http://www.bracegirdle.it/Arda/faq_tolkien.php',
'statusText', 'FAQ'))
));
// }}}
// {{{ domMenu_main: settings
domMenu_settings.set('domMenu_main', new Hash(
'subMenuWidthCorrection', -1,
'verticalSubMenuOffsetX', -1,
'verticalSubMenuOffsetY', -1,
'horizontalSubMenuOffsetX', 1,
'openMouseoverMenuDelay', 300,
'closeMouseoutMenuDelay', 500,
'expandMenuArrowUrl', '/images/arrow.gif'
));