[TEP-COMMIT] [CVS admin] introduce a new pull down navigation menu that replaces the infoboxes

hpdl-OfajU3CKLf1/[email protected] 25 Aug 2004 20:05:31 -0000
Newsgroups gmane.comp.web.oscommerce.cvs
Message-ID <[email protected]>
Commit in admin/admin on MAIN

external/jscookmenu/JSCookMenu.js +897 added 1.1

external/jscookmenu/ThemeOffice/arrow.gif [binary] added 1.1

/arrowdown.gif [binary] added 1.1

/blank.gif [binary] added 1.1

/copy.gif [binary] added 1.1

/copyshadow.gif [binary] added 1.1

/cut.gif [binary] added 1.1

/cutshadow.gif [binary] added 1.1

/help.gif [binary] added 1.1

/helpshadow.gif [binary] added 1.1

/new.gif [binary] added 1.1

/open.gif [binary] added 1.1

/openshadow.gif [binary] added 1.1

/paste.gif [binary] added 1.1

/pasteshadow.gif [binary] added 1.1

/save.gif [binary] added 1.1

/saveshadow.gif [binary] added 1.1

/spacer.gif [binary] added 1.1

/theme.css +292 added 1.1

/theme.js +45 added 1.1

templates/default.php +1 -10 1.1 -> 1.2

templates/default/header.php +94 -4 1.2 -> 1.3

/stylesheet.css +6 1.1 -> 1.2

templates/default/images/icons/16x16/2uparrow.png [binary] added 1.1

/attributes.png [binary] added 1.1

/classes.png [binary] added 1.1

/currencies.png [binary] added 1.1

/file_manager.png [binary] added 1.1

/oscommerce.png [binary] added 1.1

/relationships.png [binary] added 1.1

/remote.png [binary] added 1.1

/run.png [binary] added 1.1

/server_info.png [binary] added 1.1

/services.png [binary] added 1.1

/specials.png [binary] added 1.1

/statistics.png [binary] added 1.1

/status.png [binary] added 1.1

/wallet.png [binary] added 1.1

/weight.png [binary] added 1.1

/world.png [binary] added 1.1

/people.png [binary] 1.1 -> 1.2

+1335 -14

37 added + 4 modified, total 41 files

introduce a new pull down navigation menu that replaces the infoboxes

each menu entry will later be tied to an access level implementation

----------

admin /admin /external /jscookmenu

JSCookMenu.js added at 1.1

diff -N JSCookMenu.js
--- /dev/null Wed Aug 25 22:05:04 2004
+++ /tmp/cvsAAAzXaWkM Wed Aug 25 22:05:04 2004
@@ -0,0 +1,897 @@

+/*

+ JSCookMenu v1.25. (c) Copyright 2002 by Heng Yuan

+

+ Permission is hereby granted, free of charge, to any person obtaining a

+ copy of this software and associated documentation files (the "Software"),

+ to deal in the Software without restriction, including without limitation

+ the rights to use, copy, modify, merge, publish, distribute, sublicense,

+ and/or sell copies of the Software, and to permit persons to whom the

+ Software is furnished to do so, subject to the following conditions:

+

+ The above copyright notice and this permission notice shall be included

+ in all copies or substantial portions of the Software.

+

+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS

+ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,

+ ITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE

+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER

+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING

+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER

+ DEALINGS IN THE SOFTWARE.

+*/

+

+// Globals

+var _cmIDCount = 0;

+var _cmIDName = 'cmSubMenuID'; // for creating submenu id

+

+var _cmTimeOut = null; // how long the menu would stay

+var _cmCurrentItem = null; // the current menu item being selected;

+

+var _cmNoAction = new Object (); // indicate that the item cannot be hovered.

+var _cmSplit = new Object (); // indicate that the item is a menu split

+

+var _cmItemList = new Array (); // a simple list of items

+

+// default node properties

+var _cmNodeProperties =

+{

+ // main menu display attributes

+ //

+ // Note. When the menu bar is horizontal,

+ // mainFolderLeft and mainFolderRight are

+ // put in <span></span>. When the menu

+ // bar is vertical, they would be put in

+ // a separate TD cell.

+

+ // HTML code to the left of the folder item

+ mainFolderLeft: '',

+ // HTML code to the right of the folder item

+ mainFolderRight: '',

+ // HTML code to the left of the regular item

+ mainItemLeft: '',

+ // HTML code to the right of the regular item

+ mainItemRight: '',

+

+ // sub menu display attributes

+

+ // HTML code to the left of the folder item

+ folderLeft: '',

+ // HTML code to the right of the folder item

+ folderRight: '',

+ // HTML code to the left of the regular item

+ itemLeft: '',

+ // HTML code to the right of the regular item

+ itemRight: '',

+ // cell spacing for main menu

+ mainSpacing: 0,

+ // cell spacing for sub menus

+ subSpacing: 0,

+ // auto dispear time for submenus in milli-seconds

+ delay: 500

+};

+

+//////////////////////////////////////////////////////////////////////

+//

+// Drawing Functions and Utility Functions

+//

+//////////////////////////////////////////////////////////////////////

+

+//

+// produce a new unique id

+//

+function cmNewID ()

+{

+ return _cmIDName + (++_cmIDCount);

+}

+

+//

+// return the property string for the menu item

+//

+function cmActionItem (item, prefix, isMain, idSub, orient, nodeProperties)

+{

+ // var index = _cmItemList.push (item) - 1;

+ _cmItemList[_cmItemList.length] = item;

+ var index = _cmItemList.length - 1;

+ idSub = (!idSub) ? 'null' : ('\'' + idSub + '\'');

+ orient = '\'' + orient + '\'';

+ prefix = '\'' + prefix + '\'';

+ return ' onmouseover="cmItemMouseOver (this,' + prefix + ',' + isMain + ',' + idSub + ',' + orient + ',' + index + ')" onmouseout="cmItemMouseOut (this,' + nodeProperties.delay + ')" onmousedown="cmItemMouseDown (this,' + index + ')" onmouseup="cmItemMouseUp (this,' + index + ')"';

+}

+

+function cmNoActionItem (item, prefix)

+{

+ return item[1];

+}

+

+function cmSplitItem (prefix, isMain, vertical)

+{

+ var classStr = 'cm' + prefix;

+ if (isMain)

+ {

+ classStr += 'Main';

+ if (vertical)

+ classStr += 'HSplit';

+ else

+ classStr += 'VSplit';

+ }

+ else

+ classStr += 'HSplit';

+ var item = eval (classStr);

+ return cmNoActionItem (item, prefix);

+}

+

+//

+// draw the sub menu recursively

+//

+function cmDrawSubMenu (subMenu, prefix, id, orient, nodeProperties)

+{

+ var str = '<div class="' + prefix + 'SubMenu" id="' + id + '"><table summary="sub menu" cellspacing="' + nodeProperties.subSpacing + '" class="' + prefix + 'SubMenuTable">';

+ var strSub = '';

+

+ var item;

+ var idSub;

+ var hasChild;

+

+ var i;

+

+ var classStr;

+

+ for (i = 5; i < subMenu.length; ++i)

+ {

+ item = subMenu[i];

+ if (!item)

+ continue;

+

+ hasChild = (item.length > 5);

+ idSub = hasChild ? cmNewID () : null;

+

+ str += '<tr class="' + prefix + 'MenuItem"' + cmActionItem (item, prefix, 0, idSub, orient, nodeProperties) + '>';

+

+ if (item == _cmSplit)

+ {

+ str += cmSplitItem (prefix, 0, true);

+ str += '</tr>';

+ continue;

+ }

+

+ if (item[0] == _cmNoAction)

+ {

+ str += cmNoActionItem (item, prefix);

+ str += '</tr>';

+ continue;

+ }

+

+ classStr = prefix + 'Menu';

+ classStr += hasChild ? 'Folder' : 'Item';

+

+ str += '<td class="' + classStr + 'Left">';

+

+ if (item[0] != null && item[0] != _cmNoAction)

+ str += item[0];

+ else

+ str += hasChild ? nodeProperties.folderLeft : nodeProperties.itemLeft;

+

+ str += '<td class="' + classStr + 'Text">' + item[1];

+

+ str += '<td class="' + classStr + 'Right">';

+

+ if (hasChild)

+ {

+ str += nodeProperties.folderRight;

+ strSub += cmDrawSubMenu (item, prefix, idSub, orient, nodeProperties);

+ }

+ else

+ str += nodeProperties.itemRight;

+ str += '</td></tr>';

+ }

+

+ str += '</table></div>' + strSub;

+ return str;

+}

+

+//

+// The function that builds the menu inside the specified element id.

+//

+// @param id id of the element

+// orient orientation of the menu in [hv][ab][lr] format

+// menu the menu object to be drawn

+// nodeProperties properties for each menu node

+//

+function cmDraw (id, menu, orient, nodeProperties, prefix)

+{

+ var obj = cmGetObject (id);

+

+ if (!nodeProperties)

+ nodeProperties = _cmNodeProperties;

+ if (!prefix)

+ prefix = '';

+

+ var str = '<table summary="main menu" class="' + prefix + 'Menu" cellspacing="' + nodeProperties.mainSpacing + '">';

+ var strSub = '';

+

+ if (!orient)

+ orient = 'hbr';

+

+ var orientStr = String (orient);

+ var orientSub;

+ var vertical;

+

+ // draw the main menu items

+ if (orientStr.charAt (0) == 'h')

+ {

+ // horizontal menu

+ orientSub = 'v' + orientStr.substr (1, 2);

+ str += '<tr>';

+ vertical = false;

+ }

+ else

+ {

+ // vertical menu

+ orientSub = 'v' + orientStr.substr (1, 2);

+ vertical = true;

+ }

+

+ var i;

+ var item;

+ var idSub;

+ var hasChild;

+

+ var classStr;

+

+ for (i = 0; i < menu.length; ++i)

+ {

+ item = menu[i];

+

+ if (!item)

+ continue;

+

+ str += vertical ? '<tr' : '<td';

+ str += ' class="' + prefix + 'MainItem"';

+

+ hasChild = (item.length > 5);

+ idSub = hasChild ? cmNewID () : null;

+

+ str += cmActionItem (item, prefix, 1, idSub, orient, nodeProperties) + '>';

+

+ if (item == _cmSplit)

+ {

+ str += cmSplitItem (prefix, 1, vertical);

+ str += vertical? '</tr>' : '</td>';

+ continue;

+ }

+

+ if (item[0] == _cmNoAction)

+ {

+ str += cmNoActionItem (item, prefix);

+ str += vertical? '</tr>' : '</td>';

+ continue;

+ }

+

+ classStr = prefix + 'Main' + (hasChild ? 'Folder' : 'Item');

+

+ str += vertical ? '<td' : '<span';

+ str += ' class="' + classStr + 'Left">';

+

+ str += (item[0] == null) ? (hasChild ? nodeProperties.mainFolderLeft : nodeProperties.mainItemLeft)

+ : item[0];

+ str += vertical ? '</td>' : '</span>';

+

+ str += vertical ? '<td' : '<span';

+ str += ' class="' + classStr + 'Text">';

+ str += item[1];

+

+ str += vertical ? '</td>' : '</span>';

+

+ str += vertical ? '<td' : '<span';

+ str += ' class="' + classStr + 'Right">';

+

+ str += hasChild ? nodeProperties.mainFolderRight : nodeProperties.mainItemRight;

+

+ str += vertical ? '</td>' : '</span>';

+

+ str += vertical ? '</tr>' : '</td>';

+

+ if (hasChild)

+ strSub += cmDrawSubMenu (item, prefix, idSub, orientSub, nodeProperties);

+ }

+ if (!vertical)

+ str += '</tr>';

+ str += '</table>' + strSub;

+ obj.innerHTML = str;

+ //document.write ("<xmp>" + str + "</xmp>");

+}

+

+//////////////////////////////////////////////////////////////////////

+//

+// Mouse Event Handling Functions

+//

+//////////////////////////////////////////////////////////////////////

+

+//

+// action should be taken for mouse moving in to the menu item

+//

+function cmItemMouseOver (obj, prefix, isMain, idSub, orient, index)

+{

+ clearTimeout (_cmTimeOut);

+

+ if (!obj.cmPrefix)

+ {

+ obj.cmPrefix = prefix;

+ obj.cmIsMain = isMain;

+ }

+

+ var thisMenu = cmGetThisMenu (obj, prefix);

+

+ // insert obj into cmItems if cmItems doesn't have obj

+ if (!thisMenu.cmItems)

+ thisMenu.cmItems = new Array ();

+ var i;

+ for (i = 0; i < thisMenu.cmItems.length; ++i)

+ {

+ if (thisMenu.cmItems[i] == obj)

+ break;

+ }

+ if (i == thisMenu.cmItems.length)

+ {

+ //thisMenu.cmItems.push (obj);

+ thisMenu.cmItems[i] = obj;

+ }

+

+ // hide the previous submenu that is not this branch

+ if (_cmCurrentItem)

+ {

+ // occationally, we get this case when user

+ // move the mouse slowly to the border

+ if (_cmCurrentItem == thisMenu)

+ return;

+

+ var thatPrefix = _cmCurrentItem.cmPrefix;

+ var thatMenu = cmGetThisMenu (_cmCurrentItem, thatPrefix);

+ if (thatMenu != thisMenu.cmParentMenu)

+ {

+ if (_cmCurrentItem.cmIsMain)

+ _cmCurrentItem.className = thatPrefix + 'MainItem';

+ else

+ _cmCurrentItem.className = thatPrefix + 'MenuItem';

+ if (thatMenu.id != idSub)

+ cmHideMenu (thatMenu, thisMenu, thatPrefix);

+ }

+ }

+

+ // okay, set the current menu to this obj

+ _cmCurrentItem = obj;

+

+ // just in case, reset all items in this menu to MenuItem

+ cmResetMenu (thisMenu, prefix);

+

+ var item = _cmItemList[index];

+ var isDefaultItem = cmIsDefaultItem (item);

+

+ if (isDefaultItem)

+ {

+ if (isMain)

+ obj.className = prefix + 'MainItemHover';

+ else

+ obj.className = prefix + 'MenuItemHover';

+ }

+

+ if (idSub)

+ {

+ var subMenu = cmGetObject (idSub);

+ cmShowSubMenu (obj, prefix, subMenu, orient);

+ }

+

+ var descript = '';

+ if (item.length > 4)

+ descript = (item[4] != null) ? item[4] : (item[2] ? item[2] : descript);

+ else if (item.length > 2)

+ descript = (item[2] ? item[2] : descript);

+

+ window.defaultStatus = descript;

+}

+

+//

+// action should be taken for mouse moving out of the menu item

+//

+function cmItemMouseOut (obj, delayTime)

+{

+ if (!delayTime)

+ delayTime = _cmNodeProperties.delay;

+ _cmTimeOut = window.setTimeout ('cmHideMenuTime ()', delayTime);

+ window.defaultStatus = '';

+}

+

+//

+// action should be taken for mouse button down at a menu item

+//

+function cmItemMouseDown (obj, index)

+{

+ if (cmIsDefaultItem (_cmItemList[index]))

+ {

+ if (obj.cmIsMain)

+ obj.className = obj.cmPrefix + 'MainItemActive';

+ else

+ obj.className = obj.cmPrefix + 'MenuItemActive';

+ }

+}

+

+//

+// action should be taken for mouse button up at a menu item

+//

+function cmItemMouseUp (obj, index)

+{

+ var item = _cmItemList[index];

+

+ var link = null, target = '_self';

+

+ if (item.length > 2)

+ link = item[2];

+ if (item.length > 3 && item[3])

+ target = item[3];

+

+ if (link != null)

+ {

+ window.open (link, target);

+ }

+

+ var prefix = obj.cmPrefix;

+ var thisMenu = cmGetThisMenu (obj, prefix);

+

+ var hasChild = (item.length > 5);

+ if (!hasChild)

+ {

+ if (cmIsDefaultItem (item))

+ {

+ if (obj.cmIsMain)

+ obj.className = prefix + 'MainItem';

+ else

+ obj.className = prefix + 'MenuItem';

+ }

+ cmHideMenu (thisMenu, null, prefix);

+ }

+ else

+ {

+ if (cmIsDefaultItem (item))

+ {

+ if (obj.cmIsMain)

+ obj.className = prefix + 'MainItemHover';

+ else

+ obj.className = prefix + 'MenuItemHover';

+ }

+ }

+}

+

+//////////////////////////////////////////////////////////////////////

+//

+// Mouse Event Support Utility Functions

+//

+//////////////////////////////////////////////////////////////////////

+

+//

+// move submenu to the appropriate location

+//

+// @param obj the menu item that opens up the subMenu

+// subMenu the sub menu to be shown

+// orient the orientation of the subMenu

+//

+function cmMoveSubMenu (obj, subMenu, orient)

+{

+ var mode = String (orient);

+ var p = subMenu.offsetParent;

+ if (mode.charAt (0) == 'h')

+ {

+ if (mode.charAt (1) == 'b')

+ subMenu.style.top = (cmGetYAt (obj, p) + cmGetHeight (obj)) + 'px';

+ else

+ subMenu.style.top = (cmGetYAt (obj, p) - cmGetHeight (subMenu)) + 'px';

+ if (mode.charAt (2) == 'r')

+ subMenu.style.left = (cmGetXAt (obj, p)) + 'px';

+ else

+ subMenu.style.left = (cmGetXAt (obj, p) + cmGetWidth (obj) - cmGetWidth (subMenu)) + 'px';

+ }

+ else

+ {

+ if (mode.charAt (2) == 'r')

+ subMenu.style.left = (cmGetXAt (obj, p) + cmGetWidth (obj)) + 'px';

+ else

+ subMenu.style.left = (cmGetXAt (obj, p) - cmGetWidth (subMenu)) + 'px';

+ if (mode.charAt (1) == 'b')

+ subMenu.style.top = (cmGetYAt (obj, p)) + 'px';

+ else

+ subMenu.style.top = (cmGetYAt (obj, p) + cmGetHeight (obj) - cmGetHeight (subMenu)) + 'px';

+ }

+}

+

+//

+// show the subMenu w/ specified orientation

+// also move it to the correct coordinates

+//

+// @param obj the menu item that opens up the subMenu

+// subMenu the sub menu to be shown

+// orient the orientation of the subMenu

+//

+function cmShowSubMenu (obj, prefix, subMenu, orient)

+{

+ if (!subMenu.cmParentMenu)

+ {

+ // establish the tree w/ back edge

+ var thisMenu = cmGetThisMenu (obj, prefix);

+ subMenu.cmParentMenu = thisMenu;

+ if (!thisMenu.cmSubMenu)

+ thisMenu.cmSubMenu = new Array ();

+ //thisMenu.cmSubMenu.push (subMenu);

+ thisMenu.cmSubMenu[thisMenu.cmSubMenu.length] = subMenu;

+ }

+

+ // position the sub menu

+ cmMoveSubMenu (obj, subMenu, orient);

+ subMenu.style.visibility = 'visible';

+

+ //

+ // On IE, controls such as SELECT, OBJECT, IFRAME (before 5.5)

+ // are window based controls. So, if the sub menu and these

+ // controls overlap, sub menu would be hidden behind them. Thus

+ // one needs to turn the visibility of these controls off when the

+ // sub menu is showing, and turn their visibility back on

+ // when the sub menu is hiding.

+ //

+ if (document.all) // it is IE

+ {

+ /* part of Felix Zaslavskiy's fix on hiding controls

+ not really sure if this part is necessary, but shouldn't

+ hurt. */

+ if (!subMenu.cmOverlap)

+ subMenu.cmOverlap = new Array ();

+/*@cc_on @*/

+/*@if (@_jscript_version >= 5.5)

+@else @*/

+ cmHideControl ("IFRAME", subMenu);

+/*@end @*/

+ cmHideControl ("SELECT", subMenu);

+ cmHideControl ("OBJECT", subMenu);

+ }

+}

+

+//

+// reset all the menu items to class MenuItem in thisMenu

+//

+function cmResetMenu (thisMenu, prefix)

+{

+ if (thisMenu.cmItems)

+ {

+ var i;

+ var str;

+ var items = thisMenu.cmItems;

+ for (i = 0; i < items.length; ++i)

+ {

+ if (items[i].cmIsMain)

+ str = prefix + 'MainItem';

+ else

+ str = prefix + 'MenuItem';

+ if (items[i].className != str)

+ items[i].className = str;

+ }

+ }

+}

+

+//

+// called by the timer to hide the menu

+//

+function cmHideMenuTime ()

+{

+ if (_cmCurrentItem)

+ {

+ var prefix = _cmCurrentItem.cmPrefix;

+ cmHideMenu (cmGetThisMenu (_cmCurrentItem, prefix), null, prefix);

+ }

+}

+

+//

+// hide thisMenu, children of thisMenu, as well as the ancestor

+// of thisMenu until currentMenu is encountered. currentMenu

+// will not be hidden

+//

+function cmHideMenu (thisMenu, currentMenu, prefix)

+{

+ var str = prefix + 'SubMenu';

+

+ // hide the down stream menus

+ if (thisMenu.cmSubMenu)

+ {

+ var i;

+ for (i = 0; i < thisMenu.cmSubMenu.length; ++i)

+ {

+ cmHideSubMenu (thisMenu.cmSubMenu[i], prefix);

+ }

+ }

+

+ // hide the upstream menus

+ while (thisMenu && thisMenu != currentMenu)

+ {

+ cmResetMenu (thisMenu, prefix);

+ if (thisMenu.className == str)

+ {

+ thisMenu.style.visibility = 'hidden';

+ cmShowControl (thisMenu);

+ }

+ else

+ break;

+ thisMenu = cmGetThisMenu (thisMenu.cmParentMenu, prefix);

+ }

+}

+

+//

+// hide thisMenu as well as its sub menus if thisMenu is not

+// already hidden

+//

+function cmHideSubMenu (thisMenu, prefix)

+{

+ if (thisMenu.style.visibility == 'hidden')

+ return;

+ if (thisMenu.cmSubMenu)

+ {

+ var i;

+ for (i = 0; i < thisMenu.cmSubMenu.length; ++i)

+ {

+ cmHideSubMenu (thisMenu.cmSubMenu[i], prefix);

+ }

+ }

+ cmResetMenu (thisMenu, prefix);

+ thisMenu.style.visibility = 'hidden';

+ cmShowControl (thisMenu);

+}

+

+//

+// hide a control such as IFRAME

+//

+function cmHideControl (tagName, subMenu)

+{

+ var x = cmGetX (subMenu);

+ var y = cmGetY (subMenu);

+ var w = subMenu.offsetWidth;

+ var h = subMenu.offsetHeight;

+

+ var i;

+ for (i = 0; i < document.all.tags(tagName).length; ++i)

+ {

+ var obj = document.all.tags(tagName)[i];

+ if (!obj || !obj.offsetParent)

+ continue;

+

+ // check if the object and the subMenu overlap

+

+ var ox = cmGetX (obj);

+ var oy = cmGetY (obj);

+ var ow = obj.offsetWidth;

+ var oh = obj.offsetHeight;

+

+ if (ox > (x + w) || (ox + ow) < x)

+ continue;

+ if (oy > (y + h) || (oy + oh) < y)

+ continue;

+

+ // if object is already made hidden by a different

+ // submenu then we dont want to put it on overlap list of

+ // of a submenu a second time.

+ // - bug fixed by Felix Zaslavskiy

+ if(obj.style.visibility == "hidden")

+ continue;

+

+ //subMenu.cmOverlap.push (obj);

+ subMenu.cmOverlap[subMenu.cmOverlap.length] = obj;

+ obj.style.visibility = "hidden";

+ }

+}

+

+//

+// show the control hidden by the subMenu

+//

+function cmShowControl (subMenu)

+{

+ if (subMenu.cmOverlap)

+ {

+ var i;

+ for (i = 0; i < subMenu.cmOverlap.length; ++i)

+ subMenu.cmOverlap[i].style.visibility = "";

+ }

+ subMenu.cmOverlap = null;

+}

+

+//

+// returns the main menu or the submenu table where this obj (menu item)

+// is in

+//

+function cmGetThisMenu (obj, prefix)

+{

+ var str1 = prefix + 'SubMenu';

+ var str2 = prefix + 'Menu';

+ while (obj)

+ {

+ if (obj.className == str1 || obj.className == str2)

+ return obj;

+ obj = obj.parentNode;

+ }

+ return null;

+}

+

+//

+// return true if this item is handled using default handlers

+//

+function cmIsDefaultItem (item)

+{

+ if (item == _cmSplit || item[0] == _cmNoAction)

+ return false;

+ return true;

+}

+

+//

+// returns the object baring the id

+//

+function cmGetObject (id)

+{

+ if (document.all)

+ return document.all[id];

+ return document.getElementById (id);

+}

+

+//

+// functions that obtain the width of an HTML element.

+//

+function cmGetWidth (obj)

+{

+ var width = obj.offsetWidth;

+ if (width > 0 || !cmIsTRNode (obj))

+ return width;

+ if (!obj.firstChild)

+ return 0;

+ // use TABLE's length can cause an extra pixel gap

+ //return obj.parentNode.parentNode.offsetWidth;

+

+ // use the left and right child instead

+ return obj.lastChild.offsetLeft - obj.firstChild.offsetLeft + cmGetWidth (obj.lastChild);

+}

+

+//

+// functions that obtain the height of an HTML element.

+//

+function cmGetHeight (obj)

+{

+ var height = obj.offsetHeight;

+ if (height > 0 || !cmIsTRNode (obj))

+ return height;

+ if (!obj.firstChild)

+ return 0;

+ // use the first child's height

+ return obj.firstChild.offsetHeight;

+}

+

+//

+// functions that obtain the coordinates of an HTML element

+//

+function cmGetX (obj)

+{

+ var x = 0;

+

+ do

+ {

+ x += obj.offsetLeft;

+ obj = obj.offsetParent;

+ }

+ while (obj);

+ return x;

+}

+

+function cmGetXAt (obj, elm)

+{

+ var x = 0;

+

+ while (obj && obj != elm)

+ {

+ x += obj.offsetLeft;

+ obj = obj.offsetParent;

+ }

+ if (obj == elm)

+ return x;

+ return cmGetX (elm) - x;

+}

+

+function cmGetY (obj)

+{

+ var y = 0;

+ do

+ {

+ y += obj.offsetTop;

+ obj = obj.offsetParent;

+ }

+ while (obj);

+ return y;

+}

+

+function cmIsTRNode (obj)

+{

+ var tagName = obj.tagName;

+ return tagName == "TR" || tagName == "tr" || tagName == "Tr" || tagName == "tR";

+}

+

+//

+// get the Y position of the object. In case of TR element though,

+// we attempt to adjust the value.

+//

+function cmGetYAt (obj, elm)

+{

+ var y = 0;

+

+ if (!obj.offsetHeight && cmIsTRNode (obj))

+ {

+ var firstTR = obj.parentNode.firstChild;

+ obj = obj.firstChild;

+ y -= firstTR.firstChild.offsetTop;

+ }

+

+ while (obj && obj != elm)

+ {

+ y += obj.offsetTop;

+ obj = obj.offsetParent;

+ }

+

+ if (obj == elm)

+ return y;

+ return cmGetY (elm) - y;

+}

+

+//

+// debug function, ignore :)

+//

+function cmGetProperties (obj)

+{

+ if (obj == undefined)

+ return 'undefined';

+ if (obj == null)

+ return 'null';

+

+ var msg = obj + ':\n';

+ var i;

+ for (i in obj)

+ msg += i + ' = ' + obj[i] + '; ';

+ return msg;

+}

+

+/* JSCookMenu v1.25 1. fix Safari positioning issue. The problem is that all TR elements are located

+ at the top left corner. Thus, need to obtain the "virtual"

+ position of these element could be at.

+*/

+/* JSCookMenu v1.24 1. fix window based control hiding bug

+ thanks to Felix Zaslavskiy <felix-zO1NR/bJdShWk0Htik3J/[email protected]> for the fix.

+*/

+/* JSCookMenu v1.23 1. correct a position bug when the container is positioned.

+ thanks to Andre <[email protected]> for narrowing down

+ the problem.

+*/

+/* JSCookMenu v1.22 1. change Array.push (obj) call to Array[length] = obj.

+ Suggestion from Dick van der Kaaden <dick-vC41KeMJ74xmR6Xm/[email protected]> to

+ make the script compatible with IE 5.0

+ 2. Changed theme files a little to add z-index: 100 for sub

+ menus. This change is necessary for Netscape to avoid

+ a display problem.

+ 3. some changes to the DOM structure to make this menu working

+ on Netscape 6.0 (tested). The main reason is that NN6 does

+ not do absolute positioning with tables. Therefore an extra

+ div layer must be put around the table.

+*/

+/* JSCookMenu v1.21 1. fixed a bug that didn't add 'px' as part of coordinates.

+ JSCookMenu should be XHTML validator friendly now.

+ 2. removed unnecessary display attribute and corresponding

+ theme entry to fix a problem that Netscape sometimes

+ render Office theme incorrectly

+*/

+/* JSCookMenu v1.2. 1. fix the problem of showing status in Netscape

+ 2. changed the handler parameters a bit to allow

+ string literals to be passed to javascript based

+ links

+ 3. having null in target field would cause the link

+ to be opened in the current window, but this behavior

+ could change in the future releases

+*/

+/* JSCookMenu v1.1. added ability to hide controls in IE to show submenus properly */

+/* JSCookMenu v1.01. cmDraw generates XHTML code */

+/* JSCookMenu v1.0. (c) Copyright 2002 by Heng Yuan */

----------

admin /admin /external /jscookmenu /ThemeOffice

theme.css added at 1.1

diff -N theme.css
--- /dev/null Wed Aug 25 22:05:14 2004
+++ /tmp/cvsAAAxpairM Wed Aug 25 22:05:14 2004
@@ -0,0 +1,292 @@

+/* ThemeOfficeMenu Style Sheet */

+

+.ThemeOfficeMenu,.ThemeOfficeSubMenuTable

+{

+ font-family: verdana, arial, sans-serif;

+ font-size: 10px;

+

+ padding: 0;

+

+ white-space: nowrap;

+ cursor: default;

+}

+

+.ThemeOfficeSubMenu

+{

+ position: absolute;

+ visibility: hidden;

+

+ /*

+ Netscape/Mozilla renders borders by increasing

+ their z-index. The following line is necessary

+ to cover any borders underneath

+ */

+ z-index: 100;

+ border: 0;

+ padding: 0;

+

+ overflow: visible;

+ border: 1px solid #8C867B;

+

+ filter:progid:DXImageTransform.Microsoft.Shadow(color=#BDC3BD, Direction=135, Strength=4);

+}

+

+.ThemeOfficeSubMenuTable

+{

+ overflow: visible;

+}

+

+.ThemeOfficeMainItem,.ThemeOfficeMainItemHover,.ThemeOfficeMainItemActive,

+.ThemeOfficeMenuItem,.ThemeOfficeMenuItemHover,.ThemeOfficeMenuItemActive

+{

+ border: 0;

+ cursor: default;

+ white-space: nowrap;

+}

+

+.ThemeOfficeMainItem

+{

+ background-color: #EFEBDE;

+}

+

+.ThemeOfficeMainItemHover,.ThemeOfficeMainItemActive

+{

+ background-color: #C6D3EF;

+}

+

+.ThemeOfficeMenuItem

+{

+ background-color: WHITE;

+}

+

+.ThemeOfficeMenuItemHover,.ThemeOfficeMenuItemActive

+{

+ background-color: #C6D3EF;

+}

+

+

+/* horizontal main menu */

+

+.ThemeOfficeMainItem

+{

+ padding: 1px;

+ border: 0;

+}

+

+td.ThemeOfficeMainItemHover,td.ThemeOfficeMainItemActive

+{

+ padding: 0px;

+ border: 1px solid #3169C6;

+}

+

+.ThemeOfficeMainFolderLeft,.ThemeOfficeMainItemLeft,

+.ThemeOfficeMainFolderText,.ThemeOfficeMainItemText,

+.ThemeOfficeMainFolderRight,.ThemeOfficeMainItemRight

+{

+ background-color: inherit;

+}

+

+/* vertical main menu sub components */

+

+td.ThemeOfficeMainFolderLeft,td.ThemeOfficeMainItemLeft

+{

+ padding-top: 2px;

+ padding-bottom: 2px;

+ padding-left: 0px;

+ padding-right: 2px;

+

+ border-top: 1px solid #3169C6;

+ border-bottom: 1px solid #3169C6;

+ border-left: 1px solid #3169C6;

+

+ background-color: inherit;

+}

+

+td.ThemeOfficeMainFolderText,td.ThemeOfficeMainItemText

+{

+ padding-top: 2px;

+ padding-bottom: 2px;

+ padding-left: 5px;

+ padding-right: 5px;

+

+ border-top: 1px solid #3169C6;

+ border-bottom: 1px solid #3169C6;

+

+ background-color: inherit;

+ white-space: nowrap;

+}

+

+td.ThemeOfficeMainFolderRight,td.ThemeOfficeMainItemRight

+{

+ padding-top: 2px;

+ padding-bottom: 2px;

+ padding-left: 0px;

+ padding-right: 0px;

+

+ border-top: 1px solid #3169C6;

+ border-bottom: 1px solid #3169C6;

+ border-right: 1px solid #3169C6;

+

+ background-color: inherit;

+}

+

+tr.ThemeOfficeMainItem td.ThemeOfficeMainFolderLeft,

+tr.ThemeOfficeMainItem td.ThemeOfficeMainItemLeft

+{

+ padding-top: 3px;

+ padding-bottom: 3px;

+ padding-left: 1px;

+ padding-right: 2px;

+

+ white-space: nowrap;

+

+ border: 0;

+ background-color: inherit;

+}

+

+tr.ThemeOfficeMainItem td.ThemeOfficeMainFolderText,

+tr.ThemeOfficeMainItem td.ThemeOfficeMainItemText

+{

+ padding-top: 3px;

+ padding-bottom: 3px;

+ padding-left: 5px;

+ padding-right: 5px;

+

+ border: 0;

+ background-color: inherit;

+}

+

+tr.ThemeOfficeMainItem td.ThemeOfficeMainItemRight,

+tr.ThemeOfficeMainItem td.ThemeOfficeMainFolderRight

+{

+ padding-top: 3px;

+ padding-bottom: 3px;

+ padding-left: 0px;

+ padding-right: 1px;

+

+ border: 0;

+ background-color: inherit;

+}

+

+/* sub menu sub components */

+

+.ThemeOfficeMenuFolderLeft,.ThemeOfficeMenuItemLeft

+{

+ padding-top: 2px;

+ padding-bottom: 2px;

+ padding-left: 1px;

+ padding-right: 3px;

+

+ border-top: 1px solid #3169C6;

+ border-bottom: 1px solid #3169C6;

+ border-left: 1px solid #3169C6;

+

+ background-color: inherit;

+ white-space: nowrap;

+}

+

+.ThemeOfficeMenuFolderText,.ThemeOfficeMenuItemText

+{

+ padding-top: 2px;

+ padding-bottom: 2px;

+ padding-left: 5px;

+ padding-right: 5px;

+

+ border-top: 1px solid #3169C6;

+ border-bottom: 1px solid #3169C6;

+

+ background-color: inherit;

+ white-space: nowrap;

+}

+

+.ThemeOfficeMenuFolderRight,.ThemeOfficeMenuItemRight

+{

+ padding-top: 2px;

+ padding-bottom: 2px;

+ padding-left: 0px;

+ padding-right: 0px;

+

+ border-top: 1px solid #3169C6;

+ border-bottom: 1px solid #3169C6;

+ border-right: 1px solid #3169C6;

+

+ background-color: inherit;

+ white-space: nowrap;

+}

+

+.ThemeOfficeMenuItem .ThemeOfficeMenuFolderLeft,

+.ThemeOfficeMenuItem .ThemeOfficeMenuItemLeft

+{

+ padding-top: 3px;

+ padding-bottom: 3px;

+ padding-left: 2px;

+ padding-right: 3px;

+

+ white-space: nowrap;

+

+ border: 0;

+ background-color: #EFEFDE;

+}

+

+.ThemeOfficeMenuItem .ThemeOfficeMenuFolderText,

+.ThemeOfficeMenuItem .ThemeOfficeMenuItemText

+{

+ padding-top: 3px;

+ padding-bottom: 3px;

+ padding-left: 5px;

+ padding-right: 5px;

+

+ border: 0;

+ background-color: inherit;

+}

+

+.ThemeOfficeMenuItem .ThemeOfficeMenuFolderRight,

+.ThemeOfficeMenuItem .ThemeOfficeMenuItemRight

+{

+ padding-top: 3px;

+ padding-bottom: 3px;

+ padding-left: 0px;

+ padding-right: 1px;

+

+ border: 0;

+ background-color: inherit;

+}

+

+/* menu splits */

+

+.ThemeOfficeMenuSplit

+{

+ margin: 2px;

+ height: 1px;

+ overflow: hidden;

+ background-color: inherit;

+ border-top: 1px solid #C6C3BD;

+}

+

+/* image shadow animation */

+

+/*

+ seq1: image for normal

+ seq2: image for hover and active

+

+ To use, in the icon field, input the following:

+ <img class="seq1" src="normal.gif" /><img class="seq2" src="hover.gif" />

+*/

+

+.ThemeOfficeMenuItem img.seq1

+{

+ display: inline;

+}

+

+.ThemeOfficeMenuItemHover seq2,

+.ThemeOfficeMenuItemActive seq2

+{

+ display: inline;

+}

+

+.ThemeOfficeMenuItem .seq2,

+.ThemeOfficeMenuItemHover .seq1,

+.ThemeOfficeMenuItemActive .seq1

+{

+ display: none;

+}

----------

admin /admin /external /jscookmenu /ThemeOffice

theme.js added at 1.1

diff -N theme.js
--- /dev/null Wed Aug 25 22:05:14 2004
+++ /tmp/cvsAAAbzayrM Wed Aug 25 22:05:15 2004
@@ -0,0 +1,45 @@

+

+// directory of where all the images are

+var cmThemeOfficeBase = 'external/jscookmenu/ThemeOffice/';

+

+var cmThemeOffice =

+{

+ // main menu display attributes

+ //

+ // Note. When the menu bar is horizontal,

+ // mainFolderLeft and mainFolderRight are

+ // put in <span></span>. When the menu

+ // bar is vertical, they would be put in

+ // a separate TD cell.

+

+ // HTML code to the left of the folder item

+ mainFolderLeft: '&nbsp;',

+ // HTML code to the right of the folder item

+ mainFolderRight: '&nbsp;',

+ // HTML code to the left of the regular item

+ mainItemLeft: '&nbsp;',

+ // HTML code to the right of the regular item

+ mainItemRight: '&nbsp;',

+

+ // sub menu display attributes

+

+ // 0, HTML code to the left of the folder item

+ folderLeft: '<img alt="" src="' + cmThemeOfficeBase + 'spacer.gif">',

+ // 1, HTML code to the right of the folder item

+ folderRight: '<img alt="" src="' + cmThemeOfficeBase + 'arrow.gif">',

+ // 2, HTML code to the left of the regular item

+ itemLeft: '<img alt="" src="' + cmThemeOfficeBase + 'spacer.gif">',

+ // 3, HTML code to the right of the regular item

+ itemRight: '<img alt="" src="' + cmThemeOfficeBase + 'blank.gif">',

+ // 4, cell spacing for main menu

+ mainSpacing: 0,

+ // 5, cell spacing for sub menus

+ subSpacing: 0,

+ // 6, auto dispear time for submenus in milli-seconds

+ delay: 500

+};

+

+// for horizontal menu split

+var cmThemeOfficeHSplit = [_cmNoAction, '<td class="ThemeOfficeMenuItemLeft"></td><td colspan="2"><div class="ThemeOfficeMenuSplit"></div></td>'];

+var cmThemeOfficeMainHSplit = [_cmNoAction, '<td class="ThemeOfficeMainItemLeft"></td><td colspan="2"><div class="ThemeOfficeMenuSplit"></div></td>'];

+var cmThemeOfficeMainVSplit = [_cmNoAction, '|'];

----------

admin /admin /templates

default.php 1.1 -> 1.2

diff -u -r1.1 -r1.2
--- default.php 2004/07/22 23:24:59 1.1
+++ default.php 2004/08/25 20:05:15 1.2
@@ -32,16 +32,7 @@

<?php require('templates/default/header.php'); ?>

-<table border="0" width="100%" cellspacing="2" cellpadding="2">
- <tr>
- <td valign="top" width="125">
- <table border="0" width="100%" cellspacing="0" cellpadding="2" class="columnLeft">
- <?php require('includes/column_left.php'); ?>
- </table>
- </td>
- <td valign="top"><?php require('templates/pages/' . $page_contents); ?></td>
- </tr>
-</table>

+<div class="pageContents"><?php require('templates/pages/' . $page_contents); ?></div>

<?php require('templates/default/footer.php'); ?>

----------

admin /admin /templates /default

header.php 1.2 -> 1.3

diff -u -r1.2 -r1.3
--- header.php 2004/08/24 11:06:07 1.2
+++ header.php 2004/08/25 20:05:16 1.3
@@ -27,6 +27,91 @@

}
?>

+<script language="javascript" src="external/jscookmenu/JSCookMenu.js"></script>
+<link rel="stylesheet" href="external/jscookmenu/ThemeOffice/theme.css" type="text/css">
+<script language="javascript" src="external/jscookmenu/ThemeOffice/theme.js"></script>
+
+<script language="javascript"><!--
+<?php
+ echo 'var administrationMenu =' . "\n" .
+ '[' . "\n" .
+ ' [null, \'' . addslashes(BOX_HEADING_CONFIGURATION) . '\', null, null, null,' . "\n";
+
+ $Qgroups = $osC_Database->query('select configuration_group_id, configuration_group_title from :table_configuration_group where visible = 1 order by sort_order');
+ $Qgroups->bindTable(':table_configuration_group', TABLE_CONFIGURATION_GROUP);
+ $Qgroups->execute();
+
+ while ($Qgroups->next()) {
+ echo ' [\'' . tep_image('templates/' . $template . '/images/icons/16x16/configure.png') . '\', \'' . addslashes($Qgroups->value('configuration_group_title')) . '\', \'' . tep_href_link(FILENAME_CONFIGURATION, 'gID=' . $Qgroups->valueInt('configuration_group_id')) . '\', null, null],' . "\n";
+ }
+
+ echo ' [\'' . tep_image('templates/' . $template . '/images/icons/16x16/services.png') . '\', \'' . addslashes(BOX_CONFIGURATION_SERVICES) . '\', \'' . tep_href_link(FILENAME_SERVICES) . '\', null, null],' . "\n" .
+ ' [\'' . tep_image('templates/' . $template . '/images/icons/16x16/wallet.png') . '\', \'' . addslashes(BOX_CONFIGURATION_CREDIT_CARDS) . '\', \'' . tep_href_link(FILENAME_CREDIT_CARDS) . '\', null, null]' . "\n" .
+ ' ],' . "\n" .
+ ' _cmSplit,' . "\n" .
+ ' [null, \'' . addslashes(BOX_HEADING_CATALOG) . '\', null, null, null,' . "\n" .
+ ' [\'' . tep_image('templates/' . $template . '/images/icons/16x16/configure.png') . '\', \'' . addslashes(BOX_CATALOG_CATEGORIES_PRODUCTS) . '\', \'' . tep_href_link(FILENAME_CATEGORIES) . '\', null, null],' . "\n" .
+ ' [\'' . tep_image('templates/' . $template . '/images/icons/16x16/attributes.png') . '\', \'' . addslashes(BOX_CATALOG_CATEGORIES_PRODUCTS_ATTRIBUTES) . '\', \'' . tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES) . '\', \'\', null],' . "\n" .
+ ' [\'' . tep_image('templates/' . $template . '/images/icons/16x16/run.png') . '\', \'' . addslashes(BOX_CATALOG_MANUFACTURERS) . '\', \'' . tep_href_link(FILENAME_MANUFACTURERS) . '\', null, null],' . "\n" .
+ ' [\'' . tep_image('templates/' . $template . '/images/icons/16x16/write.png') . '\', \'' . addslashes(BOX_CATALOG_REVIEWS) . '\', \'' . tep_href_link(FILENAME_REVIEWS) . '\', null, null],' . "\n" .
+ ' [\'' . tep_image('templates/' . $template . '/images/icons/16x16/specials.png') . '\', \'' . addslashes(BOX_CATALOG_SPECIALS) . '\', \'' . tep_href_link(FILENAME_SPECIALS) . '\', null, null],' . "\n" .
+ ' [\'' . tep_image('templates/' . $template . '/images/icons/16x16/history.png') . '\', \'' . addslashes(BOX_CATALOG_PRODUCTS_EXPECTED) . '\', \'' . tep_href_link(FILENAME_PRODUCTS_EXPECTED) . '\', null, null]' . "\n" .
+ ' ],' . "\n" .
+ ' _cmSplit,' . "\n" .
+ ' [null, \'' . addslashes(BOX_HEADING_MODULES) . '\', null, null, null,' . "\n" .
+ ' [\'' . tep_image('templates/' . $template . '/images/icons/16x16/payment.png') . '\', \'' . addslashes(BOX_MODULES_PAYMENT) . '\', \'' . tep_href_link(FILENAME_MODULES, 'set=payment') . '\', null, null],' . "\n" .
+ ' [\'' . tep_image('templates/' . $template . '/images/icons/16x16/install.png') . '\', \'' . addslashes(BOX_MODULES_SHIPPING) . '\', \'' . tep_href_link(FILENAME_MODULES, 'set=shipping') . '\', null, null],' . "\n" .
+ ' [\'' . tep_image('templates/' . $template . '/images/icons/16x16/calculator.png') . '\', \'' . addslashes(BOX_MODULES_ORDER_TOTAL) . '\', \'' . tep_href_link(FILENAME_MODULES, 'set=ordertotal') . '\', null, null]' . "\n" .
+ ' ],' . "\n" .
+ ' _cmSplit,' . "\n" .
+ ' [null, \'' . addslashes(BOX_HEADING_CUSTOMERS) . '\', null, null, null,' . "\n" .
+ ' [\'' . tep_image('templates/' . $template . '/images/icons/16x16/people.png') . '\', \'' . addslashes(BOX_CUSTOMERS_CUSTOMERS) . '\', \'' . tep_href_link(FILENAME_CUSTOMERS) . '\', null, null],' . "\n" .
+ ' [\'' . tep_image('templates/' . $template . '/images/icons/16x16/orders.png') . '\', \'' . addslashes(BOX_CUSTOMERS_ORDERS) . '\', \'' . tep_href_link(FILENAME_ORDERS) . '\', null, null]' . "\n" .
+ ' ],' . "\n" .
+ ' _cmSplit,' . "\n" .
+ ' [null, \'' . addslashes(BOX_HEADING_LOCATION_AND_TAXES) . '\', null, null, null,' . "\n" .
+ ' [\'' . tep_image('templates/' . $template . '/images/icons/16x16/world.png') . '\', \'' . addslashes(BOX_TAXES_COUNTRIES) . '\', \'' . tep_href_link(FILENAME_COUNTRIES) . '\', null, null],' . "\n" .
+ ' [\'' . tep_image('templates/' . $template . '/images/icons/16x16/remote.png') . '\', \'' . addslashes(BOX_TAXES_ZONES) . '\', \'' . tep_href_link(FILENAME_ZONES) . '\', null, null],' . "\n" .
+ ' [\'' . tep_image('templates/' . $template . '/images/icons/16x16/relationships.png') . '\', \'' . addslashes(BOX_TAXES_GEO_ZONES) . '\', \'' . tep_href_link(FILENAME_GEO_ZONES) . '\', null, null],' . "\n" .
+ ' [\'' . tep_image('templates/' . $template . '/images/icons/16x16/classes.png') . '\', \'' . addslashes(BOX_TAXES_TAX_CLASSES) . '\', \'' . tep_href_link(FILENAME_TAX_CLASSES) . '\', null, null]' . "\n" .
+ ' ],' . "\n" .
+ ' _cmSplit,' . "\n" .
+ ' [null, \'' . addslashes(BOX_HEADING_LOCALIZATION) . '\', null, null, null,' . "\n" .
+ ' [\'' . tep_image('templates/' . $template . '/images/icons/16x16/currencies.png') . '\', \'' . addslashes(BOX_LOCALIZATION_CURRENCIES) . '\', \'' . tep_href_link(FILENAME_CURRENCIES) . '\', null, null],' . "\n" .
+ ' [\'' . tep_image('templates/' . $template . '/images/icons/16x16/locale.png') . '\', \'' . addslashes(BOX_LOCALIZATION_LANGUAGES) . '\', \'' . tep_href_link(FILENAME_LANGUAGES) . '\', null, null],' . "\n" .
+ ' [\'' . tep_image('templates/' . $template . '/images/icons/16x16/status.png') . '\', \'' . addslashes(BOX_LOCALIZATION_ORDERS_STATUS) . '\', \'' . tep_href_link(FILENAME_ORDERS_STATUS) . '\', null, null],' . "\n" .
+ ' [\'' . tep_image('templates/' . $template . '/images/icons/16x16/weight.png') . '\', \'' . addslashes(BOX_LOCALIZATION_WEIGHT_CLASSES) . '\', \'' . tep_href_link(FILENAME_WEIGHT_CLASSES) . '\', null, null]' . "\n" .
+ ' ],' . "\n" .
+ ' _cmSplit,' . "\n" .
+ ' [null, \'' . addslashes(BOX_HEADING_TOOLS) . '\', null, null, null,' . "\n" .
+ ' [\'' . tep_image('templates/' . $template . '/images/icons/16x16/tape.png') . '\', \'' . addslashes(BOX_TOOLS_BACKUP) . '\', \'' . tep_href_link(FILENAME_BACKUP) . '\', null, null],' . "\n" .
+ ' [\'' . tep_image('templates/' . $template . '/images/icons/16x16/windows.png') . '\', \'' . addslashes(BOX_TOOLS_BANNER_MANAGER) . '\', \'' . tep_href_link(FILENAME_BANNER_MANAGER) . '\', \'\', null],' . "\n" .
+ ' [\'' . tep_image('templates/' . $template . '/images/icons/16x16/log.png') . '\', \'' . addslashes(BOX_TOOLS_CACHE) . '\', \'' . tep_href_link(FILENAME_CACHE) . '\', null, null],' . "\n" .
+ ' [\'' . tep_image('templates/' . $template . '/images/icons/16x16/locale.png') . '\', \'' . addslashes(BOX_TOOLS_DEFINE_LANGUAGE) . '\', \'' . tep_href_link(FILENAME_DEFINE_LANGUAGE) . '\', null, null],' . "\n" .
+ ' [\'' . tep_image('templates/' . $template . '/images/icons/16x16/file_manager.png') . '\', \'' . addslashes(BOX_TOOLS_FILE_MANAGER) . '\', \'' . tep_href_link(FILENAME_FILE_MANAGER) . '\', null, null],' . "\n" .
+ ' [\'' . tep_image('templates/' . $template . '/images/icons/16x16/email_send.png') . '\', \'' . addslashes(BOX_TOOLS_NEWSLETTER_MANAGER) . '\', \'' . tep_href_link(FILENAME_NEWSLETTERS) . '\', null, null],' . "\n" .
+ ' [\'' . tep_image('templates/' . $template . '/images/icons/16x16/server_info.png') . '\', \'' . addslashes(BOX_TOOLS_SERVER_INFO) . '\', \'' . tep_href_link(FILENAME_SERVER_INFO) . '\', null, null],' . "\n" .
+ ' [\'' . tep_image('templates/' . $template . '/images/icons/16x16/statistics.png') . '\', \'' . addslashes(BOX_REPORTS_STATISTICS) . '\', \'' . tep_href_link(FILENAME_STATISTICS) . '\', null, null],' . "\n" .
+ ' [\'' . tep_image('templates/' . $template . '/images/icons/16x16/people.png') . '\', \'' . addslashes(BOX_TOOLS_WHOS_ONLINE) . '\', \'' . tep_href_link(FILENAME_WHOS_ONLINE) . '\', null, null]' . "\n" .
+ ' ]' . "\n" .
+ '];' . "\n" .
+ 'var infoMenu =' . "\n" .
+ '[' . "\n" .
+ ' [null, \'' . addslashes(HEADER_TITLE_SUPPORT_SITE) . '\', \'http://www.oscommerce.com\', \'_blank\', null,' . "\n" .
+ ' [\'' . tep_image('templates/' . $template . '/images/icons/16x16/oscommerce.png') . '\', \'Support Site\', \'http://www.oscommerce.com\', \'_blank\', null],' . "\n" .
+ ' [\'' . tep_image('templates/' . $template . '/images/icons/16x16/log.png') . '\', \'Knowledge Base\', \'http://www.oscommerce.info\', \'_blank\', null],' . "\n" .
+ ' [\'' . tep_image('templates/' . $template . '/images/icons/16x16/people.png') . '\', \'Community Forums\', \'http://forums.oscommerce.com\', \'_blank\', null],' . "\n" .
+ ' [\'' . tep_image('templates/' . $template . '/images/icons/16x16/run.png') . '\', \'Contributions\', \'http://www.oscommerce.com/community/contributions\', \'_blank\', null],' . "\n" .
+ ' [\'' . tep_image('templates/' . $template . '/images/icons/16x16/configure.png') . '\', \'Bug Reporter\', \'http://www.oscommerce.com/community/bugs\', \'_blank\', null]' . "\n" .
+ ' ],' . "\n" .
+ ' _cmSplit,' . "\n" .
+ ' [null, \'' . addslashes(HEADER_TITLE_ONLINE_CATALOG) . '\', \'' . tep_catalog_href_link() . '\', \'_blank\', null],' . "\n" .
+ ' _cmSplit,' . "\n" .
+ ' [null, \'' . tep_draw_form('languages', FILENAME_DEFAULT, '', 'get') . tep_draw_pull_down_menu('language', $languages_array, $languages_selected, 'onChange="this.form.submit();"') . '</form>' . '\', null, null, null]' . "\n" .
+ '];' . "\n";
+?>
+--></script>
+

<table border="0" width="100%" cellspacing="0" cellpadding="0">
<tr>
<td><?php echo '<a href="' . tep_href_link(FILENAME_DEFAULT) . '">' . tep_image(DIR_WS_IMAGES . 'oscommerce.gif', 'osCommerce', '204', '50') . '</a>'; ?></td>

@@ -42,9 +127,14 @@

</tr>
</table>

-<table border="0" width="100%" cellspacing="0" cellpadding="0">
- <tr class="headerBar">
- <td class="headerBarContent">&nbsp;&nbsp;<?php echo '<a href="' . tep_href_link(FILENAME_DEFAULT) . '" class="headerLink">' . HEADER_TITLE_TOP . '</a>'; ?></td>
- <td class="headerBarContent" align="right"><?php echo '<a href="http://www.oscommerce.com" class="headerLink">' . HEADER_TITLE_SUPPORT_SITE . '</a> &nbsp;|&nbsp; <a href="' . tep_catalog_href_link() . '" class="headerLink">' . HEADER_TITLE_ONLINE_CATALOG . '</a> &nbsp;|&nbsp; ' . tep_draw_form('languages', FILENAME_DEFAULT, '', 'get') . tep_draw_pull_down_menu('language', $languages_array, $languages_selected, 'onChange="this.form.submit();"') . '</form>'; ?>&nbsp;&nbsp;</td>

+<table border="0" width="100%" cellspacing="0" cellpadding="0" class="ThemeOfficeMainItem">
+ <tr>
+ <td id="administrationMenuID"></td>
+ <td align="right" id="infoMenuID"></td>

</tr>
</table>

+
+<script language="javascript"><!--
+ cmDraw('administrationMenuID', administrationMenu, 'hbr', cmThemeOffice, 'ThemeOffice');
+ cmDraw('infoMenuID', infoMenu, 'hbr', cmThemeOffice, 'ThemeOffice');
+--></script>

----------

admin /admin /templates /default

stylesheet.css 1.1 -> 1.2

diff -u -r1.1 -r1.2
--- stylesheet.css 2004/07/22 23:25:00 1.1
+++ stylesheet.css 2004/08/25 20:05:16 1.2
@@ -9,6 +9,12 @@

Released under the GNU General Public License
*/

+/* page contents */
+
+.pageContents {
+ padding: 10px;
+}
+

/* links */
a:link { font-family: Verdana, Arial, sans-serif; font-size: 10px; color: #000000; font-weight: normal; text-decoration: none; }
a:visited { font-family: Verdana, Arial, sans-serif; font-size: 10px; color: #000000; font-weight: normal; text-decoration: none; }

CVSspam 0.2.9

-------------------------------------------------------
SF.Net email is sponsored by Shop4tech.com-Lowest price on Blank Media
100pk Sonic DVD-R 4x for only $29 -100pk Sonic DVD+R for only $33
Save 50% off Retail on Ink & Toner - Free Shipping and Free Gift.
http://www.shop4tech.com/z/Inkjet_Cartridges/9_108_r285