/*
 * Funzione che verifica se il nodo e' 'ignorabile', cioe' un commento o TEXT
 * Presa da http://developer.mozilla.org/en/docs/DOM
 */
function is_ignorable(nod) {
  return ( nod.nodeType == 8) || // A comment node
         ( (nod.nodeType == 3) && is_all_ws(nod) ); // a text node, all ws
}
/*
 * Funzione che verifica se il nodo e' vuoto
 * Presa da http://developer.mozilla.org/en/docs/DOM
 */
function is_all_ws( nod ) {
  // Use ECMA-262 Edition 3 String and RegExp features
  return !(/[^\t\n\r ]/.test(nod.data));
}
/*
 * Funzione che restituisce il vero firstChild.
 * Presa da http://developer.mozilla.org/en/docs/DOM
 */
function first_child(par) {
  var res=par.firstChild;
  while (res) {
    if (!is_ignorable(res)) return res;
    res = res.nextSibling;
  }
  return null;
}

var __isFireFox = navigator.userAgent.match(/gecko/i);  
 
//returns the absolute position of some element within document  
function GetElementAbsolutePos(element) {  
     var res = new Object();  
     res.x = 0; res.y = 0;  
     if (element !== null) {  
         res.x = element.offsetLeft;   
         res.y = element.offsetTop;   
           
         var offsetParent = element.offsetParent;  
         var parentNode = element.parentNode;  
   
         while (offsetParent !== null) {  
             res.x += offsetParent.offsetLeft;  
             res.y += offsetParent.offsetTop;  
   
             if (offsetParent != document.body && offsetParent != document.documentElement) {  
                 res.x -= offsetParent.scrollLeft;  
                 res.y -= offsetParent.scrollTop;  
             }  
             //next lines are necessary to support FireFox problem with offsetParent  
             if (__isFireFox) {  
                 while (offsetParent != parentNode && parentNode !== null) {  
                     res.x -= parentNode.scrollLeft;  
                     res.y -= parentNode.scrollTop;  
                       
                     parentNode = parentNode.parentNode;  
                 }      
             }  
             parentNode = offsetParent.parentNode;  
             offsetParent = offsetParent.offsetParent;  
         }  
     }  
     return res;  
}  
/*
 * Wrapper per aggiungere eventi: cross-browser (si spera)
 */
 
function addEvent(obj, evType, fn){ 

	if (obj.addEventListener){ 
	  	obj.addEventListener(evType, fn, false); 
	  	return true; 
	} else if (obj.attachEvent){ 
	  	var r = obj.attachEvent("on"+evType, fn); 
	  	return r; 
	} else { 
	  	return false; 
	} 
}

function initMenuPreview(menuContainer) {
	var table = document.getElementById(menuContainer); 
        var menuLinks = table.getElementsByTagName("a"); 
        for (var i = 0; i < menuLinks.length; i++) { 
        	
                if(menuLinks[i].id ) {
                	addEvent(menuLinks[i],'mouseover',new Function("displayMenuPreview('"+menuLinks[i].id+"')"));
                	addEvent(menuLinks[i],'mouseout',new Function("hideMenuPreview('"+menuLinks[i].id+"')"));

    		}
    			
	}

}

function displayMenuPreview(eID) {
	var menuEl = document.getElementById(eID);
	var pos = GetElementAbsolutePos(menuEl)
	var id = eID.replace("menu-voice-","preview-box-",  "gi");
	var el = document.getElementById(id);
	if (first_child(el)) {
		el.style.left = pos.x+'px';
		el.style.display = 'block';
	}

}

function hideMenuPreview(eID) {
	var id = eID.replace("menu-voice-","preview-box-",  "gi");
	var el = document.getElementById(id);
	el.style.display = 'none';
}