// Copyright tham chun-hong // email : tham123@yahoo.com // please give me give your comments // var items = new Array(); var parents = new Array(); var pageScrolls = new Array(); var createdChilds = new Array(); var mouseOuts = new Array(); var icount = 0; var itemHeight = 25; var itemWidth = 168; var subOffsetX = -20; var subOffsetY = 4; var mOverColor = '#949494'; var mOutColor = '#E6E6E6'; var maxChopWords = 18; var maxItemDisplay = 5; var layerPosX = 100; var layerPosY = 100; var curOverLayer = null; var mouseOutNum = 0; var backbutton = '/axiom/images/back.gif'; var morebutton = '/axiom/images/more.gif'; var hasChildbutton = '/axiom/images/s_arrow.gif'; function initProdGroupLayers() { var obj = document['imageProdGroup']; if (mac && obj == null) return; if (!mac && ie && document.getElementById('imageProdGroup') == null) return; if ((ns || ns6) && obj == null) return; getImagePos('imageProdGroup'); if (!mac) { layerPosX = (ie) ? imagePosX : imagePosX+1; layerPosY = (ie) ? imagePosY+8 : imagePosY+20; } else { layerPosX = imagePosX-18; layerPosY = imagePosY+20; } initDynFolder(); } function dataStruct(_level, _title, _uri) { this.title = _title; this.uri = _uri; this.level = _level; this.nlevel = null; this.hasChild = false; } function parentInfo(_size, _startX, _startY, _endX, _endY) { this.childSize = _size; this.startX = _startX; this.startY = _startY; this.endX = _endX; this.endY = _endY; this.exInfo = null; this.hasControl = false; this.first = null; this.middle = null; this.last = null; this.isActive = false; this.curPage = 1; } function moveLayerTo(x, y, child) { var p = null; if ((p=createdChilds[child]) == null) return; if (p.newlyr == null) p.create(); if (ns) { p.newlyr.top = y; p.newlyr.left = x; } else if (ie || ns6) { p.newlyr.style.top = y; p.newlyr.style.left = x; } } function addElement(level, title, uri) { var data = new dataStruct(level, title, uri); items[icount++] = data; } function initDynFolder() { var i = 0; var curLevel = 1; var levelStr = '1'; var curcount = 1; while (true) { for(i=0; i1 && items[i].level==items[i-1].level+1) { items[i-1].hasChild = true; levelStr = items[i-1].nlevel; curcount = 1; } items[i].nlevel = levelStr +'_'+ curcount; curcount++; } if (curcount == 1) break; curLevel++; curcount = 1; } paintData(getData('1'), '1'); var p = parents['1']; for (i=1; i<=p.childSize; i++) showLayer('clayer1_'+i); } function getMaxDivisor(val) { var ret = 0; var val2 = 0; while(true) { ret++; val2 = val - (maxItemDisplay * ret); if (val2 <= 0) return ret-1; } } function paintData(childs, nlevel) { var i=0; var count=0; var concat = ''; var pos = 0; var start = 0; var xoff = layerPosX; var yoff = 0; var dum = ''; var lyr = null; var lvl = null; var _dum = 0; while ((pos=nlevel.indexOf('_', start)) >= 0) { xoff += itemWidth + subOffsetX; start = pos+1; if ((pos=nlevel.indexOf('_', start)) >= 0) dum = nlevel.substring(start, pos); else dum = nlevel.substring(start); // if the previous parent has page control layers then // must collapse the current dum value to the correct // position. // if (lvl!=null && lvl!='' && parents[lvl].hasControl) { _dum = dum -1+1; _dum = _dum - (getMaxDivisor(_dum) * maxItemDisplay); yoff += _dum -2+1; } else yoff += dum -2+1; lvl = nlevel.substring(0, pos); count++; } if (nlevel != '1') yoff = (yoff * itemHeight) + (count * subOffsetY); yoff += layerPosY; count = 0; var num = yoff; var hasControl = false; var anchor1 = ''; var anchor2 = ''; if (nlevel!='1' && childs.length>maxItemDisplay) hasControl = true for (i=0; i'; anchor2 = ''; } if (parentHasChild(childs[i].nlevel)) lyr.setContent('
'); else lyr.setContent('
'); if (ie) { lyr.setMouseClick('childMouseClick'); lyr.setMouseOver('childMouseOver'); lyr.setMouseOut('childMouseOut'); } else if (ns || ns6) { lyr.setMouseOver(childMouseOver); lyr.setMouseOut(childMouseOut); } if (nlevel == '1') lyr.create(); createdChilds['clayer'+childs[i].nlevel] = lyr; num += itemHeight; count++; if (nlevel=='1' || maxItemDisplay==childs.length || count '); if (ie) lyr.setMouseOut('childMouseOut'); else if (ns || ns6) lyr.setMouseOut(childMouseOut); createdChilds['clayer'+nlevel+'_'+len] = lyr; num += itemHeight; count++; } var endpos = (itemHeight*maxItemDisplay)+yoff-1+1; pinfo = new parentInfo(len, xoff, yoff, xoff+itemWidth, endpos); // only if padding needed then do this else has been // incremented above. // if (len > childs.length) pageScrolls[nlevel].childSize++; } else pinfo = new parentInfo(childs.length, xoff, yoff, xoff+itemWidth, num); pinfo.hasControl = hasControl; parents[nlevel] = pinfo; } function makeControlLayers(id) { var clayers = new Array(3); var lyr = new DynamicLayer('cntlMiddle'+id, 'absolute', 0, 0, itemWidth, itemHeight, mOutColor); lyr.setVisible(false); if (ie) lyr.setMouseOut('childMouseOut'); else if (ns || ns6) lyr.setMouseOut(childMouseOut); lyr.setStyleClass('menulast'); lyr.setContent('
'); lyr.create(); clayers[1] = lyr; lyr = new DynamicLayer('cntlFirst'+id, 'absolute', 0, 0, itemWidth, itemHeight, mOutColor); lyr.setVisible(false); lyr.setStyleClass('menulast'); if (ie) lyr.setMouseOut('childMouseOut'); else if (ns || ns6) lyr.setMouseOut(childMouseOut); lyr.setContent('
'); lyr.create(); clayers[0] = lyr; lyr = new DynamicLayer('cntlLast'+id, 'absolute', 0, 0, itemWidth, itemHeight, mOutColor); lyr.setVisible(false); lyr.setStyleClass('menulast'); if (ie) lyr.setMouseOut('childMouseOut'); else if (ns || ns6) lyr.setMouseOut(childMouseOut); lyr.setContent('
'); lyr.create(); clayers[2] = lyr; return clayers; } function pageForward() { pageControl(1); } function pageBack() { pageControl(-1); } function pageControl(next) { var mx = mousePosX; var my = mousePosY; var f = null; var p = null; var i = 0; // find out what is the parent // for (f in pageScrolls) { p = pageScrolls[f]; if (!p.isActive) continue; if (mx>p.startX && my>p.startY && mx= pinfo.childSize) return 'last'; else if (curpage == 1) return 'first'; return 'middle'; } function childMouseOut(id) { mouseOuts[mouseOutNum] = window.setTimeout("cleanUp()", 2000); mouseOutNum++; } function childMouseClick(id) { var i = 0; var vid = id.substring(6); for(i=0; iparents[f].startX && my>parents[f].startY && mxp.startX && my>p.startY && mxparents['1'].startX && my>parents['1'].startY && mx= 0) start = pos+1; if (start==0) return null; return nlevel.substring(0, start-1); } function showLayer(child) { var p = null; if ((p=createdChilds[child]) == null) return; if (p.newlyr == null) p.create(); p.show(); } function hideLayer(child) { var p = null; if ((p=createdChilds[child]) == null) return; if (p.newlyr == null) p.create(); p.clear(); } function overColor(child) { curOverLayer = child; var p = null; if ((p=createdChilds[child]) == null) return; if (p.newlyr == null) p.create(); if (ns) p.newlyr.bgColor = mOverColor; else if (ie || ns6) p.newlyr.style.background = mOverColor; } function outColor(child) { var p = null; if ((p=createdChilds[child]) == null) return; if (p.newlyr == null) p.create(); if (ns) p.newlyr.bgColor = mOutColor; else if (ie || ns6) p.newlyr.style.background = mOutColor; } // convention : eg. pos = 1_4 means get all child data below level // 1 position number 4. pos = 1_4_1, same as above but one level // lower and at position 1. // function getData(pos) { var i = 0; var curcount = 1; var retcount = 0; var ret = new Array(); var dum = ''; for (i=0; i