summaryrefslogtreecommitdiff
path: root/skins/common/sticky.js
diff options
context:
space:
mode:
Diffstat (limited to 'skins/common/sticky.js')
-rw-r--r--skins/common/sticky.js124
1 files changed, 124 insertions, 0 deletions
diff --git a/skins/common/sticky.js b/skins/common/sticky.js
new file mode 100644
index 00000000..cf248c3e
--- /dev/null
+++ b/skins/common/sticky.js
@@ -0,0 +1,124 @@
+// Make a layer that stays in the same place on screen when scrolling the browser window.
+// Version 1.2
+// See http://www.mark.ac/help for browser support.
+
+var mySticky;
+var theLayer;
+
+// Setup variables for sliding.
+// lastY and staticYOffset should match your CSS top definition.
+
+lastY=10;YOffset=0;staticYOffset=10;refreshMS=25;
+
+
+// Setup function that runs when the page loads.
+ function setup(eID){
+ bw=new checkBrowser;
+ if(bw.ns4||bw.opera){MM_reloadPage(true);}
+ var noFix=bw.ie4||bw.ns4||(bw.macie50)?true:false;
+ if (window.attachEvent){fix_bind()}
+ else if(noFix){
+ if(bw.ns6){document.getElementById(eID).style.position="absolute";}
+ if(bw.macie50){document.getElementById(eID).style.position="absolute";document.getElementById(eID).style.backgroundColor="#ccffcc";}
+ if(bw.ns6&&YOffset==0){YOffset=-15}
+ mySticky=new makeLayerObj(eID);
+ layerSlide(eID)}
+ else{
+ mySticky=new makeLayerObj(eID);
+ mySticky.css.position="fixed";}
+
+ if(!mySticky){mySticky=new makeLayerObj(eID);}
+ //mySticky.css.visibility="visible";
+ }
+
+
+// -------------------------
+// emulate css 'position: fixed' in IE5+ Win
+// code by aclover@1value.com
+ fix_elements = new Array();
+
+ function fix_event(){
+ var i;
+ for (i=0; i < fix_elements.length; i++){
+ fix_elements[i].style.left = parseInt(fix_elements[i].fix_left)+document.getElementsByTagName('html')[0].scrollLeft+document.getElementsByTagName('body')[0].scrollLeft+'px';
+ fix_elements[i].style.top = parseInt(fix_elements[i].fix_top)+document.getElementsByTagName('html')[0].scrollTop+document.getElementsByTagName('body')[0].scrollTop+'px';
+ }
+ }
+
+ function fix_bind(){
+ var i;
+ for (i=0; i < document.all.length; i++){
+ if (document.all[i].currentStyle.position=='fixed'){
+ document.all[i].fix_left = document.all[i].currentStyle.left;
+ document.all[i].fix_top = document.all[i].currentStyle.top;
+ document.all[i].style.position = 'absolute';
+ fix_elements[fix_elements.length] = document.all[i];
+ window.attachEvent('onscroll', fix_event);
+ window.attachEvent('onresize', fix_event);
+ }
+ }
+ }
+// -------------------------
+
+
+// -------------------------
+// DHTML menu sliding. Requires checkBrowser()
+// Based on source at http://www.simplythebest.net/
+ function layerSlide(layerID) {
+ if(bw.dhtml){
+ if(!mySticky){mySticky=new makeLayerObj(layerID);}
+ if (bw.ns) {winY = window.pageYOffset;}
+ else if (bw.ie) {winY = document.body.scrollTop;}
+ if (bw.ie||bw.ns) {
+ if (winY!=lastY&&winY>YOffset-staticYOffset){smooth = .3 * (winY - lastY - YOffset + staticYOffset);}
+ else if (YOffset-staticYOffset+lastY>YOffset-staticYOffset){smooth = .3 * (winY - lastY - (YOffset-(YOffset-winY)));}
+ else{smooth=0}
+ if(smooth > 0) {smooth = Math.ceil(smooth);}
+ else{smooth = Math.floor(smooth);}
+ if (bw.ie){mySticky.css.pixelTop+=smooth;}
+ else if (bw.ns){mySticky.css.top=parseInt(mySticky.css.top)+smooth;}
+ lastY = lastY+smooth;
+ top.window.status=new Date()
+ setTimeout('layerSlide("'+layerID+'")', refreshMS)}}}
+// -------------------------
+
+// Netscape 4.x browser resize fix
+ function MM_reloadPage(init) {
+ if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
+ document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; top.onresize=MM_reloadPage; }}
+ else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) {location.reload();}}
+
+// Create browser-independent layer and browser objects
+ function makeLayerObj(eID){
+ if(document.getElementById){this.css=document.getElementById(eID).style}
+ else if(document.layers){this.css=document.layers[eID];}
+ else if(document.all){this.css=document.all[eID].style;}
+ return this
+ }
+
+ function checkBrowser(){
+ this.ver=navigator.appVersion;
+ this.name=navigator.appName;
+ this.mac=(navigator.platform.toLowerCase().indexOf('mac')>-1)?true:false;
+ this.opera=(navigator.userAgent.toLowerCase().indexOf('opera')>-1)?true:false;
+ this.dom=document.getElementById?true:false;
+ this.ns=(this.name=='Netscape');
+ this.ie4=(document.all && !this.dom)?true:false;
+ this.ie=(this.name =='Microsoft Internet Explorer'&&!this.opera)?true:false;
+ this.ie5=(this.ie && (navigator.userAgent.indexOf("MSIE 5")!=-1))?true:false;
+ this.macie50=(this.mac&&this.ie5&&(navigator.userAgent.indexOf("MSIE 5.0")!=-1))?true:false
+ this.ns4=(this.ns && parseInt(this.ver) == 4)?true:false;
+ this.ns6=((this.name=="Netscape")&&(parseInt(this.ver)==5))?true:false
+ this.standards=document.getElementById?true:false;
+ this.dhtml=this.standards||this.ie4||this.ns4;
+ }
+
+ function showMe(eID){
+ myFloater=new makeLayerObj(eID)
+ myFloater.css.visibility="visible";
+ }
+
+ function hideMe(eID){
+ myFloater=new makeLayerObj(eID)
+ myFloater.css.visibility="hidden";
+ } \ No newline at end of file