File: /home/enamadmin/www/cohesion_socialeppt/lib-sc/scSiLib.js
var scSiLib = {};
scSiLib.addRule = function(pNode, pRule) {
if( ! pNode.scSSRules) pNode.scSSRules = [pRule];
else pNode.scSSRules[pNode.scSSRules.length] = pRule;
}
scSiLib.fireResizedNode = function(pNode) {
if(!pNode) return;
var vEvent = {
resizedNode: pNode,
phase: 1,
stopBranch: false,
stopEvent: false
}
var vDepthStack = [];
var vCh = pNode;
var vDepth = 0;
while(vCh) {
if("scSSRules" in vCh) {
this.xFireOnNode(vCh, true, vEvent);
if(vEvent.stopEvent) return;
if(vDepth>0) {
var vStack = vDepthStack[vDepth];
if( ! vStack) vDepthStack[vDepth] = [vCh];
else vStack[vStack.length] = vCh;
}
}
if( ! vEvent.stopBranch && vCh.hasChildNodes()) {
vCh = vCh.firstChild;
vDepth++;
} else {
if(vEvent.stopBranch) vEvent.stopBranch = false;
while( ! vCh.nextSibling) {
vCh = vCh.parentNode;
vDepth--;
if(vDepth<=0) {
vCh = null;
break;
}
}
if(vCh) vCh = vCh.nextSibling;
}
}
vEvent.phase = 2;
for(var i = vDepthStack.length-1; i>0; i--) {
var vStack = vDepthStack[i];
if(vStack) for(var j = vStack.length-1; j>=0; j--) {
this.xFireOnNode(vStack[j], true, vEvent);
if(vEvent.stopEvent) return;
}
}
if(pNode.scSSRules) this.xFireOnNode(pNode, true, vEvent);
vEvent.phase = 1;
var vAnc = pNode;
var vStack = [];
while(vAnc) {
if(vAnc.scSSRules) {
this.xFireOnNode(vAnc, false, vEvent);
if(vEvent.stopEvent) return;
vStack[vStack.length] = vAnc;
}
vAnc = vAnc.parentNode;
}
vEvent.phase = 2;
for(var i = vStack.length-1; i>=0; i--) {
this.xFireOnNode(vStack[i], false, vEvent);
if(vEvent.stopEvent) return;
}
}
scSiLib.getContentHeight = function(pContainer) {
var vCh = pContainer.lastChild;
var vH = 0;
while(vCh && ( vCh.nodeType != 1 || ! (vH = vCh.offsetHeight) ) ) vCh = vCh.previousSibling;
if(vCh) {
return vCh.offsetTop + vH;
}
return Number.NaN;
}
scSiLib.getOffsetTop = function(pNode, pContainer) {
var vParent = pNode.offsetParent;
if( ! vParent) return Number.NaN;
var vOffset = pNode.offsetTop - vParent.scrollTop;
while(vParent != pContainer) {
var vNewParent = vParent.offsetParent;
if( ! vNewParent) return Number.NaN;
vOffset += vParent.offsetTop - vNewParent.scrollTop;
vParent = vNewParent;
}
return vOffset;
}
scSiLib.onResize = function(){
this.fireResizedNode(document.body);
}
scSiLib.resizeSortKey = "SS";
scOnResizes[scOnResizes.length] = scSiLib;
scSiLib.xFireOnNode = function(pNode, pOnResizedAnc, pEvent){
var vRules = pNode.scSSRules;
var vLen = vRules.length;
if(vLen > 1 && vLen != vRules.lastLen) {
vRules.sort(function (p1, p2){
if(!p1.ruleSortKey) return p2.ruleSortKey ? -1 : 0;
if(scCoLib.isIE) return p1.ruleSortKey.localeCompare(p2.ruleSortKey||"");
try{
return p1.ruleSortKey > p2.ruleSortKey||"" ? 1 : p1.ruleSortKey == p2.ruleSortKey ? 0 : -1;
}catch(e){
return p1.ruleSortKey.localeCompare(p2.ruleSortKey||"");
}
}
);
vRules.lastLen = vLen;
}
if(pOnResizedAnc) for (var i =0; i < vLen; i++) try{vRules[i].onResizedAnc(pNode, pEvent);}catch(e){}
else for (var i =0; i < vLen; i++) try{vRules[i].onResizedDes(pNode, pEvent);}catch(e){};
}