var floatingMenuId = 'floatdiv'; var floatingMenu = { targetX: -550, targetY: -110, hasInner: typeof(window.innerWidth) == 'number', hasElement: typeof(document.documentElement) == 'object'
&& typeof(document.documentElement.clientWidth) == 'number', menu:
document.getElementById
? document.getElementById(floatingMenuId)
: document.all
? document.all[floatingMenuId]
: document.layers[floatingMenuId]
}; floatingMenu.move = function ()
{ floatingMenu.menu.style.left = floatingMenu.nextX + 'px'; floatingMenu.menu.style.top = floatingMenu.nextY + 'px';}
floatingMenu.computeShifts = function ()
{ var de = document.documentElement; floatingMenu.shiftX = floatingMenu.hasInner
? pageXOffset
: floatingMenu.hasElement
? de.scrollLeft
: document.body.scrollLeft; if (floatingMenu.targetX < 0)
{ floatingMenu.shiftX += floatingMenu.hasElement
? de.clientWidth
: document.body.clientWidth;}
floatingMenu.shiftY = floatingMenu.hasInner
? pageYOffset
: floatingMenu.hasElement
? de.scrollTop
: document.body.scrollTop; if (floatingMenu.targetY < 0)
{ if (floatingMenu.hasElement && floatingMenu.hasInner)
{ floatingMenu.shiftY += de.clientHeight > window.innerHeight
? window.innerHeight
: de.clientHeight
}
else
{ floatingMenu.shiftY += floatingMenu.hasElement
? de.clientHeight
: document.body.clientHeight;}
}
}
floatingMenu.calculateCornerX = function()
{ if (floatingMenu.targetX != 'center')
return floatingMenu.shiftX + floatingMenu.targetX; var width = parseInt(floatingMenu.menu.offsetWidth); var cornerX = floatingMenu.hasElement
? (floatingMenu.hasInner
? pageXOffset
: document.documentElement.scrollLeft) + (document.documentElement.clientWidth - width)/2
: document.body.scrollLeft + (document.body.clientWidth - width)/2; return cornerX;}; floatingMenu.calculateCornerY = function()
{ if (floatingMenu.targetY != 'center')
return floatingMenu.shiftY + floatingMenu.targetY; var height = parseInt(floatingMenu.menu.offsetHeight); var clientHeight = floatingMenu.hasElement && floatingMenu.hasInner
&& document.documentElement.clientHeight
> window.innerHeight
? window.innerHeight
: document.documentElement.clientHeight
var cornerY = floatingMenu.hasElement
? (floatingMenu.hasInner
? pageYOffset
: document.documentElement.scrollTop) + (clientHeight - height)/2
: document.body.scrollTop + (document.body.clientHeight - height)/2; return cornerY;}; floatingMenu.doFloat = function()
{ if (!floatingMenu.menu)
{ menu = document.getElementById
? document.getElementById(floatingMenuId)
: document.all
? document.all[floatingMenuId]
: document.layers[floatingMenuId]; initSecondary();}
var stepX, stepY; floatingMenu.computeShifts(); var cornerX = floatingMenu.calculateCornerX(); var stepX = (cornerX - floatingMenu.nextX) * .07; if (Math.abs(stepX) < .5)
{ stepX = cornerX - floatingMenu.nextX;}
var cornerY = floatingMenu.calculateCornerY(); var stepY = (cornerY - floatingMenu.nextY) * .07; if (Math.abs(stepY) < .5)
{ stepY = cornerY - floatingMenu.nextY;}
if (Math.abs(stepX) > 0 || Math.abs(stepY) > 0)
{ floatingMenu.nextX += stepX; floatingMenu.nextY += stepY; floatingMenu.move();}
setTimeout('floatingMenu.doFloat()', 20);}; floatingMenu.addEvent = function(element, listener, handler)
{ if(typeof element[listener] != 'function' || typeof element[listener + '_num'] == 'undefined')
{ element[listener + '_num'] = 0; if (typeof element[listener] == 'function')
{ element[listener + 0] = element[listener]; element[listener + '_num']++;}
element[listener] = function(e)
{ var r = true; e = (e) ? e : window.event; for(var i = element[listener + '_num'] -1; i >= 0; i--)
{ if(element[listener + i](e) == false)
r = false;}
return r;}
}
for(var i = 0; i < element[listener + '_num']; i++)
if(element[listener + i] == handler)
return; element[listener + element[listener + '_num']] = handler; element[listener + '_num']++;}; floatingMenu.init = function()
{ floatingMenu.initSecondary(); floatingMenu.doFloat();}; floatingMenu.initSecondary = function()
{ floatingMenu.computeShifts(); floatingMenu.nextX = floatingMenu.calculateCornerX(); floatingMenu.nextY = floatingMenu.calculateCornerY(); floatingMenu.move();}
if (document.layers)
floatingMenu.addEvent(window, 'onload', floatingMenu.init); else
{ floatingMenu.init(); floatingMenu.addEvent(window, 'onload', floatingMenu.initSecondary);}
