/* Left Click 1.1 by Toh Zhiqiang Homepage: http://www.tohzhiqiang.f2s.com/leftclick/index.php Homepage: http://javascript.js-x.com/examples/example.php?title=Left%20Click%20(Popup%20Navigation%20Menu)&MODE=view_hilite Email: webmaster@tohzhiqiang.com LICENSE AGREEMENT: THIS SOFTWARE (LEFT CLICK) IS PROVIDED ON AN "AS-IS" BASIS WITHOUT WARRANTY OF ANY KIND. DEVELOPER SPECIFICALLY DISCLAIMS ANY OTHER WARRANTY, EXPRESS OR IMPLIED, INCLUDING ANY WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL DEVELOPER BE LIABLE FOR ANY CONSEQUENTIAL, INDIRECT, SPECIAL OR INCIDENTAL DAMAGES, EVEN WHEN DEVELOPER HAS BEEN ADVISED BY USER OF THE POSSIBILITY OF SUCH POTENTIAL LOSS OR DAMAGE. USER AGREES TO HOLD DEVELOPER HARMLESS FROM AND AGAINST ANY AND ALL CLAIMS, LOSSES, LIABILITIES AND EXPENSES. YOU ARE FREE TO MODIFY THE SOURCE CODE OF THIS SOFTWARE IN ANYWAY YOU LIKE. HOWEVER, UNDER NO CIRCUMSTANCES SHOULD YOU CLAIM YOURSELF TO BE THE ORIGINAL CREATOR OF THIS SOFTWARE. */ //Støtter kun nyere versjoner var isNS = false; var isIE = false; var isOpera = false; if (navigator.appName.indexOf("Opera") >= 0) isOpera = true; if (navigator.appName.indexOf("Netscape") >= 0) isNS = true; if (navigator.appName.indexOf("Microsoft") >= 0) isIE = true; var useRightClickMenu = false; // true if the menu is showing (and thus clicks with the mouse shall NOT trigger any tools) var rightClickMenuOn = false; //Meny og div arrays var menu = new Array; var divId = new Array; var overBgCr = "#D6D6D6"; var overCr = "#000000"; var outBgCr = "#FFFFFF"; var outCr = "#000000"; var itemFont = ""; function menuItem() { this.item = arguments[0]; this.hasSubMenu = arguments[1]; this.level = arguments[2]; this.subMenuFront = arguments[3]; this.subMenuBack = arguments[4]; this.subMenuOffset = arguments[5]; this.link = arguments[6]; } function findMenuLevel(parentId) { for (i = 0; i < divId.length; i = i + 2) { if (divId[i] == (parentId + "Front")) { return divId[i + 1]; break; } } } function createMenu(menuId, menuWidth, level) { var frontLayer = document.createElement("DIV"); with (frontLayer) { id = menuId + "Front"; className = "RightClickMenuFront"; with (style) { width = menuWidth; height = 3; backgroundColor = outBgCr; visibility = "hidden"; } } document.body.appendChild(frontLayer); var backLayer = document.createElement("DIV"); with (backLayer) { id = menuId + "Back"; className = "RightClickMenuBack"; with (style) { width = menuWidth + 2; height = 5; backgroundColor = outBgCr; visibility = "hidden"; } } document.body.appendChild(backLayer); divId[divId.length] = menuId + "Front"; divId[divId.length] = level; divId[divId.length] = menuId + "Back"; divId[divId.length] = level; } function createItem(itemId, displayText, parentId, pageSrc, hasSubMenu) { var menuFront = document.getElementById(parentId + "Front"); var menuBack = document.getElementById(parentId + "Back"); var level = findMenuLevel(parentId); var subMenuFront = ""; var subMenuBack = ""; var subMenuOffset = -1; var itemLayer = document.createElement("DIV"); with (itemLayer) { if (isNS) { addEventListener("mouseover", over, false); addEventListener("mouseout", out, false); addEventListener("click", goToLink, false); } else { attachEvent("onmouseover", over); attachEvent("onmouseout", out); attachEvent("onclick", goToLink); } id = itemId; className = "RightClickMenuItem"; if (displayText != "-") { if (hasSubMenu) { link = ""; innerHTML = displayText; var sepLayer = document.createElement("DIV"); with (sepLayer) { className = "RightClickMenuArrow"; innerHTML = "4"; with (style) { var w = menuFront.style.width; var sWidth = w.replace("px", ""); left = parseInt(sWidth) - 20; } itemLayer.appendChild(sepLayer); } } else { innerHTML = displayText; } with (style) { var h = menuFront.style.height; var sHeight = h.replace("px", ""); top = parseInt(sHeight); var w = menuFront.style.width; var sWidth = w.replace("px", ""); width = parseInt(sWidth) - 4; fontFamily = itemFont; color = outCr; if (hasSubMenu) { var h = menuFront.style.height; var sHeight = h.replace("px", ""); subMenuOffset = parseInt(sHeight) - 3; } } //Utvider høyden på "hoved"DIV'en ettersom elementer legges til var h = menuFront.style.height; var sHeight = h.replace("px", ""); h = parseInt(sHeight) + 18; menuFront.style.height = h; h = menuBack.style.height; sHeight = h.replace("px", ""); h = parseInt(sHeight) + 18; menuBack.style.height = h; } } menuFront.appendChild(itemLayer); menu[menu.length] = new menuItem(itemId, hasSubMenu, level, subMenuFront, subMenuBack, subMenuOffset, pageSrc); } function linkSubMenu(itemId, subMenuId) { for (i = 0; i < menu.length; i++) { if (menu[i].item == itemId) { menu[i].subMenuFront = subMenuId + "Front"; menu[i].subMenuBack = subMenuId + "Back"; break; } } } function hideMenus() { for (i = 0; i < divId.length; i = i + 2) { var menuLayer = document.getElementById(divId[i]); menuLayer.style.visibility = "hidden"; } } function popUpPos(e) { var menuFront = document.getElementById(divId[0]); var menuBack = document.getElementById(divId[2]); var xCoor; var yCoor; if (isNS) { widthMax = window.innerWidth; heightMax = window.innerHeight; xCoor = e.pageX; yCoor = e.pageY; } else { widthMax = document.body.clientWidth; heightMax = document.body.clientHeight; xCoor = window.event.x; yCoor = window.event.y; } var w = menuFront.style.width; var sWidth = w.replace("px", ""); var h = menuFront.style.height; var sHeight = h.replace("px", ""); var xWidth = xCoor + parseInt(sWidth); var yHeight = yCoor + parseInt(sHeight); if (menuFront.style.visibility == "hidden") { //Sjekker om klikket kommer høyt nok opp i vinduet. Hvis ikke må menyen vises frem over klikket. if (yHeight < (heightMax - 1)) { menuFront.style.top = yCoor; menuBack.style.top = yCoor; } else //Menyen må vises frem over klikket. { //Sjekker om det faktisk er plass til å vise den frem over klikket. Dersom ikke vises den fra toppen uansett. if (yCoor < sHeight) { menuFront.style.top = 0; menuBack.style.top = 0; } else //Det var plass til å vise den frem over klikket. { menuFront.style.top = yCoor - sHeight - 2; menuBack.style.top = yCoor - sHeight - 2; } } //Sjekker om klikket kommer langt nok til venstre i vinduet. Hvis ikke må menyen vises frem mot venstre. if (xWidth < (widthMax - 1)) { menuFront.style.left = xCoor; menuBack.style.left = xCoor; } else //Menyen vises frem mot venstre. { //Sjekker om det faktisk er plass til å vise den frem mot venstre. Dersom ikke vises den fra venstre uansett. if (xCoor < sWidth) { menuFront.style.left = 0; menuBack.style.left = 0; } else //Det var plass til å vise den frem mot venstre. { menuFront.style.left = xCoor - sWidth - 3; menuBack.style.left = xCoor - sWidth - 3; } } } } function findOffset(itemId) { offset = 0; for (i = 0; i < menu.length; i++) { if (itemId == document.getElementById(menu[i].item)) { offset = menu[i].level; break; } } for (i = 0; i < divId.length; i = i + 2) { if (offset == divId[i + 1]) { return i; } } } function popUpSubPos(xCoor, yCoor, subMenuFront, subMenuBack, offset) { var menuFront = document.getElementById(divId[offset]); var menuBack = document.getElementById(divId[offset + 2]); var widthMax; var heightMax; if (isNS) { widthMax = window.innerWidth; heightMax = window.innerHeight; } else { widthMax = document.body.clientWidth; heightMax = document.body.clientHeight; } var w = subMenuFront.style.width; var sWidth = w.replace("px", ""); var h = subMenuFront.style.height; var sHeight = h.replace("px", ""); var xWidth = xCoor + parseInt(sWidth); var yHeight = yCoor + parseInt(sHeight); if (subMenuFront.style.visibility == "hidden") { if (yHeight < (heightMax - 1)) { subMenuFront.style.top = yCoor; subMenuBack.style.top = yCoor; } else { subMenuFront.style.top = yCoor - sHeight + 15; subMenuBack.style.top = yCoor - sHeight + 15; } if (xWidth < (widthMax - 1)) { subMenuFront.style.left = xCoor; subMenuBack.style.left = xCoor; } else { var w = menuFront.style.width; var sWidth = w.replace("px", ""); var sw = subMenuFront.style.width; var ssWidth = sw.replace("px", ""); subMenuFront.style.left = xCoor - parseInt(sWidth) - parseInt(ssWidth) + 5; subMenuBack.style.left = xCoor - parseInt(sWidth) - parseInt(ssWidth) + 5; } } } function showRightClickMenu(e) { var source; if (isNS) { source = e.target.tagName; //source=IMG } else { source = window.event.srcElement.tagName; } var menuFront = document.getElementById(divId[0]); var menuBack = document.getElementById(divId[2]); if (menuFront.style.visibility == "hidden") { popUpPos(e); menuFront.style.visibility = "visible"; menuBack.style.visibility = "visible"; return false; } else { hideMenus(); } } function checkElement(itemId) { if (itemId.className == "RightClickMenuArrow") { return itemId.parentElement; } else { return itemId; } } function over(e) { rightClickMenuOn = true; var itemId; if (isNS) { itemId = e.target; } else { itemId = event.srcElement; } itemId = checkElement(itemId); offset = findOffset(itemId); var menuFront = document.getElementById(divId[offset]); var w = itemId.style.width; sWidth = w.replace("px", ""); var l = menuFront.style.left; sLeft = l.replace("px", ""); var xCoor = parseInt(sLeft) + parseInt(sWidth); var t = menuFront.style.top; sTop = t.replace("px", ""); var yCoor = parseInt(sTop); var divSubId = divId.slice(4); itemId.style.backgroundColor = overBgCr; itemId.style.color = overCr; for (i = 0; i < menu.length; i++) { if (itemId == document.getElementById(menu[i].item)) { for (j = 0; j < divSubId.length; j = j + 2) { if ((menu[i].level) < divSubId[j + 1]) { var subMenu = document.getElementById(divSubId[j]); subMenu.style.visibility = "hidden"; } } if (menu[i].hasSubMenu) { var subMenuFront = document.getElementById(menu[i].subMenuFront); var subMenuBack = document.getElementById(menu[i].subMenuBack); subMenuFront.style.zIndex = menu[i].level + 12; subMenuBack.style.zIndex = menu[i].level + 11; popUpSubPos(xCoor, yCoor + menu[i].subMenuOffset, subMenuFront, subMenuBack, offset); subMenuFront.style.visibility = "visible"; subMenuBack.style.visibility = "visible"; } break; } } } function out(e) { var itemId; if (isNS) { itemId = e.target; } else { itemId = event.srcElement; } itemId = checkElement(itemId); itemId.style.backgroundColor = outBgCr; itemId.style.color = outCr; rightClickMenuOn = false; } function goToLink(e) { var itemId; if (isNS) { itemId = e.target; } else { itemId = event.srcElement; } for (i = 0; i < menu.length; i++) { if ((itemId == document.getElementById(menu[i].item)) && (menu[i].link != "")) { window.location.href = menu[i].link; break; } } }