1 | /* Unobtrusive Flash Objects (UFO) v3.20 <http://www.bobbyvandersluis.com/ufo/> |
---|
2 | Copyright 2005, 2006 Bobby van der Sluis |
---|
3 | This software is licensed under the CC-GNU LGPL <http://creativecommons.org/licenses/LGPL/2.1/> |
---|
4 | */ |
---|
5 | |
---|
6 | var UFO = { |
---|
7 | req: ["movie", "width", "height", "majorversion", "build"], |
---|
8 | opt: ["play", "loop", "menu", "quality", "scale", "salign", "wmode", "bgcolor", "base", "flashvars", "devicefont", "allowscriptaccess", "seamlesstabbing"], |
---|
9 | optAtt: ["id", "name", "align"], |
---|
10 | optExc: ["swliveconnect"], |
---|
11 | ximovie: "ufo.swf", |
---|
12 | xiwidth: "215", |
---|
13 | xiheight: "138", |
---|
14 | ua: navigator.userAgent.toLowerCase(), |
---|
15 | pluginType: "", |
---|
16 | fv: [0,0], |
---|
17 | foList: [], |
---|
18 | |
---|
19 | create: function(FO, id) { |
---|
20 | if (!UFO.uaHas("w3cdom") || UFO.uaHas("ieMac")) return; |
---|
21 | UFO.getFlashVersion(); |
---|
22 | UFO.foList[id] = UFO.updateFO(FO); |
---|
23 | UFO.createCSS("#" + id, "visibility:hidden;"); |
---|
24 | UFO.domLoad(id); |
---|
25 | }, |
---|
26 | |
---|
27 | updateFO: function(FO) { |
---|
28 | if (typeof FO.xi != "undefined" && FO.xi == "true") { |
---|
29 | if (typeof FO.ximovie == "undefined") FO.ximovie = UFO.ximovie; |
---|
30 | if (typeof FO.xiwidth == "undefined") FO.xiwidth = UFO.xiwidth; |
---|
31 | if (typeof FO.xiheight == "undefined") FO.xiheight = UFO.xiheight; |
---|
32 | } |
---|
33 | FO.mainCalled = false; |
---|
34 | return FO; |
---|
35 | }, |
---|
36 | |
---|
37 | domLoad: function(id) { |
---|
38 | var _t = setInterval(function() { |
---|
39 | if ((document.getElementsByTagName("body")[0] != null || document.body != null) && document.getElementById(id) != null) { |
---|
40 | UFO.main(id); |
---|
41 | clearInterval(_t); |
---|
42 | } |
---|
43 | }, 250); |
---|
44 | if (typeof document.addEventListener != "undefined") { |
---|
45 | document.addEventListener("DOMContentLoaded", function() { UFO.main(id); clearInterval(_t); } , null); // Gecko, Opera 9+ |
---|
46 | } |
---|
47 | }, |
---|
48 | |
---|
49 | main: function(id) { |
---|
50 | var _fo = UFO.foList[id]; |
---|
51 | if (_fo.mainCalled) return; |
---|
52 | UFO.foList[id].mainCalled = true; |
---|
53 | document.getElementById(id).style.visibility = "hidden"; |
---|
54 | if (UFO.hasRequired(id)) { |
---|
55 | if (UFO.hasFlashVersion(parseInt(_fo.majorversion, 10), parseInt(_fo.build, 10))) { |
---|
56 | if (typeof _fo.setcontainercss != "undefined" && _fo.setcontainercss == "true") UFO.setContainerCSS(id); |
---|
57 | UFO.writeSWF(id); |
---|
58 | } |
---|
59 | else if (_fo.xi == "true" && UFO.hasFlashVersion(6, 65)) { |
---|
60 | UFO.createDialog(id); |
---|
61 | } |
---|
62 | } |
---|
63 | document.getElementById(id).style.visibility = "visible"; |
---|
64 | }, |
---|
65 | |
---|
66 | createCSS: function(selector, declaration) { |
---|
67 | var _h = document.getElementsByTagName("head")[0]; |
---|
68 | var _s = UFO.createElement("style"); |
---|
69 | if (!UFO.uaHas("ieWin")) _s.appendChild(document.createTextNode(selector + " {" + declaration + "}")); // bugs in IE/Win |
---|
70 | _s.setAttribute("type", "text/css"); |
---|
71 | _s.setAttribute("media", "screen"); |
---|
72 | _h.appendChild(_s); |
---|
73 | if (UFO.uaHas("ieWin") && document.styleSheets && document.styleSheets.length > 0) { |
---|
74 | var _ls = document.styleSheets[document.styleSheets.length - 1]; |
---|
75 | if (typeof _ls.addRule == "object") _ls.addRule(selector, declaration); |
---|
76 | } |
---|
77 | }, |
---|
78 | |
---|
79 | setContainerCSS: function(id) { |
---|
80 | var _fo = UFO.foList[id]; |
---|
81 | var _w = /%/.test(_fo.width) ? "" : "px"; |
---|
82 | var _h = /%/.test(_fo.height) ? "" : "px"; |
---|
83 | UFO.createCSS("#" + id, "width:" + _fo.width + _w +"; height:" + _fo.height + _h +";"); |
---|
84 | if (_fo.width == "100%") { |
---|
85 | UFO.createCSS("body", "margin-left:0; margin-right:0; padding-left:0; padding-right:0;"); |
---|
86 | } |
---|
87 | if (_fo.height == "100%") { |
---|
88 | UFO.createCSS("html", "height:100%; overflow:hidden;"); |
---|
89 | UFO.createCSS("body", "margin-top:0; margin-bottom:0; padding-top:0; padding-bottom:0; height:100%;"); |
---|
90 | } |
---|
91 | }, |
---|
92 | |
---|
93 | createElement: function(el) { |
---|
94 | return (UFO.uaHas("xml") && typeof document.createElementNS != "undefined") ? document.createElementNS("http://www.w3.org/1999/xhtml", el) : document.createElement(el); |
---|
95 | }, |
---|
96 | |
---|
97 | createObjParam: function(el, aName, aValue) { |
---|
98 | var _p = UFO.createElement("param"); |
---|
99 | _p.setAttribute("name", aName); |
---|
100 | _p.setAttribute("value", aValue); |
---|
101 | el.appendChild(_p); |
---|
102 | }, |
---|
103 | |
---|
104 | uaHas: function(ft) { |
---|
105 | var _u = UFO.ua; |
---|
106 | switch(ft) { |
---|
107 | case "w3cdom": |
---|
108 | return (typeof document.getElementById != "undefined" && typeof document.getElementsByTagName != "undefined" && (typeof document.createElement != "undefined" || typeof document.createElementNS != "undefined")); |
---|
109 | case "xml": |
---|
110 | var _m = document.getElementsByTagName("meta"); |
---|
111 | var _l = _m.length; |
---|
112 | for (var i = 0; i < _l; i++) { |
---|
113 | if (/content-type/i.test(_m[i].getAttribute("http-equiv")) && /xml/i.test(_m[i].getAttribute("content"))) return true; |
---|
114 | } |
---|
115 | return false; |
---|
116 | case "ieMac": |
---|
117 | return /msie/.test(_u) && !/opera/.test(_u) && /mac/.test(_u); |
---|
118 | case "ieWin": |
---|
119 | return /msie/.test(_u) && !/opera/.test(_u) && /win/.test(_u); |
---|
120 | case "gecko": |
---|
121 | return /gecko/.test(_u) && !/applewebkit/.test(_u); |
---|
122 | case "opera": |
---|
123 | return /opera/.test(_u); |
---|
124 | case "safari": |
---|
125 | return /applewebkit/.test(_u); |
---|
126 | default: |
---|
127 | return false; |
---|
128 | } |
---|
129 | }, |
---|
130 | |
---|
131 | getFlashVersion: function() { |
---|
132 | if (UFO.fv[0] != 0) return; |
---|
133 | if (navigator.plugins && typeof navigator.plugins["Shockwave Flash"] == "object") { |
---|
134 | UFO.pluginType = "npapi"; |
---|
135 | var _d = navigator.plugins["Shockwave Flash"].description; |
---|
136 | if (typeof _d != "undefined") { |
---|
137 | _d = _d.replace(/^.*\s+(\S+\s+\S+$)/, "$1"); |
---|
138 | var _m = parseInt(_d.replace(/^(.*)\..*$/, "$1"), 10); |
---|
139 | var _r = /r/.test(_d) ? parseInt(_d.replace(/^.*r(.*)$/, "$1"), 10) : 0; |
---|
140 | UFO.fv = [_m, _r]; |
---|
141 | } |
---|
142 | } |
---|
143 | else if (window.ActiveXObject) { |
---|
144 | UFO.pluginType = "ax"; |
---|
145 | try { // avoid fp 6 crashes |
---|
146 | var _a = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"); |
---|
147 | } |
---|
148 | catch(e) { |
---|
149 | try { |
---|
150 | var _a = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"); |
---|
151 | UFO.fv = [6, 0]; |
---|
152 | _a.AllowScriptAccess = "always"; // throws if fp < 6.47 |
---|
153 | } |
---|
154 | catch(e) { |
---|
155 | if (UFO.fv[0] == 6) return; |
---|
156 | } |
---|
157 | try { |
---|
158 | var _a = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"); |
---|
159 | } |
---|
160 | catch(e) {} |
---|
161 | } |
---|
162 | if (typeof _a == "object") { |
---|
163 | var _d = _a.GetVariable("$version"); // bugs in fp 6.21/6.23 |
---|
164 | if (typeof _d != "undefined") { |
---|
165 | _d = _d.replace(/^\S+\s+(.*)$/, "$1").split(","); |
---|
166 | UFO.fv = [parseInt(_d[0], 10), parseInt(_d[2], 10)]; |
---|
167 | } |
---|
168 | } |
---|
169 | } |
---|
170 | }, |
---|
171 | |
---|
172 | hasRequired: function(id) { |
---|
173 | var _l = UFO.req.length; |
---|
174 | for (var i = 0; i < _l; i++) { |
---|
175 | if (typeof UFO.foList[id][UFO.req[i]] == "undefined") return false; |
---|
176 | } |
---|
177 | return true; |
---|
178 | }, |
---|
179 | |
---|
180 | hasFlashVersion: function(major, release) { |
---|
181 | return (UFO.fv[0] > major || (UFO.fv[0] == major && UFO.fv[1] >= release)) ? true : false; |
---|
182 | }, |
---|
183 | |
---|
184 | writeSWF: function(id) { |
---|
185 | var _fo = UFO.foList[id]; |
---|
186 | var _e = document.getElementById(id); |
---|
187 | if (UFO.pluginType == "npapi") { |
---|
188 | if (UFO.uaHas("gecko") || UFO.uaHas("xml")) { |
---|
189 | while(_e.hasChildNodes()) { |
---|
190 | _e.removeChild(_e.firstChild); |
---|
191 | } |
---|
192 | var _obj = UFO.createElement("object"); |
---|
193 | _obj.setAttribute("type", "application/x-shockwave-flash"); |
---|
194 | _obj.setAttribute("data", _fo.movie); |
---|
195 | _obj.setAttribute("width", _fo.width); |
---|
196 | _obj.setAttribute("height", _fo.height); |
---|
197 | var _l = UFO.optAtt.length; |
---|
198 | for (var i = 0; i < _l; i++) { |
---|
199 | if (typeof _fo[UFO.optAtt[i]] != "undefined") _obj.setAttribute(UFO.optAtt[i], _fo[UFO.optAtt[i]]); |
---|
200 | } |
---|
201 | var _o = UFO.opt.concat(UFO.optExc); |
---|
202 | var _l = _o.length; |
---|
203 | for (var i = 0; i < _l; i++) { |
---|
204 | if (typeof _fo[_o[i]] != "undefined") UFO.createObjParam(_obj, _o[i], _fo[_o[i]]); |
---|
205 | } |
---|
206 | _e.appendChild(_obj); |
---|
207 | } |
---|
208 | else { |
---|
209 | var _emb = ""; |
---|
210 | var _o = UFO.opt.concat(UFO.optAtt).concat(UFO.optExc); |
---|
211 | var _l = _o.length; |
---|
212 | for (var i = 0; i < _l; i++) { |
---|
213 | if (typeof _fo[_o[i]] != "undefined") _emb += ' ' + _o[i] + '="' + _fo[_o[i]] + '"'; |
---|
214 | } |
---|
215 | _e.innerHTML = '<embed type="application/x-shockwave-flash" src="' + _fo.movie + '" width="' + _fo.width + '" height="' + _fo.height + '" pluginspage="http://www.macromedia.com/go/getflashplayer"' + _emb + '></embed>'; |
---|
216 | } |
---|
217 | } |
---|
218 | else if (UFO.pluginType == "ax") { |
---|
219 | var _objAtt = ""; |
---|
220 | var _l = UFO.optAtt.length; |
---|
221 | for (var i = 0; i < _l; i++) { |
---|
222 | if (typeof _fo[UFO.optAtt[i]] != "undefined") _objAtt += ' ' + UFO.optAtt[i] + '="' + _fo[UFO.optAtt[i]] + '"'; |
---|
223 | } |
---|
224 | var _objPar = ""; |
---|
225 | var _l = UFO.opt.length; |
---|
226 | for (var i = 0; i < _l; i++) { |
---|
227 | if (typeof _fo[UFO.opt[i]] != "undefined") _objPar += '<param name="' + UFO.opt[i] + '" value="' + _fo[UFO.opt[i]] + '" />'; |
---|
228 | } |
---|
229 | var _p = window.location.protocol == "https:" ? "https:" : "http:"; |
---|
230 | _e.innerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + _objAtt + ' width="' + _fo.width + '" height="' + _fo.height + '" codebase="' + _p + '//download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=' + _fo.majorversion + ',0,' + _fo.build + ',0"><param name="movie" value="' + _fo.movie + '" />' + _objPar + '</object>'; |
---|
231 | } |
---|
232 | }, |
---|
233 | |
---|
234 | createDialog: function(id) { |
---|
235 | var _fo = UFO.foList[id]; |
---|
236 | UFO.createCSS("html", "height:100%; overflow:hidden;"); |
---|
237 | UFO.createCSS("body", "height:100%; overflow:hidden;"); |
---|
238 | UFO.createCSS("#xi-con", "position:absolute; left:0; top:0; z-index:1000; width:100%; height:100%; background-color:#fff; filter:alpha(opacity:75); opacity:0.75;"); |
---|
239 | UFO.createCSS("#xi-dia", "position:absolute; left:50%; top:50%; margin-left: -" + Math.round(parseInt(_fo.xiwidth, 10) / 2) + "px; margin-top: -" + Math.round(parseInt(_fo.xiheight, 10) / 2) + "px; width:" + _fo.xiwidth + "px; height:" + _fo.xiheight + "px;"); |
---|
240 | var _b = document.getElementsByTagName("body")[0]; |
---|
241 | var _c = UFO.createElement("div"); |
---|
242 | _c.setAttribute("id", "xi-con"); |
---|
243 | var _d = UFO.createElement("div"); |
---|
244 | _d.setAttribute("id", "xi-dia"); |
---|
245 | _c.appendChild(_d); |
---|
246 | _b.appendChild(_c); |
---|
247 | var _mmu = window.location; |
---|
248 | if (UFO.uaHas("xml") && UFO.uaHas("safari")) { |
---|
249 | var _mmd = document.getElementsByTagName("title")[0].firstChild.nodeValue = document.getElementsByTagName("title")[0].firstChild.nodeValue.slice(0, 47) + " - Flash Player Installation"; |
---|
250 | } |
---|
251 | else { |
---|
252 | var _mmd = document.title = document.title.slice(0, 47) + " - Flash Player Installation"; |
---|
253 | } |
---|
254 | var _mmp = UFO.pluginType == "ax" ? "ActiveX" : "PlugIn"; |
---|
255 | var _uc = typeof _fo.xiurlcancel != "undefined" ? "&xiUrlCancel=" + _fo.xiurlcancel : ""; |
---|
256 | var _uf = typeof _fo.xiurlfailed != "undefined" ? "&xiUrlFailed=" + _fo.xiurlfailed : ""; |
---|
257 | UFO.foList["xi-dia"] = { movie:_fo.ximovie, width:_fo.xiwidth, height:_fo.xiheight, majorversion:"6", build:"65", flashvars:"MMredirectURL=" + _mmu + "&MMplayerType=" + _mmp + "&MMdoctitle=" + _mmd + _uc + _uf }; |
---|
258 | UFO.writeSWF("xi-dia"); |
---|
259 | }, |
---|
260 | |
---|
261 | expressInstallCallback: function() { |
---|
262 | var _b = document.getElementsByTagName("body")[0]; |
---|
263 | var _c = document.getElementById("xi-con"); |
---|
264 | _b.removeChild(_c); |
---|
265 | UFO.createCSS("body", "height:auto; overflow:auto;"); |
---|
266 | UFO.createCSS("html", "height:auto; overflow:auto;"); |
---|
267 | }, |
---|
268 | |
---|
269 | cleanupIELeaks: function() { |
---|
270 | var _o = document.getElementsByTagName("object"); |
---|
271 | var _l = _o.length |
---|
272 | for (var i = 0; i < _l; i++) { |
---|
273 | _o[i].style.display = "none"; |
---|
274 | for (var x in _o[i]) { |
---|
275 | if (typeof _o[i][x] == "function") { |
---|
276 | _o[i][x] = null; |
---|
277 | } |
---|
278 | } |
---|
279 | } |
---|
280 | } |
---|
281 | |
---|
282 | }; |
---|
283 | |
---|
284 | if (typeof window.attachEvent != "undefined" && UFO.uaHas("ieWin")) { |
---|
285 | window.attachEvent("onunload", UFO.cleanupIELeaks); |
---|
286 | } |
---|