--- /dev/null
+/* Script by: www.jtricks.com\r
+ * Version: 20071017\r
+ * Latest version:\r
+ * www.jtricks.com/javascript/navigation/floating.html\r
+ */\r
+var floatingMenuId = 'floatdiv';\r
+var floatingMenu =\r
+{\r
+ targetX: -250,\r
+ targetY: -75,\r
+\r
+ hasInner: typeof(window.innerWidth) == 'number',\r
+ hasElement: typeof(document.documentElement) == 'object'\r
+ && typeof(document.documentElement.clientWidth) == 'number',\r
+\r
+ menu:\r
+ document.getElementById\r
+ ? document.getElementById(floatingMenuId)\r
+ : document.all\r
+ ? document.all[floatingMenuId]\r
+ : document.layers[floatingMenuId]\r
+};\r
+\r
+floatingMenu.move = function ()\r
+{\r
+ floatingMenu.menu.style.left = floatingMenu.nextX + 'px';\r
+ floatingMenu.menu.style.top = floatingMenu.nextY + 'px';\r
+}\r
+\r
+floatingMenu.computeShifts = function ()\r
+{\r
+ var de = document.documentElement;\r
+\r
+ floatingMenu.shiftX = \r
+ floatingMenu.hasInner \r
+ ? pageXOffset \r
+ : floatingMenu.hasElement \r
+ ? de.scrollLeft \r
+ : document.body.scrollLeft; \r
+ if (floatingMenu.targetX < 0)\r
+ {\r
+ floatingMenu.shiftX +=\r
+ floatingMenu.hasElement\r
+ ? de.clientWidth\r
+ : document.body.clientWidth;\r
+ }\r
+\r
+ floatingMenu.shiftY = \r
+ floatingMenu.hasInner\r
+ ? pageYOffset\r
+ : floatingMenu.hasElement\r
+ ? de.scrollTop\r
+ : document.body.scrollTop;\r
+floatingMenu.shiftY = ( floatingMenu.shiftY < 76 ) ? 76 :\r
+floatingMenu.shiftY;\r
+ if (floatingMenu.targetY < -75)\r
+ {\r
+ if (floatingMenu.hasElement && floatingMenu.hasInner)\r
+ {\r
+ // Handle Opera 8 problems\r
+ floatingMenu.shiftY +=\r
+ de.clientHeight > window.innerHeight\r
+ ? window.innerHeight\r
+ : de.clientHeight\r
+ }\r
+ else\r
+ {\r
+ floatingMenu.shiftY +=\r
+ floatingMenu.hasElement\r
+ ? de.clientHeight\r
+ : document.body.clientHeight;\r
+ }\r
+ }\r
+}\r
+\r
+floatingMenu.calculateCornerX = function()\r
+{\r
+ return 0;\r
+ if (floatingMenu.targetX != 'center')\r
+ return floatingMenu.shiftX + floatingMenu.targetX;\r
+\r
+ var width = parseInt(floatingMenu.menu.offsetWidth);\r
+\r
+ var cornerX =\r
+ floatingMenu.hasElement\r
+ ? (floatingMenu.hasInner\r
+ ? pageXOffset\r
+ : document.documentElement.scrollLeft) + \r
+ (document.documentElement.clientWidth - width)/2\r
+ : document.body.scrollLeft + \r
+ (document.body.clientWidth - width)/2;\r
+ return cornerX;\r
+};\r
+\r
+floatingMenu.calculateCornerY = function()\r
+{\r
+ if (floatingMenu.targetY != 'center')\r
+ return floatingMenu.shiftY + floatingMenu.targetY;\r
+\r
+ var height = parseInt(floatingMenu.menu.offsetHeight);\r
+\r
+ // Handle Opera 8 problems\r
+ var clientHeight = \r
+ floatingMenu.hasElement && floatingMenu.hasInner\r
+ && document.documentElement.clientHeight \r
+ > window.innerHeight\r
+ ? window.innerHeight\r
+ : document.documentElement.clientHeight\r
+\r
+ var cornerY =\r
+ floatingMenu.hasElement\r
+ ? (floatingMenu.hasInner \r
+ ? pageYOffset\r
+ : document.documentElement.scrollTop) + \r
+ (clientHeight - height)/2\r
+ : document.body.scrollTop + \r
+ (document.body.clientHeight - height)/2;\r
+ return cornerY;\r
+};\r
+\r
+floatingMenu.doFloat = function()\r
+{\r
+ // Check if reference to menu was lost due\r
+ // to ajax manipuations\r
+ if (!floatingMenu.menu)\r
+ {\r
+ menu = document.getElementById\r
+ ? document.getElementById(floatingMenuId)\r
+ : document.all\r
+ ? document.all[floatingMenuId]\r
+ : document.layers[floatingMenuId];\r
+\r
+ initSecondary();\r
+ }\r
+\r
+ var stepX, stepY;\r
+\r
+ floatingMenu.computeShifts();\r
+\r
+ var cornerX = floatingMenu.calculateCornerX();\r
+\r
+ var stepX = (cornerX - floatingMenu.nextX) * .07;\r
+ if (Math.abs(stepX) < .5)\r
+ {\r
+ stepX = cornerX - floatingMenu.nextX;\r
+ }\r
+\r
+ var cornerY = floatingMenu.calculateCornerY();\r
+\r
+ var stepY = (cornerY - floatingMenu.nextY) * .07;\r
+ if (Math.abs(stepY) < .5)\r
+ {\r
+ stepY = cornerY - floatingMenu.nextY;\r
+ }\r
+\r
+ if (Math.abs(stepX) > 0 ||\r
+ Math.abs(stepY) > 0)\r
+ {\r
+ floatingMenu.nextX += stepX;\r
+ floatingMenu.nextY += stepY;\r
+ floatingMenu.move();\r
+ }\r
+\r
+ setTimeout('floatingMenu.doFloat()', 20);\r
+};\r
+\r
+// addEvent designed by Aaron Moore\r
+floatingMenu.addEvent = function(element, listener, handler)\r
+{\r
+ if(typeof element[listener] != 'function' || \r
+ typeof element[listener + '_num'] == 'undefined')\r
+ {\r
+ element[listener + '_num'] = 0;\r
+ if (typeof element[listener] == 'function')\r
+ {\r
+ element[listener + 0] = element[listener];\r
+ element[listener + '_num']++;\r
+ }\r
+ element[listener] = function(e)\r
+ {\r
+ var r = true;\r
+ e = (e) ? e : window.event;\r
+ for(var i = element[listener + '_num'] -1; i >= 0; i--)\r
+ {\r
+ if(element[listener + i](e) == false)\r
+ r = false;\r
+ }\r
+ return r;\r
+ }\r
+ }\r
+\r
+ //if handler is not already stored, assign it\r
+ for(var i = 0; i < element[listener + '_num']; i++)\r
+ if(element[listener + i] == handler)\r
+ return;\r
+ element[listener + element[listener + '_num']] = handler;\r
+ element[listener + '_num']++;\r
+};\r
+\r
+floatingMenu.init = function()\r
+{\r
+ floatingMenu.initSecondary();\r
+ floatingMenu.doFloat();\r
+};\r
+\r
+// Some browsers init scrollbars only after\r
+// full document load.\r
+floatingMenu.initSecondary = function()\r
+{\r
+ floatingMenu.computeShifts();\r
+ floatingMenu.nextX = floatingMenu.calculateCornerX();\r
+ floatingMenu.nextY = floatingMenu.calculateCornerY();\r
+ floatingMenu.move();\r
+}\r
+\r
+if (document.layers)\r
+ floatingMenu.addEvent(window, 'onload', floatingMenu.init);\r
+else\r
+{\r
+ floatingMenu.init();\r
+ floatingMenu.addEvent(window, 'onload',\r
+ floatingMenu.initSecondary);\r
+}
\ No newline at end of file