//////////// // Variable declaration ////////////////// var MenuInstanceArray = new Array(); MenuInstanceArray[0] = null; var ns4 =(document.layers)?true:false; var ns6 =(!document.all && document.getElementById)?true:false; var ns7 = false; if (ns6) { var cStr; cStr = new String(navigator.userAgent); //if (cStr.substring((cStr.length-3) , (cStr.length-2)) == "7" ) if (cStr.indexOf("7") != -1) { ns7 = true; } } var opera =(navigator.userAgent.indexOf("Opera")!=-1)?true:false; var ie =(document.all)?true:false; var g_Intelligent_ID = true; var g_bAllowResizing = false; var g_cImageEmpty = './Pictures/Empty.gif'; var g_cImageSubMenuVert = './Pictures/Sub_Vert.gif'; var g_cImageSubMenuHor = './Pictures/Sub_Hor.gif'; var g_cIDSeparator = (ns4)?'_':'-'; var g_MainFieldForPosition = ''; var g_nMenuMouseX = 0; var g_nMenuMouseY = 0; var g_nTopScrollPos = 0; var g_bScrolling = false; ////////////////////// // Functions To Call in HTML //////////////////////////////////////// function MenuCreate() { var cHTMLSyntax = ''; var i; // ---- Wait for Opera if Line too slow --------------- /*if (g_MainFieldForPosition != "" && opera) { while (MenuWaitBeforeCreate(1) <= 0) { //null; } }*/ MenuGenerate(); if (MenuInstanceArray[0] != null) { for(i=0 ; i < MenuInstanceArray.length ; i++) { cHTMLSyntax += MenuCreateSyntax(MenuInstanceArray[i].ID) } } document.write(cHTMLSyntax); } //////////////// // Menu Element /////////////////////////// function MenuInstance( _cID, _nX, _nY, _cXYbyElement, _nShadowHor, _nShadowVer, _cShadowColor, _nBorderSize, _cDefaultStyle, _OperaOver, _OperaNormal ) { var cTempPos; this.ID = MenuConvertToRightID(_cID); // Position ------------------------------ if (_cXYbyElement != null) { cTempPos = GetStartPos(_cXYbyElement); this.nStartPosX = parseInt(MenuExtractString(cTempPos,0,'x')); this.nStartPosY = parseInt(MenuExtractString(cTempPos,1,'x')); } else { this.nStartPosX = _nX; this.nStartPosY = _nY; } // Shadow -------------------------------- this.bShadowFlag = false; if (_nShadowHor > 0) { this.bShadowFlag = true; this.nShadowIncreaseHor = _nShadowHor; this.nShadowIncreaseVert = _nShadowVer; this.cShadowColor = _cShadowColor; //'#383838'; this.ShadowOperaSize = 2; } this.nBorderSize = _nBorderSize; this.cDefaultStyle = _cDefaultStyle; //'MenuElem'; this.OperaOver = _OperaOver; //'#B5BED6'; this.OperaNormal = _OperaNormal; //'#F1F1F1'; this.nSizeCorrection = (opera)?_nBorderSize:0; // Fix Opera Decalage this.nSizeCorrectionShadow = (opera)?2:0; // Fix Opera Decalage this.cMenuLastID = null; this.bToClose = false; this.MenuInstance = null; } function MenuAdd(_cID, _nX, _nY, _cXYbyElement, _nShadowHor, _nShadowVer, _cShadowColor, _nBorderSize, _cDefaultStyle, _OperaOver, _OperaNormal ) { var nindex; var oObject; if (MenuInstanceArray[0] == null) { MenuInstanceArray[0] = new MenuInstance( _cID, _nX, _nY, _cXYbyElement, _nShadowHor, _nShadowVer, _cShadowColor, _nBorderSize, _cDefaultStyle, _OperaOver, _OperaNormal ); return MenuInstanceArray[0]; } else { oObject = GetMenuByID(_cID); if (oObject == null) { // get the last index nindex = MenuInstanceArray.length; // Affect the new instance MenuInstanceArray[nindex] = new MenuInstance( _cID, _nX, _nY, _cXYbyElement, _nShadowHor, _nShadowVer, _cShadowColor, _nBorderSize, _cDefaultStyle, _OperaOver, _OperaNormal ); return MenuInstanceArray[nindex]; } } return null; } function GetMenuByID(_cID) { var i; if (MenuInstanceArray[0] != null) { for(i=0 ; i < MenuInstanceArray.length ; i++) { if (MenuInstanceArray[i].ID == _cID) { return MenuInstanceArray[i]; } } } return null; } //////////////// // Menu Element /////////////////////////// function MenuElement(_cMenuID,_cID,_cText,_bDocument,_bVertical,_nPixelsWidth,_nPixelsHeight,_cElementStyle,_cSubMenuStyle,_cIcon,_bContent) { var oMenuObject = GetMenuByID(_cMenuID); this.MenuID = MenuConvertToRightID(_cMenuID); this.ID = MenuConvertToRightID(_cID); this.cText = _cText; this.bDocFlag = _bDocument; this.bVertFlag = _bVertical; this.bValidatePositon = false; if (_cElementStyle == null) { this.cStyle = oMenuObject.cDefaultStyle;} else { this.cStyle = _cElementStyle;} if (_cSubMenuStyle == null) { this.cSubStyle= oMenuObject.cDefaultStyle;} else { this.cSubStyle= _cSubMenuStyle;} if (_nPixelsWidth == null) { this.nWidth = 120; } else { this.nWidth = _nPixelsWidth; } if (_nPixelsHeight == null) { this.nHeight = 20; } else { this.nHeight = _nPixelsHeight;} if (_cIcon == null) { this.cIcon = ""; } else { this.cIcon = _cIcon; } if (_bContent == null) { this.bContent = true;} else { this.bContent = _bContent; } this.X = 0; this.Y = 0; this.open = false; this.child = new Array(); this.child[0] = null; } function MenuAddElement(_cMenuID,_cFather,_cID,_cText,_bDocument,_bVertical,_nPixelsWidth,_nPixelsHeight,_cElementStyle,_cSubMenuStyle,_cIcon,_bContent) { var nindex; var oObject; var oMenuObject = GetMenuByID(MenuConvertToRightID(_cMenuID)); if (_cFather == null) { oMenuObject.MenuInstance = new MenuElement(_cMenuID,_cID,_cText,_bDocument,_bVertical,_nPixelsWidth,_nPixelsHeight,_cElementStyle,_cSubMenuStyle,_cIcon,_bContent); return oMenuObject.MenuInstance; } else { oObject = MenuGetObject(MenuConvertToRightID(_cMenuID),MenuConvertToRightID(_cFather)); if ( oObject != null) { if ( MenuGetObject(MenuConvertToRightID(_cMenuID),MenuConvertToRightID(_cID)) == null) { // get the last index nindex = oObject.child.length; if (oObject.child[0] == null) { nindex = 0; } // Affect the new instance oObject.child[nindex] = new MenuElement(_cMenuID,_cID,_cText,_bDocument,_bVertical,_nPixelsWidth,_nPixelsHeight,_cElementStyle,_cSubMenuStyle,_cIcon,_bContent); return oObject.child[nindex]; } } } return null; } function MenuGetObject(_cMenuID,_cID,_oObject,_nLevel) { var oObject = null; var nLevel = 1; var nIndex = 0; var cIndex = ''; var i=0; var oMenuObject = GetMenuByID(_cMenuID); if (_oObject == null) { oObject = oMenuObject.MenuInstance; } else { oObject = _oObject; } if (_nLevel != null) { nLevel = _nLevel;} if (g_Intelligent_ID) //-------- INTELLIGENT ID-------------------- { cIndex = MenuExtractString(_cID,nLevel,g_cIDSeparator); if (cIndex != null) { nIndex = parseInt(cIndex); if(oObject.child[nIndex] != null) { nLevel ++; return MenuGetObject(_cMenuID,_cID,oObject.child[nIndex],nLevel); } else { return null; } } else { return oObject; } } else { //---------- NON INTELLIGENT ID --------------------------- cIndex = MenuExtractString(_cID,nLevel,g_cIDSeparator); nIndex = 0 if (cIndex != null) { if (oObject != null) { if (oObject.child[0] != null) { for(i=0 ; i < oObject.child.length ; i++) { if (oObject.child[i].ID == (oObject.ID + g_cIDSeparator + cIndex)) { nLevel ++; return MenuGetObject(_cMenuID,_cID,oObject.child[i],nLevel); } } } } return null; } else { return oObject; } } } ///////////////////////// // Create Syntax //////////////////////////////////// function MenuCreateSyntax(_cMenuID,_oObject,_oParent,_nChild) { var oObject; var cHTMLSyntax = ''; var cVisibility = ''; var i; var doc; var oMenuObject = GetMenuByID(_cMenuID); var cAtagBefore = ''; var cAtagAfter = ''; //---- Object and X Y ------------------------------------------- if (_oObject == null) { oObject = oMenuObject.MenuInstance; cVisibility = 'Visible'; bRoot = true; oObject.open = true; oObject.X = oMenuObject.nStartPosX; oObject.Y = oMenuObject.nStartPosY; } else { oObject = _oObject; cVisibility = 'Hidden'; bRoot = false; oObject.open = false; if (_oParent.bVertFlag) { oObject.X = _oParent.X + _oParent.nWidth - 10; oObject.Y = _oParent.Y + ((_oParent.nHeight + oMenuObject.nSizeCorrection) * _nChild) + 2; } else { oObject.X = _oParent.X + ((_oParent.nWidth + oMenuObject.nSizeCorrection) * _nChild) + 2; oObject.Y = _oParent.Y + _oParent.nHeight - 1; } } //---- Write HTML Syntax ----------------------------------------- if (! oObject.bDocFlag && oObject.child[0] != null) { //---- Create Shadow System ---------- if (!bRoot && oMenuObject.bShadowFlag) { cHTMLSyntax += MenuCreateShadow(oObject,_oParent); } //--- DIV ---- if (ns4) { cHTMLSyntax += '';} else { cHTMLSyntax += '
'; } //--- TABLE ---- cHTMLSyntax += ''; } cHTMLSyntax += ' '; if (!oObject.bVertFlag) { cHTMLSyntax += ' '; } //--- TR ---- for(i=0 ; i < oObject.child.length ; i++) { if (oObject.child[i] != null) { if (!oObject.bVertFlag) { cHTMLSyntax += ' '; } else { cHTMLSyntax += ' '; } } } if (!oObject.bVertFlag) { cHTMLSyntax += ' '; } //--- / TABLE ---- cHTMLSyntax += '
'; } else { cHTMLSyntax += '
'; } cHTMLSyntax += ' '; cAtagAfter = ' '; } //***** ICON *************** cHTMLSyntax += ' '; //***** TEXT *************** cHTMLSyntax += ' '; //***** SUB MENU *********** cHTMLSyntax += '
'; if (oObject.child[i].cIcon != "") { cHTMLSyntax += cAtagBefore +' '+ cAtagAfter;; } else { cHTMLSyntax += ' '; } cHTMLSyntax += ' '; cHTMLSyntax += cAtagBefore + oObject.child[i].cText + cAtagAfter; cHTMLSyntax += ' '; if (oObject.child[i].child[0] != null) { //---- Arrow for submenu --------- if (oObject.bVertFlag) { cHTMLSyntax += cAtagBefore +' '+ cAtagAfter;; } else { cHTMLSyntax += cAtagBefore +' '+ cAtagAfter;; } } cHTMLSyntax += '
'; if (!oObject.bVertFlag) { cHTMLSyntax += '
'; //--- / DIV ---- if (ns4) { cHTMLSyntax += ''; } else { cHTMLSyntax += '
'; } /////////////////// // Create Childs Tables /////////////////////////////////// for(i=0 ; i < oObject.child.length ; i++) { if (oObject.child[i] != null) { cHTMLSyntax += MenuCreateSyntax(_cMenuID,oObject.child[i],oObject, i); } } } //---- Return the Syntax ----------------------------------------- return cHTMLSyntax; } function MenuCreateShadow(_oObject,_oParent) { var cHTMLSyntax = ''; var nHeight = 0; var nWidth = 0; var nChild = 0; var oMenuObject = GetMenuByID(_oObject.MenuID); nChild = _oObject.child.length; if (_oObject.bVertFlag) { nHeight = ((_oObject.nHeight + oMenuObject.nSizeCorrection) * nChild); nWidth = _oObject.nWidth; } else { nHeight = _oObject.nHeight; nWidth = ((_oObject.nWidth + oMenuObject.nSizeCorrection) * nChild); } cHTMLSyntax = '
(arrayOfString.length - 1)) { return null; } else { return arrayOfString[_nIndexElement]; } } function MenucountString(_cStringSource,subString) { var nPosOfChar = 0; var nCurrentIndex = 0; var cStringWork = _cStringSource; do { nPosOfChar = cStringWork.indexOf(subString); if(nPosOfChar > -1) { nCurrentIndex++; cStringWork = cStringWork.substring((nPosOfChar+1),(cStringWork.length)); } }while (nPosOfChar > -1); return nCurrentIndex; } function GetElement(_cID) { var doc; if (ns4) { eval('doc = document.' + _cID); if (! doc) { eval('doc = document.layers["'+_cID+'"]'); } } if (ns6 || opera) { doc = document.getElementById(_cID); } if (ie) { doc = document.all[_cID]; } return doc; } function GetElementStyle(_cID) { var doc; var doc2; if (ns4) { eval('doc = document.' + _cID); } if (ns6 || opera) { doc2 = document.getElementById(_cID); if(doc2) { doc = doc2.style; } } if (ie) { doc2 = document.all[_cID] if (doc2) { doc = doc2.style; } } return doc; } function OperaSetBGColor(_cID,_cColor) { var doc; if (_cColor != null) { doc = GetElementStyle(_cID); if (doc) { doc.backgroundColor = _cColor } } } function GetStartPos(_cID) { var doc; var nStartPosY; var nStartPosX; doc = GetElement(_cID); if (doc) { if (opera) { if (doc.style.pixelTop) { nStartPosY = doc.style.pixelTop; nStartPosX = doc.style.pixelLeft; } else { nStartPosX = 0; nStartPosY = 0; while (doc.offsetParent) { nStartPosX += doc.offsetLeft nStartPosY += doc.offsetTop; doc = doc.offsetParent; } } } if (ns4) { nStartPosY = doc.y; nStartPosX = doc.x; } if (ns6 || ie) { nStartPosY = doc.offsetTop; nStartPosX = doc.offsetLeft; } } return nStartPosX + 'x' + nStartPosY; } function ComputeRightPosition(_cMenuID,_cID) { var cParentID; var doc_Table; var cPos_Table; var nPosX_Table; var nPosY_Table; var doc_Elem; var nPosX_Elem; var nPosY_Elem; var oObject; var oObjectParent; var oMenuObject; var i; // Get Estimated Position oObject = MenuGetObject(_cMenuID,_cID); // Get Real Position if (! oObject.bValidatePositon || g_bAllowResizing) { // Get the Parent ID cParentID = ''; for (i=0 ; i < MenucountString(_cID,g_cIDSeparator) ; i++) { if (cParentID != '') { cParentID += g_cIDSeparator; } cParentID += MenuExtractString(_cID,i,g_cIDSeparator) } oObjectParent = MenuGetObject(_cMenuID,cParentID); oMenuObject = GetMenuByID(_cMenuID); if (oObjectParent.bVertFlag) { nPosX_Table = oObjectParent.X; nPosY_Table = oObject.Y; } else { nPosX_Table = oObject.X; nPosY_Table = oObjectParent.Y; } doc_Table = GetElementStyle('MNU'+g_cIDSeparator+ _cMenuID +g_cIDSeparator+ cParentID); cPos_Table = GetStartPos('MNU'+g_cIDSeparator+ _cMenuID +g_cIDSeparator+ cParentID); nPosX_Elem = parseInt(MenuExtractString(cPos_Table,0,'x')); nPosY_Elem = parseInt(MenuExtractString(cPos_Table,1,'x')); if (oObjectParent.bVertFlag) { nPosY_Elem += 2; } else { nPosX_Elem += 2; } oObjectParent = MenuGetObject(_cMenuID,cParentID); if (oObjectParent.child[0] != null) { for(i=0 ; i < oObjectParent.child.length ; i++) { if (oObjectParent.child[i].ID == _cID) { i = oObjectParent.child.length + 5; } else { doc_Elem = GetElement('MNU'+g_cIDSeparator+ _cMenuID +g_cIDSeparator+ oObjectParent.child[i].ID +g_cIDSeparator+'ELEMENT'); if (doc_Elem) { if (oObjectParent.bVertFlag) { nPosY_Elem += doc_Elem.offsetHeight; } else { nPosX_Elem += doc_Elem.offsetWidth; } } } } } // set the Right Position if (nPosX_Table != nPosX_Elem || nPosY_Table != nPosY_Elem) { if (oObjectParent.bVertFlag) { oObject.Y = nPosY_Elem; } else { oObject.X = nPosX_Elem; } // Update position of Child Table doc_Elem = GetElementStyle('MNU'+g_cIDSeparator+ _cMenuID +g_cIDSeparator+ _cID); if (doc_Elem) { doc_Elem.top = oObject.Y; doc_Elem.left = oObject.X; } // Update position of Child Table Shadow if (oMenuObject.bShadowFlag) { doc_Elem = GetElementStyle('MNU'+g_cIDSeparator+ _cMenuID +g_cIDSeparator+ _cID +g_cIDSeparator+'SHADOW'); if (doc_Elem) { doc_Elem.top = oObject.Y + oMenuObject.nShadowIncreaseVert + oMenuObject.nSizeCorrectionShadow; doc_Elem.left = oObject.X + oMenuObject.nShadowIncreaseHor + oMenuObject.nSizeCorrectionShadow; } } } // Update Size of Current Shadow if (oMenuObject.bShadowFlag) { doc_Table = GetElement('MNU'+g_cIDSeparator+ _cMenuID +g_cIDSeparator+ _cID); doc_Elem = GetElementStyle('MNU'+g_cIDSeparator+ _cMenuID +g_cIDSeparator+ _cID +g_cIDSeparator+'SHADOW'); if (doc_Elem) { doc_Elem.height = doc_Table.offsetHeight; doc_Elem.width = doc_Table.offsetWidth; } } } oObject.bValidatePositon = true; } function MenuConvertToRightID(_cID) { var cTempStr; cTempStr = _cID.replace(/-/gi,g_cIDSeparator); return cTempStr; } function MenuUnConvertToRightID(_cID) { var cTempStr; cTempStr = _cID.replace(/_/gi,'-'); return cTempStr; } function MenuWaitBeforeCreate() { var cTempPos = ''; var nStartPosX = 0; var nStartPosY = 0; cTempPos = GetStartPos(g_MainFieldForPosition); nStartPosX = parseInt(MenuExtractString(cTempPos,0,'x')); nStartPosY = parseInt(MenuExtractString(cTempPos,1,'x')); return nStartPosX; } function MenuScrollForElement(_oObject) { var nStartPos = 0; var nPageHeight = 0; ///////////////// // Start Pos ////////////////////////////// if (window.innerHeight) { nStartPos = window.pageYOffset; } else { nStartPos = document.body.scrollTop; } //////////////////////// // Get Page Height /////////////////////////////// if (ie || opera) { nPageHeight = document.body.clientHeight; } else { nPageHeight = window.innerHeight; } if(_oObject.Y <= (nStartPos + (_oObject.nHeight-5))) { g_nTopScrollPos = _oObject.Y - 10; MenuScrollTo(); return; } if(_oObject.Y >= (nStartPos + nPageHeight - (_oObject.nHeight * 2)) ) { g_nTopScrollPos = nStartPos + (_oObject.nHeight * 2); MenuScrollTo(); return; } g_nTopScrollPos = nStartPos; } function MenuScrollTo() { var nPos = 0; var nStep = 5; ///////////////// // Start Pos ////////////////////////////// if (window.innerHeight) { nPos = window.pageYOffset; } else { nPos = document.body.scrollTop; } if (Math.abs(nPos - g_nTopScrollPos) < nStep) { window.scroll( 0 , g_nTopScrollPos); g_bScrolling = false; } else { if(nPos > g_nTopScrollPos){ nPos -= nStep;} else {nPos += nStep;} g_bScrolling = true; window.scroll( 0 , nPos); setTimeout("MenuScrollTo()" , 100); } //document.all["test"].innerHTML = nPos + "-->" + g_nTopScrollPos; }