Linterna Mágica config file


SUBMITTED BY: Guest

DATE: July 3, 2013, 10:47 a.m.

FORMAT: Text only

SIZE: 295.6 kB

HITS: 2455

  1. // @licstart The following is the entire license notice for the
  2. // JavaScript code in this page (or file).
  3. //
  4. // This file is part of Linterna Mágica
  5. //
  6. // Copyright (C) 2010, 2011, 2012, 2013 Ivaylo Valkov <ivaylo@e-valkov.org>
  7. // Copyright (C) 2010, 2011, 2012, 2013 Anton Katsarov <anton@katsarov.org>
  8. //
  9. // The JavaScript code in this page (or file) is free software: you
  10. // can redistribute it and/or modify it under the terms of the GNU
  11. // General Public License (GNU GPL) as published by the Free Software
  12. // Foundation, either version 3 of the License, or (at your option)
  13. // any later version. The code is distributed WITHOUT ANY WARRANTY
  14. // without even the implied warranty of MERCHANTABILITY or FITNESS
  15. // FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
  16. //
  17. // As additional permission under GNU GPL version 3 section 7, you
  18. // may distribute non-source (e.g., minimized or compacted) forms of
  19. // that code without the copy of the GNU GPL normally required by
  20. // section 4, provided you include this license notice and a URL
  21. // through which recipients can access the Corresponding Source.
  22. //
  23. // @licend The above is the entire license notice for the JavaScript
  24. // code in this page (or file).
  25. //
  26. // @source http://linterna-magica.nongnu.org
  27. // Linterna Mágica Greasemonkey script
  28. // Version 0.0.13-2
  29. //
  30. // This script searches for flash objects with video links in web sites
  31. // and replaces them with objects playable with browser video
  32. // plugin (totem/vlc/xine/gecko-mediaplayer).
  33. // ==UserScript==
  34. // @name Linterna Mágica 0.0.13-2
  35. // @namespace Linterna Mágica
  36. // @description Watch video on the web in a brand new way: You don't need a glint, the magic lantern is ignited!
  37. // @include http://*
  38. // @include https://*
  39. // @grant none
  40. // ==/UserScript==
  41. (function(){
  42. if (typeof(unsafeWindow) == "object")
  43. {
  44. (function inject_in_page()
  45. {
  46. var userscript_data = inject_in_page.caller.toString();
  47. var script = document.createElement("script");
  48. script.setAttribute("type", "text/javascript");
  49. script.setAttribute("src",
  50. "data:text/javascript;charset=UTF-8;base64,"+
  51. btoa("("+userscript_data+")();"));
  52. var inject_data = function()
  53. {
  54. var head = document.getElementsByTagName("head")[0];
  55. head.appendChild(script);
  56. head.removeChild(script);
  57. }
  58. setTimeout(inject_data, 0);
  59. })();
  60. throw "Linterna Mágica left the Greasemonkey scope!"+
  61. " Script was injected in page.";
  62. }
  63. // This object initializes the LinternaMagica object
  64. var linterna_magica_options =
  65. {
  66. // Print debugging information
  67. // log level 0,1, 2, 3, 4, 5
  68. "debug": 0,
  69. // Where to print the debugging information
  70. // web: Print messages in the web page (default)
  71. // console: Use the debugging console of the browser
  72. "log_to": "web",
  73. // Should the web logger be automatically expanded by default
  74. // false: No (default)
  75. // true: Yes
  76. "web_log_expand": false,
  77. // Should Linterna Mágica automatically check and notify for
  78. // updates.
  79. // <time><type>: Check at interval. (default 3w)
  80. // <time>: number
  81. // <type>: d/w/m/y
  82. // d = day, w = week, m = month, y = year
  83. // Linterna Mágica will check for updates also at the first
  84. // and at the second day after the exact match that is
  85. // configured.
  86. // off/disabled/no/never/false/0: Do not check
  87. "updates": "1w",
  88. // This options determines how opbject found by Linterna Mágica
  89. // should be played. You can set multiple values separated with
  90. // ",", without the quotes. Default value is "html5, self,
  91. // plugin".
  92. // self: Replace the flash object
  93. // plugin: Add link after the swf object that replaces it
  94. // html5: Add link after the HTMl5 player (if a site provides
  95. // one) that replaces it
  96. // Default value "html5, self, plugin"
  97. "priority": "self, html5, plugin",
  98. // Automatically start the video playback
  99. // enabled: Auto start the clip (default)
  100. // disabled: Do not start the clip
  101. "autostart": "off",
  102. // Web controls or video plugin controls
  103. // self: Use controls provided by Linterna Mágica (default)
  104. // plugin: Use controls provided by the video plugin
  105. "controls": "self",
  106. // Interface language
  107. // auto: Use the language of the browser interface if
  108. // translation is available (default)
  109. // <lc>_<CC>: Set language to lc_CC, where
  110. // <lc>: language code (lowercase)
  111. // <CC>: country code (uppercase)
  112. // Example: en_US, en_UK, bg_BG
  113. "locale": "auto",
  114. // The way cookies are proccessed. The explanation is too long
  115. // to fit here. Please ***read*** "A note on cookies", in the
  116. // HELP file.
  117. // delete: Just delete the cookies.
  118. // restore: Extract and restore cookies.
  119. "cookies": "restore",
  120. // Timeout before background processing (XHR) starts in
  121. // milliseconds. 1 s = 1000 ms. If you have problems increase the
  122. // value.
  123. // off/no/disabled/false/0: Don't wait (defult)
  124. // <integer>: Wait for <integer> milliseconds.
  125. "wait_xhr": "off",
  126. // Preferred video quality.
  127. //
  128. // low/medium/high: Automatically select the link for
  129. // low/medium/high from the list of links (default low)
  130. //
  131. // <number>: Start the <number> link from the list. If not
  132. // available the highest quality. Use "1" for lowest quality.
  133. //
  134. // <number>%: Start the link that corresponds to <number>
  135. // percent from the list. Float numbers are allowed - 34.56%,
  136. // 18,6%.
  137. "quality": "high",
  138. };
  139. // NO MINIMISATION ABOVE THIS LINE
  140. function LinternaMagica(params)
  141. {
  142. if (window.top != window.self)
  143. {
  144. this.log("LinternaMagica.constructor:\n"+
  145. "Skipping (i)frame with address: "+
  146. window.location,1);
  147. return null;
  148. }
  149. this.set_locale(params.locale);
  150. this.debug_level = parseInt(params.debug);
  151. this.set_web_log_expand(params.web_log_expand);
  152. if (this.debug_level && params.log_to == "web")
  153. {
  154. var logger = this.create_web_logger();
  155. this.log_to = "web";
  156. if (!logger)
  157. {
  158. this.log_to = "console";
  159. }
  160. var body = document.getElementsByTagName("body")[0];
  161. if (!body)
  162. {
  163. this.log_to = "console";
  164. }
  165. else
  166. {
  167. body.appendChild(logger);
  168. }
  169. }
  170. else
  171. {
  172. this.log_to = "console";
  173. }
  174. var self = this;
  175. var val = this.call_site_function_at_position.apply(self,[
  176. "before_options_init",
  177. window.location.hostname]);
  178. if (!val)
  179. {
  180. return null;
  181. }
  182. this.check_flash_plugin();
  183. this.set_priority(params.priority);
  184. this.set_autostart(params.autostart);
  185. this.set_controls(params.controls);
  186. this.set_cookies(params.cookies);
  187. this.set_wait_xhr(params.wait_xhr);
  188. this.set_check_updates(params.updates);
  189. this.set_hd_link_quality(params.quality);
  190. this.updates_data = null;
  191. this.check_for_updates();
  192. this.create_stylesheet();
  193. this.found_flash_video_objects = -1;
  194. this.requested_ids =new Object();
  195. if (this.controls)
  196. {
  197. this.player_timers = new Array();
  198. this.volume_slider_timers = new Array();
  199. }
  200. var position_function = null ;
  201. if (this.plugin_is_installed)
  202. {
  203. position_function = "flash_plugin_installed";
  204. }
  205. else
  206. {
  207. position_function = "no_flash_plugin_installed";
  208. }
  209. var self = this;
  210. var val = this.call_site_function_at_position.apply(self,[
  211. position_function,
  212. window.location.hostname]);
  213. if (!val)
  214. {
  215. return null;
  216. }
  217. this.log("LinternaMagica.constructor:\n"+
  218. "Adding DOM event listener for inserted node.",1);
  219. var self = this;
  220. var body = document.getElementsByTagName("body")[0];
  221. if (!body)
  222. return;
  223. this.inserted_node_listener = function(ev)
  224. {
  225. var el = this;
  226. self.if_node_is_inserted.
  227. apply(self, [ev, el]);
  228. };
  229. body.addEventListener("DOMNodeInserted",
  230. this.inserted_node_listener, true);
  231. this.log("LinternaMagica.constructor:\n"+
  232. "Checking DOM for objects",1);
  233. this.extract_objects_from_dom(document);
  234. }
  235. LinternaMagica.prototype = new Object ();
  236. LinternaMagica.constructor = LinternaMagica;
  237. LinternaMagica.prototype.version = "0.0.13-2";
  238. LinternaMagica.prototype.name = "Linterna Mágica";
  239. LinternaMagica.prototype.release_date = "1364800275";
  240. LinternaMagica.prototype.updates_page =
  241. "http://linterna-magica.nongnu.org/downloads/updates.js";
  242. LinternaMagica.prototype.description = function()
  243. {
  244. return (
  245. this._("Watch video on the web ")+
  246. this._("in a brand new way: ")+
  247. this._("You don't need a glint, ")+
  248. this._("the magic lantern is ignited!")
  249. );
  250. }
  251. LinternaMagica.prototype.license = function()
  252. {
  253. return (
  254. this._("This program is free software; ")+
  255. this._("you can redistribute it and/or ")+
  256. this._("modify it under the terms of the ")+
  257. this._("GNU General Public License (GNU GPL)")+
  258. this._(" version 3 (or later). ")+
  259. this._("A copy of the license can be downloaded from ")
  260. );
  261. }
  262. LinternaMagica.prototype.absolute_min_height = 212;
  263. LinternaMagica.prototype.absolute_min_width = 300;
  264. LinternaMagica.prototype.min_width = 400;
  265. LinternaMagica.prototype.min_remote_object_height = 169;
  266. LinternaMagica.prototype.license_link =
  267. "https://www.gnu.org/licenses/gpl.html";
  268. LinternaMagica.prototype.homepage =
  269. "http://linterna-magica.nongnu.org";
  270. LinternaMagica.prototype.savannah_page =
  271. "https://savannah.nongnu.org/projects/linterna-magica";
  272. LinternaMagica.prototype.bug_report_link =
  273. "https://sv.nongnu.org/bugs/?func=additem&group=linterna-magica";
  274. LinternaMagica.prototype.microblog_link =
  275. "https://identi.ca/group/linternamagica";
  276. LinternaMagica.prototype.copyrights = new Array();
  277. LinternaMagica.prototype.copyrights.push("Copyright (C) 2010, 2011, 2012,"+
  278. " 2013 Ivaylo Valkov <ivaylo@e-valkov.org>");
  279. LinternaMagica.prototype.copyrights.push("Copyright (C) 2010, 2011, 2012,"+
  280. " 2013 Anton Katsarov <anton@katsarov.org>");
  281. LinternaMagica.prototype.player = new Object();
  282. LinternaMagica.prototype.player.init = function(id)
  283. {
  284. this.player.set_player_name.apply(this,[id]);
  285. var self = this;
  286. var started_clip = this.find_started_clip();
  287. if (this.autostart &&
  288. (started_clip == null || started_clip == id))
  289. {
  290. this.player_timers[id] =
  291. setInterval(function()
  292. {
  293. self.ticker.apply(self,[id]);
  294. }, 500);
  295. }
  296. var volume_interval_function = function()
  297. {
  298. var knob =
  299. document.getElementById("linterna-magica-controls-"+
  300. "volume-slider-knob-"+id);
  301. if (!knob)
  302. {
  303. return null;
  304. }
  305. var slider = knob.parentNode;
  306. var vol = null;
  307. var video_object = self.get_video_object(id);
  308. var player_name = video_object.getAttribute("player_name");
  309. if (/gecko/i.test(player_name)
  310. || /quicktime plug-in/i.test(player_name))
  311. {
  312. try
  313. {
  314. vol = video_object.GetVolume();
  315. if (/quicktime/i.test(player_name))
  316. {
  317. vol = parseInt(vol * 100/255);
  318. }
  319. }
  320. catch(e)
  321. {
  322. }
  323. }
  324. else if (/vlc/i.test(player_name))
  325. {
  326. if (video_object.audio)
  327. {
  328. vol =
  329. video_object.audio.
  330. volume;
  331. }
  332. }
  333. if (vol)
  334. {
  335. var pos =
  336. parseInt((slider.clientWidth*vol/100) -
  337. knob.clientWidth-knob.clientWidth/2);
  338. knob.style.setProperty("left", pos+"px", "important");
  339. clearInterval(volume_interval);
  340. }
  341. }
  342. var volume_interval =
  343. setInterval(volume_interval_function, 800);
  344. }
  345. LinternaMagica.prototype.languages = new Object();
  346. LinternaMagica.prototype.languages["C"] =
  347. {
  348. __direction: "ltr",
  349. __translators: null,
  350. };
  351. LinternaMagica.prototype.static_strings = function()
  352. {
  353. this.N_("Jan");
  354. this.N_("Feb");
  355. this.N_("Mar");
  356. this.N_("Apr");
  357. this.N_("May");
  358. this.N_("Jun");
  359. this.N_("Jul");
  360. this.N_("Aug");
  361. this.N_("Sep");
  362. this.N_("Oct");
  363. this.N_("Noe");
  364. this.N_("Dec");
  365. this.N_("__translators");
  366. this.N_("__direction");
  367. };
  368. LinternaMagica.prototype.set_cookies = function(cookies)
  369. {
  370. var set_cookies_to = cookies ? cookies :"";
  371. if (!cookies ||
  372. (!/delete/i.test(cookies) &&
  373. !/restore/i.test(cookies)))
  374. {
  375. set_cookies_to = "delete";
  376. }
  377. this.process_cookies = set_cookies_to;
  378. }
  379. LinternaMagica.prototype.set_priority = function(priority)
  380. {
  381. var std_priority = new Object();
  382. std_priority.html5 = 13;
  383. std_priority.self = 12;
  384. std_priority.plugin = 11;
  385. std_priority.options = 3;
  386. if (!priority ||
  387. typeof(priority) !== "string")
  388. {
  389. priority = "html5,self,plugin";
  390. }
  391. priority = priority.replace(/\s*/g,"");
  392. var set_priority_to = priority.split(/,/) ;
  393. var t = new Object();
  394. t.options = 0;
  395. for (var i=0, l=set_priority_to.length; i< l; i++)
  396. {
  397. var o = set_priority_to[i];
  398. if (/plugin/i.test(o) || /self/i.test(o) || /html5/i.test(o))
  399. {
  400. t[o] = (l+10) - i;
  401. t.options ++;
  402. }
  403. }
  404. if (!t.options)
  405. {
  406. set_priority_to = std_priority;
  407. }
  408. else
  409. {
  410. set_priority_to = new Object();
  411. set_priority_to.html5 = t.html5 ? t.html5 : (std_priority.html5 -10);
  412. set_priority_to.self = t.self ? t.self : (std_priority.self - 10);
  413. set_priority_to.plugin = t.plugin ? t.plugin : (std_priority.plugin - 10);
  414. set_priority_to.options = 3;
  415. }
  416. if (!this.plugin_is_installed &&
  417. (set_priority_to.plugin > set_priority_to.self))
  418. {
  419. t = set_priority_to.self;
  420. set_priority_to.self = set_priority_to.plugin;
  421. set_priority_to.plugin = t;
  422. }
  423. this.priority = set_priority_to;
  424. }
  425. LinternaMagica.prototype.set_controls = function(controls)
  426. {
  427. var set_controls_to;
  428. if (!controls ||
  429. (!/plugin/i.test(controls) &&
  430. !/self/i.test(controls)))
  431. {
  432. set_controls_to = false;
  433. }
  434. if (/plugin/i.test(controls))
  435. {
  436. set_controls_to=false;
  437. }
  438. if (/self/i.test(controls))
  439. {
  440. set_controls_to=true;
  441. }
  442. this.controls = set_controls_to;
  443. }
  444. LinternaMagica.prototype.set_autostart = function(autostart)
  445. {
  446. var start = autostart ? autostart : true;
  447. if (!autostart ||
  448. (!/enabled/i.test(autostart) &&
  449. !/disabled/i.test(autostart) &&
  450. !/on/i.test(autostart) &&
  451. !/off/i.test(autostart) &&
  452. !/true/i.test(autostart) &&
  453. !/false/i.test(autostart)))
  454. {
  455. start = false;
  456. }
  457. if (/enabled/i.test(autostart) ||
  458. /on/i.test(autostart) ||
  459. /true/i.test(autostart))
  460. {
  461. start = true;
  462. }
  463. if (/disabled/i.test(autostart)
  464. || /off/i.test(autostart)
  465. || /false/i.test(autostart))
  466. {
  467. start = false;
  468. }
  469. this.autostart = start;
  470. }
  471. LinternaMagica.prototype.set_wait_xhr = function(wait)
  472. {
  473. var set_wait_to = wait ? wait :"";
  474. if (!wait ||
  475. (typeof(wait) != "number" &&
  476. !/[0-9]+/i.test(wait) &&
  477. !/false/i.test(wait) &&
  478. !/no/i.test(wait) &&
  479. !/off/i.test(wait) &&
  480. !/disabled/i.test(wait)))
  481. {
  482. set_wait_to = 1500;
  483. }
  484. if ( /false/i.test(wait) ||
  485. /no/i.test(wait) ||
  486. /off/i.test(wait) ||
  487. /disabled/i.test(wait))
  488. {
  489. set_wait_to = 0;
  490. }
  491. if (/[0-9]+/i.test(wait))
  492. {
  493. set_wait_to = parseInt(wait);
  494. }
  495. this.wait_xhr = set_wait_to;
  496. }
  497. LinternaMagica.prototype.set_check_updates = function(updates)
  498. {
  499. var set_updates_to = updates ? updates : "";
  500. if (!updates ||
  501. (!/^[0-9]+(d|w|m||y)$/i.test(updates) &&
  502. !/false/i.test(updates) &&
  503. !/no/i.test(updates) &&
  504. !/off/i.test(updates) &&
  505. !/disabled/i.test(updates) &&
  506. !/never/i.test(updates)))
  507. {
  508. set_updates_to = "3w";
  509. }
  510. if ((/false/i.test(updates) ||
  511. /no/i.test(updates) ||
  512. /off/i.test(updates) ||
  513. /disabled/i.test(updates) ||
  514. /never/i.test(updates)) ||
  515. updates >= 0)
  516. {
  517. set_updates_to = -1;
  518. }
  519. this.updates = set_updates_to;
  520. }
  521. LinternaMagica.prototype.set_locale = function(locale)
  522. {
  523. this.set_env_lang();
  524. if (/auto/i.test(locale))
  525. {
  526. locale = this.env_lang;
  527. }
  528. if (/.*_.*/.test(locale))
  529. {
  530. locale = locale.split(/_/);
  531. locale[locale.length-1] =
  532. locale[locale.length-1].toUpperCase();
  533. locale[0] =
  534. locale[0].toLowerCase();
  535. locale = locale.join("_");
  536. }
  537. var set_lang_to = locale ? locale : this.env_lang;
  538. if (!set_lang_to ||
  539. !/[a-z][a-z]_[A-Z][A-Z]/i.test(set_lang_to) ||
  540. this.languages[set_lang_to] == undefined)
  541. {
  542. set_lang_to = "C";
  543. }
  544. this.lang = set_lang_to;
  545. }
  546. LinternaMagica.prototype.set_hd_link_quality = function(quality)
  547. {
  548. var set_quality_to = quality ? quality : "low";
  549. var err = null;
  550. if (!/^(low|medium|high|[0-9]+|[0-9.,]+%)$/i.test(set_quality_to) ||
  551. /^low$/i.test(set_quality_to))
  552. {
  553. set_quality_to = -0.33;
  554. }
  555. else if (/^medium$/i.test(set_quality_to))
  556. {
  557. set_quality_to = -0.66;
  558. }
  559. else if (/^high$/i.test(set_quality_to))
  560. {
  561. set_quality_to = -1;
  562. }
  563. else if (/^[0-9]+$/i.test(set_quality_to))
  564. {
  565. set_quality_to = parseInt(set_quality_to);
  566. if (!set_quality_to)
  567. {
  568. err = 1;
  569. }
  570. }
  571. else if (/^[0-9.,]+%$/i.test(set_quality_to))
  572. {
  573. set_quality_to = set_quality_to.replace(/,/g,".");
  574. set_quality_to = - parseFloat(set_quality_to)/100;
  575. if (isNaN(set_quality_to))
  576. {
  577. err = 1;
  578. }
  579. }
  580. if (err)
  581. {
  582. set_quality_to = -0.33;
  583. }
  584. this.preferred_hd_quality = set_quality_to;
  585. }
  586. LinternaMagica.prototype.set_web_log_expand = function(web_log_expand)
  587. {
  588. if (/true/i.test(web_log_expand))
  589. {
  590. web_log_expand = true;
  591. }
  592. else if (/false/i.test(web_log_expand))
  593. {
  594. web_log_expand = false;
  595. }
  596. this.web_log_expand = web_log_expand;
  597. }
  598. LinternaMagica.prototype.sites = new Object();
  599. LinternaMagica.prototype.sites.__before_options_init = function ()
  600. {
  601. return true;
  602. }
  603. LinternaMagica.prototype.sites.__no_flash_plugin_installed = function()
  604. {
  605. this.log("LinternaMagica.sites.__no_flash_plugin_installed:\n"+
  606. "Examining scripts.", 4);
  607. this.extract_objects_from_scripts();
  608. return true;
  609. }
  610. LinternaMagica.prototype.sites.__flash_plugin_installed = function()
  611. {
  612. return true;
  613. }
  614. LinternaMagica.prototype.sites.__set_cookies_domain = function()
  615. {
  616. return true;
  617. }
  618. LinternaMagica.prototype.sites.__process_cookies = function()
  619. {
  620. return true;
  621. }
  622. LinternaMagica.prototype.sites.__do_not_force_iframe_detection =
  623. function()
  624. {
  625. return true;
  626. }
  627. LinternaMagica.prototype.sites.__skip_video_id_extraction = function()
  628. {
  629. return true;
  630. }
  631. LinternaMagica.prototype.sites.__skip_xhr_if_video_id = function(object_data)
  632. {
  633. return true;
  634. }
  635. LinternaMagica.prototype.sites.__skip_link_extraction = function()
  636. {
  637. return true;
  638. }
  639. LinternaMagica.prototype.sites.__extract_hd_links_from_dom_if_link =
  640. function(data)
  641. {
  642. return true;
  643. }
  644. LinternaMagica.prototype.sites.__extract_hd_links_from_script_if_link =
  645. function()
  646. {
  647. return true;
  648. }
  649. LinternaMagica.prototype.sites.__skip_script_processing = function()
  650. {
  651. if (this.script_data.length >= 17408)
  652. {
  653. this.log("LinternaMagica.sites.__skip_script_processng:\n"+
  654. "Skipping script with size "+this.script_data.length,5);
  655. return false;
  656. }
  657. else
  658. {
  659. this.log("LinternaMagica.sites.__skip_script_processng:\n"+
  660. "Processing script with size "+this.script_data.length,5);
  661. }
  662. return true;
  663. }
  664. LinternaMagica.prototype.sites.__extract_object_from_script = function()
  665. {
  666. return true;
  667. }
  668. LinternaMagica.prototype.sites.__stop_if_one_extracted_object_from_script =
  669. function()
  670. {
  671. return true;
  672. }
  673. LinternaMagica.prototype.sites.__libswfobject_skip_video_id_extraction =
  674. function()
  675. {
  676. return true;
  677. }
  678. LinternaMagica.prototype.sites.__replace_extracted_object_from_script =
  679. function(object_data)
  680. {
  681. return true;
  682. }
  683. LinternaMagica.prototype.sites.__set_video_link_regex = function()
  684. {
  685. return true;
  686. }
  687. LinternaMagica.prototype.sites.__process_extracted_link = function(link)
  688. {
  689. return true;
  690. }
  691. LinternaMagica.prototype.sites.__do_not_clean_amps_in_extracted_link =
  692. function()
  693. {
  694. return true;
  695. }
  696. LinternaMagica.prototype.sites.__set_video_id_regex = function()
  697. {
  698. return true;
  699. }
  700. LinternaMagica.prototype.sites.__plugin_install_warning = function(node)
  701. {
  702. return true;
  703. }
  704. LinternaMagica.prototype.sites.__plugin_install_warning_loop =
  705. function(node)
  706. {
  707. return true;
  708. }
  709. LinternaMagica.prototype.sites.__prepare_xhr = function(object_data)
  710. {
  711. return false;
  712. }
  713. LinternaMagica.prototype.sites.__process_xhr_response =
  714. function(args)
  715. {
  716. return true;
  717. }
  718. LinternaMagica.prototype.sites.__process_duplicate_object_before_xhr =
  719. function(object_data)
  720. {
  721. return true;
  722. }
  723. LinternaMagica.prototype.sites.__insert_object_after_xhr = function(object_data)
  724. {
  725. return true;
  726. }
  727. LinternaMagica.prototype.sites.__css_fixes = function(object_data)
  728. {
  729. return true;
  730. }
  731. LinternaMagica.prototype.sites.__skip_flowplayer_links_fix =
  732. function(object_data)
  733. {
  734. return true;
  735. }
  736. LinternaMagica.prototype.sites.__custom_html5_player_finder =
  737. function(parent)
  738. {
  739. return true;
  740. }
  741. LinternaMagica.prototype.call_site_function_at_position =
  742. function (position_name, match_site, data)
  743. {
  744. var self = this;
  745. var debug_level = 6;
  746. if (position_name == "process_cookies" ||
  747. position_name == "extract_object_from_script" ||
  748. position_name == "skip_script_processing")
  749. {
  750. debug_level = 7;
  751. }
  752. if (this.sites[match_site])
  753. {
  754. if (typeof(this.sites[match_site]) == "object" &&
  755. typeof(this.sites[match_site][position_name]) == "function")
  756. {
  757. this.log("LinternaMagica.call_site_function_at_position:\n"+
  758. "Calling function "+position_name+
  759. " for site (both site and function defined)",debug_level);
  760. return this.sites[match_site][position_name].apply(self,[data]);
  761. }
  762. else if (typeof(this.sites[match_site]) == "object" &&
  763. typeof(this.sites[match_site][position_name]) == "string")
  764. {
  765. var ref_to = this.sites[match_site][position_name];
  766. this.log("LinternaMagica.call_site_function_at_position:\n"+
  767. "Calling referenced function "+
  768. position_name+" (site defined,"+
  769. " function reference): "+match_site+" -> "+ref_to,debug_level);
  770. return this.call_site_function_at_position.apply(self, [
  771. position_name, ref_to, data]);
  772. }
  773. else if (typeof(this.sites[match_site]) == "string")
  774. {
  775. var ref_to = this.sites[match_site];
  776. if (typeof(this.sites[ref_to][position_name]) != "undefined")
  777. {
  778. this.log("LinternaMagica.call_site_function_at_position:\n"+
  779. "Using another site config (reference) for function "+
  780. position_name+": "+match_site+" -> "+ref_to,debug_level);
  781. return this.call_site_function_at_position.apply(self, [
  782. position_name, ref_to, data]);
  783. }
  784. }
  785. }
  786. if ((this.sites[match_site] &&
  787. !this.sites[match_site][position_name]) ||
  788. !this.sites[match_site])
  789. {
  790. this.log("LinternaMagica.call_site_function_at_position:\n"+
  791. "Using default function "+position_name+
  792. " (no site specific config)",debug_level);
  793. return this.sites["__"+position_name].apply(self, [data]);
  794. }
  795. return true;
  796. }
  797. LinternaMagica.prototype.create_about_box = function(id)
  798. {
  799. var box = document.createElement("div");
  800. box.style.setProperty("display", "none", "important");
  801. box.setAttribute("id", "linterna-magica-about-box-"+id);
  802. box.setAttribute("class", "linterna-magica-about-box");
  803. var p = document.createElement("p");
  804. var text = document.createTextNode(
  805. this.name+this._(" version: ")+this.version);
  806. p.appendChild(text);
  807. box.appendChild(p);
  808. for (var l=0, length=this.copyrights.length; l< length; l++)
  809. {
  810. p = document.createElement("p");
  811. text = document.createTextNode(this.copyrights[l]);
  812. p.appendChild(text);
  813. box.appendChild(p);
  814. }
  815. if (this.languages[this.lang] &&
  816. this.languages[this.lang].__translators)
  817. {
  818. var translation = null;
  819. if (typeof (this.languages[this.lang].__translators) == "object")
  820. {
  821. translation = this.languages[this.lang].__translators;
  822. }
  823. else
  824. {
  825. translation = new Array();
  826. translation.push(this.languages[this.lang].__translators);
  827. }
  828. p = document.createElement("p");
  829. text = document.createTextNode(this._("Translation")+":");
  830. p.appendChild(text);
  831. box.appendChild(p);
  832. for (var l=0, length=translation.length; l< length; l++)
  833. {
  834. p = document.createElement("p");
  835. text = document.createTextNode(translation[l]);
  836. p.appendChild(text);
  837. box.appendChild(p);
  838. }
  839. }
  840. p = document.createElement("p");
  841. text = document.createTextNode(this.description());
  842. p.appendChild(text);
  843. box.appendChild(p);
  844. p = document.createElement("p");
  845. text = document.createTextNode(this.license());
  846. p.appendChild(text);
  847. box.appendChild(p);
  848. var license_link = this.pack_external_link(this.license_link,
  849. this.license_link);
  850. license_link.setAttribute("title", this.license_link);
  851. p = document.createElement('p');
  852. p.appendChild(license_link);
  853. box.appendChild(p);
  854. var homepage =
  855. this.pack_external_link(this.homepage,
  856. this._("Linterna Mágica Home page"));
  857. homepage.setAttribute("title", this.homepage);
  858. p = document.createElement('p');
  859. p.appendChild(homepage);
  860. box.appendChild(p);
  861. var savannah_link =
  862. this.pack_external_link(
  863. this.savannah_page,
  864. this._("Linterna Mágica project page at Savannah"));
  865. savannah_link.setAttribute("title", this.savannah_page);
  866. p = document.createElement("p");
  867. p.appendChild(savannah_link);
  868. box.appendChild(p);
  869. var bug_report_link =
  870. this.pack_external_link(
  871. this.bug_report_link,
  872. this._("Report a bug at our Savannah project page"));
  873. bug_report_link.setAttribute("title", this.bug_report_link);
  874. p = document.createElement("p");
  875. p.appendChild(bug_report_link);
  876. box.appendChild(p);
  877. var microblog_link =
  878. this.pack_external_link(
  879. this.microblog_link,
  880. this._("Linterna Mágica microbloging group at Identi.ca"));
  881. microblog_link.setAttribute("title", this.microblog_link);
  882. p = document.createElement("p");
  883. p.appendChild(microblog_link);
  884. box.appendChild(p);
  885. return box;
  886. }
  887. LinternaMagica.prototype.about = function(event, element)
  888. {
  889. if (event)
  890. {
  891. event.preventDefault();
  892. }
  893. var id = element.getAttribute("id");
  894. id = id.split("-");
  895. id = id[id.length-1];
  896. var obj = document.getElementById("linterna-magica-video-object-"+id);
  897. var about = document.getElementById("linterna-magica-about-box-"+id);
  898. var updates = document.
  899. getElementById("linterna-magica-update-info-box-"+id);
  900. if (about)
  901. {
  902. if (updates && !updates.style.display)
  903. {
  904. updates.style.setProperty("display","none", "important");
  905. }
  906. if(about.style.display)
  907. {
  908. about.style.removeProperty("display");
  909. this.hide_lm_video_object(id);
  910. }
  911. else
  912. {
  913. about.style.setProperty("display","none", "important");
  914. this.show_lm_video_object(id);
  915. }
  916. }
  917. }
  918. LinternaMagica.prototype.check_for_updates = function()
  919. {
  920. if (this.updates == -1 ||
  921. /svn/i.test(this.version))
  922. {
  923. return null;
  924. }
  925. if (this.check_for_updates_once)
  926. {
  927. return null;
  928. }
  929. this.check_for_updates_once = true;
  930. var updates_mul;
  931. var in_seconds ;
  932. if (/d$/i.test(this.updates))
  933. {
  934. updates_mul = parseInt(this.updates.split('d')[0]);
  935. in_seconds = 60*60*24;
  936. }
  937. else if (/w$/i.test(this.updates))
  938. {
  939. updates_mul = parseInt(this.updates.split('w')[0]);
  940. in_seconds = 60*60*24*7;
  941. }
  942. else if (/m$/i.test(this.updates))
  943. {
  944. updates_mul = parseInt(this.updates.split('m')[0]);
  945. in_seconds = 60*60*24*7*31;
  946. }
  947. else if (/y$/i.test(this.updates))
  948. {
  949. updates_mul = parseInt(this.updates.split('y')[0]);
  950. in_seconds = 60*60*24*365;
  951. }
  952. var update_date =
  953. new Date(parseInt(this.release_date)*1000);
  954. var plus_day = 60*60*24;
  955. var plus_two_days = 2*plus_day;
  956. var update_date_d1 =
  957. new Date((parseInt(this.release_date)+plus_day)*1000);
  958. var update_date_d2 =
  959. new Date((parseInt(this.release_date)+plus_two_days)*1000);
  960. var now = new Date();
  961. var date_diff = now - update_date;
  962. var d1_diff = now - update_date_d1;
  963. var d2_diff = now - update_date_d2;
  964. if ((Math.floor(date_diff/1000/(in_seconds)) % updates_mul) &&
  965. (Math.floor(d1_diff/1000/(in_seconds)) % updates_mul) &&
  966. (Math.floor(d2_diff/1000/(in_seconds)) % updates_mul))
  967. {
  968. return null;
  969. }
  970. var jsonp_request_data = new Object();
  971. jsonp_request_data.frame_id = "linterna-magica-updates-checker";
  972. jsonp_request_data.parser_timeout = this.updates_timeout;
  973. jsonp_request_data.parser_timeout_counter =
  974. this.updates_timeout_counter;
  975. jsonp_request_data.jsonp_script_link = this.updates_page;
  976. jsonp_request_data.jsonp_function = "linterna_magica_latest_version";
  977. jsonp_request_data.parser_function = this.parse_updated_version_data;
  978. this.create_checker_frame(jsonp_request_data);
  979. }
  980. LinternaMagica.prototype.parse_updated_version_data = function(data)
  981. {
  982. var new_release_date = new Date(data.date * 1000);
  983. var current_release_date = new Date(this.release_date*1000);
  984. if ( new_release_date > current_release_date )
  985. {
  986. var date = data.date;
  987. date = new Date (parseInt(date)*1000);
  988. var format_date = date.toString().replace(/[0-9]+:[0-9]+.*/,"");
  989. format_date = format_date.split(" ");
  990. this.updates_data = new Object();
  991. this.updates_data.date = date;
  992. this.updates_data.version = data.version;
  993. this.updates_data.format_date = format_date;
  994. var notifier_buttons =
  995. document.querySelectorAll('.linterna-magica-update-'+
  996. 'notifier-link');
  997. for(var i=0, l=notifier_buttons.length; i<l; i++)
  998. {
  999. var button = notifier_buttons[i];
  1000. button.style.removeProperty("display");
  1001. button.setAttribute("title",
  1002. this._("New version")+
  1003. ": "+data.version+". "+this._("Date")+": "+
  1004. this._(format_date[2]) + " "+
  1005. this._(format_date[1]) + " " +
  1006. this._(format_date[3]));
  1007. var id = button.getAttribute("id").split(/-/);
  1008. id = id[id.length-1];
  1009. var video_object = this.get_video_object(id);
  1010. var heigh = this.extract_object_height(video_object);
  1011. var info_box =
  1012. document.getElementById("linterna-magica-"+
  1013. "update-info-box-"-id);
  1014. if (!info_box)
  1015. {
  1016. var info_box = this.create_update_info_box(id,video_object);
  1017. var lm = document.getElementById("linterna-magica-"+id);
  1018. if (lm)
  1019. {
  1020. lm.appendChild(info_box);
  1021. }
  1022. }
  1023. }
  1024. var side_button = this.create_side_update_notifier_button();
  1025. }
  1026. }
  1027. LinternaMagica.prototype.create_update_notifier_link = function(id)
  1028. {
  1029. var title =
  1030. this._("New version");
  1031. if (this.updates_data)
  1032. {
  1033. var date = this.updates_data.date;
  1034. var version = this.updates_data.version;
  1035. var format_date = this.updates_data.format_date;
  1036. title +=
  1037. ": "+version+". "+this._("Date")+": "+
  1038. this._(format_date[2]) + " "+
  1039. this._(format_date[1]) + " " +
  1040. this._(format_date[3]);
  1041. }
  1042. var notifier = document.createElement("a");
  1043. notifier.setAttribute("title", title);
  1044. notifier.setAttribute("href", "#");
  1045. notifier.setAttribute("class", "linterna-magica-update-notifier-link ");
  1046. notifier.setAttribute("id", "linterna-magica-update-"+
  1047. "notifier-link-"+id);
  1048. notifier.textContent = this._("Update");
  1049. return notifier;
  1050. }
  1051. LinternaMagica.prototype.create_update_info_box = function(id, object_height)
  1052. {
  1053. var date = this.updates_data.date;
  1054. var version = this.updates_data.version;
  1055. var format_date = this.updates_data.format_date;
  1056. var div = document.createElement("div");
  1057. div.style.setProperty("display", "none", "important");
  1058. div.setAttribute("class", "linterna-magica-update-info-box");
  1059. div.setAttribute("id", "linterna-magica-update-info-box-"+id);
  1060. div.style.setProperty("height",
  1061. parseInt(object_height-40)+"px",
  1062. "important");
  1063. var p = document.createElement('p');
  1064. var t = document.createTextNode(this._("New version is available."));
  1065. p.appendChild(t);
  1066. div.appendChild(p);
  1067. p = document.createElement('p');
  1068. t = document.createTextNode(
  1069. "Linterna Mágica"+" "+version+
  1070. " "+this._("released at")+" "+this._(format_date[2]) + " "+
  1071. this._(format_date[1]) + " "+this._(format_date[3]));
  1072. p.appendChild(t);
  1073. div.appendChild(p);
  1074. var a = this.pack_external_link(
  1075. this.homepage+"/#news",
  1076. this._("Read the news section at the home page"));
  1077. p = document.createElement('p');
  1078. p.appendChild(a);
  1079. div.appendChild(p);
  1080. return div;
  1081. }
  1082. LinternaMagica.prototype.show_or_hide_update_info = function(event, element)
  1083. {
  1084. if (event)
  1085. {
  1086. event.preventDefault();
  1087. }
  1088. var id = element.getAttribute("id");
  1089. id = id.split("-");
  1090. id = id[id.length-1];
  1091. var obj = document.getElementById("linterna-magica-video-object-"+id);
  1092. var updates = document.
  1093. getElementById("linterna-magica-update-info-box-"+id);
  1094. var about = document.
  1095. getElementById("linterna-magica-about-box-"+id);
  1096. if (updates)
  1097. {
  1098. if (about && !about.style.display)
  1099. {
  1100. about.style.setProperty("display","none", "important");
  1101. }
  1102. if (updates.style.display)
  1103. {
  1104. updates.style.removeProperty("display");
  1105. this.hide_lm_video_object(id);
  1106. }
  1107. else
  1108. {
  1109. updates.style.setProperty("display","none", "important");
  1110. this.show_lm_video_object(id);
  1111. }
  1112. }
  1113. }
  1114. LinternaMagica.prototype.create_side_update_notifier_button = function()
  1115. {
  1116. var side_button = document.createElement("p");
  1117. side_button.setAttribute('class', 'linterna-magica-side-update-notifier-button-wrap');
  1118. side_button.setAttribute('id', 'linterna-magica-side-update-notifier-button-wrap');
  1119. var logo = this.create_side_update_notifier_link();
  1120. logo.textContent = '';
  1121. logo.setAttribute('class',
  1122. 'linterna-magica-side-update-notifier-button');
  1123. side_button.appendChild(logo);
  1124. var update_icon = document.createElement('span');
  1125. update_icon.setAttribute('class', 'linterna-magica-side-update-'+
  1126. 'notifier-button-update-icon');
  1127. logo.appendChild(update_icon);
  1128. var close = this.create_side_update_notifier_close_link();
  1129. side_button.appendChild(close);
  1130. close.addEventListener("click", this.remove_side_update_notifier, false);
  1131. document.body.appendChild(side_button);
  1132. }
  1133. LinternaMagica.prototype.create_side_update_notifier_link = function()
  1134. {
  1135. var date = this.updates_data.date;
  1136. var version = this.updates_data.version;
  1137. var format_date = this.updates_data.format_date;
  1138. var update_info =
  1139. this._("New version is available.")+"\n"+
  1140. "Linterna Mágica"+" "+version+
  1141. " "+this._("released at")+" "+this._(format_date[2]) + " "+
  1142. this._(format_date[1]) + " "+this._(format_date[3])+"\n"+
  1143. this._("Read the news section at the home page");
  1144. var link = this.pack_external_link(
  1145. this.homepage+"/#news",
  1146. update_info);
  1147. link.setAttribute("title", update_info);
  1148. return link;
  1149. }
  1150. LinternaMagica.prototype.create_side_update_notifier_close_link = function()
  1151. {
  1152. var close = document.createElement("a");
  1153. close.textContent="x";
  1154. close.setAttribute("href", "#");
  1155. close.setAttribute("class", "linterna-magica-side-update-"+
  1156. "notifier-button-close")
  1157. close.setAttribute("title", this._("Remove update notifier"));
  1158. return close;
  1159. }
  1160. LinternaMagica.prototype.remove_side_update_notifier = function(event, element)
  1161. {
  1162. var update_notifier =
  1163. document.getElementById('linterna-magica-side-update-'+
  1164. 'notifier-button-wrap');
  1165. if (!update_notifier)
  1166. {
  1167. return null;
  1168. }
  1169. update_notifier.parentNode.removeChild(update_notifier);
  1170. }
  1171. LinternaMagica.prototype.compute_preferred_hd_link = function(hd_links)
  1172. {
  1173. var preferred_link_index = null;
  1174. if (this.preferred_hd_quality > 0)
  1175. {
  1176. if (hd_links[this.preferred_hd_quality])
  1177. {
  1178. preferred_link_index = this.preferred_hd_quality;
  1179. }
  1180. else
  1181. {
  1182. preferred_link_index = hd_links.length;
  1183. }
  1184. }
  1185. else if (this.preferred_hd_quality < 0)
  1186. {
  1187. var quality = Math.abs(this.preferred_hd_quality);
  1188. preferred_link_index = Math.floor(((hd_links.length)*quality));
  1189. }
  1190. if (preferred_link_index == 0)
  1191. {
  1192. preferred_link_index = 1;
  1193. }
  1194. if (Math.abs(this.preferred_hd_quality) > 0.5 &&
  1195. hd_links.length == 2)
  1196. {
  1197. preferred_link_index = hd_links.length;
  1198. }
  1199. return Math.abs(hd_links.length-preferred_link_index);
  1200. }
  1201. LinternaMagica.prototype.extract_cookies = function()
  1202. {
  1203. this.cookies = document.cookie.split(";");
  1204. return this.cookies;
  1205. }
  1206. LinternaMagica.prototype.store_cookies = function(expire)
  1207. {
  1208. if (!this.cookies)
  1209. {
  1210. return null;
  1211. }
  1212. var cookies = this.cookies;
  1213. var past_date = new Date(1983, 9, 27);
  1214. var domain = window.location.hostname;
  1215. var self = this;
  1216. var val = this.call_site_function_at_position.apply(self,[
  1217. "set_cookies_domain",
  1218. window.location.hostname]);
  1219. if (!val)
  1220. {
  1221. return null;
  1222. }
  1223. else if (typeof(val) == "string")
  1224. {
  1225. domain = val;
  1226. }
  1227. for (var i=0, l=cookies.length; i<l; i++)
  1228. {
  1229. var val = this.call_site_function_at_position.apply(self,[
  1230. "process_cookies",
  1231. window.location.hostname]);
  1232. try
  1233. {
  1234. if (typeof(val) == "string")
  1235. {
  1236. document.cookie = cookies[i]+
  1237. (expire ? "; expires="+
  1238. past_date.toUTCString(): "")+val;
  1239. }
  1240. }
  1241. catch(e)
  1242. {
  1243. this.log("LinternaMagica.store_cookies:\n"+
  1244. "Exception while setting cookie with"+
  1245. " site specific string: "+e,1);
  1246. }
  1247. try
  1248. {
  1249. document.cookie = cookies[i]+
  1250. (expire ? "; expires="+past_date.toUTCString(): "")+
  1251. "; domain="+domain+"; path=/; host="+domain+"; ";
  1252. }
  1253. catch(e)
  1254. {
  1255. this.log("LinternaMagica.store_cookies:\n"+
  1256. "Exception while setting cookie: "+e,1);
  1257. }
  1258. }
  1259. }
  1260. LinternaMagica.prototype.restore_cookies = function()
  1261. {
  1262. this.store_cookies(0);
  1263. }
  1264. LinternaMagica.prototype.expire_cookies = function ()
  1265. {
  1266. this.store_cookies(1);
  1267. }
  1268. LinternaMagica.prototype.create_video_object = function(object_data)
  1269. {
  1270. if (typeof(object_data) !== "object")
  1271. {
  1272. return;
  1273. }
  1274. object_data.outer_height = object_data.height-1;
  1275. object_data.height -= this.controls ? 36 : 24;
  1276. var toggle_plugin = null;
  1277. var id = object_data.linterna_magica_id;
  1278. this.log("LinternaMagica.create_video_object:\n"+
  1279. "Creating video object with linterna_magica_id "+id,2);
  1280. if (((id-1) >= 0))
  1281. {
  1282. var lm_instance =
  1283. document.getElementById("linterna-magica-"+(id-1));
  1284. if (lm_instance && lm_instance.parentNode &&
  1285. lm_instance.parentNode == object_data.parent)
  1286. {
  1287. this.log("LinternaMagica.create_video_object:\n"+
  1288. "It seems object with linterna_magica_id "+id+
  1289. " will be created at the same place where object "+
  1290. "with linterna_magica_id "+(id-1)+" already exists. "+
  1291. "Not creating object with id #"+id,1);
  1292. return null;
  1293. }
  1294. }
  1295. var container = document.createElement("div");
  1296. var object_tag_wrapper = document.createElement("div");
  1297. var object_tag = document.createElement("object");
  1298. var message = document.createElement("p");
  1299. var param = document.createElement("param");
  1300. container.setAttribute("id", "linterna-magica-"+id);
  1301. container.setAttribute("class", "linterna-magica");
  1302. if (object_data.width < this.min_width) {
  1303. container.setAttribute("class", "linterna-magica-lower");
  1304. }
  1305. container.setAttribute("dir", this.languages[this.lang].__direction);
  1306. var lang_code = this.lang.split("_")[0];
  1307. if (!lang_code)
  1308. {
  1309. lang_code = "en";
  1310. }
  1311. container.setAttribute("xml:lang", lang_code);
  1312. container.setAttribute("lang", lang_code);
  1313. container.style.setProperty("width",
  1314. (object_data.width+"px"), "important");
  1315. container.style.setProperty("height",
  1316. (object_data.outer_height+"px"), "important");
  1317. object_tag_wrapper.setAttribute("id", "linterna-magica-video-object-wrapper-"+id);
  1318. object_tag_wrapper.setAttribute("class", "linterna-magica-video-object-wrapper");
  1319. object_tag_wrapper.style.setProperty("height", object_data.height+"px",
  1320. "important");
  1321. object_tag_wrapper.style.setProperty("width", object_data.width+"px",
  1322. "important");
  1323. object_tag_wrapper.style.setProperty("display", "block",
  1324. "important");
  1325. var site_html5_player =
  1326. this.find_site_html5_player_wrapper(object_data.parent);
  1327. var toggle_plugin_switch_type =
  1328. site_html5_player ? "html5" : "plugin";
  1329. object_tag.setAttribute("width", object_data.width);
  1330. object_tag.setAttribute("height", object_data.height);
  1331. object_tag.setAttribute("id","linterna-magica-video-object-"+id);
  1332. object_tag.setAttribute("class","linterna-magica-video-object");
  1333. object_tag.setAttribute("standby", this._("Loading video..."));
  1334. if (object_data.link)
  1335. {
  1336. var mime = object_data.mime ? object_data.mime : "video/flv";
  1337. if (/mp4|m4v|quicktime/i)
  1338. {
  1339. var mp4 = navigator.mimeTypes["video/mp4"];
  1340. if (mp4 && mp4.enabledPlugin && mp4.enabledPlugin.name &&
  1341. /totem/i.test(mp4.enabledPlugin.description))
  1342. {
  1343. mime = "video/flv";
  1344. }
  1345. }
  1346. object_tag.setAttribute("type", mime);
  1347. object_tag.setAttribute("data", object_data.link);
  1348. }
  1349. message.textContent = this._("Waiting for video plugin...");
  1350. message.style.setProperty("height", object_data.height+"px",
  1351. "important");
  1352. message.style.setProperty("width", object_data.width+"px",
  1353. "important");
  1354. param.setAttribute("name", "autoplay");
  1355. var started_clip = this.find_started_clip();
  1356. param.setAttribute("value",
  1357. (started_clip !== null) ? "false" : this.autostart);
  1358. object_tag.appendChild(param);
  1359. param = document.createElement("param");
  1360. param.setAttribute("name", "showcontrols");
  1361. param.setAttribute("value", (this.controls ? "false": "true"));
  1362. object_tag.appendChild(param);
  1363. param = document.createElement("param");
  1364. param.setAttribute("name", "toolbar");
  1365. param.setAttribute("value", (this.controls ? "false": "true"));
  1366. object_tag.appendChild(param);
  1367. param = document.createElement("param");
  1368. param.setAttribute("name", "controller");
  1369. param.setAttribute("value", (this.controls ? "false": "true"));
  1370. object_tag.appendChild(param);
  1371. param = document.createElement("param");
  1372. param.setAttribute("name", "cache");
  1373. param.setAttribute("value", true);
  1374. object_tag.appendChild(param);
  1375. object_tag.appendChild(message);
  1376. object_tag_wrapper.appendChild(object_tag);
  1377. container.appendChild(object_tag_wrapper);
  1378. var about_box = this.create_about_box(id);
  1379. about_box.style.setProperty("height", (object_data.height-40)+"px",
  1380. "important");
  1381. container.appendChild(about_box);
  1382. object_tag.linterna_magica_id =
  1383. parseFloat(object_data.linterna_magica_id+".1");
  1384. if (this.plugin_is_installed || site_html5_player)
  1385. {
  1386. toggle_plugin =
  1387. this.create_toggle_plugin_link("link-not-in-header", id,
  1388. toggle_plugin_switch_type);
  1389. var before = null;
  1390. if (this.plugin_is_installed && !site_html5_player)
  1391. {
  1392. before = this.get_flash_video_object(id) ?
  1393. this.get_flash_video_object(id) : null;
  1394. }
  1395. else if (site_html5_player)
  1396. {
  1397. before = site_html5_player;
  1398. }
  1399. if (before && before.nextSibling)
  1400. {
  1401. object_data.parent.insertBefore(toggle_plugin, before.nextSibling);
  1402. }
  1403. else
  1404. {
  1405. object_data.parent.appendChild(toggle_plugin);
  1406. }
  1407. if (((this.priority.self > this.priority.plugin) &&
  1408. this.plugin_is_installed && !site_html5_player) ||
  1409. ((this.priority.self > this.priority.html5) &&
  1410. site_html5_player))
  1411. {
  1412. toggle_plugin.style.setProperty("display", "none",
  1413. "important");
  1414. }
  1415. this.add_css_class(object_data.parent, "linterna-magica-ws-video-parent");
  1416. }
  1417. if (this.updates_data)
  1418. {
  1419. var update_info = this.create_update_info_box(id, object_data.height);
  1420. container.appendChild(update_info);
  1421. }
  1422. var controls = this.create_controls(object_data);
  1423. object_tag.setAttribute("data", object_data.link);
  1424. container.appendChild(controls);
  1425. var site_player = this.get_flash_video_object(id);
  1426. if (!site_player)
  1427. {
  1428. site_player = site_html5_player;
  1429. }
  1430. if ((((this.priority.self > this.priority.plugin) &&
  1431. !site_html5_player) ||
  1432. ((this.priority.self > this.priority.html5) &&
  1433. site_html5_player)) &&
  1434. site_player &&
  1435. site_player.parentNode)
  1436. {
  1437. if(site_player.nextSibling)
  1438. {
  1439. object_data.use_sibling = site_player.nextSibling;
  1440. }
  1441. if (!site_html5_player)
  1442. {
  1443. this.hide_flash_video_object(id,site_player.parentNode);
  1444. }
  1445. else
  1446. {
  1447. this.pause_site_html5_player(object_data.parent);
  1448. this.hide_site_html5_player(object_data.parent);
  1449. }
  1450. }
  1451. if (toggle_plugin)
  1452. {
  1453. object_data.parent.insertBefore(container, toggle_plugin);
  1454. }
  1455. else
  1456. {
  1457. if (object_data.use_sibling)
  1458. {
  1459. object_data.parent.insertBefore(
  1460. container,
  1461. object_data.use_sibling);
  1462. }
  1463. else
  1464. {
  1465. if (object_data.parent)
  1466. {
  1467. object_data.parent.appendChild(container);
  1468. }
  1469. }
  1470. }
  1471. if (((this.priority.self < this.priority.plugin) &&
  1472. this.plugin_is_installed) ||
  1473. ((this.priority.self < this.priority.html5) &&
  1474. site_html5_player))
  1475. {
  1476. this.hide_lm_interface(object_data.linterna_magica_id);
  1477. }
  1478. if (site_player)
  1479. {
  1480. site_player.style.setProperty("height", object_data.outer_height+"px",
  1481. "important");
  1482. site_player.style.setProperty("position", "relative", "important");
  1483. site_player.style.setProperty("z-index", "9999999", "important");
  1484. site_player.style.setProperty("background-color",
  1485. "black", "important");
  1486. site_player.style.setProperty("border",
  1487. "1px solid #36393E", "important");
  1488. }
  1489. object_tag.style.setProperty("height", object_data.height+"px",
  1490. "important");
  1491. object_tag.style.setProperty("width", object_data.width+"px",
  1492. "important");
  1493. if (this.plugin_is_installed)
  1494. {
  1495. object_data.parent.style.
  1496. setProperty("background-color", "transparent",
  1497. "important");
  1498. if (object_data.parent.parentNode)
  1499. {
  1500. object_data.parent.parentNode.
  1501. style.setProperty("background-color", "transparent",
  1502. "important");
  1503. }
  1504. }
  1505. if (this.controls &&
  1506. (this.priority.self > this.priority.plugin))
  1507. {
  1508. this.player.init.apply(this,[id]);
  1509. }
  1510. if (!this.controls && !this.get_player_name(id))
  1511. {
  1512. this.player.set_player_name.apply(this,[id]);
  1513. }
  1514. var self = this;
  1515. var val = this.call_site_function_at_position.apply(self,[
  1516. "css_fixes",
  1517. window.location.hostname, object_data]);
  1518. return null;
  1519. }
  1520. LinternaMagica.prototype.create_stylesheet = function()
  1521. {
  1522. var style = document.createElement("style");
  1523. var head = null;
  1524. try
  1525. {
  1526. head = document.getElementsByTagName("head");
  1527. }
  1528. catch(e)
  1529. {
  1530. return;
  1531. }
  1532. if (!head)
  1533. {
  1534. return null;
  1535. }
  1536. head = head[0];
  1537. var button_about_lower="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAWCAYAAADafVyIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMTSURBVEiJ7ZVNaJRXFIbfeyc2PwYNqHEkiYlYZVSi1rbixoUipf4QlKItWipoUBQEEVyWmkUhoKXUCv6g6EIXKmqjIgiiojSixELMgMWmNTL5ZuLoJGbi2Ll/53QxM99Mx0nJJrue5XnOed97zr18n2BmjGfIcVX/32AsUQYA3heX6wMWrZDyTPDK+r7iooGWy59CiqWCkRAI3KntaHmZY9H1HQ2S7UoJUc5OdE6/viFc2CuYGd6a88tI4IGQvKL+2ld3czDWcr3KUOqEYGz5V5PAd/VV8vtIig4D2F2AGMDR+MvhvR937TD+BHeS4dplE+fi0ds/gpsLqlNq6DCATf3q9dmfYlf/rPtgqmoNfhaqlhVtvcPYCqBhyKZO/jxw7S8mKt81Y22odsLkXTVTKgcBfOsbPE/Faj8qb8LzdCyYEw+vOjldsNh+c/i38A+xX77OZJ/hymAnjjTt7JlbUdd8O9nd1R691JrruZ18wu0NW58umTh738VNFw9svLDRSQAgIiijQUT+6dPWLVRG48ZQVwjAISnlHGb+hJmPX0p0Niuj0TH4cDEz/0hEC5xzzQCOXR18OE8ZXTXrVWKeP4F2BspqGDK+Qe+IV9dYPgXVovK053n7Czb3eFto3Xxl9fJqUXk6Go3uK2C7vwmtnqWs/vxv6yYB2WdK5KCshnX5CXrTkUZlNRonTP0VRTFNVj8ejQVlTZeyGveT3U2+gXGZFRlr/cK3pCqU0SgjmS4WESzTozEQKWU0Royq8g0cZVZEzvl11looq6ELcmNjBGU1XHbd2Qlc9g7yE1jKiBBKiIyBmax5xgAZV0v5BpctdCVO+V/MN0DmPssAwBkNRRpL0HjwVNOedgBYhJllymho0u+JaOuguDSz2SfvnM4beDQcv8VhfIjguRliUh8ARDgR6kPiyzdIvS4WeUGJ/iS/Q0nm4tEReoc3nI77Bj0iEmdm3MOzzWDk3qoEACFEolikBxEPPApjLyogIITIGwDoB9D23rwAtNYDJdK/A2grxQKBQC8RtWU1M1/T8Yxx/+H8A47I3NLKIAqPAAAAAElFTkSuQmCC";var button_about="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGoAAAAWCAYAAAAowQktAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAA2MSURBVGiB7VlpeFXVuX7X3udkOMkJkkBMcnKSMAQwRpCaKjJIQal1pAyKeIt1gBa8tago2j5eImKh2nK1UgQRBUUFpFhERG0FREGmhCEhYMAAydn7nMzDmfbea7w/NFxQBNvH9l6fh/ffmr7v/Z53vWuvvTdRSuE8/v9D+78mcB7fDueF+p7gvFDfE5wX6nsC19kG629+6yNo4t6sdbccAgDj1jXJuq39HqBzstdPbP73UPznYdy0xufStOmQqi807BNMW+rbONZovGnNlYqQWwFSoAjZZofDCwu23Gl/dX3oprVTNEJiF64f+8a3zdkweu10CbIv++2xH3+XtZzVUZTT4TaVaSfbbUhgnPe24PKcNers2Zpxw8qfVI9e7/2OeP7DqL1x9UVSiErK2DgqRC1l/OcCdFftdases4XYanN+pcNZPWXsMS05ebdx65rkU9efuG5VARPs5xIJ6/6RvDZn+ZSybt9tNedwlMMpNrXvz5uKCTsB4OrPZzqU0j2U0rYm3PKN6058lJ/A3Ow9jbUOBLD/u6X87UCps6Cdxz4ZWz33kITMTCD67A+K5txMQObsilQvejTwClVKuXslZN71UuEDT6Od3Afg6c71TLAfTa55bs+RuFEQQujQt8np8/k8ACIA3jcx4Tut56xCUcHQxMInHfXDlN6ZozIHTK22Qu8AKK+4dkWKxp2HCciVCqpaZ3LeRR//IrSZHXZfofWBVPLJqpEvNYNg28Wb7llaMWJprqZp9xOoHgrkuEtqf+635c4TnfEPjlp6EVHkV1Ck38Wb7r56x+A1yWnJ4RkAhoHgcyHUvP5bJhud8w+PWnaNEHI8IfAqQjYXDwssQ2mpBACb0yGzAis0CdkXwD6qxKI5gdUHH80Zh1LjjalKqc0AUEMbp33Yvn/HVd7iYfhSqM+uebHPQSs45t4Lr+9fnJQXrhy26NlLPpnW1pn3sxHLCwQR0whRBSDaLo/Qni/YcqfNOfdOzbl+0g9Teh8B8HonRyXFOICkKkX+fvGWu1dAQe0YvCa5iycyDUpeoZTWpDS5pPjDyRXfpMVZjz6HU0gpT7Z/2/2G8GVJvS6cmDE8BgDcjr7jcH4P5U6lw9mwOJG7dw1akPZ6cFu6wynaWExzhGPbnLIDwxb24ZJVUuZc7AhaTrkzNC6tqvIRS/oBQNlViy+nlO12OL3aEU45ACS6m9c5nP6CcqfSYfRKLtnu7UNf9gLAvuGLHrOovZ4KGnEEraLMmbV3c+abAEAIcTHBklKJZ7Fpmv1M05wohMhvYG1+h1PYkl5lmuY1pmleA2BYddy4opV25ADA3uGLR8YZr2Cc9ezhzlzsCDqcadi/Y/BL6QCwb8QLJXFpVTiCDrAYP+gwZ0KrtHdXXPvHlIaGhobRaZfXZesZ/i85PmJR+x2bU25z9rnDnVl7hz9/4/ahL3sT3U17LeZMsgUtdzhNoIzt2Tvi+Z98kxZndxRnoEKcbK9sLUsdk3o5KpzqLvyqBUVKqBFPNby1YFf8SH6a2/O3Zbm/nkpcGANYH1HOMK9hDa20a20ALWvzH3kqLqxdk+qe3QvgIqXU2jcLHpY69McB3MaFM40p2Xpb7R/XA/C8OZT21RX58dyGNS+UxWvyvXryO8vzpt/nAh29Y/AzWwjRH9/YUfaHl9s3pyulEoelFD1wf7ebXt095M8js7KyGihnmJg+bGUn9/r6+sbb+o76gHJ2h2ma2zr7TdPc/kjxfxhtNNoFABin84O87f2HjGW1AHq5iOv51fkz7tNAHwUw06HOwiYe3jHVWHQUQHay5n78tbwH5zmxxBndu3d/ZnGPe3t31b2JuwYtSFO6enxDR9mKZW2bUgFEL3B5RlfVHq3aOeS50hgTninGwg0RYRURQnauznsooBPtOQB9zqTFuR0FdrJdH23zOJzCtJpTLcfu2UojbLd1dBwhpD7CrbEVseNajFo9qaMph1MQhQylVJZSyhtl8UEhu3XUE90nTHnqwkmDZ3W/pTRgN5ZYzC4BgEanY+DG9jIfgDFKKTPmxHp20Jgst45dTQgJRaV91/7YMWVx1o8y2d9iDnm5bfNkAC1KKfZJ7NCrhtMcijNnsK7rXodTpEvPaTc5IhFzOP16oVI6Fndc5SVL3Dan/Rc3f9C5s+u54s9uaN/jciQbXF6yxG0xp+SZpvUjAXgACEuyVZ9GP4tQ7gwjhKQ00Q5fB40mtKvoAIs5ia+1b/0xgCYA/nYeX+f3+5ODTst1fwvv80WE5SOE1Cil7n0ouHycw2nhRyXzz3gROcetj0GccvQBDihn4Bwoj31eaHHbLaUcZZrmfYSQQXHueKpts7Ca1dEwi2GSd/g20zRvM01zpek0p8a5bfq1jJmZ8M7xk4z734/sb/9reMdBAGik7fkRYR83TbMwGAzO2xypvMwRVEtKSioxTfPXuq6PCPN4uuk0+9aGt+dywbWRnqLxhmH8NhgMziCETLC43Ssiohmd3Bljp9UjpATlp/cBgFASTDCMa57brZVGtOFJ/ZabpjndNM1ZUsrBUsmSMI1njml8snsHi2lXJBUuNE3zni/rHq4JNSRGrRwAYIJDSI7nmjcO4YKT6V1vHm+a5kzTNH/m8XiKA4GAVWXVFfXQu9eYpnm7YRhzAAxK05KzKGewBUs9kxbnOPookpQ7bWPx7CwAUILolFNwCNTztuxcLV2EQl/ciAzDaHmuaFokLGMXEEJUpVWLYrf/9ncHzD6g3Fi/KVbpvtlTkv2H1rfvqqJGW6E7K21q2qiuO6wjFwGAxZ3EdOI52Jm7RURyuGCipqamAwDq6upqni6aHGti7RnrY2XeS9x58QmeIY++94N5hxBJDb+QPuVyAKTWbsrt5E6+sg2lFKBncJSQHIxzUEoHbI0d5KOS+t+8YcDsJeUV2P/igKl9uBRahMdThBCX74pX20MT+43acOnvfNmu7o0vZEzpp6BIhMW9AMAFBwVFhX0sp9ZpaOqjd/vvD0rmTkhsYW3PeCdNerDv+E1lzjHvzC6jPe9eOvvulK54dWn6tOwmdGiUU+jfYJ1zXM8ZLtXy59uKzQeA3om+axzOwDkHI1JzyOm70xEcjmKax+PpeCWyVTzgvb45U+vyCmFYucmqbMzGBfFfekYNhUdJAui1tOXTt2N75v8JABWMuJWrtTMWl0JzvuIIJqQCuE4lb1rQ/l7k8bTxXcBZAxJjUklV18jDiIEmdHLXyOl/BgQknDM4igkJR2NQSrWsi+9xXebq8XEKSSq/pAiMMVg1vJFm6Km6pmntq2KfagP1HgdcGqutZXVxpZQrJNuUhySSL2Jx2IpDAu0Lwx/U/VfqON3hLBhLgYAgZgl6HVjNdjg7Y9V/uiyx5zNOIxYDzN0kwvWpeiI0Kb7GDwDI2X5zXOLvowr0zJ+VJOVVAsCH7Eh7Ow3XKshCoTDERfTfVQaqczvnF+UWluvQ/lJpVM/z+XxbAXRJgF46JfHanc/T96YrpSb1dGX89D+TryOv2FszK1hgBSHkQcMwXrk4tzCQQFyP7AscfgMA+vh6PpxM3BMPGNU/+N/4vY8magnPNoqO1QAOA1g+q8v4JVEaT3vWev9BD0m4PY0kTg6pcFVXkrJ1VpfbvbccLD1poZ65BY91IZ4b9wUODTq1zr65vT5MQdJ+LSv5N6FQqByAOdY75N6B7MKMuc4710ngiW6ad34dbSrVdf2QUmrjg57RpVzF+y+3t912e/KQe9JI0uG5HetGpiekhYqQ3XcPOZEkpSwHMOOx1NEbArTZv4Lu8AXMwBs+n28ZgCu6wTtmhucGzyLr7wMM1bo0U0vbPr/3hKt/tKWUf1WLszqqVcbQKo+/tpcd/0JVQgYqpSCl5JqmOVA4LWCHijOllAUAuq5PFEK8SiH+utDZ+LTH4ym1LCvjGG/ZMyPyWhyAmxAy3zTNVwGgXcUFFOKdsaLKZjE49PT4liDSjpmm2ezz+UYDeP2Jjr/cB0AHUBZVdltU2TFCCFplVJ0qEgA4ivEmhL/2qSiqbB6FHTXLqpjf7x8npVz5VmT70bcADsAA8LkpWqP19fUxn8/300Tifm2B9e4JDUQfqOd3+FU6PuKHdgJARFnYxqrDjY2NR3w+3x0AFj0Zffv3AJIArC8sLFxr2/b0pKSkpc2IfPab+Ko4AAqgrF52WGcSCTiHo3w+X79T2x6P53g8Hu+RnZ1dU1tbm5ScnJxZV1dX0zmek5OT73a7w7W1tSdfDv1+f7JSymMYRgsA5ObmZiil+mmadjgQCJw86vLy8nrZtt3Q2NgYBYD8/PyujLG0YDBY2zknKyurR0pKSmvnc4sQovl8vkuUUnYwGDzi9/t7WpbVmJqayhhjeYZhHDmVv9/vT5dSppqmWXdqf25ubq5SyjZNs/mUvj4APKZpHvT5fFmnjr+Y/6u5gJypAAEQslEe0HeLY3eEQqFVOTk5hcFg8KhSSgBAcXFxQktLywCXyxUMBALmqXkLCgqyOef5SqkKAB5CSJJhGAbOgLMKdR5nxi/zru/VX2ZnVonQBRu1qrEMfGxCQkKv48ePt/+rcp4X6p+Az+erBuDDF+9SJwghYwzDOPCvzHnWZ9R5nBmapt0gpcySUhqhUOjEvyPneUd9T/A/IErEM0eDUZgAAAAASUVORK5CYII=";var button_close="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHRSURBVDiN7ZRBaxNBFMd/O5vYLRIiVi+bDZXFY4+FlV5rG/0A5lIQPHnprV5L8FrsB8jJU7HEL+C2ei2m5+YmIWYJtFTBYtJuZnd2PDQRCp1CkAiCA+/w3pv/jz+PN2NprZnGEVOh/gf/FXDupuaXlZ1HQujXZDNVf//ZGUB75X0RMWxkmVV7uL/22aS1TOt2tPx2SVj6A1DAoumQVgBiciGaAPiZaevJwqcXBxM5VkpuplAYpYHUhJdWkmBUK1iwCTy9Tm+c8XpU324NOkqmEplKpJKBVDIY561BR61H9W2T3ghuxycbteNdu3XeZZgmV6J13qV2vGu345ONicFSyqqNOExUwm/Xo0hUgo04lFJWTXrjjN/NvxIXSSxsSzBMkys9z5rjzd3nYjbvGI0Zwf243wAW1SjvpKcAPMjdH19Z7Kt+A6hMBO4mp1t3uL08Y+Xtr+ob9YuPALycfcy8fY+hTtQPBlsmvXGPS6VSWBZzq6v5BXbkAbFOmgCOlQ/Wbi2xlxwRZd/3er3etY6N4HK5HGRZFgJFoOk4zuUDieMQCIAzIUQliqLmtQCttTE8zwtc1w193y+Oa77vF13XDT3PC27SGh3/6fn3vs2pgX8Bg8wBdrm0KpsAAAAASUVORK5CYII=";var button_debug="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAKlSURBVDiN3ZVNSJRRFIbf8818zfiXQoamJWpYtAkqIguCQvvZmZQg1KJy0WZwES0swpAstCBcRSpYgYXmQjFcJFiaGi20onSjjDTTzICOpqPOz3fvnXtblGLOqEPgprO6cN/34dz3wLmklMJmlLYp1P8bPFXUfhFVVTHrKZbhTRd1JgVF0KcrLe1nInxJfnVekczK6ip9AIWoAPN6wPFTL3O50KesOk9XJGmKBVRKOKGYQTWDcA8KCgSKBl8XLGTQBlPw5MiCx5Ydn46FsL/UGtYKCZrGJL8xWvCUtEJp7ENZ9WrvupldtT9uDPCQc5dle29IMCRr8dVchIuY4IBEHA+zWyHOHdG8a4KHjtflputJt22Ohryp0NwbhCW4YMlMMDDB0D8/yp55e9ov2Gtzo/kjh0eg/vxHNVC4jj9RBSVDnLZlWbIgg2ia7cG3kEOmmpNtg9+L6qHuyHXBbw/VXFaEm61zA1e2mPWdxYlHmgHoKzVMCZhhkhrR7xcrlBYMV7Su1EQMb14aHZXTLQdn5HxfSeJRsyH48p2hOIaNCeRb89C6+KEyx5rWNbro8bU5uh0KFX9xIjK2eRvPzcj5M0SUc8CU/Wop04AIgcIKr/1D+BSwhw/rOXefz737PMhHJjIyMkpWcyLAFoulnYiOuVwu1wv/APsYGkd34CtqfB0wBMc2Suhs8vcqSLSd1fefYIxtdbvdras5EVHY7Xbf0nmEO/2j4gcAIIXiuSEMPU/bUTcmJ8X9xY69nPNhr9e7uJoRteOVRUQNAFpSVNyTcvNp1wAbQ5f4MktElwD0WSyW9DW9seyKht3XkieNhbJ69f6hZtL2OJ1O+0aemMCZmZmpAPoB9LjdbtuGBsS4Nq1WKyeiWo/HUx6LHoix43+pTftBfgH9ckVzZr7+0wAAAABJRU5ErkJggg==";var button_download="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAEgSURBVDiN7dSxSwMxFMfxb0qloxQ65RwdBIUb3ATFwg110E1RsP+IyyWL/0gFRTcd7HBQUXBzOFBwcPS2QnEsis+lhVauSYucIPgg0yOf/MgLUSJCEVUqRP2HfwUuT2q8bp8bhYpdmwWxC1d7Jq+nXM/tZevEKCEXF4VdvD7MRZ1wEAQGiJu1Os1afazX6nZodTsANsuy2RMP8YPqBvvVdQDOenec9m6dqBcexXfn1wC4eLv3ok44WT02eIYHYqOHo9wDnIkvQ2uUyIThKbuTxrmoEx5eQaMS0qiEY712P6XdT+Gnw4vmVojKywAkH08k749O1AuP4pulJQBuPp+9KAAi4l1aa6O1lsEy0+zxJv6WHG/SQU0Nz1p/79ssDP4Cg+q5/b71LOIAAAAASUVORK5CYII=";var button_fullscreen="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAFESURBVDiN7ZS9SgNBFEbPJCKSxtpVsA3RJ7C0Dyk0laKtb2BSGdIkNr5BirQqCFoqgqUotgpiZ4Iign/Z3cnsOhZmdaM7hEVWEPxgqsM93Jk7XKG1JomkErH+i39FPGQCrfyWBtCC8sRusR5m1/nNikCsAYzvFUUssaskAEJ/r3O9LmLALzWKmzcHAEyNTM45s41smJ11rnKXsg1AlcV44sbdPgA1a8l3lFwOs3v1fBTwatyOgXWAx+5LwU27fcBWdibgppiH12qVADamV/LBe39EYwc8tjiI9BXOF7Hy1KAyhGkJbWfLdYBzv1140k7f8EZTmZNsauwQYP6iFtm5sWPHk6sAt97D8Y467WMLwzO2k37nQExx7/pSqzTQDLOOL3POq4wq+4zWOvJYlqV7pxTBKgE31Se2K4zD+2n+3tpMTPwGJ7yv1xBxhTcAAAAASUVORK5CYII=";var button_higher_quality="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAG+SURBVDiN7ZRNSFRhFIafMz96p6RFUODMlXCZRBhJJLTJjSBBgTSbIQoqqFWbgoSBNkK4cycIRi6shVuDBFdF0SKK/hY1iZJzFUIhzWnuN/fe77TIwBK7MjBB0Ls8h/Ocl8PhFVWlEUo0hPof/FfAqS2V/GRyoWLvgDxse5C/Xy9Yfnm3/GTy46o/DloAIoGCqMxa0VMoZRKJF2D71fI5s54ZdZ+ere7I8ZuVLwOodi2H62uOpCstyeYiIs9RLoCsgO4GHADfMT0unN6RYxFJZrPZcaAAREDhduu5zoOZtpsAJbM4VDJLnX17jvYCteZd1b2Hp69XYh3ncrkBVe0C3m8sKr7+Nve1PbUfgOLixDXA6ckcAmgya6luYCYWXC6XB4HBzbVbHefv+YHpBjjTcmwCUesH5rICr2rzcye2OcXWr/hNQRTgBwaAk00dFwH8wPApXGZ4dar9BszWBQ43wCERb8OFkQOJfcefBB+OPKuVNJ1Ov9tuLhZciyKqGEIsd6uPrm5qvfTmvaW6wUEU4tsfYOCSiPRbax9ba8f+NCdxeey67hVVHQGM53lOnJGfalhWxDquV/9ebDYM/B1CM7lrgVPaxwAAAABJRU5ErkJggg==";var button_minimize="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAABmSURBVDiNY/z//z8DLQATTUwdNXjU4FGDB8hgFlwSBxwbOYgxwGF//Q+SDP71kfU7MQYzMDAwkmbwn19Emosd4DT455/fFBnMiKs8lpaWJqqgfvr0KdagoFmqwOliSsHQyyA0MxgAF2sZ8VNoIFcAAAAASUVORK5CYII=";var button_muted="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAKXSURBVDiN5ZRPSJNhHMe/z96981+SE9famIhWFHV0KQX592BU0qUsiFCQPFQUdOrQZR2yEgwpwszsUnRYFiIpHSQlqKC8CGWF4sS9a7o5dbq97/M+756ng5dcIxcoBH3he/rB5/fly48fEUJgM2TaFOr/B/YQj+lN2a2GDQdXuDO7DMGbvQ1eKXlmThcyffiFwywnegHoXPCLc8uR4QkWXPCEvFHlk0IE1l5XWokn654cNBAf1Rg9oOkUE3PT9ePLPtqxMFDiztnRJYQw0ko8VtldTEw8Y3WzqRaEtAOwAMB0fLYswpZ2XZ17uu2Idf/QZdux4wAeJDNSJtY5HaQGG6cGG1cNek9lmkVlGqLaClRGM66FnhkC4vHI0pg7ZqjVo+6u7LTAMT0ua4ziV8d1DREaRWu4F0dz3TnPi660r3CtNaCGjbgc35MWOEAjrt/ACQ1tkT4UyTZWn1U6FdONuMVieRhjas6kFuDJjJQda0yHyunqZmKCLJtxZ74fNpKLKss+rWW2My8Bnt1tb1SjTPC7i4NbmnB7fXBHdMBvAimxmbfifH4d7s+/gkkQnMgsR8CIiAR4GEB8WeXnPrLJlRkjFE6rihCPMoNwNFtrcT3sxWd9BjXSXuhMh24wOByOiptZp2tURi8N0c+CMeZPZpBUb/PMzrrSRmult22+L/iF+q0ACrJgKTgllcNCzIvORF45JN7zyHj7fgaRbEVRLqwLHq72mHks80Nn5PXCO+37dkmSKiilVkmSBgDsJoSM+P3+KpfL1SSEuAGgWlGUb2klri0ua/2qKydlWT7k8/l+AEBhYWE+5/wlIUQAaBFC9CQSibPBYHAqVZ0QQqwxALPT6ey32+3FybO/ccrEG6F/89H/ST8BJ/eSBJQag0AAAAAASUVORK5CYII=";var button_pause="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAERSURBVDiN7ZS7SgQxAEVPZt1hFGTBZsHKasHGclu/wG7Bz/BTxF+wU+z8Aq1kShELKytht/AxmskkmZlY6IzxMUWELRY23b25HA4pIpxzzONEc6EuwYsNXum6eNg7O3K4/SavVmYEoHrxXdMJxMnm+eQgCPym8wEwbLK1dQRg+tXQmw2Cja+ebsc7a1ttPn68WAeYbOy23XV+Px6FgmWpYmlUm4sqigD8TpYqDjZWViOFB6b4gGn1bRMM1taQo371uWesrQkHF6VG1v5TfBr3vK7+h3FmczMTz22W/bIGmJmvLnN5p3In+LRKU2C7yXEUvwJcljf+LD0MBQMvwLS1y7IaIEmS6Y/Nn0csP/rFBb8Dxfx0WKljgVAAAAAASUVORK5CYII=";var button_play="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAFKSURBVDiN7dW9SgNBEAfw/wRB0ScQ8gTWSqyEVDZprfISlulMH7ARG9EupBIUQcwDSDTGgB+IBEUMbHJFRGKR292b21sLI0pgIxeNVQamGva3wy47S9ZajCMSY1En8L/AU65CK7O/RoQFopnC/FHGjws7O1ZGzklWeT/oNp5Wi1kQ6E/g487lkgo0VKCTknXxLr13dp/eXf41LEM5LVnhW6Z6oa7UV7aL1fRWcmSYDUOxHkySgc6y5MZpanOjvrgz61rvvDw2Boq1q0wAoUues2MnrA1DDsAWQE0/4tC/wGvUAwC0sBGz45ChEl9w07zgQNXwbDqfewwNJxz2j+LN+ijzDa5ME/YDLBFRTgghRoJ7kdIn+hqV6AEMAwBVIloXQpz/1O1QuBzd1vqzWlhrc57nlWyM4e2EAfQA5AEU2u127CdNkx9k7PA7Y1e8lCIaYdsAAAAASUVORK5CYII=";var button_stop="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAAAAADFHGIkAAAAAXNCSVQI5gpbmQAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAG2SURBVBgZbcE/jAxRHAfw73vvN7Nv9p+9dRuLk9iIE1dRcAkFURDZamn0JHSiUepEoaVQX6tViCsoNHeJxhXHkTiy4XKx3JnZnZn33u+ZXZfT3OcjHmFvtCqJwiAMSMI7a/LcGMvsQZLCUhTpsDGl0s1Rmo5G8OzZUxDoSqXZ7i8tD2bnj5XXScA5x16d09V6J7n3pXbiVGlt4fMV4Rw7x54iXZ1ZWLrWndPKbr9YvPWgbW1uwOpy5eDL5Zu3z+6vVeutk0eGz7psjLWsuvX8ae9uR2Is6pQ/Ll6N89xYqcsP52/MYIe6dDFeqYUkQfr3cPYM8OQTChd6+vrbV3cCCVD4rXZYAM/fYKyHufZ7Q0p4WR7Uj4f4L5ySWsAzxYnKfijkmIgTYWWapMbS/ap6nQkMMPFhxfTzx38AEBB/bQo/xMTm6tZPMigQvEs29vlGKwBw1MT9QZSiQBhV1rVVp89XUXj3fWMrYhREC6FvHNLKAxDeJGuloUeBPLLyr/xAwAJeuqwfpIwxMQ2gJEQzkGAeblPmMCGmUZAlCM9CgDPsIIzxCEoJy4xdJPAPMwCBXdTB3v4CXaW5Fw2FHHQAAAAASUVORK5CYII=";var button_toggle_plugin="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAEjSURBVDiNY/z//z8DLQATTUwdNZguBrNgE3wQuEGA9c/v91h1MP6zlN4UfoIsgxk+fGD4wY5d6j8TIyEzGRgYcATFnI9H+H/8/smADS9/vl+HGIOxO4vhO8P3Xz+xyqiwSmiftp3mAeN/ZXm9x2F//R+iDP7xg4HhB9sPrAbLMgkV/Pz9owAu8IVfkIGB4QORLv7B8OM3dhejg3vfHrA4YBHHavDZvw+/Xnr7FM6XZhFiCOIyw2rwJeY33AwMDG+IMvjBr7d/fv3+Bef//P8btw9+Yg8y7AY/ePBFUlLSE8YXY+AJ+PH7Zzo2tdiNxWHw/////zAwMOyA8VPlvTS+43Dxd2YSDEYHO/5dvrDt30WscmxMbB+xidOsrGAcrUFobjAA4JR2HtFlEWEAAAAASUVORK5CYII=";var button_unmuted="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIUSURBVDiN7ZRNaBNBGIbfnd3UpLEQsGgySxJzsUVPIqUtKKIiaI/+BMVevHjpwZPFs14EwVMEFTwYIVB6kICCPRREEATrQcQSJZYi3fyoRZPY7M7u/HgQROKI6yGC4Affad555uXl+8ZQSqEfRfpC/Q/+K2ArrNA5dm8LAj4HYFgSMUWU+VhKNZO+n1/Q6UM5rk4Vd3vd7pIXsENuwJAun6q5gTfDOCtVjxYnQztePnwrIzgGAcAkZBIK1xWMGAC88z+MHsxkqBCicMk+c3d8844CgD29DEO3IEv7Co8AY7/u0TV/nW0zh+jx1atjA8QqzedmYzIQufGn55s/6rRRdPzuJi9g0DXjDELKxbntFz75kl98vbEmmQp29TK04BWvMfprsI8vvttyA7cbj8eLLmexl+5qtJehzdjjAVzFdEfwRIBzH28mAsljd7ZOW59lRN7oPInOhAHfbi9WAEwAwBCJYTq6FwkyCADwpQ8BuU4I6bQD63SFO+03vFYLFcV71WZN2UJTtlDlDVzbeIAV1vweRSqVOnIlmt/Z9dnlh+4LUwjxtpehnQrbtjPAt3EjhCSllMUBWOmT5hgSRpwNG9EclFWeF88WlpUz4jhO/ieIUuq3nc1mU5TS55RSRSmtKKVg2/YJSmnDtu0J3R2tY10lk8m4aZolACORSOQA57wshDhbr9df6fShwX9a/9632TfwV7TMPVNYMSByAAAAAElFTkSuQmCC";var button_update="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAKHSURBVDiN1ZXbS1RRFMa/dc5MjowU4yVmHCWZyezBjHLMILCwnoUIjcAeJKIbdAF98B+oIOihl8igoCIjw6DCBymhzBeZKRinMuyiOGfyklYzzeXss8/ePeSI2KiD4EML1sv37e/HYrFgk5QSa1HKmlD/S7BlpQdTDd1HpUKFEJITkSEgkiCKQyhxcMPv7GmcXhVYNzmHKa9msN5TnuJbKrfiKmrfnreMJiZGGGdY2L0zgZ6a/rN5qwYTEW8bvV3+20hC58Z8b8/1XOj0tnmXzGW640Bdh0tVxBMh5LGdr04F3W73iyP5dfXNBXsxGB9BviUPm3NcADBjkWJH5cvT41lNbArWrnPDxwXvnpPOdP0Y0F9HP+DKxGO0h+/ia3JS6NwoiJvmoaxXkeDJfYwbCKdmBgBA07RhLs2LlyYfISH0ZwmhB/qiQYVxAzEj0ZA92EiVM85wc7b3QFpzOByXATy12WzNNptt/yc9Ms44A+d8dyZGxnPT9FnTbcmHR90YTGuhUIgBmJ+uteJwQOdG6TfzJ8t64hE9ojLOsGfdlrKupiZ1sd/hO2H1Wcq2Mc7wLjVmyxr8PBX8GDOSUE1lqxjy3Ltf1e5Ie50VrYUbYo4HZJL3l5FAXyo0nImR8dyKi4uv11q9Jw9aa0B/pQSAACAJoGoAuRISXWwQb8zRa5qmncsK7HQ6PaqqBj1UZG9Ud8XtlGNf6MdkKv7QHLSPye9RAJWapv1zxxnBc1MfJ6IbCoicWJ8qo6JxAPRFTpdOIZojIAURtYTD4TtZryJdJSUl9VLKWwA2LbI+SylbIpFI/1LZZcEA4PP5rJFIpApANQAQkd/lcg35/X5judyK4NXWmv0gfwDbFT1AjIcyUgAAAABJRU5ErkJggg==";var header_background="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAYCAAAAAAaUhg7AAAAAXNCSVQI5gpbmQAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAmSURBVAjXY2xjYGC5CMR/gfgfFP/FTzOKMjAwMaBilv9YxOQYGACA4w25ovZkiQAAAABJRU5ErkJggg==";var slider_knob="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAUCAQAAADBqR7CAAAAAnNCSVQICFXsRgQAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAABrklEQVQoz22RMUsbARiGv7vL9Y5y9ojcUOkQoxBjGo7kBhHEonTo0BZBkbT9BVLqT2g3u7jYFJQgEqvg5CAUsYVmCKlDKDgVrYs4mErjJCTFFK9Ph5DrhZZne9+Hb3g/QRAEDZNeYiRJkyRGLyZau2sLEWyGmGKRXUrsssgUQ9hEOoqKTdbPXzXLLPGSJcpcNf08WWxURFAwSbYKR3hYJBglgYXHEa0CSUwUQcO5nq03B0iwT4MGDfZJMEC9eT2LgyboxC+LC0QpcxZQJsoCl0Xi6IJBql6ZYJKvXUwywY8KKQzBYLhWSZHjcxc5UtQqDGMIOrH62zlc3neRZo6LPDF0QcNpPV33bdbYDFjlFuv+rxwOqqBgce/gu8E8KwHPMTg4YxwLRRBM0t8+ZXgYuvIAj+OP3MXorNtz+OwFg+wE9DPP8QxWe11BkD2teHGDZUqUKPEGnY3anhJ+oyCnr0eYoUqVKo8Y4/RVpwmU8/i733184ZAqDpv++Z1/FMT7EOEJJ0wTwdv5m4eU7ON+VG6iEid7/78Kktm+jUYfma1w2qW4Ubfg/nRXXDuc/gE0j6y40AVJmAAAAABJRU5ErkJggg==";var css_data ="body div#top_content_boxdiv.dmpi_video_playerv4 div.linterna-magica,.linterna-magica{background-color:transparent!important;color:black!important;text-align:center!important;position:relative!important;clear:left!important;height:auto!important;z-index:99!important;min-height:212px!important;}.linterna-magica{border-bottom:1px solid #36393E!important;}.linterna-magica p{color:#ffffff!important}.linterna-magica-web-log-header a,.linterna-magica a{outline:0!important;}div.linterna-magica-controls-time-slider{height:12px!important;}.linterna-magica-toggle-plugin,.linterna-magica-remote-clip-buttons a{display:block!important;text-decoration:none!important;width:106px!important;height:24px!important;position:absolute!important;right:0px!important;background:url('"+button_about+"') 0 0 no-repeat!important;line-height:3000px!important;overflow:hidden!important;bottom:0px!important;}.linterna-magica-logo{display:block!important;text-decoration:none!important;width:106px!important;height:22px!important;line-height:3000px!important;overflow:hidden!important;background:url('"+button_about+"') 0 0 no-repeat!important;cursor:help!important;z-index:9999!important;float:right!important;}.linterna-magica-lower .linterna-magica-logo{width:24px!important;background:url('"+button_about_lower+"') 0 0 no-repeat!important;}.linterna-magica-remote-clip-buttons,.linterna-magica-toggle-plugin-wrapper{position:relative!important;z-index:999999!important;display:block!important;right:0px!important;width:100%!important;height:24px!important;background-color:transparent!important;clear:both!important;top:0px!important;}.linterna-magica-toggle-plugin-outer-frame{display:block!important;width:106px!important;height:24px!important;position:absolute!important;right:0!important;top:0!important;background-color:#666666!important;background-image:-webkit-gradient(linear,left top,left bottom,from(#666666),to(#1a1a1a))!important;background-image:-webkit-linear-gradient(top,#666666,#1a1a1a)!important;background-image:-moz-linear-gradient(top,#666666,#1a1a1a)!important;background-image:linear-gradient(to bottom,#666666,#1a1a1a)!important;border-color:#222222!important;border-width:1px 0!important;border-style:solid!important;-webkit-border-radius:6px 6px 0 0!important;-moz-border-radius:6px 6px 0 0!important;border-radius:6px 6px 0 0!important;}.linterna-magica-remote-clip-buttons a{float:right!important;right:0px!important;}a.linterna-magica-remote-clip-visit-page-button{background:#3e3e3e url('"+button_about+"') 0 0 no-repeat!important;border-left:none!important;-webkit-border-radius:0 6px 0 0!important;-moz-border-radius:0 6px 0 0!important;border-radius:0 6px 0 0!important;}a.linterna-magica-remote-clip-close-button{background:#3e3e3e url('"+button_close+"') 0 0 no-repeat!important;height:24px!important;width:24px!important;position:absolute!important;display:block!important;right:104px!important;border-right:none!important;-webkit-border-radius:6px 0 0 0!important;-moz-border-radius:6px 0 0 0!important;border-radius:6px 0 0 0!important;}body div#top_content_box div.dmpi_video_playerv4,div.linterna-magica-update-info-box,.linterna-magica-update-info-box,div.linterna-magica-about-box,.linterna-magica-about-box{background:#000000!important;font-size:12px!important;line-height:1.3em!important;padding-top:20px!important;font-family:'Liberation Sans','Arial',sans-serif!important;display:block!important;position:relative!important;z-index:999999!important;width:100%!important;padding-bottom:20px!important;}.linterna-magica-about-box{overflow:auto!important;}.linterna-magica-update-info-box p,.linterna-magica-about-box p{margin:1px 5%!important;padding-top:8px!important;color:#ffffff!important;text-align:center!important;font-weight:normal!important;}.linterna-magica-update-info-box object,.linterna-magica-about-box object{height:70px!important;margin-left:25%!important;position:relative!important;display:block!important;}.linterna-magica-update-info-box p a,.linterna-magica-about-box p a{color:#bbbbbb!important;text-decoration:underline!important;font-style:none!important;}.linterna-magica-update-info-box p a:hover,.linterna-magica-about-box p a:hover{text-decoration:none!important;}body div#top_content_box div.dmpi_video_playerv4div.linterna-magica-controls,.linterna-magica-controls{background-color:#666666!important;background-image:-webkit-gradient(linear,left top,left bottom,from(#666666),to(#1a1a1a))!important;background-image:-webkit-linear-gradient(top,#666666,#1a1a1a)!important;background-image:-moz-linear-gradient(top,#666666,#1a1a1a)!important;background-image:linear-gradient(to bottom,#666666,#1a1a1a)!important;border:none!important;color:black!important;height:22px!important;width:inherit!important;font-family:'Liberation Sans','Arial',sans-serif!important;font-size:10px!important;font-weight:normal!important;display:block!important;bottom:0px!important;position:relative!important;text-align:center!important;color:#e6e6e6!important;}a.linterna-magica-controls-buttons{display:block!important;float:left!important;height:22px!important;width:22px!important;position:relative!important;text-decoration:none!important;padding:0px!important;overflow:hidden!important;line-height:3000px!important;outline:none!important;}a.linterna-magica-controls-buttons-play{background:url('"+button_play+"') 0 0 no-repeat!important;margin-left:1px!important;}a.linterna-magica-controls-buttons-pause{background:url('"+button_pause+"') 0 0 no-repeat!important;margin-left:1px!important;}a.linterna-magica-controls-buttons-stop{background:url('"+button_stop+"') 0 0 no-repeat!important;width:24px!important;}a.linterna-magica-controls-buttons-mute{background:url('"+button_unmuted+"') 0 0 no-repeat!important;width:24px!important;}a.linterna-magica-controls-buttons-unmute{background:url('"+button_muted+"') 0 0 no-repeat!important;width:24px!important;}a.linterna-magica-controls-buttons-fullscreen{background:url('"+button_fullscreen+"') 0 0 no-repeat!important;width:26px!important;float:right!important;}body div#top_content_box div.dmpi_video_playerv4div.linterna-magica-controls-horizontal-slider,.linterna-magica-controls-horizontal-slider{line-height:10px!important;float:left!important;clear:none!important;height:10px!important;position:relative!important;color:#ffffff!important;width:100%!important;}.linterna-magica-controls-slider-knob{padding:0px!important;height:8px!important;width:8px!important;display:block!important;position:relative!important;top:-1px!important;background-color:#e84ead!important;background-image:-webkit-gradient(linear,left top,left bottom,from(#e84ead),to(#951b66))!important;background-image:-webkit-linear-gradient(top,#e84ead,#951b66)!important;background-image:-moz-linear-gradient(top,#e84ead,#951b66)!important;background-image:linear-gradient(to bottom,#e84ead,#951b66)!important;border-style:solid!important;border-width:2px!important;border-color:#e6e6e6!important;-webkit-border-radius:6px!important;-moz-border-radius:6px!important;border-radius:6px!important;z-index:9999!important;}.linterna-magica-video-download-link{background:url('"+button_download+"') 0 0 no-repeat!important;height:24px!important;width:24px!important;position:relative!important;text-decoration:none!important;padding:0px!important;overflow:hidden!important;line-height:3000px!important;outline:none!important;display:block!important;float:right!important;}.linterna-magica-toggle-plugin-header{background:url('"+button_toggle_plugin+"') 0 0 no-repeat!important;height:24px!important;width:24px!important;position:relative!important;text-decoration:none!important;padding:0px!important;overflow:hidden!important;line-height:3000px!important;outline:none!important;display:block!important;float:left!important;}.linterna-magica-toggle-plugin-header{position:relative!important;text-decoration:none!important;padding:0px!important;overflow:hidden!important;line-height:3000px!important;outline:none!important;display:block!important;float:right!important;}.linterna-magica-controls-slider-text{top:-20px!important;padding:1px!important;display:block!important;float:left!important;position:relative!important;font-size:11px!important;overflow:hidden!important;cursor:default!important;background-color:transparent!important;}.linterna-magica-controls-volume-slider{height:10px!important;width:80px!important;display:block!important;line-height:10px!important;}.linterna-magica-controls-time-slider-text{top:5px!important;color:#ffffff!important;margin-left:5px!important;}body.dm_page_html_videodiv#top_content_box div.dmpi_video_playerv4 divdiv.linterna-magica-hd-links-list,.linterna-magica-hd-links-list{width:350%!important;height:auto!important;bottom:35px!important;left:-270%!important;overflow-y:auto!important;overflow-x:hidden!important;background-color:#333333!important;border:solid #555555!important;border-width:1px 1px!important;position:absolute!important;font-size:13px!important;padding:0px 0!important;z-index:99999!important;}.linterna-magica-hd-links-list ul{padding:0!important;margin:0!important;list-style:none!important;}.linterna-magica-hd-links-list ul li{padding:0!important;margin:0!important;list-style:none!important;line-height:1.2em!important;}.linterna-magica-hd-links-list ul li a{padding:0!important;margin:0!important;color:#dddddd!important;padding:2px 5px!important;text-decoration:none!important;font-weight:bold!important;display:block!important;background:none!important;}.linterna-magica-hd-links-list ul li a:hover{background:#222222!important;color:#ffffff!important;}.linterna-magica-switch-hd{background:url('"+button_higher_quality+" ') 0 0 no-repeat!important;height:24px!important;width:24px!important;position:relative!important;text-decoration:none!important;padding:0px!important;overflow:hidden!important;line-height:3000px!important;outline:none!important;display:block!important;float:left!important;z-index:9999!important;}.linterna-magica-hd-wrapper{display:block!important;float:right!important;position:relative!important;width:24px!important;}#videoPlayer,div.sectionContent,section,#video-wAd,bleeding,multimedia{overflow:visible!important;top:0px!important;padding:5px!important}.linterna-magica-side-update-notifier-button-update-icon,.linterna-magica-update-notifier-link{background:url('"+button_update+"') 0 0 no-repeat!important;height:24px!important;width:24px!important;position:relative!important;text-decoration:none!important;padding:0px!important;overflow:hidden!important;line-height:3000px!important;outline:none!important;display:block!important;float:right!important;}.linterna-magica-side-update-notifier-button-update-icon{background:url('"+button_update+"') 0 0 no-repeat!important;left:-106px!important;}.linterna-magica-web-log-link{background:url('"+button_debug+"') 0 0 no-repeat!important;height:22px!important;width:22px!important;position:relative!important;text-decoration:none!important;padding:0px!important;overflow:hidden!important;line-height:3000px!important;outline:none!important;display:block!important;float:right!important;}div.linterna-magica-web-log,.linterna-magica-web-log{display:inline!important;border:1px solid #36393E!important;background-color:#000000!important;color:black!important;text-align:left!important;position:relative!important;clear:left!important;position:fixed!important;float:right!important;right:10px!important;bottom:28px!important;left:10px!important;right:10px!important;height:250px!important;z-index:10000000000000000!important;-webkit-border-radius:6px 6px 0 0!important;-moz-border-radius:6px 6px 0 0!important;border-radius:6px 6px 0 0!important;}.linterna-magica-web-log p{color:#ffffff!important;margin:0.5em 0!important;}.linterna-magica-web-log-header{text-align:left!important;line-height:10px!important;color:#333333!important;background-color:#666666!important;background-image:-webkit-gradient(linear,left top,left bottom,from(#666666),to(#1a1a1a))!important;background-image:-webkit-linear-gradient(top,#666666,#1a1a1a)!important;background-image:-moz-linear-gradient(top,#666666,#1a1a1a)!important;background-image:linear-gradient(to bottom,#666666,#1a1a1a)!important;height:24px!important;line-height:24px!important;border:solid #666666!important;border-width:1px 0px!important;position:relative!important;overflow:visible!important;vertical-align:middle!important;-webkit-border-radius:6px 6px 0 0!important;-moz-border-radius:6px 6px 0 0!important;border-radius:6px 6px 0 0!important;}.linterna-magica-web-log-header p{font-size:12px!important;position:relative!important;line-height:24px!important;padding:0!important;margin:0!important;letter-spacing:normal!important;font-family:'Liberation Sans','Arial',sans-serif!important;text-indent:5px!important;}.linterna-magica-web-log-header a{display:block!important;margin:0!important;top:0!important;position:relative!important;padding:0!important;color:#ffffff!important;width:24px!important;height:24px!important;text-decoration:none!important;overflow:hidden!important;line-height:3000px!important;}.linterna-magica-web-log-right-buttons{float:right!important;right:0!important;}.linterna-magica-web-log-left-buttons{float:left!important;left:0!important;}.linterna-magica-web-log-header a.linterna-magica-web-log-close{background:url('"+button_close+"') 0 0 no-repeat!important;}.linterna-magica-web-log-header a.linterna-magica-web-log-collapse{background:url('"+button_minimize+"') 0 0 no-repeat!important;}.linterna-magica-web-log-messages{height:85%!important;overflow:auto!important;padding:5px 15px!important;line-height:1.35em!important;}.linterna-magica-log-to-web-message span{display:block!important;}.linterna-magica-log-to-web-message{border-bottom:1px solid rgb(152,152,152)!important;border-left:1px solid rgb(152,152,152)!important;padding-left:3px!important;padding-bottom:3px!important;}.linterna-magica-side-update-notifier-button-wrap,.linterna-magica-web-log-debug-button-wrap{position:fixed!important;left:20px!important;bottom:0px!important;line-height:10000px!important;width:154px!important;height:22px!important;padding:0!important;margin:0!important;border:1px solid #36393E!important;z-index:10000000000000000!important;background-color:#666666!important;background-image:-webkit-gradient(linear,left top,left bottom,from(#666666),to(#1a1a1a))!important;background-image:-webkit-linear-gradient(top,#666666,#1a1a1a)!important;background-image:-moz-linear-gradient(top,#666666,#1a1a1a)!important;background-image:linear-gradient(to bottom,#666666,#1a1a1a)!important;border-color:#222222!important;border-width:1px 0!important;border-style:solid!important;-webkit-border-radius:6px 6px 0 0!important;-moz-border-radius:6px 6px 0 0!important;border-radius:6px 6px 0 0!important;}.linterna-magica-side-update-notifier-button-wrap{left:185px!important;}p.linterna-magica-side-update-notifier-button-wrap:hover,p.linterna-magica-web-log-debug-button-wrap:hover{bottom:0px!important;}.linterna-magica-web-log-debug-button-wrap a:hover{text-decoration:none!important;padding:0!important;margin:0!important;color:black!important;}.linterna-magica-side-update-notifier-button,.linterna-magica-web-log-debug-button{background:transparent url('"+button_about+"') 0 0 no-repeat!important;height:22px!important;width:106px!important;display:block!important;border:none!important;left:24px!important;position:relative!important}.linterna-magica-side-update-notifier-button-close,.linterna-magica-web-log-debug-button-close{background:transparent url('"+button_close+"') 0 0 no-repeat!important;width:24px!important;height:24px!important;position:relative!important;left:130px!important;display:block!important;overflow:hidden!important;border:none!important;top:-22px!important;}.linterna-magica-web-log-debug-button-bug{background:transparent url('"+button_debug+"') 0 0 no-repeat!important;height:24px!important;width:24px!important;display:block!important;position:relative!important;overflow:hidden!important;border:none!important;left:-24px!important;}.linterna-magica-video-object-wrapper,.linterna-magica-video-object,.linterna-magica-video-object p{display:block!important;position:relative!important;background-color:black!important;}.linterna-magica-update-info-box,.linterna-magica-about-box,.linterna-magica-video-object-wrapper{border-top:1px solid #36393E!important;border-right:1px solid #36393E!important;}.linterna-magica-controls-time-slider,.linterna-magica-controls{border-right:1px solid #36393E!important;}.linterna-magica-controls-time-slider-outer-frame{height:10px!important;background-color:#1a1a1a!important;background-image:-webkit-gradient(linear,left top,left bottom,from(#1a1a1a),to(#666666))!important;background-image:-webkit-linear-gradient(top,#1a1a1a,#666666)!important;background-image:-moz-linear-gradient(top,#1a1a1a,#666666)!important;background-image:linear-gradient(to bottom,#1a1a1a,#666666)!important;border-color:#222222!important;border-width:1px 0!important;border-style:solid!important;position:relative!important;}.linterna-magica-controls-volume-slider-outer-frame{display:block!important;float:left!important;width:80px!important;height:10px!important;background-color:#1a1a1a!important;background-image:-webkit-gradient(linear,left top,left bottom,from(#1a1a1a),to(#666666))!important;background-image:-webkit-linear-gradient(top,#1a1a1a,#666666)!important;background-image:-moz-linear-gradient(top,#1a1a1a,#666666)!important;background-image:linear-gradient(to bottom,#1a1a1a,#666666)!important;border-color:#3E3E3E!important;border-width:0px 1px!important;border-style:solid!important;position:relative!important;-webkit-border-radius:5px!important;-moz-border-radius:5px!important;border-radius:5px!important;margin-top:6px!important;}.linterna-magica-controls-volume-slider-outer-frame .linterna-magica-controls-horizontal-slider-progress-bar{-webkit-border-radius:2px!important;-moz-border-radius:2px!important;border-radius:2px!important;top:4px!important;}.linterna-magica-controls-horizontal-slider-progress-bar{background-color:#e84ead!important;background-image:-webkit-gradient(linear,left top,left bottom,from(#e84ead),to(#951b66))!important;background-image:-webkit-linear-gradient(top,#e84ead,#951b66)!important;background-image:-moz-linear-gradient(top,#e84ead,#951b66)!important;background-image:linear-gradient(to bottom,#e84ead,#951b66)!important;width:0!important;height:4px!important;position:absolute!important;display:block!important;top:3px!important;}.linterna-magica-lower{}.linterna-magica-ws-video-parent{background-color:transparent!important;}";
  1538. style.type= "text/css";
  1539. style.textContent=css_data;
  1540. head.appendChild(style);
  1541. }
  1542. LinternaMagica.prototype.check_flash_plugin = function()
  1543. {
  1544. var is_installed = false;
  1545. var nav = window.navigator;
  1546. if (nav && nav.mimeTypes &&
  1547. nav.mimeTypes.length > 0 &&
  1548. nav.plugins &&
  1549. nav.plugins.length > 0)
  1550. {
  1551. if (nav.mimeTypes["application/x-shockwave-flash"] &&
  1552. nav.plugins["Shockwave Flash"])
  1553. {
  1554. is_installed = true;
  1555. }
  1556. }
  1557. if (is_installed)
  1558. {
  1559. var flash_plugin = nav.plugins["Shockwave Flash"].filename;
  1560. var plugin_name = /gnash/i.test(flash_plugin) ? "Gnash" :
  1561. /lightspark/i.test(flash_plugin) ? "Lightspark" :
  1562. /totem-vegas/i.test(flash_plugin) ? "Totem Vegas" :
  1563. "a flash plugin";
  1564. this.log("LinternaMagica.check_flash_plugin:\n"+
  1565. "Flash plugin ("+plugin_name+") detected. ",2);
  1566. }
  1567. this.plugin_is_installed = is_installed;
  1568. }
  1569. LinternaMagica.prototype.is_swf_object = function(element)
  1570. {
  1571. if (!/HTML(embed|object|iframe)element/i.test(element))
  1572. {
  1573. return null;
  1574. }
  1575. var detected_via ="";
  1576. var is_swf = false;
  1577. var classid_string = ".*D27CDB6E-AE6D-11cf-96B8-444553540000.*";
  1578. var classid_re = new RegExp(classid_string, "i");
  1579. if (element.hasAttribute('type') &&
  1580. /.*-shockwave-flash.*/.test(element.getAttribute("type")))
  1581. {
  1582. is_swf = true;
  1583. detected_via = "type";
  1584. }
  1585. else if (element.hasAttribute("codebase")
  1586. && /.*flash.*/.test(element.getAttribute('codebase')))
  1587. {
  1588. is_swf = true;
  1589. detected_via = "codebase";
  1590. }
  1591. else if (element.hasAttribute('classid')
  1592. && element.getAttribute('classid').match(classid_re))
  1593. {
  1594. is_swf = true;
  1595. detected_via = "classid";
  1596. }
  1597. else if (element.hasAttribute("data") ||
  1598. element.hasAttribute("src"))
  1599. {
  1600. var attr = element.getAttribute("data")
  1601. ? element.getAttribute("data") :
  1602. element.getAttribute("src");
  1603. if (attr.match(/\.swf/))
  1604. {
  1605. is_swf = true;
  1606. detected_via = "file extension (.swf)";
  1607. }
  1608. else if (element.localName.toLowerCase() == "iframe")
  1609. {
  1610. var self = this;
  1611. var val = this.call_site_function_at_position.apply(self,[
  1612. "do_not_force_iframe_detection",
  1613. window.location.hostname]);
  1614. if (!val)
  1615. {
  1616. return false;
  1617. }
  1618. is_swf = true;
  1619. detected_via = "forced for iframe";
  1620. }
  1621. }
  1622. if (detected_via)
  1623. {
  1624. this.log("LinternaMagica.is_swf_object:\n"+
  1625. "SWF DOM object found.",1);
  1626. this.log("LinternaMagica.is_swf_object:\n"+
  1627. "SWF <"+element.localName+"> "+
  1628. (element.hasAttribute("id") ?
  1629. (" with id \""+element.getAttribute("id")+"\" " ) :"") +
  1630. "detected via \""+detected_via+"\".", 2);
  1631. }
  1632. return is_swf;
  1633. }
  1634. LinternaMagica.prototype.detect_object_in_remote_site = function()
  1635. {
  1636. var data = this.detect_remotely_embeded;
  1637. var url = null;
  1638. for (var s=0; s<this.remote_sites.length; s++)
  1639. {
  1640. var site = this.remote_sites[s];
  1641. var site_re = new RegExp (site.site_name_regex,"i");
  1642. var video_id_re = new RegExp (site.video_id_regex,"i");
  1643. var url_template_data = null;
  1644. if (window.location.hostname.match(site_re))
  1645. {
  1646. this.log("LinternaMagica.detect_object_in_remote_site:\n"+
  1647. "Seems object is located at it's original site."+
  1648. " Skipping remote site detection."+site_re, 2);
  1649. break;
  1650. }
  1651. this.log("LinternaMagica.detect_object_in_remote_site:\n"+
  1652. "Checking if object matches "+site_re, 5);
  1653. if (data.match(site_re))
  1654. {
  1655. this.log("LinternaMagica.detect_object_in_remote_site:\n"+
  1656. "Object matches "+site_re, 3);
  1657. url_template_data = data.match(video_id_re);
  1658. }
  1659. else
  1660. {
  1661. continue;
  1662. }
  1663. if (url_template_data)
  1664. {
  1665. url = site.url_template;
  1666. for (var to_be_replaced in site.regex_replace_map)
  1667. {
  1668. var index = site.regex_replace_map[to_be_replaced];
  1669. var pos = url_template_data.length-index;
  1670. var replace_data = url_template_data[pos];
  1671. replace_data = replace_data.split("&")[0].split("?")[0];
  1672. var regex = new RegExp ( "<"+to_be_replaced+">", "ig");
  1673. url = url.replace(regex, replace_data);
  1674. }
  1675. this.log("LinternaMagica.detect_object_in_remote_site:\n"+
  1676. "Extracted remote link to video clip for object "+url, 1);
  1677. break;
  1678. }
  1679. }
  1680. return url;
  1681. }
  1682. LinternaMagica.prototype.remote_sites = new Array();
  1683. LinternaMagica.prototype.remote_sites.add_site =
  1684. function (site_name_regex, video_id_regex, url_template, regex_replace_map)
  1685. {
  1686. var site = new Object();
  1687. if (!regex_replace_map)
  1688. {
  1689. regex_replace_map = new Object();
  1690. }
  1691. if (regex_replace_map.video_id == undefined)
  1692. {
  1693. regex_replace_map.video_id = 1;
  1694. }
  1695. site.site_name_regex = site_name_regex;
  1696. site.video_id_regex = video_id_regex;
  1697. site.regex_replace_map = regex_replace_map;
  1698. site.url_template = url_template;
  1699. this.push(site);
  1700. }
  1701. LinternaMagica.prototype.remote_sites.add_site(
  1702. "vbox7\\\.com","ext\\\.swf\\\?vid=(.*)",
  1703. "http://vbox7.com/play:<video_id>");
  1704. LinternaMagica.prototype.remote_sites.add_site(
  1705. "youtube\\\.com|youtube-nocookie\\\.com",
  1706. "(v|embed)\\\/(.*)\\\&*",
  1707. "http://youtube.com/watch?v=<video_id>");
  1708. LinternaMagica.prototype.remote_sites.add_site(
  1709. "dailymotion\\\.com",
  1710. "swf(\\\/video)*\\\/(.*)\\\?*",
  1711. "http://dailymotion.com/video/<video_id>");
  1712. LinternaMagica.prototype.remote_sites.add_site(
  1713. "vimeo\\\.com",
  1714. "(moogaloop\\\.swf\\\?clip_id\\\=|\\\/video\\\/)(.*)",
  1715. "http://vimeo.com/<video_id>");
  1716. LinternaMagica.prototype.remote_sites.add_site(
  1717. "metacafe\\\.com",
  1718. "metacafe\\\.com\\\/fplayer\\\/(.*)\\\.swf",
  1719. "http://metacafe.com/watch/<video_id>");
  1720. LinternaMagica.prototype.remote_sites.add_site(
  1721. "video\\\.google\\\.",
  1722. "video\\\.google\\\.(.*)/googleplayer\\\.swf\\\?docid=([0-9-]+)\\\&",
  1723. "http://video.google.<tld>/videoplay?docid=<video_id>",
  1724. {tld:2, video_id:1});
  1725. LinternaMagica.prototype.remote_sites.add_site(
  1726. "viddler\\\.com",
  1727. "viddler\\\.com\\\/(mini|embed|simple)\\\/([a-zA-Z0-9]+)\\\/",
  1728. "http://viddler.com/v/<video_id>");
  1729. LinternaMagica.prototype.create_remote_site_link = function(object_data)
  1730. {
  1731. var p= document.createElement("p");
  1732. var a = this.pack_external_link(object_data.remote_site_link,
  1733. "Linterna Mágica >>");
  1734. var title = this.
  1735. _("Watch this video at it's original site with Linterna Mágica");
  1736. a.setAttribute("class", "linterna-magica-remote-clip-visit-page-button");
  1737. a.setAttribute("title", title + " ("+object_data.remote_site_link+")");
  1738. p.appendChild(a);
  1739. var close = document.createElement("a");
  1740. close.textContent="x";
  1741. close.setAttribute("href", "#");
  1742. close.setAttribute("class", "linterna-magica-remote-clip-close-button");
  1743. close.setAttribute("title", this._("Remove this button, if it overlaps images or text in the page."));
  1744. var close_click_function = function(ev)
  1745. {
  1746. ev.preventDefault();
  1747. var wrapper = this.parentNode;
  1748. wrapper.nextSibling.style.removeProperty("top");
  1749. wrapper.parentNode.removeChild(wrapper);
  1750. };
  1751. close.addEventListener("click", close_click_function, false);
  1752. p.appendChild(close);
  1753. p.setAttribute("class", "linterna-magica-remote-clip-buttons");
  1754. return p;
  1755. }
  1756. LinternaMagica.prototype.if_node_is_inserted = function(event,element)
  1757. {
  1758. this.log("LinternaMagica.if_node_inserted:\n"+
  1759. "Insetred node detected in element: "+event.relatedNode,7);
  1760. this.extract_objects_from_dom(event.relatedNode);
  1761. }
  1762. LinternaMagica.prototype.extract_objects_from_dom = function(element)
  1763. {
  1764. if (!element)
  1765. var element = document;
  1766. var objects = this.create_object_list(element);
  1767. for (var i=0, l=objects.length; i< l ; i++)
  1768. {
  1769. var object = objects[i];
  1770. if (object.linterna_magica_id != undefined)
  1771. {
  1772. this.log("LinternaMagica.extract_objects_from_dom:\n"+
  1773. "Skipping processed object with linterna_magica_id:"+
  1774. this.get_marked_object_id(object)+
  1775. ", localName <"+objects[i].localName+">"+
  1776. (objects[i].hasAttribute("id") ?
  1777. " and id: "+objects[i].getAttribute("id"):""),2);
  1778. continue;
  1779. }
  1780. var object_data = new Object();
  1781. if (this.skip_object_if_id(object.getAttribute("id")))
  1782. {
  1783. continue;
  1784. }
  1785. if (this.delete_object_if_id(object.getAttribute("id")))
  1786. {
  1787. if (object &&
  1788. document.getElementById(object.getAttribute("id")) &&
  1789. object.parentNode)
  1790. {
  1791. object.parentNode.removeChild(object);
  1792. }
  1793. continue;
  1794. }
  1795. if (this.is_swf_object(object)
  1796. || (this.is_swf_object(object)
  1797. && !this.is_swf_object(object.parentNode)))
  1798. {
  1799. var extracted_data = new Object();
  1800. var self = this;
  1801. var val = this.call_site_function_at_position.apply(self,[
  1802. "skip_video_id_extraction",
  1803. window.location.hostname]);
  1804. if (!val)
  1805. {
  1806. return null;
  1807. }
  1808. else if (typeof(val) == "boolean")
  1809. {
  1810. this.create_param_list(object);
  1811. extracted_data = this.extract_link_from_param_list();
  1812. }
  1813. else
  1814. {
  1815. extracted_data = val;
  1816. }
  1817. object_data.remote_site_link = extracted_data.remote_site_link;
  1818. object_data.link = extracted_data.link;
  1819. object_data.video_id = extracted_data.video_id;
  1820. object_data.hd_links =
  1821. extracted_data.hd_links || null;
  1822. if (!object_data.link && !object_data.video_id &&
  1823. !object_data.remote_site_link)
  1824. {
  1825. this.log("LinternaMagica.extract_objects_from_dom:\n"+
  1826. "No video_id, link or remote site link"+
  1827. " found. Not creating video oject or remote"+
  1828. " video button.",1);
  1829. continue;
  1830. }
  1831. if (object_data.video_id)
  1832. {
  1833. var self = this;
  1834. var val = this.call_site_function_at_position.apply(self,[
  1835. "skip_xhr_if_video_id",
  1836. window.location.hostname, object_data]);
  1837. if (!val)
  1838. {
  1839. return null;
  1840. }
  1841. else if(typeof(val) != "boolean")
  1842. {
  1843. object_data = val;
  1844. }
  1845. }
  1846. var parent = object.parentNode.localName.toLowerCase();
  1847. if (parent === "object" ||
  1848. parent === "embed")
  1849. {
  1850. this.log("LinternaMagica.extract_objects_from_dom:\n"+
  1851. "Using <"+object.localName+"> parentNode: <"+
  1852. object.parentNode.localName+">.",1);
  1853. this.mark_flash_object(object);
  1854. object = object.parentNode;
  1855. }
  1856. if (!object.parentNode)
  1857. {
  1858. this.log("LinternaMagica.extract_objects_from_dom:\n"+
  1859. "Object's parent node dissapeared."+
  1860. " No link found (yet) in this object.",1);
  1861. return null;
  1862. }
  1863. this.mark_flash_object(object);
  1864. object_data.parent = object.parentNode;
  1865. object_data.width = this.extract_object_width(object);
  1866. object_data.height = this.extract_object_height(object);
  1867. object_data.linterna_magica_id =
  1868. this.get_marked_object_id(object);
  1869. this.log("LinternaMagica.extract_objects_from_dom:\n"+
  1870. "Object linterna_magica_id set to: "+
  1871. object_data.linterna_magica_id,2);
  1872. if (object_data.remote_site_link)
  1873. {
  1874. this.log("LinternaMagica.extract_objects_from_dom:\n"+
  1875. "Link to remote site found."+
  1876. " Adding redirect button.",1);
  1877. var remote_site =
  1878. this.create_remote_site_link(object_data);
  1879. var before = object;
  1880. if (before && before.nextSibling)
  1881. {
  1882. object_data.parent.insertBefore(remote_site,
  1883. before.nextSibling);
  1884. }
  1885. else
  1886. {
  1887. object_data.parent.appendChild(remote_site);
  1888. }
  1889. object.parentNode.style.setProperty("overflow",
  1890. "visible", "important");
  1891. object.parentNode.parentNode.
  1892. style.setProperty("overflow",
  1893. "visible", "important");
  1894. object.parentNode.parentNode.
  1895. parentNode.style.setProperty("overflow", "visible",
  1896. "important");
  1897. continue;
  1898. }
  1899. else if (object_data.link)
  1900. {
  1901. this.log("LinternaMagica.extract_objects_from_dom:\n"+
  1902. "Removing plugin install warning.",2);
  1903. if (!object_data.parent)
  1904. {
  1905. this.log("LinternaMagica.extract_objects_from_dom:\n"+
  1906. "Object's parent node dissapeared."+
  1907. "A link is found for this object.",1);
  1908. return null;
  1909. }
  1910. this.remove_plugin_install_warning(object_data.parent);
  1911. this.log("LinternaMagica.extract_objects_from_dom:\n"+
  1912. "Creating video object.",1);
  1913. this.create_video_object(object_data);
  1914. }
  1915. else if (object_data.video_id)
  1916. {
  1917. if ((!/blip\.tv/i.test(window.location.hostname) &&
  1918. ((object.hasAttribute('src') &&
  1919. /blip\.tv/i.test(object.getAttribute('src'))) ||
  1920. (object.hasAttribute('data') &&
  1921. /blip\.tv/i.test(object.getAttribute('data'))))) ||
  1922. (/blip\.tv/i.test(window.location.hostname) &&
  1923. ((object.hasAttribute('src') &&
  1924. /blip\.tv\/play/i.test(object.getAttribute('src'))) ||
  1925. (object.hasAttribute('data') &&
  1926. /blip\.tv\/play/i.test(object.getAttribute('data'))))))
  1927. {
  1928. this.request_bliptv_jsonp_data(object_data);
  1929. }
  1930. else if ((
  1931. !/livestream\.com/i.test(window.location.hostname) &&
  1932. ((object.hasAttribute('src') &&
  1933. /livestream\.com/i.test(
  1934. object.getAttribute('src'))) ||
  1935. (object.hasAttribute('data') &&
  1936. /livestream\.com/i.test(
  1937. object.getAttribute('data'))))) ||
  1938. (/livestream\.com/i.test(
  1939. window.location.hostname) &&
  1940. ((object.hasAttribute('src') &&
  1941. /livestream\.com/i.test(
  1942. object.getAttribute('src'))) ||
  1943. (object.hasAttribute('data') &&
  1944. /livestream\.com/i.test(
  1945. object.getAttribute('data'))))))
  1946. {
  1947. this.request_livestreamcom_jsonp_data(object_data);
  1948. }
  1949. else if (this.wait_xhr)
  1950. {
  1951. this.log("LinternaMagica.extract_objects_from_dom:\n"+
  1952. "Waiting "+this.wait_xhr+
  1953. " ms ("+(this.wait_xhr/1000)+
  1954. " s) before requesting video link via"+
  1955. " video_id "+object_data.video_id+" ",1);
  1956. var self = this;
  1957. var data = object_data;
  1958. setTimeout(function() {
  1959. self.request_video_link.apply(self,[data]);
  1960. }, this.wait_xhr);
  1961. }
  1962. else
  1963. {
  1964. this.log("LinternaMagica.extract_objects_from_dom:\n"+
  1965. "Requesting video link via video_id "+
  1966. object_data.video_id,1);
  1967. this.request_video_link(object_data);
  1968. }
  1969. }
  1970. }
  1971. else
  1972. {
  1973. this.log("LinternaMagica.extract_objects_from_dom:\n"+
  1974. "Skipping object number "+i+
  1975. " with localName <"+objects[i].localName+">"+
  1976. (objects[i].hasAttribute("id") ?
  1977. " and with id: "+objects[i].getAttribute("id"):""),1);
  1978. }
  1979. }
  1980. }
  1981. LinternaMagica.prototype.extract_object_width =
  1982. function(element)
  1983. {
  1984. if (!/HTML(embed|iframe|object)element/i.test(element))
  1985. {
  1986. return null;
  1987. }
  1988. var width = null ;
  1989. if (element.hasAttribute("width")
  1990. && !/\%/.test(element.getAttribute("width"))
  1991. && !isNaN(element.getAttribute("width")))
  1992. {
  1993. width = element.getAttribute("width");
  1994. }
  1995. else if (element.clientWidth)
  1996. {
  1997. width = element.clientWidth;
  1998. }
  1999. else if (element.offsetWidth)
  2000. {
  2001. width = element.offsetWidth;
  2002. }
  2003. else if(element.parentNode.clientWidth)
  2004. {
  2005. width = element.parentNode.clientWidth;
  2006. }
  2007. else
  2008. {
  2009. width = element.parentNode.offsetWidth;
  2010. }
  2011. if (!width || (width < this.absolute_min_width))
  2012. {
  2013. width = this.absolute_min_width;
  2014. }
  2015. return parseInt(width);
  2016. }
  2017. LinternaMagica.prototype.extract_object_height =
  2018. function(element)
  2019. {
  2020. if (!/HTML(embed|iframe|object)element/i.test(element))
  2021. {
  2022. return null;
  2023. }
  2024. var height = null ;
  2025. if (element.hasAttribute("height")
  2026. && !/\%/.test(element.getAttribute("height"))
  2027. && !isNaN(element.getAttribute("height")))
  2028. {
  2029. height = element.getAttribute("height");
  2030. }
  2031. else if (element.clientHeight)
  2032. {
  2033. height = element.clientHeight;
  2034. }
  2035. else if (element.offsetHeight &&
  2036. !/video\.google\./i.test(window.location.href))
  2037. {
  2038. height = element.offsetHeight;
  2039. }
  2040. else if (element.parentNode.clientHeight)
  2041. {
  2042. height = element.parentNode.clientHeight;
  2043. }
  2044. else if(element.parentNode.clientHeight)
  2045. {
  2046. height = element.parentNode.clientHeight;
  2047. }
  2048. else
  2049. {
  2050. height = element.parentNode.offsetHeight;
  2051. }
  2052. if (!height || (height<this.absolute_min_height))
  2053. {
  2054. height = this.absolute_min_height;
  2055. }
  2056. return parseInt(height);
  2057. }
  2058. LinternaMagica.prototype.extract_link_from_param_list = function()
  2059. {
  2060. if (!this.param_list)
  2061. {
  2062. return null;
  2063. }
  2064. var params = this.param_list;
  2065. var extracted = new Object();
  2066. for(var p=0, lenp=params.length; p < lenp; p++)
  2067. {
  2068. var param = params[p];
  2069. if(/flashvars|movie|data|src/i.test(param.name))
  2070. {
  2071. this.log("LinternaMagica.extract_objects_from_dom:\n"+
  2072. "Checking if param "+param.name+
  2073. " is matching remote site.",1);
  2074. this.detect_remotely_embeded = param.value;
  2075. extracted.remote_site_link = this.detect_object_in_remote_site();
  2076. if (extracted.remote_site_link)
  2077. {
  2078. break;
  2079. }
  2080. var self = this;
  2081. var val = this.call_site_function_at_position.apply(self,[
  2082. "skip_link_extraction",
  2083. window.location.hostname]);
  2084. if (val && typeof(val) == "boolean")
  2085. {
  2086. this.log("LinternaMagica.extract_link_from_param_list:\n"+
  2087. "Trying to extract a link from"+
  2088. " param/attribute \""+param.name+"\"",4);
  2089. if (!extracted.link)
  2090. {
  2091. this.extract_link_data = param.value;
  2092. extracted.link = this.extract_link();
  2093. }
  2094. }
  2095. else if (typeof(val) != "boolean")
  2096. {
  2097. extracted = val;
  2098. }
  2099. if (!extracted.link)
  2100. {
  2101. this.log("LinternaMagica.extract_link_from_param_list:\n"+
  2102. "Trying to extract video_id from"+
  2103. " param/attribute \""+param.name+"\"",4);
  2104. if (!extracted.video_id)
  2105. {
  2106. this.extract_video_id_data = param.value;
  2107. extracted.video_id = this.extract_video_id();
  2108. }
  2109. }
  2110. }
  2111. if (extracted.link)
  2112. {
  2113. this.extract_link_data = param.value;
  2114. var self = this;
  2115. var val = this.call_site_function_at_position.apply(self,[
  2116. "extract_hd_links_from_dom_if_link",
  2117. window.location.hostname]);
  2118. if (val && typeof(val) != "boolean")
  2119. {
  2120. extracted.hd_links = val;
  2121. break;
  2122. }
  2123. }
  2124. if (extracted.link || extracted.video_id)
  2125. {
  2126. break;
  2127. }
  2128. }
  2129. return extracted;
  2130. }
  2131. LinternaMagica.prototype.create_object_list = function(element)
  2132. {
  2133. if (!element)
  2134. var element = document;
  2135. var o = element.getElementsByTagName("object");
  2136. var e = element.getElementsByTagName("embed");
  2137. var ifr = element.getElementsByTagName("iframe");
  2138. var objects = new Array();
  2139. for (var i=0, l=e.length; i <l; i++)
  2140. {
  2141. objects.push(e[i]);
  2142. }
  2143. for (var i=0, l=o.length; i <l; i++)
  2144. {
  2145. objects.push(o[i]);
  2146. }
  2147. for (var i=0, l=ifr.length; i <l; i++)
  2148. {
  2149. objects.push(ifr[i]);
  2150. }
  2151. return objects;
  2152. }
  2153. LinternaMagica.prototype.create_param_list = function(element)
  2154. {
  2155. if (!element)
  2156. return null;
  2157. var par = element.getElementsByTagName("param");
  2158. var params = new Array();
  2159. for (var p=0, lenp=par.length; p <lenp; p++)
  2160. {
  2161. params.push(par[p]);
  2162. }
  2163. for (var p =0, lenp=element.attributes.length; p <lenp; p++)
  2164. {
  2165. params.push(element.attributes[p]);
  2166. }
  2167. this.param_list = params;
  2168. }
  2169. LinternaMagica.prototype.extract_object_from_script_flowplayer = function()
  2170. {
  2171. var constructor_re = new RegExp(
  2172. ".*(flowplayer|$f)\\\s*\\\(([^,]+)\\\s*,\\\s*.*",
  2173. "im");
  2174. var data = this.script_data;
  2175. var constructor = data.match(constructor_re);
  2176. var el;
  2177. var object_data = new Object();
  2178. if (!constructor)
  2179. {
  2180. return null;
  2181. }
  2182. el = constructor[2].replace(/\'|\"/g, "");
  2183. el = document.getElementById(el);
  2184. if (!el)
  2185. {
  2186. this.log("LinternaMagica.extract_object_from_script_flowplayer:\n"+
  2187. "No player holder element found with id "+el,4);
  2188. return null;
  2189. }
  2190. object_data.parent = el;
  2191. object_data.width = el.clientWidth ? el.clientWidth: el.offsetWidth;
  2192. object_data.height = el.clientHeight ? el.clientHeight: el.offsetHeight;
  2193. this.extract_link_data = data;
  2194. object_data.link = this.extract_link();
  2195. if (object_data.link)
  2196. {
  2197. object_data.linterna_magica_id =
  2198. this.mark_flash_object("extracted-from-script");
  2199. return object_data;
  2200. }
  2201. return null;
  2202. }
  2203. LinternaMagica.prototype.fix_flowplayer_links = function(link)
  2204. {
  2205. if (!link)
  2206. {
  2207. return null;
  2208. }
  2209. if (!/^http/i.test(link))
  2210. {
  2211. var data = this.extract_link_data;
  2212. var base_url_re = new RegExp(
  2213. "(\\\"|\\\')*baseUrl(\\\'|\\\")*\\\s*:\\\s*(\\\'|\\\")"+
  2214. "([^\\\'\\\"\\\,]+)(\\\'|\\\")",
  2215. "im");
  2216. var base_url = data.match(base_url_re);
  2217. if (base_url)
  2218. {
  2219. link = base_url[base_url.length-2]+"/"+link;
  2220. }
  2221. if (/^\.\.\//i.test(link))
  2222. {
  2223. var href = window.location.href.split("/");
  2224. var base_url = href.slice(0,(href.lenght-1)).join("/");
  2225. link = base_url +"/" +link;
  2226. }
  2227. }
  2228. return link;
  2229. }
  2230. LinternaMagica.prototype.extract_object_from_script_jwplayer = function()
  2231. {
  2232. var constructor_re = new RegExp(
  2233. ".*jwplayer\\\((\\\"|\\\')(\\\w+)(\\\"|\\\')\\\)\\\.setup",
  2234. "im");
  2235. var data = this.script_data;
  2236. var constructor = data.match(constructor_re);
  2237. var el, width, height;
  2238. var object_data = new Object();
  2239. if (!constructor)
  2240. {
  2241. return null;
  2242. }
  2243. el = constructor[2];
  2244. el = document.getElementById(el);
  2245. if (!el)
  2246. {
  2247. this.log("LinternaMagica.extract_object_from_script_jwplayer:\n"+
  2248. "No player holder element found with id "+el,4);
  2249. return null;
  2250. }
  2251. width = data.match(/width:\s*([0-9]+),/);
  2252. height = data.match(/height:\s*([0-9]+),/);
  2253. if (width)
  2254. {
  2255. width = width[1];
  2256. }
  2257. else
  2258. {
  2259. width = el.clientWidth ? el.clientWidth: el.offsetWidth;
  2260. }
  2261. if (height)
  2262. {
  2263. height = height[1];
  2264. }
  2265. else
  2266. {
  2267. height = el.clientHeight ? el.clientHeight: el.offsetHeight;
  2268. }
  2269. if (! width || ! height)
  2270. {
  2271. return null;
  2272. }
  2273. object_data.parent = el;
  2274. object_data.width = width;
  2275. object_data.height = height;
  2276. var hd = this.extract_jwplayer_hd_links(data);
  2277. object_data.hd_links = (hd && hd.length) ? hd : null;
  2278. object_data.link = (hd && hd.length) ? hd[hd.length-1].url : null;
  2279. if (object_data.link)
  2280. {
  2281. object_data.linterna_magica_id =
  2282. this.mark_flash_object("extracted-from-script");
  2283. return object_data;
  2284. }
  2285. return null;
  2286. }
  2287. LinternaMagica.prototype.extract_jwplayer_hd_links = function(data)
  2288. {
  2289. var hd_links_re = new RegExp (
  2290. "levels(\\\"|\\\')*\\\s*:\\\s*\\\[.*",
  2291. "img");
  2292. var links_data = data.match(hd_links_re);
  2293. if (!links_data || !links_data.length)
  2294. {
  2295. return null;
  2296. }
  2297. links_data = links_data[0];
  2298. hd_links_re = new RegExp (
  2299. "\\\{[^\\\}]+",
  2300. "img");
  2301. var count = 0;
  2302. var hd_links = new Array();
  2303. var link_data = null;
  2304. while (link_data = hd_links_re.exec(links_data))
  2305. {
  2306. count++;
  2307. var link = new Object();
  2308. this.extract_link_data = link_data[0];
  2309. link.url = this.extract_link();
  2310. var label = link_data[0].match(/width(\"|\')*\s*:\s*([0-9]+),/);
  2311. if (!label)
  2312. {
  2313. label = this._("Link") + " " + count;
  2314. }
  2315. else
  2316. {
  2317. label = label[label.length-1] +"p";
  2318. }
  2319. link.label = label;
  2320. hd_links.push(link);
  2321. }
  2322. return hd_links;
  2323. }
  2324. LinternaMagica.prototype.
  2325. extract_object_from_script_pokkariplayer = function ()
  2326. {
  2327. var data = this.script_data;
  2328. var constructor_re = new RegExp (
  2329. "(.*)\\\s*=\\\s*"+
  2330. "PokkariPlayer\\\.GetInstanceByMimeType\\\(\\\"(.*)\\\"\\\,",
  2331. "im");
  2332. var constructor = data.match(constructor_re);
  2333. if (!constructor)
  2334. {
  2335. return null;
  2336. }
  2337. var mime_raw = constructor[constructor.length-1].split(/,/);
  2338. var mime = mime_raw[mime_raw.length-1];
  2339. var player = constructor[constructor.length-2];
  2340. player = player.replace(/\s*var\s*/,"").replace(" ","");
  2341. var url_re = new RegExp(player+
  2342. '\\\.setPrimaryMediaUrl\\\(\\\"(.*)\\\"');
  2343. var url = data.match(url_re);
  2344. url = url[url.length-1];
  2345. var width = data.match(/PokkariPlayerOptions\.maxWidth\s*=\s*(\d+)\;/);
  2346. width=width[width.length-1];
  2347. var height = data.match(/PokkariPlayerOptions\.maxHeight\s*=\s*(\d+)\;/);
  2348. height = height[height.length-1];
  2349. var element = data.match(/player\.setPlayerTarget\(.*\'(.*)\'.*/);
  2350. element = element[element.length-1];
  2351. element = document.getElementById(element);
  2352. if (!element)
  2353. return null;
  2354. var embed_object = element.getElementsByTagName("object")[0];
  2355. var linterna_magica_id = null;
  2356. if (embed_object)
  2357. {
  2358. linterna_magica_id = this.mark_flash_object(embed_object);
  2359. }
  2360. else
  2361. {
  2362. linterna_magica_id =
  2363. this.mark_flash_object("extracted-from-script");
  2364. }
  2365. var object_data = new Object();
  2366. object_data.linterna_magica_id = linterna_magica_id;
  2367. object_data.width = width;
  2368. object_data.height = height;
  2369. object_data.link = url;
  2370. object_data.mime = mime;
  2371. object_data.parent = element;
  2372. return object_data;
  2373. }
  2374. LinternaMagica.prototype.extract_objects_from_scripts = function()
  2375. {
  2376. var scripts = document.getElementsByTagName("script");
  2377. if(!scripts)
  2378. {
  2379. return;
  2380. }
  2381. for (var s=scripts.length-1; s>0; s--)
  2382. {
  2383. if (!scripts[s].textContent)
  2384. {
  2385. continue;
  2386. }
  2387. this.script_data = scripts[s].textContent;
  2388. var object_data = null;
  2389. var self = this;
  2390. var val = this.call_site_function_at_position.apply(self,[
  2391. "skip_script_processing",
  2392. window.location.hostname]);
  2393. if (!val)
  2394. {
  2395. continue;
  2396. }
  2397. var self = this;
  2398. var val = this.call_site_function_at_position.apply(self,[
  2399. "extract_object_from_script",
  2400. window.location.hostname]);
  2401. if (this.sites[window.location.hostname] && !val)
  2402. {
  2403. this.log("LinternaMagica.extract_objects_from_scripts:\n"+
  2404. "Site specific code did not return object data. Skipping"+
  2405. " general purpose extraction",6);
  2406. continue;
  2407. }
  2408. if (val && typeof(val) != "boolean")
  2409. {
  2410. object_data = val;
  2411. }
  2412. if (!object_data)
  2413. {
  2414. object_data =
  2415. this.extract_object_from_script_swfobject();
  2416. }
  2417. if (!object_data)
  2418. {
  2419. object_data =
  2420. this.extract_object_from_script_ufo();
  2421. }
  2422. if (!object_data)
  2423. {
  2424. object_data =
  2425. this.extract_object_from_script_flowplayer();
  2426. }
  2427. if (!object_data)
  2428. {
  2429. object_data =
  2430. this.extract_object_from_script_jwplayer();
  2431. }
  2432. if (!object_data)
  2433. {
  2434. object_data =
  2435. this.extract_object_from_script_pokkariplayer();
  2436. }
  2437. if (object_data && object_data.width && object_data.height)
  2438. {
  2439. if(object_data.height < this.absolute_min_height)
  2440. {
  2441. object_data.height = this.absolute_min_height;
  2442. }
  2443. if (object_data.width < this.absolute_min_width)
  2444. {
  2445. object_data.width = this.absolute_min_width;
  2446. }
  2447. }
  2448. if(object_data && object_data.video_id && !object_data.link)
  2449. {
  2450. this.log("LinternaMagica.constructor:\n"+
  2451. "Requesting video link via video_id "+
  2452. object_data.video_id,1);
  2453. this.request_video_link(object_data);
  2454. }
  2455. if (object_data && object_data.link)
  2456. {
  2457. var self = this;
  2458. var val = this.call_site_function_at_position.apply(self,[
  2459. "replace_extracted_object_from_script",
  2460. window.location.hostname,object_data]);
  2461. if (val && typeof(val) == "boolean")
  2462. {
  2463. this.log("LinternaMagica.extract_objects_from_scripts:\n"+
  2464. "Removing plugin install warning.",2);
  2465. this.remove_plugin_install_warning(object_data.parent);
  2466. this.create_video_object(object_data);
  2467. }
  2468. }
  2469. if (object_data && (object_data.video_id || object_data.link))
  2470. {
  2471. var self = this;
  2472. var val = this.call_site_function_at_position.apply(self,[
  2473. "stop_if_one_extracted_object_from_script",
  2474. window.location.hostname]);
  2475. if (!val)
  2476. {
  2477. break;
  2478. }
  2479. }
  2480. }
  2481. }
  2482. LinternaMagica.prototype.extract_object_from_script_swfobject = function()
  2483. {
  2484. var constructor_re = new RegExp(
  2485. "(swfobject.embedSWF|(\\\w+|window\\\[\\\"\\\w+\\\"\\\])\\\s*="+
  2486. "\\\s*new\\\s*SWFObject)\\\("+
  2487. "([^,]+)"+
  2488. "\\\s*,\\\s*([^,]+)"+
  2489. "\\\s*,\\\s*([^,]+)"+
  2490. "\\\s*,\\\s*([^,]+)"+
  2491. "\\\s*,\\\s*([^,\\\)]+)"+
  2492. "(\\\s*,\\\s*([^,\\\)]+)){0,1}"+
  2493. "(\\\s*,\\\s*([^,\\\)]+)){0,1}"+
  2494. "(\\\s*,\\\s*([^,\\\)]+)){0,1}"+
  2495. "(\\\s*,\\\s*([^,\\\)]+)){0,1}"+
  2496. "(\\\s*,\\\s*([^,\\\)]+)){0,1}"+
  2497. "\\\)",
  2498. "img");
  2499. var data = this.script_data;
  2500. var constructor = null;
  2501. var var_name = null;
  2502. var id_re = null;
  2503. var el = null;
  2504. var count = 0;
  2505. var last_constructor = null;
  2506. while (constructor = constructor_re.exec(data))
  2507. {
  2508. last_constructor = constructor;
  2509. el = constructor[4].replace(/\'|\"/g, "");
  2510. if (!document.getElementById(el))
  2511. {
  2512. var_name =
  2513. constructor[2].replace(/window\[\"/,"").
  2514. replace(/\"\]/,"");
  2515. id_re = new RegExp(
  2516. var_name+"\\."+
  2517. "write\\("+"("+"\\'"+'|\\"'+")*"+
  2518. "([A-Za-z0-9_-]+)"+"("+"\\'"+'|\\"'+")*"+
  2519. "\\)",
  2520. "ig");
  2521. el = null;
  2522. var inner_count = 0;
  2523. while (el = id_re.exec(data))
  2524. {
  2525. //
  2526. if (inner_count >= count)
  2527. {
  2528. break;
  2529. }
  2530. inner_count++;
  2531. }
  2532. if (!el)
  2533. {
  2534. this.log("LinternaMagica.extract_object_from_script_"+
  2535. "swfobject:\n"+
  2536. "No id extracted from SWFObject.write method "+
  2537. "id_re" +id_re,4);
  2538. continue;
  2539. }
  2540. el = el[el.length-2];
  2541. //
  2542. if (document.getElementById(el))
  2543. {
  2544. break;
  2545. }
  2546. }
  2547. count++;
  2548. }
  2549. constructor = last_constructor;
  2550. if (!document.getElementById(el))
  2551. {
  2552. return null;
  2553. }
  2554. var height, width;
  2555. var object_data= new Object();
  2556. if (this.skip_object_if_id(el))
  2557. {
  2558. return null;
  2559. }
  2560. object_data.parent = document.getElementById(el);
  2561. if (!object_data.parent)
  2562. {
  2563. this.log("LinternaMagica.extract_object_from_script_swfobject:\n"+
  2564. "Wrong element id (or wrong regex)"+el,1);
  2565. return null;
  2566. }
  2567. object_data.width = constructor[5].replace(/\'|\"/g, "");
  2568. object_data.height = constructor[6].replace(/\'|\"/g, "");
  2569. if (/%/i.test(object_data.width))
  2570. {
  2571. object_data.width = object_data.parent.clientWidth;
  2572. }
  2573. if (/%/i.test(object_data.height))
  2574. {
  2575. object_data.height = object_data.parent.clientHeight;
  2576. }
  2577. this.extract_link_data = data;
  2578. object_data.link = this.extract_link();
  2579. if (!object_data.link)
  2580. {
  2581. this.extract_video_id_data = data;
  2582. var self = this;
  2583. var val = this.call_site_function_at_position.apply(self,[
  2584. "libswfobject_skip_video_id_extraction",
  2585. window.location.hostname,object_data]);
  2586. if (val && typeof(val) == "boolean")
  2587. {
  2588. object_data.video_id = this.extract_video_id();
  2589. }
  2590. else if(val)
  2591. {
  2592. object_data.video_id = val;
  2593. }
  2594. }
  2595. if (object_data.video_id || object_data.link)
  2596. {
  2597. this.log("LinternaMagica.extract_object_from_script_swfobject:\n"+
  2598. "SWF object extracted from script ",1);
  2599. object_data.linterna_magica_id =
  2600. this.mark_flash_object("extracted-from-script");
  2601. var self = this;
  2602. var val = this.call_site_function_at_position.apply(self,[
  2603. "extract_hd_links_from_script_if_link",
  2604. window.location.hostname, data]);
  2605. if (val && typeof(val) != "boolean")
  2606. {
  2607. object_data.hd_links = val;
  2608. }
  2609. return object_data;
  2610. }
  2611. return null;
  2612. }
  2613. LinternaMagica.prototype.extract_object_from_script_ufo = function()
  2614. {
  2615. var constructor_re = new RegExp(
  2616. "UFO\\\.create\\\(\\\s*([a-zA-Z0-9]+)\\\s*,\\\s*"+
  2617. "(\\\"|\\\')([a-zA-Z0-9-_]+)(\\\"|\\\')",
  2618. "im");
  2619. var data = this.script_data;
  2620. var constructor = data.match(constructor_re);
  2621. if (!constructor)
  2622. {
  2623. return null;
  2624. }
  2625. if (!document.getElementById(constructor[3]))
  2626. {
  2627. return null;
  2628. }
  2629. var object_data = new Object();
  2630. object_data.parent = document.getElementById(constructor[3]);
  2631. var ufo_variable_re ="var\\\s*"+constructor[1]+"\\\s*=\\\s*\\\{.*";
  2632. var w_h_re = "\\\s*(\\\"|\\\')*(\\\d+)(\\\'|\\\")*";
  2633. var width_re = new RegExp(
  2634. ufo_variable_re+"width:"+w_h_re,
  2635. "im");
  2636. var height_re = new RegExp(
  2637. ufo_variable_re+"height:"+w_h_re,
  2638. "im");
  2639. object_data.width = data.match(width_re);
  2640. object_data.height = data.match(height_re);
  2641. if (object_data.width)
  2642. {
  2643. object_data.width = object_data.width[object_data.width.length-2];
  2644. }
  2645. else
  2646. {
  2647. return null;
  2648. }
  2649. if (object_data.height)
  2650. {
  2651. object_data.height = object_data.height[object_data.height.length-2];
  2652. }
  2653. else
  2654. {
  2655. return null;
  2656. }
  2657. this.extract_link_data = data;
  2658. object_data.link = this.extract_link();
  2659. if (!object_data.link)
  2660. {
  2661. this.extract_video_id_data = data;
  2662. object_data.video_id = this.extract_video_id();
  2663. }
  2664. if (object_data.link || object_data.video_id)
  2665. {
  2666. this.log("LinternaMagica.extract_object_from_script_ufo:\n"+
  2667. "SWF object extracted from script ",1);
  2668. object_data.linterna_magica_id =
  2669. this.mark_flash_object("extracted-from-script");
  2670. return object_data;
  2671. }
  2672. return null;
  2673. }
  2674. LinternaMagica.prototype.extract_link = function()
  2675. {
  2676. if (!this.extract_link_data)
  2677. {
  2678. return null;
  2679. }
  2680. var data = this.extract_link_data;
  2681. var self = this;
  2682. var val = this.call_site_function_at_position.apply(self,[
  2683. "set_video_link_regex",
  2684. window.location.hostname]);
  2685. var link_re = null;
  2686. var link_position = null;
  2687. if (val && typeof(val) != "boolean")
  2688. {
  2689. link_re = val.link_re;
  2690. link_position = val.link_position;
  2691. }
  2692. else
  2693. {
  2694. link_re = new RegExp (
  2695. "\\\{{0}.*(video|flv_ur|streamer|file|moviepath|videourl|"+
  2696. "mediaurl|audio|soundfile|sdurl|videopath|flv|url|ms|"+
  2697. "nextmovie|flvaddress)"+
  2698. "(\\\"|\\\')*\\\s*(\\\=|\\\:|\\\,)\\\s*(\\\"|\\\')*"+
  2699. "(.*\\\."+
  2700. "(flv|mp4|mp3)"+
  2701. "((\\\?|\\\&)?\\\w+\\\=[A-Za-z0-9_\\\-]+"+
  2702. "\\\&?)*)(?!\\\.)",
  2703. "i");
  2704. }
  2705. if (link_position == null ||
  2706. typeof(link_position) == "undefined")
  2707. {
  2708. link_position = 4;
  2709. }
  2710. var link = unescape(data).match(link_re);
  2711. if (link && link[link.length-link_position])
  2712. {
  2713. link = unescape(link[link.length-link_position]);
  2714. link = link.replace(/\\\//g, "/");
  2715. link = link.replace(/ /g, "%20");
  2716. var self = this;
  2717. var val = this.call_site_function_at_position.apply(self,[
  2718. "process_extracted_link",
  2719. window.location.hostname, link]);
  2720. if (val && typeof(val) != "boolean")
  2721. {
  2722. link = val;
  2723. }
  2724. var self = this;
  2725. var val = this.call_site_function_at_position.apply(self,[
  2726. "do_not_clean_amps_in_extracted_link",
  2727. window.location.hostname]);
  2728. if (val)
  2729. {
  2730. link = link.split("&")[0];
  2731. this.log("LinternaMagica.extract_link:\n"+
  2732. " Link split at the first ampersand",3);
  2733. link = link.replace(/[^:]\/\//, "/");
  2734. }
  2735. self = this;
  2736. val = this.call_site_function_at_position.apply(self,[
  2737. "skip_flowplayer_links_fix",
  2738. window.location.hostname]);
  2739. if (val)
  2740. {
  2741. if (data.match(/.*flowplayer.*/))
  2742. {
  2743. link = this.fix_flowplayer_links(link);
  2744. }
  2745. }
  2746. this.log("LinternaMagica.extract_link:\n"+
  2747. " Extracted link: "+link,1);
  2748. return link;
  2749. }
  2750. else
  2751. {
  2752. this.log("LinternaMagica.extract_link:\n"+
  2753. "No link found.",4);
  2754. }
  2755. return null;
  2756. }
  2757. LinternaMagica.prototype.extract_video_id = function()
  2758. {
  2759. if (!this.extract_video_id_data)
  2760. {
  2761. return null;
  2762. }
  2763. var data = this.extract_video_id_data;
  2764. data = "&"+data;
  2765. var video_id_re = null;
  2766. var match_site = null;
  2767. var video_id_position = null;
  2768. if (/blip\.tv/i.test(data))
  2769. {
  2770. match_site = "blip.tv";
  2771. }
  2772. else
  2773. {
  2774. match_site = window.location.hostname;
  2775. }
  2776. var self = this;
  2777. var val = this.call_site_function_at_position.apply(self,[
  2778. "set_video_id_regex",
  2779. match_site]);
  2780. if (val && typeof(val) !== "boolean")
  2781. {
  2782. video_id_re = val.video_id_re;
  2783. video_id_position = val.video_id_position;
  2784. }
  2785. else
  2786. {
  2787. video_id_re = new RegExp (
  2788. "(\\\"|\\\'|\\\&|\\\?|\\\;|\\\/|\\\.|\\\=)(itemid|"+
  2789. "clip_id|audio|soundfile|clip|video_id|vid|"+
  2790. "player_config\\\.php\\\?v|"+
  2791. "videoid|media_id|vkey|video3|_videoid|"+
  2792. "vimeo_clip_|php&ID|\\\/video_embed\\\/\\\?id)"+
  2793. "(\\\"|\\\')*(\\\=|\\\:|,|\\\/)\\\s*(\\\"|\\\')*"+
  2794. "([a-zA-Z0-9\\\-\\\_]+)",
  2795. "i");
  2796. }
  2797. if (video_id_position == null ||
  2798. typeof(video_id_position) == "undefined")
  2799. {
  2800. video_id_position = 1;
  2801. }
  2802. var video_id =data.match(video_id_re);
  2803. if (video_id)
  2804. {
  2805. video_id = video_id[video_id.length-video_id_position];
  2806. this.log("LinternaMagica.extract_video_id:\n"+
  2807. "Extracted video id : "+video_id,1);
  2808. return video_id;
  2809. }
  2810. else
  2811. {
  2812. this.log("LinternaMagica.extract_video_id:\n"+
  2813. "No video_id found. ",4);
  2814. }
  2815. return null;
  2816. }
  2817. LinternaMagica.prototype.skip_objects =
  2818. [ "brozar[a-z0-9]+_.*_scroll",
  2819. "flashRateObject", "VideoCharts",
  2820. "^f[0-9]+[a-z]+",
  2821. "^fb[0-9]+[a-z]+",
  2822. "easyXDM_DISQUS_net_default[0-9]+_provider",
  2823. "twitterIframe"];
  2824. LinternaMagica.prototype.skip_object_if_id = function(id_string)
  2825. {
  2826. if (!id_string)
  2827. return false;
  2828. if (!this.skip_objects_re)
  2829. {
  2830. this.skip_objects_re = new RegExp (
  2831. this.skip_objects.join("|"),
  2832. "i");
  2833. this.log("LinternaMagica.skip_object_if_id:\n"+
  2834. "No skip_objects regular expression. Creating : "+
  2835. this.skip_objects_re,5);
  2836. }
  2837. if (id_string.match(this.skip_objects_re))
  2838. {
  2839. this.log("LinternaMagica.skip_object_if_id:\n"+
  2840. "Skipping forbiden object with id "+id_string,1);
  2841. return true;
  2842. }
  2843. return false;
  2844. }
  2845. LinternaMagica.prototype.delete_objects = [ "videosync", "videoad" ];
  2846. LinternaMagica.prototype.delete_object_if_id = function(id_string)
  2847. {
  2848. if (!id_string)
  2849. return false;
  2850. if (!this.delete_objects_re)
  2851. {
  2852. this.delete_objects_re = new RegExp (
  2853. this.delete_objects.join("|"),
  2854. "i");
  2855. this.log("LinternaMagica.delete_object_if_id:\n"+
  2856. "No delete_objects regular expression. Creating : "+
  2857. this.delete_objects_re,5);
  2858. }
  2859. if (id_string.match(this.delete_objects_re))
  2860. {
  2861. this.log("LinternaMagica.delete_object_if_id:\n"+
  2862. "Deleting forbiden object with id "+id_string,1);
  2863. return true;
  2864. }
  2865. return false;
  2866. }
  2867. LinternaMagica.prototype.switch_to_hd_link = function(event, element)
  2868. {
  2869. event.preventDefault();
  2870. var div = element.parentNode.parentNode.parentNode;
  2871. var id = div.getAttribute("id").split(/-/);
  2872. id = id[id.length-1];
  2873. var dw_link = document.getElementById(
  2874. "linterna-magica-video-download-link-"+id);
  2875. var video_object = document.getElementById(
  2876. "linterna-magica-video-object-"+id);
  2877. var selected_link = document.getElementById(
  2878. "linterna-magica-selected-hd-link-"+id);
  2879. if (dw_link && video_object)
  2880. {
  2881. dw_link.setAttribute("href",
  2882. element.getAttribute("href"));
  2883. video_object.setAttribute("data",
  2884. element.getAttribute("href"));
  2885. var sibling = video_object.nextSibling;
  2886. var parent = video_object.parentNode;
  2887. var new_video = video_object.cloneNode(true);
  2888. video_object.parentNode.removeChild(video_object);
  2889. if (sibling)
  2890. {
  2891. parent.insertBefore(new_video, sibling);
  2892. }
  2893. else
  2894. {
  2895. parent.appendChild(new_video);
  2896. }
  2897. if (this.controls)
  2898. {
  2899. this.player.init.apply(this,[id]);
  2900. }
  2901. else if(!this.controls && !this.get_player_name(id))
  2902. {
  2903. this.player.set_player_name.apply(this,[id]);
  2904. }
  2905. var control_id = "linterna-magica-controls-button-play-"+id;
  2906. var play = document.getElementById(control_id);
  2907. if (play)
  2908. {
  2909. play.style.setProperty("display", "none", "important");
  2910. }
  2911. control_id = "linterna-magica-controls-button-pause-"+id;
  2912. var pause = document.getElementById(control_id);
  2913. if (pause)
  2914. {
  2915. pause.style.removeProperty("display");
  2916. }
  2917. if (selected_link)
  2918. {
  2919. this.unselect_hd_link_in_list(selected_link);
  2920. }
  2921. this.select_hd_link_in_list(element,id);
  2922. div.style.setProperty("display", "none", "important");
  2923. this.set_video_object_width_on_hd_list_display_change(id);
  2924. }
  2925. }
  2926. LinternaMagica.prototype.show_or_hide_hd_links = function(event, element)
  2927. {
  2928. event.preventDefault();
  2929. var id = element.getAttribute("id").split(/-/);
  2930. id = id[id.length-1];
  2931. var hd_list = element.nextSibling;
  2932. if (hd_list)
  2933. {
  2934. var display = hd_list.style.getPropertyValue("display");
  2935. if (display)
  2936. {
  2937. hd_list.style.removeProperty("display");
  2938. this.set_video_object_width_on_hd_list_display_change(id);
  2939. var self = this;
  2940. var hd_list_blur_function = function(ev)
  2941. {
  2942. var timeout_function = function()
  2943. {
  2944. if (document.activeElement &&
  2945. ((document.activeElement.hasAttribute("id") &&
  2946. document.activeElement.getAttribute("id")
  2947. != "linterna-magia-selected-hd-link-"+id) ||
  2948. !document.activeElement.hasAttribute("id")))
  2949. {
  2950. hd_list.style.setProperty("display",
  2951. "none", "important");
  2952. self.
  2953. set_video_object_width_on_hd_list_display_change.
  2954. apply(self, [id]);
  2955. }
  2956. element.removeEventListener("blur",
  2957. hd_list_blur_function,
  2958. true);
  2959. };
  2960. setTimeout(timeout_function, 250);
  2961. };
  2962. element.addEventListener("blur", hd_list_blur_function, true);
  2963. }
  2964. else
  2965. {
  2966. hd_list.style.setProperty("display", "none", "important");
  2967. this.set_video_object_width_on_hd_list_display_change(id);
  2968. }
  2969. }
  2970. return true;
  2971. }
  2972. LinternaMagica.prototype.set_video_object_width_on_hd_list_display_change =
  2973. function(linterna_magica_id)
  2974. {
  2975. var hd_list = document.getElementById("linterna-magica-hd-links-list-"+
  2976. linterna_magica_id);
  2977. var lm_video = this.get_video_object(linterna_magica_id);
  2978. if (!hd_list || !lm_video)
  2979. {
  2980. return;
  2981. }
  2982. if (hd_list.video_normal_width == undefined)
  2983. {
  2984. var hd_list_width = hd_list.clientWidth ?
  2985. hd_list.clientWidth : hd_list.offsetWidth ?
  2986. hd_list.offsetWidth : 120;
  2987. hd_list.video_normal_width =
  2988. parseInt(lm_video.style.getPropertyValue("width"));
  2989. hd_list.video_reduced_width =
  2990. hd_list.video_normal_width - hd_list_width - 20;
  2991. }
  2992. if (hd_list.style.getPropertyValue('display'))
  2993. {
  2994. lm_video.style.setProperty("width", hd_list.video_normal_width+"px",
  2995. "important");
  2996. }
  2997. else
  2998. {
  2999. lm_video.style.setProperty("width", hd_list.video_reduced_width+"px",
  3000. "important");
  3001. }
  3002. }
  3003. LinternaMagica.prototype.select_hd_link_in_list = function(element,id)
  3004. {
  3005. if (typeof(element) != "object" ||
  3006. id == "undefined")
  3007. {
  3008. return element;
  3009. }
  3010. element.style.setProperty("border-style", "solid", "important");
  3011. element.style.setProperty("border-width", "1px", "important");
  3012. element.style.setProperty("border-color", "#bbbbbb", "important");
  3013. element.style.setProperty("background-color", "#151515", "important");
  3014. element.style.setProperty("color", "#ffffff", "important");
  3015. element.setAttribute("id", "linterna-magica-selected-hd-link-"+id);
  3016. return element;
  3017. }
  3018. LinternaMagica.prototype.unselect_hd_link_in_list = function(element)
  3019. {
  3020. if (typeof(element) != "object")
  3021. {
  3022. return element;
  3023. }
  3024. element.removeAttribute("id");
  3025. element.style.removeProperty("border-width");
  3026. element.style.removeProperty("border-color");
  3027. element.style.removeProperty("border-style");
  3028. element.style.removeProperty("background-color");
  3029. element.style.removeProperty("color");
  3030. if (element.style.getPropertyValue("border"))
  3031. {
  3032. element.style.setProperty("border-width", "0px", "important");
  3033. }
  3034. return element;
  3035. }
  3036. LinternaMagica.prototype.create_hd_links_button = function(object_data)
  3037. {
  3038. var id = object_data.linterna_magica_id;
  3039. var self = this;
  3040. var hd_links = this.create_hd_links_list(object_data);
  3041. var hd_wrapper = document.createElement("div");
  3042. hd_wrapper.setAttribute("id", "linterna-magica-hd-wrapper-"+id);
  3043. hd_wrapper.setAttribute("class", "linterna-magica-hd-wrapper");
  3044. var hd_button = document.createElement("a");
  3045. hd_button.setAttribute("href","#");
  3046. hd_button.textContent = this._("HQ");
  3047. hd_button.setAttribute("title", this._("Higher quality"));
  3048. hd_button.setAttribute("id", "linterna-magica-switch-hd-"+id);
  3049. hd_button.setAttribute("class", "linterna-magica-switch-hd");
  3050. var hd_button_click_function = function(ev)
  3051. {
  3052. var el = this;
  3053. self.show_or_hide_hd_links.apply(self, [ev, el]);
  3054. };
  3055. hd_button.addEventListener("click",
  3056. hd_button_click_function, false);
  3057. hd_wrapper.appendChild(hd_button);
  3058. hd_wrapper.appendChild(hd_links);
  3059. return hd_wrapper;
  3060. }
  3061. LinternaMagica.prototype.create_hd_links_list = function(object_data)
  3062. {
  3063. var id = object_data.linterna_magica_id;
  3064. var self = this;
  3065. var hd_links = document.createElement("div");
  3066. var preferred_link = object_data.preferred_link;
  3067. hd_links.setAttribute("id", "linterna-magica-hd-links-list-"+id);
  3068. hd_links.setAttribute("class", "linterna-magica-hd-links-list");
  3069. hd_links.style.setProperty("display","none","important");
  3070. var ul = document.createElement("ul");
  3071. for(var link=0; link<object_data.hd_links.length; link++)
  3072. {
  3073. var li = document.createElement("li");
  3074. var button = document.createElement("a");
  3075. button.setAttribute("href",object_data.hd_links[link].url);
  3076. if (object_data.hd_links[link].more_info)
  3077. {
  3078. button.setAttribute("title",
  3079. object_data.hd_links[link].more_info);
  3080. }
  3081. button.textContent = object_data.hd_links[link].label;
  3082. var button_click_function = function(ev)
  3083. {
  3084. var el = this;
  3085. self.switch_to_hd_link.apply(self, [ev, el]);
  3086. };
  3087. button.addEventListener("click",
  3088. button_click_function , false);
  3089. if (link == preferred_link)
  3090. {
  3091. this.select_hd_link_in_list(button,id);
  3092. object_data.link = object_data.hd_links[link].url;
  3093. }
  3094. li.appendChild(button);
  3095. ul.appendChild(li);
  3096. }
  3097. hd_links.appendChild(ul);
  3098. return hd_links;
  3099. }
  3100. LinternaMagica.prototype.pack_external_link = function(href,text)
  3101. {
  3102. var a = document.createElement('a');
  3103. var data = "data:text/html;charset=utf-8;base64,";
  3104. data += btoa(
  3105. "<html><head><meta http-equiv='refresh' content='0;url="+
  3106. href+"' /></head><body></body></html>");
  3107. var txt = document.createTextNode(text);
  3108. a.setAttribute("href", data);
  3109. a.appendChild(txt);
  3110. return a;
  3111. }
  3112. LinternaMagica.prototype.create_controls = function(object_data)
  3113. {
  3114. var id = object_data.linterna_magica_id;
  3115. var controls_wrapper = document.createElement("div");
  3116. if (this.controls)
  3117. {
  3118. this.volume_slider_timers[id] = new Array();
  3119. var controls_time_slider = document.createElement("div");
  3120. controls_time_slider.setAttribute("class", "linterna-magica-controls-time-slider");
  3121. controls_time_slider.setAttribute("id", "linterna-magica-controls-time-slider-wrapper-"+id);
  3122. controls_time_slider.style.setProperty("width",
  3123. ((parseInt(object_data.width))+"px"),
  3124. "important");
  3125. var mouse_scroll = /WebKit/i.test(navigator.userAgent) ?
  3126. "mousewheel" : "DOMMouseScroll";
  3127. var time_slider = this.create_time_slider(object_data);
  3128. var time_slider_scroll_function = function(ev)
  3129. {
  3130. var el = this;
  3131. self.time_slider_scroll_event.apply(self, [ev, el]);
  3132. };
  3133. time_slider.addEventListener(mouse_scroll,
  3134. time_slider_scroll_function, false);
  3135. var time_slider_click_function = function(ev)
  3136. {
  3137. var el = this;
  3138. self.time_slider_click_event.apply(self, [ev, el]);
  3139. };
  3140. time_slider.addEventListener("click", time_slider_click_function, false);
  3141. var time_knob = time_slider.getElementsByTagName("a")[0];
  3142. time_knob.addEventListener("mousedown", function(ev)
  3143. {
  3144. ev.preventDefault();
  3145. clearInterval(self.player_timers[id]);
  3146. delete self.player_timers[id];
  3147. self.slider_control.apply(self, [ev]);
  3148. }, false);
  3149. controls_time_slider.appendChild(time_slider);
  3150. controls_wrapper.appendChild(controls_time_slider);
  3151. }
  3152. var controls = document.createElement("div");
  3153. controls.setAttribute("class", "linterna-magica-controls");
  3154. controls.setAttribute("id", "linterna-magica-controls-"+id);
  3155. controls.style.setProperty("width",
  3156. ((parseInt(object_data.width))+"px"),
  3157. "important");
  3158. if (this.controls)
  3159. {
  3160. var self = this;
  3161. var started_clip = this.find_started_clip();
  3162. var play = this.create_play_button(object_data);
  3163. if (this.autostart && started_clip == null)
  3164. {
  3165. play.style.setProperty("display", "none", "important");
  3166. }
  3167. var play_click_function = function(ev)
  3168. {
  3169. var el = this;
  3170. self.play_button_click_event.apply(self, [ev, el]);
  3171. };
  3172. play.addEventListener("click", play_click_function, false);
  3173. controls.appendChild(play);
  3174. var pause = this.create_pause_button(object_data);
  3175. if (!this.autostart || started_clip !== null)
  3176. {
  3177. pause.style.setProperty("display", "none", "important");
  3178. }
  3179. var pause_click_function = function(ev)
  3180. {
  3181. var el = this;
  3182. self.pause_button_click_event.apply(self, [ev, el]);
  3183. };
  3184. pause.addEventListener("click", pause_click_function, false);
  3185. controls.appendChild(pause);
  3186. var mute = this.create_mute_button(object_data);
  3187. var mute_click_function = function(ev)
  3188. {
  3189. var el = this;
  3190. self.mute_button_click_event.apply(self, [ev, el]);
  3191. };
  3192. mute.addEventListener("click", mute_click_function, false);
  3193. var mute_mouse_over_function = function(ev)
  3194. {
  3195. var el = this;
  3196. var id = el.getAttribute("id").split('-');
  3197. id = id[id.length-1];
  3198. self.mute_button_mouse_over_event.apply(self, [ev, el]);
  3199. for(var i=0,l=self.volume_slider_timers[id].length; i<l; i++)
  3200. {
  3201. clearTimeout(self.volume_slider_timers[id][i]);
  3202. self.volume_slider_timers[id].pop(i);
  3203. }
  3204. el.addEventListener("mouseout", volume_slider_hide_function, false);
  3205. }
  3206. mute.addEventListener("mouseover", mute_mouse_over_function, false);
  3207. mute.addEventListener("mousemove", mute_mouse_over_function, false);
  3208. var volume_slider_hide_function = function(ev)
  3209. {
  3210. var el = this;
  3211. var id = el.getAttribute("id").split('-');
  3212. id = id[id.length-1];
  3213. var volume_slider_hide_timeout_function = function ()
  3214. {
  3215. self.volume_slider_hide_event.apply(self, [ev, el]);
  3216. }
  3217. var time_id = setTimeout(volume_slider_hide_timeout_function, 700);
  3218. self.volume_slider_timers[id].push(time_id);
  3219. }
  3220. mute.addEventListener("mouseout", volume_slider_hide_function, false);
  3221. controls.appendChild(mute);
  3222. var volume_slider = this.create_volume_slider(object_data);
  3223. var volume_slider_scroll_function = function(ev)
  3224. {
  3225. var el = this;
  3226. self.volume_slider_scroll_event.apply(self, [ev, el]);
  3227. };
  3228. volume_slider.addEventListener(mouse_scroll,
  3229. volume_slider_scroll_function, false);
  3230. var volume_slider_click_function = function(ev)
  3231. {
  3232. var el = this;
  3233. self.volume_slider_click_event.apply(self, [ev, el]);
  3234. };
  3235. volume_slider.addEventListener("click",
  3236. volume_slider_click_function, false);
  3237. volume_slider.addEventListener("mouseover", mute_mouse_over_function, false);
  3238. volume_slider.addEventListener("mousemove", mute_mouse_over_function, false);
  3239. volume_slider.addEventListener("mouseout", volume_slider_hide_function, false);
  3240. var volume_knob = volume_slider.getElementsByTagName("a")[0];
  3241. volume_knob.addEventListener("mousedown", function(ev)
  3242. {
  3243. ev.preventDefault();
  3244. self.slider_control.apply(self, [ev]);
  3245. }, false);
  3246. controls.appendChild(volume_slider);
  3247. var time_text = document.createElement("span");
  3248. time_text.style.display = "none";
  3249. time_text.setAttribute("class", "linterna-magica-controls-slider-text "+
  3250. " linterna-magica-controls-time-slider-text");
  3251. time_text.setAttribute("id", "linterna-magica-controls-"+
  3252. "time-slider-text-"+id);
  3253. time_text.textContent="--:--:--";
  3254. controls.appendChild(time_text);
  3255. }
  3256. if (object_data.hd_links)
  3257. {
  3258. var p =
  3259. this.compute_preferred_hd_link(object_data.hd_links);
  3260. if (p == null || isNaN(p))
  3261. {
  3262. p = object_data.hd_links[object_data.hd_links.length-1];
  3263. }
  3264. object_data.preferred_link = p;
  3265. object_data.link = object_data.hd_links[p].url;
  3266. var hd_links = this.create_hd_links_button(object_data);
  3267. controls.appendChild(hd_links);
  3268. }
  3269. if (controls) {
  3270. var fullscreen = this.create_fullscreen_button(object_data);
  3271. var fullscreen_click_function = function(ev)
  3272. {
  3273. var el = this;
  3274. self.fullscreen_button_click_event.apply(self, [ev, el]);
  3275. };
  3276. fullscreen.addEventListener("click",
  3277. fullscreen_click_function, false);
  3278. controls.appendChild(fullscreen);
  3279. }
  3280. var dw_link = document.createElement("a");
  3281. dw_link.textContent = this._("Download");
  3282. dw_link.setAttribute("title", this._("Save the video clip"));
  3283. dw_link.setAttribute("id", "linterna-magica-video-download-link-"+id);
  3284. dw_link.setAttribute("class", "linterna-magica-video-download-link");
  3285. dw_link.setAttribute("href", object_data.link);
  3286. if (!object_data.link)
  3287. {
  3288. dw_link.style.setProperty("display", "none", "important");
  3289. }
  3290. controls.appendChild(dw_link);
  3291. var site_html5_player =
  3292. this.find_site_html5_player_wrapper(object_data.parent);
  3293. var toggle_plugin_switch_type =
  3294. site_html5_player ? "html5" : "plugin";
  3295. if (this.plugin_is_installed || site_html5_player)
  3296. {
  3297. var toggle_plugin =
  3298. this.create_toggle_plugin_link(null,id,
  3299. toggle_plugin_switch_type);
  3300. controls.appendChild(toggle_plugin);
  3301. }
  3302. if (this.debug_level && this.log_to == "web")
  3303. {
  3304. var log_link = this.create_web_log_link();
  3305. log_link.setAttribute("class",
  3306. "linterna-magica-web-log-link");
  3307. log_link.setAttribute("id",
  3308. "linterna-magica-web-log-link-"+id);
  3309. log_link.addEventListener("click",
  3310. this.show_or_hide_web_log, false);
  3311. controls.appendChild(log_link);
  3312. }
  3313. var self = this;
  3314. var update_notifier = this.create_update_notifier_link(id);
  3315. if (!this.updates_data)
  3316. {
  3317. update_notifier.style.setProperty("display", "none", "important");
  3318. }
  3319. var notifier_click_function = function(ev)
  3320. {
  3321. var el = this;
  3322. self.show_or_hide_update_info.apply(self, [ev, el]);
  3323. };
  3324. update_notifier.addEventListener("click",
  3325. notifier_click_function,
  3326. false);
  3327. controls.appendChild(update_notifier);
  3328. var about_lm = document.createElement("a");
  3329. about_lm.textContent = "Linterna Mágica";
  3330. about_lm.setAttribute("href", "#");
  3331. about_lm.setAttribute("title", this._("About")+ " Linterna Mágica " +
  3332. this.version);
  3333. about_lm.setAttribute("id", "linterna-magica-logo-"+id);
  3334. about_lm.setAttribute("class", "linterna-magica-logo");
  3335. var self = this;
  3336. about_lm.addEventListener("click", function(ev)
  3337. {
  3338. var el = this;
  3339. self.about.apply(self, [ev, el]);
  3340. }, false);
  3341. controls.appendChild(about_lm);
  3342. if (this.get_document_direction() == "rtl" ||
  3343. this.languages[this.lang].__direction == "rtl")
  3344. {
  3345. controls.setAttribute("dir", "rtl");
  3346. var children = controls.childNodes;
  3347. var class_b = "linterna-magica-controls-buttons";
  3348. var class_hs = "linterna-magica-controls-horizontal-slider";
  3349. for(var b=0,l=children.length; b<l; b++)
  3350. {
  3351. var child = children[b];
  3352. var has_b_class =
  3353. this.object_has_css_class(child, class_b);
  3354. var has_hs_class =
  3355. this.object_has_css_class(child, class_hs);
  3356. if (has_b_class || has_hs_class)
  3357. {
  3358. child.style.setProperty("float", "right", "important");
  3359. }
  3360. }
  3361. }
  3362. controls_wrapper.appendChild(controls);
  3363. return controls_wrapper;
  3364. }
  3365. LinternaMagica.prototype.create_play_button = function(object_data)
  3366. {
  3367. var lm_id = object_data.linterna_magica_id;
  3368. var play = document.createElement("a");
  3369. play.setAttribute("class", "linterna-magica-controls-buttons "+
  3370. "linterna-magica-controls-buttons-play");
  3371. play.setAttribute("id", "linterna-magica-controls-button-play-"+lm_id);
  3372. play.setAttribute("href", "#");
  3373. play.setAttribute("title", this._("Play"));
  3374. play.textContent = "Pa";
  3375. return play;
  3376. }
  3377. LinternaMagica.prototype.play_button_click_event = function(event, element)
  3378. {
  3379. event.preventDefault();
  3380. element.style.setProperty("display", "none", "important");
  3381. var id = element.getAttribute("id").
  3382. replace(/linterna-magica-controls-button-play-/,"");
  3383. var pause = document.getElementById("linterna-magica-controls-button-pause-"+id);
  3384. pause.style.removeProperty("display");
  3385. var self = this;
  3386. this.player.play.apply(self, [id]);
  3387. this.player_timers[id] = setInterval(
  3388. function()
  3389. {
  3390. self.ticker.apply(self, [id]);
  3391. }, 500);
  3392. }
  3393. LinternaMagica.prototype.create_pause_button = function(object_data)
  3394. {
  3395. var lm_id = object_data.linterna_magica_id;
  3396. var pause = document.createElement("a");
  3397. pause.setAttribute("class", "linterna-magica-controls-buttons "+
  3398. "linterna-magica-controls-buttons-pause");
  3399. pause.setAttribute("id", "linterna-magica-controls-button-pause-"+lm_id);
  3400. pause.setAttribute("href", "#");
  3401. pause.setAttribute("title", this._("Pause"));
  3402. pause.textContent ="Pa";
  3403. return pause;
  3404. }
  3405. LinternaMagica.prototype.pause_button_click_event = function(event, element)
  3406. {
  3407. event.preventDefault();
  3408. element.style.setProperty("display", "none", "important");
  3409. var id = element.getAttribute("id").
  3410. replace(/linterna-magica-controls-button-pause-/,"");
  3411. var play = document.getElementById("linterna-magica-controls-button-play-"+id);
  3412. play.style.removeProperty("display");
  3413. var self = this;
  3414. this.player.pause.apply(self, [id]);
  3415. clearInterval(self.player_timers[id]);
  3416. delete this.player_timers[id];
  3417. }
  3418. LinternaMagica.prototype.create_time_slider = function(object_data)
  3419. {
  3420. var lm_id = object_data.linterna_magica_id;
  3421. var self = this;
  3422. var time_slider_outer = document.createElement("div");
  3423. time_slider_outer.setAttribute("title", this._("Time"));
  3424. time_slider_outer.setAttribute("class",
  3425. "linterna-magica-controls-time-slider-outer-frame");
  3426. time_slider_outer.setAttribute("id",
  3427. "linterna-magica-controls-time-slider-outer-frame-"+lm_id);
  3428. var time_slider = document.createElement("div");
  3429. time_slider.setAttribute("title", this._("Time"));
  3430. time_slider.setAttribute("class",
  3431. "linterna-magica-controls-horizontal-slider");
  3432. time_slider.setAttribute("id",
  3433. "linterna-magica-controls-time-slider-"+lm_id);
  3434. var time_knob_move = null;
  3435. var doc_dir = this.get_document_direction();
  3436. if (doc_dir == "rtl" ||
  3437. this.languages[this.lang].__direction == "rtl")
  3438. {
  3439. time_knob_move = "right";
  3440. }
  3441. else
  3442. {
  3443. time_knob_move = "left";
  3444. }
  3445. var progress_bar = document.createElement("div");
  3446. progress_bar.setAttribute("title", this._("Time"));
  3447. progress_bar.setAttribute("class", "linterna-magica-controls-horizontal-"+
  3448. "slider-progress-bar");
  3449. progress_bar.setAttribute("id", "linterna-magica-controls-"+
  3450. "time-slider-progress-bar-"+lm_id);
  3451. var time_knob = document.createElement("a");
  3452. time_knob.setAttribute("title", this._("Time"));
  3453. time_knob.setAttribute("class", "linterna-magica-controls-slider-knob");
  3454. time_knob.setAttribute("id", "linterna-magica-controls-"+
  3455. "time-slider-knob-"+lm_id);
  3456. time_knob.style.setProperty(time_knob_move, "0px", "important");
  3457. time_knob.setAttribute("href", "#");
  3458. time_slider.appendChild(time_knob);
  3459. time_slider_outer.appendChild(progress_bar);
  3460. time_slider_outer.appendChild(time_slider);
  3461. return time_slider_outer;
  3462. }
  3463. LinternaMagica.prototype.time_slider_scroll_event = function (event, element)
  3464. {
  3465. event.preventDefault();
  3466. var self = this;
  3467. var id = element.getAttribute("id").
  3468. replace(/linterna-magica-controls-time-slider-outer-frame-/,"");
  3469. var pos = this.slider_control.apply(self, [event]);
  3470. if (pos.direction > 0)
  3471. {
  3472. this.player.forward.apply(self,[id,pos.val]);
  3473. }
  3474. else
  3475. {
  3476. this.player.rewind.apply(self,[id,pos.val]);
  3477. }
  3478. }
  3479. LinternaMagica.prototype.time_slider_click_event = function (event, element)
  3480. {
  3481. event.preventDefault();
  3482. var self = this;
  3483. var raw_id = element.getAttribute("id");
  3484. var id = raw_id.split('-');
  3485. id = id[id.length-1];
  3486. if (!id)
  3487. {
  3488. return;
  3489. }
  3490. clearInterval(this.player_timers[id]);
  3491. delete this.player_timers[id];
  3492. var pos = this.slider_control.apply(self, [event]);
  3493. if (pos.direction > 0)
  3494. {
  3495. this.player.forward.apply(self,[id,pos.val]);
  3496. }
  3497. else
  3498. {
  3499. this.player.rewind.apply(self,[id,pos.val]);
  3500. }
  3501. this.player_timers[id] =
  3502. setInterval(
  3503. function()
  3504. {
  3505. self.ticker.apply(self,[id]);
  3506. }, 500);
  3507. }
  3508. LinternaMagica.prototype.create_volume_slider = function(object_data)
  3509. {
  3510. var lm_id = object_data.linterna_magica_id;
  3511. var self = this;
  3512. var volume_slider_outer = document.createElement("div");
  3513. volume_slider_outer.setAttribute("class", "linterna-magica-controls-volume-"+
  3514. "slider-outer-frame");
  3515. volume_slider_outer.setAttribute("id", "linterna-magica-controls-"+
  3516. "volume-slider-outer-frame-"+lm_id);
  3517. volume_slider_outer.setAttribute("title", this._("Volume control"));
  3518. volume_slider_outer.style.setProperty("display", "none", "important");
  3519. var volume_slider = document.createElement("div");
  3520. volume_slider.setAttribute("class",
  3521. "linterna-magica-controls-horizontal-slider "+
  3522. "linterna-magica-controls-volume-slider");
  3523. volume_slider.setAttribute("id", "linterna-magica-controls-"+
  3524. "volume-slider-"+lm_id);
  3525. volume_slider.setAttribute("title", this._("Volume control"));
  3526. var progress_bar = document.createElement("div");
  3527. progress_bar.setAttribute("title", this._("Volume"));
  3528. progress_bar.setAttribute("class", "linterna-magica-controls-horizontal-"+
  3529. "slider-progress-bar");
  3530. progress_bar.setAttribute("id", "linterna-magica-controls-"+
  3531. "volume-slider-progress-bar-"+lm_id);
  3532. var volume_knob_move = null;
  3533. var doc_dir = this.get_document_direction();
  3534. if (doc_dir == "rtl" ||
  3535. this.languages[this.lang].__direction == "rtl")
  3536. {
  3537. volume_knob_move = "right";
  3538. }
  3539. else
  3540. {
  3541. volume_knob_move = "left";
  3542. }
  3543. var volume_knob = document.createElement("a");
  3544. volume_knob.setAttribute("class", "linterna-magica-controls-slider-knob");
  3545. volume_knob.setAttribute("id",
  3546. "linterna-magica-controls-"+
  3547. "volume-slider-knob-"+lm_id);
  3548. volume_knob.style.setProperty(volume_knob_move, "0px", "important");
  3549. volume_knob.setAttribute("href", "#");
  3550. volume_knob.setAttribute("title", this._("Volume control"));
  3551. volume_slider.appendChild(volume_knob);
  3552. volume_slider_outer.appendChild(progress_bar);
  3553. volume_slider_outer.appendChild(volume_slider);
  3554. return volume_slider_outer;
  3555. }
  3556. LinternaMagica.prototype.volume_slider_scroll_event = function (event, element)
  3557. {
  3558. event.preventDefault();
  3559. var self = this;
  3560. var id = element.getAttribute("id").
  3561. replace(/linterna-magica-controls-volume-slider-/,"");
  3562. event.preventDefault();
  3563. var pos = self.slider_control.apply(self, [event]);
  3564. this.player.set_volume.apply(self, [id, pos.val]);
  3565. }
  3566. LinternaMagica.prototype.volume_slider_click_event = function (event, element)
  3567. {
  3568. event.preventDefault();
  3569. var self = this;
  3570. var id = element.getAttribute("id").
  3571. replace(/linterna-magica-controls-volume-slider-outer-frame-/,"");
  3572. event.preventDefault();
  3573. var pos = self.slider_control.apply(self, [event]);
  3574. this.player.set_volume.apply(self, [id, pos.val]);
  3575. }
  3576. LinternaMagica.prototype.create_mute_button = function(object_data)
  3577. {
  3578. var lm_id = object_data.linterna_magica_id;
  3579. var mute = document.createElement("a");
  3580. mute.setAttribute("class", "linterna-magica-controls-buttons "+
  3581. "linterna-magica-controls-buttons-mute");
  3582. mute.setAttribute("id", "linterna-magica-controls-button-mute-"+lm_id);
  3583. mute.setAttribute("href", "#");
  3584. mute.setAttribute("title", this._("Mute"));
  3585. mute.textContent ="M";
  3586. return mute;
  3587. }
  3588. LinternaMagica.prototype.mute_button_mouse_over_event = function (event, element)
  3589. {
  3590. var self = this;
  3591. var mute = element;
  3592. var id = element.getAttribute("id").
  3593. replace(/linterna-magica-controls-button-mute-/,"");
  3594. var id_string = "linterna-magica-controls-volume-slider-outer-frame-"+id;
  3595. var volume_slider =
  3596. document.getElementById(id_string);
  3597. if (!volume_slider)
  3598. {
  3599. return null;
  3600. }
  3601. volume_slider.style.removeProperty("display");
  3602. }
  3603. LinternaMagica.prototype.mute_button_click_event = function (event, element)
  3604. {
  3605. event.preventDefault();
  3606. var self = this;
  3607. var mute = element;
  3608. var id = element.getAttribute("id").
  3609. replace(/linterna-magica-controls-button-mute-/,"");
  3610. var volume =
  3611. this.player.toggle_mute.apply(self,[id]);
  3612. var volume_slider =
  3613. document.getElementById("linterna-magica-controls-"+
  3614. "volume-slider-"+id);
  3615. var volume_knob =
  3616. document.getElementById("linterna-magica-controls-"+
  3617. "volume-slider-knob-"+id);
  3618. var volume_progress =
  3619. document.getElementById("linterna-magica-controls-"+
  3620. "volume-slider-progress-bar-"+id);
  3621. if (/M/i.test(mute.textContent))
  3622. {
  3623. mute.setAttribute("title", this._("Unmute"));
  3624. mute.textContent = "U";
  3625. mute.setAttribute("class",
  3626. "linterna-magica-controls-buttons "+
  3627. "linterna-magica-controls-"+
  3628. "buttons-unmute");
  3629. volume_slider.setAttribute("title",this._("Muted"));
  3630. volume_knob.setAttribute("title",this._("Muted"));
  3631. mute.lm_volume_knob_direction =
  3632. volume_knob.style.getPropertyValue('left') ? "left" : "right";
  3633. mute.lm_volume_knob_position =
  3634. volume_knob.style.getPropertyValue(
  3635. mute.lm_volume_knob_direction);
  3636. volume_knob.style.setProperty(mute.lm_volume_knob_direction,
  3637. "0px", "important");
  3638. volume_progress.style.setProperty("width", "0px", "important");
  3639. }
  3640. else
  3641. {
  3642. mute.setAttribute("title", this._("Mute"));
  3643. mute.textContent = "M";
  3644. mute.setAttribute("class", "linterna-magica-controls-buttons "+
  3645. "linterna-magica-controls-buttons-mute");
  3646. volume_slider.setAttribute("title", this._("Volume control"));
  3647. volume_knob.setAttribute("title", this._("Volume control"));
  3648. volume_knob.style.setProperty(mute.lm_volume_knob_direction,
  3649. mute.lm_volume_knob_position,
  3650. "important");
  3651. volume_progress.style.setProperty("width",
  3652. (mute.lm_volume_knob_position ?
  3653. parseInt(mute.lm_volume_knob_position)+3 :
  3654. 0)+"px",
  3655. "important");
  3656. }
  3657. }
  3658. LinternaMagica.prototype.volume_slider_hide_event = function(event, element)
  3659. {
  3660. if (!element.hasAttribute('id'))
  3661. {
  3662. return null;
  3663. }
  3664. var id = element.getAttribute("id").split('-');
  3665. id = id[id.length-1];
  3666. var volume_slider =
  3667. document.getElementById("linterna-magica-controls-"+
  3668. "volume-slider-outer-frame-"+id);
  3669. if (!volume_slider)
  3670. {
  3671. return null;
  3672. }
  3673. volume_slider.style.setProperty("display", "none", "important");
  3674. }
  3675. LinternaMagica.prototype.create_fullscreen_button = function(object_data)
  3676. {
  3677. var lm_id = object_data.linterna_magica_id;
  3678. var fullscreen = document.createElement("a");
  3679. fullscreen.setAttribute(
  3680. "class", "linterna-magica-controls-buttons "+
  3681. "linterna-magica-controls-buttons-fullscreen");
  3682. fullscreen.setAttribute("id",
  3683. "linterna-magica-controls-button-fullscreen-"+lm_id);
  3684. fullscreen.setAttribute("href", "#");
  3685. fullscreen.setAttribute("title", this._("Fullscreen"));
  3686. fullscreen.textContent ="Fs";
  3687. return fullscreen;
  3688. }
  3689. LinternaMagica.prototype.fullscreen_button_click_event = function (event, element)
  3690. {
  3691. event.preventDefault();
  3692. var id = element.getAttribute("id").
  3693. replace(/linterna-magica-controls-button-fullscreen-/,"");
  3694. var self = this;
  3695. this.player.fullscreen.apply(self, [id]);
  3696. }
  3697. LinternaMagica.prototype.create_toggle_plugin_link =
  3698. function(not_in_header,id,switch_type)
  3699. {
  3700. var toggle_plugin = document.createElement("a");
  3701. var self = this;
  3702. var wrapper = null;
  3703. toggle_plugin.setAttribute("href", "#");
  3704. if (not_in_header)
  3705. {
  3706. toggle_plugin.setAttribute("class", "linterna-magica-toggle-plugin");
  3707. }
  3708. var toggle_plugin_click_function = function(ev)
  3709. {
  3710. var el = this;
  3711. self.toggle_plugin.apply(self, [ev, el]);
  3712. };
  3713. toggle_plugin.addEventListener("click",
  3714. toggle_plugin_click_function, false);
  3715. if (not_in_header)
  3716. {
  3717. toggle_plugin.textContent = "Linterna Mágica >>";
  3718. toggle_plugin.setAttribute("id",
  3719. "linterna-magica-toggle-plugin-"+id);
  3720. var span = document.createElement("span");
  3721. span.setAttribute("class", "linterna-magica-toggle-plugin-outer-frame");
  3722. span.appendChild(toggle_plugin);
  3723. wrapper = document.createElement("p");
  3724. wrapper.appendChild(span);
  3725. wrapper.setAttribute("class", "linterna-magica-toggle-plugin-wrapper");
  3726. }
  3727. else
  3728. {
  3729. if (/html5/i.test(switch_type))
  3730. {
  3731. toggle_plugin.textContent = this._("HTML5");
  3732. }
  3733. else
  3734. {
  3735. toggle_plugin.textContent = this._("Plugin");
  3736. }
  3737. toggle_plugin.setAttribute("class",
  3738. "linterna-magica-toggle-plugin-header");
  3739. toggle_plugin.setAttribute("id",
  3740. "linterna-magica-toggle-plugin-header-"+id);
  3741. }
  3742. if (/html5/i.test(switch_type))
  3743. {
  3744. var title = this.
  3745. _("Switch between site's HTML5 player and Linterna Mágica");
  3746. toggle_plugin.setAttribute("title", title);
  3747. }
  3748. else
  3749. {
  3750. var flash_mime_type = navigator.mimeTypes['application/x-shockwave-flash'];
  3751. var flash_plugin = flash_mime_type.enabledPlugin ?
  3752. flash_mime_type.enabledPlugin.filename : '';
  3753. var title = this.
  3754. _("Switch between flash plugin and Linterna Mágica");
  3755. if (/gnash/i.test(flash_plugin))
  3756. {
  3757. title = this.
  3758. _("Switch between the Gnash plugin for flash and Linterna Mágica");
  3759. }
  3760. else if (/lightspark/i.test(flash_plugin))
  3761. {
  3762. title = this.
  3763. _("Switch between the Lightspark plugin for flash and Linterna Mágica");
  3764. }
  3765. else if (/totem-vegas/i.test(flash_plugin))
  3766. {
  3767. title = this.
  3768. _("Switch between the Totem Vegas plugin for flash and Linterna Mágica");
  3769. }
  3770. toggle_plugin.setAttribute("title",title);
  3771. }
  3772. return wrapper ? wrapper : toggle_plugin;
  3773. }
  3774. LinternaMagica.prototype.toggle_plugin = function(event,element)
  3775. {
  3776. event.preventDefault();
  3777. var linterna_magica_id = element.getAttribute("id");
  3778. linterna_magica_id = linterna_magica_id.split("-");
  3779. linterna_magica_id = linterna_magica_id[linterna_magica_id.length-1];
  3780. var lm_interface =
  3781. document.getElementById("linterna-magica-"+linterna_magica_id);
  3782. if (!lm_interface)
  3783. {
  3784. return null;
  3785. }
  3786. var html5_parent = null;
  3787. var site_player =
  3788. this.get_flash_video_object(linterna_magica_id,
  3789. lm_interface.parentNode);
  3790. if (!site_player)
  3791. {
  3792. html5_parent = lm_interface.parentNode;
  3793. site_player =
  3794. this.find_site_html5_player_wrapper(html5_parent);
  3795. if (!site_player)
  3796. {
  3797. return null;
  3798. }
  3799. }
  3800. if (!site_player.style.getPropertyValue("display") &&
  3801. lm_interface.style.getPropertyValue("display"))
  3802. {
  3803. this.log("LinternaMagica.toggle_plugin:\n"+
  3804. "Replacing/hiding swf object (id:"+
  3805. linterna_magica_id+
  3806. ") with video object.", 4);
  3807. if (!html5_parent)
  3808. {
  3809. this.hide_flash_video_object(linterna_magica_id,
  3810. site_player.parentNode);
  3811. }
  3812. else
  3813. {
  3814. this.pause_site_html5_player(html5_parent);
  3815. this.hide_site_html5_player(html5_parent);
  3816. }
  3817. this.show_lm_interface(linterna_magica_id);
  3818. if (this.controls)
  3819. {
  3820. this.player.init.apply(this,[linterna_magica_id]);
  3821. }
  3822. var ext_toggle_wrapper = lm_interface.nextSibling;
  3823. ext_toggle_wrapper.style.setProperty("display", "none", "important");
  3824. }
  3825. else if (!lm_interface.style.getPropertyValue("display") &&
  3826. site_player.style.getPropertyValue("display"))
  3827. {
  3828. this.log("LinternaMagica.toggle_plugin:\n"+
  3829. "Replacing/hiding video object (id:"+
  3830. linterna_magica_id+
  3831. ") with swf object.", 4);
  3832. if (!html5_parent)
  3833. {
  3834. this.show_flash_video_object(linterna_magica_id,
  3835. site_player.parentNode);
  3836. }
  3837. else
  3838. {
  3839. this.show_site_html5_player(html5_parent);
  3840. }
  3841. var about = document.getElementById("linterna-magica-about-box-"+
  3842. linterna_magica_id);
  3843. var update_info =
  3844. document.getElementById("linterna-magica-update-info-box-"+
  3845. linterna_magica_id);
  3846. if (about && !about.style.display)
  3847. {
  3848. this.about(null, about);
  3849. }
  3850. if (update_info && !update_info.style.display)
  3851. {
  3852. this.show_or_hide_update_info(null, update_info);
  3853. }
  3854. this.hide_lm_interface(linterna_magica_id);
  3855. var ext_toggle_wrapper = lm_interface.nextSibling;
  3856. ext_toggle_wrapper.style.removeProperty("display");
  3857. }
  3858. }
  3859. LinternaMagica.prototype.create_checker_frame = function(data)
  3860. {
  3861. if (!data || typeof(data) != "object")
  3862. {
  3863. return null;
  3864. }
  3865. if (!data.parser_timeout)
  3866. {
  3867. data.parser_timeout_counter = 0;
  3868. var self = this;
  3869. data.parser_timeout =
  3870. setInterval(function()
  3871. {
  3872. self.jsonp_data_parser.apply(self,[data]);
  3873. }, 10);
  3874. }
  3875. var checker_frame = document.createElement("object");
  3876. checker_frame.setAttribute("id", data.frame_id);
  3877. var frame_script = function()
  3878. {
  3879. window[jsonp_function] = function (request_data)
  3880. {
  3881. var hash = /#/i.test(receiver_location) ? "" : "#";
  3882. var data = json_parser.json_to_string(request_data);
  3883. data = encodeURI(data);
  3884. var packed_data = btoa(data);
  3885. window.parent.location = decodeURI(receiver_location)+hash+
  3886. encodeURI("&linterna_magica&lm_request_data="+
  3887. packed_data+
  3888. "&linterna_magica");
  3889. };
  3890. };
  3891. var frame_data =
  3892. "<html><head>"+
  3893. "<script async='async' defer='defer' type='text/javascript'>"+
  3894. "var json_parser = new Object(); json_parser.json_to_string = "+
  3895. this.json_to_string.toString()+"; "+
  3896. "var jsonp_function ='"+data.jsonp_function+"'; "+
  3897. "var receiver_location='"+
  3898. encodeURI(window.location)+"';("+frame_script.toString()+")();"+
  3899. "</script>"+
  3900. "<script async='async' defer='defer' type='text/javascript' src='"+
  3901. data.jsonp_script_link+"'>"+
  3902. "</script>"+
  3903. "</head><body></body></html>";
  3904. checker_frame.setAttribute("data",
  3905. "data:text/html;charset=UTF-8;base64,"+
  3906. btoa(frame_data));
  3907. checker_frame.setAttribute("width","1px");
  3908. checker_frame.setAttribute("height", "1px");
  3909. document.getElementsByTagName("body")[0].appendChild(checker_frame);
  3910. }
  3911. LinternaMagica.prototype.jsonp_data_parser = function(data)
  3912. {
  3913. if (!data || typeof(data) !== "object")
  3914. {
  3915. return null;
  3916. }
  3917. data.parser_timeout_counter++;
  3918. if (data.parser_timeout_counter >= 10000)
  3919. {
  3920. clearInterval(data.parser_timeout);
  3921. }
  3922. if (/linterna_magica/i.test(window.location))
  3923. {
  3924. clearInterval(data.parser_timeout);
  3925. var jsonp_data =
  3926. window.location.toString().split("&linterna_magica");
  3927. window.location = jsonp_data[0]+jsonp_data[jsonp_data.length-1];
  3928. var o = document.getElementById(data.frame_id);
  3929. if (o)
  3930. {
  3931. o.parentNode.removeChild(o);
  3932. }
  3933. jsonp_data = jsonp_data[1].split("lm_request_data=")[1].split("&")[0];
  3934. jsonp_data = this.string_to_json(decodeURI(atob(jsonp_data)));
  3935. data.parser_function.apply(this, [jsonp_data, data.user_data]);
  3936. }
  3937. }
  3938. LinternaMagica.prototype.json_to_string = function (json_object)
  3939. {
  3940. var json_as_string = null;
  3941. if (typeof(JSON) == "object" &&
  3942. typeof(JSON.stringify) == "function")
  3943. {
  3944. try
  3945. {
  3946. json_as_string = JSON.stringify(json_object);
  3947. }
  3948. catch(e)
  3949. {
  3950. }
  3951. }
  3952. return json_as_string;
  3953. }
  3954. LinternaMagica.prototype.string_to_json = function (json_string)
  3955. {
  3956. var json_object = null;
  3957. if (typeof(JSON) == "object" &&
  3958. typeof(JSON.parse) == "function")
  3959. {
  3960. try
  3961. {
  3962. json_object = JSON.parse(json_string)
  3963. }
  3964. catch(e)
  3965. {
  3966. }
  3967. }
  3968. return json_object;
  3969. }
  3970. LinternaMagica.prototype._ = function (string)
  3971. {
  3972. if (this.lang == "C")
  3973. {
  3974. return string;
  3975. }
  3976. var use_lang = this.languages[this.lang];
  3977. return use_lang ?
  3978. use_lang[string] ? use_lang[string] : string : string ;
  3979. }
  3980. LinternaMagica.prototype.N_ = function (string)
  3981. {
  3982. return this._(string);
  3983. }
  3984. LinternaMagica.prototype.set_env_lang = function()
  3985. {
  3986. var env_lang = navigator.language.replace("-", "_");
  3987. if (env_lang.toLowerCase() == "c")
  3988. {
  3989. env_lang = "en_US";
  3990. }
  3991. if(!/[a-zA-Z]{2}(_|-)[a-zA-Z]{2}/.test(env_lang))
  3992. {
  3993. env_lang = env_lang.toLowerCase()+"_"+
  3994. env_lang.toUpperCase();
  3995. }
  3996. env_lang = env_lang.split(/_/);
  3997. env_lang[env_lang.length-1] =
  3998. env_lang[env_lang.length-1].toUpperCase();
  3999. env_lang[0] =
  4000. env_lang[0].toLowerCase();
  4001. env_lang = env_lang.join("_");
  4002. this.env_lang = env_lang;
  4003. }
  4004. LinternaMagica.prototype.get_document_direction = function()
  4005. {
  4006. var html = document.getElementsByTagName("html");
  4007. var dir = html[0].hasAttribute("dir") ?
  4008. html[0].getAttribute("dir") : null;
  4009. if (!dir)
  4010. {
  4011. var body = document.getElementsByTagName("body");
  4012. dir = body[0].hasAttribute("dir") ?
  4013. body[0].getAttribute("dir") : null;
  4014. }
  4015. if (!dir || (dir.toLowerCase() !== "rtl" &&
  4016. dir.toLowerCase() !== "ltr")) {
  4017. dir = "ltr";
  4018. }
  4019. return dir.toLowerCase();
  4020. }
  4021. LinternaMagica.prototype.log = function(message, level)
  4022. {
  4023. if (!this.debug_level || this.disabled_log)
  4024. {
  4025. return;
  4026. }
  4027. if (!level)
  4028. {
  4029. level = 1;
  4030. }
  4031. if (this.debug_level >= level)
  4032. {
  4033. var date = new Date();
  4034. var str = [date.getHours(), date.getMinutes(),
  4035. date.getSeconds(), date.getMilliseconds()].join(":");
  4036. var host_get = window.self;
  4037. var host = host_get.location.hostname;
  4038. var indent = "";
  4039. if (this.log_to != "web")
  4040. {
  4041. for (var i=0, l=level; i<l; i++)
  4042. {
  4043. indent += "\t";
  4044. }
  4045. }
  4046. var log_string = message + " at "+host + " time: "+str;
  4047. var level_string = " ("+level+") ";
  4048. log_string = log_string.replace(/^/g, indent+level_string).
  4049. replace(/\n/g, "\n"+indent+level_string);
  4050. try
  4051. {
  4052. if (this.log_to == "web")
  4053. {
  4054. var row = document.createElement('p');
  4055. row.setAttribute("class",
  4056. "linterna-magica-log-to-web-message");
  4057. var lines = log_string.split(/\n/);
  4058. var t = document.createTextNode(lines[0]);
  4059. row.appendChild(t);
  4060. for (var i=1,l=lines.length; i<l; i++)
  4061. {
  4062. var span = document.createElement("span");
  4063. var t = document.createTextNode(lines[i]);
  4064. span.appendChild(t);
  4065. row.appendChild(span);
  4066. }
  4067. row.style.setProperty("margin-left",
  4068. parseInt(3.5*level)+"px", "important");
  4069. var bg_color = parseInt(136 - 32*level);
  4070. row.style.setProperty("background-color",
  4071. "rgb("+bg_color+","+bg_color+","+
  4072. bg_color+")", "important");
  4073. this.logger.appendChild(row);
  4074. }
  4075. else
  4076. {
  4077. throw "Log to web not selected.";
  4078. }
  4079. }
  4080. catch(e)
  4081. {
  4082. try
  4083. {
  4084. console.log(log_string);
  4085. }
  4086. catch(e)
  4087. {
  4088. this.disabled_log = true;
  4089. }
  4090. }
  4091. }
  4092. }
  4093. LinternaMagica.prototype.create_web_logger = function()
  4094. {
  4095. var logger = document.createElement("div");
  4096. logger.setAttribute("id", "linterna-magica-web-log");
  4097. logger.setAttribute("class", "linterna-magica-web-log");
  4098. if (!logger)
  4099. {
  4100. this.log("LinternaMagica.create_web_logger:\n"+
  4101. "Unable to create web log. Will log to console.",1);
  4102. return null;
  4103. }
  4104. var debug_button = document.createElement("p");
  4105. debug_button.setAttribute('class', 'linterna-magica-web-log-debug-button-wrap');
  4106. debug_button.setAttribute('id', 'linterna-magica-web-log-debug-button-wrap');
  4107. var logo = this.create_web_log_link();
  4108. logo.textContent = '';
  4109. logo.setAttribute('class',
  4110. 'linterna-magica-web-log-debug-button');
  4111. debug_button.appendChild(logo);
  4112. logo.addEventListener('click', this.show_or_hide_web_log, true);
  4113. var bug = document.createElement('span');
  4114. bug.setAttribute('class', 'linterna-magica-web-log-debug-button-bug');
  4115. logo.appendChild(bug);
  4116. var close = this.create_web_log_close_link();
  4117. close.setAttribute('class',
  4118. 'linterna-magica-web-log-debug-button-close');
  4119. debug_button.appendChild(close);
  4120. close.addEventListener('click', this.remove_web_log, true);
  4121. document.body.appendChild(debug_button);
  4122. var header = document.createElement("div");
  4123. header.setAttribute("class",
  4124. "linterna-magica-web-log-header");
  4125. header.setAttribute('title', this._("Double-click to change the size"));
  4126. var p = document.createElement("p");
  4127. var bug_header = this.create_web_log_link();
  4128. bug_header.setAttribute("class",
  4129. "linterna-magica-web-log-link "+
  4130. " linterna-magica-web-log-left-buttons");
  4131. bug_header.setAttribute('title', this._("Click to change the size"));
  4132. bug_header.addEventListener('click',this.change_web_log_height, false);
  4133. p.appendChild(bug_header);
  4134. var txt = document.createTextNode(this._(
  4135. "Linterna Mágica error and debug messages"));
  4136. p.appendChild(txt);
  4137. header.appendChild(p);
  4138. var close = this.create_web_log_close_link();
  4139. p.appendChild(close);
  4140. close.addEventListener("click", this.remove_web_log, false);
  4141. var collapse_log = document.createElement("a");
  4142. collapse_log.textContent="-";
  4143. collapse_log.setAttribute("href", "#");
  4144. collapse_log.setAttribute("title", this._("Hide debug messages"));
  4145. collapse_log.setAttribute("class", "linterna-magica-web-log-collapse "+
  4146. " linterna-magica-web-log-right-buttons");
  4147. p.appendChild(collapse_log);
  4148. collapse_log.addEventListener("click",
  4149. this.show_or_hide_web_log, false);
  4150. header.addEventListener('dblclick',this.change_web_log_height, false);
  4151. logger.appendChild(header);
  4152. var body = document.createElement("div");
  4153. body.setAttribute("id", "linterna-magica-web-log-messages");
  4154. body.setAttribute("class", "linterna-magica-web-log-messages");
  4155. body.setAttribute('title',
  4156. this._("Ctrl+double-click to select all messages"));
  4157. var self = this;
  4158. var body_click_function = function(ev)
  4159. {
  4160. var el = this;
  4161. self.select_all_text_in_element.apply(self, [ev, el]);
  4162. };
  4163. body.addEventListener('dblclick',body_click_function, true);
  4164. logger.appendChild(body);
  4165. this.logger = body;
  4166. this.logger_with_header = logger;
  4167. if (this.web_log_expand)
  4168. {
  4169. debug_button.style.setProperty("display", "none", "important");
  4170. logger.style.removeProperty("display");
  4171. }
  4172. else
  4173. {
  4174. logger.style.setProperty("display", "none", "important");
  4175. debug_button.style.removeProperty("display");
  4176. }
  4177. return logger;
  4178. }
  4179. LinternaMagica.prototype.create_web_log_link = function()
  4180. {
  4181. var log_link = document.createElement("a");
  4182. log_link.setAttribute("title",
  4183. this._("Linterna Mágica error and debug messages"));
  4184. log_link.setAttribute("href", "#");
  4185. log_link.textContent = this._("Debug messages");
  4186. return log_link;
  4187. }
  4188. LinternaMagica.prototype.create_web_log_close_link = function()
  4189. {
  4190. var close = document.createElement("a");
  4191. close.textContent="x";
  4192. close.setAttribute("href", "#");
  4193. close.setAttribute("class", "linterna-magica-web-log-close "+
  4194. " linterna-magica-web-log-right-buttons");
  4195. close.setAttribute("title", this._("Remove log"));
  4196. return close;
  4197. }
  4198. LinternaMagica.prototype.show_or_hide_web_log = function(event, element)
  4199. {
  4200. event.preventDefault();
  4201. var logger = document.getElementById('linterna-magica-web-log');
  4202. var debug_button = document.
  4203. getElementById('linterna-magica-web-log-debug-button-wrap');
  4204. if (!logger || !debug_button)
  4205. {
  4206. return null;
  4207. }
  4208. var visible_logger = logger.style.getPropertyValue('display');
  4209. if (visible_logger)
  4210. {
  4211. debug_button.style.setProperty("display", "none", "important");
  4212. logger.style.removeProperty("display");
  4213. }
  4214. else
  4215. {
  4216. logger.style.setProperty("display", "none", "important");
  4217. debug_button.style.removeProperty("display");
  4218. }
  4219. }
  4220. LinternaMagica.prototype.remove_web_log = function(event, element)
  4221. {
  4222. var logger = document.getElementById('linterna-magica-web-log');
  4223. var debug_button = document.
  4224. getElementById('linterna-magica-web-log-debug-button-wrap');
  4225. if (!logger || !debug_button)
  4226. {
  4227. return null;
  4228. }
  4229. debug_button.parentNode.removeChild(debug_button);
  4230. logger.parentNode.removeChild(logger);
  4231. var log_buttons = document.querySelectorAll('.linterna-magica-web-log-link');
  4232. for(var i=0, l=log_buttons.length; i<l; i++)
  4233. {
  4234. var link = log_buttons[i];
  4235. link.parentNode.removeChild(link);
  4236. }
  4237. }
  4238. LinternaMagica.prototype.change_web_log_height = function(event, element)
  4239. {
  4240. var logger = document.getElementById('linterna-magica-web-log');
  4241. var body = document.getElementById('linterna-magica-web-log-messages');
  4242. if(!logger || !body)
  4243. {
  4244. return null;
  4245. }
  4246. var is_max = logger.style.getPropertyValue('height');
  4247. if (is_max)
  4248. {
  4249. logger.style.removeProperty('height');
  4250. body.style.removeProperty('height');
  4251. }
  4252. else
  4253. {
  4254. logger.style.setProperty('height', '93%', 'important');
  4255. body.style.setProperty('height', '93%', 'important');
  4256. }
  4257. }
  4258. LinternaMagica.prototype.select_all_text_in_element =
  4259. function(event, element)
  4260. {
  4261. if (!window.getSelection)
  4262. {
  4263. this.tripple_click = 0;
  4264. return null;
  4265. }
  4266. if (event.ctrlKey)
  4267. {
  4268. var range = document.createRange();
  4269. range.selectNode(element);
  4270. window.getSelection().addRange(range);
  4271. }
  4272. }
  4273. LinternaMagica.prototype.player.set_player_name = function(id)
  4274. {
  4275. var name = null;
  4276. var video_object = this.get_video_object(id);
  4277. if (!video_object)
  4278. {
  4279. return null;
  4280. }
  4281. var mimeTypes = navigator.mimeTypes;
  4282. var mime = mimeTypes[video_object.getAttribute("type")];
  4283. if (mime && mime.enabledPlugin && mime.enabledPlugin.name)
  4284. {
  4285. name =mime.enabledPlugin.name;
  4286. }
  4287. else
  4288. {
  4289. name = "unknown";
  4290. }
  4291. if(name)
  4292. {
  4293. this.log("LinternaMagica.player.set_player_name:\n"+
  4294. "Name set to "+name,3);
  4295. video_object.lm_player_name = name;
  4296. }
  4297. return name;
  4298. }
  4299. LinternaMagica.prototype.get_player_name = function(id)
  4300. {
  4301. var name = null;
  4302. var video_object = this.get_video_object(id);
  4303. if (video_object)
  4304. {
  4305. name = video_object.lm_player_name;
  4306. }
  4307. return name;
  4308. }
  4309. LinternaMagica.prototype.player.state = function(id)
  4310. {
  4311. var video_object = this.get_video_object(id);
  4312. var player_name = this.get_player_name(id);
  4313. if (!video_object || !player_name)
  4314. {
  4315. return null;
  4316. }
  4317. var time = new Object();
  4318. time.duration = null;
  4319. time.position = null;
  4320. time.string = "--:--:--";
  4321. if (/gecko-mediaplayer/.test(player_name))
  4322. {
  4323. switch(video_object.playState)
  4324. {
  4325. case 0:
  4326. time.state = this._("Loading");
  4327. break;
  4328. case 6:
  4329. time.state = this._("Buffering");
  4330. break;
  4331. }
  4332. if (!time.state)
  4333. {
  4334. try
  4335. {
  4336. time.position = video_object.getTime();
  4337. time.duration = video_object.getDuration();
  4338. time.percent = video_object.getPercent();
  4339. }
  4340. catch(e)
  4341. {
  4342. return null;
  4343. }
  4344. }
  4345. }
  4346. else if (/vlc/i.test(player_name))
  4347. {
  4348. if (video_object.input)
  4349. {
  4350. switch (video_object.input.state)
  4351. {
  4352. case 0:
  4353. time.state = this._("Loading");
  4354. break;
  4355. case 2:
  4356. time.state = this._("Buffering");
  4357. break;
  4358. }
  4359. }
  4360. if (!time.state && video_object.input)
  4361. {
  4362. try
  4363. {
  4364. time.position = video_object.input.time/1000;
  4365. time.duration = video_object.input.length/1000;
  4366. time.percent = (time.position/time.duration);
  4367. time.percent = time.percent ? time.percent : 0;
  4368. }
  4369. catch(e)
  4370. {
  4371. return null;
  4372. }
  4373. }
  4374. }
  4375. else if (/xine/i.test(player_name))
  4376. {
  4377. try
  4378. {
  4379. var state = video_object.controls.GetPlayState();
  4380. if (state !== 4 && state !== 3)
  4381. time.state = this._("Loading");
  4382. }
  4383. catch(e)
  4384. {
  4385. return null;
  4386. }
  4387. if (!time.state)
  4388. {
  4389. try
  4390. {
  4391. time.position = video_object.controls.GetPosition()/1000;
  4392. time.duration = video_object.controls.GetLength()/1000;
  4393. time.percent = (time.position/time.duration);
  4394. time.percent = time.percent ? time.percent : 0;
  4395. }
  4396. catch(e)
  4397. {
  4398. return null;
  4399. }
  4400. }
  4401. }
  4402. else if (/quicktime plug-in/i.test(player_name))
  4403. {
  4404. var status;
  4405. try
  4406. {
  4407. status = video_object.GetPluginStatus();
  4408. }
  4409. catch(e)
  4410. {
  4411. status ="NOT_READY";
  4412. }
  4413. switch(status)
  4414. {
  4415. case "Loading":
  4416. case "Waiting":
  4417. time.state = this._("Loading");
  4418. break;
  4419. case "NOT_READY":
  4420. time.state = this._("Waiting plugin");
  4421. break;
  4422. }
  4423. if (!time.state)
  4424. {
  4425. try
  4426. {
  4427. time.position = video_object.GetTime()/1000;
  4428. time.duration = video_object.GetDuration()/1000;
  4429. time.percent = (time.position/time.duration);
  4430. time.percent = time.percent ? time.percent : 0;
  4431. }
  4432. catch(e)
  4433. {
  4434. return null;
  4435. }
  4436. }
  4437. }
  4438. if (time.state)
  4439. {
  4440. var dots = Math.random()*7;
  4441. for (var d=0; d <dots ; d ++)
  4442. {
  4443. time.state += ".";
  4444. }
  4445. }
  4446. var sec_pos = Math.round(time.position) % 60;
  4447. var min_pos = Math.floor(time.position / 60) % 60;
  4448. var hour_pos = Math.floor(time.position / 3600);
  4449. var sec_dur = Math.round(time.duration) % 60;
  4450. var min_dur = Math.floor(time.duration / 60) % 60;
  4451. var hour_dur = Math.floor(time.duration / 3600);
  4452. time.string = (hour_pos ?
  4453. (hour_pos+":") : "")+
  4454. (min_pos+":")+
  4455. ((sec_pos<10)?"0"+sec_pos:sec_pos) +" / "+
  4456. (hour_dur ? (hour_dur+":") : "") +
  4457. (min_dur+":")+
  4458. ((sec_dur<10)?"0"+sec_dur:sec_dur);
  4459. return time;
  4460. }
  4461. LinternaMagica.prototype.player.pause = function(id)
  4462. {
  4463. var video_object = this.get_video_object(id);
  4464. var player_name = this.get_player_name(id);
  4465. if (!video_object || !player_name)
  4466. {
  4467. return null;
  4468. }
  4469. if (/gecko-mediaplayer/.test(player_name))
  4470. {
  4471. video_object.Pause();
  4472. }
  4473. else if (/vlc/i.test(player_name))
  4474. {
  4475. video_object.playlist.togglePause();
  4476. }
  4477. else if (/xine/i.test(player_name))
  4478. {
  4479. video_object.controls.pause();
  4480. }
  4481. else if (/quicktime plug-in/i.test(player_name))
  4482. {
  4483. video_object.Stop();
  4484. }
  4485. }
  4486. LinternaMagica.prototype.player.play = function(id)
  4487. {
  4488. var video_object = this.get_video_object(id);
  4489. var player_name = this.get_player_name(id);
  4490. if (!video_object || !player_name)
  4491. {
  4492. return null;
  4493. }
  4494. if (/gecko-mediaplayer/.test(player_name) ||
  4495. /totem/.test(player_name))
  4496. {
  4497. video_object.Play();
  4498. }
  4499. else if (/vlc/i.test(player_name))
  4500. {
  4501. video_object.playlist.play();
  4502. }
  4503. else if (/xine/i.test(player_name))
  4504. {
  4505. video_object.controls.play();
  4506. }
  4507. else if (/quicktime plug-in/i.test(player_name))
  4508. {
  4509. video_object.Play();
  4510. }
  4511. }
  4512. LinternaMagica.prototype.player.stop = function(id)
  4513. {
  4514. var video_object = this.get_video_object(id);
  4515. var player_name = this.get_player_name(id);
  4516. if(!video_object || !player_name)
  4517. {
  4518. return null;
  4519. }
  4520. if (/gecko-mediaplayer/.test(player_name))
  4521. {
  4522. video_object.Stop();
  4523. }
  4524. else if (/vlc/i.test(player_name))
  4525. {
  4526. if (video_object.playlist)
  4527. {
  4528. video_object.playlist.stop();
  4529. }
  4530. }
  4531. else if (/xine/i.test(player_name))
  4532. {
  4533. video_object.controls.stop();
  4534. }
  4535. else if (/quicktime plug-in/i.test(player_name))
  4536. {
  4537. video_object.Rewind();
  4538. }
  4539. }
  4540. LinternaMagica.prototype.player.forward = function(id,time)
  4541. {
  4542. var video_object = this.get_video_object(id);
  4543. var player_name = this.get_player_name(id);
  4544. if (!video_object || !player_name)
  4545. {
  4546. return null;
  4547. }
  4548. if (!time)
  4549. {
  4550. time = 10000;
  4551. }
  4552. if (/gecko-mediaplayer/.test(player_name) ||
  4553. /quicktime plug-in/i.test(player_name))
  4554. {
  4555. if (/%/.test(time))
  4556. {
  4557. time = parseInt((parseInt(time)* (
  4558. /quicktime/i.test(player_name) ?
  4559. video_object.GetDuration() :
  4560. video_object.getDuration())/100));
  4561. }
  4562. else
  4563. {
  4564. time = ((/quicktime/i.test(player_name) ?
  4565. video_object.GetTime() :
  4566. video_object.getTime())
  4567. +time/1000);
  4568. }
  4569. if (/gecko-mediaplayer/.test(player_name))
  4570. {
  4571. video_object.Seek(time);
  4572. }
  4573. else if (/quicktime plug-in/i.test(player_name))
  4574. {
  4575. video_object.SetTime(time);
  4576. }
  4577. }
  4578. else if (/vlc/i.test(player_name))
  4579. {
  4580. if (/%/.test(time))
  4581. {
  4582. time = parseInt((parseInt(time)*video_object.input.length)/100);
  4583. }
  4584. else
  4585. {
  4586. time = video_object.input.time+time;
  4587. }
  4588. video_object.input.time = time;
  4589. }
  4590. else if (/xine/i.test(player_name))
  4591. {
  4592. if (/%/.test(time))
  4593. {
  4594. time = parseInt((parseInt(time)*
  4595. video_object.controls.GetPosition())/100);
  4596. }
  4597. else
  4598. {
  4599. time = video_object.controls.GetPosition() + time;
  4600. }
  4601. video_object.controls.SetPosition(time);
  4602. }
  4603. }
  4604. LinternaMagica.prototype.player.rewind = function(id,time)
  4605. {
  4606. var video_object = this.get_video_object(id);
  4607. var player_name = this.get_player_name(id);
  4608. if (!video_object || !player_name)
  4609. {
  4610. return null;
  4611. }
  4612. if (!time)
  4613. time = 10000;
  4614. if (/gecko-mediaplayer/.test(player_name)
  4615. || /quicktime plug-in/i.test(player_name))
  4616. {
  4617. if (/%/.test(time))
  4618. {
  4619. time = parseInt((parseInt(time)* (
  4620. /quicktime/i.test(player_name) ?
  4621. video_object.GetDuration() :
  4622. video_object.getDuration())/100));
  4623. }
  4624. else
  4625. {
  4626. time = ((/quicktime/i.test(player_name) ?
  4627. video_object.GetTime() :
  4628. video_object.getTime())
  4629. +time/1000);
  4630. }
  4631. if (/gecko-mediaplayer/.test(player_name))
  4632. {
  4633. video_object.Seek(time);
  4634. }
  4635. else if (/quicktime plug-in/i.test(player_name))
  4636. {
  4637. video_object.SetTime(time);
  4638. }
  4639. }
  4640. else if (/vlc/i.test(player_name))
  4641. {
  4642. if (/%/.test(time))
  4643. {
  4644. time = parseInt((parseInt(time)*video_object.input.length)/100);
  4645. }
  4646. else
  4647. {
  4648. time = video_object.input.time-time;
  4649. }
  4650. video_object.input.time = time;
  4651. }
  4652. else if (/xine/i.test(player_name))
  4653. {
  4654. if (/%/.test(time))
  4655. {
  4656. time = parseInt((parseInt(time)*
  4657. video_object.controls.GetPosition())/100);
  4658. }
  4659. else
  4660. {
  4661. time = video_object.controls.GetPosition() - time;
  4662. }
  4663. video_object.controls.SetPosition(time);
  4664. }
  4665. }
  4666. LinternaMagica.prototype.player.fullscreen = function(id)
  4667. {
  4668. var video_object = this.get_video_object(id);
  4669. var player_name = this.get_player_name(id);
  4670. if (!video_object || !player_name)
  4671. {
  4672. return null;
  4673. }
  4674. if (/gecko-mediaplayer/.test(player_name))
  4675. {
  4676. video_object.fullscreen = true;
  4677. video_object.ShowControls = true;
  4678. }
  4679. else if (/vlc/i.test(player_name))
  4680. {
  4681. video_object.video.toggleFullscreen();
  4682. }
  4683. }
  4684. LinternaMagica.prototype.player.set_volume = function (id, volume)
  4685. {
  4686. var video_object = this.get_video_object(id);
  4687. var player_name = this.get_player_name(id);
  4688. if (!video_object || !player_name)
  4689. {
  4690. return null;
  4691. }
  4692. volume = parseInt(volume.replace(/%/,""));
  4693. if (/gecko-mediaplayer/.test(player_name))
  4694. {
  4695. video_object.SetVolume(volume);
  4696. }
  4697. else if (/vlc/i.test(player_name))
  4698. {
  4699. video_object.audio.volume = volume;
  4700. }
  4701. else if (/quicktime plug-in/i.test(player_name))
  4702. {
  4703. video_object.SetVolume(parseInt(255*volume/100));
  4704. }
  4705. }
  4706. LinternaMagica.prototype.player.toggle_mute = function (id)
  4707. {
  4708. var video_object = this.get_video_object(id);
  4709. var player_name = this.get_player_name(id);
  4710. if (!video_object || !player_name)
  4711. {
  4712. return null;
  4713. }
  4714. var vol = null;
  4715. if (/gecko-mediaplayer/.test(player_name) ||
  4716. /quicktime plug-in/i.test(player_name))
  4717. {
  4718. if (!video_object.lm_player_volume)
  4719. {
  4720. vol = video_object.GetVolume();
  4721. video_object.lm_player_volume = vol;
  4722. video_object.SetVolume(0);
  4723. }
  4724. else
  4725. {
  4726. vol = video_object.lm_player_volume;
  4727. video_object.SetVolume(parseInt(vol));
  4728. delete video_object.lm_player_volume;
  4729. if (/quicktime/i.test(player_name))
  4730. vol = parseInt(vol * 100/255);
  4731. }
  4732. }
  4733. else if (/vlc/i.test(player_name))
  4734. {
  4735. video_object.audio.toggleMute();
  4736. vol = video_object.audio.volume;
  4737. }
  4738. return vol ? vol+"%" : "--" ;
  4739. }
  4740. LinternaMagica.prototype.slider_control = function(event)
  4741. {
  4742. var knob = null;
  4743. var slider = null;
  4744. var progress = null;
  4745. if (event.target.nodeType == 3)
  4746. {
  4747. slider = event.target.parentNode.parentNode;
  4748. knob = slider.getElementsByTagName("a")[0];
  4749. }
  4750. if (/span/i.test(event.target.localName))
  4751. {
  4752. slider = event.target.parentNode;
  4753. knob = slider.getElementsByTagName("a")[0];
  4754. }
  4755. else if (/a/i.test(event.target.localName))
  4756. {
  4757. knob = event.target;
  4758. slider = knob.parentNode;
  4759. }
  4760. else if (/div/i.test(event.target.localName))
  4761. {
  4762. knob = event.target.
  4763. getElementsByTagName("a")[0];
  4764. slider = event.target;
  4765. }
  4766. progress = slider.previousSibling;
  4767. if (!knob)
  4768. {
  4769. return null;
  4770. }
  4771. var move = null;
  4772. var doc_dir = this.get_document_direction();
  4773. if (doc_dir == "rtl" ||
  4774. this.languages[this.lang].__direction == "rtl")
  4775. {
  4776. move = "right";
  4777. }
  4778. else
  4779. {
  4780. move = "left";
  4781. }
  4782. var old_position = parseInt(knob.style.getPropertyValue(move));
  4783. var direction = 0;
  4784. var position = old_position;
  4785. var offset_left = 0;
  4786. var obj = slider;
  4787. if (obj.offsetParent) {
  4788. do {
  4789. offset_left += obj.offsetLeft;
  4790. } while (obj = obj.offsetParent);
  4791. }
  4792. if (event.type == "mousewheel")
  4793. {
  4794. direction = event.wheelDelta;
  4795. }
  4796. else if(event.type == "DOMMouseScroll")
  4797. {
  4798. direction = -event.detail;
  4799. }
  4800. if (direction < 0)
  4801. {
  4802. position = parseInt(old_position - (slider.clientWidth*10/100));
  4803. }
  4804. else if (direction > 0)
  4805. {
  4806. position = parseInt(old_position + (slider.clientWidth*10/100));
  4807. }
  4808. if (event.type == "click" ||
  4809. event.type == "mousemove")
  4810. {
  4811. if (/^a$/i.test(event.target.localName))
  4812. {
  4813. position = old_position;
  4814. }
  4815. else
  4816. {
  4817. position = event.pageX -
  4818. offset_left-
  4819. knob.clientWidth/2;
  4820. if (move == "right")
  4821. {
  4822. position = Math.abs(position- slider.clientWidth);
  4823. }
  4824. if (position > old_position)
  4825. {
  4826. direction = 1;
  4827. }
  4828. else
  4829. {
  4830. direction = -1;
  4831. }
  4832. }
  4833. }
  4834. else if (event.type == "mousedown" &&
  4835. /a/i.test(event.target.localName))
  4836. {
  4837. var self = this;
  4838. var mouse_up_listener = function(ev)
  4839. {
  4840. slider.removeEventListener(
  4841. "mousemove",
  4842. mouse_move_listener,
  4843. false);
  4844. knob.removeEventListener(
  4845. "mouseup",
  4846. mouse_up_listener,
  4847. false);
  4848. };
  4849. var mouse_move_listener = function(ev)
  4850. {
  4851. self.slider_control.apply(self,[ev]);
  4852. };
  4853. slider.addEventListener("mousemove",mouse_move_listener,false);
  4854. knob.addEventListener("mouseup",mouse_up_listener, false);
  4855. }
  4856. if ((position+knob.clientWidth) > slider.clientWidth)
  4857. {
  4858. if (direction > 0) {
  4859. position = slider.clientWidth - knob.clientWidth;
  4860. }
  4861. }
  4862. if (position < 0)
  4863. {
  4864. position = 0;
  4865. }
  4866. knob.style.setProperty(move,
  4867. position +"px",
  4868. "important");
  4869. progress.style.setProperty("width",
  4870. (position ?
  4871. position+3:0) +"px",
  4872. "important");
  4873. var percent = (parseInt((
  4874. position/(slider.clientWidth-knob.clientWidth))*100));
  4875. if (percent > 100)
  4876. {
  4877. percent = 100;
  4878. }
  4879. var return_data = new Object();
  4880. return_data.val = percent +"%";
  4881. return_data.direction = direction;
  4882. return return_data;
  4883. }
  4884. LinternaMagica.prototype.ticker = function(id)
  4885. {
  4886. var self = this;
  4887. var time_and_state = self.player.state.
  4888. apply(self,[id]);
  4889. if (!time_and_state)
  4890. {
  4891. return;
  4892. }
  4893. if ((time_and_state.position && time_and_state.duration) &&
  4894. (time_and_state.position >= time_and_state.duration))
  4895. {
  4896. clearInterval(self.player_timers[id]);
  4897. delete self.player_timers[id];
  4898. return;
  4899. }
  4900. var time_text = document.
  4901. getElementById("linterna-magica-controls-time-slider-text-"+id);
  4902. if (!time_and_state.state)
  4903. {
  4904. time_text.textContent =time_and_state.string;
  4905. }
  4906. else
  4907. {
  4908. time_text.textContent = time_and_state.state;
  4909. }
  4910. var progress_bar = document.
  4911. getElementById("linterna-magica-controls-time-"+
  4912. "slider-progress-bar-"+id);
  4913. var knob = document.
  4914. getElementById("linterna-magica-controls-time-slider-knob-"+id);
  4915. if (knob)
  4916. {
  4917. var move = null;
  4918. if (this.languages[this.lang].__direction == "ltr" ||
  4919. this.languages[this.lang].__direction !== "rtl")
  4920. {
  4921. move = "left";
  4922. }
  4923. else if (this.languages[this.lang].__direction == "rtl")
  4924. {
  4925. move = "right";
  4926. }
  4927. var slider = knob.parentNode;
  4928. var pos = parseInt(slider.clientWidth *
  4929. time_and_state.percent);
  4930. if (pos > (slider.clientWidth-knob.clientWidth))
  4931. {
  4932. pos = slider.clientWidth - knob.clientWidth;
  4933. }
  4934. knob.style.setProperty(move,
  4935. pos+"px",
  4936. "important");
  4937. progress_bar.style.setProperty("width",
  4938. (pos+3)+"px",
  4939. "important");
  4940. }
  4941. }
  4942. LinternaMagica.prototype.remove_plugin_install_warning = function(element)
  4943. {
  4944. if (!element || typeof(element) != 'object')
  4945. {
  4946. return;
  4947. }
  4948. var teaser = document.getElementById("flash_teaser");
  4949. if (teaser)
  4950. {
  4951. teaser.parentNode.removeChild(teaser);
  4952. }
  4953. var f10 = document.getElementById("flash10-promo-div");
  4954. if (f10)
  4955. {
  4956. f10.parentNode.removeChild(f10);
  4957. }
  4958. var text_re = new RegExp (
  4959. ".*(flash|flash(\\\s*)player|shockwave).*",
  4960. "i");
  4961. var remove;
  4962. var node = element.firstChild;
  4963. var new_node = null;
  4964. while (node)
  4965. {
  4966. remove = false;
  4967. var size = null;
  4968. try {
  4969. size = (new XMLSerializer().serializeToString(node)).length;
  4970. }
  4971. catch(e)
  4972. {
  4973. continue;
  4974. }
  4975. if (size > 5120)
  4976. {
  4977. node = node.nextSibling || null;
  4978. continue;
  4979. }
  4980. this.log("LinternaMagica.remove_plugin_install_warning:\n"+
  4981. "elements "+element.childNodes.length+
  4982. " node "+node,5);
  4983. if (node.nextSibling)
  4984. {
  4985. new_node = node.nextSibling;
  4986. }
  4987. else
  4988. {
  4989. new_node = null;
  4990. }
  4991. if ( node.nodeType ==3 ||
  4992. (node.localName && node.localName.toLowerCase() != "object" &&
  4993. node.localName.toLowerCase() != "embed" ))
  4994. {
  4995. this.log("LinternaMagica.remove_plugin_install_warning:\n"+
  4996. "Cheking node "+node,4);
  4997. if (node.textContent.match(text_re) ||
  4998. (node.innerHTML && node.innerHTML.match(text_re)) ||
  4999. (node.localName && /br/i.test(node.localName)) ||
  5000. (node.localName && /img/i.test(node.localName)) ||
  5001. (node.href && node.href.match(text_re)) ||
  5002. (node.hasAttribute &&
  5003. node.hasAttribute("bginactive") &&
  5004. node.getAttribute("bginactive").match(/flashblock/)))
  5005. {
  5006. this.log("LinternaMagica.remove_plugin_install_warning:\n"+
  5007. "Removing node "+node,4);
  5008. if (/^a$/i.test(node.localName) &&
  5009. node.nextSibling &&
  5010. node.nextSibling.nodeType === 3 &&
  5011. /player/i.test(node.nextSibling.textContent))
  5012. {
  5013. this.log("LinternaMagica.remove_plugin_install_warning:\n"+
  5014. "Removing node's sibling sharing"+
  5015. " half the text "+node.nextSibling,4);
  5016. new_node = node.nextSibling.nextSibling;
  5017. node.parentNode.removeChild(node.nextSibling);
  5018. }
  5019. node.parentNode.removeChild(node);
  5020. }
  5021. }
  5022. var self = this;
  5023. var val = this.call_site_function_at_position.apply(self,[
  5024. "plugin_install_warning_loop",
  5025. window.location.hostname, node]);
  5026. if (val && typeof(val) != "boolean")
  5027. {
  5028. node = val;
  5029. }
  5030. node = new_node;
  5031. }
  5032. var self = this;
  5033. var val = this.call_site_function_at_position.apply(self,[
  5034. "plugin_install_warning",
  5035. window.location.hostname, node]);
  5036. if (val && typeof(val) != "boolean")
  5037. {
  5038. node = val;
  5039. }
  5040. }
  5041. LinternaMagica.prototype.request_bliptv_jsonp_data =
  5042. function (object_data)
  5043. {
  5044. var jsonp_request_data = new Object();
  5045. jsonp_request_data.frame_id = "bliptv_jsonp_data_fetcher";
  5046. jsonp_request_data.parser_timeout = this.bliptv_jsonp_timeout;
  5047. jsonp_request_data.parser_timeout_counter =
  5048. this.bliptv_jsonp_timeout_counter;
  5049. jsonp_request_data.jsonp_script_link =
  5050. "http://blip.tv/players/episode/"+object_data.video_id+
  5051. "?skin=json&callback=bliptv_video_data&version=2";
  5052. jsonp_request_data.jsonp_function = "bliptv_video_data";
  5053. jsonp_request_data.parser_function = this.parse_bliptv_jsonp_data;
  5054. jsonp_request_data.user_data = object_data;
  5055. this.log("LinternaMagica.request_bliptv_jsonp_data:\n"+
  5056. "Requesting (JSONP) Blip.tv video link via video_id "+
  5057. object_data.video_id,1);
  5058. this.create_checker_frame(jsonp_request_data);
  5059. }
  5060. LinternaMagica.prototype.parse_bliptv_jsonp_data = function(data, object_data)
  5061. {
  5062. data = data[0].Post;
  5063. object_data.link = data.mediaUrl;
  5064. var hd_links = new Array();
  5065. var sort_fun = function(a, b)
  5066. {
  5067. return ((parseInt(a.media_width) > parseInt(b.media_width)) ? -1 :
  5068. (parseInt(a.media_width) < parseInt(b.media_width)) ? 1 :0);
  5069. };
  5070. data.additionalMedia.sort(sort_fun);
  5071. for (var i=0, l=data.additionalMedia.length; i<l; i++)
  5072. {
  5073. var link_data = data.additionalMedia[i];
  5074. var link = new Object();
  5075. link.url = link_data.url;
  5076. link.label = link_data.role+
  5077. " ("+link_data.media_width+"x"+link_data.media_height+" "+
  5078. " "+link_data.description+" "+
  5079. link_data.video_codec.toUpperCase()+", "+
  5080. link_data.audio_codec.toUpperCase()+")";
  5081. hd_links.push(link);
  5082. }
  5083. object_data.hd_links = hd_links;
  5084. this.create_video_object(object_data);
  5085. }
  5086. LinternaMagica.prototype.sites["blip.tv"] = new Object();
  5087. LinternaMagica.prototype.sites["www.blip.tv"] = "blip.tv";
  5088. LinternaMagica.prototype.sites["blip.tv"].set_video_id_regex = function()
  5089. {
  5090. var result = new Object();
  5091. result.video_id_re = new RegExp(
  5092. "blip\\\.tv\\\/(play|rss\\\/flash)\\\/([0-9A-Za-z_%-]+)&*",
  5093. "i");
  5094. result.video_id_position = 1;
  5095. return result;
  5096. }
  5097. LinternaMagica.prototype.sites["blip.tv"].plugin_install_warning_loop =
  5098. function(node)
  5099. {
  5100. if (node.parentNode)
  5101. {
  5102. node.parentNode.removeChild(node);
  5103. }
  5104. return null;
  5105. }
  5106. LinternaMagica.prototype.sites["blip.tv"].prepare_xhr =
  5107. function(object_data)
  5108. {
  5109. var result= new Object();
  5110. result.address = "/rss/flash/"+object_data.video_id;
  5111. return result;
  5112. }
  5113. LinternaMagica.prototype.sites["blip.tv"].process_xhr_response =
  5114. function(args)
  5115. {
  5116. var client = args.client;
  5117. var object_data = args.object_data;
  5118. var xml = client.responseXML;
  5119. try
  5120. {
  5121. var embed_id =
  5122. xml.getElementsByTagName("embedLookup");
  5123. if (embed_id && typeof(embed_id[0]) == "undefined")
  5124. {
  5125. embed_id =
  5126. xml.getElementsByTagName("blip:embedLookup");
  5127. }
  5128. object_data.video_id = embed_id[0].textContent;
  5129. this.request_bliptv_jsonp_data(object_data);
  5130. }
  5131. catch(e)
  5132. {
  5133. this.log("LinternaMagica.prototype.request_video"+
  5134. "_link_parse_response:\n"+
  5135. "Exception in Blip.tv while parsing XML",1);
  5136. }
  5137. return null;
  5138. }
  5139. LinternaMagica.prototype.sites["boozho.com"] = new Object();
  5140. LinternaMagica.prototype.sites["www.boozho.com"] = "boozho.com";
  5141. LinternaMagica.prototype.sites["boozho.com"].prepare_xhr =
  5142. function(object_data)
  5143. {
  5144. var result = new Object();
  5145. result.address = "/player_playlist.php?v="+object_data.video_id;
  5146. return result;
  5147. }
  5148. LinternaMagica.prototype.sites["boozho.com"].process_xhr_response =
  5149. function(args)
  5150. {
  5151. var client = args.client;
  5152. var object_data = args.object_data;
  5153. var xml = client.responseXML;
  5154. var rel_url = xml.getElementsByTagName("movie_path")[0].textContent;
  5155. object_data.link = "http://www.boozho.com/"+rel_url;
  5156. return object_data;
  5157. }
  5158. LinternaMagica.prototype.sites["clipovete.com"] = new Object();
  5159. LinternaMagica.prototype.sites["www.clipovete.com"] = "clipovete.com";
  5160. LinternaMagica.prototype.sites["clipovete.com"].set_video_link_regex =
  5161. function()
  5162. {
  5163. var result = new Object();
  5164. result.link_re = new RegExp (
  5165. "\\\&video=(.*)\\\&(video_id)=(.*)",
  5166. "i");
  5167. result.link_position = 3;
  5168. return result;
  5169. }
  5170. LinternaMagica.prototype.sites["clipovete.com"].process_extracted_link = function(link)
  5171. {
  5172. return "http://storage.puiako.com/clipovete.com/videos/"+link +".flv";
  5173. }
  5174. LinternaMagica.prototype.sites["blip.tv"].plugin_install_warning =
  5175. function(node)
  5176. {
  5177. var ads = document.getElementById('ads_video');
  5178. if (ads)
  5179. {
  5180. ads.parentNode.removeChild(ads);
  5181. }
  5182. return null;
  5183. }
  5184. LinternaMagica.prototype.extract_dailymotion_links = function(data)
  5185. {
  5186. var links_re = new RegExp (
  5187. "sdurl"+
  5188. "(\\\"|\\\')*\\\s*(\\\=|\\\:|\\\,)\\\s*(\\\"|\\\')*"+
  5189. "(.*(\\\?auth\\\=[A-Za-z0-9\\\-\\\.]+)"+
  5190. "(\\\&|\\\"|\\\'){1})\\\,{1}",
  5191. "i");
  5192. var links = unescape(data).match(links_re);
  5193. if (links && links[0])
  5194. {
  5195. links = links[0].replace(/,$/, "").split(/,/);
  5196. var hd_links = new Array();
  5197. for (var lnk=0; lnk<links.length; lnk++)
  5198. {
  5199. var link = new Object();
  5200. var link_data = links[lnk];
  5201. link.label = link_data.match(/\w+-\d+x\d+/i);
  5202. link.url = link_data.replace(/\\\//g, "/").replace(
  5203. /(\"\s*:\s*\")|(\"\s*|,\s*\")|hdurl|hqurl|sdurl|\}/ig,
  5204. "").replace(/hd720url|hd1080url/ig,"");
  5205. this.log("LinternaMagica.extract_dailymotion_links:\n"+
  5206. "Extracted link : "+link.url,4);
  5207. hd_links.unshift(link)
  5208. }
  5209. return hd_links;
  5210. }
  5211. return null;
  5212. }
  5213. LinternaMagica.prototype.sites["dailymotion.com"] = new Object();
  5214. LinternaMagica.prototype.sites["www.dailymotion.com"] = "dailymotion.com";
  5215. LinternaMagica.prototype.sites["dailymotion.com"].no_flash_plugin_installed =
  5216. function()
  5217. {
  5218. var data = new Object();
  5219. data.video_id = window.location.pathname;
  5220. if (this.wait_xhr)
  5221. {
  5222. this.log("LinternaMagica.extract_objects_from_dom:\n"+
  5223. "Waiting "+this.wait_xhr+
  5224. " ms ("+(this.wait_xhr/1000)+
  5225. " s) before requesting video link via"+
  5226. " video_id "+data.video_id+" ",1);
  5227. var self = this;
  5228. setTimeout(function() {
  5229. self.request_video_link.apply(self,[data]);
  5230. }, this.wait_xhr);
  5231. }
  5232. else
  5233. {
  5234. this.request_video_link(data);
  5235. }
  5236. return true;
  5237. }
  5238. LinternaMagica.prototype.sites["dailymotion.com"].process_cookies =
  5239. function()
  5240. {
  5241. return "; domain=.dailymotion.com; path=/; host="+window.location.hostname+"; ";
  5242. }
  5243. LinternaMagica.prototype.sites["dailymotion.com"].do_not_force_iframe_detection =
  5244. function()
  5245. {
  5246. return false;
  5247. }
  5248. LinternaMagica.prototype.sites["dailymotion.com"].skip_video_id_extraction =
  5249. function ()
  5250. {
  5251. var extracted_data = new Object();
  5252. extracted_data.video_id = window.location.pathname;
  5253. return extracted_data;
  5254. }
  5255. LinternaMagica.prototype.sites["dailymotion.com"].
  5256. libswfobject_skip_video_id_extraction =
  5257. function()
  5258. {
  5259. this.log("LinternaMagica.sites.libswfobject_skip_video_"+
  5260. "id_extraction:\n"+
  5261. "Video id forced to "+window.location.pathname,1);
  5262. return window.location.pathname;
  5263. }
  5264. LinternaMagica.prototype.sites["dailymotion.com"].prepare_xhr =
  5265. function(object_data)
  5266. {
  5267. var result = new Object();
  5268. result.address = object_data.video_id;
  5269. this.extract_cookies();
  5270. this.expire_cookies();
  5271. if (/html5_switch=1/i.test(document.cookie))
  5272. {
  5273. document.cookie = "html5_switch=0;";
  5274. }
  5275. return result;
  5276. }
  5277. LinternaMagica.prototype.sites["dailymotion.com"].process_xhr_response =
  5278. function(args)
  5279. {
  5280. var client = args.client;
  5281. var object_data = args.object_data;
  5282. if (!object_data.linterna_magica_id &&
  5283. !object_data.parent)
  5284. {
  5285. object_data.parent =
  5286. this.get_first_element_by_class("dmpi_video_playerv[0-9]+");
  5287. if (!object_data.parent)
  5288. {
  5289. return null;
  5290. }
  5291. object_data.width = object_data.parent.clientWidth ?
  5292. object_data.parent.clientWidth : object_data.offsetWidht ?
  5293. object_data.offsetWidht : null ;
  5294. object_data.height = object_data.parent.clientHeight ?
  5295. object_data.parent.clientHeight : object_data.offsetWidht ?
  5296. object_data.offsetWidht : null ;
  5297. }
  5298. var hd_links = this.extract_dailymotion_links(client.responseText);
  5299. object_data.link = hd_links ? hd_links[hd_links.length-1].url : null;
  5300. object_data.hd_links = (hd_links && hd_links.length) ? hd_links : null;
  5301. if (/restore/i.test(this.process_cookies))
  5302. {
  5303. this.restore_cookies();
  5304. }
  5305. if (/html5_switch=0/i.test(document.cookie))
  5306. {
  5307. document.cookie = "html5_switch=1;";
  5308. }
  5309. if (!object_data.width || !object_data.height || !object_data.link)
  5310. {
  5311. return null;
  5312. }
  5313. return object_data;
  5314. }
  5315. LinternaMagica.prototype.sites["dailymotion.com"].insert_object_after_xhr =
  5316. function(object_data)
  5317. {
  5318. if (/html5_switch=1/i.test(document.cookie))
  5319. {
  5320. this.log("LinternaMagica.request_video_link_parse response:\n"+
  5321. "Creating video object with url: "+object_data.link,1);
  5322. this.create_video_object(object_data);
  5323. return false;
  5324. }
  5325. return true;
  5326. }
  5327. LinternaMagica.prototype.sites["dailymotion.com"].css_fixes =
  5328. function(object_data)
  5329. {
  5330. var parent = object_data.parent;
  5331. parent.style.setProperty("margin-bottom", "30px", "important");
  5332. var html5_error =
  5333. this.get_first_element_by_class("error_screen");
  5334. if (html5_error)
  5335. {
  5336. var lm = document.getElementById("linterna-magica-"+
  5337. object_data.linterna_magica_id);
  5338. if (lm && !lm.style.display)
  5339. {
  5340. html5_error.style.setProperty("display", "none", "important");
  5341. }
  5342. var toggle_header =
  5343. document.getElementById("linterna-magica-toggle-plugin-header-"+
  5344. object_data.linterna_magica_id);
  5345. var toggle_after =
  5346. document.getElementById("linterna-magica-toggle-plugin-"+
  5347. object_data.linterna_magica_id);
  5348. var header_fn = function(ev)
  5349. {
  5350. var err_screen = document.querySelector(".error_screen");
  5351. if (!err_screen)
  5352. {
  5353. return;
  5354. }
  5355. if (err_screen.style.display)
  5356. {
  5357. err_screen.style.removeProperty("display");
  5358. }
  5359. else
  5360. {
  5361. err_screen.style.setProperty("display",
  5362. "none", "important");
  5363. }
  5364. };
  5365. if (toggle_header)
  5366. {
  5367. toggle_header.addEventListener("click",header_fn,false);
  5368. }
  5369. if (toggle_after)
  5370. {
  5371. toggle_after.addEventListener("click",header_fn,false);
  5372. }
  5373. }
  5374. return null;
  5375. }
  5376. LinternaMagica.prototype.sites["dailymotion.com"].skip_flowplayer_links_fix =
  5377. function(object_data)
  5378. {
  5379. return false;
  5380. }
  5381. LinternaMagica.prototype.sites["dailymotion.com"].custom_html5_player_finder =
  5382. function(parent)
  5383. {
  5384. var html5_player_element = null;
  5385. if (parent.hasAttribute("id"))
  5386. {
  5387. var token = parent.getAttribute("id").split("_");
  5388. if (token && token[1])
  5389. {
  5390. html5_player_element =
  5391. document.getElementById("container_player_"+token[1]);
  5392. }
  5393. }
  5394. return html5_player_element;
  5395. }
  5396. LinternaMagica.prototype.detect_facebook_flash_upgrade = function(object_data)
  5397. {
  5398. this.facebook_flash_upgrade_counter++;
  5399. var child = object_data.parent.firstChild;
  5400. var insert_object = null;
  5401. if (this.facebook_flash_upgrade_counter >= 20 ||
  5402. (child && /embed|object/i.test(child.localName)) ||
  5403. (child && /flash|player/i.test(child.textContent)))
  5404. {
  5405. clearInterval(this.facebook_flash_upgrade_timeout);
  5406. this.log("LinternaMagica.detect_facebook_flash_upgrade:\n"+
  5407. "Removing plugin install warning.",2);
  5408. this.remove_plugin_install_warning(object_data.parent);
  5409. this.log("LinternaMagica.detect_facebook_flash_upgrade:\n"+
  5410. "Creating video object.",2);
  5411. this.create_video_object(object_data);
  5412. }
  5413. }
  5414. LinternaMagica.prototype.sites["facebook.com"] = new Object();
  5415. LinternaMagica.prototype.sites["www.facebook.com"] = "facebook.com";
  5416. LinternaMagica.prototype.sites["facebook.com"].
  5417. replace_extracted_object_from_script =
  5418. function(object_data)
  5419. {
  5420. if (!this.facebook_flash_upgrade_timeout)
  5421. {
  5422. this.log("LinternaMagica.sites.replace_extracted_"+
  5423. "object_from_script:\n"+
  5424. "Delaying video object creation in Facebook.",3);
  5425. this.facebook_flash_upgrade_counter = 0;
  5426. var data = object_data;
  5427. var self = this;
  5428. this.facebook_flash_upgrade_timeout =
  5429. setInterval(function() {
  5430. self.detect_facebook_flash_upgrade.
  5431. apply(self,[data]);
  5432. }, 500);
  5433. }
  5434. return false;
  5435. }
  5436. LinternaMagica.prototype.sites["facebook.com"].set_video_link_regex =
  5437. function()
  5438. {
  5439. var result = new Object();
  5440. //
  5441. //
  5442. if (!this.script_data)
  5443. {
  5444. result.link_re = new RegExp (
  5445. "thumb_url=(.*)&video_src=(.*)&(motion_log)=(.*)",
  5446. "i");
  5447. result.link_position = 3;
  5448. }
  5449. else
  5450. {
  5451. result.link_re = new RegExp (
  5452. "(\\\"|\\\')video(\\\"|\\\'),\\\s*(\\\"|\\\')([^\\\"\\\']+)(\\\"|\\\'){1}",
  5453. "i");
  5454. result.link_position = 2;
  5455. }
  5456. return result;
  5457. }
  5458. LinternaMagica.prototype.sites["facebook.com"].process_extracted_link = function(link)
  5459. {
  5460. link = unescape(link.replace(/\\u0025/g, "%"));
  5461. link = link.split(',');
  5462. link = link[0] ? link[0] : link;
  5463. link = link.split('"');
  5464. link = link[3] ? link[3] : link.join();
  5465. link = link.replace(/\\\//g, "/");
  5466. return link;
  5467. }
  5468. LinternaMagica.prototype.sites["facebook.com"].
  5469. do_not_clean_amps_in_extracted_link = "video.google.com";
  5470. LinternaMagica.prototype.sites["facebook.com"].
  5471. skip_script_processing = function()
  5472. {
  5473. if (/(video|photo)\.php/i.test(window.location.href) &&
  5474. this.script_data.length >= 26214400 )
  5475. {
  5476. return false;
  5477. }
  5478. else if (!/(video|photo)\.php/i.test(window.location.href) &&
  5479. this.script_data.length >= 5120)
  5480. {
  5481. return false;
  5482. }
  5483. return true;
  5484. }
  5485. LinternaMagica.prototype.sites["facebook.com"].
  5486. extract_hd_links_from_script_if_link =
  5487. function()
  5488. {
  5489. var data = this.script_data;
  5490. var hd_strings = ["sd_src", "hd_src" ];
  5491. var hd_links = new Array();
  5492. var l,i;
  5493. var link_re = new RegExp (
  5494. "(\\\"|\\\')video(\\\"|\\\'),\\\s*(\\\"|\\\')"+
  5495. "([^\\\"\\\']+)(\\\"|\\\'){1}",
  5496. "i");
  5497. var match = data.match(link_re);
  5498. if (!match || !match[match.length-2])
  5499. {
  5500. return;
  5501. }
  5502. var links = unescape(match[match.length-2].replace(/\\u0025/g, "%"));
  5503. links = links.split(/,/);
  5504. for (var i=0, l=links.length; i<l; i++)
  5505. {
  5506. if (!/_src/i.test(links[i]))
  5507. {
  5508. continue;
  5509. }
  5510. var link = new Object();
  5511. link.url =
  5512. this.sites["facebook.com"].
  5513. process_extracted_link(links[i])+"#";
  5514. if (/sd_src/i.test(links[i]))
  5515. {
  5516. link.label = this._("Low")
  5517. link.more_info = "MPEG-4, H.264";
  5518. }
  5519. else
  5520. {
  5521. link.label = this._("High");
  5522. link.more_info = "MPEG-4, H.264";
  5523. }
  5524. hd_links.unshift(link);
  5525. }
  5526. if (hd_links.length > 0)
  5527. {
  5528. return hd_links;
  5529. }
  5530. return null;
  5531. }
  5532. LinternaMagica.prototype.sites["facebook.com"].css_fixes =
  5533. function(object_data)
  5534. {
  5535. var next = document.querySelector(".photoPageNextNav");
  5536. var prev = document.querySelector(".photoPagePrevNav");
  5537. var fb_nav_click_fn = function(ev)
  5538. {
  5539. window.location = this.getAttribute("href");
  5540. }
  5541. if (next)
  5542. {
  5543. next.addEventListener("click", fb_nav_click_fn, false);
  5544. }
  5545. if (prev)
  5546. {
  5547. prev.addEventListener("click", fb_nav_click_fn, false);
  5548. }
  5549. }
  5550. LinternaMagica.prototype.sites["facebook.com"].flash_plugin_installed = "youtube.com";
  5551. LinternaMagica.prototype.sites["video.google.com"] = new Object();
  5552. LinternaMagica.prototype.sites["video.google.com.au"] = "video.google.com";
  5553. LinternaMagica.prototype.sites["video.google.com.br"] = "video.google.com";
  5554. LinternaMagica.prototype.sites["video.google.ca"] = "video.google.com";
  5555. LinternaMagica.prototype.sites["video.google.bg"] = "video.google.com";
  5556. LinternaMagica.prototype.sites["video.google.cn"] = "video.google.com";
  5557. LinternaMagica.prototype.sites["video.google.fr"] = "video.google.com";
  5558. LinternaMagica.prototype.sites["video.google.de"] = "video.google.com";
  5559. LinternaMagica.prototype.sites["video.google.it"] = "video.google.com";
  5560. LinternaMagica.prototype.sites["video.google.nl"] = "video.google.com";
  5561. LinternaMagica.prototype.sites["video.google.pl"] = "video.google.com";
  5562. LinternaMagica.prototype.sites["video.google.es"] = "video.google.com";
  5563. LinternaMagica.prototype.sites["video.google.co.uk"] = "video.google.com";
  5564. LinternaMagica.prototype.sites["video.google.com.ar"] = "video.google.com";
  5565. LinternaMagica.prototype.sites["video.google.ru"] = "video.google.com";
  5566. LinternaMagica.prototype.sites["encrypted.google.com"] = "video.google.com";
  5567. LinternaMagica.prototype.sites["www.google.com"] = "video.google.com";
  5568. LinternaMagica.prototype.sites["www.google.com.au"] = "video.google.com";
  5569. LinternaMagica.prototype.sites["www.google.com.br"] = "video.google.com";
  5570. LinternaMagica.prototype.sites["www.google.ca"] = "video.google.com";
  5571. LinternaMagica.prototype.sites["www.google.bg"] = "video.google.com";
  5572. LinternaMagica.prototype.sites["www.google.cn"] = "video.google.com";
  5573. LinternaMagica.prototype.sites["www.google.fr"] = "video.google.com";
  5574. LinternaMagica.prototype.sites["www.google.de"] = "video.google.com";
  5575. LinternaMagica.prototype.sites["www.google.it"] = "video.google.com";
  5576. LinternaMagica.prototype.sites["www.google.nl"] = "video.google.com";
  5577. LinternaMagica.prototype.sites["www.google.pl"] = "video.google.com";
  5578. LinternaMagica.prototype.sites["www.google.es"] = "video.google.com";
  5579. LinternaMagica.prototype.sites["www.google.co.uk"] = "video.google.com";
  5580. LinternaMagica.prototype.sites["www.google.com.ar"] = "video.google.com";
  5581. LinternaMagica.prototype.sites["www.google.ru"] = "video.google.com";
  5582. LinternaMagica.prototype.sites["images.google.com"] = "video.google.com";
  5583. LinternaMagica.prototype.sites["video.google.com"].
  5584. skip_script_processing = function()
  5585. {
  5586. return false;
  5587. }
  5588. LinternaMagica.prototype.sites["video.google.com"].set_video_link_regex =
  5589. function()
  5590. {
  5591. var result = new Object();
  5592. result.link_re = new RegExp (
  5593. "videourl=(.*)\\\&(thumbnailurl)=(.*)" ,
  5594. "i");
  5595. result.link_position = 3;
  5596. return result;
  5597. }
  5598. LinternaMagica.prototype.sites["video.google.com"].
  5599. do_not_clean_amps_in_extracted_link =
  5600. function()
  5601. {
  5602. return false;
  5603. }
  5604. LinternaMagica.prototype.sites["indieflix.com"] = new Object();
  5605. LinternaMagica.prototype.sites["www.indieflix.com"] = "indieflix.com";
  5606. LinternaMagica.prototype.sites["indieflix.com"].custom_html5_player_finder =
  5607. function(parent)
  5608. {
  5609. var html5_player_element = null;
  5610. html5_player_element =
  5611. document.getElementById("player_displayarea");
  5612. return html5_player_element;
  5613. }
  5614. LinternaMagica.prototype.sites["indieflix.com"].do_not_force_iframe_detection =
  5615. function()
  5616. {
  5617. return false;
  5618. }
  5619. LinternaMagica.prototype.sites["indieflix.com"].css_fixes =
  5620. function(object_data)
  5621. {
  5622. var id = object_data.linterna_magica_id;
  5623. var toggle_plugin =
  5624. document.getElementById("linterna-magica-toggle-plugin-"+id);
  5625. if (toggle_plugin)
  5626. {
  5627. var p = toggle_plugin.parentNode;
  5628. p.style.setProperty("top", (parseInt(object_data.height)+5)+"px",
  5629. "importnat");
  5630. }
  5631. var lm = document.getElementById("linterna-magica-"+id);
  5632. var central_player = lm.parentNode.parentNode;
  5633. if (central_player)
  5634. {
  5635. central_player.style.setProperty("overflow", "visible",
  5636. "important");
  5637. }
  5638. lm.style.setProperty("z-index", "99999999", "important");
  5639. return false;
  5640. }
  5641. LinternaMagica.prototype.sites["indieflix.com"].
  5642. replace_extracted_object_from_script =
  5643. function(object_data)
  5644. {
  5645. if (!this.indieflix_html5_element_timeout)
  5646. {
  5647. this.log("LinternaMagica.sites.replace_extracted_"+
  5648. "object_from_script:\n"+
  5649. "Delaying video object creation in Indieflix.",3);
  5650. this.indieflix_html5_element_counter = 0;
  5651. var data = object_data;
  5652. var self = this;
  5653. this.indieflix_html5_element_timeout =
  5654. setInterval(function() {
  5655. self.detect_indieflix_html5_element.
  5656. apply(self,[data]);
  5657. }, 2000);
  5658. }
  5659. return false;
  5660. }
  5661. LinternaMagica.prototype.detect_indieflix_html5_element =
  5662. function(object_data)
  5663. {
  5664. this.indieflix_html5_element_counter++;
  5665. var html5_element =
  5666. this.find_site_html5_player_wrapper(object_data.parent);
  5667. var insert_object = null;
  5668. if (this.indieflix_html5_element_counter >= 1 || html5_element)
  5669. {
  5670. clearInterval(this.indieflix_html5_element_timeout);
  5671. this.log("LinternaMagica.detect_indieflix_html5_element:\n"+
  5672. "Removing plugin install warning.",2);
  5673. this.remove_plugin_install_warning(object_data.parent);
  5674. this.log("LinternaMagica.detect_indieflix_html5_element:\n"+
  5675. "Creating video object.",2);
  5676. this.create_video_object(object_data);
  5677. }
  5678. }
  5679. LinternaMagica.prototype.sites["jwak.net"] = new Object();
  5680. LinternaMagica.prototype.sites["www.jwak.net"] = "jwak.net";
  5681. LinternaMagica.prototype.sites["jwak.net"].set_video_link_regex =
  5682. function()
  5683. {
  5684. var result = new Object();
  5685. result.link_re = new RegExp (
  5686. "addVariable\\\((\\\"|\\\')streamer(\\\"|\\\'),\\\s*"+
  5687. "(\\\"|\\\')([^\\\"\\\']+)(\\\"|\\\')(\\\))\\\;{1}",
  5688. "i");
  5689. result.link_position = 3;
  5690. return result;
  5691. }
  5692. LinternaMagica.prototype.sites["khanacademy.org"] = new Object();
  5693. LinternaMagica.prototype.sites["www.khanacademy.org"] = "khanacademy.org";
  5694. LinternaMagica.prototype.sites["khanacademy.org"].css_fixes =
  5695. function(object_data)
  5696. {
  5697. if (object_data.parent && object_data.parent.hasAttribute("id") &&
  5698. /youtube_blocked/i.test(object_data.parent.getAttribute("id")))
  5699. {
  5700. var parent = object_data.parent;
  5701. parent.style.setProperty("left", "0px", "important");
  5702. parent.style.setProperty("position", "relative", "important");
  5703. parent.style.setProperty("visibility", "visible", "important");
  5704. for (var i=0, l=this.found_flash_video_objects;i<l;i++)
  5705. {
  5706. var fo = this.get_flash_video_object(i);
  5707. if (fo &&
  5708. fo.linterna_magica_id != object_data.linterna_magica_id)
  5709. {
  5710. fo.parentNode.style.setProperty("display", "none",
  5711. "important");
  5712. }
  5713. }
  5714. parent.style.setProperty("margin-bottom", "20px", "important");
  5715. }
  5716. return null;
  5717. }
  5718. LinternaMagica.prototype.sites["kickstarter.com"] = new Object();
  5719. LinternaMagica.prototype.sites["www.kickstarter.com"] = "kickstarter.com";
  5720. LinternaMagica.prototype.sites["kickstarter.com"].no_flash_plugin_installed =
  5721. function()
  5722. {
  5723. var selectors = document.querySelectorAll(".video-player");
  5724. var object_data = null;
  5725. var link = null;
  5726. var width = null;
  5727. var height = null;
  5728. var parent = null;
  5729. if (selectors && selectors.length)
  5730. {
  5731. for (var i=0,l=selectors.length;i<l;i++)
  5732. {
  5733. var s = selectors[i];
  5734. if(s.hasAttribute("data-video"))
  5735. {
  5736. this.extract_link_data = "video="+s.getAttribute("data-video");
  5737. link = this.extract_link();
  5738. width = parseInt(s.style.getPropertyValue("width"));
  5739. height = parseInt(s.style.getPropertyValue("height"));
  5740. if (!width)
  5741. {
  5742. width = s.clientWidth;
  5743. }
  5744. if (!height)
  5745. {
  5746. height = s.clientHeight;
  5747. }
  5748. for (var j=0,ln=s.childNodes.length;j<ln;j++)
  5749. {
  5750. parent = s.childNodes[j];
  5751. if (parent.hasAttribute("class") &&
  5752. /overlay/i.test(parent.getAttribute("class")))
  5753. {
  5754. break;
  5755. }
  5756. if (j=l)
  5757. {
  5758. parent = s;
  5759. }
  5760. }
  5761. if (link && width && height && parent)
  5762. {
  5763. break;
  5764. }
  5765. }
  5766. }
  5767. var object_data = new Object();
  5768. object_data.link = link;
  5769. object_data.width = width;
  5770. object_data.height = height;
  5771. object_data.parent = parent;
  5772. object_data.linterna_magica_id =
  5773. this.mark_flash_object("extracted-by-code");
  5774. this.remove_plugin_install_warning(object_data.parent);
  5775. this.create_video_object(object_data);
  5776. return true;
  5777. }
  5778. return null;
  5779. }
  5780. LinternaMagica.prototype.sites["kickstarter.com"].css_fixes =
  5781. function(object_data)
  5782. {
  5783. var id = object_data.linterna_magica_id;
  5784. var lm = document.getElementById("linterna-magica-"+id);
  5785. if (lm)
  5786. {
  5787. var grand_parent = lm.parentNode.parentNode;
  5788. var h = parseInt(lm.style.getPropertyValue("height"));
  5789. grand_parent.style.setProperty("height", h+'px', "important");
  5790. }
  5791. var popup = document.getElementById("growl_section");
  5792. if (popup)
  5793. {
  5794. popup.style.setProperty("z-index", "-9999999", "important");
  5795. }
  5796. object_data.parent.style.setProperty("line-height", "0px", "important");
  5797. return false;
  5798. }
  5799. LinternaMagica.prototype.sites["livestream.com"] = new Object();
  5800. LinternaMagica.prototype.sites["www.livestream.com"] = "livestream.com";
  5801. LinternaMagica.prototype.sites["livestream.com"].set_video_id_regex =
  5802. function()
  5803. {
  5804. var result = new Object();
  5805. result.video_id_re = new RegExp(
  5806. "(clip|\\\&t)=(pla[_-a-zA-Z0-9]+|[0-9]+)",
  5807. "i");
  5808. result.video_id_position = 1;
  5809. return result;
  5810. }
  5811. LinternaMagica.prototype.request_livestreamcom_jsonp_data =
  5812. function (object_data)
  5813. {
  5814. var flash_object =
  5815. this.get_flash_video_object(object_data.linterna_magica_id);
  5816. if (!flash_object)
  5817. {
  5818. return null;
  5819. }
  5820. var attrib = null;
  5821. var channel_re = null;
  5822. if (flash_object.localName.toLowerCase() == "embed" ||
  5823. flash_object.localName.toLowerCase() == "iframe")
  5824. {
  5825. attrib = "src";
  5826. }
  5827. else if (flash_object.localName.toLowerCase() == "object")
  5828. {
  5829. attrib = "data";
  5830. }
  5831. if (flash_object.localName.toLowerCase() == "object" ||
  5832. flash_object.localName.toLowerCase() == "embed")
  5833. {
  5834. channel_re = new RegExp (
  5835. "channel=(.*)&",
  5836. "i");
  5837. }
  5838. else if (flash_object.localName.toLowerCase() == "iframe")
  5839. {
  5840. channel_re = new RegExp ("\\\/embed\\\/(.*)\\\?");
  5841. }
  5842. var data = flash_object.getAttribute(attrib);
  5843. if (!data)
  5844. {
  5845. return null;
  5846. }
  5847. var channel = data.match(channel_re);
  5848. if (!channel || (channel && !channel[channel.length-1]))
  5849. {
  5850. return null;
  5851. }
  5852. channel = channel[channel.length-1];
  5853. var jsonp_key =
  5854. /pla[_A-Za-z0-9\-]+/i.test(object_data.video_id) ? "id" : "t";
  5855. var jsonp_request_data = new Object();
  5856. jsonp_request_data.frame_id = "livestreamcom_jsonp_data_fetcher";
  5857. jsonp_request_data.parser_timeout = this.livestreamcom_jsonp_timeout;
  5858. jsonp_request_data.parser_timeout_counter =
  5859. this.livestream_jsonp_timeout_counter;
  5860. jsonp_request_data.jsonp_script_link = "http://x"+channel+
  5861. "x.api.channel.livestream.com/3.0/getstream.json?"+jsonp_key+"="+
  5862. object_data.video_id+"&callback=livestreamcom_video_data";
  5863. "http://blip.tv/players/episode/"+object_data.video_id+
  5864. "?skin=json&callback=bliptv_video_data&version=2";
  5865. jsonp_request_data.jsonp_function = "livestreamcom_video_data";
  5866. jsonp_request_data.parser_function =
  5867. this.parse_livestreamcom_jsonp_data;
  5868. jsonp_request_data.user_data = object_data;
  5869. this.log("LinternaMagica.request_bliptv_jsonp_data:\n"+
  5870. "Requesting (JSONP) Livestream.com video link via video_id "+
  5871. object_data.video_id,1);
  5872. this.create_checker_frame(jsonp_request_data);
  5873. }
  5874. LinternaMagica.prototype.parse_livestreamcom_jsonp_data =
  5875. function(data,object_data)
  5876. {
  5877. object_data.link = data.progressiveUrl ?
  5878. data.progressiveUrl : data.rtspUrl;
  5879. if (data.progressiveUrl && data.rtspUrl)
  5880. {
  5881. object_data.hd_links = new Array();
  5882. var hd_link = new Object();
  5883. hd_link.label = this._("RTSP link");
  5884. hd_link.url = data.rtspUrl;
  5885. object_data.hd_links.push(hd_link);
  5886. hd_link = new Object();
  5887. hd_link.label = this._("Progressive link");
  5888. hd_link.url = data.progressiveUrl;
  5889. object_data.hd_links.push(hd_link);
  5890. }
  5891. this.create_video_object(object_data);
  5892. }
  5893. LinternaMagica.prototype.sites["livestream.com"].css_fixes =
  5894. function(object_data)
  5895. {
  5896. var featured = document.getElementById("featured");
  5897. if (featured)
  5898. {
  5899. var lm =
  5900. document.getElementById("linterna-magica-"+
  5901. object_data.linterna_magica_id);
  5902. if (lm)
  5903. {
  5904. lm.parentNode.parentNode.parentNode.style.
  5905. setProperty("bottom", "60px", "important");
  5906. }
  5907. }
  5908. var lm_object =
  5909. document.getElementById("linterna-magica-video-object-"+
  5910. object_data.linterna_magica_id);
  5911. if (lm_object)
  5912. {
  5913. lm_object.style.setProperty("left", "0px", "important");
  5914. }
  5915. }
  5916. LinternaMagica.prototype.sites["metacafe.com"] = new Object();
  5917. LinternaMagica.prototype.sites["www.metacafe.com"] = "metacafe.com";
  5918. LinternaMagica.prototype.sites["metacafe.com"].process_extracted_link =
  5919. function(link)
  5920. {
  5921. var data = this.extract_link_data;
  5922. if (/flv/i.test(link))
  5923. {
  5924. link = link.replace(/&gdaKey/i, "?__gda__");
  5925. }
  5926. else
  5927. {
  5928. var key_re = new RegExp(
  5929. link.slice(link.length-15).replace(/\\\./g,"\\\\\\.")+
  5930. "\\\"\\\,\\\"key\\\"\\\:\\\"([0-9A-Za-z\\\_]+)\\\"",
  5931. "i");
  5932. var key = unescape(data).match(key_re);
  5933. link = link+"?__gda__="+key[key.length-1];
  5934. }
  5935. link = link.replace("[", "%5B").
  5936. replace(" ", "%20").replace("]", "%5D");
  5937. return link;
  5938. }
  5939. LinternaMagica.prototype.sites["mqsto.com"] = new Object();
  5940. LinternaMagica.prototype.sites["www.mqsto.com"] = "mqsto.com";
  5941. LinternaMagica.prototype.sites["mqsto.com"].process_extracted_link =
  5942. function(link)
  5943. {
  5944. if (!/^http/i.test(link))
  5945. {
  5946. link = "http://mqsto\.com/video/"+link;
  5947. }
  5948. return link;
  5949. }
  5950. LinternaMagica.prototype.sites["mqsto.com"].css_fixes =
  5951. function(object_data)
  5952. {
  5953. var move_down_fb_frame = 100;
  5954. object_data.parent.style.setProperty("height",
  5955. (parseInt(object_data.height)+
  5956. 26+move_down_fb_frame+
  5957. 2+
  5958. (this.controls ? 24 : 0))+"px",
  5959. "important");
  5960. return false;
  5961. }
  5962. LinternaMagica.prototype.create_myvideode_link = function(create_from_text)
  5963. {
  5964. var link = null;
  5965. if (create_from_text)
  5966. {
  5967. link = create_from_text;
  5968. }
  5969. else
  5970. {
  5971. var links = document.getElementsByTagName("link");
  5972. for (var lnk=0; lnk <links.length; lnk++)
  5973. {
  5974. var raw_link = links[lnk];
  5975. if (raw_link.hasAttribute("rel")
  5976. && /image_src/i.test(raw_link.getAttribute("rel")))
  5977. {
  5978. link = raw_link.getAttribute("href");
  5979. break;
  5980. }
  5981. }
  5982. }
  5983. if (link)
  5984. {
  5985. link = link.replace(/thumbs\/|_\d+/g,"").replace(/\.jpg/,".flv");
  5986. }
  5987. return link;
  5988. }
  5989. LinternaMagica.prototype.sites["myvideo.de"] = new Object();
  5990. LinternaMagica.prototype.sites["www.myvideo.de"] = "myvideo.de";
  5991. LinternaMagica.prototype.sites["myvideo.de"].flash_plugin_installed = "theonion.com";
  5992. LinternaMagica.prototype.sites["myvideo.de"].skip_xhr_if_video_id =
  5993. function(object_data)
  5994. {
  5995. object_data.link = this.create_myvideode_link();
  5996. if (object_data.link)
  5997. {
  5998. object_data.video_id = null;
  5999. }
  6000. return object_data ;
  6001. }
  6002. LinternaMagica.prototype.sites["myvideo.de"].prepare_xhr =
  6003. function(object_data)
  6004. {
  6005. var result = new Object();
  6006. result.address = "/watch/"+object_data.video_id+"/";
  6007. return result;
  6008. }
  6009. LinternaMagica.prototype.sites["myvideo.de"].process_xhr_response =
  6010. function(args)
  6011. {
  6012. var object_data = args.object_data;
  6013. var client = args.client;
  6014. try
  6015. {
  6016. var thumb_url = client.responseText.split(/image_src/)[1];
  6017. thumb_url = thumb_url.split(/\/\>/)[0].split(/\'/)[2];
  6018. object_data.link = this.create_myvideode_link(thumb_url);
  6019. }
  6020. catch(e)
  6021. {
  6022. return null;
  6023. }
  6024. return object_data;
  6025. }
  6026. LinternaMagica.prototype.sites["pri.org"] = new Object();
  6027. LinternaMagica.prototype.sites["www.pri.org"] = "pri.org";
  6028. LinternaMagica.prototype.sites["pri.org"].no_flash_plugin_installed =
  6029. function()
  6030. {
  6031. return true;
  6032. }
  6033. LinternaMagica.prototype.sites["pri.org"].skip_link_extraction = function()
  6034. {
  6035. var player = document.getElementById("shoutcast");
  6036. if (!player)
  6037. {
  6038. return null;
  6039. }
  6040. var extracted_data = new Object();
  6041. extracted_data.link = "http://www.pri.org/stream/listen.pls";
  6042. extracted_data.hd_links = new Array();
  6043. var links = ["pri1", "pri1-fallback", "pri2-fallback" ];
  6044. for (var pl=0, l=links.length; pl<l; pl++ )
  6045. {
  6046. var link = new Object();
  6047. var cnt = parseInt(pl+1);
  6048. link.url = "http://pri-ice.streamguys.biz/"+links[pl];
  6049. link.label = this._("Link")+" "+cnt;
  6050. link.more_info = "Public Radio International #"+cnt+" - "+(cnt > 1 ? 32 : 64)+"kbs";
  6051. extracted_data.hd_links.push(link);
  6052. }
  6053. return extracted_data;
  6054. }
  6055. LinternaMagica.prototype.sites["reuters.com"] = new Object();
  6056. LinternaMagica.prototype.sites["www.reuters.com"] = "reuters.com";
  6057. LinternaMagica.prototype.sites["reuters.com"].set_video_link_regex =
  6058. function()
  6059. {
  6060. var result = new Object();
  6061. result.link_re = new RegExp (
  6062. "videoURL=(.*)(\\\&{1})(.*)",
  6063. "i");
  6064. result.link_position = 3;
  6065. return result;
  6066. }
  6067. LinternaMagica.prototype.sites["reuters.com"].css_fixes =
  6068. function(object_data)
  6069. {
  6070. var extra_height = 100;
  6071. var fourth_parent = object_data.parent.parentNode.parentNode.parentNode;
  6072. if (fourth_parent)
  6073. {
  6074. fourth_parent.style.setProperty("overflow", "visible", "important");
  6075. fourth_parent.style.
  6076. setProperty("height",
  6077. (parseInt(object_data.height)+26+
  6078. extra_height+
  6079. 2+
  6080. (this.controls ? 24 : 0) )+"px",
  6081. "important");
  6082. }
  6083. return false;
  6084. }
  6085. LinternaMagica.prototype.create_tedcom_link = function(relative_link)
  6086. {
  6087. if (relative_link)
  6088. {
  6089. relative_link = relative_link.replace(/ms|hs|ls/,"").
  6090. replace(/\"/g,"").replace("mp4:","").replace(":","").
  6091. replace("=","").replace(",","");
  6092. var link = "http://video.ted.com/"+relative_link;
  6093. return link;
  6094. }
  6095. return null;
  6096. }
  6097. LinternaMagica.prototype.extract_tedcom_hd_links = function(data)
  6098. {
  6099. var links_re = new RegExp (
  6100. "(?:\\\&)*\\\w{2}(\\\=|\\\:)*\\\s*(\\\"|\\\')*"+
  6101. "(.*\\\.(flv|mp4))(\\\&|\\\",$)",
  6102. "img");
  6103. var links = unescape(data).match(links_re);
  6104. if (!links)
  6105. {
  6106. return false;
  6107. }
  6108. if (links[0].match(/&hs=/))
  6109. {
  6110. links = links[0].split("&vw")[0].split("&").slice(1,4);
  6111. }
  6112. else
  6113. {
  6114. links = links.slice(0,3);
  6115. }
  6116. if (!links)
  6117. return;
  6118. var hd_links = new Array();
  6119. for (var lnk=0; lnk<links.length; lnk++)
  6120. {
  6121. var link = new Object();
  6122. link.url = this.create_tedcom_link(links[lnk]);
  6123. var label = link.url.match(/-(\w+)\.(flv|mp4)/);
  6124. if (!label)
  6125. {
  6126. label = this._("Link")+" "+lnk+1;
  6127. }
  6128. else
  6129. {
  6130. label = label[label.length-2];
  6131. label = label.slice(0,1).toUpperCase() + label.slice(1);
  6132. }
  6133. link.label = label;
  6134. this.log("LinternaMagica.extract_tedcom_hd_links:\n"+
  6135. "Extracted link : "+link.url,1);
  6136. hd_links.push(link);
  6137. }
  6138. if (hd_links.length)
  6139. return hd_links;
  6140. return null;
  6141. }
  6142. LinternaMagica.prototype.sites["ted.com"] = new Object();
  6143. LinternaMagica.prototype.sites["www.ted.com"] = "ted.com";
  6144. LinternaMagica.prototype.sites["ted.com"].before_options_init = function()
  6145. {
  6146. if(!/[A-Za-z0-9]+/i.test(window.location.pathname))
  6147. {
  6148. this.log("LinternaMagica.sites.before_options_init:\n"+
  6149. "Skipping TED front page!"+
  6150. " Blocks Firefox and forks.");
  6151. return false;
  6152. }
  6153. return true;
  6154. }
  6155. LinternaMagica.prototype.sites["ted.com"].extract_hd_links_from_dom_if_link =
  6156. function(data)
  6157. {
  6158. this.log("LinternaMagica.sites.extract_hd_links_from_dom_if_link:\n"+
  6159. "Trying to extract ted.com HQ links ",1);
  6160. return this.extract_tedcom_hd_links(data);
  6161. }
  6162. LinternaMagica.prototype.sites["ted.com"].extract_hd_links_from_script_if_link =
  6163. function()
  6164. {
  6165. var data = this.extract_link_data;
  6166. this.log("LinternaMagica.sites.extract_hd_links_from_script_if_link:\n"+
  6167. "Trying to extract ted.com HQ links ",1);
  6168. return this.extract_tedcom_hd_links(data);
  6169. }
  6170. LinternaMagica.prototype.sites["ted.com"].skip_script_processing =
  6171. function()
  6172. {
  6173. if (this.script_data.length >= 15000)
  6174. {
  6175. this.log("LinternaMagca.sites.skip_script_processing:\n"+
  6176. "Skipping script processing, because it is too big.");
  6177. return false;
  6178. }
  6179. return true;
  6180. }
  6181. LinternaMagica.prototype.sites["ted.com"].process_extracted_link =
  6182. function(link)
  6183. {
  6184. link = this.create_tedcom_link(link);
  6185. return link;
  6186. }
  6187. LinternaMagica.prototype.sites["theonion.com"] = new Object();
  6188. LinternaMagica.prototype.sites["www.theonion.com"] = "theonion.com";
  6189. LinternaMagica.prototype.sites["theonion.com"].extract_object_from_script =
  6190. function()
  6191. {
  6192. var player_container = document.getElementById("player_container");
  6193. if (!player_container)
  6194. {
  6195. return null;
  6196. }
  6197. var data = this.script_data;
  6198. var video_id_re = new RegExp (
  6199. "var\\\s*afns_video_id\\\s*="+
  6200. "\\\s*(\\\"|\\\')([0-9]+)(\\\"|\\\')");
  6201. var video_id = data.match(video_id_re);
  6202. if (!video_id)
  6203. {
  6204. return null;
  6205. }
  6206. video_id = video_id[video_id.length-2];
  6207. var width = player_container.clientWidth;
  6208. var height = player_container.clientHeight;
  6209. if (!width || !height)
  6210. {
  6211. return null;
  6212. }
  6213. var flash_object = document.getElementById("player_container_api");
  6214. var object_data = new Object();
  6215. object_data.video_id = video_id;
  6216. object_data.width = width;
  6217. object_data.height = height;
  6218. object_data.parent = player_container;
  6219. if (flash_object)
  6220. {
  6221. object_data.linterna_magica_id =
  6222. this.mark_flash_object(flash_object);
  6223. }
  6224. else
  6225. {
  6226. object_data.linterna_magica_id =
  6227. this.mark_flash_object("extracted-from-script");
  6228. }
  6229. return object_data;
  6230. }
  6231. LinternaMagica.prototype.capture_theonion_clip_change = function(object_data)
  6232. {
  6233. var list = document.getElementById("onn_recent");
  6234. if (!list || !/HTMLUListElement/i.test(list))
  6235. {
  6236. return null;
  6237. }
  6238. var self = this;
  6239. this.theonion_click_wrapper_function = function(ev)
  6240. {
  6241. var el = this;
  6242. var od = object_data;
  6243. self.theonion_clip_change_click_function.apply(self,[ev,el,od]);
  6244. };
  6245. var buttons = list.getElementsByTagName("li");
  6246. for (var i=0,l=buttons.length; i<l; i++)
  6247. {
  6248. var li = buttons[i];
  6249. li.addEventListener("click",
  6250. this.theonion_click_wrapper_function, true);
  6251. }
  6252. }
  6253. LinternaMagica.prototype.theonion_clip_change_click_function =
  6254. function(event,element,object_data)
  6255. {
  6256. var p = element.getElementsByTagName("p");
  6257. for (var i=0, l=p.length; i<l; i++)
  6258. {
  6259. if (p[i].hasAttribute("rel") &&
  6260. p[i].hasAttribute("class") &&
  6261. /title/i.test(p[i].getAttribute("class")))
  6262. {
  6263. object_data.video_id = p[i].getAttribute("rel");
  6264. this.request_video_link(object_data);
  6265. var lm = this.get_video_object(object_data.linterna_magica_id);
  6266. lm = lm.parentNode;
  6267. object_data.parent.removeChild(lm);
  6268. break;
  6269. }
  6270. }
  6271. }
  6272. LinternaMagica.prototype.sites["theonion.com"].flash_plugin_installed =
  6273. function()
  6274. {
  6275. this.log("LinternaMagica.sites.flash_plugin_installed:\n",
  6276. "Calling default function to extract scripts");
  6277. return this.sites.__no_flash_plugin_installed.apply(this, [arguments]);
  6278. }
  6279. LinternaMagica.prototype.sites["theonion.com"].prepare_xhr =
  6280. function(object_data)
  6281. {
  6282. var result = new Object();
  6283. result.address = "/ajax/onn/embed/"+object_data.video_id+".json";
  6284. return result;
  6285. }
  6286. LinternaMagica.prototype.sites["theonion.com"].process_xhr_response =
  6287. function(args)
  6288. {
  6289. var client = args.client;
  6290. var object_data = args.object_data;
  6291. var onion_data = eval("("+client.responseText+")");
  6292. object_data.link = onion_data.video_url;
  6293. if (!this.theonion_click_wrapper_function)
  6294. {
  6295. this.capture_theonion_clip_change(object_data);
  6296. }
  6297. return object_data;
  6298. }
  6299. LinternaMagica.prototype.sites["tv7.bg"] = new Object();
  6300. LinternaMagica.prototype.sites["www.tv7.bg"] = "tv7.bg";
  6301. LinternaMagica.prototype.sites["tv7.bg"].process_extracted_link =
  6302. function(link)
  6303. {
  6304. if (!/^http/i.test(link))
  6305. {
  6306. link = "/"+link;
  6307. }
  6308. return link;
  6309. }
  6310. LinternaMagica.prototype.sites["tv7.bg"].css_fixes =
  6311. function(object_data)
  6312. {
  6313. object_data.parent.parentNode.style.
  6314. setProperty("height",
  6315. (parseInt(object_data.height)+26+
  6316. 2+
  6317. (this.controls ? 24 : 0) )+"px",
  6318. "important");
  6319. object_data.parent.parentNode.style.
  6320. setProperty("width",
  6321. (parseInt(object_data.width+2))+"px",
  6322. "important");
  6323. var third_parent = object_data.parent.parentNode.parentNode;
  6324. if (third_parent)
  6325. {
  6326. third_parent.style.setProperty("overflow", "visible", "important");
  6327. third_parent.style.
  6328. setProperty("height",
  6329. (parseInt(object_data.height)+26+
  6330. 2+
  6331. (this.controls ? 24 : 0) )+"px",
  6332. "important");
  6333. }
  6334. return false;
  6335. }
  6336. LinternaMagica.prototype.sites["vbox7.com"] = new Object();
  6337. LinternaMagica.prototype.sites["www.vbox7.com"] = "vbox7.com";
  6338. LinternaMagica.prototype.sites["vbox7.com"].prepare_xhr =
  6339. function(object_data)
  6340. {
  6341. var result = new Object();
  6342. result.address ="/play/magare.do";
  6343. result.method = "POST";
  6344. result.data = "vid="+object_data.video_id;
  6345. result.content= "application/x-www-form-urlencoded";
  6346. return result;
  6347. }
  6348. LinternaMagica.prototype.sites["vbox7.com"].process_xhr_response =
  6349. function(args)
  6350. {
  6351. var client = args.client;
  6352. var object_data = args.object_data;
  6353. object_data.link = client.responseText.split(/videoFile=/i)[1].split("&")[0];
  6354. return object_data;
  6355. }
  6356. LinternaMagica.prototype.sites["viddler.com"] = new Object();
  6357. LinternaMagica.prototype.sites["www.viddler.com"] = "viddler.com";
  6358. LinternaMagica.prototype.sites["viddler.com"].prepare_xhr =
  6359. function(object_data)
  6360. {
  6361. var result = new Object();
  6362. result.address = "/videos/"+object_data.video_id+
  6363. "/lightbox?tab=download&view_video=0";
  6364. return result;
  6365. }
  6366. LinternaMagica.prototype.sites["viddler.com"].process_xhr_response =
  6367. function(args)
  6368. {
  6369. var object_data = args.object_data;
  6370. var client = args.client;
  6371. var xml = client.responseXML;
  6372. if (!xml)
  6373. {
  6374. var html = '<html xmlns="http://www.w3.org/1999/xhtml">'+
  6375. '<body><div>'+client.responseText+'</div></body></html>';
  6376. if (window.DOMParser)
  6377. {
  6378. try
  6379. {
  6380. xml = (new DOMParser()).
  6381. parseFromString(html, "application/xml");
  6382. }
  6383. catch(e)
  6384. {
  6385. this.log('LinternaMagica.sites["viddler.com"].'+
  6386. 'process_xhr_response:\n'+
  6387. "Unable to parse XML string created"+
  6388. "from client.responseText.",4);
  6389. }
  6390. }
  6391. }
  6392. if (!xml)
  6393. {
  6394. return null;
  6395. }
  6396. var file_desc = xml.querySelectorAll(".file-desc");
  6397. if (!file_desc)
  6398. {
  6399. return null;
  6400. }
  6401. var hd_links = new Array();
  6402. for (var i=0, l=file_desc.length;i<l; i++)
  6403. {
  6404. var link = new Object();
  6405. var td = file_desc[i].parentNode.getElementsByTagName('td');
  6406. link.label = td[1].textContent.
  6407. replace(/[0-9]+\s*x\s*/,'').replace(/$/, 'p')+" "+
  6408. td[0].textContent.replace(/Source\s*/,'');
  6409. link.more_info = td[1].textContent.replace(/\s/g,'') + " "+
  6410. td[0].textContent+", "+
  6411. td[2].textContent;
  6412. var url = td[3].getElementsByTagName('a');
  6413. url = (url && url[0]) ? url[0].getAttribute('href') : null;
  6414. link.url = url;
  6415. link.file_size = td[2].textContent.replace(/\s*MB\s*$/i,'');
  6416. link.video_width = td[1].textContent.replace(/x.*/,'');
  6417. hd_links.push(link);
  6418. }
  6419. var sort_fun = function (a, b)
  6420. {
  6421. if (parseInt(a.video_width) > parseInt(b.video_width))
  6422. {
  6423. return -1;
  6424. }
  6425. else if (parseInt(a.video_width) < parseInt(b.video_width))
  6426. {
  6427. return 1;
  6428. }
  6429. else
  6430. {
  6431. if (parseFloat(a.file_size) > parseFloat(b.file_size))
  6432. {
  6433. return -1;
  6434. }
  6435. else if (parseFloat(a.file_size) < parseFloat(b.file_size))
  6436. {
  6437. return 1;
  6438. }
  6439. else
  6440. {
  6441. return 0;
  6442. }
  6443. return 0;
  6444. }
  6445. }
  6446. hd_links.sort(sort_fun);
  6447. object_data.link = (hd_links.length > 0) ? hd_links[0].url : null;
  6448. object_data.hd_links = (hd_links.length > 1) ? hd_links : null;
  6449. return object_data;
  6450. }
  6451. LinternaMagica.prototype.sites["viddler.com"].
  6452. skip_script_processing = function()
  6453. {
  6454. return false;
  6455. }
  6456. LinternaMagica.prototype.sites["viddler.com"].css_fixes = function(object_data)
  6457. {
  6458. object_data.parent.style.setProperty("overflow",
  6459. "visible", "important");
  6460. object_data.parent.
  6461. parentNode.style.setProperty("overflow", "visible", "important");
  6462. var hd_links = document.getElementById('linterna-magica-hd-links-list-'+
  6463. object_data.linterna_magica_id);
  6464. if(hd_links)
  6465. {
  6466. hd_links.style.setProperty("width", "8%", "important");
  6467. }
  6468. return false;
  6469. }
  6470. LinternaMagica.prototype.sites["videoclipsdump.com"] = new Object();
  6471. LinternaMagica.prototype.sites["www.videoclipsdump.com"] = "videoclipsdump.com";
  6472. LinternaMagica.prototype.sites["videoclipsdump.com"].prepare_xhr =
  6473. function(object_data)
  6474. {
  6475. var result = new Object();
  6476. result.address = "/player/cbplayer/settings.php?vid="+
  6477. object_data.video_id;
  6478. return result;
  6479. }
  6480. LinternaMagica.prototype.sites["videoclipsdump.com"].process_xhr_response =
  6481. function(args)
  6482. {
  6483. var client = args.client;
  6484. var object_data = args.object_data;
  6485. var xml = client.responseXML;
  6486. var path = xml.getElementsByTagName("videoPath")[0];
  6487. if (path)
  6488. {
  6489. object_data.link = path.getAttribute("value");
  6490. }
  6491. return object_data;
  6492. }
  6493. LinternaMagica.prototype.extract_signature_vimeo = function()
  6494. {
  6495. var data = this.script_data;
  6496. var signature = null;
  6497. if (!data)
  6498. {
  6499. return null;
  6500. }
  6501. var signature_re = new RegExp(
  6502. "(\\\"|\\\')*signature(\\\"|\\\')*:(\\\"|\\\')*([^,\\\"\\\']+)(\\\"|\\\')*",
  6503. "im");
  6504. signature = data.match(signature_re);
  6505. if (signature && signature[signature.length-2])
  6506. {
  6507. signature = signature[signature.length-2];
  6508. }
  6509. return signature;
  6510. }
  6511. LinternaMagica.prototype.extract_time_stamp_vimeo = function()
  6512. {
  6513. var data = this.script_data;
  6514. var time_stamp = null;
  6515. if (!data)
  6516. {
  6517. return null;
  6518. }
  6519. var time_stamp_re = new RegExp(
  6520. "(\\\"|\\\')*[^_]timestamp(\\\"|\\\')*:(\\\"|\\\')*([^,\\\"\\\']+)(\\\"|\\\')*",
  6521. "im");
  6522. time_stamp = data.match(time_stamp_re);
  6523. if (time_stamp && time_stamp[time_stamp.length-2])
  6524. {
  6525. time_stamp = time_stamp[time_stamp.length-2];
  6526. }
  6527. return time_stamp;
  6528. }
  6529. LinternaMagica.prototype.extract_codec_and_quality_vimeo = function()
  6530. {
  6531. var data = this.script_data;
  6532. if (!data)
  6533. {
  6534. return null;
  6535. }
  6536. var files_re = new RegExp(
  6537. "(\\\"|\\\')*files(\\\"|\\\')*:(\\\"|\\\')*([^\\\}]+)",
  6538. "im");
  6539. var files = data.match(files_re);
  6540. if (!files && !files[files.length-1]);
  6541. this.log("LinternaMagica.prototype.extract_codec_and_quality_vimeo:\n"+
  6542. "Result from files_re: "+files,5);
  6543. var codecs_data_re = new RegExp(
  6544. "(\\\"|\\\')*([^:,\\\"\\\']+)(\\\'|\\\")*:\\\[([^\\\]]+)\\\]",
  6545. "img");
  6546. var codecs_data = null;
  6547. var codecs = new Object();
  6548. codecs.length = -1;
  6549. while(codecs_data = codecs_data_re.exec(files[files.length-1]))
  6550. {
  6551. if (codecs_data && codecs_data[codecs_data.length-1] &&
  6552. codecs_data[codecs_data.length-3])
  6553. {
  6554. var name = codecs_data[codecs_data.length-3];
  6555. var quality = codecs_data[codecs_data.length-1];
  6556. quality = quality.replace(/\"|\'|/g, '').split(/,/);
  6557. codecs[name] = quality;
  6558. this.log("LinternaMagica.extract_codec_and_quality_vimeo:\n"+
  6559. "Extracted codec "+name+". "+
  6560. "Available quality: "+quality.join(", ")+".",5);
  6561. codecs.length++;
  6562. }
  6563. }
  6564. if (codecs.length == -1)
  6565. {
  6566. codecs = null;
  6567. }
  6568. delete codecs.length;
  6569. return codecs;
  6570. }
  6571. LinternaMagica.prototype.create_links_vimeo = function(args)
  6572. {
  6573. if(!args)
  6574. {
  6575. return null;
  6576. }
  6577. var links = new Array();
  6578. for (var c in args.codecs)
  6579. {
  6580. for (var i=0,l=args.codecs[c].length;i<l; i++)
  6581. {
  6582. var q = args.codecs[c][i].toLowerCase();
  6583. var link = new Object();
  6584. link.url = "http://player.vimeo.com/play_redirect?quality="+q+
  6585. "&codecs="+c+
  6586. "&clip_id="+args.object_data.video_id+
  6587. "&time="+args.time_stamp+
  6588. "&sig="+args.signature+"&type=html5_desktop_local";
  6589. var res = null;
  6590. if (q == "mobile")
  6591. {
  6592. res = "480p";
  6593. }
  6594. else if (q == "sd")
  6595. {
  6596. res = "640p";
  6597. }
  6598. else if (q == "hd")
  6599. {
  6600. res = "1280p";
  6601. }
  6602. else
  6603. {
  6604. res = "Unknown";
  6605. }
  6606. var codec = c.toUpperCase();
  6607. link.label = res + " "+codec;
  6608. link.more_info = codec+ " "+q.toUpperCase()+" "+res;
  6609. links.push(link);
  6610. }
  6611. }
  6612. return (links && links.length >=0) ? links : null;
  6613. }
  6614. LinternaMagica.prototype.sites["vimeo.com"] = new Object();
  6615. LinternaMagica.prototype.sites["www.vimeo.com"] = "vimeo.com";
  6616. LinternaMagica.prototype.sites["vimeo.com"].flash_plugin_installed = "youtube.com";
  6617. LinternaMagica.prototype.sites["vimeo.com"].extract_object_from_script = function()
  6618. {
  6619. var player_element_re = new RegExp(
  6620. "player[0-9]+_[0-9]+_element\\\s*=\\\s*"+
  6621. "document.getElementById\\\(\\\'([a-zA-Z0-9_]+)\\\'\\\)",
  6622. "im");
  6623. var data = this.script_data;
  6624. var player_element = data.match(player_element_re);
  6625. if (!player_element)
  6626. {
  6627. return null;
  6628. }
  6629. var el = document.getElementById(player_element[1]);
  6630. if (!el)
  6631. {
  6632. return null;
  6633. }
  6634. var video_id = data.match(/\"id\":([0-9]+),/);
  6635. if (video_id)
  6636. {
  6637. video_id = video_id[1];
  6638. }
  6639. var width = el.clientWidth || el.offsetWidth ||
  6640. el.parentNode.clientWidth || el.parentNode.offsetWidth;
  6641. var height = el.clientHeight || el.offsetHeight ||
  6642. el.parentNode.clientHeight || el.parentNode.offsetHeight;
  6643. if (video_id && width && height)
  6644. {
  6645. var object_data = new Object();
  6646. object_data.width = width;
  6647. object_data.height = height;
  6648. object_data.video_id = video_id;
  6649. object_data.parent = el;
  6650. object_data.mime = "video/mp4";
  6651. var time_stamp = this.extract_time_stamp_vimeo();
  6652. var signature = this.extract_signature_vimeo();
  6653. if (!time_stamp)
  6654. {
  6655. this.log("LinternaMagica.extract_object_from_script_vimeo:\n"+
  6656. "Unable to extract time stamp. Giving up.",1);
  6657. return null;
  6658. }
  6659. if (!signature)
  6660. {
  6661. this.log("LinternaMagica.extract_object_from_script_vimeo:\n"+
  6662. "Unable to extract signature. Giving up.",1);
  6663. return null;
  6664. }
  6665. var codecs = this.extract_codec_and_quality_vimeo();
  6666. var args = new Object();
  6667. args.object_data = object_data;
  6668. args.codecs = codecs;
  6669. args.time_stamp = time_stamp;
  6670. args.signature = signature;
  6671. var hd_links = this.create_links_vimeo(args);
  6672. object_data.hd_links = hd_links;
  6673. object_data.link = hd_links ? hd_links[hd_links.length-1].url : null;
  6674. if (!object_data.link)
  6675. {
  6676. return null;
  6677. }
  6678. this.log("LinternaMagica.extract_object_from_script_vimeo:\n"+
  6679. "Object data extracted from script ",1);
  6680. object_data.linterna_magica_id =
  6681. this.mark_flash_object("extracted-from-script");
  6682. return object_data;
  6683. }
  6684. return null;
  6685. }
  6686. LinternaMagica.prototype.sites["vimeo.com"].css_fixes = function(object_data)
  6687. {
  6688. if (object_data.parent.firstChild &&
  6689. /HTMLDiv/i.test(object_data.parent.firstChild))
  6690. {
  6691. object_data.parent.removeChild(object_data.parent.firstChild);
  6692. var flash_object =
  6693. this.get_flash_video_object(object_data.linterna_magica_id,
  6694. object_data.parent);
  6695. if (flash_object)
  6696. {
  6697. flash_object.style.setProperty("position",
  6698. "relative", "important");
  6699. }
  6700. }
  6701. object_data.parent.style.
  6702. setProperty("overflow", "visible", "important");
  6703. object_data.parent.parentNode.style.
  6704. setProperty("overflow", "visible", "important");
  6705. object_data.parent.parentNode.style.
  6706. setProperty("background-color", "transparent", "important");
  6707. object_data.parent.parentNode.style.
  6708. setProperty("background-image", "none", "important");
  6709. var object_tag =
  6710. document.getElementById("linterna-magica-video-object-"+
  6711. object_data.linterna_magica_id);
  6712. if (object_tag)
  6713. {
  6714. object_tag.style.setProperty("position","relative","important");
  6715. }
  6716. var third_parent = object_data.parent.parentNode.parentNode;
  6717. if (third_parent)
  6718. {
  6719. third_parent.style.setProperty("overflow", "visible",
  6720. "important");
  6721. third_parent.style.setProperty("height",
  6722. (parseInt(object_data.height)+26+
  6723. 2+
  6724. (this.controls ? 24 : 0) )+40+"px",
  6725. "important");
  6726. third_parent.style.
  6727. setProperty("background-color", "transparent", "important");
  6728. }
  6729. var fourth_parent = object_data.parent.parentNode.
  6730. parentNode.parentNode;
  6731. if (fourth_parent)
  6732. {
  6733. fourth_parent.style.setProperty("overflow", "visible",
  6734. "important");
  6735. fourth_parent.style.setProperty("height",
  6736. (parseInt(object_data.height)+26+
  6737. 2+
  6738. (this.controls ? 24 : 0) )+40+"px",
  6739. "important");
  6740. }
  6741. object_data.parent.parentNode.style.
  6742. setProperty("height", (parseInt(object_data.height)+26+
  6743. 2+
  6744. (this.controls ? 24 : 0) )+"px", "important");
  6745. object_data.parent.parentNode.style.
  6746. setProperty("width", (parseInt(object_data.width+2))+"px",
  6747. "important");
  6748. var site_html5_player =
  6749. this.find_site_html5_player_wrapper(object_data.parent);
  6750. if (site_html5_player)
  6751. {
  6752. site_html5_player.style.setProperty("height", "87%", "important");
  6753. site_html5_player.style.setProperty("margin-bottom",
  6754. "5px", "important");
  6755. }
  6756. var lm = document.getElementById("linterna-magica-"+
  6757. object_data.linterna_magica_id);
  6758. if (lm)
  6759. {
  6760. var div_sbu = lm.previousSibling;
  6761. if (/HTMLDiv/i.test(div_sbu) &&
  6762. div_sbu.hasAttribute("class") &&
  6763. /s bu/i.test(div_sbu.getAttribute("class")) &&
  6764. !site_html5_player)
  6765. {
  6766. div_sbu.parentNode.removeChild(div_sbu);
  6767. }
  6768. }
  6769. if (lm)
  6770. {
  6771. var div = lm.previousSibling;
  6772. if (/HTMLDiv/i.test(div))
  6773. {
  6774. div.parentNode.removeChild(div);
  6775. }
  6776. }
  6777. var gallery = document.getElementById("videos_gallery");
  6778. if (gallery)
  6779. {
  6780. gallery.style.setProperty("margin-top", "90px", "important");
  6781. }
  6782. this.vimeo_fix_navigation();
  6783. return false;
  6784. }
  6785. LinternaMagica.prototype.sites["vimeo.com"].
  6786. process_duplicate_object_before_xhr =
  6787. function(object_data)
  6788. {
  6789. this.log("LinternaMagica.sites.process_duplicate_object_before_xhr:\n"+
  6790. "Removing/hiding duplicate object ",1);
  6791. this.hide_flash_video_object(object_data.linterna_magica_id,
  6792. object_data.parent);
  6793. return false;
  6794. }
  6795. LinternaMagica.prototype.sites["vimeo.com"].
  6796. skip_video_id_extraction = function()
  6797. {
  6798. return null;
  6799. }
  6800. LinternaMagica.prototype.vimeo_fix_navigation = function()
  6801. {
  6802. var vimeo_fix_list = function (list_id)
  6803. {
  6804. var list = document.getElementById(list_id);
  6805. if (!list)
  6806. {
  6807. return false;
  6808. }
  6809. var vimeo_list_click_fn = function(ev)
  6810. {
  6811. window.location = this.getAttribute("href");
  6812. }
  6813. var li_elements = list.getElementsByTagName('li');
  6814. for (var i=0, l=li_elements.length; i<l; i++)
  6815. {
  6816. var li = li_elements[i];
  6817. var a = li.getElementsByTagName("a");
  6818. if (a && a[0]) {
  6819. a[0].addEventListener("click", vimeo_list_click_fn, true);
  6820. }
  6821. }
  6822. return true;
  6823. }
  6824. if (window.location.pathname == '/')
  6825. {
  6826. vimeo_fix_list('featured_videos');
  6827. var featured_ = document.getElementById("featured_videos");
  6828. if (featured_videos)
  6829. {
  6830. featured_videos.addEventListener("DOMNodeInserted",
  6831. function(e)
  6832. {
  6833. var timeout = function()
  6834. {
  6835. vimeo_fix_list('featured_videos');
  6836. }
  6837. setTimeout(timeout, 500);
  6838. setTimeout(timeout, 1200);
  6839. setTimeout(timeout, 5000);
  6840. }, false);
  6841. }
  6842. }
  6843. else
  6844. {
  6845. var brozar = document.getElementById("brozar");
  6846. if (brozar)
  6847. {
  6848. brozar.addEventListener("DOMNodeInserted",
  6849. function(e)
  6850. {
  6851. var timeout = function()
  6852. {
  6853. vimeo_fix_list('clips');
  6854. }
  6855. setTimeout(timeout, 500);
  6856. setTimeout(timeout, 1200);
  6857. setTimeout(timeout, 5000);
  6858. }, false);
  6859. }
  6860. }
  6861. }
  6862. LinternaMagica.prototype.sites["yourlisten.com"] = new Object();
  6863. LinternaMagica.prototype.sites["www.yourlisten.com"] = "yourlisten.com";
  6864. LinternaMagica.prototype.sites["yourlisten.com"].set_video_link_regex =
  6865. function()
  6866. {
  6867. var result = new Object();
  6868. result.link_re = new RegExp(
  6869. "soundfile=(.*)",
  6870. "i");
  6871. result.link_position = 1;
  6872. return result;
  6873. }
  6874. LinternaMagica.prototype.sites["yourlisten.com"].
  6875. do_not_clean_amps_in_extracted_link = "video.google.com";
  6876. LinternaMagica.prototype.sites["yourlisten.com"].css_fixes =
  6877. function(object_data)
  6878. {
  6879. var computed_height =
  6880. document.defaultView.
  6881. getComputedStyle(object_data.parent).getPropertyValue("height");
  6882. object_data.parent.style.
  6883. setProperty("height",
  6884. (parseInt(computed_height)+50)+"px",
  6885. "important");
  6886. object_data.parent.style.setProperty("margin-bottom",
  6887. "50px", "important");
  6888. return false;
  6889. }
  6890. LinternaMagica.prototype.extract_youtube_fmt_parameter = function()
  6891. {
  6892. var data = this.script_data;
  6893. var fmt_re = new RegExp (
  6894. "(\\\"|\\\'|\\\&)fmt_list"+
  6895. "(\\\"|\\\')*(\\\=|\\\:|,)\\\s*(\\\"|\\\')*"+
  6896. "([a-zA-Z0-9\\\-\\\_\\\%\\\=\\\/,\\\\]+)");
  6897. var fmt = data.match(fmt_re);
  6898. if (fmt)
  6899. {
  6900. fmt = fmt[fmt.length-1].replace(/\\/g, "");
  6901. this.log("LinternaMagica.extract_youtube_fmt_parameter:\n"+
  6902. "Extracted fmt : "+fmt,1);
  6903. return unescape(fmt);
  6904. }
  6905. else
  6906. {
  6907. this.log("LinternaMagica.extract_youtube_fmt_parameter:\n"+
  6908. "No fmt parameter found. ",1);
  6909. }
  6910. return null;
  6911. }
  6912. LinternaMagica.prototype.create_youtube_links = function(fmt, fmt_url_map)
  6913. {
  6914. if (fmt && fmt_url_map)
  6915. {
  6916. fmt = unescape(fmt).split(/,/);
  6917. var links = new Array();
  6918. for (var f=0; f<fmt.length; f++)
  6919. {
  6920. var link_data = fmt[f].split(/\//);
  6921. var link = new Object();
  6922. var label="";
  6923. var more_info = "";
  6924. var fmt_id = link_data[0];
  6925. switch (fmt_id)
  6926. {
  6927. case '5':
  6928. case '34':
  6929. case '35':
  6930. label += "FLV";
  6931. break;
  6932. case '18':
  6933. case '22':
  6934. case '37':
  6935. case '38':
  6936. case '82':
  6937. case '83':
  6938. case '84':
  6939. case '85':
  6940. label += "MP4";
  6941. break;
  6942. case '43':
  6943. case '44':
  6944. case '45':
  6945. case '46':
  6946. case '100':
  6947. case '101':
  6948. case '102':
  6949. label += " WebM";
  6950. break;
  6951. case '13':
  6952. case '17':
  6953. case '36':
  6954. label += " 3GP";
  6955. break;
  6956. default:
  6957. label += this._("Unkown container");
  6958. }
  6959. switch (fmt_id)
  6960. {
  6961. case '82':
  6962. case '83':
  6963. case '84':
  6964. case '85':
  6965. case '100':
  6966. case '101':
  6967. case '102':
  6968. label += " 3D";
  6969. break;
  6970. default:
  6971. "";
  6972. }
  6973. switch (fmt_id)
  6974. {
  6975. case '5':
  6976. more_info += "Sorenson H.263, MP3";
  6977. break;
  6978. case '18':
  6979. case '22':
  6980. case '34':
  6981. case '35':
  6982. case '37':
  6983. case '38':
  6984. case '82':
  6985. case '83':
  6986. case '84':
  6987. case '85':
  6988. more_info += "MPEG-4 AVC (H.264), AAC";
  6989. break;
  6990. case '43':
  6991. case '44':
  6992. case '45':
  6993. case '46':
  6994. case '100':
  6995. case '101':
  6996. case '102':
  6997. more_info += "VP8, Vorbis";
  6998. break;
  6999. case '13':
  7000. case '17':
  7001. case '36':
  7002. more_info += "MPEG-4 Visual, AAC";
  7003. break;
  7004. default:
  7005. more_info += " " + this._("Unkown encoding");
  7006. }
  7007. link.label = link_data[1].split(/x/)[1] + "p " +label;
  7008. link.more_info = link_data[1] + " " +label+ " " + more_info;
  7009. if (!fmt_url_map[fmt_id])
  7010. {
  7011. this.log("LinternaMagica.create_youtube_links:\n"+
  7012. "Missing URL for fmt_id "+fmt_id+
  7013. " in array map fmt_url_map",5);
  7014. continue;
  7015. }
  7016. link.url = fmt_url_map[fmt_id];
  7017. this.log("LinternaMagica.create_youtube_links:\n"+
  7018. "Extracted link : "+link.url,4);
  7019. links.push(link);
  7020. }
  7021. return links;
  7022. }
  7023. return null;
  7024. }
  7025. LinternaMagica.prototype.detect_youtube_flash_upgrade = function(object_data)
  7026. {
  7027. this.youtube_flash_upgrade_counter++;
  7028. var watch_player = document.getElementById("watch7-player");
  7029. var fancy_alert = null;
  7030. if(watch_player && watch_player.hasAttribute("class") &&
  7031. /flash-player/i.test(watch_player.getAttribute("class")))
  7032. {
  7033. var alert = watch_player.querySelector(".yt-alert-message");
  7034. if (alert && /flash player/i.test(alert.textContent))
  7035. {
  7036. fancy_alert = true;
  7037. }
  7038. }
  7039. if (document.getElementById("movie_player") ||
  7040. document.getElementById("movie_player-html5") ||
  7041. fancy_alert ||
  7042. this.youtube_flash_upgrade_counter >= 5 )
  7043. {
  7044. clearInterval(this.youtube_flash_upgrade_timeout);
  7045. this.log("LinternaMagica.detect_youtube_flash_upgrade:\n"+
  7046. "Removing plugin install warning.",2);
  7047. this.remove_plugin_install_warning(object_data.parent);
  7048. this.log("LinternaMagica.detect_youtube_flash_upgrade:\n"+
  7049. "Creating video object.",2);
  7050. setTimeout(this.create_video_object(object_data), 1000);
  7051. }
  7052. }
  7053. LinternaMagica.prototype.extract_youtube_fmt_url_map = function()
  7054. {
  7055. var data = this.script_data;
  7056. var fmt_re = new RegExp (
  7057. "(\\\"|\\\'|\\\&|\\\&)url_encoded_fmt_stream_map"+
  7058. "(\\\"|\\\')*(\\\=|\\\:|,)\\\s*(\\\"|\\\')*"+
  7059. "([a-zA-Z0-9\\\-\\\_\\\%\\\=\\\/,\\\\\.\|:=&%\?\+]+)");
  7060. var fmt = data.match(fmt_re);
  7061. if (fmt)
  7062. {
  7063. this.log("LinternaMagica.extract_youtube_fmt_url_map:\n"+
  7064. "Extracted fmt_url_map.",1);
  7065. this.log("LinternaMagica.extract_youtube_fmt_url_map:\n"+
  7066. "RAW map variable:"+fmt,5);
  7067. var map = new Object();
  7068. fmt = fmt[fmt.length-1].replace(/\\\//g, "/");
  7069. fmt = fmt.split(/,/);
  7070. var links = 0;
  7071. for (var url=0; url<fmt.length; url++)
  7072. {
  7073. var link = fmt[url].match(/(url|conn)=([^&]+)/);
  7074. var fmt_id = fmt[url].match(/itag=([0-9]+)/);
  7075. var sig = fmt[url].replace(/\\u0026/g, '&').match(/sig=[^&]+/);
  7076. sig = sig[sig.length-1].replace(/sig/,'signature');
  7077. if (fmt_id && link)
  7078. {
  7079. links++;
  7080. link = unescape(link[link.length-1]);
  7081. link = link.replace(/\\u0026stream=/, '/');
  7082. link = link.split(/\\u0026/)[0];
  7083. map[fmt_id[fmt_id.length-1]] = link+"&"+sig;
  7084. }
  7085. }
  7086. return links ? map: null;
  7087. }
  7088. else
  7089. {
  7090. this.log("LinternaMagica.extract_youtube_fmt_url_map:\n"+
  7091. "No fmt_url_map parameter found. ",1);
  7092. }
  7093. return null;
  7094. }
  7095. LinternaMagica.prototype.sites["youtube.com"] = new Object();
  7096. LinternaMagica.prototype.sites["www.youtube.com"] = "youtube.com";
  7097. LinternaMagica.prototype.sites["www.youtube-nocookie.com"] = "youtube.com";
  7098. LinternaMagica.prototype.sites["youtube-nocookie.com"] = "youtube.com";
  7099. LinternaMagica.prototype.sites["youtube.com"].flash_plugin_installed =
  7100. function()
  7101. {
  7102. return this.sites.__no_flash_plugin_installed.apply(this, [arguments]);
  7103. }
  7104. LinternaMagica.prototype.sites["youtube.com"].skip_script_processing =
  7105. function()
  7106. {
  7107. return true;
  7108. }
  7109. LinternaMagica.prototype.sites["youtube.com"].skip_link_extraction = function()
  7110. {
  7111. this.log("LinternaMagica.sites.skip_link_extraction:\n"+
  7112. "Skipping link extraction in YouTube. Might bloat "+
  7113. "GNU IceCat and other forks and versions of Firefox.",4);
  7114. return false;
  7115. }
  7116. LinternaMagica.prototype.sites["youtube.com"].skip_video_id_extraction = function()
  7117. {
  7118. this.log("LinternaMagica.sites.skip_video_id_extraction:\n"+
  7119. "Skipping video_id extraction in YouTube.",4);
  7120. return false;
  7121. }
  7122. LinternaMagica.prototype.sites["youtube.com"].extract_object_from_script =
  7123. function()
  7124. {
  7125. var data = this.script_data;
  7126. if (!data.match(/ytplayer\.config =/))
  7127. {
  7128. return null;
  7129. }
  7130. var height = data.match(/\"height\"\:\s*\"([0-9]+)\"/);
  7131. var width = data.match(/\"width\"\:\s*\"([0-9]+)\"/);
  7132. this.extract_video_id_data = data;
  7133. var fmt = this.extract_youtube_fmt_parameter();
  7134. var maps = this.extract_youtube_fmt_url_map();
  7135. var hd_links = this.create_youtube_links(fmt, maps);
  7136. var link = (hd_links && hd_links.length) ? hd_links : null;
  7137. var embed_id = data.match(/\"id\"\:\s*\"([a-zA-Z0-9_\-]+)\"/);
  7138. if (!link)
  7139. {
  7140. return null;
  7141. }
  7142. if (height)
  7143. {
  7144. height = height[height.length-1];
  7145. }
  7146. if (width)
  7147. {
  7148. width = width[width.length-1];
  7149. }
  7150. if (embed_id)
  7151. {
  7152. embed_id= embed_id[embed_id.length-1];
  7153. }
  7154. var p = document.getElementById("movie_player").parentNode;
  7155. if (!width || !height)
  7156. {
  7157. height = p ? p.clientHeight : null;
  7158. width = p ? p.clientWidth : null;
  7159. }
  7160. if (!width || !height)
  7161. {
  7162. this.log("LinternaMagica.extract_object_from_script_youtube:\n"+
  7163. "Missing object data "+
  7164. "\n H: "+height+
  7165. "\n W:"+width, 3);
  7166. return null;
  7167. }
  7168. this.log("LinternaMagica.extract_object_from_script_youtube:\n"+
  7169. " H: "+height+
  7170. "\n W:"+width+
  7171. "\n embedid "+embed_id,2);
  7172. var object_data = new Object();
  7173. var linterna_magica_id = null;
  7174. object_data.width= width;
  7175. object_data.height= height;
  7176. object_data.link = hd_links ? hd_links[hd_links.length-1].url : null;
  7177. object_data.hd_links = link;
  7178. if (embed_id)
  7179. {
  7180. embed_object = document.getElementById(embed_id);
  7181. if (embed_object)
  7182. {
  7183. if (this.plugin_is_installed)
  7184. {
  7185. linterna_magica_id =
  7186. this.mark_flash_object(embed_object);
  7187. object_data.parent = embed_object.parentNode;
  7188. }
  7189. }
  7190. }
  7191. if (!embed_id ||
  7192. !embed_object ||
  7193. (embed_object &&
  7194. !this.plugin_is_installed))
  7195. {
  7196. linterna_magica_id =
  7197. this.mark_flash_object("extracted-from-script");
  7198. object_data.parent = p;
  7199. }
  7200. object_data.linterna_magica_id = linterna_magica_id;
  7201. return object_data;
  7202. }
  7203. LinternaMagica.prototype.sites["youtube.com"].
  7204. stop_if_one_extracted_object_from_script =
  7205. function()
  7206. {
  7207. this.log("LinternaMagica.sites.stop_if_"+
  7208. "one_extracted_object_from_script:\n"+
  7209. "Found one object in YouTube. Stopping script processing",3);
  7210. return false;
  7211. }
  7212. LinternaMagica.prototype.sites["youtube.com"].
  7213. replace_extracted_object_from_script =
  7214. function(object_data)
  7215. {
  7216. if (!this.youtube_flash_upgrade_timeout)
  7217. {
  7218. this.youtube_flash_upgrade_counter = 0;
  7219. var data = object_data;
  7220. var self = this;
  7221. this.youtube_flash_upgrade_timeout = setInterval(
  7222. function() {
  7223. self.detect_youtube_flash_upgrade.apply(self,[data]);
  7224. }, 3000);
  7225. }
  7226. return false;
  7227. }
  7228. LinternaMagica.prototype.sites["youtube.com"].css_fixes =
  7229. function(object_data)
  7230. {
  7231. this.log("LinternaMagica.youtube.css_fixes:\n "+
  7232. "Harvesting (possible) lost flash video object with "+
  7233. "linterna_magica_id "+ object_data.linterna_magica_id);
  7234. var movie_player = document.getElementById('movie_player');
  7235. if (movie_player) {
  7236. movie_player.linterna_magica_id = object_data.linterna_magica_id;
  7237. }
  7238. if (this.priority.self > this.priority.plugin)
  7239. {
  7240. this.hide_flash_video_object(object_data.linterna_magica_id);
  7241. }
  7242. if (document.getElementById("playnav-playview"))
  7243. {
  7244. var el = document.getElementById("playnav-playview");
  7245. el.style.setProperty("margin-top", "50px", "important");
  7246. var user_nav = document.getElementById("user_playlist_navigator");
  7247. if (user_nav)
  7248. {
  7249. user_nav.style.setProperty("overflow", "visible", "important");
  7250. var height = document.defaultView.getComputedStyle(user_nav).
  7251. getPropertyValue("height");
  7252. user_nav.style.setProperty("height",
  7253. (parseInt(height)+50)+"px",
  7254. "important");
  7255. }
  7256. var playnav_body = document.getElementById("playnav-body");
  7257. if (playnav_body)
  7258. {
  7259. playnav_body.style.setProperty("overflow",
  7260. "visible", "important");
  7261. var color = document.defaultView.getComputedStyle(user_nav).
  7262. getPropertyValue("background-color");
  7263. color = color ? color : "#999999";
  7264. playnav_body.style.setProperty("border-top",
  7265. "1px solid "+color, "important");
  7266. }
  7267. var playnav_play_content =
  7268. document.getElementById("playnav-play-content");
  7269. if (playnav_play_content)
  7270. {
  7271. var height = document.defaultView.
  7272. getComputedStyle(playnav_play_content).
  7273. getPropertyValue("height");
  7274. playnav_play_content.style.
  7275. setProperty("height",
  7276. (parseInt(height)+50)+"px",
  7277. "important");
  7278. }
  7279. }
  7280. object_data.parent.style.setProperty("overflow", "visible", "important");
  7281. var site_html5_player =
  7282. this.find_site_html5_player_wrapper(object_data.parent);
  7283. if (site_html5_player)
  7284. {
  7285. site_html5_player.style.setProperty("margin-bottom", "30px", "important");
  7286. object_data.parent.style.setProperty("margin-bottom",
  7287. "50px", "important");
  7288. }
  7289. var html5_wrapper = document.getElementById("movie_player-html5");
  7290. if (html5_wrapper)
  7291. {
  7292. var html5_warning = html5_wrapper.querySelector(".video-fallback");
  7293. //
  7294. if (!html5_warning)
  7295. {
  7296. html5_warning =
  7297. html5_wrapper.querySelector(".html5-video-fallback");
  7298. }
  7299. if (html5_warning &&
  7300. !/none/i.test(html5_warning.style.getPropertyValue('display')))
  7301. {
  7302. html5_wrapper.style.setProperty('display', "none", "important");
  7303. //
  7304. if (this.priority.html5 > this.priority.self)
  7305. {
  7306. var id = object_data.linterna_magica_id;
  7307. this.show_lm_interface(id);
  7308. toggle_plugin =
  7309. document.getElementById("linterna-magica-"+
  7310. "toggle-plugin-"+id);
  7311. var pn = toggle_plugin.parentNode.parentNode;
  7312. pn.removeChild(toggle_plugin.parentNode);
  7313. toggle_plugin_header =
  7314. document.getElementById("linterna-magica-"+
  7315. "toggle-plugin-header-"+id);
  7316. toggle_plugin_header.parentNode.removeChild(toggle_plugin_header);
  7317. }
  7318. var controls = html5_wrapper.querySelector(".html5-video-controls");
  7319. var container = html5_wrapper.querySelector(".html5-video-container");
  7320. if (controls)
  7321. {
  7322. controls.style.setProperty("display", "none", "important");
  7323. }
  7324. if (container)
  7325. {
  7326. container.style.setProperty("display", "none", "important");
  7327. }
  7328. }
  7329. }
  7330. var watch7 = document.getElementById('watch7-player');
  7331. if (watch7)
  7332. {
  7333. watch7.style.setProperty("height",
  7334. (parseInt(object_data.outer_height)+
  7335. 24)+"px", "important");
  7336. var movie_player = document.getElementById("movie_player");
  7337. if (movie_player)
  7338. {
  7339. movie_player.style.setProperty("height",
  7340. parseInt(object_data.outer_height)+
  7341. "px", "important");
  7342. }
  7343. }
  7344. return false;
  7345. }
  7346. LinternaMagica.prototype.mark_flash_object = function(element)
  7347. {
  7348. this.found_flash_video_objects ++;
  7349. if (element != "extracted-from-script" ||
  7350. element != "extracted-by-code")
  7351. {
  7352. element.linterna_magica_id = this.found_flash_video_objects;
  7353. }
  7354. return this.found_flash_video_objects;
  7355. }
  7356. LinternaMagica.prototype.get_flash_video_object =
  7357. function(linterna_magica_id)
  7358. {
  7359. var object_list = this.create_object_list();
  7360. for (var i=0, l=object_list.length; i<l; i++)
  7361. {
  7362. var o = object_list[i];
  7363. if (o.linterna_magica_id != undefined &&
  7364. o.linterna_magica_id == linterna_magica_id)
  7365. {
  7366. return o;
  7367. }
  7368. }
  7369. return null;
  7370. }
  7371. LinternaMagica.prototype.get_marked_object_id =
  7372. function(element)
  7373. {
  7374. return element.linterna_magica_id;
  7375. }
  7376. LinternaMagica.prototype.get_first_element_by_class =
  7377. function(className, parent)
  7378. {
  7379. var top = parent ? parent : document;
  7380. var children = top.getElementsByTagName("*");
  7381. if (!children)
  7382. {
  7383. return null;
  7384. }
  7385. for (var i=0, l=children.length; i <l; i++)
  7386. {
  7387. var el = children[i];
  7388. if (this.object_has_css_class(el, className))
  7389. {
  7390. return el;
  7391. }
  7392. }
  7393. return null;
  7394. }
  7395. LinternaMagica.prototype.object_has_css_class = function (element, className)
  7396. {
  7397. var class_regex = new RegExp ("\\\s*("+className+")\\\s*","");
  7398. var matches_class = element.hasAttribute("class") ?
  7399. element.getAttribute("class").match(class_regex) : null;
  7400. if (matches_class)
  7401. {
  7402. return matches_class[matches_class.length-1];
  7403. }
  7404. return false;
  7405. }
  7406. LinternaMagica.prototype.add_css_class = function(element, class_name)
  7407. {
  7408. if (!this.object_has_css_class(element, class_name))
  7409. {
  7410. var c = element.getAttribute("class");
  7411. element.setAttribute("class", c+" "+class_name);
  7412. }
  7413. return element.getAttribute("class");
  7414. }
  7415. LinternaMagica.prototype.get_video_object = function(linterna_magica_id)
  7416. {
  7417. var video_object = null;
  7418. video_object = document.
  7419. getElementById("linterna-magica-video-object-"+linterna_magica_id);
  7420. return video_object;
  7421. }
  7422. LinternaMagica.prototype.show_lm_interface = function(linterna_magica_id)
  7423. {
  7424. var lm_interface = document.getElementById("linterna-magica-"+
  7425. linterna_magica_id);
  7426. this.__show_lm(lm_interface);
  7427. }
  7428. LinternaMagica.prototype.hide_lm_interface = function(linterna_magica_id)
  7429. {
  7430. var lm_interface = document.getElementById("linterna-magica-"+
  7431. linterna_magica_id);
  7432. this.__hide_lm(lm_interface, linterna_magica_id);
  7433. }
  7434. LinternaMagica.prototype.hide_lm_video_object = function(linterna_magica_id)
  7435. {
  7436. var video_object = document.getElementById("linterna-magica-"+
  7437. "video-object-wrapper-"+
  7438. linterna_magica_id);
  7439. this.__hide_lm(video_object, linterna_magica_id);
  7440. }
  7441. LinternaMagica.prototype.show_lm_video_object = function(linterna_magica_id)
  7442. {
  7443. var video_object = document.getElementById("linterna-magica-"+
  7444. "video-object-wrapper-"+
  7445. linterna_magica_id);
  7446. this.__show_lm(video_object);
  7447. }
  7448. LinternaMagica.prototype.__show_lm = function(element)
  7449. {
  7450. if (!element)
  7451. {
  7452. return null;
  7453. }
  7454. element.style.removeProperty("display");
  7455. }
  7456. LinternaMagica.prototype.__hide_lm = function(element, linterna_magica_id)
  7457. {
  7458. if (!element)
  7459. {
  7460. return null;
  7461. }
  7462. var self = this;
  7463. this.player.stop.apply(self, [linterna_magica_id]);
  7464. element.style.setProperty("display", "none", "important");
  7465. }
  7466. LinternaMagica.prototype.show_flash_video_object =
  7467. function(linterna_magica_id,parent)
  7468. {
  7469. var flash_object =
  7470. this.get_flash_video_object(linterna_magica_id,parent);
  7471. if (!flash_object)
  7472. {
  7473. return null;
  7474. }
  7475. flash_object = this.force_flash_video_object_start(flash_object);
  7476. flash_object.style.removeProperty("display");
  7477. return flash_object;
  7478. }
  7479. LinternaMagica.prototype.hide_flash_video_object =
  7480. function(linterna_magica_id, parent)
  7481. {
  7482. var flash_object =
  7483. this.get_flash_video_object(linterna_magica_id, parent);
  7484. if (!flash_object)
  7485. {
  7486. return null;
  7487. }
  7488. flash_object = this.force_flash_video_object_stop(flash_object);
  7489. flash_object.style.setProperty("display", "none", "important");
  7490. return flash_object;
  7491. }
  7492. LinternaMagica.prototype.force_flash_video_object_stop =
  7493. function(flash_object)
  7494. {
  7495. var clone = this.force_flash_video_object_src(flash_object,
  7496. "x-fake-flash");
  7497. clone =
  7498. this.force_flash_video_object_type(clone,
  7499. "x-fake/x-flash-stopped");
  7500. clone = this.force_flash_video_object_injection(flash_object, clone);
  7501. return clone;
  7502. }
  7503. LinternaMagica.prototype.force_flash_video_object_start =
  7504. function(flash_object)
  7505. {
  7506. var clone = this.force_flash_video_object_src(flash_object, "swf");
  7507. clone =
  7508. this.force_flash_video_object_type(clone,
  7509. "application/x-shockwave-flash");
  7510. clone = this.force_flash_video_object_injection(flash_object, clone);
  7511. return clone;
  7512. }
  7513. LinternaMagica.prototype.force_flash_video_object_src =
  7514. function(flash_object, src)
  7515. {
  7516. if (!flash_object || !src)
  7517. {
  7518. return null;
  7519. }
  7520. var old_src = null;
  7521. if (/swf/i.test(src))
  7522. {
  7523. old_src = "x-fake-flash";
  7524. }
  7525. else if (/x-fake-flash/i.test(src))
  7526. {
  7527. old_src = "swf";
  7528. }
  7529. else
  7530. {
  7531. return flash_object;
  7532. }
  7533. var src_attribute =
  7534. /object/i.test(flash_object.localName) ? "data" : "src";
  7535. var full_src = flash_object.getAttribute(src_attribute);
  7536. if (!full_src)
  7537. {
  7538. return flash_object;
  7539. }
  7540. full_src = full_src.replace('.'+old_src, '.'+src);
  7541. var clone = flash_object.cloneNode(true);
  7542. clone.linterna_magica_id = flash_object.linterna_magica_id;
  7543. clone.setAttribute(src_attribute, full_src);
  7544. return clone;
  7545. }
  7546. LinternaMagica.prototype.force_flash_video_object_injection =
  7547. function(flash_object, clone)
  7548. {
  7549. var sibling = flash_object.nextSibling ?
  7550. flash_object.nextSibling : null;
  7551. var parent = flash_object.parentNode;
  7552. flash_object.parentNode.removeChild(flash_object);
  7553. if (sibling)
  7554. {
  7555. parent.insertBefore(clone, sibling);
  7556. }
  7557. else
  7558. {
  7559. parent.appendChild(clone);
  7560. }
  7561. return clone;
  7562. }
  7563. LinternaMagica.prototype.force_flash_video_object_type =
  7564. function(flash_object, type)
  7565. {
  7566. if (!flash_object || !type)
  7567. {
  7568. return null;
  7569. }
  7570. var clone = flash_object.cloneNode(true);
  7571. clone.linterna_magica_id = flash_object.linterna_magica_id;
  7572. flash_object = clone;
  7573. flash_object.setAttribute("type", type);
  7574. return flash_object;
  7575. }
  7576. LinternaMagica.prototype.find_started_clip = function()
  7577. {
  7578. var started = null;
  7579. var self = this;
  7580. for (var i=0,l=this.found_flash_video_objects; i<l; i++)
  7581. {
  7582. var state = self.player.state.apply(self,[i]);
  7583. if (this.get_video_object(i) &&
  7584. state && state.string)
  7585. {
  7586. started = i;
  7587. break;
  7588. }
  7589. }
  7590. return started;
  7591. }
  7592. LinternaMagica.prototype.find_site_html5_player_wrapper =
  7593. function(parent)
  7594. {
  7595. if (!parent)
  7596. {
  7597. return null;
  7598. }
  7599. var self = this;
  7600. var html5_player_holder = null;
  7601. var t = null;
  7602. var html5_player_element = null;
  7603. var val = this.call_site_function_at_position.apply(self,[
  7604. "custom_html5_player_finder",
  7605. window.location.hostname, parent]);
  7606. if (val && typeof(val) != "boolean")
  7607. {
  7608. html5_player_element = val;
  7609. }
  7610. else
  7611. {
  7612. html5_player_element = parent.getElementsByTagName("video");
  7613. if (!html5_player_element || !html5_player_element.length)
  7614. {
  7615. html5_player_element = parent.getElementsByTagName("canvas");
  7616. if (!html5_player_element || !html5_player_element.length)
  7617. {
  7618. return null;
  7619. }
  7620. }
  7621. html5_player_element = html5_player_element[0];
  7622. }
  7623. html5_player_holder = html5_player_element.parentNode;
  7624. while (parent != html5_player_holder)
  7625. {
  7626. t = html5_player_holder;
  7627. if (!html5_player_holder)
  7628. {
  7629. continue;
  7630. }
  7631. html5_player_holder = html5_player_holder.parentNode;
  7632. }
  7633. if (t !== null)
  7634. {
  7635. html5_player_holder = t;
  7636. }
  7637. if (html5_player_holder == parent)
  7638. {
  7639. html5_player_holder = html5_player_element;
  7640. }
  7641. return html5_player_holder;
  7642. }
  7643. LinternaMagica.prototype.hide_site_html5_player =
  7644. function(parent)
  7645. {
  7646. var html5_player =
  7647. this.find_site_html5_player_wrapper(parent);
  7648. if (!html5_player)
  7649. {
  7650. return null;
  7651. }
  7652. html5_player.style.setProperty("display", "none", "important");
  7653. return html5_player;
  7654. }
  7655. LinternaMagica.prototype.show_site_html5_player =
  7656. function(parent)
  7657. {
  7658. var html5_player =
  7659. this.find_site_html5_player_wrapper(parent);
  7660. if (!html5_player)
  7661. {
  7662. return null;
  7663. }
  7664. html5_player.style.removeProperty("display");
  7665. return html5_player;
  7666. }
  7667. LinternaMagica.prototype.pause_site_html5_player =
  7668. function(parent)
  7669. {
  7670. if (!parent)
  7671. {
  7672. return null;
  7673. }
  7674. var video = parent.getElementsByTagName("video");
  7675. if (!video || !video.length)
  7676. {
  7677. return null;
  7678. }
  7679. video = video[0];
  7680. video.pause();
  7681. }
  7682. LinternaMagica.prototype.request_video_link = function(object_data)
  7683. {
  7684. var protocol = window.location.protocol;
  7685. var host = window.location.host;
  7686. var location_href = window.location.href;
  7687. var video_id = object_data.video_id;
  7688. var address = null;
  7689. var method ="GET";
  7690. var data =null;
  7691. var content= null;
  7692. var client = new XMLHttpRequest();
  7693. if (!this.requested_ids[video_id+host])
  7694. {
  7695. this.requested_ids[video_id+host]=1;
  7696. }
  7697. else
  7698. {
  7699. this.log("LinternaMagica.request_video_link:\n"+
  7700. "Video with id "+video_id+
  7701. " is being processed. Skipping this request."+host,1);
  7702. var self = this;
  7703. var val = this.call_site_function_at_position.apply(self,[
  7704. "process_duplicate_object_before_xhr",
  7705. host, object_data]);
  7706. return null;
  7707. }
  7708. var self = this;
  7709. var val = this.call_site_function_at_position.apply(self,[
  7710. "prepare_xhr",
  7711. host, object_data]);
  7712. if (val && typeof(val) != "boolean")
  7713. {
  7714. address = val.address ? val.address : address ;
  7715. method = val.method ? val.method : method;
  7716. data = val.data ? val.data : data;
  7717. content = val.content ? val.content : content;
  7718. }
  7719. var self = this;
  7720. client.onreadystatechange = function() {
  7721. var client = this;
  7722. self.request_video_link_parse_response(client, object_data);
  7723. }
  7724. if (!address)
  7725. {
  7726. this.log("LinternaMagica.request_video_link:\n"+
  7727. "No address availible for host "+host,1);
  7728. return null;
  7729. }
  7730. if (!/^http/i.test(address))
  7731. {
  7732. address = protocol+"//"+host+address;
  7733. }
  7734. client.open(method,address ,true);
  7735. if (content)
  7736. {
  7737. client.setRequestHeader("Content-Type", content);
  7738. }
  7739. client.send(data);
  7740. }
  7741. LinternaMagica.prototype.request_video_link_parse_response =
  7742. function(client, object_data)
  7743. {
  7744. if (client.readyState == 4 && client.status == 200)
  7745. {
  7746. var host = window.location.hostname;
  7747. if (this.requested_ids[object_data.video_id+host])
  7748. {
  7749. delete this.requested_ids[object_data.video_id+host];
  7750. }
  7751. var url;
  7752. var mime= "video/flv";
  7753. var self = this;
  7754. var val = this.call_site_function_at_position.apply(self,[
  7755. "process_xhr_response",
  7756. host, {client: client, object_data:object_data}]);
  7757. if (!val || typeof(val) == "boolean" || (val && !val.link))
  7758. {
  7759. return null;
  7760. }
  7761. else
  7762. {
  7763. object_data = val;
  7764. }
  7765. if (!object_data.mime)
  7766. {
  7767. object_data.mime = mime;
  7768. }
  7769. var self = this;
  7770. var val = this.call_site_function_at_position.apply(self,[
  7771. "insert_object_after_xhr",
  7772. host, object_data]);
  7773. if (val)
  7774. {
  7775. this.log("LinternaMagica.request_video_link_parse_response:\n"+
  7776. "Removing plugin install warning.",2);
  7777. this.remove_plugin_install_warning(object_data.parent);
  7778. this.log("LinternaMagica.request_video_link_parse response:\n"+
  7779. "Creating video object with url: "+object_data.link,1);
  7780. this.create_video_object(object_data);
  7781. }
  7782. }
  7783. }
  7784. function linterna_magica_init ()
  7785. {
  7786. delete LinternaMagica.static_strings;
  7787. window.linterna_magica_init_counter ++;
  7788. var ready_to_init = 0;
  7789. if (window.linterna_magica_init_counter >= 6 ||
  7790. window.linterna_magica_user_config != undefined ||
  7791. window.LinternaMagica_L10N != undefined)
  7792. {
  7793. clearInterval(window.linterna_magica_init_timeout);
  7794. ready_to_init = 1;
  7795. }
  7796. if (ready_to_init)
  7797. {
  7798. var config = new Object();
  7799. for (var o in linterna_magica_options)
  7800. {
  7801. if (window.linterna_magica_user_config != undefined &&
  7802. window.linterna_magica_user_config[o] != undefined)
  7803. {
  7804. config[o] = window.linterna_magica_user_config[o];
  7805. }
  7806. else
  7807. {
  7808. config[o] = linterna_magica_options[o];
  7809. }
  7810. }
  7811. delete window.linterna_magica_user_config;
  7812. for (var loc in window.LinternaMagica_L10N)
  7813. {
  7814. LinternaMagica.prototype.languages[loc] =
  7815. window.LinternaMagica_L10N[loc];
  7816. var dir = window.LinternaMagica_L10N[loc]["__direction"];
  7817. if (dir != "rtl" &&
  7818. dir != "ltr")
  7819. {
  7820. dir = "ltr";
  7821. }
  7822. LinternaMagica.prototype.languages[loc]["__direction"] =
  7823. dir.toLowerCase();
  7824. }
  7825. delete window.LinternaMagica_L10N;
  7826. var larerna_magica = new LinternaMagica(config);
  7827. }
  7828. }
  7829. window.linterna_magica_init_counter = 0;
  7830. window.linterna_magica_init_timeout =
  7831. setInterval(linterna_magica_init, 250);
  7832. })();

comments powered by Disqus