summaryrefslogtreecommitdiff
path: root/skins/common/sticky.js
blob: a4904c03ffd6ffffa87c7aca8c0a11389e79eb2c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
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";
	}