// JavaScript Document

function smartRollover() {
2 if(document.getElementsByTagName) {
3 var images = document.getElementsByTagName("img");
4
5 for(var i=0; i < images.length; i++) {
6 if(images[i].getAttribute("src").match("_off."))
7 {
8 images[i].onmouseover = function() {
9 this.setAttribute("src", this.getAttribute("src").replace("_off.", "_on."));
10 }
11 images[i].onmouseout = function() {
12 this.setAttribute("src", this.getAttribute("src").replace("_on.", "_off."));
13 }
14 }
15 }
16 }
17}
18
19if(window.addEventListener) {
20 window.addEventListener("load", smartRollover, false);
21}
22else if(window.attachEvent) {
23 window.attachEvent("onload", smartRollover);
24}
25
26
27// cross fade
28
29new function(){
30 function setRollOver2(){
31 if(!document.images){return;}
32 var imgs = document.images;
33 var insert = [];
34 for(var i=0;i<imgs.length;i++){
35 var splitname = imgs[i].src.split('_off.');
36 if((splitname[1])&&(imgs[i].parentNode.tagName=='A')){
37 var rolloverImg = document.createElement('img');
38 rolloverImg.src = splitname[0]+'_on.'+splitname[1];
39 var alpha = 0;
40 rolloverImg.currentAlpha = alpha;
41 rolloverImg.style.opacity = alpha/100;
42 rolloverImg.style.filter = 'alpha(opacity='+alpha+')';
43 rolloverImg.style.position = 'absolute';
44
45
46 addEvent(rolloverImg,'mouseover',function(){setFader(this,100);});
47 addEvent(rolloverImg,'mouseout',function(){setFader(this,0);});
48
49 insert[insert.length] = {position:imgs[i],element:rolloverImg};
50 }
51 }
52 for(var i=0;i<insert.length;i++){
53 var parent = insert[i].position.parentNode;
54 parent.insertBefore(insert[i].element,insert[i].position);
55 }
56 }
57
58
59 function setFader(targetObj,targetAlpha){
60 targetObj.targetAlpha = targetAlpha;
61 if(targetObj.currentAlpha==undefined){
62 targetObj.currentAlpha = 100;
63 }
64 if(targetObj.currentAlpha==targetObj.targetAlpha){
65 return;
66 }
67 if(!targetObj.fading){
68 if(!targetObj.fader){
69 targetObj.fader = fader;
70 }
71 targetObj.fading = true;
72 targetObj.fader();
73 }
74 }
75
76 function fader(){
77 this.currentAlpha += (this.targetAlpha - this.currentAlpha)*0.2;
78 if(Math.abs(this.currentAlpha-this.targetAlpha)<1){
79 this.currentAlpha = this.targetAlpha;
80 this.fading = false;
81 }
82 var alpha = parseInt(this.currentAlpha);
83 this.style.opacity = alpha/100;
84 this.style.filter = 'alpha(opacity='+alpha+')';
85 if(this.fading){
86 var scope = this;
87 setTimeout(function(){fader.apply(scope)},10);
88 }
89 }
90
91 function addEvent(eventTarget, eventName, func){
92 if(eventTarget.addEventListener){
93 eventTarget.addEventListener(eventName, func, false);
94 }else if(window.attachEvent){
95 // IE
96 eventTarget.attachEvent('on'+eventName, function(){func.apply(eventTarget);});
97 }
98 }
99
100 addEvent(window,'load',setRollOver2);
101
102}
103
</script>
<script src="js/iepngfix_tilebg.js" type="text/javascript">
1// IE5.5+ PNG Alpha Fix v2.0 Alpha: Background Tiling Support
2// (c) 2008 Angus Turnbull http://www.twinhelix.com
3
4// This is licensed under the GNU LGPL, version 2.1 or later.
5// For details, see: http://creativecommons.org/licenses/LGPL/2.1/
6
7var IEPNGFix = window.IEPNGFix || {};
8
9IEPNGFix.tileBG = function(elm, pngSrc, ready) {
10 // Params: A reference to a DOM element, the PNG src file pathname, and a
11 // hidden "ready-to-run" passed when called back after image preloading.
12
13 var data = this.data[elm.uniqueID],
14 elmW = Math.max(elm.clientWidth, elm.scrollWidth),
15 elmH = Math.max(elm.clientHeight, elm.scrollHeight),
16 bgX = elm.currentStyle.backgroundPositionX,
17 bgY = elm.currentStyle.backgroundPositionY,
18 bgR = elm.currentStyle.backgroundRepeat;
19
20 // Cache of DIVs created per element, and image preloader/data.
21 if (!data.tiles) {
22 data.tiles = {
23 elm: elm,
24 src: '',
25 cache: [],
26 img: new Image(),
27 old: {}
28 };
29 }
30 var tiles = data.tiles,
31 pngW = tiles.img.width,
32 pngH = tiles.img.height;
33
34 if (pngSrc) {
35 if (!ready && pngSrc != tiles.src) {
36 // New image? Preload it with a callback to detect dimensions.
37 tiles.img.onload = function() {
38 this.onload = null;
39 IEPNGFix.tileBG(elm, pngSrc, 1);
40 };
41 return tiles.img.src = pngSrc;
42 }
43 } else {
44 // No image?
45 if (tiles.src) ready = 1;
46 pngW = pngH = 0;
47 }
48 tiles.src = pngSrc;
49
50 if (!ready && elmW == tiles.old.w && elmH == tiles.old.h &&
51 bgX == tiles.old.x && bgY == tiles.old.y && bgR == tiles.old.r) {
52 return;
53 }
54
55 // Convert English and percentage positions to pixels.
56 var pos = {
57 top: '0%',
58 left: '0%',
59 center: '50%',
60 bottom: '100%',
61 right: '100%'
62 },
63 x,
64 y,
65 pc;
66 x = pos[bgX] || bgX;
67 y = pos[bgY] || bgY;
68 if (pc = x.match(/(\d+)%/)) {
69 x = Math.round((elmW - pngW) * (parseInt(pc[1]) / 100));
70 }
71 if (pc = y.match(/(\d+)%/)) {
72 y = Math.round((elmH - pngH) * (parseInt(pc[1]) / 100));
73 }
74 x = parseInt(x);
75 y = parseInt(y);
76
77 // Handle backgroundRepeat.
78 var repeatX = { 'repeat': 1, 'repeat-x': 1 }[bgR],
79 repeatY = { 'repeat': 1, 'repeat-y': 1 }[bgR];
80 if (repeatX) {
81 x %= pngW;
82 if (x > 0) x -= pngW;
83 }
84 if (repeatY) {
85 y %= pngH;
86 if (y > 0) y -= pngH;
87 }
88
89 // Go!
90 this.hook.enabled = 0;
91 if (!({ relative: 1, absolute: 1 }[elm.currentStyle.position])) {
92 elm.style.position = 'relative';
93 }
94 var count = 0,
95 xPos,
96 maxX = repeatX ? elmW : x + 0.1,
97 yPos,
98 maxY = repeatY ? elmH : y + 0.1,
99 d,
100 s,
101 isNew;
102 if (pngW && pngH) {
103 for (xPos = x; xPos < maxX; xPos += pngW) {
104 for (yPos = y; yPos < maxY; yPos += pngH) {
105 isNew = 0;
106 if (!tiles.cache[count]) {
107 tiles.cache[count] = document.createElement('div');
108 isNew = 1;
109 }
110 var clipR = (xPos + pngW > elmW ? elmW - xPos : pngW),
111 clipB = (yPos + pngH > elmH ? elmH - yPos : pngH);
112 d = tiles.cache[count];
113 s = d.style;
114 s.behavior = 'none';
115 s.left = xPos + 'px';
116 s.top = yPos + 'px';
117 s.width = clipR + 'px';
118 s.height = clipB + 'px';
119 s.clip = 'rect(' +
120 (yPos < 0 ? 0 - yPos : 0) + 'px,' +
121 clipR + 'px,' +
122 clipB + 'px,' +
123 (xPos < 0 ? 0 - xPos : 0) + 'px)';
124 s.display = 'block';
125 if (isNew) {
126 s.position = 'absolute';
127 s.zIndex = -999;
128 if (elm.firstChild) {
129 elm.insertBefore(d, elm.firstChild);
130 } else {
131 elm.appendChild(d);
132 }
133 }
134 this.fix(d, pngSrc, 0);
135 count++;
136 }
137 }
138 }
139 while (count < tiles.cache.length) {
140 this.fix(tiles.cache[count], '', 0);
141 tiles.cache[count++].style.display = 'none';
142 }
143
144 this.hook.enabled = 1;
145
146 // Cache so updates are infrequent.
147 tiles.old = {
148 w: elmW,
149 h: elmH,
150 x: bgX,
151 y: bgY,
152 r: bgR
153 };
154};
155
156
157IEPNGFix.update = function() {
158 // Update all PNG backgrounds.
159 for (var i in IEPNGFix.data) {
160 var t = IEPNGFix.data[i].tiles;
161 if (t && t.elm && t.src) {
162 IEPNGFix.tileBG(t.elm, t.src);
163 }
164 }
165};
166IEPNGFix.update.timer = 0;
167
168if (window.attachEvent && !window.opera) {
169 window.attachEvent('onresize', function() {
170 clearTimeout(IEPNGFix.update.timer);
171 IEPNGFix.update.timer = setTimeout(IEPNGFix.update, 100);
172 });
173}
</script>
<style type="text/css">
</style>
</head>
<body>
</body>
</html>