// *** CROSS-BROWSER COMPATIBILITY ***var isDOM = (document.getElementById ? true : false);var isIE4 = ((document.all && !isDOM) ? true : false);var isNS4 = (document.layers ? true : false);function getRef(id){ if (isDOM) return document.getElementById(id); if (isIE4) return document.all[id]; if (isNS4) return document.layers[id];}function getSty(id){ return (isNS4 ? getRef(id) : getRef(id).style);}// *** MOUSEOVER/OUT CONTROL FUNCTIONS ***// Hide timeout.var popTimer = 0;// Array showing highlighted menu items.var litNow = new Array();var url = ''; //hier der urlfunction popOver(menuNum, itemNum){ clearTimeout(popTimer); // Hide all other menus & dim old highlighted items, still showing this menu. hideAllBut(menuNum); // Get tree of parent menu items and light them up - global variable for hideAllBut! litNow = getTree(menuNum, itemNum); changeCol(litNow, true); // Get target menu to show - if it's nonzero, position & show it. targetNum = menu[menuNum][itemNum].target; if (targetNum > 0) {  // Get current menu position.  thisX = parseInt(menu[menuNum][0].ref.left) + parseInt(menu[menuNum][itemNum].ref.left);  thisY = parseInt(menu[menuNum][0].ref.top) + parseInt(menu[menuNum][itemNum].ref.top);  // Add those to the target's offset to set the target's position, show it.  with (menu[targetNum][0].ref)  {   left = parseInt(thisX + menu[targetNum][0].x);   top = parseInt(thisY + menu[targetNum][0].y);   visibility = 'visible';  } }}function popOut(menuNum, itemNum){ // If it's a root menu item that doesn't trigger a popout, hide now, else set timeout // to hide menu in 1/2 sec, *UNLESS* another mouseover clears the timeout! if ((menuNum == 0) && !menu[menuNum][itemNum].target)  hideAllBut(0) else  popTimer = setTimeout('hideAllBut(0)', 500);}function getTree(menuNum, itemNum){ // Array index is the menu number. The contents are null (if that menu is not a parent) // or the item number in that menu that is an ancestor (to light it up). itemArray = new Array(menu.length); while(1) {  itemArray[menuNum] = itemNum;  // If we've reached the top of the hierarchy, return.  if (menuNum == 0) return itemArray;  itemNum = menu[menuNum][0].parentItem;  menuNum = menu[menuNum][0].parentMenu; }}// Pass an array and a boolean to specify colour change, true = over colour.function changeCol(changeArray, isOver){ // Cycle through array searching for items to change. for (menuCount = 0; menuCount < changeArray.length; menuCount++) {  // If item number is present, change its colour.  if (changeArray[menuCount])  {   newCol = isOver ? menu[menuCount][0].overCol : menu[menuCount][0].backCol;   // Change the colours of the div/layer background.   with (menu[menuCount][changeArray[menuCount]].ref)   {    if (isNS4) bgColor = newCol;    else backgroundColor = newCol;   }  } }}function hideAllBut(menuNum){ // Get array of parent menus (item numbers irrelevant, just pass '1'). var keepMenus = getTree(menuNum, 1); // ...and work through it, hiding menus that are not its ancestors/itself. for (count = 0; count < menu.length; count++)  if (!keepMenus[count])   menu[count][0].ref.visibility = 'hidden'; // Dim all the items in litNow array. changeCol(litNow, false);}// *** MENU CONSTRUCTION FUNCTIONS ***function Menu(isVert, popInd, x, y, width, overCol, backCol, borderClass, textClass){ // True or false - a vertical menu? this.isVert = isVert; // The popout indicator used (if any) for this menu. this.popInd = popInd // Position and size settings. this.x = x; this.y = y; this.width = width; // Colours of menu and items. this.overCol = overCol; this.backCol = backCol; // The stylesheet class used for item borders and the text within items. this.borderClass = borderClass; this.textClass = textClass; // Parent menu and item numbers, indexed later. this.parentMenu = null; this.parentItem = null; // Reference to the object's style properties (set later). this.ref = null;}function Item(text, href, frame, length, spacing, target){ this.text = text; this.href = href; this.frame = frame; this.length = length; this.spacing = spacing; this.target = target; // Reference to the object's style properties (set later). this.ref = null;}function writeMenus(){ if (!isDOM && !isIE4 && !isNS4) return; // Loop through menus, using properties of menu description object, i.e. x, y, width etc... for (currMenu = 0; currMenu < menu.length; currMenu++) with (menu[currMenu][0]) {  // Variable for holding HTML for items and positions of next item.  var str = '', itemX = 0, itemY = 0;  // Remember, items start from 1 in the array (0 is menu object itself, above).  // Also use properties of each item nested in the other with() for construction.  for (currItem = 1; currItem < menu[currMenu].length; currItem++) with (menu[currMenu][currItem])  {   var itemID = 'menu' + currMenu + 'item' + currItem;   // The width and height of the menu item - dependent on orientation!   var w = (isVert ? width : length);   var h = (isVert ? length : width);   // Create a div or layer text string with appropriate styles/properties.   // the width must be a miniumum of 3 for it to work in that browser.   if (isDOM || isIE4)   {    str += '<div id="' + itemID + '" style="position: absolute; left: ' + itemX +     '; top: ' + itemY + '; width: ' + w + '; height: ' + h + '; visibility: inherit; ';    if (backCol) str += 'background: ' + backCol + '; ';    str += '" ';   }   if (isNS4)   {    str += '<layer id="' + itemID + '" left="' + itemX + '" top="' + itemY + '" width="' + w + '" height="' + h + '" visibility="inherit" ';    if (backCol) str += 'bgcolor="' + backCol + '" ';   }   if (borderClass) str += 'class="' + borderClass + '" '; // Add mouseover handlers and finish div/layer.   str += 'onMouseOver="popOver(' + currMenu + ',' + currItem + ')" onMouseOut="popOut(' + currMenu + ',' + currItem + ')">';   // Add contents of item (default: table with link inside).   // In IE/NS6+, add padding if there's a border to emulate NS4's layer padding.   // If a target frame is specified, also add that to the <a> tag.   // Hauptmenu wird center und bold    if ( currMenu == 0 ) {     str += '<table width="' + (w) + '" border="0" cellspacing="0" cellpadding="' +       (!isNS4 && borderClass ? 3 : 0) + '"><tr><td  class="navTableMain" height="' + (h) + '">' +	    '<a class="' + textClass + '" href=" ' + href + '"' +       (frame ? ' target="' + frame + '">' : '>') + text + '</a>'+(isNS4  ? '<br><img src="images/lineNav.gif"  width="100%" height="1">' :'') + '</td>';   } else {      str += '<table width="' + (w) + '" border="0" cellspacing="0" cellpadding="' +       (!isNS4 && borderClass ? 3 : 0) + '"><tr><td align="left" class="navTableSub" height="' + (h) + '">' +	    '<a class="' + textClass + '" href=" ' + href + '"' +       (frame ? ' target="' + frame + '">' : '>') +  text + '</a>'+(isNS4  ? '<br><img src="images/lineNav.gif"  width="100%" height="1">' :'') + '</td>';   }   if (target > 0)   {    // Set target's parents to this menu item.    menu[target][0].parentMenu = currMenu;    menu[target][0].parentItem = currItem;    // Add a popout indicator.    if (popInd) str += '<td align="right" class="navTableMain">' + popInd + (isNS4  ? '&nbsp;<br><img src="images/lineNav.gif" vspace="5" width="10" height="1">' : '') + '</td>';   }   // Finish off table and item.   str += '</tr></table>' + (isNS4 ? '</layer>' : '</div>');   // Move next item position down or across by this item's length and additional spacing.   if (isVert) itemY += length + spacing;   else itemX += length + spacing;  // End loop through items and with([menu[currMenu][currItem]).  }  // Now, write the menu to the document depending on browser capabilities.  // N.B: Still using properties of menu[currMenu][0] like 'ref' etc...  // In IE5+ or NS6+, create a new DIV node and add text to it...  if (isDOM)  {   var newDiv = document.createElement('div');   document.getElementsByTagName('body').item(0).appendChild(newDiv);   newDiv.innerHTML = str;   ref = newDiv.style;   ref.position = 'absolute';   ref.visibility = 'hidden';  }  // Insert a div tag to the end of the BODY with menu HTML in place for IE4.  if (isIE4)  {   document.body.insertAdjacentHTML('beforeEnd', '<div id="menu' + currMenu + 'div" ' +    'style="position: absolute; visibility: hidden">' + str + '</div>');   ref = getSty('menu' + currMenu + 'div');  }  // In NS4, create a reference to a new layer and write the items to it.  if (isNS4)  {   ref = new Layer(0);   ref.document.write(str);   ref.document.close();  }  // Now items have been written, loop through them again to set up references.  for (currItem = 1; currItem < menu[currMenu].length; currItem++)  {   itemName = 'menu' + currMenu + 'item' + currItem;   if (isDOM || isIE4) menu[currMenu][currItem].ref = getSty(itemName);   if (isNS4) menu[currMenu][currItem].ref = ref.document[itemName];  } // End loop through menus and with (menu[currMenu][0]). } // Now they've all been written, position & show the root menu (others positioned later). with(menu[0][0]) {  ref.left = x;  ref.top = y;  ref.visibility = 'visible'; }}// *** START EDITING HERE, READ THIS SECTION CAREFULLY! ***//// menu[menuNumber][0] = new Menu(Vertical menu? (true/false), 'popout indicator', left, top,// width, 'mouseover colour', 'background colour', 'border stylesheet', 'text stylesheet');//// menu[menuNumber][itemNumber] = new Item('Text', 'URL', 'target frame', length of menu item,//  additional spacing to next menu item, number of target menu to popout);//// If no target menu (popout) is desired, set it to 0.//// the Vertical Menu setup. You can see most menus below// are 'true', that is they are vertical, except for the first root menu. The 'length' and// 'width' of an item depends on its orientation -- length is how long the item runs for in// the direction of the menu, and width is the lateral dimension of the menu. Just look at// the examples and tweak the numbers, they'll make sense eventually :).var menu = new Array();// MOUSEOVER- und BACKGROUNDCOLORvar defOver = '#FFFFFF', defOver2 = '#FFE720', defBack = '#FFE720';// MENUEPUNKTHÖHEvar defLength = 30;// ROOTMENUEmenu[0] = new Array();menu[0][0] = new Menu(true, '', 160, 160, 150, '#FFFFFF', '#FFE720', 'itemBorder', 'navOber');menu[0][1] = new Item('Startseite', url+'index.html', '', defLength, 0, 0);menu[0][2] = new Item('Unternehmen', url+'#', '', defLength, 0, 2);menu[0][3] = new Item('Produkte', url+'#', '', defLength, 0, 3);menu[0][4] = new Item('Shop', url+'Shop_Heidbuechel.php', '', defLength, 0, 0);menu[0][5] = new Item('Kontakt', url+'', '', defLength, 0, 5);// Startseitemenu[1] = new Array();menu[1][0] = new Menu(true, '&gt;', 155, 00, 150, defOver, defBack, 'itemBorder', 'nav');menu[1][1] = new Item('Neuigkeiten', url+'Neuigkeiten_Heidbuechel.html', '', defLength, 0, 0);// Unternehmenmenu[2] = new Array();menu[2][0] = new Menu(true, '&gt;', 155, 00, 150, defOver, defBack, 'itemBorder', 'nav');menu[2][1] = new Item('Philosophie', url+'Philosophie_Heidbuechel.html', '', defLength, 0, 0);menu[2][2] = new Item('Filialen', url+'Filialen_Heidbuechel.html', '', defLength, 0, 0);menu[2][3] = new Item('Produktion', url+'Produktion_Heidbuechel.html', '', defLength, 0, 0);menu[2][4] = new Item('Jobs', url+'Jobs_Heidbuechel.html', '', defLength, 0, 0);// Produktemenu[3] = new Array();menu[3][0] = new Menu(true, '&gt;', 155, 00, 150, defOver, defBack, 'itemBorder', 'nav');menu[3][1] = new Item('Aachener Printen', url+'Aachener_Printen_Heidbuechel.html', '', defLength, 0, 0);menu[3][2] = new Item('Brot / Brötchen', url+'Broetchen_Heidbuechel.html', '', defLength, 0, 0);menu[3][3] = new Item('Kuchen / Torten', url+'Torten_Heidbuechel.html', '', defLength, 0, 0);// Servicemenu[4] = new Array();menu[4][0] = new Menu(true, '&gt;', 155, 00, 150, defOver, defBack, 'itemBorder', 'nav');menu[4][1] = new Item('Printenshop', url+'Shop_Heidbuechel.php', '', defLength, 0, 0);// Kontaktmenu[5] = new Array();menu[5][0] = new Menu(true, '&gt;', 155, 00, 150, defOver, defBack, 'itemBorder', 'nav');menu[5][1] = new Item('Kontaktdaten', url+'Kontakt_Heidbuechel.html', '', defLength, 0, 0);menu[5][2] = new Item('Impressum', url+'Impressum_Heidbuechel.html', '', defLength, 0, 0);menu[5][3] = new Item('Filialen', url+'Filialen_Heidbuechel.html', '', defLength, 0, 0);menu[5][4] = new Item('Geschäftspartner', url+'Partner_Heidbuechel.html', '', defLength, 0, 0);// Filialenmenu[6] = new Array();menu[6][0] = new Menu(true, '&gt;', 155, 00, 150, defOver, defBack, 'itemBorder', 'nav');menu[6][1] = new Item('Filiale 1', url+'#', '', defLength, 0, 0);menu[6][2] = new Item('Filiale 2', url+'#', '', defLength, 0, 0);menu[6][3] = new Item('Filiale 3', url+'#', '', defLength, 0, 0);menu[6][4] = new Item('Filiale 4', url+'#', '', defLength, 0, 0);menu[6][5] = new Item('Filiale 5', url+'#', '', defLength, 0, 0);menu[6][6] = new Item('Filiale 6', url+'#', '', defLength, 0, 0);menu[6][7] = new Item('Filiale 7', url+'#', '', defLength, 0, 0);menu[6][8] = new Item('Filiale 8', url+'#', '', defLength, 0, 0);// These two lines handle the window resize bug in NS4.var popOldWidth = window.innerWidth;nsResizeHandler = new Function('if (popOldWidth != window.innerWidth) location.reload()');// This is a quick snippet that captures all clicks on the document and hides the menus// every time you click. Use if you want.if (isNS4) document.captureEvents(Event.CLICK);document.onclick = clickHandle;function clickHandle(evt){ if (isNS4) document.routeEvent(evt); hideAllBut(0);}// This is just the moving command for the example.function moveRoot(){ with(menu[0][0].ref) left = ((parseInt(left) < 100) ? 100 : 5);}
