if (window.goN2LibMon) goN2LibMon.beginLoad('utilities', 'n2CoreLibs'); function N2Utilities() { this.className = 'N2Utilities'; this.version = '1.0.0'; this.revision= '$Revision: #38 $'; this.initialized = false; this.bIsCSS; this.bIsW3C; this.bIsIE4; this.bIsNN4; this.bIsIE6CSS; this.bIsIE; this.browser_version; this.initDHTMLAPI = function () { if (document.images) { this.bIsCSS = (document.body && document.body.style) ? true : false; this.bIsW3C = (this.bIsCSS && document.getElementById) ? true : false; this.bIsIE4 = (this.bIsCSS && document.all) ? true : false; this.bIsNN4 = (document.layers) ? true : false; this.bIsIE6CSS = (document.compatMode && document.compatMode.indexOf("CSS1") >= 0) ? true : false; } } this.seekLayer = function (oDoc, sName) { var elem; for (var i = 0; i < oDoc.layers.length; i++) { if (oDoc.layers[i].name == sName) { elem = oDoc.layers[i]; break; } if (oDoc.layers[i].document.layers.length > 0) { elem = this.seekLayer(document.layers[i].document, sName); } } return elem; } this.getRawObject = function (obj) { ; } this._getRawObject = function (obj) { var elem; ; if (!obj) { return null; } if (typeof obj == "string") { if (this.bIsW3C) { elem = document.getElementById(obj); } else if (this.bIsIE4) { elem = document.all(obj); } else if (this.bIsNN4) { elem = this.seekLayer(document, obj); } if ( this.isUndefOrNull(elem) ) { ; } } else { elem = obj; } return elem; } this.getObject = function (obj) { var elem = this.getRawObject(obj); if (elem && this.bIsCSS) { elem = elem.style; } return elem; } this.shiftTo = function (obj, x, y) { var elem = this.getObject(obj); if (elem) { if (this.bIsCSS) { var units = (typeof elem.left == "string") ? "px" : 0; elem.left = x + units; elem.top = y + units; } else if (this.bIsNN4) { elem.moveTo(x,y) } } } this.shiftBy = function (obj, deltaX, deltaY) { var elem = this.getObject(obj); if (elem) { if (this.bIsCSS) { var units = (typeof elem.left == "string") ? "px" : 0; elem.left = this.getObjectLeft(obj) + deltaX + units; elem.top = this.getObjectTop(obj) + deltaY + units; } else if (this.bIsNN4) { elem.moveBy(deltaX, deltaY); } } } this.setZIndex = function (obj, zOrder) { var elem = this.getObject(obj); if (elem) { elem.zIndex = zOrder; } } this.setBGColor = function (obj, color) { var elem = this.getObject(obj); if (elem) { if (this.bIsNN4) { elem.bgColor = color; } else if (this.bIsCSS) { elem.backgroundColor = color; } } } this.show = function (obj) { var elem = this.getObject(obj); if (elem) { elem.visibility = "visible"; } } this.hide = function (obj) { var elem = this.getObject(obj); if (elem) { elem.visibility = "hidden"; } } this.MOZALPHAMAX = 255./256.; this.getAlphaLevel = function (rawObj) { var elem = this.getRawObject(rawObj); var ret; if (elem) { if (elem.filters && elem.filters.alpha) { ret = elem.filters.alpha.opacity; } else { var style = elem.style; if (elem.style && !this.isUndefined(elem.style.MozOpacity)) { var strOpacity = elem.style.MozOpacity; if (strOpacity.length > 0) { ret = parseFloat(elem.style.MozOpacity); if (ret >= this.MOZALPHAMAX && !this.isUndefined(elem.style.azdMozOpacity)) { var saved = parseFloat(elem.style.azdMozOpacity); if (elem.style.azdMozOpacity >= this.MOZALPHAMAX) { ret = saved; } } ret = ret * 100; } else { ret = 100; // presume that no set opacity means opaque } } } } if (this.isUndefined(ret)) { ; } return ret; } this.setAlphaLevel = function (rawObj, level) { level = (level <= 0 ? 0 : (level >= 100 ? 100 : level)); var elem = this.getRawObject(rawObj); ; if (elem) { if (elem.filters && elem.filters.alpha) { elem.filters.alpha.opacity = level; } else if (elem.style && !this.isUndefined(elem.style.MozOpacity)) { var reqLevel = level * 0.01; var mozLevel = (reqLevel > this.MOZALPHAMAX ? this.MOZALPHAMAX : reqLevel); if (mozLevel != reqLevel) { ; } elem.style.MozOpacity = mozLevel; elem.style.azdMozOpacity = "" + reqLevel; // store as string (just as MozOpacity is) to get same rounding } else { ; } } } this.getObjectLeft = function (obj) { var elem = this.getRawObject(obj); var result = 0; if (elem) { if (document.defaultView) { var style = document.defaultView; var cssDecl = style.getComputedStyle(elem, ""); result = cssDecl.getPropertyValue("left"); } else if (elem.currentStyle) { result = elem.currentStyle.left; } else if (elem.style) { result = elem.style.left; } else if (this.bIsNN4) { result = elem.left; } if (isNaN(result)) { result = this.getPageElementLeft(elem); } } return parseInt(result); } this.getObjectTop = function (obj) { var elem = this.getRawObject(obj); var result = 0; if (elem) { if (document.defaultView) { var style = document.defaultView; var cssDecl = style.getComputedStyle(elem, ""); result = cssDecl.getPropertyValue("top"); } else if (elem.currentStyle) { result = elem.currentStyle.top; } else if (elem.style) { result = elem.style.top; } else if (this.bIsNN4) { result = elem.top; } } if (isNaN(result)) { result = this.getPageElementTop(elem); } return parseInt(result); } this.getObjectWidth = function (obj) { var elem = this.getRawObject(obj); var result = 0; if (elem) { if (elem.width && this.isMozilla5()) { result = elem.width; } else if (elem.offsetWidth) { result = elem.offsetWidth; } else if (elem.clip && elem.clip.width) { result = elem.clip.width; } else if (elem.style && elem.style.pixelWidth) { result = elem.style.pixelWidth; } } return parseInt(result); } this.getObjectHeight = function (obj) { var elem = this.getRawObject(obj); var result = 0; if (elem) { if (elem.height && this.isMozilla5()) { result = elem.height; } else if (elem.offsetHeight) { result = elem.offsetHeight; } else if (elem.clip && elem.clip.height) { result = elem.clip.height; } else if (elem.style && elem.style.pixelHeight) { result = elem.style.pixelHeight; } } return parseInt(result); } this.getInsideWindowWidth = function () { if (window.innerWidth) { return window.innerWidth; } else if (this.bIsIE6CSS) { return document.body.parentElement.clientWidth } else if (document.body && document.body.clientWidth) { return document.body.clientWidth; } return 0; } this.getInsideWindowHeight = function () { if (window.innerHeight) { return window.innerHeight; } else if (this.bIsIE6CSS) { return document.body.parentElement.clientHeight } else if (document.body && document.body.clientHeight) { return document.body.clientHeight; } return 0; } this.initialize = function () { this.initDHTMLAPI(); var agid = navigator.userAgent.toLowerCase(); this.bIsIE = (agid.indexOf("msie") != -1); this.bIsGecko = (agid.indexOf("gecko") != -1); this.bIsFirefox = (agid.indexOf("firefox") != -1); this.browser_version = parseInt(navigator.appVersion); this.getRawObject = this._getRawObject; // rest to use the correct fn. this.sAnimationDivID = 'goN2UAnimatedBox'; this.bAnimateBoxRunning = false; this.initialized = true; ; } this.isIE = function () { return this.bIsIE; } this.isW3C = function () { return this.bIsW3C; } this.isMozilla5 = function () { return this.bIsGecko && this.browser_version>=5; } this.isFirefox = function () { return this.bIsFirefox && this.browser_version>=5; } this.exists = function(obj) { return ( !this.isUndefOrNull(this.getRawObject(obj)) ); } this.display = function (obj, type) { var elem = this.getObject(obj); if (elem) { if (this.bIsIE || this.isMozilla5()) elem.display = type ? type : "block"; else { elem.display = "block"; } } } this.undisplay = function (obj) { var elem = this.getObject(obj); if (elem) { elem.display = 'none'; } } this.toggleDisplay = function (obj, type) { var elem = this.getObject(obj); if (elem) { if (elem.display == 'none') this.display (obj, type); else this.undisplay(obj); } } this.toggleDualDisplay = function (obj1, obj2) { this.toggleDisplay(obj1); this.toggleDisplay(obj2); } this.adjustBy = function (obj, deltaX, deltaY, deltaW, deltaH) { var elem = this.getObject(obj); if (elem) { if (this.bIsCSS) { var units = (typeof elem.left == "string") ? "px" : 0; elem.left = this.getObjectLeft(obj) + deltaX + units; elem.top = this.getObjectTop(obj) + deltaY + units; elem.width = this.getObjectWidth(obj) + deltaW; // + units; elem.height = this.getObjectHeight(obj) + deltaH; // + units; } else if (this.bIsNN4) { elem.moveBy(deltaX, deltaY); } } } this.clip = function (obj, nTop, nRight, nBottom, nLeft) { var elem = this.getObject(obj); elem.clip = "rect("+nTop+"px, " + nRight + "px, "+nBottom+"px, "+nLeft+"px)"; } this.setContent = function (sID, sHtml, sClass) { var relem = this.getRawObject(sID); if (relem) relem.innerHTML = sHtml; if (sClass) this.setClass(sID, sClass); } this.setWidth = function (obj, w) { var elem = this.getObject(obj); if (elem) elem.width = w; } this.setHeight = function (obj, h) { var elem = this.getObject(obj); if (elem) elem.height = h; } this.getScrolledElementTop = function (elem) { var top = this.getPageElementTop(elem); if (elem) { var bod = document.body; var docParent = this.getParentElement(elem); while (docParent !== null && docParent !== bod) { top -= docParent.scrollTop; docParent = this.getParentElement(docParent); } } return top; } this.getScrolledElementLeft = function (elem) { var left = this.getPageElementLeft(elem); if (elem) { var bod = document.body; var docParent = this.getParentElement(elem); while (docParent !== null && docParent !== bod) { left -= docParent.scrollLeft; docParent = this.getParentElement(docParent); } } return left; } this.getPageElementTop = function (elem) { var top=0; if (elem) { top = elem.offsetTop; var parentObj = elem.offsetParent; while (parentObj != null) { if(this.bIsIE) { if( (parentObj.tagName != "TABLE") && (parentObj.tagName != "BODY") ) top += parentObj.clientTop; } else { if(parentObj.tagName == "TABLE") { var nParBorder = parseInt(parentObj.border); if(isNaN(nParBorder)) { var nParFrame = parentObj.getAttribute('frame'); if(nParFrame != null) top += 1; } else if(nParBorder > 0) { top += nParBorder; } } } top += parentObj.offsetTop; parentObj = parentObj.offsetParent; } } return top; } this.getPageElementLeft = function (elem) { var left=0; if (elem) { left = elem.offsetLeft; var parentObj = elem.offsetParent; while (parentObj != null) { if(this.bIsIE) { if( (parentObj.tagName != "TABLE") && (parentObj.tagName != "BODY") ) left += parentObj.clientLeft; } else { if(parentObj.tagName == "TABLE") { var nParBorder = parseInt(parentObj.border); if(isNaN(nParBorder)) { var nParFrame = parentObj.getAttribute('frame'); if(nParFrame != null) left += 1; } else if(nParBorder > 0) { top += nParBorder; } } } left += parentObj.offsetLeft; parentObj = parentObj.offsetParent; } } return left; } this.getParentElement = function (elem) { if (elem) { if(this.bIsIE) return elem.parentElement; return elem.parentNode; } return null; } this.elementIsContainedBy = function(elem, elemParent) { if (goN2U.isUndefOrNull(elem) || goN2U.isUndefOrNull(elemParent)) { return false; } while (true) { if (elem === elemParent) { return true; } var parent = this.getParentElement(elem); if (parent === null) { return false; } elem = parent; } } this.classfixup; if (document.all) this.classfixup = "className"; else this.classfixup = "class"; this.setClass = function (obj, style) { var obj = this.getRawObject (obj); ; if (obj) obj.setAttribute(this.classfixup, style,0); } this.getClassX = function (obj) { var obj = this.getRawObject (obj); if (obj) return obj.getAttribute(this.classfixup, 0); return null; } this.addComma = function addComma(sNum) { if (typeof sNum != "string") sNum = sNum.toString(); var aV = sNum.split('.'); sNum = aV[0]; var p0, p1, len, x=3; if (sNum.length >x) { for (x=3;(len=sNum.length)>x;x+=4 ) { p0 = sNum.substring(0, len-x); p1 = sNum.substring(len-x); sNum = p0 +',' + p1; } } if (aV[1]>=0) sNum += '.' + aV[1]; return sNum; } this.preloadImages = new Array(); this.preloadImage = function (sImage, id) { if (!id) id=this.preloadImages.length; if (!this.preloadImages[id]) { this.preloadImages[id]=new Image(); this.preloadImages[id].src=sImage; ; } } this.getLinkNameInfo = function (sLinkID, sNameOverride) { var oLNI = new N2LinkNameInfo(sLinkID, sNameOverride); return (oLNI.getLinkID() ? oLNI : null); } this.getIFrameDocument = function (id) { var oIFrame = this.getRawObject(id); if (oIFrame) { if (oIFrame.contentDocument) { return oIFrame.contentDocument; } else if (oIFrame.contentWindow) { return oIFrame.contentWindow.document; } else if (oIFrame.document) { return oIFrame.document; } } return null; } this.n2FlashElement = function (id, styleOn, styleOff, count) { n2DoFlashElement (id, styleOn, styleOff, count*2); } this.n2DoFlashElement = function (id, styleOn, styleOrig, count) { count--; if (count % 2) setClass(id, styleOn); else setClass(id, styleOrig); if (count) { setTimeout("n2DoFlashElement('" + id +"','" + styleOn + "','" + styleOrig + "'," + count +")", 500); } } this.animateBox = function (sl, st, sw, sh, fl, ft, fw, fh, nSteps, fnDone, style) { var nHInc = parseInt((fl -sl)/nSteps); var nVInc = parseInt((ft -st)/nSteps); var nWdInc = parseInt((fw-sw)/nSteps); var nHtInc = parseInt((fh-sh)/nSteps); var o = goN2U.getRawObject(this.sAnimationDivID); if (o && !this.bAnimateBoxRunning) { this.bAnimateBoxRunning = true; if (style) goN2U.setClass(this.sAnimationDivID, style); goN2U.shiftTo(o, sl, st); goN2U.show(o); goN2U.setWidth(o, sw); goN2U.setHeight(o, sh); setTimeout("goN2U._animateBox('"+this.sAnimationDivID+"',"+nHInc+","+nVInc+","+nWdInc+","+nHtInc+","+nSteps+","+fnDone+")", 25); } else if (fnDone) { fnDone(); } } this._animateBox = function (sID, nHInc, nVInc, nWdInc, nHtInc, nSteps, fnDone) { goN2U.adjustBy(sID, nHInc, nVInc, nWdInc, nHtInc); if (--nSteps >0) { setTimeout("goN2U._animateBox('"+sID+"',"+nHInc+","+nVInc+","+nWdInc+","+nHtInc+","+nSteps+","+fnDone+")", 25); } else { goN2U.hide(sID); if (fnDone) fnDone(); this.bAnimateBoxRunning = false; } } this.expDivProcessing = false; this.expDivSize = 30; this.stepDone = true; this.expandDivWidth = function (theDiv, hidableElem, delay, fnDone, displayableElem){ this.expandDivDual('w', theDiv, hidableElem, delay, fnDone, displayableElem); } this.expandDivHeight = function (theDiv, hidableElem, delay, fnDone, displayableElem){ this.expandDivDual('h', theDiv, hidableElem, delay, fnDone, displayableElem); } this.collapseDivWidth = function (theDiv, hidableElem, delay, fnDone, displayableElem){ this.collapseDivDual('w', theDiv, hidableElem, delay, fnDone, displayableElem); } this.collapseDivHeight = function (theDiv, hidableElem, delay, fnDone, displayableElem){ this.collapseDivDual('h', theDiv, hidableElem, delay, fnDone, displayableElem); } this.collapseExpandDivsWidth = function (divA, divB, delay){ this.collapseExpandDivsDual ('w', divA, divB, delay); } this.collapseExpandDivsHeight = function (divA, divB, delay){ this.collapseExpandDivsDual ('h', divA, divB, delay); } this.expandCalcStep = function (h) { if (h <40) return h; if (h <225) return 20; //15 if (h <900) return parseInt(h/10); // h/15 return 100; // 60 } this.expandDivDual = function (mode, theDiv, hidableElem, delay, fnDone, displayableElem){ if (this.expDivProcessing) return; this.expDivProcessing = true; var theDivObj = this.getRawObject(theDiv); var parentDiv = theDivObj.parentNode; if (!parentDiv.id) { parentDiv.id = 'outer_' + theDivObj.id; } this.expDivSize=0; var maxSize; if (mode == 'w' ) { this.setWidth(parentDiv, this.expDivSize); this.display(parentDiv); maxSize = this.getObjectWidth(theDivObj); } else { this.setHeight(parentDiv, this.expDivSize); this.display(parentDiv); maxSize = this.getObjectHeight(theDivObj); } if (hidableElem) this.undisplay(hidableElem); if (displayableElem) { this.display(displayableElem); } if (!delay || delay<20) { delay = 20; } var step = 2; this._expandDual(mode, parentDiv.id, maxSize, delay, step, fnDone, displayableElem); } this._expandDual = function (mode, parentDiv, maxSize, delay, step, fnDone, displayableElem){ if(this.expDivSize20){ step = this.expandCalcStep(maxSize); } else if(nS>5) { step = 10; } this.expDivSize = Math.min(this.expDivSize+=step, maxSize); mode == 'w' ? this.setWidth(parentDiv, this.expDivSize) : this.setHeight(parentDiv, this.expDivSize); setTimeout("goN2U._expandDual('"+mode+"','"+parentDiv+"',"+maxSize+","+delay+","+step+","+fnDone+",'"+displayableElem+"');",delay ); } else{ mode == 'w' ? this.setWidth(parentDiv, "auto") : this.setHeight(parentDiv, "auto"); this.expDivSize = 20; this.expDivProcessing = false; if(fnDone) fnDone(); } } this.collapseDivDual = function (mode, theDiv, hidableElem, delay, fnDone, displayableElem, bExcludeDispElem){ if (this.expDivProcessing) return; this.expDivProcessing = true; var theDivObj = this.getRawObject(theDiv); var parentDiv = theDivObj.parentNode; if (!parentDiv.id) { parentDiv.id = 'outer_' + theDivObj.id; } if (!delay || delay<20) { delay = 20; } this.expDivSize=0; var size = (mode == 'w' ? this.getObjectWidth(parentDiv) : this.getObjectHeight(parentDiv)); var step = this.expandCalcStep(size); if (hidableElem) this.undisplay(hidableElem); var end = 0; if(displayableElem && !bExcludeDispElem) { this.display(displayableElem,"inline"); end = (mode == 'w' ? this.getObjectWidth(displayableElem) : this.getObjectHeight(displayableElem)); this.undisplay(displayableElem); } this._collapseDual(mode, parentDiv.id, hidableElem, delay, step, fnDone, displayableElem, end) } this._collapseDual = function (mode, parentDiv, hidableElem, delay, step, fnDone, displayableElem, end){ this.expDivSize = (mode == 'w' ? this.getObjectWidth(parentDiv) : this.getObjectHeight(parentDiv)); var nRem = this.expDivSize-end; if(nRem>0){ if(nRem<6){ step = 1; } else if(nRem<60){ step = 10; } this.expDivSize-=step; setTimeout("goN2U._collapseDual('"+mode+"','"+parentDiv+"','"+hidableElem+"',"+delay+","+step+","+fnDone+",'"+displayableElem+"',"+end+");",delay ); this.stepDone = false; mode == 'w' ? this.setWidth(parentDiv, this.expDivSize) : this.setHeight(parentDiv, this.expDivSize); this.stepDone = true; } else { this.stepDone = true; this.undisplay(parentDiv); this.expDivProcessing = false; if(displayableElem) this.display(displayableElem,"inline"); if(fnDone) fnDone(); } } this.getConfigurationObject = function(cls) { var className = cls + 'Properties'; if(!this.isUndefined(className) && this.isObject(className)) { return this.getObject(className); } else { var obj = new Object; obj.getValue = function(id, sDefault) { return sDefault; } return obj; } } this.collapseExpandDivsDual = function (mode, divA, divB, delay){ if (this.expDivProcessing) return; this.expDivProcessing = true; var divAObj = this.getRawObject(divA); var divBObj = this.getRawObject(divB); var divAParent = divAObj.parentNode; var divBParent = divBObj.parentNode; if (!divAParent.id) { divAParent.id = 'outer_' + divAObj.id; } if (!divBParent.id) { divBParent.id = 'outer_' + divBObj.id; } if (!delay || delay<20) { delay = 20; } var size = (mode == 'w' ? this.getObjectWidth(divAParent) : this.getObjectHeight(divAParent)); var step = this.expandCalcStep(size); this._comboCollapseDual(mode, divAParent.id, divBParent.id, delay, step); } this._comboCollapseDual = function (mode, divAParent, divBParent, delay, step){ this.expDivSize = (mode == 'w' ? this.getObjectWidth(divAParent) : this.getObjectHeight(divAParent)); if(this.expDivSize>step){ this.expDivSize-=step; mode == 'w' ? this.setWidth(divAParent, this.expDivSize) :this.setHeight(divAParent, this.expDivSize); setTimeout("goN2U._comboCollapseDual('"+mode+"','"+divAParent+"','"+divBParent+"',"+delay+","+step+");", delay ); } else { this.undisplay(divAParent); this.display(divBParent); this.setWidth(divBParent,"auto"); mode == 'w' ? this.setWidth(divBParent,"auto") :this.setHeight(divBParent,"auto"); var maxSize = (mode == 'w' ? this.getObjectWidth(divBParent) : this.getObjectHeight(divBParent)); this.expDivSize = step; mode == 'w' ? this.setWidth(divBParent,this.expDivSize) :this.setHeight(divBParent,this.expDivSize); setTimeout("goN2U._comboExpandDual('"+mode+"','"+divBParent+"',"+maxSize+","+delay+","+step+");",delay ); } } this._comboExpandDual = function (mode,divBParent, maxSize, delay, step){ this.expDivSize = (mode == 'w' ? this.getObjectWidth(divBParent) : this.getObjectHeight(divBParent)); if((this.expDivSize= 100 ? 100 : alphaStart)); alphaFinal = (alphaFinal <= 0 ? 0 : (alphaFinal >= 100 ? 100 : alphaFinal)); if (this.isUndefined(o.azdAnimAlpha)) { o.azdAnimAlpha = new Object(); o.azdAnimAlpha.bRunning = false; } var anim = o.azdAnimAlpha; if (anim.bRunning) { clearInterval(anim.intervalID); ; anim.intervalID = undefined; anim.bRunning = false; } var alphaDelta = alphaFinal-alphaStart; var alphaStep = alphaDelta * 1.0 / nSteps; // force floating-point so alphaStep is non-zero if (nSteps > 1 && Math.abs(alphaStep) > 0.0001) { anim.alphaStep = alphaStep; anim.alphaFinal = alphaFinal; anim.fnDone = fnDone; var alphaCur = this.getAlphaLevel(o); anim.nDir = (alphaFinal-alphaCur) > 0 ? 1 : -1; if (anim.nDir * alphaStep < 0) { anim.alphaStep = -alphaStep; } if (alphaCur >= this.MOZALPHAMAX*100) { this.setAlphaLevel(o, this.MOZALPHAMAX*100); } anim.bRunning = true; var fn = new Function ("goN2U._animateAlpha('"+sID+"');"); anim.intervalID = setInterval(fn, 25); } else { this.setAlphaLevel(o, alphaFinal); if (fnDone) { fnDone(); } } } this._animateAlpha = function (sID) { var o = goN2U.getRawObject(sID); if (!o) { ; return; } var anim = o.azdAnimAlpha; if (!anim.bRunning) { clearInterval(anim.intervalID); ; anim.intervalID = undefined; return; } var alphaNext = this.getAlphaLevel(o) + anim.alphaStep; if ((anim.alphaFinal-alphaNext) * anim.nDir > 0) { this.setAlphaLevel(o, alphaNext); } else { this.setAlphaLevel(o, anim.alphaFinal); clearInterval(anim.intervalID); ; anim.intervalID = undefined; anim.bRunning = false; if (anim.fnDone) { anim.fnDone(); } } } this.animateAlphaCancel = function(sID) { var o = goN2U.getRawObject(sID); if (!o) { ; return; } var anim = o.azdAnimAlpha; clearInterval(anim.intervalID); ; anim.intervalID = undefined; anim.bRunning = false; } this.isUndefined = function (a) { return (typeof a == 'undefined'); } this.isDefined = function (a) { return typeof a != 'undefined'; } this.isFunction = function (a) { return typeof a == 'function'; } this.isNull = function (a) { return typeof a == 'object' && !a; } this.isNumber = function (a) { return typeof a == 'number' && isFinite(a); } this.isObject = function (a) { return (a && typeof a == 'object') || this.isFunction(a); } this.isString = function (a) { return typeof a == 'string'; } this.isArray = function (a) { return this.isObject(a) && a.constructor == Array; } this.isUndefOrNull = function (a) { return (typeof a == 'undefined') || (typeof a == 'object' && !a) } this.objIsInstanceOf = function(obj, classObj) { while (obj.__proto__) { if (obj.__proto__ === classObj) { return true; } obj = obj.__proto__; } return false; } } // END of goN2Utilities Class window.N2TextSizer=function(spanID) { var spanEl = document.createElement("span"); if (spanEl) { spanEl.setAttribute("id",spanID, 0); document.body.appendChild(spanEl); goN2U.hide(spanID); this.span=spanEl; // expects goN2Utility class to have been initialized this.sID = spanID; this.style=null; } this.getStringWidth = function (txt, len) { ; if (len) this.span.innerText = txt.substring(0, len); else this.span.innerText = txt; return goN2U.getObjectWidth(this.sID); } this.setStyle = function (style) { if (style != this.style) { goN2U.setClass (this.span, style); this.style = style; } } this.truncateToWidth = function (txt, width) { var len = txt.length; var txtwidth = this.getStringWidth(txt); if (txtwidth >width) { var reqlen = Math.floor(width/txtwidth*len) - 3; var temptxt = txt.substring(0, reqlen); temptxt += '...'; return temptxt; } else { return txt; } } this.setContent = function (cont) { this.span.innerHTML=cont; return goN2U.getObjectWidth(this.span); } this.getWidth = function () { return goN2U.getObjectWidth(this.span); } this.getHeight = function () { return goN2U.getObjectHeight(this.span); } } window.N2FifoQueue=function(n) { var current = 0; var next = 0; var size = n ? n : 20; var q = new Array(n); this.add = function (item) { q[next] = item; next++; if (next == size) next = 0; q[next] = null; // to ensure we don't have current go past } this.current = function () { return q[current]; } this.next = function () { var val = null; if (q[current]) current++; // don't advance past stop fence if (current == size) current = 0; val = q[current]; return val; } this.nextExists = function () { var val = null; var temp = current; if (q[temp]) temp++; // don't advance past stop fence if (temp == size) temp = 0; return q[temp] != null; } this.toString = function () { var txt = "Current: " + current + "\n"; txt += "Next: " + next + "\n"; for (i=0;i0) return q[current-1]; return null; } this.current = function () { return q[current]; } this.next = function () { return q[current+1]; } this.goBack = function () { if (current >0) current--; } this.goForward = function () { if (q[current+1]) current++; } this.toString = function () { var txt = "Current: " + current + "\n"; for (i=0;i<=current;i++) { txt += "["+i+"] = " + q[i].id; if (i == current) txt += " <-Current "; txt +="\n"; } return txt } } window.N2LinkNameInfo=function(sLinkID, sNameOverride) { if (sLinkID) { var oLink = goN2U.getRawObject(sLinkID); var sName = ""; if (oLink) { sName = oLink.name; ; } if (sNameOverride) { sName = sNameOverride; ; } if (sName) { var tmpArray = sName.split("|"); if (tmpArray.length >1) { this.sLinkID = sLinkID; this.sName = sName; this.sFeature = tmpArray[0]; this.sType = tmpArray[1]; this.sID = tmpArray[2]; this.sParams = tmpArray[3]; for (var i = 4; !goN2U.isUndefined(tmpArray[i]); i++) { this.sParams = this.sParams + "|" + tmpArray[i]; } } } } else { ; } this.getLinkID = function () { return this.sLinkID; } this.getLinkName= function () { return this.sName; } this.getFeature = function () { return this.sFeature; } this.getType = function () { return this.sType; } this.getID = function () { return this.sID; } this.getParams = function () { return this.sParams; } } var gaN2HandlerChains = new Array(); var gaN2HandlerRunFns = new Array(); window.N2ChainEventHandler=function(sHandlerName, fFn, sComment) { sHandlerName = sHandlerName.toLowerCase(); sComment = sComment ? sComment : 'unknown'; ; ; if ( (typeof fFn != 'function') || fFn == null) return false; var aChain; if (!gaN2HandlerChains[sHandlerName]) { aChain = gaN2HandlerChains[sHandlerName] = new Array(); } else { aChain = gaN2HandlerChains[sHandlerName]; } var oE = window; if (sHandlerName != 'onload' && sHandlerName != 'onresize') { oE = document.getElementsByTagName("body")[0]; if (oE == null) { ; return; } } if (oE[sHandlerName]) { if (oE[sHandlerName] != gaN2HandlerRunFns[sHandlerName]) { aChain[0] = oE[sHandlerName]; var fn = new Function ("evt", "evt = evt ? evt : window.event; _N2RunHandlers(evt, '"+sHandlerName+"');"); gaN2HandlerRunFns[sHandlerName] = fn; oE[sHandlerName] = fn; } var len = aChain.length; ; aChain[len] = fFn; } else { ; oE[sHandlerName] = fFn; } return true; } function _N2RunHandlers( evt, sHandlerName ) { var aH = gaN2HandlerChains[sHandlerName]; var len = aH.length; for (var i=0;i].field or gaTD[key].field exists this.sLADTimeoutMessage = "Unable to obtain necessary information. Please try again later"; this.bMoveHEContent = true; } new N2SimplePopover(); N2SimplePopover.prototype.initialize = function (id, objectName, dataArrayName, populateMethod, locateMethod, nHAdjust, nVAdjust) { ; this.myID=id; // ID of HTML layer element this.objectName=objectName; // JS Object name if(dataArrayName) { try { this.aDataArray = eval(dataArrayName); } catch(e) { ; } } this.sDataArrayName = dataArrayName; // JS Object name ; this.popObj = this.createPopHTML(id, objectName, this.content); this.popObj = goN2U.getRawObject(this.myID); this.popObjStyle = goN2U.getObject(this.myID); ; ; this._presetLocate(locateMethod, nHAdjust, nVAdjust); }; N2SimplePopover.prototype.getObject = function () { return this.popObj; }; N2SimplePopover.prototype.simplePopoverInitialize = N2SimplePopover.prototype.initialize; N2SimplePopover.prototype.setMouseOverCallback = function (fn) { this.myMouseOverCallback = fn; }; N2SimplePopover.prototype.setMouseOutCallback = function (fn) { this.myMouseOutCallback = fn; }; N2SimplePopover.prototype.setPopoverChangedCallback = function (fn) { this.myFeatureChangedCallback = fn; }; N2SimplePopover.prototype.setOnCloseCallback = function (fn) { this.myOnCloseCallback = fn; }; N2SimplePopover.prototype.getID = function() { return this.myID; }; N2SimplePopover.prototype.getObjectName = function() { return this.objectName; }; N2SimplePopover.prototype.setPopulate = function (fn) { this.populate = fn; }; N2SimplePopover.prototype.configureAnimation = function(nOpen, nClose, sOpenStyle, sCloseStyle) { this.nAnimateOpen=nOpen; this.nAnimateClose=nClose; this.sAnimateOpenStyle = sOpenStyle; this.sAnimateCloseStyle = sCloseStyle; }; N2SimplePopover.prototype.configureLADSupport = function(b, sKey, sField, nTimeoutMs, nRetryMs, sLoadingMsg, sTimeoutMsg) { this.bLADSupported = b; if (sKey) {this.sLADKey = sKey;} if (sField) {this.sLADField = sField;} if (nTimeoutMs) {this.nLADTimeoutMs = nTimeoutMs;} if (nRetryMs) {this.nLADRetryMs = nRetryMs;} if (sLoadingMsg) {this.sLADLoadingMessage = sLoadingMsg;} if (sTimeoutMsg) {this.sLADTimeoutMessage = sTimeoutMsg;} }; N2SimplePopover.prototype.show = function (oHotspot) { this._showPrepare(oHotspot); var sLinkID = oHotspot.sLinkID; var oLNI = new N2LinkNameInfo(sLinkID); var sID = oLNI.getID(); var sType = oLNI.getType(); var sParams = oLNI.getParams(); var sHref = oHotspot.href; var sLinkText = oHotspot.linkText; var re = /([^\\])'/gi; sLinkText=sLinkText.replace(re, "$1\\'") ; ; ; this._hideTooltip(oHotspot.oLink); this.setCurrentThingData (null, sID, sType, sParams, sLinkID, sHref, sLinkText); this._showPopulate(null, sID, sType, sParams, sLinkID, sHref, sLinkText); this._showLocate(oHotspot); this.saveCurrentElementData(); }; N2SimplePopover.prototype._showPrepare = function (oHotspot) { this.initialMouseOver=true; this.initialUpdate=true; this.cursorCanLeavePopover = (oHotspot.staticFlag & 2); if (this.makeStatic) { this.makeStatic(oHotspot.staticFlag); } this.nLADRetries = this.nLADTimeoutMs/this.nLADRetryMs; this.bLADLoading = false; this.bWasLADDelayed = false; window.focus(); goN2U.display(this.myID, 'inline'); this.bIsVisible = true; this.hookEvents(); }; N2SimplePopover.prototype._showPopulate = function (sAction, sID, sType, sParams, sLinkID, sHref, sLinkText) { this.populate(sAction, sID, sType, sParams, sLinkID, sHref, sLinkText); }; N2SimplePopover.prototype._showLocate = function (oHotspot) { this.updateLocation(true); this.locate(oHotspot); if (this.nAnimateOpen) { var eTitlebar = goN2U.getObject(this.myID + '_titleBar'); goN2U.hide(this.myID); if (eTitlebar) { goN2U.hide(this.myID + '_titleBar'); } // kludge, since we don't HAVE a titlebar yet this.hotLeft = oHotspot.absleft; this.hotTop = oHotspot.abstop; this.hotWidth = oHotspot.width; this.hotHeight = oHotspot.height; goN2U.animateBox(oHotspot.absleft, oHotspot.abstop, oHotspot.width, oHotspot.height, this.left, this.top, this.width, this.height, this.nAnimateOpen, eTitlebar ? new Function('','goN2U.show(\''+this.myID+'\'); goN2U.show(\'' + this.myID + '_titleBar\'); ' ) : new Function('','goN2U.show(\''+this.myID+'\'); '), this.sAnimateOpenStyle ); } }; N2SimplePopover.prototype.hide = function () { ; this.cursorCanLeavePopover = false; goN2U.undisplay (this.myID); if (this.staticTimer) { clearTimeout(this.staticTimer); this.staticTimer = null; } this.bIsVisible = false; if (this.currentRequest && this.oUpdateManager) { this.oUpdateManager.cancelRequest(this.currentRequest); } if (this.myOnCloseCallback) { this.myOnCloseCallback(this); } this.unhookEvents(); this.hideEx(); if (this.bMoveHEContent && this.sCurrentContent && this.sCurrentHeID) { var eElem = goN2U.getRawObject(this.sCurrentHeID); if (eElem) { eElem.innerHTML = this.sCurrentContent; } else { ; } this.sCurrentContent = ''; } if (this.nAnimateClose) { goN2U.animateBox(this.left, this.top, this.width, this.height, this.hotLeft, this.hotTop, this.hotWidth, 1, this.nAnimateClose, null, this.sAnimateCloseStyle ); } }; N2SimplePopover.prototype.hideEx = function() {}; N2SimplePopover.prototype.setCurrentThingData = function (action, id, type, params, linkID, href, linkText) { this.action = action; this.thingID = id; this.thingType = type; this.thingParams = params; this.linkID = linkID; this.linkHref = href; this.linkText = linkText; this.sReftagHead=''; this.sReftagTail=''; if (href) { ; var re = 'ref=([^_]*_[^_]*)(_[^\/]*)?'; var aResult = href.match(re); if (aResult) { ; this.sReftagHead = aResult[1]; this.sReftagTail = aResult[2]; } } }; N2SimplePopover.prototype.getReftagHead = function() { return this.sReftagHead; }; N2SimplePopover.prototype.getReftagTail = function() { return this.sReftagTail; }; N2SimplePopover.prototype.setContent = function (sHtml) { sHtml = this.replacePlaceholders(sHtml); this.popObj = goN2U.getRawObject(this.myID); if (this.popObj === null) { this.content = sHtml; } else { this.popObj.innerHTML = sHtml; this.updateLocation(true); } }; N2SimplePopover.prototype.getContent = function () { var sHtml; this.popObj = goN2U.getRawObject(this.myID); if (this.popObj === null) { sHtml = this.content; } else { sHtml = this.popObj.innerHTML; } return sHtml; }; N2SimplePopover.prototype.replacePlaceholders = function (sHtml) { ; if (goN2U.isUndefOrNull(sHtml)) { return ''; } if ( sHtml.indexOf('{') == -1) { return sHtml; } sHtml = sHtml.replace(/{REFTAG_HEAD}/g, this.getReftagHead()); sHtml = sHtml.replace(/{REFTAG_TAIL}/g, this.getReftagTail()); if (this.oUpdateManager) { sHtml = sHtml.replace(/{SESSION_ID}/g, this.oUpdateManager.sessionID ? this.oUpdateManager.sessionID : ''); } sHtml = sHtml.replace(/{POPOVER_ID}/g, this.myID); return sHtml.replace(/{POPOVER_OBJECT}/g, this.objectName); }; N2SimplePopover.prototype.getDataArray = function() { return this.aDataArray; }; N2SimplePopover.prototype.getPopoverElementID = function() { return this.myID; }; N2SimplePopover.prototype.isActive = function() { return this.bIsVisible; }; // we assume for now that if its visible, it IS active. N2SimplePopover.prototype.isVisible = function() { return this.bIsVisible; }; N2SimplePopover.prototype.isStatic = function() { return this.cursorCanLeavePopover; }; N2SimplePopover.prototype._presetLocate = function (locateMethod, nHAdjust, nVAdjust) { this.nHAdjust = nHAdjust ? nHAdjust : 0; this.nVAdjust = nVAdjust ? nVAdjust : 0; if (goN2U.isUndefined(locateMethod) || locateMethod == 'auto') { this.locate = this._locateLinkAdjacent; } else if (locateMethod == 'window_center' ) { this.locate = this._locateWindowCenter; } else if (locateMethod == 'below_above' ) { this.locate = this._locateLinkBelowAbove; } else if (locateMethod == 'left' ) { this.locate = this._locateLinkLeft; } else if (locateMethod == 'right' ) { this.locate = this._locateLinkRight; } else if (locateMethod == 'above' ) { this.locate = this._locateAboveLink; } else if (locateMethod == 'below' ) { this.locate = this._locateBelowLink; } else { ; this.locate = this._locateLinkAdjacent; } return this.locate; }; N2SimplePopover.prototype._locateLinkAdjacent = function (oHotspot) { var popX; var popY; var bOverlapsHotspot = false; if (oHotspot.availLeft < oHotspot.availRight ) { this.expandsH ='r'; } else { this.expandsH ='l'; } if (this.expandsH == 'l') { if (this.width + this.nHotPad < oHotspot.availLeft) { popX = oHotspot.absleft - this.width - this.nHotPad; } else { popX = this.nEdgePad; } } else { if (oHotspot.availRight > this.width) { popX = oHotspot.absleft + oHotspot.width + this.nHotPad; } else { var nWindowWidth = goN2U.getInsideWindowWidth(); var nWindowRight = document.body.scrollLeft + nWindowWidth; popX = nWindowRight - this.width - 6; bOverlapsHotspot = true; } } var totalAvailFromLinkTop = oHotspot.height + oHotspot.availUnder; if (bOverlapsHotspot && this.height <= oHotspot.availUnder) { popY = oHotspot.abstop + oHotspot.height + 2; } else if (this.height <= totalAvailFromLinkTop) { popY = oHotspot.availAbove > 0 ? oHotspot.abstop : oHotspot.abstop - oHotspot.availAbove; } else { popY = oHotspot.abstop - (this.height-totalAvailFromLinkTop+this.nEdgePad); } this._doLocate(popX, popY); }; N2SimplePopover.prototype._doLocate = function (popX, popY) { goN2U.shiftTo(this.myID, popX, popY); this.updateLocation(); this.initialLeft = this.left; this.initialTop = this.top; ; }; N2SimplePopover.prototype._locateLinkRight = function (oHotspot) { var popX = oHotspot.absleft + oHotspot.width; var popY = oHotspot.abstop; var nHAdj = this.nHAdjust; var nVAdj = this.nVAdjust; if (nVAdj == 'c') { nVAdj = parseInt(oHotspot.height/2 - this.height/2); } else if (nVAdj == 'b') { nVAdj = oHotspot.height-this.height; } this._doLocate (popX + nHAdj, popY + nVAdj); }; N2SimplePopover.prototype._locateLinkLeft = function (oHotspot) { var popX = oHotspot.absleft - this.width; var popY = oHotspot.abstop; var nHAdj = this.nHAdjust; var nVAdj = this.nVAdjust; if (nVAdj == 'c') { nVAdj = parseInt(oHotspot.height/2 - this.height/2); } else if (nVAdj == 'b') { nVAdj = oHotspot.height-this.height; } this._doLocate (popX + nHAdj, popY + nVAdj); }; N2SimplePopover.prototype._locateBelowLink = function (oHotspot) { var popX = oHotspot.absleft; var popY = oHotspot.abstop + oHotspot.height; var nHAdj = this.nHAdjust; var nVAdj = this.nVAdjust; if (nHAdj == 'c') { nHAdj = parseInt(oHotspot.width/2 - this.width/2); } else if (nHAdj == 'r') { nHAdj = oHotspot.width-this.width; } this._doLocate (popX + nHAdj, popY + nVAdj); }; N2SimplePopover.prototype._locateAboveLink = function (oHotspot) { var popX = oHotspot.absleft; var popY = oHotspot.abstop - this.height; var nHAdj = this.nHAdjust; var nVAdj = this.nVAdjust; if (nHAdj == 'c') { nHAdj = parseInt(oHotspot.width/2 - this.width/2); } else if (nHAdj == 'r') { nHAdj = oHotspot.width-this.width; } this._doLocate (popX + nHAdj, popY + nVAdj); }; N2SimplePopover.prototype._locateLinkBelowAbove = function (oHotspot) { var popX; var popY; var nXOffset = 100; var nXOffsetL = 20; var totalAvailFromLinkLeft = oHotspot.availRight + oHotspot.width; if (this.width < (totalAvailFromLinkLeft - nXOffset) ) { this.expandsH ='r'; } else { this.expandsH ='l'; } this.availDown = oHotspot.availUnder + oHotspot.height; this.availUp = oHotspot.availAbove; if (this.availUp < this.availDown - this.height ) { this.expandsV = 'd'; } else { this.expandsV = 'u'; } if (this.expandsH == 'l') { if (this.width + this.nHotPad < oHotspot.availLeft) { popX = oHotspot.absleft - this.width - this.nHotPad + nXOffsetL; } else { popX = this.nEdgePad; } } else { if (oHotspot.width >120) { popX = oHotspot.absleft + nXOffset; } else { popX = oHotspot.absleft + oHotspot.width - nXOffsetL; } } var totalAvailFromLinkTop = oHotspot.height + oHotspot.availUnder; if (this.height <= oHotspot.availUnder) { popY = oHotspot.abstop + oHotspot.height + this.nHotPad; } else { popY = oHotspot.abstop - (this.height-totalAvailFromLinkTop+this.nEdgePad); if (oHotspot.width < 120) { if (this.expandsH == 'r') { popX = oHotspot.absleft + oHotspot.width + this.nHotPad; } else { popX = oHotspot.absleft - this.width - this.nHotPad; } } } this._doLocate(popX, popY); }; N2SimplePopover.prototype._locateWindowCenter = function (oHotspot) { var popX = Math.max(document.body.scrollLeft+((goN2U.getInsideWindowWidth()-this.width)/2), this.nEdgePad); var popY = Math.max(document.body.scrollTop+((goN2U.getInsideWindowHeight()-this.height)/2), this.nEdgePad); this._doLocate(popX, popY); }; N2SimplePopover.prototype.createPopHTML = function (id, objectID, content) { var gp = ''; gp+=''; var spanEl = document.createElement("span"); spanEl.innerHTML = gp; //if(typeof(document.body.childNodes[0])=="object"){ //alert(document.body.childNodes[0].tagName);} document.body.insertBefore(spanEl,document.body.childNodes[0]); }; N2SimplePopover.prototype.saveCurrentElementData = function() { }; N2SimplePopover.prototype._defaultPopulate = function(sAction, sID, sType, sParams, sLinkID, sHref, sLinkText) { ; if (this.bLADSupported) { if (!this.isDataAvailable(sAction, sID, sType, sParams, sLinkID, sHref, sLinkText)) { return false; } } switch (sType) { case 'he': // id of an HTML element this.populateUsingElementContents(sID); break; case 'ak': // array key this.populateUsingArrayContents(sID); break; case 'a': case 'am': case 'n': case 's': case 'l': break; default: ; } if (this.bLADLoading) { this.sizeOrPositionChanged(); } return true; }; N2SimplePopover.prototype.populate = N2SimplePopover.prototype._defaultPopulate; N2SimplePopover.prototype.populateUsingElementContents = function(id, type, linkID, href, linkText) { ; ; var eElem = goN2U.getRawObject(id); if (eElem) { this.setContent(eElem.innerHTML); if (this.bMoveHEContent) { this.sCurrentContent = eElem.innerHTML; this.sCurrentHeID = id; eElem.innerHTML = ''; } } else { ; } }; N2SimplePopover.prototype.populateUsingArrayContents = function(id, type, linkID, href, linkText) { ; ; if (goN2U.isDefined(this.aDataArray) ) { if (goN2U.isDefined(this.aDataArray[id])) { this.setContent(this.aDataArray[id]); } else { ; } } else { ; } }; N2SimplePopover.prototype.isDataAvailable = function(sAction, sID, sType, sParams, sLinkID, sHref, sLinkText) { ; ; if ( this._isDataAvailable (sAction, sID, sType, sParams, sLinkID, this.sLADKey, this.sLADField) ) { return true; } else { if (--this.nLADRetries && this.isVisible()) { if (!this.bLADLoading) { this.setContent(this.sLADLoadingMessage); this.bLADLoading = true; } setTimeout (new Function("", this.objectName + ".populate(" + "'" + (sAction ? sAction : 'null') + "'," + "'" + (sID ? sID : 'null') + "'," + "'" + (sType ? sType : 'null') + "'," + "'" + (sParams ? sParams : 'null') + "'," + "'" + (sLinkID ? sLinkID : 'null') + "'," + "'" + (sHref ? sHref : 'null') + "'," + "'" + (sLinkText ? sLinkText : 'null') + "'" + ");"), this.nLADRetryMs); } else { ; this.setContent(this.sLADTimeoutMessage); } return false; } }; N2SimplePopover.prototype._isDataAvailable = function(sAction, sID, sType, sParams, sLinkID, sKey, sField) { ; ; var bIsAvailable = true; switch(sType) { case 'he': // id of an HTML element if ( sKey && goN2U.getRawObject(sKey)=== null ) { bIsAvailable = false; } else if ( goN2U.getRawObject(sID)=== null ) { bIsAvailable = false; } break; case 'ak': // array key if (this.aDataArray) { if ( sKey && goN2U.isUndefined(this.aDataArray[sKey]) ) { bIsAvailable = false; } else if ( goN2U.isUndefined(this.aDataArray[sID]) ) { bIsAvailable = false; } } break; case 'a': // key is an ASIN (which means that the aDataArray should usually point ot gaTD) case 'am': var sTDKey = sType+sID; if (this.aDataArray) { if ( // an entry for this key goN2U.isUndefined(this.aDataArray[sTDKey]) || ( sField && goN2U.isUndefined(this.aDataArray[sTDKey][sField]) ) || ( sKey && goN2U.isUndefined(this.aDataArray[sKey]) ) || ( sKey && sField && goN2U.isUndefined(this.aDataArray[sKey][sField]) )) { bIsAvailable = false; } } break; } ; return bIsAvailable; }; N2SimplePopover.prototype.sizeOrPositionChanged = function () { if (this.myFeatureChangedCallback) { this.myFeatureChangedCallback(this); } }; N2SimplePopover.prototype.updateLocation = function (flag){ var po = this.popObj; this.left = goN2U.getObjectLeft(po); this.top = goN2U.getObjectTop(po); this.width = goN2U.getObjectWidth(po); this.height = goN2U.getObjectHeight(po); this.right = this.left + this.width; this.bottom = this.top + this.height; }; N2SimplePopover.prototype.mouseOver = function () { if (this.initialMouseOver) { ; this.initialMouseOver = false; var ret = true; if (this.myMouseOverCallback) { ; ret = this.myMouseOverCallback(this); } if (ret) { } } }; N2SimplePopover.prototype.mouseMove = function (evt) { if (this.initialMouseOver) { this.mouseOver(); } }; N2SimplePopover.prototype.mouseOut = function (evt) { var inPop = true; evt = (evt) ? evt : ((window.event) ? window.event : null); if (evt) { if (goN2U.bIsIE) { inPop = goN2U.elementIsContainedBy(evt.toElement, this.popObj); } else { var x = evt.pageX; var y = evt.pageY; var po = this.popObj; var left = goN2U.getPageElementLeft(po); var top = goN2U.getPageElementTop(po); if ( (x <= left) || ( y <= top+1) || (x > left + this.width) || (y > top + this.height) ) { inPop = false; } } } if (!inPop && !this.cursorCanLeavePopover && !this.buttonIsDown) { ; this.initialMouseOver = true; var ret = true; if (this.myMouseOutCallback) { ; ret = this.myMouseOutCallback(this); ; } if (ret) { ; this.hide(); } } }; N2SimplePopover.prototype._hideTooltip = function (oLink) { var firstChild = oLink.firstChild; if (firstChild && firstChild.alt) { this.sImgAlt = firstChild.alt; firstChild.alt = ''; } }; N2SimplePopover.prototype.hookEvents = function () { }; N2SimplePopover.prototype.unhookEvents = function () { }; if (window.goN2LibMon) { goN2LibMon.endLoad('simplePopover'); } } // END library code wrapper n2RunIfLoaded("events", n2SimplePopoverInitLibrary, "simplepopover"); function n2EventsInitLibrary() { // Begin library code wrapper. Goes all the way to the bottom of the file if (window.goN2LibMon) goN2LibMon.beginLoad('events', 'n2CoreLibs'); window.N2Instance = function(oFeature) { this.className = 'N2Instance'; this.version = '1.1.0'; this.oFeature = oFeature; this._timers = new Object(); // HASH of timerids for this object, indexed by timer name. this.nSTATEDORMANT = 0; this.nSTATEPREOPEN = 1; this.nSTATEOPENING = 2; this.nSTATEVISIBLE = 3; this.nSTATECLOSING = 4; this.activeState = this.nSTATEDORMANT; this.instanceName = null; this.oRegFeatureOpened = null; } new N2Instance(); window.N2Instance.prototype.getFeature = function() { return this.oFeature; } window.N2Instance.prototype.getFeatureID = function() { return (this.oRegFeatureOpened ? this.oRegFeatureOpened.getFeatureID() : ""); } window.N2Instance.prototype.setRegFeatureOpened = function(oRegFeatureOpened) { this.oRegFeatureOpened = oRegFeatureOpened; } window.N2Instance.prototype.getRegFeatureOpened = function() { return this.oRegFeatureOpened; } window.N2Instance.prototype.getInstanceName = function() { return this.instanceName; } window.N2Instance.prototype.getInstanceNameFromLinkInfo = function(oLNI) { ; return null; } window.N2Instance.prototype._setInstanceName = function(oLNI) { ; var instanceName = this.getInstanceNameFromLinkInfo(oLNI); if (instanceName != this.instanceName) { this.clearAllTimers(); this.instanceName = instanceName; } } window.N2Instance.prototype.isDormant = function() { return (this.activeState <= this.nSTATEDORMANT); } window.N2Instance.prototype.isPreOpen = function() { return (this.nSTATEDORMANT < this.activeState && this.activeState <= this.nSTATEPREOPEN); } window.N2Instance.prototype.isOpening = function() { return (this.nSTATEPREOPEN < this.activeState && this.activeState <= this.nSTATEOPENING); } window.N2Instance.prototype.isVisible = function() { return (this.nSTATEOPENING < this.activeState && this.activeState <= this.nSTATEVISIBLE); } window.N2Instance.prototype.isClosing = function() { return (this.nSTATEVISIBLE < this.activeState); } window.N2Instance.prototype.isActive = function() { return this.isVisible(); }; window.N2Instance.prototype.setTimer = function(timerName, nMSDelay, eventData) { this.clearTimer(timerName); var timerObject = new Object(); this._timers[timerName] = timerObject; ;//goN2Debug.info("N2Instance setting timer feature " + this.getFeatureID() + ", instance " + this.getInstanceName() + ", timer " + timerName + ", eventData " + eventData); timerObject.eventData = eventData; timerObject.timerid = setTimeout( "N2Instance._timerFired('" + this.getFeatureID() + "', '" + this.getInstanceName() + "', '" + timerName+"')", nMSDelay); } window.N2Instance.prototype.clearTimer = function(timerName) { var timerObject = this._timers[timerName]; if (timerObject) { ; clearTimeout(timerObject.timerid); this._timers[timerName] = 0; } } window.N2Instance.prototype.clearAllTimers = function() { ; for (var timerName in this._timers) { this.clearTimer(timerName); } } window.N2Instance._timerFired = function(featureID, instanceName, timerName) { ; var oFeature = goN2Events.lookupFeature(featureID); ; if (!oFeature) { return; } var oInstance = oFeature.getInstance(featureID, instanceName); ; if (!oInstance) { return; } var timerObject = oInstance._timers[timerName]; oInstance._timers[timerName] = 0; ; oInstance[timerName](timerObject.eventData); } window.N2FInstance = function(oFeature) { N2FInstance.parentClass.call(this, oFeature); this.className = 'N2FInstance'; this.version = '1.1.0'; this.bPreOpenDuringClose = false; this.bMouseIsIn = false; } window.N2FInstance.prototype = new N2Instance(); window.N2FInstance.parentClass = N2Instance; window.N2FInstance.prototype.getRawObject = function() { ; return null; } window.N2FInstance.prototype.getInstanceNameFromLinkInfo = function(oLNI) { var name = N2FInstance.getInstanceNameFromLinkInfo(oLNI); return name; } window.N2FInstance.getInstanceNameFromLinkInfo = function(oLNI) { ; var name = (oLNI.getID() ? N2Feature.prefixFInstanceNames + oLNI.getID() : null); return name; } window.N2FInstance.prototype.isStatic = function() { return false; } window.N2FInstance.prototype.assignInstance = function(oLNI) { if (!this.isDormant()) { ; return false; } this._setInstanceName(oLNI); return true; } window.N2FInstance.prototype.overlayClosed = function() { return; } window.N2FInstance.prototype.notifyFInstanceHasMouse = function(bMouseIsInInstance) { ; } window.N2FInstance.prototype.notifyFInstanceHasMouse = function(bMouseIsInInstance) { var bMouseWasIn = this.bMouseIsIn; this.bMouseIsIn = bMouseIsInInstance; if (this.oFeature.isDisabled()) { return; } if (this.isStatic()) { return; } if (bMouseWasIn && !bMouseIsInInstance) { ; this._scheduleClose(this.getRegFeatureOpened().getDelayCloseAfter()); } else if (!bMouseWasIn && bMouseIsInInstance) { ; this._cancelClose(); } } window.N2FInstance.prototype.mouseOverHotspotOpen = function(oLNI, nFeatureFlags) { ;//goN2Debug.info("feature instance mouseOverHotspotOpen; feature " + oLNI.getFeature() + ", feature instance '" + this.getInstanceName() + "'"); var oRegFeature = goN2Events.lookupRegFeature(oLNI.getFeature()); ; if (this.oFeature.isDisabled()) { return; } if (this.activeState<=this.nSTATEPREOPEN || this.isClosing()) { this._scheduleOpen(oLNI, nFeatureFlags, oRegFeature.getDelayShowAfter()); } else { ; this._cancelClose(); } } window.N2FInstance.prototype.mouseOutHotspotClose = function(oLNI) { ;//goN2Debug.info("feature instance mouseOutHotspotClose; feature " + this.getFeatureID() + ", feature instance '" + this.getInstanceName() + "'"); var oRegFeature = goN2Events.lookupRegFeature(oLNI.getFeature()); ; if (this.activeState <= this.nSTATEDORMANT) { } else if (this.activeState <= this.nSTATEPREOPEN) { this._cancelOpen(); } else if (this.activeState <= this.nSTATEVISIBLE) { this._scheduleClose(oRegFeature.getDelayReachWithin()); } else { } } window.N2FInstance.prototype.clickHotspotOpen = function(oLNI, nFeatureFlags) { ;//goN2Debug.info("feature instance clickHotspotOpen; feature " + this.getFeatureID() + ", feature instance '" + this.getInstanceName() + "'"); var oRegFeature = goN2Events.lookupRegFeature(oLNI.getFeature()); ; this.openNow(oLNI, nFeatureFlags); } window.N2FInstance.prototype.mouseOver = function() { ;//goN2Debug.info("feature instance mouseOver; feature " + this.getFeatureID() + ", feature instance '" + this.getInstanceName() + "'"); this.notifyFInstanceHasMouse(true); } window.N2FInstance.prototype.mouseOut = function() { ;//goN2Debug.info("feature instance mouseOut; feature " + this.getFeatureID() + ", feature instance '" + this.getInstanceName() + "'"); this.notifyFInstanceHasMouse(false); } window.N2FInstance.prototype._scheduleOpen = function(oLNI, nFeatureFlags, nMSDelay) { this.setRegFeatureOpened(goN2Events.lookupRegFeature(oLNI.getFeature())); ; var eventData = new Object(); eventData.oLNI = oLNI; eventData.nFeatureFlags = nFeatureFlags; this.setTimer("_timedOpen", nMSDelay, eventData); if (this.isClosing()) { this.bPreOpenDuringClose = true; } else { this.activeState = this.nSTATEPREOPEN; } } window.N2FInstance.prototype._timedOpen = function(eventData) { if (this.oFeature.isDisabled()) { return; } this.openNow(eventData.oLNI, eventData.nFeatureFlags); } window.N2FInstance.prototype._cancelOpen = function() { ; this.clearTimer("_timedOpen"); } window.N2FInstance.prototype._scheduleClose = function(nMSDelay) { ; if (this.isStatic()) { return; } this.setTimer("_timedClose", nMSDelay, null); } window.N2FInstance.prototype._timedClose = function(eventData) { this.closeNow(); } window.N2FInstance.prototype._cancelClose = function() { ; this.clearTimer("_timedClose"); } window.N2FInstance.prototype.openNow = function(oLNI, nFeatureFlags) { ; } window.N2FInstance.prototype.closeNow = function(bImmediate) { ; } window.N2FInstanceWrapper = function(oWrapperFeature) { N2FInstanceWrapper.parentClass.call(this, oWrapperFeature); // Call the base class constructor function. this.className = 'N2FInstanceWrapper'; this.version = '1.1.0'; this.oWrappedFeature = null; // must be null except when Active. } window.N2FInstanceWrapper.prototype = new N2FInstance(); window.N2FInstanceWrapper.parentClass = N2FInstance; window.N2FInstanceWrapper.prototype.isStatic = function() { return ((this.oWrappedFeature && this.oWrappedFeature.isStatic) ? this.oWrappedFeature.isStatic() : false); } window.N2FInstanceWrapper.prototype.getRawObject = function() { ; return this.oWrappedFeature.getObject(); } window.N2FInstanceWrapper.prototype.openNow = function(oLNI, nFeatureFlags) { ;//goN2Debug.info("feature instance wrapper openNow; feature " + oLNI.getFeature() + ", feature instance '" + this.getInstanceNameFromLinkInfo(oLNI) + "'"); ; if (this.oFeature.isDisabled()) { return; } var oFInstanceActive = this.oFeature.getActiveWrappedFInstance(); if (oFInstanceActive) { oFInstanceActive.closeNow(true); } this.oWrappedFeature = this.oFeature.getWrappedFeatureObj(); this.oFeature.setActiveWrappedFInstance(this); if (!this.oWrappedFeature.isVisible()) { ; this._cancelOpen(); this.setRegFeatureOpened(goN2Events.lookupRegFeature(oLNI.getFeature())); var oHotspot = this._createHotspotObj(oLNI, nFeatureFlags); this.oWrappedFeature.show(oHotspot); if (this.oWrappedFeature.isVisible()) { goN2Events.toggleObjects("hide", this.oFeature.getWrappedFeatureActiveElement().id); this._setStateFromWrappedFeature(this.nSTATEVISIBLE); } else { this.oWrappedFeature = null; this.oFeature.setActiveWrappedFInstance(null); this._setStateFromWrappedFeature(this.nSTATEDORMANT); } } else { ; this._setStateFromWrappedFeature(this.nSTATEVISIBLE); } } window.N2FInstance.prototype.overlayClosed = function() { if (this.oWrappedFeature) { this.oWrappedFeature = null; this.oFeature.setActiveWrappedFInstance(null); } this._setStateFromWrappedFeature(this.nSTATEDORMANT); } window.N2FInstanceWrapper.prototype._setStateFromWrappedFeature = function(activeStateExpected) { if (this.oWrappedFeature && this.oWrappedFeature.isVisible()) { this.activeState = this.nSTATEVISIBLE; } else { this.activeState = this.nSTATEDORMANT; } ; if (this.activeState != activeStateExpected) { ; } } window.N2FInstanceWrapper.prototype.closeNow = function(bImmediate) { ;//goN2Debug.info("feature instance wrapper closeNow; feature " + this.getFeatureID() + ", feature instance '" + this.getInstanceName() + "'"); if (this.isStatic()) { return; } var oWrappedFeature = this.oWrappedFeature; if (oWrappedFeature && oWrappedFeature.isVisible()) { this._cancelClose(); var nAnimateCloseSaved; if (bImmediate) { nAnimateCloseSaved = this._smashNAnimateClose(oWrappedFeature, 0); } try { ; oWrappedFeature.hide(); } catch (e) { if (bImmediate) { this._smashNAnimateClose(oWrappedFeature, nAnimateCloseSaved); } throw(e); } if (bImmediate) { this._smashNAnimateClose(oWrappedFeature, nAnimateCloseSaved); } ; if (this.oWrappedFeature) { this.oWrappedFeature = null; this.oFeature.setActiveWrappedFInstance(null); } goN2Events.toggleObjects("show"); } else { ; } this._setStateFromWrappedFeature(this.nSTATEDORMANT); this.setRegFeatureOpened(null); } window.N2FInstanceWrapper.prototype._smashNAnimateClose = function(oWrappedFeature, newValue) { var oldValue = oWrappedFeature.nAnimateClose; oWrappedFeature.nAnimateClose = newValue; return oldValue; } window.N2FInstanceWrapper.prototype._createHotspotObj = function(oLNI, nFeatureFlags) { if (goN2U.isUndefOrNull(nFeatureFlags)) { nFeatureFlags = 0; } var oHotspot = new Object(); oHotspot.id = ""; oHotspot.objectname = ""; oHotspot.abstop = ""; // abs y within the document oHotspot.absleft = ""; // abs x within the document oHotspot.top = ""; // abs y within the window [relative to the document] oHotspot.left = ""; // abs x within the window [relative to the document] oHotspot.bottom = ""; oHotspot.right = ""; oHotspot.availAbove = 0; oHotspot.availUnder = 0; oHotspot.availLeft = 0; oHotspot.availRight = 0; oHotspot.scrollLeft = 0; oHotspot.scrollTop = 0; oHotspot.clientHeight = 0; oHotspot.clientWidth = 0; oHotspot.staticFlag = 0; var sFeatureID = oLNI.getFeature(); ; var sLinkID = oLNI.getLinkID(); var oLink = goN2U.getRawObject(sLinkID); oHotspot.oLink = oLink; var sName = oLNI.getLinkName(); if (sName != oLink.id) { oHotspot.sNameOverride = sName; } ; oHotspot.featureID = sFeatureID; ; oHotspot.relatedFeatureObj = this.oWrappedFeature; oHotspot.staticFlag = nFeatureFlags; oHotspot.scrollLeft = document.body.scrollLeft; oHotspot.scrollTop = document.body.scrollTop; oHotspot.clientHeight = document.body.clientHeight; oHotspot.clientWidth = document.body.clientWidth; ; ; oHotspot.href = oLink.href; var sTmp; var re = /([\r\n])/gi; sTmp = oLink.innerHTML; oHotspot.linkHTML = sTmp.replace(re, " "); sTmp = goN2U.isUndefOrNull(oLink.innerText) ? oLink.innerHTML : oLink.innerText; oHotspot.linkText = sTmp.replace(re, " "); ; ; ; ; oHotspot.absleft = goN2U.getScrolledElementLeft(oLink)-pagewidth; oHotspot.abstop = goN2U.getScrolledElementTop(oLink); oHotspot.left = goN2U.getObjectLeft(oLink) - oHotspot.scrollLeft; oHotspot.top = goN2U.getObjectTop(oLink) - oHotspot.scrollTop; oHotspot.width = goN2U.getObjectWidth(oLink); oHotspot.height = goN2U.getObjectHeight(oLink); var firstChild = oLink.firstChild; if ( (oHotspot.width == 0) && firstChild ){ oHotspot.width = goN2U.getObjectWidth(firstChild); oHotspot.height = goN2U.getObjectHeight(firstChild); } else if (goN2U.isMozilla5() && firstChild && firstChild.tagName == 'IMG') { oHotspot.bottom = oHotspot.top + goN2U.getObjectHeight(oLink); oHotspot.height = goN2U.getObjectHeight(firstChild); var oldTop = oHotspot.top; oHotspot.top = oHotspot.bottom - oHotspot.height; oHotspot.abstop = oHotspot.abstop + (oHotspot.top-oldTop); } oHotspot.right = oHotspot.left + oHotspot.width; oHotspot.bottom = oHotspot.top + oHotspot.height; oHotspot.sLinkID = sLinkID; ; //oLink set earlier oHotspot.availAbove = oHotspot.abstop - oHotspot.scrollTop - 1; oHotspot.availUnder = oHotspot.clientHeight - (oHotspot.abstop + oHotspot.height - oHotspot.scrollTop); oHotspot.availLeft = oHotspot.absleft - oHotspot.scrollLeft -1; oHotspot.availRight = oHotspot.clientWidth - (oHotspot.absleft + oHotspot.width - oHotspot.scrollLeft); return oHotspot; } window.N2HInstance = function(oFeature) { N2HInstance.parentClass.call(this, oFeature); // Call the base class constructor function. this.className = 'N2HInstance'; this.version = '1.1.0'; } window.N2HInstance.prototype = new N2Instance(); window.N2HInstance.parentClass = N2Instance; window.N2HInstance.prototype.getInstanceNameFromLinkInfo = function(oLNI) { return N2HInstance.getInstanceNameFromLinkInfo(oLNI); } window.N2HInstance.getInstanceNameFromLinkInfo = function(oLNI) { ; ; return N2Feature.prefixHInstanceNames + oLNI.getLinkID(); } window.N2HInstance.prototype.getLinkInfoFromInstanceName = function(sInstanceName) { return N2HInstance.getInstanceNameFromLinkInfo(sInstanceName); } window.N2HInstance.getLinkInfoFromInstanceName = function(sInstanceName) { ; var prefixLength = N2Feature.prefixHInstanceNames.length; ; var sLinkID = sInstanceName.substr(prefixLength, sInstanceName.length-prefixLength); return goN2U.getLinkNameInfo(sLinkID); } window.N2HInstance.prototype.mouseOverOpen = function(oLNI, nFeatureFlags) { if (this.oFeature.isDisabled()) { return; } ;//goN2Debug.info("hotspot mouseOverOpen; hotspot id " + oLNI.getLinkID() + ", name " + oLNI.getLinkName()); var oFInstance = this.oFeature.getFeatureInstance(oLNI); if (!oFInstance) { oFInstance = this.oFeature.createFeatureInstance(oLNI); } if (oFInstance) { oFInstance.mouseOverHotspotOpen(oLNI, nFeatureFlags); } else { ; } } window.N2HInstance.prototype.mouseClickOpen = function(oLNI, nFeatureFlags) { ;//goN2Debug.info("hotspot mouseClickOpen; hotspot id " + oLNI.getLinkID() + ", name " + oLNI.getLinkName()); if (this.oFeature.isDisabled()) { return; } var oFInstance = this.oFeature.getFeatureInstance(oLNI); if (!oFInstance) { oFInstance = this.oFeature.createFeatureInstance(oLNI); } if (oFInstance) { oFInstance.clickHotspotOpen(oLNI, nFeatureFlags); } else { ; } } window.N2HInstance.prototype.mouseOutClose = function(oLNI) { ;//goN2Debug.info("hotspot mouseOutClose; hotspot id " + oLNI.getLinkID() + ", name " + oLNI.getLinkName()); if (this.oFeature.isDisabled()) { return; } var oFInstance = this.oFeature.getFeatureInstance(oLNI); if (oFInstance) { oFInstance.mouseOutHotspotClose(oLNI); } } window.N2RegFeature = function(oFeature, sFeatureID, mouseOverFn, mouseOutFn, clickFn) { this.className = 'N2RegFeature'; this.version = '1.1.0'; if (!oFeature) { return; } if (!mouseOverFn) { mouseOverFn = n2MouseOverHotspotNop; } if (!mouseOutFn) { mouseOutFn = n2MouseOutHotspotNop; } this._sFeatureID = sFeatureID; this._oFeature = oFeature; this._timerDelays = new Object(); this._timerDelays.showAfter = 400; this._timerDelays.reachWithin = 600; this._timerDelays.closeAfter = 400; this._eventsRegistry = new Object(); this._registeredFunctions = new Object(); this._preProcessEventFunction('onmouseover', mouseOverFn); this._preProcessEventFunction('onmouseout', mouseOutFn); this._preProcessEventFunction('onclick', clickFn); } new N2RegFeature(); window.N2RegFeature.prototype.getFeatureID = function() { return this._sFeatureID; } window.N2RegFeature.prototype.getFeature = function() { return this._oFeature; } window.N2RegFeature.prototype.getEventHelperFunction = function(event) { return this._registeredFunctions[event]; } window.N2RegFeature.prototype._preProcessEventFunction = function(event, fname) { try { ; var code = eval(fname) this._eventsRegistry[event] = fname; this._registeredFunctions[event] = code; ; } catch (e) { ; } } window.N2RegFeature.prototype.attachEventsToLink = function(elem) { for (var event in this._eventsRegistry) { if (this._eventsRegistry[event]) { ; elem[event] = this._registeredFunctions[event]; } } } window.N2RegFeature.prototype.setDelays = function(nShowAfter, nReachWithin, nCloseAfter) { var a, b, c; a = this._timerDelays.showAfter = goN2U.isUndefOrNull(nShowAfter) ? this._timerDelays.showAfter : nShowAfter; b = this._timerDelays.reachWithin = goN2U.isUndefOrNull(nReachWithin) ? this._timerDelays.reachWithin : nReachWithin; c = this._timerDelays.closeAfter = goN2U.isUndefOrNull(nCloseAfter) ? this._timerDelays.closeAfter : nCloseAfter; ; } window.N2RegFeature.prototype.getDelayShowAfter = function() { return this._timerDelays.showAfter; } window.N2RegFeature.prototype.getDelayReachWithin = function() { return this._timerDelays.reachWithin; } window.N2RegFeature.prototype.getDelayCloseAfter = function() { return this._timerDelays.closeAfter; } window.N2Feature = function() { this.className = 'N2Feature'; this.version = '1.1.0'; this._timeDisabledUntil = null; this._nDefaultDisableMs = 5000; this._oHInstance = new N2HInstance(this); } new N2Feature(); window.N2Feature.prefixHInstanceNames = "HS_"; window.N2Feature.prefixFInstanceNames = "FI_"; window.N2Feature.prototype.closeAllInstances = function(bImmediate) { ; } window.N2Feature.prototype.notifyMouseOwner = function(oRegFeatureMouseOwner, sInstanceNameMouseOwner) { ; } window.N2Feature.prototype.disableFeature = function(nMSDelay) { if (!nMSDelay) { nMSDelay = this._nDefaultDisableMs; } this.clossAll(false); var date = new Date(); var now = date.getTime(); this._timeDisabledUntil = now + nMSDelay; } window.N2Feature.prototype.isDisabled = function() { var bDisabled = false; if (this._timeDisabledUntil) { var date = new Date(); var now = date.getTime(); if (now < this._timeDisabledUntil) { bDisabled = true; } else { this._timeDisabledUntil = null; } } return bDisabled; } window.N2Feature.prototype.getFeatureInstance = function(oLNI_or_featureID, sInstanceName) { ; return null; } window.N2Feature.prototype.createFeatureInstance = function(oLNI) { ; return null; } window.N2Feature.prototype.getFeatureInstanceName = function(oLNI) { return N2FInstance.getInstanceNameFromLinkInfo(oLNI); } window.N2Feature.prototype.getHotspotInstance = function(oLNI_or_featureID, sInstanceName) { return this._oHInstance; } window.N2Feature.prototype.getHotspotInstanceName = function(oLNI) { return N2HInstance.getInstanceNameFromLinkInfo(oLNI); } window.N2Feature.prototype.getLinkInfoFromHotspotInstanceName = function(sInstanceName) { return N2HInstance.getLinkInfoFromInstanceName(sInstanceName); } window.N2Feature.prototype.isHotspotInstanceName = function(sInstanceName) { ; if (sInstanceName) { return (sInstanceName.substr(0,N2Feature.prefixHInstanceNames.length) == N2Feature.prefixHInstanceNames); } return false; } window.N2Feature.prototype.getInstance = function(featureID, sInstanceName) { ; if (sInstanceName.substr(0,N2Feature.prefixHInstanceNames.length) == N2Feature.prefixHInstanceNames) { return this.getHotspotInstance(featureID, sInstanceName); } else if (sInstanceName.substr(0,N2Feature.prefixFInstanceNames.length) == N2Feature.prefixFInstanceNames) { return this.getFeatureInstance(featureID, sInstanceName); } ; return null; } window.N2FeatureWrapper = function(sFeatureID, oWrappedFeature, wrappedFeatureObjectName) { N2FeatureWrapper.parentClass.call(this); // THIS line MUST come first -- executes parent constructor this.className = 'N2FeatureWrapper'; this.version = '1.1.0'; this._oWrappedFeature = oWrappedFeature; // JSF 1.0 Feature object this._wrappedFeatureObjectName = wrappedFeatureObjectName; this._oActiveFInstance = null; // the active feature instance, if any. this._featureInstances = new Object(); } window.N2FeatureWrapper.prototype = new N2Feature(); window.N2FeatureWrapper.parentClass = N2Feature; window.N2FeatureWrapper.prototype.getWrappedFeatureObjectName = function() { return this._wrappedFeatureObjectName; } window.N2FeatureWrapper.prototype.getWrappedFeatureObj = function() { return this._oWrappedFeature; } window.N2FeatureWrapper.prototype.getActiveWrappedFInstance = function() { return this._oActiveFInstance; } window.N2FeatureWrapper.prototype.setActiveWrappedFInstance = function(oWrappingInstance) { ; this._oActiveFInstance = oWrappingInstance; } window.N2FeatureWrapper.prototype.getWrappedFeatureActiveElement = function() { return (this._oWrappedFeature.isActive() ? this._oWrappedFeature.getObject() : null); } window.N2FeatureWrapper.prototype.getWrappedMouseOutCallback = function() { return this._oWrappedFeature.myMouseOutCallback; } window.N2FeatureWrapper.prototype.getFeatureInstance = function(oLNI_or_featureID, sInstanceName) { var featureID; if (typeof oLNI_or_featureID == "string") { featureID = oLNI_or_featureID; } else { var oLNI = oLNI_or_featureID; featureID = oLNI.getFeature(); sInstanceName = N2FInstance.getInstanceNameFromLinkInfo(oLNI); } for (var id in this._featureInstances) { if (id == featureID + "|" + sInstanceName) { return this._featureInstances[id]; } } return null; } window.N2FeatureWrapper.prototype.notifyMouseOwner = function(oRegFeatureMouseOwner, sInstanceNameMouseOwner) { var oFeatureMouseOwner = (oRegFeatureMouseOwner ? oRegFeatureMouseOwner.getFeature() : null); var featureIDMouseOwner = (oRegFeatureMouseOwner ? oRegFeatureMouseOwner.getFeatureID() : ""); for (var id in this._featureInstances) { var idArray = id.split("|"); var featureID = idArray[0]; var oFInstance = this._featureInstances[id]; oFInstance.notifyFInstanceHasMouse( this == oFeatureMouseOwner && // needed because featureIDs might be null oFInstance.getFeatureID() == featureIDMouseOwner && oFInstance.getInstanceName() == sInstanceNameMouseOwner ); } if (oFeatureMouseOwner==this && this.isHotspotInstanceName(sInstanceNameMouseOwner)) { var oLNI = this.getLinkInfoFromHotspotInstanceName(sInstanceNameMouseOwner); if (oLNI) { var hotspotElem = goN2U.getRawObject(oLNI.getLinkID()); var helperFunction = oRegFeatureMouseOwner.getEventHelperFunction("onmouseover"); if (hotspotElem && helperFunction) { helperFunction.call(hotspotElem); } } } } window.N2FeatureWrapper.prototype.closeAllInstances = function(bImmediate) { ; // gets the wrapped feature, not the instance! But uncalled, so it's OK. var oFInstance = this.getWrappedFeatureActiveElement(); if (oFInstance) { oFInstance.closeNow(bImmediate); } } window.N2FeatureWrapper.prototype.createFeatureInstance = function(oLNI) { var oWrappingInstance = new N2FInstanceWrapper(this); oWrappingInstance.assignInstance(oLNI); var id = oLNI.getFeature() + "|" + oWrappingInstance.getInstanceNameFromLinkInfo(oLNI); ; this._featureInstances[id] = oWrappingInstance; return oWrappingInstance; } window.N2Events = function() { this.className = 'N2Events'; this.version = '1.1.0'; this._nextAvailId = 0; this._oFeatureMouseOwner = null; // the instance's feature this._sInstanceNameMouseOwner = ""; // the instance name this._nParentSeeks=3; this._bAnalyzeHREFs=false; this._sAutoFeatureID='autoexp'; this._featureChangedTimer = null; this._featureRegistry = new Object(); this.fSEMISTATIC = N2Events.fSEMISTATIC; this.fSTATICWITHCLOSE = N2Events.fSTATICWITHCLOSE; this.initialize = function() { if (!this._initialized) { ; // safety net failed this._initialized = true; N2ChainEventHandler('onmousemove', function(evt) { evt = (evt) ? evt : window.event; if (typeof goN2Events == "object") { goN2Events._mouseMoved(evt); } }, 'N2EventsMouse'); ; } else { ; } } this.registerFeature = function(sFeatureID, featureObjectOrObjectName, mouseOverFn, mouseOutFn, clickFn) { ; ; var oFeature; if (typeof featureObjectOrObjectName == "object") { oFeature = featureObjectOrObjectName; } else { var oWrappedFeature = this._evalWrappedFeatureObjectName(featureObjectOrObjectName); if (oWrappedFeature == null) { ; return; } oFeature = this._getFeatureFromWrappedFeature(oWrappedFeature); if (!oFeature) { oFeature = new N2FeatureWrapper(sFeatureID, oWrappedFeature, featureObjectOrObjectName); } } var oRegFeature = new N2RegFeature(oFeature, sFeatureID, mouseOverFn, mouseOutFn, clickFn); this._featureRegistry[sFeatureID] = oRegFeature; } this._evalWrappedFeatureObjectName = function(wrappedFeatureObjectName) { var oWrappedFeature = null; try { oWrappedFeature = eval(wrappedFeatureObjectName); } catch (e) { } return oWrappedFeature; } this.lookupRegFeature = function(sFeatureID) { return this._featureRegistry[sFeatureID]; } this.lookupFeature = function(sFeatureID) { var oRegFeature = this._featureRegistry[sFeatureID]; return (oRegFeature ? oRegFeature.getFeature() : null); } this._getFeatureFromWrappedFeature = function(oWrappedFeature) { for (var sFeatureID in this._featureRegistry) { var oRegFeature = this._featureRegistry[sFeatureID]; var oFeature = oRegFeature.getFeature(); if (oFeature.getWrappedFeatureObj && oFeature.getWrappedFeatureObj() === oWrappedFeature ) { return oFeature; } } } this._searchForActiveFeature = function(elementMouse) { var oFeatureActive = null; for (var sFeatureID in this._featureRegistry) { var oFeature = this._featureRegistry[sFeatureID].getFeature(); var oWrappedFeature = oFeature.getWrappedFeatureObj(); if (oWrappedFeature.isStatic()) { continue; } var elementFeature = oFeature.getWrappedFeatureActiveElement(); if (goN2U.elementIsContainedBy(elementMouse, elementFeature)) { if (oFeatureActive && oFeatureActive!==oFeature) { ; } oFeatureActive = oFeature; } } return oFeatureActive; } this.setFeatureDelays = function(sFeatureID, nShowAfter, nReachWithin, nCloseAfter) { var oRegFeature = this._featureRegistry[sFeatureID]; if (!oRegFeature) { ; return; } oRegFeature.setDelays(nShowAfter, nReachWithin, nCloseAfter); } this.analyzeHREFS = function(b) { this._bAnalyzeHREFs = b; } this.setAutoFeatureID = function(s) { this._sAutoFeatureID=s; } this.broadcastMouseOwner = function(oRegFeatureMouseOwner, sInstanceNameMouseOwner) { var oFeatureMouseOwner = (oRegFeatureMouseOwner ? oRegFeatureMouseOwner.getFeature() : null); if (oFeatureMouseOwner!==this._oFeatureMouseOwner || sInstanceNameMouseOwner!=this._sInstanceNameMouseOwner ) { this._oFeatureMouseOwner = oFeatureMouseOwner; this._sInstanceNameMouseOwner = sInstanceNameMouseOwner; for (var sFeatureID in this._featureRegistry) { var oFeature = this._featureRegistry[sFeatureID].getFeature(); oFeature.notifyMouseOwner(oRegFeatureMouseOwner, sInstanceNameMouseOwner); } } } this.instanceIsNotMouseOwner = function(oRegFeature, sInstanceName) { var oFeature = oRegFeature.getFeature(); if (oFeature===this._oFeatureMouseOwner && sInstanceName==this._sInstanceNameMouseOwner ) { this._oFeatureMouseOwner = null; this._sInstanceNameMouseOwner = ""; } } this._attachEventsToLink = function(elem, name) { var modified = false; var nameArray = name.split("|"); if (nameArray.length < N2Events.nMINHOTSPOTNAMECOMPONENTS) { return false; } var sFeatureID = nameArray[0]; var oRegFeature = this.lookupRegFeature(sFeatureID); if (sFeatureID && oRegFeature) { ; if (!elem.id) { elem.setAttribute("id","lnx"+this._nextAvailId); ; this._nextAvailId++; } oRegFeature.attachEventsToLink(elem); modified = true; } return modified; } this._mouseMoved = function(evt) { ; var name; var elem; if (goN2U.bIsIE) elem = evt.srcElement; else elem = evt.target; var elemBase = elem; // save the element on which the event was generated if (elem) { if (!elem.name && this._bAnalyzeHREFs) { var sHref = elem.href; if (elem.tagName == 'IMG') { var i = 2; //this._nParentSeeks; var parentElem = goN2U.getParentElement(elem); while ( parentElem && i ) { if (parentElem.href) { sHref = parentElem.href; break; } parentElem = goN2U.getParentElement(parentElem); i--; } } if (sHref) { var aRE = new Array(); aRE[0] = /\/exec\/obidos\/ASIN\/([^\/]*)\//; aRE[1] = /\/exec\/obidos\/am\/[^=]+=ASIN\/([^\/]+)/; aRE[2] = /\/exec\/obidos\/tg\/detail\/-\/([^\/]*)\//; aRE[3] = /\/exec\/obidos\/am\/[^\/]+\/detail\/-\/([^\/]*)\//; sHref = unescape(sHref); for (var i=0;i= N2Events.nMINHOTSPOTNAMECOMPONENTS) { var oLNI = goN2U.getLinkNameInfo(elem.id); if (oLNI) { var sFeatureID = oLNI.getFeature(); oRegFeature = this.lookupRegFeature(sFeatureID); if (oRegFeature) { var oFeature = oRegFeature.getFeature(); bIsInInstance = true; sInstanceName = oFeature.getHotspotInstanceName(oLNI); } } } } this.broadcastMouseOwner(oRegFeature, sInstanceName); } this.addEventHandler = function(eventID, fn) { var r; if (window.addEventListener) { window.addEventListener(eventID, fn, false); r = true; } else if (window.attachEvent) { r = document.attachEvent("on"+eventID, fn); } else { ; r = false; } ; return r; } this.removeEventHandler = function(eventID, fn) { var r; if (window.removeEventListener) { window.addEventListener(eventID, fn, false); r = true; } else if (window.detachEvent) { r = document.detachEvent("on"+eventID, fn); } else { ; r = false; } ; return r; } this.toggleObjects = function(etype, element) { var thisLeft; var thisTop; var thisRight; var thisBottom; if (etype != "hide") { ; } else { var oElement = goN2U.getRawObject(element); if (!oElement) { ; return; } ; thisLeft = goN2U.getObjectLeft(oElement); thisTop = goN2U.getObjectTop(oElement); thisRight = thisLeft + goN2U.getObjectWidth(oElement); thisBottom = thisTop + goN2U.getObjectHeight(oElement); } this._checkPopOverObjects("EMBED", etype, thisLeft, thisTop, thisRight, thisBottom); this._checkPopOverObjects("OBJECT", etype, thisLeft, thisTop, thisRight, thisBottom); if (goN2U.bIsIE) { this._checkPopOverObjects("select", etype, thisLeft, thisTop, thisRight, thisBottom); } } this._checkPopOverObjects = function(tagName, etype, thisLeft, thisTop, thisRight, thisBottom) { var myObjs = document.getElementsByTagName(tagName); var i; for (i=0; i= pL) && (mL <= pR) && (mT >= pT) && (mT <= pB) ) return true; if ( (mL >= pL) && (mL <= pR) && (mB >= pT) && (mB <= pB) ) return true; if ( (mR >= pL) && (mR <= pR) && (mT >= pT) && (mT <= pB) ) return true; if ( (mR >= pL) && (mR <= pR) && (mB >= pT) && (mB <= pB) ) return true; if ( (mL >= pL) && (mL <= pR) && (mT <= pT) && (mB >= pB) ) return true; if ( (pL >= mL) && (pL <= mR) && (pT >= mT) && (pT <= mB) ) return true; if ( (pL >= mL) && (pL <= mR) && (pB >= mT) && (pB <= mB) ) return true; if ( (pR >= mL) && (pR <= mR) && (pT >= mT) && (pT <= mB) ) return true; if ( (pR >= mL) && (pR <= mR) && (pB >= mT) && (pB <= mB) ) return true; return false; } this.disableFeature = function(featureID, delay) { var oFeature = this.lookupFeature(featureID); ; if (oFeature) { oFeature.disableFeature(nMSDelay); } } this.featureIsDisabled = function(featureID) { var bDisabled = false; var oFeature = this.lookupFeature(featureID); ; if (oFeature) { bDisabled = oFeature.isDisabled(); } return bDisabled; } this.qaAddIDsToNamedLinks = function() { var mylinks = document.getElementsByTagName("a"); for (var i=0; i=N2Events.nMINHOTSPOTNAMECOMPONENTS && !mylinks[i].id ) { mylinks[i].setAttribute("id","lnx"+this._nextAvailId); ; this._nextAvailId++; } } } } this.invokeFeature = function(linkID, bShow, sNameOverride, nFeatureFlags) { var elem = goN2U.getRawObject(linkID); if (elem == null) { ; return; } nFeatureFlags |= this.fSTATICWITHCLOSE; var oLNI = goN2U.getLinkNameInfo(linkID, sNameOverride); if (!oLNI) { ; return; } var oFeature = this.lookupFeature(oLNI.getFeature()); var oFInstance = oFeature.getFeatureInstance(oLNI); if (!oFInstance && bShow) { oFInstance = oFeature.createFeatureInstance(oLNI); } if (!oFInstance) { ; return; } if (bShow) { ; oFInstance.openNow(oLNI, nFeatureFlags); } else { ; oFInstance.closeNow(); } } this.qaTestFeature = function(sLinkID, bShow, sNameOverride, sFlags){ ; this.invokeFeature(sLinkID, bShow, sNameOverride, sFlags) } this.mouseOverHotspotOpen = function(hotspotElement, nFeatureFlags) { ; var oRegFeature = null; var oFeature = null; var sInstanceName; var oHInstance = null; var oLNI = goN2U.getLinkNameInfo(hotspotElement.id); if (oLNI) { oRegFeature = goN2Events.lookupRegFeature(oLNI.getFeature()); oFeature = oRegFeature.getFeature(); sInstanceName = oFeature.getHotspotInstanceName(oLNI); oHInstance = oFeature.getHotspotInstance(oLNI); } this.broadcastMouseOwner(oRegFeature, sInstanceName); if (oHInstance) { oHInstance.mouseOverOpen(oLNI, nFeatureFlags); } else { ; } } this.mouseOverHotspotTrack = function(hotspotElement, bOpenFeature, nFeatureFlags) { ; var oRegFeature = null; var oFeature = null; var sInstanceName; var oLNI = goN2U.getLinkNameInfo(hotspotElement.id); if (oLNI) { oRegFeature = goN2Events.lookupRegFeature(oLNI.getFeature()); oFeature = oRegFeature.getFeature(); sInstanceName = oFeature.getHotspotInstanceName(oLNI); } this.broadcastMouseOwner(oRegFeature, sInstanceName); } this.mouseClickHotspotOpen = function(hotspotElement, nFeatureFlags) { ; var oRegFeature = null; var oFeature = null; var oHInstance = null; var oLNI = goN2U.getLinkNameInfo(hotspotElement.id); if (oLNI) { oRegFeature = goN2Events.lookupRegFeature(oLNI.getFeature()); oFeature = oRegFeature.getFeature(); oHInstance = oFeature.getHotspotInstance(oLNI); } this.broadcastMouseOwner(oRegFeature, oFeature.getHotspotInstanceName(oLNI)); if (oHInstance) { oHInstance.mouseClickOpen(oLNI, nFeatureFlags); } else { ;//goN2Debug.warning("N2Events mouseClickHotspotOpen -- unknown hotspot '" + (oFeature ? oFeature.getHotspotInstanceName(oLNI) : "") + "'"); } return false; } this.mouseOutHotspotClose = function(hotspotElement) { ; var oRegFeature = null; var oFeature = null; var oHInstance = null; var oLNI = goN2U.getLinkNameInfo(hotspotElement.id); if (oLNI) { oRegFeature = goN2Events.lookupRegFeature(oLNI.getFeature()); oFeature = oRegFeature.getFeature(); oHInstance = oFeature.getHotspotInstance(oLNI); } if (oHInstance) { oHInstance.mouseOutClose(oLNI); } else { ;//goN2Debug.warning("N2HEvents mouseOutHotspotClose -- unknown hotspot '" + (oFeature ? oFeature.getHotspotInstanceName(oLNI) : "") + "'"); } if (oRegFeature) { this.instanceIsNotMouseOwner(oRegFeature, oFeature.getHotspotInstanceName(oLNI)); } } this.mouseOutHotspotTrack = function(hotspotElement) { ; var oLNI = goN2U.getLinkNameInfo(hotspotElement.id); if (oLNI) { var oRegFeature = goN2Events.lookupRegFeature(oLNI.getFeature()); if (oRegFeature) { this.instanceIsNotMouseOwner(oRegFeature, oRegFeature.getFeature().getHotspotInstanceName(oLNI)); } } } this._getFInstanceFromCallbackArg = function(oFInstanceOrWrappedFeature) { var oFInstance; if (!goN2U.objIsInstanceOf(oFInstanceOrWrappedFeature, N2FInstance)) { var oFeature = this._getFeatureFromWrappedFeature(oFInstanceOrWrappedFeature); ; oFInstance = oFeature.getActiveWrappedFInstance(); ; } else { oFInstance = oFInstanceOrWrappedFeature; ; } return oFInstance; } this.mouseOverFeature = function(oFInstanceOrWrappedFeature) { ; if (!oFInstanceOrWrappedFeature) { ; return; } var oFInstance = this._getFInstanceFromCallbackArg(oFInstanceOrWrappedFeature); if (oFInstance) { this.broadcastMouseOwner(oFInstance.getRegFeatureOpened(), oFInstance.getInstanceName()); oFInstance.mouseOver(); } } this.mouseOutFeature = function(oFInstanceOrWrappedFeature) { ; if (!oFInstanceOrWrappedFeature) { ; return; } var oFInstance = this._getFInstanceFromCallbackArg(oFInstanceOrWrappedFeature); if (oFInstance) { this.instanceIsNotMouseOwner(oFInstance.getRegFeatureOpened(), oFInstance.getInstanceName()); oFInstance.mouseOut(); } } this.overlayClosed = function(oFInstanceOrWrappedFeature) { ; if (!oFInstanceOrWrappedFeature) { ; return; } var oFInstance = this._getFInstanceFromCallbackArg(oFInstanceOrWrappedFeature); oFInstance.overlayClosed(); this.toggleObjects("show"); ; } this.overlayChanged = function(oFInstanceOrWrappedFeature) { ; if (!oFInstanceOrWrappedFeature) { ; return; } var oFInstance = this._getFInstanceFromCallbackArg(oFInstanceOrWrappedFeature); if (goN2U.bIsIE) { if (this._featureChangedTimer) { clearTimeout(this._featureChangedTimer); } this._featureChangedTimer = setTimeout("goN2Events._overlayChangedTimerAction('"+oFInstance.getRawObject().id+"')", 200); } } this._overlayChangedTimerAction = function(sElementID) { ; this.toggleObjects("show", sElementID); this.toggleObjects("hide", sElementID); this._featureChangedTimer = null; } } window.N2Events.fNONSTATIC = 0; window.N2Events.fSEMISTATIC = 1; window.N2Events.fSTATICWITHCLOSE = 3; window.N2Events.nMINHOTSPOTNAMECOMPONENTS = 2; // name="feature|type|key..." must have at least feature and type window.goN2Events = new N2Events(); goN2Events.initialize(); window.n2InitEvents = function() { ; } window.qaAddIDsToNamedLinks = function() { goN2Events.qaAddIDsToNamedLinks(); }; window.n2MouseOverFeature = function(oFInstanceOrWrappedFeature) { goN2Events.mouseOverFeature(oFInstanceOrWrappedFeature); } window.n2MouseOutFeature = function(oFInstanceOrWrappedFeature) { goN2Events.mouseOutFeature(oFInstanceOrWrappedFeature); } window.n2OverlayClosed = function(oFInstanceOrWrappedFeature) { goN2Events.overlayClosed(oFInstanceOrWrappedFeature); } window.n2OverlayChanged = function(oFInstanceOrWrappedFeature) { goN2Events.overlayChanged(oFInstanceOrWrappedFeature); } window.n2MouseOverHotspotNop = function() { if (typeof goN2Events == "object") { return goN2Events.mouseOverHotspotTrack(this); } } window.n2MouseOverHotspot = function() { if (typeof goN2Events == "object") { return goN2Events.mouseOverHotspotOpen(this, N2Events.fNONSTATIC); } } window.n2MouseOverHotspotStatic = function() { if (typeof goN2Events == "object") { return goN2Events.mouseOverHotspotOpen(this, N2Events.fSTATICWITHCLOSE); } } window.n2MouseOverHotspotSemiStatic = function() { if (typeof goN2Events == "object") { return goN2Events.mouseOverHotspotOpen(this, N2Events.fSEMISTATIC); } } window.n2HotspotClick = function() { if (typeof goN2Events == "object") { return goN2Events.mouseClickHotspotOpen(this, N2Events.fNONSTATIC); } } window.n2HotspotClickStatic = function() { if (typeof goN2Events == "object") { return goN2Events.mouseClickHotspotOpen(this, N2Events.fSTATICWITHCLOSE); } } window.n2HotspotClickSemiStatic = function() { if (typeof goN2Events == "object") { return goN2Events.mouseClickHotspotOpen(this, N2Events.fSEMISTATIC); } } window.n2MouseOutHotspotNop = function() { if (typeof goN2Events == "object") { goN2Events.mouseOutHotspotTrack(this); } } window.n2MouseOutHotspot = function() { if (typeof goN2Events == "object") { if (window.event && event.toElement && event.toElement.id == goN2U.sAnimationDivID) { ; return; } goN2Events.mouseOutHotspotClose(this); } } window.n2HotspotDisableFeature = function(nMs, oFInstanceOrWrappedFeature) { if (typeof goN2Events != "object") { return; } if (!oFInstanceOrWrappedFeature) { ; return; } ; var oFeature; if (_n2ObjectIsFInstance(oFInstanceOrWrappedFeature)) { var oFInstance = oFInstanceOrWrappedFeature; oFeature = oFInstance.getFeature(); } else { oFeature = goN2Events._getFeatureFromWrappedFeature(oFInstanceOrWrappedFeature); ; } oFeature.disableFeature(nMS); return true; } if (window.goN2LibMon) goN2LibMon.endLoad('events'); } // END library code wrapper n2RunIfLoaded("utilities", n2EventsInitLibrary, "events");