if (typeof document.attachEvent != 'undefined') {
window.attachEvent('onload', init);
document.attachEvent('onmousemove', moveMouse);
document.attachEvent('onclick', checkMove);
}
else {
window.addEventListener('load', init, false);
document.addEventListener('mousemove', moveMouse, false);
document.addEventListener('click', checkMove, false);
}
var oDv = document.createElement("div");
var dvHdr = document.createElement("div");
var dvBdy = document.createElement("div");
var windowlock, boxMove, fixposx, fixposy, lockX, lockY, fixx, fixy, ox, oy, boxLeft, boxRight, boxTop, boxBottom, evt, mouseX, mouseY, boxOpen, totalScrollTop, totalScrollLeft;
boxOpen = false;
ox = 10;
oy = 10;
lockX = 0;
lockY = 0;
function init() {
oDv.appendChild(dvHdr);
oDv.appendChild(dvBdy);
oDv.style.position = "absolute";
oDv.style.visibility = 'hidden';
document.body.appendChild(oDv);
}
function defHdrStyle() {
}
function defBdyStyle() {
dvBdy.style.border = '1px solid #ccc'; //层的边框
dvBdy.style.width = '210px';
dvBdy.style.fontFamily = 'arial';
dvBdy.style.fontSize = '14';
dvBdy.style.textAlign = 'left';
dvBdy.style.padding = '30';
dvBdy.style.color = '#000';
dvBdy.style.background = '#fff';
dvBdy.style.filter = 'alpha(opacity=80)'; // IE
dvBdy.style.opacity = '0.8'; // FF
}
function checkElemBO(txt) {
if (!txt || typeof (txt) != 'string') return false;
if ((txt.indexOf('body') > -1) && (txt.indexOf('[') > -1) && (txt.indexOf('[') > -1))
return true;
else
return false;
}
function scanBO(curNode) {
if (checkElemBO(curNode.title)) {
curNode.boHDR = getParam('header', curNode.title);
curNode.boBDY = getParam('body', curNode.title);
curNode.boCSSBDY = getParam('cssbody', curNode.title);
curNode.boCSSHDR = getParam('cssheader', curNode.title);
curNode.IEbugfix = (getParam('hideselects', curNode.title) == 'on') ? true : false;
curNode.fixX = parseInt(getParam('fixedrelx', curNode.title));
curNode.fixY = parseInt(getParam('fixedrely', curNode.title));
curNode.absX = parseInt(getParam('fixedabsx', curNode.title));
curNode.absY = parseInt(getParam('fixedabsy', curNode.title));
curNode.offY = (getParam('offsety', curNode.title) != '') ? parseInt(getParam('offsety', curNode.title)) : 10;
curNode.offX = (getParam('offsetx', curNode.title) != '') ? parseInt(getParam('offsetx', curNode.title)) : 10;
curNode.fade = (getParam('fade', curNode.title) == 'on') ? true : false;
curNode.fadespeed = (getParam('fadespeed', curNode.title) != '') ? getParam('fadespeed', curNode.title) : 0.04;
curNode.delay = (getParam('delay', curNode.title) != '') ? parseInt(getParam('delay', curNode.title)) : 0;
if (getParam('requireclick', curNode.title) == 'on') {
curNode.requireclick = true;
document.all ? curNode.attachEvent('onclick', showHideBox) : curNode.addEventListener('click', showHideBox, false);
document.all ? curNode.attachEvent('onmouseover', hideBox) : curNode.addEventListener('mouseover', hideBox, false);
}
else {// Note : if requireclick is on the stop clicks are ignored
if (getParam('doubleclickstop', curNode.title) != 'off') {
document.all ? curNode.attachEvent('ondblclick', pauseBox) : curNode.addEventListener('dblclick', pauseBox, false);
}
if (getParam('singleclickstop', curNode.title) == 'on') {
document.all ? curNode.attachEvent('onclick', pauseBox) : curNode.addEventListener('click', pauseBox, false);
}
}
curNode.windowLock = getParam('windowlock', curNode.title).toLowerCase() == 'off' ? false : true;
curNode.title = '';
curNode.hasbox = 1;
}
else
curNode.hasbox = 2;
}
function getParam(param, list) {
var reg = new RegExp('([^a-zA-Z]' + param + '|^' + param + ')\\s*=\\s*\\[\\s*(((\\[\\[)|(\\]\\])|([^\\]\\[]))*)\\s*\\]');
var res = reg.exec(list);
var returnvar;
if (res)
return res[2].replace('[[', '[').replace(']]', ']');
else
return '';
}
function Left(elem) {
var x = 0;
if (elem.calcLeft)
return elem.calcLeft;
var oElem = elem;
while (elem) {
if ((elem.currentStyle) && (!isNaN(parseInt(elem.currentStyle.borderLeftWidth))) && (x != 0))
x += parseInt(elem.currentStyle.borderLeftWidth);
x += elem.offsetLeft;
elem = elem.offsetParent;
}
oElem.calcLeft = x;
return x;
}
function Top(elem) {
var x = 0;
if (elem.calcTop)
return elem.calcTop;
var oElem = elem;
while (elem) {
if ((elem.currentStyle) && (!isNaN(parseInt(elem.currentStyle.borderTopWidth))) && (x != 0))
x += parseInt(elem.currentStyle.borderTopWidth);
x += elem.offsetTop;
elem = elem.offsetParent;
}
oElem.calcTop = x;
return x;
}
var ah, ab;
function applyStyles() {
if (ab)
oDv.removeChild(dvBdy);
if (ah)
oDv.removeChild(dvHdr);
dvHdr = document.createElement("div");
dvBdy = document.createElement("div");
CBE.boCSSBDY ? dvBdy.className = CBE.boCSSBDY : defBdyStyle();
CBE.boCSSHDR ? dvHdr.className = CBE.boCSSHDR : defHdrStyle();
dvHdr.innerHTML = CBE.boHDR;
dvBdy.innerHTML = CBE.boBDY;
ah = false;
ab = false;
if (CBE.boHDR != '') {
oDv.appendChild(dvHdr);
ah = true;
}
if (CBE.boBDY != '') {
oDv.appendChild(dvBdy);
ab = true;
}
}
var CSE, iterElem, LSE, CBE, LBE, totalScrollLeft, totalScrollTop, width, height;
var ini = false;
// Customised function for inner window dimension
function SHW() {
if (document.body && (document.body.clientWidth != 0)) {
width = document.body.clientWidth;
height = document.body.clientHeight;
}
if (document.documentElement && (document.documentElement.clientWidth != 0) && (document.body.clientWidth + 20 >= document.documentElement.clientWidth)) {
width = document.documentElement.clientWidth;
height = document.documentElement.clientHeight;
}
return [width, height];
}
var ID = null;
function moveMouse(e) {
//boxMove=true;
e ? evt = e : evt = event;
CSE = evt.target ? evt.target : evt.srcElement;
if (!CSE.hasbox) {
// Note we need to scan up DOM here, some elements like TR don't get triggered as srcElement
iElem = CSE;
while ((iElem.parentNode) && (!iElem.hasbox)) {
scanBO(iElem);
iElem = iElem.parentNode;
}
}
if ((CSE != LSE) && (!isChild(CSE, dvHdr)) && (!isChild(CSE, dvBdy))) {
if (!CSE.boxItem) {
iterElem = CSE;
while ((iterElem.hasbox == 2) && (iterElem.parentNode))
iterElem = iterElem.parentNode;
CSE.boxItem = iterElem;
}
iterElem = CSE.boxItem;
if (CSE.boxItem && (CSE.boxItem.hasbox == 1)) {
LBE = CBE;
CBE = iterElem;
if (CBE != LBE) {
applyStyles();
if (!CBE.requireclick)
if (CBE.fade) {
if (ID != null)
clearTimeout(ID);
ID = setTimeout("fadeIn(" + CBE.fadespeed + ")", CBE.delay);
}
else {
if (ID != null)
clearTimeout(ID);
COL = 1;
ID = setTimeout("oDv.style.visibility='visible';ID=null;", CBE.delay);
}
if (CBE.IEbugfix) { hideSelects(); }
fixposx = !isNaN(CBE.fixX) ? Left(CBE) + CBE.fixX : CBE.absX;
fixposy = !isNaN(CBE.fixY) ? Top(CBE) + CBE.fixY : CBE.absY;
lockX = 0;
lockY = 0;
boxMove = true;
ox = CBE.offX ? CBE.offX : 10;
oy = CBE.offY ? CBE.offY : 10;
}
}
else if (!isChild(CSE, dvHdr) && !isChild(CSE, dvBdy) && (boxMove)) {
// The conditional here fixes flickering between tables cells.
if ((!isChild(CBE, CSE)) || (CSE.tagName != 'TABLE')) {
CBE = null;
if (ID != null)
clearTimeout(ID);
fadeOut();
showSelects();
}
}
LSE = CSE;
}
else if (((isChild(CSE, dvHdr) || isChild(CSE, dvBdy)) && (boxMove))) {
totalScrollLeft = 0;
totalScrollTop = 0;
iterElem = CSE;
while (iterElem) {
if (!isNaN(parseInt(iterElem.scrollTop)))
totalScrollTop += parseInt(iterElem.scrollTop);
if (!isNaN(parseInt(iterElem.scrollLeft)))
totalScrollLeft += parseInt(iterElem.scrollLeft);
iterElem = iterElem.parentNode;
}
if (CBE != null) {
boxLeft = Left(CBE) - totalScrollLeft;
boxRight = parseInt(Left(CBE) + CBE.offsetWidth) - totalScrollLeft;
boxTop = Top(CBE) - totalScrollTop;
boxBottom = parseInt(Top(CBE) + CBE.offsetHeight) - totalScrollTop;
doCheck();
}
}
if (boxMove && CBE) {
// This added to alleviate bug in IE6 w.r.t DOCTYPE
bodyScrollTop = document.documentElement && document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop;
bodyScrollLet = document.documentElement && document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft;
mouseX = evt.pageX ? evt.pageX - bodyScrollLet : evt.clientX - document.body.clientLeft;
mouseY = evt.pageY ? evt.pageY - bodyScrollTop : evt.clientY - document.body.clientTop;
if ((CBE) && (CBE.windowLock)) {
mouseY < -oy ? lockY = -mouseY - oy : lockY = 0;
mouseX < -ox ? lockX = -mouseX - ox : lockX = 0;
mouseY > (SHW()[1] - oDv.offsetHeight - oy) ? lockY = -mouseY + SHW()[1] - oDv.offsetHeight - oy : lockY = lockY;
mouseX > (SHW()[0] - dvBdy.offsetWidth - ox) ? lockX = -mouseX - ox + SHW()[0] - dvBdy.offsetWidth : lockX = lockX;
}
oDv.style.left = ((fixposx) || (fixposx == 0)) ? fixposx : bodyScrollLet + mouseX + ox + lockX + "px";
oDv.style.top = ((fixposy) || (fixposy == 0)) ? fixposy : bodyScrollTop + mouseY + oy + lockY + "px";
}
}
function doCheck() {
if ((mouseX < boxLeft) || (mouseX > boxRight) || (mouseY < boxTop) || (mouseY > boxBottom)) {
if (!CBE.requireclick)
fadeOut();
if (CBE.IEbugfix) { showSelects(); }
CBE = null;
}
}
function pauseBox(e) {
e ? evt = e : evt = event;
boxMove = false;
evt.cancelBubble = true;
}
function showHideBox(e) {
oDv.style.visibility = (oDv.style.visibility != 'visible') ? 'visible' : 'hidden';
}
function hideBox(e) {
oDv.style.visibility = 'hidden';
}
var COL = 0;
var stopfade = false;
function fadeIn(fs) {
ID = null;
COL = 0;
oDv.style.visibility = 'visible';
fadeIn2(fs);
}
function fadeIn2(fs) {
COL = COL + fs;
COL = (COL > 1) ? 1 : COL;
oDv.style.filter = 'alpha(opacity=' + parseInt(100 * COL) + ')';
oDv.style.opacity = COL;
if (COL < 1)
setTimeout("fadeIn2(" + fs + ")", 20);
}
function fadeOut() {
oDv.style.visibility = 'hidden';
}
function isChild(s, d) {
while (s) {
if (s == d)
return true;
s = s.parentNode;
}
return false;
}
var cSrc;
function checkMove(e) {
e ? evt = e : evt = event;
cSrc = evt.target ? evt.target : evt.srcElement;
if ((!boxMove) && (!isChild(cSrc, oDv))) {
fadeOut();
if (CBE && CBE.IEbugfix) { showSelects(); }
boxMove = true;
CBE = null;
}
}
function showSelects() {
var elements = document.getElementsByTagName("select");
for (i = 0; i < elements.length; i++) {
elements[i].style.visibility = 'visible';
}
}
function hideSelects() {
var elements = document.getElementsByTagName("select");
for (i = 0; i < elements.length; i++) {
elements[i].style.visibility = 'hidden';
}
}