// Licensed Materials - Property of IBM // // IBM Cognos Products: pps // // (C) Copyright IBM Corp. 2005, 2017 // // US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp. var CHART_TYPE_PIE = 1; var CHART_TYPE_CORRELATION = 12; //Xtab components var XTABOBJ_TYPE_NOTHING = 0; var XTABOBJ_TYPE_LEVEL_SELECTOR = 1; var XTABOBJ_TYPE_NEST_ZONE = 2; var XTABOBJ_TYPE_CAT_HEADER = 3; var XTABOBJ_TYPE_CAT_HEADER_MEASURE = 4; var XTABOBJ_TYPE_MEASURE_CELL = 6; var XTABOBJ_TYPE_DATA_CELL = 7; var XTABOBJ_TYPE_FORCE_CANT_DROP = 8; var xtabDragCursor = null; var xtabDragCursorOffsetTop = 17; var xtabDragCursorOffsetLeft = 1; var xtabCursorIMGHeight = 20; var xtabCursorIMGWidth = 20; var xtabDragCursorArray = null; var XTAB_DRAG_DELAY_COUNT = 3; var XTAB_NO_DRAG = -1; var isXtabDragging = XTAB_NO_DRAG; var dragObj = null; //Ugly but necessary to improve browser performance var XTAB_DRAG_SELECTION_CHANGE_COUNT = 2; var xtabDragPreviousSelection = null; var xtabDragSelectionChangeCounter = XTAB_NO_DRAG; var xtabNestBetweenDiv; var XTAB_NEST_DIV_THICKNESS = 5; var XTAB_NEST_BETWEEN_NONE = 0; var XTAB_NEST_BETWEEN_BEFORE = 1; var XTAB_NEST_BETWEEN_AFTER = 2; var xtabNestBetweenLoc = XTAB_NEST_BETWEEN_NONE; var xtabDivOverObj = null; function onXtabDragStart(event) { if (!topparent.allFramesInitialized()) return; if (PP_ContextPopUpcss) PP_ContextPopUpcss.style.visibility = "hidden"; var eventM = new eventManager(event); obj = bubbletoXtabDragAndDropSensitiveObject(eventM.getSrc()); if (!obj) return false; var objType = getXtabObjType(obj); //We can't drag a nest zone, so bubble top the parent cell if (objType == XTABOBJ_TYPE_NEST_ZONE) obj = bubbletoXtabDragAndDropSensitiveObject(obj.parentNode); if (objType != XTABOBJ_TYPE_MEASURE_CELL && objType != XTABOBJ_TYPE_DATA_CELL && objType != XTABOBJ_TYPE_NOTHING && objType != XTABOBJ_TYPE_FORCE_CANT_DROP) { eventM.cancelBubble(); isXtabDragging = XTAB_DRAG_DELAY_COUNT; dragObj = obj; document.body.onmousemove = onXtabDragMove; document.body.onmouseover = onXtabDragEnter; document.body.onmouseout = onXtabDragLeave; } } function doDragStart(event, obj) { topparent.getGlobal("dndManager").setXtabElementDrag(obj); var target = bubbletoXtabDragAndDropSensitiveObject(obj); displayDragCursor(event, target); moveDragCursor(event); setDragCursor(event, target); onXtabDragEnter(event, obj); } function onXtabDragDrop(event) { if (!topparent.allFramesInitialized()) return; isXtabDragging = XTAB_NO_DRAG; document.body.onmousemove = null; document.body.onmouseover = null; document.body.onmouseout = null; onXtabDragLeave(event); if (topparent.getGlobal("dndManager").isXtabElementDragging) { var eventM = new eventManager(event); eventM.cancelBubble(); var source = topparent.getGlobal("dndManager").getData(); var sourceType = getXtabObjType(source); topparent.getGlobal("dndManager").cancelDrag(); hideDragCursor(); var target = eventM.getSrc(); if (eventM.getSrc().id == "xtabNestBetweenHeadersDiv") { makeReorderCategoryCommand(source, xtabDivOverObj); return true; } target = bubbletoXtabDragAndDropSensitiveObject(eventM.getSrc()); if (!source || !canDrop(source, target)) return false; var targetType = getXtabObjType(target); var sourceType = getXtabObjType(source); var ctrlPressed = (topparent.getGlobal("MacGecko"))? eventM.theEvent.altKey : eventM.theEvent.ctrlKey; //Drag and drop behavior if (isValidCategoryReordering(source, target)) { makeReorderCategoryCommand(source, target); } else if (targetType == XTABOBJ_TYPE_LEVEL_SELECTOR || targetType == XTABOBJ_TYPE_CAT_HEADER || targetType == XTABOBJ_TYPE_CAT_HEADER_MEASURE) { if (!ctrlPressed) swapLevels(source, target); else replaceLevel(source, target); } else if (targetType == XTABOBJ_TYPE_NEST_ZONE) { if (!ctrlPressed) moveLevelasNest(source, target); else moveCopyOfLevelasNest(source, target); } else if (targetType == XTABOBJ_TYPE_NOTHING) { if (sourceType == XTABOBJ_TYPE_LEVEL_SELECTOR) deleteXtabLevel(source); } } } function canDrop(source, target) { var targetType = getXtabObjType(target); var sourceType = getXtabObjType(source); if (targetType == XTABOBJ_TYPE_FORCE_CANT_DROP) return false; if (targetType == XTABOBJ_TYPE_DATA_CELL || targetType == XTABOBJ_TYPE_MEASURE_CELL) return false; if (targetType != XTABOBJ_TYPE_NOTHING) { sourceLevel = getLevelSelector(source); targetLevel = getLevelSelector(target); if (sourceLevel == targetLevel && targetType != XTABOBJ_TYPE_NEST_ZONE && !isValidCategoryReordering(source, target)) return false; } else { if (sourceType == XTABOBJ_TYPE_LEVEL_SELECTOR) { source = getLevelSelector(source); var totalLevels = numRowLevels; if (source.id.charAt(1) == "c") totalLevels = numColLevels; if (totalLevels == 1) return false; } else return false; } return true; } //Required for highlighting function onXtabDragEnter(event) { if (topparent.getGlobal("dndManager").isXtabElementDragging) { var eventM = new eventManager(event); eventM.cancelBubble(); if (xtabDragSelectionChangeCounter == XTAB_NO_DRAG) xtabDragSelectionChangeCounter = XTAB_DRAG_SELECTION_CHANGE_COUNT; setDragCursor(event, bubbletoXtabDragAndDropSensitiveObject(eventM.getSrc())); if (xtabDragCursor.src == xtabDragCursorArray[2].src) //Most efficient way to check hideXtabDragNestBetweenDiv(); } return false; } function onXtabDragLeave(event) { if (topparent.getGlobal("dndManager").isXtabElementDragging) { var eventM = new eventManager(event); eventM.cancelBubble(); if (eventM.theEvent.clientX < 0 || eventM.theEvent.clientY < 0) hideDragCursor(); if (xtabDragSelectionChangeCounter == XTAB_NO_DRAG) xtabDragSelectionChangeCounter = XTAB_DRAG_SELECTION_CHANGE_COUNT; xtabDragCursor.src = xtabDragCursorArray[0].src; } return false; } function isSameSelection(oldObj, newObj) { if (!oldObj) return false; else if (getXtabObjType(oldObj) != getXtabObjType(newObj)) return false; else if (isValidCategoryReordering(topparent.getGlobal("dndManager").getData(),newObj)) return false; else return (getLevelSelector(oldObj).id == getLevelSelector(newObj).id) } function isValidCategoryReordering(source, target) { var dType = 0; var sourceType = getXtabObjType(source); var targetType = getXtabObjType(target); fh = topparent.getXtabFrame().document.fhidden; if (fh) { if (fh.Y) dType = fh.Y.value; if (fh.YS) dType = fh.YS.value; if (dType == CHART_TYPE_PIE || dType == CHART_TYPE_CORRELATION) return false; } if (source == target) return false; if ((sourceType != XTABOBJ_TYPE_CAT_HEADER_MEASURE && sourceType != XTABOBJ_TYPE_CAT_HEADER) || (targetType != XTABOBJ_TYPE_CAT_HEADER_MEASURE && targetType != XTABOBJ_TYPE_CAT_HEADER)) return false; if (source.getAttribute("calculation") != null) { //Calculation, so simply ensure we are not dropping on a non-moved calculation, and //we are dropping in the same dimension. And this isn't a forecast. if (source.getAttribute("calculation_moved") != "true") return false; if (source.getAttribute("forecast") == "true") return false; if (target.getAttribute("calculation") != null && target.getAttribute("calculation_moved") != "true") return false; if (source.getAttribute("dimIdx") != target.getAttribute("dimIdx")) return false; if (target.getAttribute("summary")) return false; } else { if (topparent.getGlobal("gDimensionInfo[" + source.getAttribute("dimIdx") + "]").isTimeDimension) return false; if (target.getAttribute("calculation") != null) { if (target.getAttribute("calculation_moved") != "true") return false; } if (source.getAttribute("parent_id") != target.getAttribute("parent_id")) return false; if (getLevelSelector(source) != getLevelSelector(target)) return false; if (target.getAttribute("summary")) return false; if (getLevelSelector(source).id.charAt(2) == '0') //top level so return true return true; var sourceParent = xtabCache.getRowColHeaderParent(parseRowId(source.id),parseColId(source.id)); var targetParent = xtabCache.getRowColHeaderParent(parseRowId(target.id),parseColId(target.id)); if (!sourceParent || !targetParent || sourceParent != targetParent) return false; } return true; } function onXtabDragMove(event) { if (typeof event == "undefined") event = window.event; var eventM = new eventManager(event); eventM.cancelBubble(); if (topparent.getGlobal("nn7")) { var selection = window.getSelection(); if (selection && selection.toString().length) selection.removeAllRanges(); } if (isXtabDragging != XTAB_NO_DRAG) { if (isXtabDragging) isXtabDragging--; else { if (!topparent.getGlobal("dndManager").isXtabElementDragging) { doDragStart(event, dragObj); } moveDragCursor(event); if (xtabDragSelectionChangeCounter != XTAB_NO_DRAG) { var src = bubbletoXtabDragAndDropSensitiveObject(eventM.getSrc()); if (xtabDragSelectionChangeCounter) { if (isSameSelection(xtabDragPreviousSelection,src)) //If we return to the same selection, stop the countdown xtabDragSelectionChangeCounter = XTAB_NO_DRAG; else xtabDragSelectionChangeCounter--; } else { if (!isSameSelection(xtabDragPreviousSelection,src)) { XtabDragSelection(event, xtabDragPreviousSelection, false); XtabDragSelection(event, src, true); xtabDragSelectionChangeCounter = XTAB_NO_DRAG; } } } } } return false; } function XtabDragSelection(event, obj, selecting) { var source = topparent.getGlobal("dndManager").getData(); if (!obj || !canDrop(source, obj)) { if (selecting) xtabDragPreviousSelection = null; return false; } hideXtabDragNestBetweenDiv(); var objType = getXtabObjType(obj); var source = topparent.getGlobal("dndManager").getData(); if (objType != XTABOBJ_TYPE_NOTHING && objType != XTABOBJ_TYPE_MEASURE_CELL && objType != XTABOBJ_TYPE_DATA_CELL) { var level = getLevel(obj.getAttribute("type"),obj); if ((objType == XTABOBJ_TYPE_CAT_HEADER || objType == XTABOBJ_TYPE_CAT_HEADER_MEASURE) && (getXtabObjType(source) == XTABOBJ_TYPE_CAT_HEADER || getXtabObjType(source) == XTABOBJ_TYPE_CAT_HEADER_MEASURE) && isValidCategoryReordering(source, obj)) { if (selecting) showXtabDragNestBetweenDiv(event, obj); } else if (objType == XTABOBJ_TYPE_LEVEL_SELECTOR || objType == XTABOBJ_TYPE_CAT_HEADER || objType == XTABOBJ_TYPE_CAT_HEADER_MEASURE) { deselectAllXtab(event); var rc = obj.getAttribute("type"); if (objType == XTABOBJ_TYPE_LEVEL_SELECTOR) rc = obj.getAttribute("type").charAt(1); xtabCache.dragOverLevel(rc,level,selecting); } else if (objType == XTABOBJ_TYPE_NEST_ZONE) { deselectAllXtab(event); if (selecting) { if (obj.getAttribute("type").charAt(0) == "r") onDragOverRowNestZone(null, level); else onDragOverColNestZone(null, level); } else { if (obj.getAttribute("type").charAt(0) == "r") onDragLeaveRowNestZone(level); else onDragLeaveColNestZone(level) } } if (selecting) xtabDragPreviousSelection = obj; } else if (selecting) { xtabDragPreviousSelection = null; } } function bubbletoXtabDragAndDropSensitiveObject(obj) { var target = obj; if (!obj) return null; try { if ((!obj.getAttribute || !obj.getAttribute("type") || obj.getAttribute("type") == "") && obj.id != "xtab" && obj.tagName != "AREA") target = bubbletoDragAndDropSensitiveObject( obj.parentNode ); } catch (err) {} return target; } function getXtabObjType(obj) { if (!obj || !obj.getAttribute) return XTABOBJ_TYPE_NOTHING; if (obj.id == "xtab") return XTABOBJ_TYPE_FORCE_CANT_DROP; var type = obj.getAttribute("type"); if (type == "d" || obj.tagName == "AREA") return XTABOBJ_TYPE_DATA_CELL; else if (type == "r" || type == "c") { if (obj.getAttribute && obj.getAttribute("dimIdx") && topparent.getGlobal("gDimensionInfo[" + obj.getAttribute("dimIdx") + "]").isMeasureDimension) return XTABOBJ_TYPE_CAT_HEADER_MEASURE; else { return XTABOBJ_TYPE_CAT_HEADER; } } else if (type == "rn" || type == "cn") return XTABOBJ_TYPE_NEST_ZONE; else if (type == "m") return XTABOBJ_TYPE_MEASURE_CELL; else if (type.indexOf("lr") >= 0 || type.indexOf("lc") >= 0) return XTABOBJ_TYPE_LEVEL_SELECTOR; else return XTABOBJ_TYPE_NOTHING; } function displayDragCursor(event, obj) { var eventM = new eventManager(event); eventM.cancelBubble(); xtabDragCursor.style.height = xtabCursorIMGHeight; xtabDragCursor.style.width = xtabCursorIMGWidth; xtabDragCursor.style.visibility = "visible"; xtabDragCursorDisplayed = true; } function setDragCursor(event, obj) { if (xtabDragCursor.style.visibility == "hidden") { displayDragCursor(event, obj); } var target = obj; var source = topparent.getGlobal("dndManager").getData(); var targetType = getXtabObjType(target); var sourceType = getXtabObjType(source); var eventM = new eventManager(event); var ctrlPressed = (topparent.getGlobal("MacGecko"))? eventM.theEvent.altKey : eventM.theEvent.ctrlKey; if (!canDrop(source, target)) { xtabDragCursor.src = xtabDragCursorArray[2].src; } else if (targetType == XTABOBJ_TYPE_NEST_ZONE || (ctrlPressed && targetType != XTABOBJ_TYPE_NOTHING)) xtabDragCursor.src = xtabDragCursorArray[1].src; else xtabDragCursor.src = xtabDragCursorArray[0].src; } function hideDragCursor() { xtabDragCursor.style.visibility = "hidden"; xtabDragCursor.style.height = 0; xtabDragCursor.style.width = 0; xtabDragCursor.style.top = 0; xtabDragCursor.style.left = 0; xtabDragCursorDisplayed = false; } function moveDragCursor(event) { var eventM = new eventManager(event); eventM.cancelBubble(); xtabDragCursor.style.top = eventM.theEvent.clientY + xtabDragCursorOffsetTop; xtabDragCursor.style.left = eventM.theEvent.clientX + xtabDragCursorOffsetLeft; } function InitDragCursor() { xtabDragCursorArray = new Array(); xtabDragCursorArray[0] = new Image(); xtabDragCursorArray[0].src = topparent.getGlobal("imgPath") + "dragmovecursor.gif"; xtabDragCursorArray[1] = new Image(); xtabDragCursorArray[1].src = topparent.getGlobal("imgPath") + "draginsertcursor.gif"; xtabDragCursorArray[2] = new Image(); xtabDragCursorArray[2].src = topparent.getGlobal("imgPath") + "dragnocursor.gif"; xtabDragCursor = document.getElementById("xtabdragcursor"); xtabNestBetweenDiv = document.getElementById("xtabNestBetweenHeadersDiv"); } function deleteXtabLevel(obj) { var rc = (obj.getAttribute("type").charAt(1) == "r")? "R" : "C"; var totalLevels = numRowLevels; if (rc == "C") totalLevels = numColLevels; if (totalLevels > 1) doit(makeDeleteLevelCommand(rc, getLevel(obj.getAttribute("type",obj)))); } function swapLevels(source, target) { source = getLevelSelector(source); target = getLevelSelector(target); var targetRC = (target.getAttribute("type").charAt(1) == "r")? "R" : "C"; var sourceRC = (source.getAttribute("type").charAt(1) == "r")? "R" : "C"; var targetLevel = getLevel(target.getAttribute("type"),target); var sourceLevel = getLevel(source.getAttribute("type"),source); if ((targetRC == sourceRC) && (targetLevel == sourceLevel)) return false; var com = makeReplaceLevelCommand(targetRC, targetLevel, source.getAttribute("dimIdx"),getLastItemStr(source.getAttribute("ppdsId")),getLastItemStr(source.getAttribute("code"))); //Drill the level down as far as is needed for (var i = 1; i < source.getAttribute("groupLevel"); i++) { com += "\t\t" + makeDrillDownCommand(targetRC, targetLevel); } if (source.getAttribute("summaries_hidden")) { com += "\t\t" + makeHideSummariesCommand(targetRC, targetLevel); } com += "\t\t" + makeReplaceLevelCommand(sourceRC, sourceLevel, target.getAttribute("dimIdx"),getLastItemStr(target.getAttribute("ppdsId")),getLastItemStr(target.getAttribute("code"))); //Drill the level down as far as is needed for (var i = 1; i < target.getAttribute("groupLevel"); i++) { com += "\t\t" + makeDrillDownCommand(sourceRC, sourceLevel); } if (target.getAttribute("summaries_hidden")) { com += "\t\t" + makeHideSummariesCommand(sourceRC, sourceLevel); } doit(com); } function replaceLevel(source, target) { //replaces the source with the target level source = getLevelSelector(source); targetLevel = getLevel(target.getAttribute("type"),target); var rc = target.getAttribute("type").charAt(0); if (rc == "l") rc =target.getAttribute("type").charAt(1); rc = (rc == "r")? "R" : "C"; var com = makeReplaceLevelCommand(rc, targetLevel, source.getAttribute("dimIdx"),getLastItemStr(source.getAttribute("ppdsId")),getLastItemStr(source.getAttribute("code"))); //Drill the level down as far as is needed for (var i = 1; i < source.getAttribute("groupLevel"); i++) { com += "\t\t" + makeDrillDownCommand(rc, targetLevel); } if (source.getAttribute("summaries_hidden")) { com += "\t\t" + makeHideSummariesCommand(rc, targetLevel); } doit(com); } function moveLevelasNest(source, target) { var targetLevel = getLevel(target.getAttribute("type"),target); source = getLevelSelector(source); target = getLevelSelector(target); var sourceLevel = getLevel(source.getAttribute("type"),source); var targetRC = (target.getAttribute("type").charAt(1) == "r")? "R" : "C"; var cmd = makeLevelNestCommand(targetRC,targetLevel,source.getAttribute("groupLevel"),source.getAttribute("dimIdx")); if (source.getAttribute("summaries_hidden")) { cmd += "\t\t" + makeHideSummariesCommand(targetRC, parseInt(targetLevel) + 1); } sourceRC = (source.getAttribute("type").charAt(1) == "r")? "R" : "C"; var totalLevels = numRowLevels; if (sourceRC == "C") totalLevels = numColLevels; //Make the delete command if (!((totalLevels == 1) || (targetRC == sourceRC && (targetLevel == sourceLevel || targetLevel == sourceLevel - 1)))) { var sLevel = sourceLevel; if (targetRC == sourceRC && targetLevel < sourceLevel) sLevel++; cmd += "\t\t" + makeDeleteLevelCommand(sourceRC, sLevel); } doit(cmd); } function moveCopyOfLevelasNest(source, target) { var targetLevel = getLevel(target.getAttribute("type"),target); source = getLevelSelector(source); target = getLevelSelector(target); var targetRC= (target.getAttribute("type").charAt(1) == "r")? "R" : "C"; var sourceRC= (source.getAttribute("type").charAt(1) == "r")? "R" : "C"; var sourceLevel = getLevel(source.getAttribute("type"),source); var cmd = makeLevelNestCommand(targetRC,targetLevel,source.getAttribute("groupLevel"),source.getAttribute("dimIdx")); if (source.getAttribute("summaries_hidden")) { cmd += "\t\t" + makeHideSummariesCommand(targetRC, parseInt(targetLevel) + 1); } doit(cmd); } function measureCat(category) { this.ppdsId = category.substr(0,category.indexOf(',')); this.code = category.substr(category.indexOf(',') + 1); } function makeReorderCategoryCommand(source, target) { if (source.getAttribute("calculation") != null && target.getAttribute("beginning_of_axis") != null && (xtabNestBetweenLoc == XTAB_NEST_BETWEEN_BEFORE)) doit(constructDockCategoryCommand(source.getAttribute("ppdsId"), source.getAttribute("code"), target)); else doit(constructReorderCategoryCommand(source.getAttribute("ppdsId"), source.getAttribute("code"), target)); } function getSortedSelection() { //Assumes all selection in the same level, of the same axis. var selections = getSelected("r"); if (!selections.length) { selections = getSelected("c"); } return sortSelections(selections); } function sortSelections(selections) { var sortedSelections = new Array(); var idx; for (var i = 0; i < selections.length; i++) { idx = 0; while (idx < sortedSelections.length && getAxisPos(selections[i]) > getAxisPos(sortedSelections[idx])) idx++; //insert this selection at this position. sortedSelections.splice(idx,0,selections[i]); } return sortedSelections; } function getAxisPos(item) { var axisPositions = item.id.split('-'); if (item.getAttribute("type") == "r") return parseInt(axisPositions[0]); else return parseInt(axisPositions[1]); } function constructReorderCategoryCommand(sourceId, sourceCode, target) { var command = "MR:"; command += (xtabNestBetweenLoc == XTAB_NEST_BETWEEN_BEFORE)? "0" : "1"; command += "\t" + '"' + target.getAttribute("parent_id") + '"'; command += "\t" + constructOperandId(sourceId,target.getAttribute("dimIdx"),sourceCode); command += "\t" + constructOperandId(target.getAttribute("ppdsId"),target.getAttribute("dimIdx"),target.getAttribute("code")); return command; } function constructDockCategoryCommand(sourceId, sourceCode, target) { //To dock a calculation move it under parent 0 var command = "MR:"; command += '1\t"0"'; command += "\t" + constructOperandId(sourceId,target.getAttribute("dimIdx"),sourceCode); return command; } function constructOperandId(id,dimIdx,code) { var str = id; if (id.charAt(0) != 'T') { if(dimIdx >= 0) str += ',' + dimIdx; if(code) str += ',' + code; } return str; } function getLastItemStr(str) { var codeSep = topparent.getGlobal("codeSeparator"); if (str.indexOf(codeSep)) { var subs = str.split(codeSep); return subs[subs.length - 1]; } else { return str; } } function getLevelSelector(obj) { if (obj.getAttribute("type").charAt(0) != "l") { var level = getLevel(obj.getAttribute("type"),obj); if (level == -1) level = 0; obj = document.getElementById("l" + obj.getAttribute("type").charAt(0) + level); } return obj; } function makeDeleteLevelCommand(rc, level) { return "EK:" + rc + level; } function makeReplaceLevelCommand(rc, level, dimIdx, ppdsId, code) { return "ER:" + rc + level + "\tD" + dimIdx + "\t" + ppdsId + "," + dimIdx + ";" + code; } function makeLevelNestCommand(rc, targetlevel, sourcelevel, dimIdx) { return "EN:" + rc + targetlevel + "\tD" + dimIdx + "\t" + sourcelevel; } function makeDrillDownCommand(rc, level) { return "ED:" + rc + level; } function makeDrillUpCommand(rc, level) { return "EU:" + rc + level; } function makeHideSummariesCommand(rc, level) { if (parseInt(level) != 0) return "ES:" + rc + level; else return "ET:" + rc + "0"; } function hideXtabDragNestBetweenDiv() { xtabNestBetweenDiv.style.visibility = "hidden"; xtabNestBetweenDiv.style.top = 0; xtabNestBetweenDiv.style.left = 0; xtabNestBetweenDiv.style.height = 0; xtabNestBetweenDiv.style.width = 0; xtabNestBetweenLoc = XTAB_NEST_BETWEEN_NONE; } function showXtabDragNestBetweenDiv(event, obj) { var rc = obj.getAttribute("type").charAt(0); var objTop = getOffsetTop(obj); var objLeft = getOffsetLeft(obj); var x = event.clientX; var y = event.clientY; if (rc == 'r') { xtabNestBetweenDiv.style.height = XTAB_NEST_DIV_THICKNESS; xtabNestBetweenDiv.style.width = obj.offsetWidth; xtabNestBetweenDiv.style.left = objLeft; if (parseInt(y - objTop) < parseInt(obj.offsetHeight/2)) { xtabNestBetweenDiv.style.top = objTop - (XTAB_NEST_DIV_THICKNESS/2); xtabNestBetweenLoc = XTAB_NEST_BETWEEN_BEFORE; } else { xtabNestBetweenDiv.style.top = objTop + obj.offsetHeight - (XTAB_NEST_DIV_THICKNESS/2); xtabNestBetweenLoc = XTAB_NEST_BETWEEN_AFTER; } } else { xtabNestBetweenDiv.style.height = obj.offsetHeight; xtabNestBetweenDiv.style.width = XTAB_NEST_DIV_THICKNESS; xtabNestBetweenDiv.style.top = objTop; if (parseInt(x - objLeft) < parseInt(obj.offsetWidth/2)) { xtabNestBetweenDiv.style.left = objLeft - (XTAB_NEST_DIV_THICKNESS/2); xtabNestBetweenLoc = XTAB_NEST_BETWEEN_BEFORE; } else { xtabNestBetweenDiv.style.left = objLeft + obj.offsetWidth - (XTAB_NEST_DIV_THICKNESS/2); xtabNestBetweenLoc = XTAB_NEST_BETWEEN_AFTER; } } xtabDivOverObj = obj; xtabNestBetweenDiv.style.visibility = "visible"; } function getOffsetTop(obj) { var offsetTop = obj.offsetTop; var parent = obj.offsetParent; while(parent && typeof parent != "undefined") { if (parent.offsetTop) offsetTop += parseInt(parent.offsetTop); parent = parent.offsetParent; } return offsetTop - document.getElementById("innerNice1-tab0").scrollTop; } function getOffsetLeft(obj) { var offsetLeft = obj.offsetLeft; var parent = obj.offsetParent; while(parent && typeof parent != "undefined") { if (parent.offsetLeft) offsetLeft += parseInt(parent.offsetLeft); parent = parent.offsetParent; } return offsetLeft - document.getElementById("innerNice1-tab0").scrollLeft; }