megar 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. data/.gitignore +19 -0
  2. data/.rspec +1 -0
  3. data/.rvmrc +1 -0
  4. data/.travis.yml +11 -0
  5. data/CHANGELOG +5 -0
  6. data/Gemfile +4 -0
  7. data/Guardfile +11 -0
  8. data/LICENSE +22 -0
  9. data/README.rdoc +218 -0
  10. data/Rakefile +33 -0
  11. data/bin/megar +16 -0
  12. data/lib/extensions/math.rb +13 -0
  13. data/lib/js_ref_impl/_README +9 -0
  14. data/lib/js_ref_impl/base64_1.js +83 -0
  15. data/lib/js_ref_impl/crypto_5.js +1795 -0
  16. data/lib/js_ref_impl/download_8.js +867 -0
  17. data/lib/js_ref_impl/hex_1.js +76 -0
  18. data/lib/js_ref_impl/index_9.js +666 -0
  19. data/lib/js_ref_impl/js.manifest +115 -0
  20. data/lib/js_ref_impl/rsa_1.js +456 -0
  21. data/lib/js_ref_impl/sjcl_1.js +1 -0
  22. data/lib/js_ref_impl/upload_10.js +691 -0
  23. data/lib/megar.rb +11 -0
  24. data/lib/megar/catalog.rb +5 -0
  25. data/lib/megar/catalog/catalog_item.rb +90 -0
  26. data/lib/megar/catalog/file.rb +14 -0
  27. data/lib/megar/catalog/files.rb +13 -0
  28. data/lib/megar/catalog/folder.rb +20 -0
  29. data/lib/megar/catalog/folders.rb +28 -0
  30. data/lib/megar/connection.rb +84 -0
  31. data/lib/megar/crypto.rb +399 -0
  32. data/lib/megar/exception.rb +55 -0
  33. data/lib/megar/session.rb +157 -0
  34. data/lib/megar/shell.rb +87 -0
  35. data/lib/megar/version.rb +3 -0
  36. data/megar.gemspec +30 -0
  37. data/spec/fixtures/crypto_expectations/sample_user.json +109 -0
  38. data/spec/spec_helper.rb +24 -0
  39. data/spec/support/crypto_expectations_helper.rb +44 -0
  40. data/spec/support/mocks_helper.rb +22 -0
  41. data/spec/unit/catalog/file_spec.rb +31 -0
  42. data/spec/unit/catalog/files_spec.rb +26 -0
  43. data/spec/unit/catalog/folder_spec.rb +28 -0
  44. data/spec/unit/catalog/folders_spec.rb +49 -0
  45. data/spec/unit/connection_spec.rb +50 -0
  46. data/spec/unit/crypto_spec.rb +476 -0
  47. data/spec/unit/exception_spec.rb +35 -0
  48. data/spec/unit/extensions/math_spec.rb +21 -0
  49. data/spec/unit/session_spec.rb +146 -0
  50. data/spec/unit/shell_spec.rb +18 -0
  51. metadata +238 -0
@@ -0,0 +1,76 @@
1
+
2
+ /*
3
+ * conversion functions:
4
+ * - num array to string
5
+ * - string to hex
6
+ */
7
+
8
+ function s2b(s)
9
+ {
10
+ var bn=1, r=[0], rn=0, sn=0, sb=256;
11
+ var bits=s.length*8;
12
+
13
+ for(var n=0; n<bits; n++)
14
+ {
15
+ if((sb<<=1) > 255)
16
+ {
17
+ sb=1; c=s.charCodeAt(sn++);
18
+ }
19
+ if(bn > bm)
20
+ {
21
+ bn=1;
22
+ r[++rn]=0;
23
+ }
24
+ if(c & sb) r[rn]|=bn;
25
+ bn<<=1;
26
+ }
27
+ return r;
28
+ }
29
+
30
+ function b2s(b)
31
+ {
32
+ var bn=1, bc=0, r=[0], rb=1, rn=0;
33
+ var bits=b.length*bs;
34
+ var n, rr='';
35
+
36
+ for(n=0; n<bits; n++)
37
+ {
38
+ if(b[bc] & bn) r[rn]|=rb;
39
+ if((rb<<=1) > 255)
40
+ {
41
+ rb=1; r[++rn]=0;
42
+ }
43
+ if((bn<<=1) > bm)
44
+ {
45
+ bn=1; bc++;
46
+ }
47
+ }
48
+
49
+ while(rn >= 0 && r[rn]==0) rn--;
50
+ for(n=0; n<=rn; n++) rr=String.fromCharCode(r[n])+rr;
51
+ return rr;
52
+ }
53
+
54
+ function s2hex(s)
55
+ {
56
+ var result = '';
57
+ for(var i=0; i<s.length; i++)
58
+ {
59
+ c = s.charCodeAt(i);
60
+ result += ((c<16) ? "0" : "") + c.toString(16);
61
+ }
62
+ return result;
63
+ }
64
+
65
+ function hex2s(hex)
66
+ {
67
+ var r='';
68
+ if(hex.indexOf("0x") == 0 || hex.indexOf("0X") == 0) hex = hex.substr(2);
69
+
70
+ if(hex.length%2) hex+='0';
71
+
72
+ for(var i = 0; i<hex.length; i += 2)
73
+ r += String.fromCharCode(parseInt(hex.slice(i, i+2), 16));
74
+ return r;
75
+ }
76
+
@@ -0,0 +1,666 @@
1
+ var fmdirid=false;
2
+ var u_type,cur_page,u_checked
3
+ var page = '';
4
+ var subpage = '';
5
+ var confirmcode = false;
6
+ var confirmok = false;
7
+ var signupcode = false;
8
+ var hash = window.location.hash;
9
+ var chrome_msg=false;
10
+ var init_anoupload=false;
11
+ var blogid =false;
12
+ var pwchangecode=false;
13
+ var resetpwcode=false;
14
+ var resetpwemail='';
15
+
16
+ if (window.location.hash) page = window.location.hash.replace('#','');
17
+
18
+
19
+
20
+ function hasFlash()
21
+ {
22
+ var f=swfobject.getFlashPlayerVersion();
23
+ if ((f.major >= 11) && (f.minor >= 5)) return true;
24
+ else if ((Ext.isLinux) && (f.major >= 11)) return true;
25
+ else return false;
26
+ }
27
+
28
+
29
+ function pagebrowse(p)
30
+ {
31
+ page = p;
32
+ init_page();
33
+ }
34
+
35
+ function logout()
36
+ {
37
+ u_logout();
38
+ document.location.href = '/';
39
+ }
40
+
41
+ function tmenu()
42
+ {
43
+ if (document.getElementById('top_pullmenu').style.display == '') document.getElementById('top_pullmenu').style.display='none';
44
+ else document.getElementById('top_pullmenu').style.display='';
45
+ }
46
+
47
+ function lmenu()
48
+ {
49
+ if (document.getElementById('language_menu').style.display == '') document.getElementById('language_menu').style.display='none';
50
+ else document.getElementById('language_menu').style.display='';
51
+ }
52
+
53
+
54
+ function hashchange()
55
+ {
56
+ var p = window.location.hash.replace('#','');
57
+ if (d) console.log(p);
58
+ pagebrowse(p);
59
+ }
60
+
61
+ function parsetopmenu()
62
+ {
63
+ var top = translate(pages['top']);
64
+ if (u_type) top = translate(pages['topl']);
65
+ return top;
66
+ }
67
+
68
+ function addmenuoptions()
69
+ {
70
+ if (document.getElementById('language_menu_options'))
71
+ {
72
+ var lc=0;
73
+ for (var lng in languages) if (languages[lng].length > 0) lc++;
74
+ var tl = lc;
75
+ lc = Math.ceil(lc/4);
76
+
77
+ var m = '<div class="nlanguage-txt-block">';
78
+ var i=1;
79
+ var x=1;
80
+ for (var lng in languages)
81
+ {
82
+ if (languages[lng].length > 0)
83
+ {
84
+ m += '<a href="javascript:setlang(\'' + lng + '\');" class="nlanguage-lnk"><span class="nlanguage-tooltip"> <span class="nlanguage-tooltip-bg"> <span class="nlanguage-tooltip-main"> ' + ln2[lng] + '</span></span></span>' + ln[lng] + '</a><div class="clear"></div>';
85
+
86
+ if ((lc*x == i) && (i !== tl))
87
+ {
88
+ m+='</div><div class="nlanguage-txt-block">';
89
+ x++;
90
+ }
91
+ i++;
92
+ }
93
+ }
94
+ m+='</div><div class="clear"></div>';
95
+ document.getElementById('language_menu_options').innerHTML = m;
96
+ document.getElementById('language_menu_selected').innerHTML = ln[lang].replace('Brasil','BR');
97
+ }
98
+ }
99
+
100
+
101
+ function setlang(lang)
102
+ {
103
+ if (downloading || ul_uploading)
104
+ {
105
+ alert(l[375]);
106
+ return false;
107
+ }
108
+ localStorage.lang = lang;
109
+ window.location.reload();
110
+ }
111
+
112
+ function parsepage(pagehtml)
113
+ {
114
+ pagehtml = translate(pagehtml);
115
+ pagehtml = pagehtml.replace(/{staticpath}/g,staticpath);
116
+
117
+ var top = parsetopmenu();
118
+
119
+ document.getElementById('topmenufm').innerHTML ='';
120
+ document.getElementById('topmenufm').style.display='none';
121
+ document.getElementById('fmholder').style.display='none';
122
+
123
+ if (page == 'start')
124
+ {
125
+ document.getElementById('bodyel').className = 'start-page';
126
+ }
127
+ else
128
+ {
129
+ document.getElementById('bodyel').className = 'bottom-pages';
130
+ }
131
+
132
+ document.getElementById('pageholder').style.display='';
133
+ document.getElementById('pageholder').innerHTML = translate(top) + pagehtml + translate(pages['bottom']);
134
+
135
+
136
+ addmenuoptions();
137
+
138
+
139
+ $j('#menu_hover').tooltip({ position: "bottom center"});
140
+ $j('#language_hover').tooltip({ position: "bottom center"});
141
+
142
+ if (u_type === 0)
143
+ {
144
+ document.getElementById('menu_login').style.display='none';
145
+ document.getElementById('menu_abort').style.display='';
146
+ }
147
+
148
+
149
+ if ((page == 'developers') && (Ext.userAgent.toLowerCase().indexOf('chrome') > 0))
150
+ {
151
+ $('html')[0].style.height = 'auto';
152
+ $('html')[0].style.overflow = 'auto';
153
+ }
154
+ else
155
+ {
156
+ $('html')[0].style.height = '100%';
157
+ $('html')[0].style.overflow = 'hidden';
158
+ }
159
+
160
+ if ($(".top-head")) $(".top-head")[0].scrollIntoView();
161
+
162
+ $j('#ribon_hover').tooltip({ position: "bottom center" });
163
+ }
164
+
165
+ function init_page_fm()
166
+ {
167
+ if (d) console.log('init_page_fm()');
168
+ if (d) console.log(extjsloaded);
169
+ document.getElementById('bodyel').className = '';
170
+ if (!extjsloaded)
171
+ {
172
+ if (d) console.log('Ext not ready.');
173
+ setTimeout("init_page_fm()",250);
174
+ }
175
+ else
176
+ {
177
+ $('html')[0].style.height = '100%';
178
+ $('html')[0].style.overflow = 'hidden';
179
+ if (!init_l)
180
+ {
181
+ document.getElementById('pageholder').style.display='none';
182
+ document.getElementById('pageholder').innerHTML = '';
183
+
184
+ if (init_anoupload)
185
+ {
186
+ if (ul_method)
187
+ {
188
+ document.getElementById('topmenu').innerHTML = '';
189
+ document.getElementById('start_button1').style.display='none';
190
+ document.getElementById('start_uploadbutton').style.width='1px';
191
+ document.getElementById('start_uploadbutton').style.height='1px';
192
+ }
193
+ else
194
+ {
195
+ document.getElementById('nstartholder').style.display='none';
196
+ document.getElementById('nstartholder').innerHTML = '';
197
+ }
198
+ }
199
+ else
200
+ {
201
+ document.getElementById('nstartholder').style.display='none';
202
+ document.getElementById('nstartholder').innerHTML = '';
203
+ }
204
+ }
205
+ document.getElementById('topmenufm').innerHTML = parsetopmenu();
206
+ addmenuoptions();
207
+ $j('#menu_hover').tooltip({ position: "bottom center"});
208
+ $j('#language_hover').tooltip({position: "bottom center"});
209
+ if (!init_l) document.getElementById('fmholder').style.display='';
210
+ if (!fmstarted) startfm();
211
+ else
212
+ {
213
+ document.getElementById('topmenufm').style.display='';
214
+ mainpanel.doComponentLayout();
215
+ }
216
+ }
217
+ }
218
+
219
+
220
+
221
+ function is_fm()
222
+ {
223
+ if ((((u_type !== false) && (page == '')) || ((u_type !== false) && (page == 'fm')) || ((u_type !== false) && (page == 'start')))) return true;
224
+ else return false;
225
+ }
226
+
227
+ var dlid=false;
228
+ var dlkey=false;
229
+ var cn_url=false;
230
+ var init_l=true;
231
+
232
+
233
+ function init_page()
234
+ {
235
+ if (extjsloaded && u_checked)
236
+ {
237
+ subpage='';
238
+ if (d) console.log(page);
239
+
240
+ if (dl_legacy_ie) document.getElementById('startswfdiv').innerHTML = '<object data="/downloader.swf" id="start_downloaderswf" type="application/x-shockwave-flash" height="0" width="0"><param name="wmode" value="transparent"><param value="always" name="allowscriptaccess"><param value="all" name="allowNetworking"></object>';
241
+
242
+ if (d) console.log(page);
243
+
244
+ page = page.replace('%21','!');
245
+
246
+ if ((page.substr(0,1) == '!') && (page.length > 1))
247
+ {
248
+ dlkey=false;
249
+ var ar = page.substr(1,page.length-1).split('!');
250
+ if (d) console.log(ar);
251
+ if (ar[0]) dlid = ar[0].replace(/[^a-z^A-Z^0-9^_^-]/g,"");
252
+ if (ar[1]) dlkey = ar[1].replace(/[^a-z^A-Z^0-9^_^-]/g,"");
253
+ }
254
+
255
+ confirmcode = false;
256
+ pwchangecode = false;
257
+
258
+ if ((page.substr(0,2) == 'fm') && (page.length > 2))
259
+ {
260
+ fmdirid = page.substr(2,page.length-2).replace(/[^a-z^A-Z^0-9^_^-]/g,"");
261
+ page = 'fm';
262
+ }
263
+
264
+ if (!is_fm())
265
+ {
266
+ init_l=false;
267
+ document.getElementById('loading').style.display='none';
268
+ }
269
+
270
+ if (page.substr(0,7) == 'confirm')
271
+ {
272
+ confirmcode = page.replace("confirm","");
273
+ page = 'confirm';
274
+ }
275
+
276
+
277
+ if (page.substr(0,7) == 'pwreset')
278
+ {
279
+ resetpwcode = page.replace("pwreset","");
280
+ page = 'resetpassword';
281
+ }
282
+
283
+ if (page.substr(0,5) == 'newpw')
284
+ {
285
+ pwchangecode = page.replace("newpw","");
286
+ page = 'newpw';
287
+ }
288
+
289
+ if (page.substr(0,4) == 'help')
290
+ {
291
+ if (page.length > 4) subpage = page.substr(5,page.length-1)
292
+ page = 'help';
293
+ }
294
+
295
+ if (page.substr(0,15) == 'copyrightnotice')
296
+ {
297
+ if (page.length > 15) cn_url = base64urldecode(page.substr(15,page.length-1));
298
+ page = 'copyrightnotice';
299
+ }
300
+
301
+ if (!b_u)
302
+ {
303
+ try { localStorage.test = '1'; }
304
+ catch(err) { page = 'chrome'; chrome_msg = 'an essential browser feature seems disabled and prevents you from accessing MEGA.<br>Please make sure your browser allows local data to be set.'; }
305
+ }
306
+ if ((page.substr(0,4) == 'blog') && (page.length > 4))
307
+ {
308
+ blogid = page.substr(5,page.length-2);
309
+ page = 'blogarticle';
310
+ }
311
+
312
+ if (page.substr(0,6) == 'signup')
313
+ {
314
+ signupcode = subpage = page.substr(6,page.length-1);
315
+ var req =
316
+ {
317
+ a: 'uv',
318
+ c: signupcode
319
+ };
320
+ api_req([req],
321
+ {
322
+ callback : function (json,params)
323
+ {
324
+ if ((typeof json[0] == 'number') && (json[0] < 0))
325
+ {
326
+ alert('Invalid signup code!');
327
+ parsepage(pages['nstart']);
328
+ init_nstart();
329
+ }
330
+ else
331
+ {
332
+ parsepage(pages['register']);
333
+ init_register();
334
+ register_signup(json[0]);
335
+ }
336
+ }
337
+ });
338
+ }
339
+ else if (page == 'newpw')
340
+ {
341
+ setpwset(pwchangecode,{callback: function(res)
342
+ {
343
+ loadingDialog.hide();
344
+ if ((res[0] == EACCESS) || (res[0] == 0)) alert(l[727]);
345
+ else if(res[0] == EEXPIRED) alert(l[728]);
346
+ else if(res[0] == ENOENT) alert(l[729]);
347
+ else alert(l[200]);
348
+ if (u_type == 3)
349
+ {
350
+ page = 'account';
351
+ parsepage(pages['account']);
352
+ load_acc();
353
+ }
354
+ else
355
+ {
356
+ page = 'login';
357
+ parsepage(pages['login']);
358
+ init_login();
359
+ }
360
+ }});
361
+ }
362
+ else if (page == 'confirm')
363
+ {
364
+ var ctx =
365
+ {
366
+ signupcodeok: function(email,name)
367
+ {
368
+ confirmok=true;
369
+ page = 'login';
370
+ parsepage(pages['login']);
371
+ login_txt = l[378];
372
+ init_login();
373
+ document.getElementById('login_email').value = email;
374
+ document.getElementById('login_title').innerHTML = 'Confirm';
375
+ document.getElementById('login_button').innerHTML = 'Confirm';
376
+ document.getElementById('login_password').value = '';
377
+ document.getElementById('login_password').focus();
378
+ },
379
+ signupcodebad: function(res)
380
+ {
381
+ if (res == EINCOMPLETE) alert(l[703]);
382
+ else if (res == ENOENT) login_txt = l[704];
383
+ else alert(l[705] + res);
384
+ page = 'login';
385
+ parsepage(pages['login']);
386
+ init_login();
387
+ }
388
+ }
389
+ verifysignupcode(confirmcode,ctx);
390
+ }
391
+ else if (u_type == 2)
392
+ {
393
+ parsepage(pages['key']);
394
+ if (typeof u_privk == 'undefined')
395
+ {
396
+ genkey();
397
+ }
398
+ }
399
+ else if (page == 'login')
400
+ {
401
+ parsepage(pages['login']);
402
+ init_login();
403
+ }
404
+ else if (page == 'resetpassword')
405
+ {
406
+ api_req([{a: 'upkc', uk: resetpwcode}],
407
+ {
408
+ callback : function (json,params)
409
+ {
410
+ if (typeof json[0] == 'string')
411
+ {
412
+
413
+ resetpwemail = json[0];
414
+ parsepage(pages['forgotpassword']);
415
+ fp_init(true);
416
+ }
417
+ else
418
+ {
419
+ if (json[0] == EEXPIRED) alert(l[743]);
420
+ else alert(l[744]);
421
+ parsepage(pages['forgotpassword']);
422
+ fp_init(false);
423
+ }
424
+ }
425
+ });
426
+ }
427
+ else if (page == 'forgotpassword')
428
+ {
429
+ parsepage(pages['forgotpassword']);
430
+ fp_init(false);
431
+ }
432
+ else if (page == 'investors')
433
+ {
434
+ parsepage(pages['investors']);
435
+ }
436
+ else if (page == 'register')
437
+ {
438
+ parsepage(pages['register']);
439
+ init_register();
440
+ }
441
+ else if (page == 'chrome')
442
+ {
443
+ parsepage(pages['chrome']);
444
+ init_chrome();
445
+ }
446
+ else if (page == 'key')
447
+ {
448
+ parsepage(pages['key']);
449
+ }
450
+ else if (page == 'contact')
451
+ {
452
+ parsepage(pages['contact']);
453
+ }
454
+ else if ((page == 'help') && (subpage != ''))
455
+ {
456
+ parsepage(pages['help']);
457
+ init_helpsub();
458
+ }
459
+ else if (page == 'help')
460
+ {
461
+ parsepage(pages['help']);
462
+ init_help();
463
+ }
464
+ else if (page == 'privacy')
465
+ {
466
+ parsepage(pages['privacy']);
467
+ }
468
+ else if (page == 'privacycompany')
469
+ {
470
+ parsepage(pages['privacycompany']);
471
+ privacycompany_init();
472
+ }
473
+ else if (page == 'developers')
474
+ {
475
+ parsepage(pages['developers']);
476
+ dev_init();
477
+ }
478
+ else if (page == 'about')
479
+ {
480
+ parsepage(pages['about']);
481
+ }
482
+ else if (page == 'terms')
483
+ {
484
+ parsepage(pages['terms']);
485
+ }
486
+ else if (page == 'resellerintro')
487
+ {
488
+ parsepage(pages['resellerintro']);
489
+ }
490
+ else if (page == 'download')
491
+ {
492
+ parsepage(pages['download']);
493
+ }
494
+ else if (page == 'blog')
495
+ {
496
+ parsepage(pages['blog']);
497
+ init_blog();
498
+ }
499
+ else if (page == 'blogarticle')
500
+ {
501
+ parsepage(pages['blogarticle']);
502
+ init_blogarticle();
503
+ }
504
+ else if (page == 'copyright')
505
+ {
506
+ parsepage(pages['copyright']);
507
+ }
508
+ else if (page == 'resellers')
509
+ {
510
+ parsepage(pages['resellers']);
511
+ }
512
+ else if (page == 'pro')
513
+ {
514
+ parsepage(pages['pro']);
515
+ init_pro();
516
+ }
517
+ else if (page == 'hosting')
518
+ {
519
+ parsepage(pages['hosting']);
520
+ }
521
+ else if ((page == 'resellerapp') && (!u_type))
522
+ {
523
+ login_txt = l[376];
524
+ parsepage(pages['login']);
525
+ init_login();
526
+ }
527
+ else if (page == 'resellerapp')
528
+ {
529
+ parsepage(pages['resellerapp']);
530
+ init_resellerapp();
531
+ }
532
+ else if (page == 'flash')
533
+ {
534
+ parsepage(pages['flash']);
535
+ }
536
+ else if (page == 'takedown')
537
+ {
538
+ parsepage(pages['takedown']);
539
+ init_takedown();
540
+ }
541
+ else if (page == 'takedown2')
542
+ {
543
+ parsepage(pages['takedown2']);
544
+ }
545
+ else if (page == 'done')
546
+ {
547
+ if (!done_text1)
548
+ {
549
+ done_text1 = 'Test123';
550
+ done_text2 = 'Test1234';
551
+ }
552
+ parsepage(pages['done']);
553
+ init_done();
554
+ }
555
+ else if ((page.substr(0,7) == 'account') && (!u_type))
556
+ {
557
+ if (u_type == false)
558
+ {
559
+ login_txt = l[376];
560
+ parsepage(pages['login']);
561
+ init_login();
562
+ }
563
+ else
564
+ {
565
+ parsepage(pages['register']);
566
+ init_register();
567
+ }
568
+ }
569
+ else if (page.substr(0,7) == 'account')
570
+ {
571
+ parsepage(pages['account']);
572
+ load_acc();
573
+ }
574
+ else if (page == 'copyrightnotice')
575
+ {
576
+ parsepage(pages['copyrightnotice']);
577
+ init_cn();
578
+ }
579
+ else if (dlid)
580
+ {
581
+ if (d) console.log(dlid);
582
+ if (d) console.log(dlkey);
583
+ page = 'download';
584
+
585
+ parsepage(pages['download']);
586
+ dlinfo(dlid,dlkey,false);
587
+ }
588
+ else if (is_fm())
589
+ {
590
+ if ((fmdirid) && (fmstarted))
591
+ {
592
+ if (currentdirid != fmdirid) opendirectory(fmdirid);
593
+ }
594
+ init_page_fm();
595
+ }
596
+ else if (pages[page])
597
+ {
598
+ parsepage(pages[page]);
599
+ if (init_f[page]) init_f[page]();
600
+ }
601
+ else
602
+ {
603
+ page = 'start';
604
+ parsepage(pages['nstart']);
605
+ init_nstart();
606
+ }
607
+ //setTimeout("document.title = 'MEGA';",200);
608
+ }
609
+ else
610
+ {
611
+ if (d) console.log(extjsloaded);
612
+ if (d) console.log(u_checked);
613
+ }
614
+ }
615
+
616
+
617
+
618
+
619
+
620
+
621
+
622
+ if (ie9)
623
+ {
624
+ function checktitle()
625
+ {
626
+ if (document.title !== 'MEGA') document.title = 'MEGA';
627
+ setTimeout("checktitle()",500);
628
+ }
629
+ setTimeout("checktitle()",1000);
630
+ }
631
+
632
+
633
+ window.onhashchange = function()
634
+ {
635
+ var tpage = document.location.hash;
636
+ if ((downloading || ul_uploading))
637
+ {
638
+ if ((is_fm()) && (document.location.hash.substr(0,3) == '#fm')) return false;
639
+ var h = document.location.hash;
640
+ document.location.hash = hash;
641
+ alert(l[375]);
642
+ return false;
643
+ }
644
+ if ((document.getElementById('overlay').style.display == '') && (page != 'fm'))
645
+ {
646
+ document.location.hash = hash;
647
+ return false;
648
+ }
649
+ if (ext_loading_dialog)
650
+ {
651
+ document.location.hash = hash;
652
+ return false;
653
+ }
654
+ dlid=false;
655
+ hash = window.location.hash;
656
+ if (window.location.hash) page = window.location.hash.replace('#','');
657
+ else page = '';
658
+ init_page();
659
+ }
660
+
661
+
662
+
663
+ window.onbeforeunload = function ()
664
+ {
665
+ if ((downloading) || (ul_uploading)) return l[377];
666
+ }