Advertisement
mire777

Foobar Youtube Radio 0.0.16.

Jun 13th, 2014
1,322
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==PREPROCESSOR==
  2. // @name "Youtube Radio"
  3. // @author "Mire777"
  4. // @feature "v1.4"
  5. // @feature "watch-metadb"
  6. // ==/PREPROCESSOR==
  7.  
  8. //Properties
  9. auto_yt = window.GetProperty("YT  Radio", "0");
  10. AUTO = window.GetProperty("YT  Auto", "0");
  11. ooo2 = window.GetProperty("YT Track", "");
  12. START_ARTIST = window.GetProperty("YT  Station", "");
  13. last_fm = window.GetProperty("YT Similar", "");
  14. YT_URL = window.GetProperty("YT URL", "");
  15. art = window.GetProperty("YT   Artist Variety (1-20)", "20");
  16. sng = window.GetProperty("YT   Song  Hotness (1-20)", "20");
  17. gnr = window.GetProperty("YT   Tag  Hotness (1-100)", "27");
  18. pls = window.GetProperty("FB Playlist", "YT Radio");
  19.  
  20. var MF_GRAYED = 0x00000001;
  21. var MF_STRING = 0x00000000;
  22. var IDC_ARROW = 32512;
  23. var IDC_HAND = 32649;
  24.  
  25. function RGB(r, g, b) {
  26.     return (0xff000000 | (r << 16) | (g << 8) | (b));
  27. }
  28.  
  29. function RGBA(r, g, b, a) {
  30.     return ((a << 24) | (r << 16) | (g << 8) | (b));
  31. }
  32.  
  33. function on_colors_changed() {
  34.     p.colors_changed();
  35. }
  36.  
  37. function on_selection_changed() {
  38.     p.item_focus_change();
  39. }
  40.  
  41. function on_playlist_switch() {
  42.     p.item_focus_change();
  43.     set_focus0(); //Check Playlist
  44. }
  45.  
  46. function on_playback_new_track() {
  47.     p.item_focus_change();
  48.     downloadLFM();
  49. }
  50.  
  51. function on_playback_dynamic_info_track() {
  52.     p.item_focus_change();
  53. }
  54.  
  55. function on_playback_stop() {
  56.     p.item_focus_change();
  57. }
  58.  
  59. function on_item_focus_change() {
  60.     p.item_focus_change();
  61. }
  62.  
  63. function on_mouse_leave() {
  64.    
  65. }
  66.  
  67. function on_mouse_rbtn_up(x, y) {
  68.     p.rbtn_up(x, y);
  69.     return true;
  70. }
  71.  
  72. //Playlist
  73. function GetPlaylistID(Playlist_Name)
  74. {
  75.     for (var i = 0; i < fb.PlaylistCount; i++)
  76.     {
  77.         if (fb.GetPlaylistName(i) == Playlist_Name)
  78.        
  79.         {
  80.             return i;
  81.         }
  82.     }
  83.     // create playlist if it doesn't exist
  84.     fb.CreatePlaylist(fb.PlaylistCount, Playlist_Name);
  85.     return i;
  86. }
  87.  
  88. //Playlist(Check)
  89. function GetPlaylistID0(Playlist_Name)
  90. {
  91.     for (var i = 0; i < fb.PlaylistCount; i++)
  92.    
  93.     if (fb.GetPlaylistName(i) == Playlist_Name)
  94.        
  95.         {
  96.             return i;
  97.         }
  98. }
  99.  
  100. //Focus on playlist(Check)
  101. function set_focus0()
  102. {   if (pls>"")
  103.     {
  104. var PL_NM = (GetPlaylistID0(pls + " ["+ START_ARTIST +"]"));
  105. if (fb.ActivePlaylist == PL_NM) {auto_yt = 1; window.SetProperty("YT  Radio", "1");}
  106. else
  107. {auto_yt = 0; window.SetProperty("YT  Radio", "0");}
  108. }
  109. }
  110.  
  111. //Focus on playlist(YT Radio)
  112. function set_focus()
  113. {   if (pls>"")
  114.     fb.ActivePlaylist = (GetPlaylistID(pls + " ["+ START_ARTIST +"]"));
  115. }
  116.  
  117. //Focus on playlist(Same Video)
  118. function set_focus2()
  119. {   if (pls>"")
  120.     fb.ActivePlaylist = (GetPlaylistID(pls + " [Same Video]"));
  121. }
  122.  
  123.  
  124. //Focus on playlist(Search Videos)
  125. function set_focus3()
  126. {   if (pls>"")
  127.     fb.ActivePlaylist = (GetPlaylistID(pls + " [Search Videos]"));
  128. }
  129.  
  130. //Panel
  131. function panel(name, features) {
  132.     this.item_focus_change = function() {
  133.         if (!this.metadb_func) return;
  134.         switch(this.selection_mode) {
  135.             case 0:
  136.                 this.metadb = fb.GetSelection();
  137.                 break;
  138.             case 1:
  139.                 this.metadb = fb.IsPlaying ? fb.GetNowPlaying() : fb.GetFocusItem();
  140.                 break;
  141.             case 2:
  142.                 this.metadb = fb.GetFocusItem();
  143.                 break;
  144.         }
  145.         if (this.metadb) on_metadb_changed();
  146.     }
  147.  
  148. //Metadb
  149. this.metadb = fb.IsPlaying ? fb.GetNowPlaying() : fb.GetFocusItem();
  150.  
  151.  
  152. //Size 
  153.     this.size = function() {
  154.         this.w = window.Width;
  155.         this.h = window.Height;
  156.     }
  157.  
  158. //Move 
  159.     this.move = function(x, y) {
  160.         this.mx = x;
  161.         this.my = y;
  162.     }
  163.  
  164. //Menu 
  165.     this.rbtn_up = function(x, y) {
  166.         var _menu = window.CreatePopupMenu();
  167.         var idx;
  168.         switch(true) {
  169.            
  170.            
  171.             case typeof th == "object":
  172.             case typeof im == "object":
  173. if (pls>"")
  174. {                  
  175. if(AUTO==1) _menu.AppendMenuItem(MF_STRING, 1902, "Youtube Radio");
  176. if(AUTO==0) _menu.AppendMenuItem(MF_STRING, 1903, "Youtube Radio");
  177. _menu.CheckMenuItem(1902, AUTO?1:0);
  178.  
  179. _menu.AppendMenuSeparator();
  180. {
  181. if(auto_yt==1 && AUTO==1 && START_ARTIST>"") {_menu.AppendMenuItem(MF_STRING, 22, "Get Next Video");}
  182. else
  183. {_menu.AppendMenuItem(MF_STRING| MF_GRAYED, 2000, "Get Next Video");}
  184.  
  185. _menu.AppendMenuItem(MF_STRING, 401, "Search Videos");
  186.  
  187. _menu.AppendMenuSeparator();
  188.  
  189. _menu.AppendMenuItem(MF_STRING, 1914, "Start Radio Station");
  190.  
  191. p.artist = p.eval("%artist%");
  192. if (p.artist == "" || p.artist == "?") {_menu.AppendMenuItem(MF_STRING| MF_GRAYED, 2000, "Same Artist Station");}
  193. else
  194. {_menu.AppendMenuItem(MF_STRING, 1915, "Same Artist Station");}
  195.  
  196. _menu.AppendMenuSeparator();
  197.  
  198. p.artist = p.eval("%artist%");
  199. if (p.artist == "" || p.artist == "?") {_menu.AppendMenuItem(MF_STRING| MF_GRAYED, 2000, "Open Same Video");}
  200. else
  201. {_menu.AppendMenuItem(MF_STRING, 403, "Open Same Video");}
  202.  
  203. p.artist = p.eval("%artist%");
  204. if (p.artist == "" || p.artist == "?") {_menu.AppendMenuItem(MF_STRING| MF_GRAYED, 2000, "Find in Browser");}
  205. else
  206. {_menu.AppendMenuItem(MF_STRING, 404, "Find in Browser");}
  207.                    
  208. _menu.AppendMenuSeparator();
  209.  
  210. _menu.AppendMenuItem(MF_STRING, 9, "Properties...");
  211. }              
  212. }
  213. }
  214. if (pls=="") {_menu.AppendMenuItem(MF_STRING, 9, "Please Set: (FB Playlist)");}
  215. if (utils.IsKeyPressed(0x10)) _menu.AppendMenuItem(MF_STRING, 10, "Configure...");
  216.        
  217.         idx = _menu.TrackPopupMenu(x, y);
  218.         switch(idx) {
  219.            case 9:
  220.                 window.ShowProperties();
  221.                 break;
  222.                
  223.            case 10:
  224.                 window.ShowConfigure();
  225.                 break;
  226.                
  227.            case 22:
  228.                 set_focus(); //Focus on playlist
  229.                 downloadLFM();
  230.                 break;
  231.                
  232.            case 401:
  233.                 set_focus3(); //Focus on playlist
  234.                 fb.RunMainMenuCommand("View/Youtube Source");
  235.                 break;
  236.                
  237.            case 403:
  238.             this.metadb = fb.IsPlaying ? fb.GetNowPlaying() : fb.GetFocusItem();
  239.             on_item_focus_change();
  240.             set_focus2(); //Focus on playlist
  241.             downloadART_TITLE();
  242.                 break;
  243.            
  244.            case 404:
  245.             p.artist = p.eval("%artist% %title%");
  246.             p.browser("http://www.youtube.com/results?search_query=" + encodeURIComponent(p.artist));
  247.                 break;
  248.            
  249.            case 1902:
  250.                 AUTO = 0;
  251.                 window.SetProperty("YT  Auto", "0");
  252.                 break;
  253.        
  254.            case 1903:
  255.                 AUTO = 1;
  256.                 window.SetProperty("YT  Auto", "1");
  257.                 break;
  258.            
  259.            case 1914:
  260.             var Start;
  261.             Start = this.InputBox("Type Artist to Start Station\n\n( *genre - will play genre station)", "Youtube Radio", "");
  262.             if (Start=="")
  263.             {
  264.             }
  265.             else
  266.             {
  267.             auto_yt = 1;
  268.             window.SetProperty("YT  Radio", "1");
  269.             AUTO = "1"
  270.             window.SetProperty("YT  Auto", "1");
  271.             START_ARTIST = Start;
  272.             window.SetProperty("YT  Station", Start);
  273.             set_focus(); //Focus on playlist
  274.             downloadLFM();
  275.             }
  276.                 break;
  277.            
  278.         case 1915:
  279.             this.metadb = fb.IsPlaying ? fb.GetNowPlaying() : fb.GetFocusItem();
  280.             p.artist = p.eval("%artist%");
  281.             if (p.artist == "" || p.artist == "?") return;
  282.             START_ARTIST = p.artist;
  283.             window.SetProperty("YT  Station", p.artist);
  284.             auto_yt = 1;
  285.             window.SetProperty("YT  Radio", "1");
  286.             AUTO = "1"
  287.             window.SetProperty("YT  Auto", "1");
  288.             on_item_focus_change();
  289.             set_focus(); //Focus on playlist
  290.             downloadLFM();
  291.                 break;
  292.         }
  293.         _menu.Dispose();
  294.     }
  295.  
  296. //Features init
  297.     this.features_init = function() {
  298.         for (i = 0; i < this.features.length; i++) {
  299.             switch(this.features[i]) {
  300.                 case "metadb":
  301.                     this.selection_mode = 1;
  302.                     break;
  303.                 case "remap":
  304.                     this.artist_tf = ("%artist%");
  305.                     break;
  306.             }
  307.         }
  308.     }
  309.    
  310.     this.check_feature = function(f) {
  311.         for (i = 0; i < this.features.length; i++) {
  312.             if (this.features[i] == f) return true;
  313.         }
  314.         return false;
  315.     }
  316.    
  317.     this.eval = function(tf) {
  318.         if (!this.metadb || tf == "") return "";
  319.         if (fb.IsPlaying && this.metadb.RawPath.indexOf("file://") != 0) {
  320.             return fb.TitleFormat(tf).Eval();
  321.         } else {
  322.             return fb.TitleFormat(tf).EvalWithMetadb(this.metadb);
  323.         }
  324.     }
  325.    
  326. //Console Msg
  327.     this.console = function(message) {
  328.     this.name = "Youtube Radio"
  329.         fb.trace(this.name + ": " + message);
  330.     }
  331.    
  332. //Trim
  333. String.prototype.trim = function() {
  334.     return this.replace(/^\s+|\s+$/g, "");
  335. }    
  336.  
  337. //Input Box    
  338.     this.InputBox = function(prompt, title, value) {
  339.         prompt = prompt.replace(/"/g, '" + Chr(34) + "').replace(/\n/g, '" + Chr(13) + "');
  340.         title = title.replace(/"/g, '" + Chr(34) + "');
  341.         value = value.replace(/"/g, '" + Chr(34) + "');
  342.         var temp_value = this.vb.eval('InputBox' + '("' + prompt + '", "' + title + '", "' + value + '")');
  343.         if (typeof temp_value == "undefined") return value;
  344.         if (temp_value.length == 254) this.MsgBox("Your entry was too long and will be truncated.\n\nSee the WSH panel mod script discussion thread on hydrogenaudio forums for help.", 0, "Youtube Radio");
  345.         return temp_value.trim();
  346.     }
  347.  
  348. //Msg Box  
  349.     this.MsgBox = function(prompt, buttons, title) {
  350.         prompt = prompt.replace(/"/g, '" + Chr(34) + "').replace(/\n/g, '" + Chr(13) + "');
  351.         title = title.replace(/"/g, '" + Chr(34) + "');
  352.         return this.vb.eval('MsgBox' + '("' + prompt + '", "' + buttons + '", "' + title + '")');
  353.     }
  354.  
  355. //Browser  
  356.     this.browser = function(command) {
  357.         if (!this.run(command)) this.MsgBox("Unable to launch your default browser.", 0, "Youtube Radio");
  358.     }
  359.  
  360. //Run Command  
  361.     this.run = function(command) {
  362.         try {
  363.             this.WshShell.Run(command);
  364.             return true;
  365.         } catch(e) {
  366.             return false;
  367.         }
  368.     }
  369.    
  370. //futures  
  371.    this.metadb_func = typeof on_metadb_changed == "function";
  372.     this.features = features;
  373.     this.dui = window.InstanceType;
  374.     this.metadb = fb.GetFocusItem();
  375.     this.WshShell = new ActiveXObject("WScript.Shell");
  376.     this.fso = new ActiveXObject("Scripting.FileSystemObject");
  377.     this.vb = new ActiveXObject("ScriptControl");
  378.     this.vb.Language = "VBScript";
  379.     this.artist_tf = "%path%";
  380.     this.features_init();
  381.    this.metadb = fb.IsPlaying ? fb.GetNowPlaying() : fb.GetFocusItem();
  382.    if (fb.GetFocusItem())
  383.    {this.artist = fb.TitleFormat(this.artist_tf).EvalWithMetadb(this.metadb);}
  384.  
  385. }
  386. //YT NAMES-------------------------------------------------
  387.  
  388. //Clean Art Name
  389. CLEAN_ART_NAME = function (t)
  390. {
  391.    try
  392.    {
  393.        return t.replace(/about:\//,"").replace("music/","").replace("/_/"," - ").replace("+"," ").replace("+"," ").replace("+"," ").replace("+"," ").replace("+"," ").replace("+"," ").replace("+"," ").replace("+"," ").replace("+"," ").replace("+"," ").replace("+"," ").replace("+"," ").replace("+"," ").replace("+"," ").replace("+"," ").replace("+"," ").replace("+"," ").replace("+"," ").replace("+"," ").replace("+"," ").replace("free-music-downloads","").replace("/+similar?page=2","").replace("/+events","").replace("/+wiki","").replace("-+","").replace("/+albums","").replace("/+tags","").replace("/+images","").replace("/journal","").replace("/charts","").replace("/images","").replace("/listeners","").replace("/similar?page=17","").replace("/news","").replace("/groups","").replace("/albums","").replace("/videos","").replace("/tracks","").replace("/similar","").replace("/tags","").replace("noredirect/","").replace("listeners/+tracks","").replace("videos/+tracks","").replace("/+videos/","").replace("?page=1","").replace("?page=8","").replace("?page=5","").replace("?page=7","").replace("?page=9","").replace("?page=8","").replace(" wiki/edit","").replace("/ similar","").replace("?page=","'").replace("/ charts","'").replace("-","").replace("%2F%E3%82%A4%E3%83%95%E3%83%BB%E3%83%8E%E3%83%83%E3%83%88%E3%83%BB%E3%83%95%E3%82%A9%E3%83%BE3%83%BB%E3%83%A6%E3%83%BC","").replace("Ajoutez ce titre sur Deezer exclusivement sur www.hotmixradio.fr","").replace("www.Hituri.net","").replace("%E3%81%97%E3%82%83%E3%81%AB%E3%82%80%E3%81%AB%E3%82%B7%E3%82%A7%E3%82%A4%E3%82%AF%EF","").replace("%B81%E3%82%B7%E3%82%A7%E3%82%A4%E3%82%AF%EF%B81","").replace("%E4%BD%95%E3%82%88%E3%82%8A%E3%82%82%E5%83%95%E3%82%89%E3%81%97%E3%81%8F%E3%80%81%E4%BD%95%E3%82%88%E3%82%8A","").replace("%E3%82%82%E5%90%9B%E3%82%89%E3%81%97%E3%81%8F","").replace("%D0%91%D1%8D0%B5%D1%82 %D0%BF%D0%BE %D0%B3%D0%BB%D0%B0%D0%B7%D0%B0%D0%BC","").replace("%E3%83%9E%E3%82%A4%E3%83%BB%E3%83%9E3%83%87%E3%82%A3","").replace("%D0%9B%D0%B5%D1%82%D0%B5%D1%82%D1%8C","").replace("%2F%2F %D0%A1%D0%9B%D0%A3%D0%A8%D0%90%D0%AE%D0%A2","").replace("%D0%9F%D0%BE%D0%BF-%D0%A5%D0%B8%D1%82","").replace("/","").replace("%27","'").replace("%27","'").replace("%27","'").replace("%27","'").replace("%27","'").replace("%27","'").replace("%27","'").replace("%27","'").replace("%27","'").replace("%27","'").replace("%27","'").replace("%27","'").replace("%27","'").replace("%27","'").replace("%27","'");
  394.    } catch (e) {}
  395. }
  396.  
  397. //Clean Track Name
  398. CLEAN_TRACK_NAME = function (t)
  399. {
  400.    try
  401.    {
  402.        return t.replace(/about:\//,"").trim().split(" (")[0].replace(" (","").split(" [")[0].replace(" [","").split(" {")[0].replace(" {","").split(", ")[0].replace(", ","").replace("%27","'").replace("%27","'").replace("%27","'").replace("%27","'").replace("%27","'").replace("%27","'").replace("%27","'").replace("%27","'").replace("%27","'").replace("%27","'").replace("%27","'").replace("%27","'").replace("%27","'").replace("%27","'").replace("%27","'").replace(" 01-","").replace(" 02-","").replace(" 03-","").replace(" 04-","").replace(" 05-","").replace(" 06-","").replace(" 07-","").replace(" 08-","").replace(" 09-","").replace("09  ","").replace("08  ","").replace("07  ","").replace("06  ","").replace("05  ","").replace("04  ","").replace("03  ","").replace("02  ","").replace("01  ","").replace("00  ","").replace("01 ","").replace("02 ","").replace("03 ","").replace("04 ","").replace("05 ","").replace("06 ","").replace("07 ","").replace("08 ","").replace("09 ","").replace("00 ","").replace(".mp","").replace(" - Remastered ","").replace(" - Remastered","").replace("- "," ").replace(decodeURIComponent(last_fm) + " -"," ").replace(decodeURIComponent(last_fm) + " - "," ").replace(" - Live ","").replace(" - Live","").replace(" Pt.1","").replace(" - Demo;2 Digital Remaster 66  ","").replace(" - Demo;2 Digital Remaster","").replace(" - Demo;","").replace(" - Demo","").replace("Digital Remaster","").replace("Original-  ","").replace("Original- ","").replace("Original-","").replace(" - Vocal Version","").replace(" Mega-Mix","").replace("Mega-Mix","").replace(" - Original Mix","").replace(" Pop Radio Edit","").replace(" Radio Edit","").replace(" - Single Version","").replace(" - Edited Version","").replace("- ","").replace("- ","").replace("- ","").replace("- ","").replace("- ","").replace("- ","").replace("- ","").replace("- ","").replace("- ","").replace("- ","").replace(" - Extended Version","").replace(" -Remaster","").replace("`","'").replace(". "," ").replace(" Version","").replace(" edit","").replace(" - Edit","").replace("  Simple Mix","").replace("  Almighty Mix","").replace(" - Vocal","").replace(" Vocal","").replace("  Remix","").replace("  Extended Version","").replace(" - Explicit Version","").replace("- Explicit Version","").replace(" Explicit Version","").replace("Explicit Version","").replace(" Anthology", "").replace("The " + decodeURIComponent(last_fm), " ").replace(" - Survival Remix","").replace(" Radio Mix","").replace(" Survival Remix","").replace("Survival Remix","").replace(decodeURIComponent(last_fm) + "-"," ").replace(decodeURIComponent(last_fm)," ").replace(" Club Mix","").replace("_"," ").replace("_"," ").replace("_"," ").replace("_"," ").replace("_"," ").replace("_"," ").replace("_"," ").replace("_"," ").replace("_"," ").replace("_"," ").replace("  wwwi.info","").replace(" Edit","").replace("live","").replace("Single","").replace("vk.com/xclusives zone ","").replace("  Acoustic","").replace("Remix","").replace("Part&","").replace("  +","").replace(" % ","").replace(" % ","").replace(" % ","").replace(" % ","").replace(" % ","").replace(" % ","").replace(" % ","").replace(" % ","").replace(" % ","").replace(" % ","").replace(" % ","").replace(" % ","").replace(" % ","").replace(" Live;0 2","").replace("  Live;0 2","").replace("Live;0 2","").replace(' /"/"',"").replace(" -0","").replace("%","").replace("%","").replace("%","").replace("%","").replace("%","").replace("%","").replace("%","").replace("%","").replace("%","").replace("%","").replace("%","").replace("%","").replace("%","").replace("%","").replace("%","").replace("%","").replace("%","").replace("%","").replace("%","").replace("%","").replace("  Alternate Mix","").replace("Live","").replace(" Alternate Mix","").replace("Alternate Mix","").replace("-0","").replace("  remastered","").replace(" // СЛУШАЮТ:","").replace("www.KLAUSOM.lt","").replace("-;-Bit Digital Remaster","").replace(" :","").replace("-1  Remaster","").replace("  Genuine Album","").replace("  www.rsmp.com","").replace(" www.rsmp.com","").replace("www.rsmp.com","").replace("Instrumental","").replace(" Instrumental","").replace("www.SongsLover.pk","").replace(" Genuine Album","").replace("Album","").replace("Remaster","").replace("Lyrics","").replace("w/lyrics","").replace(" -","").replace("  Radio","").replace("0%","").replace("remaster","").replace(" Lyrics","").split(" | '' |")[0].replace(" | '' |","").split(" |")[0].replace(" |","").split("|")[0].replace("|","").split("| On:")[0].replace("| On:","").split(" feat")[0].replace(" feat","").split(" ft.")[0].replace(" ft.","").split(" Feat.")[0].replace(" Feat","").split("Greatest Hits Megamix")[0].replace("Greatest Hits Megamix","").split("Lyrics")[0].replace("Lyrics","").split("Lyric")[0].replace("Lyric","").split("www.")[0].replace("www.","").split(";Feat")[0].replace(";Feat","").trim();
  403.    } catch (e) {}
  404. }
  405.  
  406. //Clean Genre Name
  407. CLEAN_GENRE_NAME = function (t)
  408. {
  409.    try
  410.    {
  411.        return t.replace(/about:\//,"").replace("music/","").replace("+"," ").replace("+"," ").replace("+"," ").replace("+"," ").replace("+"," ").replace("+"," ").replace("+"," ").replace("+"," ").replace("+"," ").replace("+"," ").replace("+"," ").replace("+"," ").replace("+"," ").replace("+"," ").replace("+"," ").replace("+"," ").replace("+"," ").replace("+"," ").replace("+"," ").replace("+"," ").replace("free-music-downloads","").replace("/+similar?page=2","").replace("/+events","").replace("/+wiki","").replace("-+","").replace("/+albums","").replace("/+tags","").replace("/+images","").replace("/journal","").replace("/charts","").replace("/images","").replace("/listeners","").replace("/similar?page=17","").replace("/news","").replace("/groups","").replace("/albums","").replace("/videos","").replace("/tracks","").replace("/similar","").replace("/tags","").replace("noredirect/","").replace("listeners/+tracks","").replace("videos/+tracks","").replace("/+videos/","").replace("?page=1","").replace("?page=8","").replace("?page=5","").replace("?page=7","").replace("?page=9","").replace("?page=8","").replace(" wiki/edit","").replace("/ similar","").replace("?page=","'").replace("/ charts","'").replace("-","").replace("%2F%E3%82%A4%E3%83%95%E3%83%BB%E3%83%8E%E3%83%83%E3%83%88%E3%83%BB%E3%83%95%E3%82%A9%E3%83%BE3%83%BB%E3%83%A6%E3%83%BC","").replace("Ajoutez ce titre sur Deezer exclusivement sur www.hotmixradio.fr","").replace("www.Hituri.net","").replace("%E3%81%97%E3%82%83%E3%81%AB%E3%82%80%E3%81%AB%E3%82%B7%E3%82%A7%E3%82%A4%E3%82%AF%EF","").replace("%B81%E3%82%B7%E3%82%A7%E3%82%A4%E3%82%AF%EF%B81","").replace("%E4%BD%95%E3%82%88%E3%82%8A%E3%82%82%E5%83%95%E3%82%89%E3%81%97%E3%81%8F%E3%80%81%E4%BD%95%E3%82%88%E3%82%8A","").replace("%E3%82%82%E5%90%9B%E3%82%89%E3%81%97%E3%81%8F","").replace("%D0%91%D1%8D0%B5%D1%82 %D0%BF%D0%BE %D0%B3%D0%BB%D0%B0%D0%B7%D0%B0%D0%BC","").replace("%E3%83%9E%E3%82%A4%E3%83%BB%E3%83%9E3%83%87%E3%82%A3","").replace("%D0%9B%D0%B5%D1%82%D0%B5%D1%82%D1%8C","").replace("%2F%2F %D0%A1%D0%9B%D0%A3%D0%A8%D0%90%D0%AE%D0%A2","").replace("%D0%9F%D0%BE%D0%BF-%D0%A5%D0%B8%D1%82","").replace("/","").split("tag")[0].split("hype")[0].split("events")[0];
  412.    } catch (e) {}
  413. }
  414.  
  415. //*********************YT RADIO START**********************
  416.  
  417. //SIMILAR--------------------------------------------------
  418. this.downloadLFM = function()
  419. {     if (AUTO=="1")
  420.      if (auto_yt=="1")
  421.    
  422.    { var randomnumber=Math.floor(Math.random()*art)
  423.      var a=randomnumber;
  424.        if (START_ARTIST == "" || START_ARTIST == "?") return;
  425.         if (!this.xmlhttp) this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  426.         this.xmlhttp.open("GET", "http://www.last.fm/music/" + encodeURIComponent(START_ARTIST) + "/+similar"+ "?page=" + a, true);
  427.         this.xmlhttp.send();
  428.         this.xmlhttp.onreadystatechange = function() {
  429.             if (this.xmlhttp.readyState == 4) {
  430.                 if (this.xmlhttp.status == 200) {
  431.                     var text = this.xmlhttp.responsetext;
  432.                     if (!this.doc) this.doc = new ActiveXObject("htmlfile");
  433.                     this.doc.open();
  434.                     var div = this.doc.createElement("div");
  435.                     div.innerHTML = text;
  436.                     var data = div.getElementsByTagName("a");
  437.                     var urls = [];
  438.    
  439.            
  440.  
  441. for (i = 0; i < data.length; i++) {
  442.     if (data[i].href.indexOf("about:/music/") == 0) urls.push(CLEAN_ART_NAME(data[i].href));  
  443. }
  444.  
  445. //select random URL
  446. var randomnumber = Math.floor(Math.random()*(20-50)+50);
  447. do{
  448. randomnumber = Math.floor(Math.random()*(20-50)+50);
  449. } while(randomnumber%2!=1);
  450. i=randomnumber;
  451.  
  452. {
  453.  
  454. //Start with urls[i]
  455. if (urls[i] > "")
  456. {
  457. //p.console("" + urls[i]);
  458. last_fm = window.SetProperty("YT Similar", urls[i]);
  459. last_fm = urls[i];
  460. window.SetProperty("YT Similar", urls[i]);
  461. }
  462. else
  463. {
  464. last_fm = window.SetProperty("YT Similar", "");
  465. last_fm = "";
  466. window.SetProperty("YT Similar", "");
  467. }                  
  468. }
  469.            
  470.                this.doc.close();
  471.                if (START_ARTIST.indexOf("*")== 0) {downloadGENRE();}
  472.                else
  473.                if (last_fm == "" || last_fm == "?") {downloadLFM();}
  474.                else
  475.                downloadTRACK();
  476.                 } else {
  477.                if (START_ARTIST.indexOf("*")== 0) {downloadGENRE();}
  478.                else
  479.                if (this.xmlhttp.status == 404) {p.console("HTTP error: " + this.xmlhttp.status); downloadLFM();}
  480.                }
  481.             }
  482.         }
  483.     }                            
  484.  
  485. }
  486.  
  487. //TRACK----------------------------------------------------
  488. this.downloadTRACK = function()
  489. {
  490.    
  491.    {var randomnumber=Math.floor(Math.random()*sng)
  492.      var a=randomnumber;
  493.        if (last_fm == "" || last_fm == "?") return;
  494.         if (!this.xmlhttp) this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  495.         this.xmlhttp.open("GET", "http://www.last.fm/music/" + encodeURIComponent(last_fm) + "/+tracks" + "?page=" + a, true);
  496.         this.xmlhttp.send();
  497.         this.xmlhttp.onreadystatechange = function() {
  498.             if (this.xmlhttp.readyState == 4) {
  499.                 if (this.xmlhttp.status == 200) {
  500.                     var text = this.xmlhttp.responsetext;
  501.                     if (!this.doc) this.doc = new ActiveXObject("htmlfile");
  502.                     this.doc.open();
  503.                     var div = this.doc.createElement("tr");
  504.                     div.innerHTML = text;
  505.                     var data = div.getElementsByTagName("td");
  506.                     var urls = [];
  507.    
  508.            
  509.  
  510. for (i = 0; i < data.length; i++) {
  511.    if (data[i].title) urls.push(CLEAN_TRACK_NAME(data[i].title));
  512. }
  513.  
  514. //select random URL
  515. var randomnumber = Math.floor(Math.random()*Math.max(urls.length));
  516. i=randomnumber;
  517.  
  518. {
  519.  
  520. //Start with urls[i]
  521. if (urls[i] > "")
  522. {
  523. p.console("" + last_fm + " - " + urls[i]);
  524.  
  525. ooo2 = window.SetProperty("YT Track", urls[i]);
  526. ooo2 = urls[i];
  527. window.SetProperty("YT Track", urls[i]);
  528. }
  529. else
  530. {
  531. ooo2 = window.SetProperty("YT Track", "");
  532. ooo2 = "";
  533. window.SetProperty("YT Track", "");
  534. }
  535. }
  536.  
  537.                this.doc.close();
  538.                if (ooo2 == "" || ooo2 == "?") {downloadLFM();}
  539.                else
  540.                set_focus(); //focus on playlist
  541.                do_youtube_search1(decodeURIComponent(last_fm), decodeURIComponent(ooo2));
  542.                 } else {
  543.                p.console("HTTP error: " + this.xmlhttp.status);
  544.                if (START_ARTIST.indexOf("*")== 0) {downloadGENRE();}
  545.                else
  546.                if (this.xmlhttp.status == 404) {downloadLFM();}
  547.                
  548.                }
  549.             }
  550.         }
  551.     }
  552. }
  553.  
  554.  
  555. //SAME VIDEO-----------------------------------------------
  556. this.downloadART_TITLE = function()
  557.     {
  558.       var artist0 = p.eval("%artist%");
  559.       var title0 = p.eval("%title%");
  560.       if(artist0 > "?" && title0 > "?") {set_focus2(); do_youtube_search1(decodeURIComponent(artist0), decodeURIComponent(title0));}
  561. }
  562.  
  563. //GENRE----------------------------------------------------
  564. this.downloadGENRE = function()
  565.     {
  566.        
  567.      if (START_ARTIST.indexOf("*")== 0)
  568.  
  569.    { var randomnumber=Math.floor(Math.random()*gnr)
  570.      var a=randomnumber;
  571.        if (START_ARTIST == "" || START_ARTIST == "?") return;
  572.         if (!this.xmlhttp) this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  573.         this.xmlhttp.open("GET", "http://www.last.fm/music/+tag/" + encodeURIComponent(START_ARTIST).replace("*","") + "?page=" + a, true);
  574.         this.xmlhttp.send();
  575.         this.xmlhttp.onreadystatechange = function() {
  576.             if (this.xmlhttp.readyState == 4) {
  577.                 if (this.xmlhttp.status == 200) {
  578.                     var text = this.xmlhttp.responsetext;
  579.                     if (!this.doc) this.doc = new ActiveXObject("htmlfile");
  580.                     this.doc.open();
  581.                     var div = this.doc.createElement("li");
  582.                     div.innerHTML = text;
  583.                     var data = div.getElementsByTagName("a");
  584.                     var urls = [];
  585.    
  586.            
  587.  
  588. for (i = 0; i < data.length; i++) {
  589.    if (data[i].className.indexOf("name") == 0)
  590.    if (data[i].href.indexOf("about:/music/") == 0) urls.push(CLEAN_GENRE_NAME(data[i].href));
  591. }
  592.  
  593. //select random URL
  594. var randomnumber = Math.floor(Math.random()*(0-9)+9);
  595. do{
  596. randomnumber = Math.floor(Math.random()*(0-9)+9);
  597. } while(randomnumber%2!=0);
  598.  
  599. i=randomnumber;
  600.  
  601. {
  602.  
  603. //Start with urls[i]
  604. if (urls[i] > "")
  605. {
  606. //p.console("" + urls[i]);
  607. last_fm = window.SetProperty("YT Similar", urls[i]);
  608. last_fm = urls[i];
  609. window.SetProperty("YT Similar", urls[i]);
  610. }
  611. else
  612. {
  613. last_fm = window.SetProperty("YT Similar", "");
  614. last_fm = "";
  615. window.SetProperty("YT Similar", "");
  616. }
  617. }
  618.                this.doc.close();
  619.                if (last_fm == "" || last_fm == "?") {downloadGENRE();}
  620.                else
  621.                downloadTRACK();
  622.                 } else {
  623.                     p.console("HTTP error: " + this.xmlhttp.status);
  624.                     if (this.xmlhttp.status == 404) {downloadGENRE();}
  625.                }
  626.             }
  627.         }
  628.     }
  629. }
  630.  
  631. //LOAD YOUTUBE VIDEO---------------------------------------
  632. strip_title = function (t1, t2)
  633. {
  634.    try
  635.    {
  636.        if (t1 == t2)
  637.            return t1;
  638.        if (t1.match(RegExp(t2 + "( and | & )", "i")))
  639.            return t1;
  640.        var a = "(by the |by: |by |of |the |feat. |ft. |)";
  641.        var b = "( feat.| ft.|)";
  642.        var t3 = "";
  643.        if (!t2.match(/^the /i))
  644.        {
  645.            t3 = t1.replace(RegExp("[^a-z\\d_)\\]\"]*(" + a + t2 + b + ")[^a-z\\d_(\\[\"]*","gi")," - ").replace(/^[^a-z()\[\]\d\"]*|[^a-z()\[\]\d\"]*$/gi, "");
  646.        }
  647.        else
  648.        {
  649.            var t4 = t2.replace(/^the /i, "")
  650.            t3 = t1.replace(RegExp("[^a-z\\d_)\\]\"]*(" + a + t4 + b + ")[^a-z\\d_(\\[\"]*","gi")," - ").replace(/^[^a-z()\[\]\d\"]*|[^a-z()\[\]\d\"]*$/gi, "");
  651.        }
  652.        return t3.match(/\S/) ? t3 : t1;
  653.    }
  654.    catch (e)
  655.    {
  656.        return t1;
  657.    }
  658. }
  659.  
  660.  
  661. convert = function(min)
  662. {
  663.    var parts = min.split(':'),
  664.    minutes = +parts[0],
  665.    seconds = +parts[1];
  666.    return minutes * 60 + seconds;
  667. }
  668.  
  669.  
  670.  
  671. strip = function (t)
  672. {
  673.    try
  674.    {
  675.        t = t.replace(/[\.,\!\?\:;'"\-_]/g,"").toLowerCase();
  676.        return t;
  677.    } catch (e)
  678.    {}
  679. }
  680.  
  681. clean = function (t)
  682. {
  683.    try
  684.    {
  685.        return t.replace(/'/g, "").toLowerCase();
  686.    } catch (e) {}
  687. }
  688.  
  689.  
  690.  
  691.  
  692. youtube_search = function (state_change_callback, p_on_search_finished_callback)
  693. {
  694.    this.xmlhttp = null;
  695.    this.http_callback_funct = null;
  696.    this.ready_state_change_callback = state_change_callback;
  697.    this.search_done = false;
  698.    this.on_search_finished_callback = p_on_search_finished_callback;
  699.    this.yt_link;
  700.    this.search_artist;
  701.    this.search_title;
  702.    this.metadata;
  703.  
  704.    this.on_state_change = function ()
  705.    {
  706.        if (this.xmlhttp != null && this.xmlhttp.readyState == 4 && this.xmlhttp.status == 200 && this.http_callback_funct != null)
  707.            this.http_callback_funct();
  708.    }
  709.  
  710.    this.StartSearch = function (p_artist, p_title, p_extra_metadata)
  711.    {
  712.        this.search_artist = p_artist;
  713.        this.search_title = p_title;
  714.        this.metadata = p_extra_metadata;
  715.        this.http_callback_funct = null;
  716.        this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  717.  
  718.        var URL = "http://www.youtube.com/results?search_query=" + encodeURIComponent(p_artist + " " + p_title);
  719.  
  720.         this.http_callback_funct = this.AnalyseSearch;
  721.         this.xmlhttp.open("GET", URL);
  722.         this.xmlhttp.onreadystatechange = this.ready_state_change_callback;
  723.         this.xmlhttp.send();
  724.     }
  725.  
  726.     this.AnalyseSearch = function ()
  727.     {
  728.         var text = this.xmlhttp.responsetext;
  729.         var doc = new ActiveXObject("htmlfile");
  730.         doc.open();
  731.         var div = doc.createElement("div");
  732.         div.innerHTML = text;
  733.         var data = div.getElementsByTagName("a");
  734.         var url = "";
  735.         var first_match;
  736.  
  737.         re_test:
  738.  
  739.         for (var i = 0; i < data.length; i++)
  740.         {
  741.             if (data[i].href.indexOf("about:/watch?v=") == 0)
  742.             {
  743.                 i++; //the title is on the second link
  744.  
  745. //check if track exist?                
  746. //if((data[i].title.toLowerCase()).indexOf(decodeURIComponent(last_fm.toLowerCase()).split(" ")[0]) > 0)
  747. //if((data[i].title.toLowerCase()).indexOf(decodeURIComponent(ooo2.toLowerCase()).split(" ")[0]) > 0)
  748. //if((data[i].title.toLowerCase()).indexOf(decodeURIComponent(ooo2.toLowerCase()).split(" ")[1]) > 0)
  749. //if((data[i].title.toLowerCase()).indexOf(decodeURIComponent(ooo2.toLowerCase()).split(" ")[2]) > 0)
  750.  
  751.                
  752.                 var s = text.indexOf( data[i].href.replace("about:/watch?", "") );
  753.                 var str = "<span class=\"video-time\">";
  754.                 s = text.indexOf(str, s) + str.length;
  755.                 var e = text.indexOf("</span>", s);
  756.                 var length = text.substr(s, e - s);
  757.                 length = convert(length);
  758.                 length = length ? length : "";
  759.                 if (!first_match)
  760. {                  
  761.                     // title stripped of artist name if same as search_artist
  762.                     var stripped_title = strip_title(data[i].title, this.search_artist);
  763.                     first_match = "3dydfy://www.youtube.com/watch?" + (this.metadata ? this.metadata + "&" : "") + "fb2k_title=" + encodeURIComponent(stripped_title) + "&3dydfy_alt_length=" + encodeURIComponent(length) + "&fb2k_artist=" + encodeURIComponent(this.search_artist) + "&" + data[i].href.replace("about:/watch?", "");
  764.                 }
  765.                 //3dydfy
  766.                 if (!this.IsGoodMatch(data[i].title))
  767.                     continue;
  768.  
  769.                 url = "3dydfy://www.youtube.com/watch?" + (this.metadata ? this.metadata + "&" : "") + "fb2k_title=" + encodeURIComponent(this.search_title) + "&3dydfy_alt_length=" + encodeURIComponent(length) + "&fb2k_artist=" + encodeURIComponent(this.search_artist) + "&" + data[i].href.replace("about:/watch?", "");
  770.                 break;
  771.             }
  772.         }
  773.  
  774.  
  775.  
  776.         if (!url.length)
  777.             url = first_match;
  778.  
  779.         this.yt_link = url;
  780.  
  781.         doc.close();
  782.  
  783.         this.on_search_finished_callback(url, this.search_artist, this.search_title);
  784.     }
  785.  
  786.  
  787.     this.IsGoodMatch = function (video_name)
  788.     {
  789.         var clean_vid_name = clean(strip(video_name));
  790.         var clean_artist = clean(strip(this.search_artist));
  791.         var clean_title = clean(strip(this.search_title));
  792.  
  793.         if (clean_vid_name.indexOf(clean_artist) != -1 && clean_vid_name.indexOf(clean_title) != -1 && clean_vid_name.indexOf("full album") == -1)
  794.         {
  795.             //p.console("GOOD MATCH");
  796.             return true;
  797.         }
  798.         else
  799.         {
  800.             //p.console("BAD MATCH");
  801.             return false;
  802.         }
  803.     }
  804.  
  805. }
  806.  
  807. //Call Search
  808. do_youtube_search1 = function (p_artist, p_title)
  809.     {
  810.         var yt_search1 = new youtube_search(function ()
  811.         {
  812.             yt_search1.on_state_change();
  813.         }, on_youtube_search1_done);
  814.         yt_search1.StartSearch(p_artist, p_title);
  815.     }
  816.  
  817.     on_youtube_search1_done = function (link, p_artist, p_title)
  818.     {
  819. var url2="";
  820. url2 = link;
  821. if (!url2)
  822. {p.console("Track Or Artist - Not Exist!"); downloadLFM();}
  823.  
  824.         if (link && link.length)
  825.         {
  826.            
  827. p.console("" + "\"" + link + "\"");
  828. YT_URL = window.SetProperty("YT URL", link);
  829. var tmppath = p.fso.GetFolder(fb.FoobarPath).ShortPath;
  830. var str = tmppath + "\\foobar2000.exe /add ";
  831. var go = str + link;
  832. p.run(go);
  833.         }
  834.     }
  835. //**************************(END)**************************
  836. this.artist = "";
  837.  
  838. //Set Panels
  839. function pan1() { }
  840. function pan2(x, y, w, h) { }
  841. //---------------------------------------------------------
  842.  
  843. //Begin--->
  844. var p = new panel("Youtube Radio", ["remap", "metadb"]);
  845. var im = new pan2(0, 0, 0, 0);
  846. var th = new pan1();
  847.  
  848. on_item_focus_change();
  849. {
  850. }
  851.  
  852. function on_metadb_changed() {
  853. }
  854.  
  855. //Buttons---------------------------------------------------
  856.  
  857. var Buttons;
  858.  
  859. var g_tooltip = window.CreateTooltip();
  860. var g_down = false;
  861.  
  862. var btn_down = null;
  863. var cur_btn = null;
  864.  
  865. ButtonStates = {
  866.     normal: 0,
  867.     hover: 1,
  868.     down: 2
  869. }
  870.  
  871. function Button(x, y, w, h, img_src, func, tiptext)  {
  872.     this.left = x;
  873.     this.top = y;
  874.     this.w = w;
  875.     this.h = h;
  876.     this.right = x + w;
  877.     this.bottom = y + h;
  878.     this.func = func;
  879.     this.tiptext = tiptext;
  880.     this.state = ButtonStates.normal;
  881.     this.img_normal = img_src && img_src.normal ? gdi.Image(img_src.normal) : null;
  882.     this.img_hover = img_src && img_src.hover ? gdi.Image(img_src.hover) : this.img_normal;
  883.     this.img_down = img_src && img_src.down ? gdi.Image(img_src.down) : this.img_hover;
  884.     this.img = this.img_normal;
  885.    
  886.     this.alterImage = function(img_src) {
  887.         this.img_normal = img_src && img_src.normal ? gdi.Image(img_src.normal) : null;
  888.         this.img_hover = img_src && img_src.hover ? gdi.Image(img_src.hover) : this.img_normal;
  889.         this.img_down = img_src && img_src.down ? gdi.Image(img_src.down) : this.img_hover;
  890.        
  891.         this.changeState(this.state);
  892.     }
  893.    
  894.     this.traceMouse = function (x, y) {
  895.         var b = (this.left < x) && (x < this.right) && (this.top < y) && (y < this.bottom);
  896.         if (b)
  897.             g_down ? this.changeState(ButtonStates.down) : this.changeState(ButtonStates.hover);
  898.         else
  899.             this.changeState(ButtonStates.normal);
  900.         return b;
  901.     }
  902.    
  903.    
  904.     this.changeState = function (newstate) {
  905.         if (newstate != this.state)
  906.             window.RepaintRect(this.left, this.top, this.w, this.h);
  907.         this.state = newstate;
  908.         switch (this.state)
  909.         {
  910.         case ButtonStates.normal:
  911.             this.img = this.img_normal;
  912.             break;
  913.            
  914.         case ButtonStates.hover:
  915.             this.img = this.img_hover;
  916.             break;
  917.            
  918.         case ButtonStates.down:
  919.             this.img = this.img_down;
  920.             break;
  921.            
  922.         default:
  923.             this.img = null;
  924.         }
  925.     }
  926.    
  927.     this.draw = function (gr) {
  928.         this.img && gr.DrawImage(this.img, this.left, this.top, this.w, this.h, 0, 0, this.w, this.h);
  929.     }
  930.    
  931.     this.onClick = function () {
  932.         this.func && this.func(x,y);
  933.     }
  934.    
  935.     this.onMouseIn = function() {
  936.         g_tooltip.Text = this.tiptext;
  937.         g_tooltip.Activate();
  938.     }
  939.    
  940.     this.onMouseOut = function() {
  941.         g_tooltip.Deactivate();
  942.     }
  943. }
  944.  
  945. function buttonsDraw(gr) {
  946.     for (i in Buttons) {
  947.         Buttons[i].draw(gr);
  948.     }
  949. }
  950.  
  951. function buttonsTraceMouse(x, y) {
  952.     var btn = null;
  953.     for (i in Buttons) {
  954.         if (Buttons[i].traceMouse(x, y) && !btn)
  955.             btn = Buttons[i];
  956.     }
  957.  
  958.     return btn;
  959. }
  960.  
  961. function on_mouse_move(x, y) {
  962.     var btn = buttonsTraceMouse(x, y);
  963.    
  964.     if (btn != cur_btn) {
  965.         cur_btn && cur_btn.onMouseOut();
  966.         btn && btn.onMouseIn();
  967.     }
  968.    
  969.     cur_btn = btn;
  970. }
  971.  
  972. function on_mouse_lbtn_down(x, y) {
  973.     g_down = true;
  974.     btn_down = cur_btn;
  975.  
  976.     if (cur_btn) {
  977.         cur_btn.changeState(ButtonStates.down);
  978.     }
  979. }
  980.  
  981. function on_mouse_lbtn_up(x, y) {
  982.     if (cur_btn) {
  983.         cur_btn.changeState(ButtonStates.hover);
  984.         if( btn_down == cur_btn )
  985.             cur_btn.onClick(x, y);
  986.     }
  987.     g_down = false;
  988. }
  989.  
  990. function on_mouse_leave() {
  991.     if (cur_btn) {
  992.         cur_btn.changeState(ButtonStates.normal);
  993.     }
  994. }
  995.  
  996. function on_size() {
  997.     ww = window.Width;
  998.     wh = window.Height;
  999.     window.Repaint();
  1000. }
  1001.  
  1002. //Background
  1003. this.dui = window.InstanceType;
  1004. function on_paint(gr) {
  1005.    
  1006.         if (this.dui) {
  1007.             col = window.GetColorDUI(1);
  1008.             gr.FillSolidRect(0, 0, ww, wh, col);
  1009.         }
  1010.         else
  1011.         {
  1012.         col = window.GetColorCUI(3);    
  1013.         }
  1014.  
  1015.     buttonsDraw(gr);
  1016.    
  1017. }
  1018.  
  1019. function RGB(r,g,b) {
  1020.     return (0xff000000|(r<<16)|(g<<8)|(b));
  1021. }
  1022.  
  1023. function on_colors_changed() {
  1024.     window.Repaint();
  1025. }
  1026.  
  1027. //Init Buttons--------------------------------------------
  1028.  
  1029. //Custom colour
  1030. var custom = RGB(255,255,255);
  1031.  
  1032. //Button width
  1033. var bw = 24;
  1034.  
  1035. //Button height
  1036. var bh = 20;
  1037.  
  1038. //Button position
  1039. var top_margin = -1;
  1040. var left_margin = 0;
  1041.  
  1042. var image_path0 = window.GetProperty("Button Path", fb.ProfilePath + "image");
  1043. var image_path = (image_path0 + "\\");
  1044.  
  1045. //These 2 lines of code lock the panel size.
  1046. //window.MinWidth = window.MaxWidth = 24;
  1047. //window.MinHeight = window.MaxHeight = 20;
  1048.  
  1049.  
  1050. Buttons = {
  1051.     but1: new Button(left_margin,top_margin,bw,bh, {normal: image_path + "youtube0.png", hover: image_path + "youtube1.png"}, function(){
  1052.         p.rbtn_up(24, 17);
  1053.         //downloadONE();
  1054.         }, "Youtube")
  1055.    
  1056. }
  1057.  
  1058. function on_mouse_rbtn_up(x, y) {
  1059. return true;
  1060. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement