SwarmPlayer is now detected; CIS-LB random load balancer created
[living-lab-site.git] / js / jquery.ui.nsinstall.js
1 /*
2  * jQuery UI Install NextShare Video Plugins 1.0.0 beta
3  *
4  * Copyright 2011, Călin-Andrei Burloiu
5  * Dual licensed under the MIT or GPL Version 2 licenses.
6  * http://jquery.org/license
7  * 
8  * This file constains code created by Riccardo Petrocco and Arno Bakker
9  * from http://swarmplayer.p2p-next.org.
10  *
11  * Depends:
12  *   jquery.ui.core.js
13  *   jquery.ui.widget.js
14  */
15 (function( $, undefined ) {
16
17 $.widget( "ui.nsinstall", {
18         version: "1.0.0 beta",
19         options: {
20                 type: "ns-html5",       // "ns-html5" or "ns-vlc",
21                 installLink: "",
22                 hideIfAlreadyInstalled: true,
23                 
24                 error: "none",
25                 msg: {
26                         "none": "Install ",
27                         "os not supported": " is not supported for your operating system",
28                         "browser not supported": " is not supported for your browser",
29                         "browser version not supported": " is not supported for your browser version",
30                         "already installed": " is installed"
31                 }
32         },
33         
34         _create: function() {
35                 var widget = this;
36                 var platform = widget.platform();
37                 
38                 // Check platform support conditions and create content.
39                 // NextSharePC
40                 if (widget.options.type == "ns-vlc")
41                 {
42                         if (platform.osName !== 'MacOS' && platform.osName !== 'Windows')
43                         {
44                                 widget.options.error = "os not supported";
45                         }
46                         else
47                         {
48                                 if (platform.browserName == 'Firefox')
49                                 {
50                                         if (platform.browserVersion < 3.5)
51                                                 widget.options.error = "browser version not supported";
52                                 }
53                                 else if (platform.browserName == 'Internet Explorer')
54                                 {
55                                         if (platform.browserVersion < 7.0)
56                                         {
57                                                 widget.options.error = "browser version not supported"; 
58                                         }
59                                 }
60                                 else
61                                         widget.options.error = "browser not supported";
62                         }
63                         
64                         if (widget.isNextSharePCAlreadyInstalled())
65                                 widget.options.error = "already installed";
66                         
67                         if (widget.options.error !== "already installed"
68                                         || (widget.options.error === "already installed"
69                                         && ! widget.options.hideIfAlreadyInstalled) )
70                                 widget._createNextSharePCInstall();
71                 }
72                 // SwarmPlayer
73                 else if (widget.options.type == "ns-html5")
74                 {
75                         if (platform.osName !== 'MacOS' && platform.osName !== 'Windows'
76                                 && platform.osName !== 'Ubuntu Linux'
77                                 && platform.osName !== 'Linux')
78                         {
79                                 widget.options.error = "os not supported";
80                         }
81                         else
82                         {
83                                 if (platform.browserName == 'Firefox')
84                                 {
85                                         if (platform.browserVersion < 3.5)
86                                                 widget.options.error = "browser version not supported";
87                                 }
88                                 else if (platform.browserName == 'Internet Explorer')
89                                 {
90                                         if (platform.browserVersion < 7.0)
91                                         {
92                                                 widget.options.error = "browser version not supported"; 
93                                         }
94                                 }
95                                 else
96                                         widget.options.error = "browser not supported";
97                         }
98                         
99                         if (widget.isSwarmPlayerAlreadyInstalled())
100                                 widget.options.error = "already installed";
101                         
102                         if (widget.options.error !== "already installed"
103                                         || (widget.options.error === "already installed"
104                                         && ! widget.options.hideIfAlreadyInstalled) )
105                                 widget._createSwarmPlayerInstall();
106                 }
107         },
108         
109         _createSwarmPlayerInstall: function() {
110                 var widget = this;
111                 var msg;
112                 var $box;
113                 
114                 if (widget.options.error == 'none')
115                 {
116                         var $installLink = $('<a id="install-swarmplayer" href="'
117                                         + widget.options.installLink + '">'
118                                         + widget.options.msg[widget.options.error] + ' SwarmPlayer Plugin</a>')
119                                 .appendTo(widget.element);
120                         
121                         $installLink
122                                 .button({
123                             icons: {
124                                 primary: "ui-icon-arrowthickstop-1-s"
125                             }
126                         });
127                 }
128                 else if (widget.options.error == 'already installed')
129                 {
130                         $box = $('<div id="install-swarmplayer"></div>')
131                                 .appendTo(widget.element);
132                         
133                         $box
134                                 .html('<div class="ui-widget">'
135                                                 + '<div style="padding: 0 .7em;" class="ui-state-highlight ui-corner-all">' 
136                                                 + '<p style="text-align: center"><span style="float: left; margin-right: .3em;" class="ui-icon ui-icon-info"></span>' 
137                                                 + '<span id="install-swarmplayer-msg"></span></p>'
138                                         + '</div>'
139                                 + '</div>');
140                         
141                         msg = 'SwarmPlayer ' + widget.options.msg[widget.options.error];
142                         $('#install-swarmplayer-msg').html(msg);
143                 }
144                 else
145                 {
146                         $box = $('<div id="install-swarmplayer"></div>')
147                                 .appendTo(widget.element);
148                         
149                         $box
150                                 .html('<div class="ui-widget">'
151                                                 + '<div style="padding: 0 .7em;" class="ui-state-error ui-corner-all">' 
152                                                 + '<p style="text-align: center"><span style="float: left; margin-right: .3em;" class="ui-icon ui-icon-alert"></span>' 
153                                                 + '<span id="install-swarmplayer-msg"></span></p>'
154                                         + '</div>'
155                                 + '</div>');
156                         
157                         msg = 'SwarmPlayer ' + widget.options.msg[widget.options.error];
158                         $('#install-swarmplayer-msg').html(msg);
159                 }
160                 
161         },
162         
163         _createNextSharePCInstall: function() {
164                 var widget = this;
165                 var msg;
166                 var $box;
167                 
168                 if (widget.options.error == 'none')
169                 {
170                         var $installLink = $('<a id="install-nextsharepc" href="'
171                                         + widget.options.installLink + '">'
172                                         + widget.options.msg[widget.options.error] + ' NextSharePC Plugin</a>')
173                                 .appendTo(widget.element);
174                         
175                         $installLink
176                                 .button({
177                             icons: {
178                                 primary: "ui-icon-arrowthickstop-1-s"
179                             }
180                         });
181                 }
182                 else if (widget.options.error == 'already installed')
183                 {
184                         $box = $('<div id="install-nextsharepc"></div>')
185                                 .appendTo(widget.element);
186                         
187                         $box
188                         .html('<div class="ui-widget">'
189                                         + '<div style="padding: 0 .7em;" class="ui-state-highlight ui-corner-all">' 
190                                         + '<p style="text-align: center"><span style="float: left; margin-right: .3em;" class="ui-icon ui-icon-info"></span>' 
191                                         + '<span id="install-nextsharepc-msg"></span></p>'
192                                 + '</div>'
193                         + '</div>');
194                         
195                         msg = 'NextSharePC ' + widget.options.msg[widget.options.error];
196                         $('#install-nextsharepc-msg').html(msg);
197                 }
198                 else
199                 {
200                         $box = $('<div id="install-nextsharepc"></div>')
201                                 .appendTo(widget.element);
202                         
203                         $box
204                                 .html('<div class="ui-widget">'
205                                                 + '<div style="padding: 0 .7em;" class="ui-state-error ui-corner-all">' 
206                                                 + '<p style="text-align: center"><span style="float: left; margin-right: .3em;" class="ui-icon ui-icon-alert"></span>' 
207                                                 + '<span id="install-nextsharepc-msg"></span></p>'
208                                         + '</div>'
209                                 + '</div>');
210                         
211                         msg = 'NextSharePC ' + widget.options.msg[widget.options.error];
212                         $('#install-nextsharepc-msg').html(msg);
213                 }
214         },
215         
216         _destroy: function() {
217                 this.element.html('');
218         },
219         
220         _setOption: function( key, value ) {
221                 // TODO
222                 if ( key === "TODO" ) {
223                         
224                 }
225
226                 this._super( "_setOption", key, value );
227         },
228         
229         isNextSharePCAlreadyInstalled: function() {
230                 for (var i=0; i<navigator.plugins.length; i++)
231                 {
232                         if (navigator.plugins.item(i).name.indexOf('NextSharePC') != -1)
233                                 return true;
234                 }
235                 
236                 return false;
237         },
238         
239         isSwarmPlayerAlreadyInstalled: function() {
240                 if (typeof swarmTransport != 'undefined')
241                         return true;
242                 
243                 return false;
244         },
245         
246         platform: function() {
247                 var browserName="Unknown";
248                 var browserVersion=-1;
249                 var osName="Unknown";
250                 var archName="Unknown";
251                 
252                 if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent))
253                 { 
254                         var ffbrowserVersion=new Number(RegExp.$1);
255                         browserName = "Firefox";
256                         browserVersion = ffbrowserVersion;
257                 }
258                 else if (/MSIE (\d+\.\d+);/.test(navigator.userAgent))
259                 { 
260                         var iebrowserVersion=new Number(RegExp.$1);
261                         browserName = "Internet Explorer";
262                         browserVersion = iebrowserVersion;
263                 }
264                 else if (/Chrome[\/\s](\d+\.\d+)/.test(navigator.userAgent)) 
265                 {
266                     // Must come before Safari, Chrome says it's Safari too. 
267                         var chbrowserVersion=new Number(RegExp.$1);
268                         browserName = "Chrome";
269                         browserVersion = chbrowserVersion;
270                 }
271                 else if (/Safari[\/\s](\d+\.\d+)/.test(navigator.userAgent))
272                 { 
273                         var sfbrowserVersion=new Number(RegExp.$1);
274                         browserName = "Safari";
275                         browserVersion = sfbrowserVersion;
276                 }
277                 else if (/Iceweasel[\/\s](\d+\.\d+)/.test(navigator.userAgent))
278                 { 
279                     // Iceweasel should be compatible with Firefox
280                         var ffbrowserVersion=new Number(RegExp.$1);
281                         browserName = "Firefox";
282                         browserVersion = ffbrowserVersion;
283                 }
284                 else if (/Namoroka[\/\s](\d+\.\d+)/.test(navigator.userAgent))
285                 { 
286                     // Namoroka should be compatible with Firefox
287                         var ffbrowserVersion=new Number(RegExp.$1);
288                         browserName = "Firefox";
289                         browserVersion = ffbrowserVersion;
290                 }
291
292
293                 if (navigator.userAgent.indexOf("Win")!=-1) osName="Windows";
294                 else if (navigator.userAgent.indexOf("Mac")!=-1) osName="MacOS";
295                 else if (navigator.userAgent.indexOf("Ubuntu")!=-1) osName="Ubuntu Linux";
296                 else if (navigator.userAgent.indexOf("Linux")!=-1) osName="Linux";
297                 else if (navigator.userAgent.indexOf("X11")!=-1) osName="UNIX";
298                 
299                 if (navigator.userAgent.indexOf("Intel Mac")!=-1) archName="Intel";
300                 else if (navigator.userAgent.indexOf("PPC Mac")!=-1) archName="PowerPC";
301                 else if (navigator.userAgent.indexOf("Linux i686")!=-1) archName="i686";
302                 else if (navigator.userAgent.indexOf("Linux x86_64")!=-1) archName="x86_64";
303
304                 return {browserName: browserName, browserVersion: browserVersion, osName: osName, archName: archName};
305         }
306 });
307
308 })( jQuery );