home *** CD-ROM | disk | FTP | other *** search
/ XMANGA 27 / XMANGA27.ISO / Extra / mp10setup.exe / wmploc.DLL / 256 / 142 < prev    next >
Encoding:
Text (UTF-16)  |  2004-08-11  |  54.9 KB  |  1,067 lines

  1.  
  2. // Windows Media Player  - Copyright 2001 Microsoft Corporation.
  3.  
  4. var g_psPlayState=0;
  5. var g_osOpenState=0;
  6. var g_fIsLiveBroadcast=false;
  7. var g_StatusTextColor="#89A4FF";
  8.  
  9. var g_bufferingProgress=100;
  10. var g_bufferingToolTipFormatString = theme.loadString("res://wmploc/RT_STRING/#2099");
  11. var g_strPlayTooltip = "";
  12.  
  13. var g_SetPlayPauseFocus=false;
  14.  
  15. var g_kSeekTooltip = theme.loadString("res://wmploc/RT_STRING/#1809");
  16. var g_fSeekDragging=false;
  17.  
  18. var g_strPlayIcon="res://wmploc/RT_IMAGE/#1784";
  19. function ResetPlayIcon()
  20. {
  21.     g_strPlayIcon="res://wmploc/RT_IMAGE/#1784";
  22.  
  23. function InitMiniControls()
  24. {
  25.     g_bufferingProgress = player.network.bufferingProgress;
  26.     OnOpenStateChangeTransport(player.openState);
  27.     OnPlayStateChangeTransport(player.playState);
  28.     OnStatusChangeTransport(player.status);
  29. }
  30.  
  31. /*
  32. var g_fShowingBuyMe=false;
  33.  
  34. function LaunchBuy()
  35. {
  36.     var BuyURL = 'http://go.microsoft.com/fwlink?prd=766&pver=9.0&plcid=0x' + mediacenter.getNamedString("PLCID") + '&ar=BuyNow&sar=' + mediacenter.getNamedString("BuyMusicURL");
  37.  
  38.     player.launchURL( BuyURL );
  39. }
  40. */
  41.  
  42. function MetaDataObject( formatStringID, dataCode, fEvalEveryTime, urlCode, tooltipCode )
  43. {
  44.     this.formatString = getFormatString(formatStringID);
  45.     this.dataCode = dataCode;
  46.     this.fEvalEveryTime = (fEvalEveryTime==true);
  47.     this.urlCode = urlCode ? urlCode : '""';
  48.     this.tooltipCode= tooltipCode ? tooltipCode : '""';
  49.     this.str = "";
  50.     this.url = "";
  51.     this.toolTip = "";
  52.  
  53.     this.getDataString = getDataString;
  54.     this.init = initMetaDataObject;
  55. }
  56.  
  57. function getDataString()
  58. {
  59.     if (false==this.fEvalEveryTime)
  60.     {
  61.         return this.str;
  62.     }
  63.     else
  64.     {
  65.         return getFormattedDataString(this.formatString, this.dataCode);
  66.     }
  67. }
  68. function initMetaDataObject()
  69. {
  70.     this.str = getFormattedDataString(this.formatString,this.dataCode);
  71.     this.url = eval(this.urlCode);
  72.     this.toolTip = eval(this.tooltipCode);
  73. }
  74.  
  75. function MetaDataDefinitionSet ( arrayOfMetaDataObjects, testCode)
  76. {
  77.     this.arrayOfMetaDataObjects = arrayOfMetaDataObjects;
  78.     this.testCode = testCode;
  79. }
  80.  
  81. function getMInfo(itemName)
  82. {
  83.     if (player.openState==osMediaOpen)
  84.     {
  85.         return player.currentMedia.getItemInfo(itemName);
  86.     }
  87.     return "";
  88. }
  89.  
  90. function getPInfo(itemName)
  91. {
  92.     return player.currentPlaylist.getItemInfo(itemName);
  93. }
  94.  
  95. function getArtist()
  96. {
  97.     var artist = getMInfo('AlbumArtist'); 
  98.     if (artist=='') 
  99.     {
  100.         artist = getMInfo('author'); 
  101.     }
  102.     return artist;
  103. }
  104.  
  105. var g_sAudioMetaData = new Array
  106. (              //formatStringID,  script to get data 
  107.     new MetaDataObject ( "",     "player.status", true ),
  108.     new MetaDataObject ( "",     "GetServerString()", true, "mediacenter.getNamedString('NineSeries_URL');"),
  109.     new MetaDataObject ( "2070", "getMInfo('album')", true, "getMInfo('moreinforef')", "getMInfo('abstract')" ),
  110.     new MetaDataObject ( "2071", "if(player.openState==osMediaOpen)player.currentMedia.name; else '';", true, "getPInfo('moreinforef')", "getPInfo('abstract')" ),
  111.     new MetaDataObject ( "2072", "getArtist()",true ),
  112.     new MetaDataObject ( "2076", "getMInfo('copyright')",true ),
  113.     new MetaDataObject ( "",     "GetDRMString(player.currentMedia)" )
  114. );
  115.  
  116. var g_sVideoMetaData = new Array
  117. (              //formatStringID,  script to get data 
  118.     new MetaDataObject ( "",      "player.status", true),
  119.     new MetaDataObject ( "",      "GetServerString()", true, "mediacenter.getNamedString('NineSeries_URL');"),
  120.     new MetaDataObject ( "2073",  "getPInfo('title')", true, "getPInfo('moreinforef')", "getPInfo('abstract')" ),
  121.     new MetaDataObject ( "2074",  "if(player.openState==osMediaOpen)player.currentMedia.name; else '';", true, "getMInfo('moreinforef')", "getMInfo('abstract')" ),
  122.     new MetaDataObject ( "2075",  "getMInfo('author')", true ),
  123.     new MetaDataObject ( "2076",  "getMInfo('copyright')", true ),
  124.     new MetaDataObject ( "",      "GetDRMString(player.currentMedia)")
  125. );
  126.  
  127. var g_sDVDMetaData = new Array
  128. (           //formatStringID,     script to get data 
  129.     new MetaDataObject ( "",      "player.status", true),
  130.     new MetaDataObject ( "2082",  "getMInfo('Author')", true),
  131.     new MetaDataObject ( "2083",  "getMInfo('Studio')", true ),
  132.     new MetaDataObject ( "",      "GetChapterTitleString()", true)
  133. );
  134.  
  135. var g_sIdle = new Array( );
  136.  
  137. var g_sMetaDataDefinitionSets = new Array 
  138. (
  139.     new MetaDataDefinitionSet ( g_sAudioMetaData, "(player.dvd.isAvailable('dvd')==false) && (player.currentMedia.imageSourceHeight==0)"),
  140.     new MetaDataDefinitionSet ( g_sVideoMetaData, "(player.dvd.isAvailable('dvd')==false) && (player.currentMedia.imageSourceHeight>0)" ),
  141.     new MetaDataDefinitionSet ( g_sDVDMetaData,   "player.dvd.isAvailable('dvd')==true" )
  142. );
  143.  
  144. function getNextMetaDataObject()
  145. {
  146.     this.currentIndex = (this.currentIndex + 1) % this.metaDataCollection.length;
  147.     return this.metaDataCollection[this.currentIndex];
  148. }
  149.  
  150. function clear()
  151. {
  152.     this.metaDataCollection.length=0;
  153.     this.currentIndex = 0;    
  154. }
  155.  
  156. function append(mdObject)
  157. {
  158.     this.metaDataCollection[this.metaDataCollection.length] = mdObject;
  159. }
  160.  
  161. function getItem(index)
  162. {
  163.     this.currentIndex = index-1;
  164.     return this.getNextMetaDataObject();
  165. }
  166.  
  167. function MetaDataCollectionManager()
  168. {
  169.     this.metaDataCollection = new Array();
  170.     this.currentIndex = 0;
  171.     this.getNextMetaDataObject = getNextMetaDataObject;
  172.     this.clear = clear;
  173.     this.append = append;
  174.     this.getItem = getItem;
  175. }
  176.  
  177. var g_MetaDataCollectionManager = new MetaDataCollectionManager();
  178.  
  179.  
  180. function InitMetaDataCollection() { InitMetaDataCollectionIdle(false); }
  181.  
  182. function InitMetaDataCollectionIdle(fIdle)
  183. {
  184.     g_MetaDataCollectionManager.clear();
  185.     var CurrentSet;
  186.     if (fIdle)
  187.     {
  188.         CurrentSet = new MetaDataDefinitionSet ( g_sIdle, "" );
  189.     }
  190.     else
  191.     {
  192.         for (var mdList in g_sMetaDataDefinitionSets)
  193.         {
  194.             CurrentSet = g_sMetaDataDefinitionSets[mdList];
  195.             if ( eval(CurrentSet.testCode) )
  196.             {
  197.                 break;
  198.             }
  199.         }
  200.     }
  201.     var allTypes = CurrentSet.arrayOfMetaDataObjects;
  202.     for (var index in allTypes)
  203.     {
  204.         var mdObject = allTypes[index];
  205.         mdObject.init();
  206.         if ( (mdObject.str!="") || mdObject.fEvalEveryTime )
  207.         {
  208.             g_MetaDataCollectionManager.append(mdObject);
  209.         }
  210.     }
  211. }
  212.  
  213. function getFormatString(formatStringID)
  214. {
  215.     if (""==formatStringID)
  216.     {
  217.         return "";
  218.     }
  219.     
  220.     return theme.loadString("res://wmploc/RT_STRING/#" + formatStringID);
  221. }
  222.  
  223. function getFormattedDataString(formatString, dataCode)
  224. {
  225.     var data = eval(dataCode);
  226.     if (data=="")
  227.     {
  228.         return "";
  229.     }
  230.     if (""!=formatString)
  231.     {
  232.         data=data.sprintf(formatString,data);
  233.     }
  234.     return data;
  235. }
  236.  
  237. function GetChapterTitleString()
  238. {
  239.     if (player.openState!=osMediaOpen)
  240.     {
  241.         return "";
  242.     }
  243.     var DVDChapterANDTitleFormatString = theme.loadString("res://wmploc/RT_STRING/#2086");
  244.  
  245.     var title = player.currentPlaylist.name;
  246.     var chapter = player.currentMedia.name;
  247.     
  248.     //jcain - DON'T CHANGE THE ORDER OF THESE ARGUMENTS!!! (title, chapter)
  249.     //their order is vital to sprintf formattting them properly for localization
  250.     var arguments = new Array (title,chapter);
  251.     var TitleAndChapter = "";
  252.     TitleAndChapter = TitleAndChapter.sprintf(DVDChapterANDTitleFormatString, arguments);
  253.     return TitleAndChapter;    
  254. }
  255.  
  256. function GetServerString()
  257. {
  258.     var ServerVersionString = getMInfo("WMServerVersion");
  259.     if (ServerVersionString != "" && (parseInt(ServerVersionString)>=9))
  260.     {
  261.         return theme.loadString("res://wmploc/RT_STRING/#2069");
  262.     }
  263.     return "";
  264. }
  265.  
  266. function GetDRMString(obj)
  267. {
  268.     var str = "";
  269.     if ("True" == obj.getItemInfo("Is_Protected"))
  270.     {
  271.         if ("True" == obj.getItemInfo("Is_Trusted"))
  272.         {
  273.             str = theme.loadString("res://wmploc/RT_STRING/#2078");
  274.             var signame = obj.getItemInfo("Signature_Name");
  275.             str = str.sprintf(str,signame);
  276.         }
  277.     }
  278.     return str;
  279. }
  280.  
  281. var g_metaDataInfo;
  282. function ShowMetaData(mdObject)
  283. {
  284.     if (mdObject)
  285.     {
  286.         mdObject.url = eval(mdObject.urlCode);
  287.         g_metaDataInfo = mdObject;
  288.         var str = mdObject.getDataString();
  289.         if ("" != str)
  290.         {
  291.             metadata.value = str;
  292.             metadata.tooltip = mdObject.tooltip;
  293.  
  294.             if ("" != mdObject.url)
  295.             {
  296.                 metadata.enabled = true;
  297.                 metadata.hoverForegroundColor = mediacenter.appColorAux12;
  298.                 metadata.cursor="hand";
  299.             }
  300.             else
  301.             {
  302.                 metadata.hoverForegroundColor = metadata.foregroundColor;
  303.                 metadata.cursor="system";
  304.                 metadata.enabled = false;
  305.             }
  306.             
  307.             metadata.toolTip = mdObject.toolTip;
  308.             return true;
  309.         }
  310.         else 
  311.         {
  312.            return false;
  313.         }
  314.     }
  315.     else
  316.     {
  317.         ShowStatus(player.status);
  318.         return false;
  319.     }
  320. }
  321.  
  322. function ShowStatus(sStr)
  323. {
  324.     metadata.value = sStr;
  325.     metadata.hoverFontStyle = "normal";
  326.     metadata.cursor="system";
  327.     metadata.tooltip = "";
  328.     metadata.enabled = false;
  329. }
  330.  
  331. function RotateMetaData()
  332. {
  333.     var len = g_MetaDataCollectionManager.metaDataCollection.length;
  334.     
  335.     for (var index = 0; index < len; index++)
  336.     {
  337.         var currentMetaDataObject = g_MetaDataCollectionManager.getNextMetaDataObject();
  338.         if (ShowMetaData(currentMetaDataObject)) 
  339.         {
  340.             return;
  341.         }
  342.     }
  343.     ShowStatus(player.status);
  344. }
  345.  
  346. function ForceMetaData(itemIndex)
  347. {
  348.     var meta = g_MetaDataCollectionManager.getItem(itemIndex);
  349.     ShowMetaData(meta);
  350. }
  351.  
  352. function OnClickMetaData()
  353. {
  354.     if ("" != g_metaDataInfo.url)
  355.     {
  356.         if(g_metaDataInfo.url == brand.downloadStatusUrl)
  357.         {
  358.             // DISPID_IWMPBRANDDISPATCH_DOWNLOADSTATUSURL == 3030
  359.             brand.setNavigateProps( "ServiceTask1", 3030, "" );
  360.         }
  361.         else
  362.         {
  363.             player.launchURL(g_metaDataInfo.url);
  364.         }
  365.     }
  366. }
  367.  
  368. function UpdateReceptionQuality(nReceptionQuality)
  369. {
  370.     if ( player.network.bufferingProgress < 100 )
  371.     {
  372.         return;
  373.     }
  374.     
  375.     var protocol = player.network.sourceProtocol;
  376.     if ( (protocol=="file") || (protocol=="") )
  377.     {
  378.         return;
  379.     }   
  380.  
  381.     if ( (g_strPlayIcon == "WMPImage_PlaybackIcon")&&
  382.          (player.network.maxBitrate==player.network.bitRate)&&
  383.          (nReceptionQuality == 100) )
  384.     {
  385.         return;
  386.     }
  387.     
  388.     var IDIM_OLDSTRIMG_T1_14_NORMAL=1776;
  389.     var IDIM_OLDSTRIMG_T1_14_PACKETLOSS=1777;
  390.     var IDIM_OLDSTRIMG_T1_56_NORMAL=1778;
  391.     var IDIM_OLDSTRIMG_T1_56_PACKETLOSS=1779;
  392.     var IDIM_OLDSTRIMG_T1_T1_NORMAL=1780;
  393.     var IDIM_OLDSTRIMG_T1_T1_PACKETLOSS=1781;
  394.     var IDIM_OLDSTRIMG_PACKETLOSS10=1772;
  395.     
  396.     
  397.     
  398.     var imagename = "res://wmploc/RT_IMAGE/#";
  399.     
  400.     var maxBitrate = player.network.maxBitrate;
  401.     var currentBitrate = player.network.bitRate;    
  402.     var imageId=0;
  403.     if (currentBitrate==maxBitrate) 
  404.     {
  405.         imageId=IDIM_OLDSTRIMG_T1_T1_NORMAL;
  406.     }
  407.     else
  408.     {
  409.         if (currentBitrate >= (maxBitrate/2))
  410.         {
  411.             imageId=IDIM_OLDSTRIMG_T1_56_NORMAL;
  412.         }
  413.         else
  414.         {
  415.             imageId=IDIM_OLDSTRIMG_T1_14_NORMAL;
  416.         }   
  417.     }
  418.     if (nReceptionQuality > 0)
  419.     {
  420.         if(nReceptionQuality == 100)
  421.         {            
  422.             if (currentBitrate==maxBitrate)
  423.             {
  424.                 QualityIcon.upToolTip="res://wmploc/RT_STRING/#2079";
  425.             }
  426.             else
  427.             {
  428.                 QualityIcon.upToolTip="res://wmploc/RT_STRING/#2092";
  429.             }                  
  430.         }
  431.         else if( nReceptionQuality >= 95 )
  432.         {            
  433.             imageId +=1; //packet loss is one more the normal
  434.             QualityIcon.upToolTip="res://wmploc/RT_STRING/#2080";
  435.         }
  436.         else if(nReceptionQuality < 95)
  437.         {
  438.             imageId = IDIM_OLDSTRIMG_PACKETLOSS10;            
  439.             QualityIcon.upToolTip="res://wmploc/RT_STRING/#2081";
  440.         }
  441.         imagename += imageId;
  442.         QualityIcon.image = imagename;
  443.         QualityIcon.visible=true;
  444.     }
  445. }
  446.  
  447. function OnTimerTransport()
  448. {
  449.     if (g_psPlayState==psUndefined || g_psPlayState==psPlaying || g_psPlayState==psStopped || g_psPlayState == psPaused || g_psPlayState == psReady)
  450.     {
  451.         RotateMetaData();        
  452.     }
  453. }
  454.  
  455. function OnStatusChangeTransport()
  456. {
  457.     view.timerInterval=0;
  458.     view.timerInterval=4000;
  459.     ShowStatus(player.status);
  460. }
  461.  
  462.  
  463. function OnBufferingChangeTransport(nProgress)
  464. {
  465.     if ( nProgress!=g_bufferingProgress)
  466.     {
  467.         g_bufferingProgress=nProgress;
  468.     }
  469.     else
  470.     {
  471.         return;
  472.     }
  473.     
  474.     if (nProgress == 100)
  475.     {
  476.         QualityIcon.image = "res://wmploc/RT_IMAGE/#1776";
  477.         QualityIcon.upToolTip="";
  478.         return;
  479.     }
  480.     if (nProgress > 50)
  481.     {
  482.         if (nProgress > 75)
  483.         {
  484.             QualityIcon.image = "res://wmploc/RT_IMAGE/#1774";
  485.         }
  486.         else
  487.         {
  488.             QualityIcon.image = "res://wmploc/RT_IMAGE/#1773";
  489.         }
  490.     }
  491.     else
  492.     {
  493.         if (nProgress>25)
  494.         {
  495.             QualityIcon.image = "res://wmploc/RT_IMAGE/#1771";
  496.         }
  497.         else
  498.         {
  499.             QualityIcon.image = "res://wmploc/RT_IMAGE/#1770";
  500.         }    
  501.     }    
  502.     var toolTip = "";
  503.     toolTip = toolTip.sprintf(g_bufferingToolTipFormatString, nProgress.toString());
  504.     QualityIcon.upToolTip=toolTip;
  505.     ShowStatus(player.status);
  506. }
  507.  
  508. function OnDisconnectTransport()
  509. {
  510.     ShowStatus(theme.loadString("res://wmploc/RT_STRING/#2063"));
  511. }
  512.  
  513. function PlayButtonClick(event)
  514. {
  515.     if( (player.playState==psPaused) && (event.ctrlKey) && player.controls.isAvailable('step') )
  516.     {
  517.         if (event.shiftKey)
  518.         {
  519.             player.controls.step(-1);
  520.         }
  521.         else
  522.         {
  523.             player.controls.step(1);
  524.         }
  525.     }
  526.     else
  527.     {
  528.         g_SetPlayPauseFocus=true;
  529.         player.controls.play();
  530.     }
  531. }
  532.  
  533. function OnFFWD()
  534. {
  535.     if (player.PlayState == psScanForward)
  536.     {
  537.         player.controls.play();
  538.     }
  539.     else
  540.     {
  541.         player.controls.FastForward();
  542.     }
  543. }
  544.         
  545. function OnREW()
  546. {
  547.     if (player.PlayState == psScanReverse)
  548.     {
  549.         player.controls.play();
  550.     }
  551.     else
  552.     {
  553.         player.controls.FastReverse();
  554.     }
  555. }
  556.  
  557. function volumeOnChange()
  558. {
  559.     player.settings.mute=false;
  560. }
  561.  
  562. function muteOnClick()
  563. {
  564.     player.settings.mute = (player.settings.mute == true) ? false : true;
  565. }
  566.  
  567.  
  568. function ShowPlaybackIcon()
  569. {
  570.     g_strPlayIcon   = "WMPImage_PlaybackIcon";
  571.     g_strPlayTooltip="";
  572.     if (player.playState==psPlaying)
  573.     {
  574.         QualityIcon.image = g_strPlayIcon;
  575.         QualityIcon.upToolTip = g_strPlayTooltip;
  576.         QualityIcon.visible=true;
  577.     }
  578. }
  579.  
  580. var g_IconURL="";
  581.  
  582. function CheckForDecodingIcons()
  583. {
  584.     var HDCDMode = parseInt(player.currentPlaylist.getItemInfo("HDCDMode"));
  585.     if (HDCDMode==1)
  586.     {
  587.         g_strPlayIcon = "res://wmploc/RT_IMAGE/#1787";
  588.         g_strPlayTooltip = theme.loadString("res://wmploc/RT_STRING/#2098");
  589.         g_IconURL = mediacenter.getNamedString("HDCD_URL");
  590.         return;
  591.     }
  592.     else if (HDCDMode==2)
  593.     {
  594.         g_strPlayIcon = "res://wmploc/RT_IMAGE/#2030";
  595.         g_strPlayTooltip = theme.loadString("res://wmploc/RT_STRING/#2097");
  596.         g_IconURL = mediacenter.getNamedString("HDCD_URL");
  597.         return;
  598.     }
  599.     if (g_strPlayIcon != "WMPImage_PlaybackIcon")
  600.     {
  601.         g_strPlayIcon = "res://wmploc/RT_IMAGE/#1784";
  602.         g_strPlayTooltip = "";
  603.         g_IconURL = "";
  604.     }
  605. }
  606.  
  607.  
  608. function OnPlayStateChangeTransport(NewState)
  609. {
  610.     if ( g_psPlayState == NewState )
  611.     {
  612.         return;
  613.     }
  614.     g_psPlayState=NewState;
  615.     
  616.     switch (NewState)
  617.     {
  618.     case psUndefined:
  619.             seek.foregroundProgress = 0;
  620.             rew.down=false;
  621.             ffwd.down=false;
  622.         break;
  623.  
  624.     case psTransitioning:
  625.             rew.down=false;
  626.             ffwd.down=false;
  627.         break;            
  628.         
  629.     case psReady:
  630.             QualityIcon.visible=false;
  631.             QualityIcon.upToolTip = "";
  632.             seek.foregroundProgress = 0;
  633.             InitMetaDataCollectionIdle(true);
  634.             rew.down=false;
  635.             ffwd.down=false;
  636.         break;
  637.  
  638.     case psStopped:
  639.             QualityIcon.visible=true;
  640.             QualityIcon.image = "res://wmploc/RT_IMAGE/#2024";
  641.             QualityIcon.upToolTip = "";
  642.             InitMetaDataCollectionIdle(true);
  643.             ffwd.down=false;
  644.             rew.down=false;
  645.         break;
  646.         
  647.     case psPaused:
  648.             QualityIcon.visible=true;
  649.             QualityIcon.image = "res://wmploc/RT_IMAGE/#2023";
  650.             QualityIcon.upToolTip = "";
  651.             InitMetaDataCollectionIdle(true);            
  652.             ffwd.down=false;
  653.             rew.down=false;
  654.         break;
  655.         
  656.     case psPlaying:
  657.             ShowPlayingIcon();
  658.             ffwd.down=false;
  659.             rew.down=false;
  660.             InitMetaDataCollection(false);
  661.         break;
  662.         
  663.     case psWaiting:
  664.             rew.down=false;
  665.             ffwd.down=false;
  666.         break;
  667.         
  668.     case psScanForward:
  669.             ShowPlayingIcon();
  670.             rew.down=false;
  671.             ffwd.down=true;
  672.         break;
  673.         
  674.     case psScanReverse:
  675.             ShowPlayingIcon();
  676.             rew.down=true;
  677.             ffwd.down=false;
  678.         break;
  679.         
  680.     case psBuffering:
  681.         break;
  682.  
  683.     case psReconnecting:
  684.         break;
  685.     }
  686. }
  687.  
  688. function ShowPlayingIcon()
  689. {
  690.     var sp = player.network.sourceProtocol;
  691.     if ( (sp=="file") || (sp=="") || (g_strPlayIcon == "WMPImage_PlaybackIcon") )
  692.     {
  693.         CheckForDecodingIcons();
  694.         QualityIcon.image = g_strPlayIcon;
  695.         QualityIcon.upToolTip = g_strPlayTooltip;
  696.         QualityIcon.visible=true;
  697.     }
  698.     else
  699.     {
  700.         UpdateReceptionQuality(player.network.receptionQuality);
  701.     }
  702. }
  703.  
  704. function OnOpenStateChangeTransport(NewState)
  705. {
  706.     g_osOpenState=NewState;
  707.     switch (NewState)
  708.     {
  709.     case osUndefined:
  710.         tracktime.visible=false;
  711.         g_fIsLiveBroadcast=false;
  712.         break;
  713.         
  714.     case osPlaylistChanging:
  715.         break;
  716.  
  717.     case osPlaylistLocating:
  718.         break;
  719.  
  720.     case osPlaylistConnecting:
  721.         break;
  722.  
  723.     case osPlaylistLoading:
  724.         break;
  725.  
  726.     case osPlaylistOpening:
  727.         break;
  728.  
  729.     case osPlaylistOpenNoMedia:
  730.         break;
  731.  
  732.     case osPlaylistChanged:
  733.         break;
  734.  
  735.     case osMediaChanging:
  736.         QualityIcon.visible = false;
  737.         ResetPlayIcon();
  738.         break;
  739.  
  740.     case osMediaLocating:
  741.         QualityIcon.visible=true;
  742.         QualityIcon.image = "res://wmploc/RT_IMAGE/#1783";
  743.         QualityIcon.upToolTip="";
  744.         break;
  745.  
  746.     case osMediaConnecting:
  747.         QualityIcon.visible=true;
  748.         QualityIcon.image = "res://wmploc/RT_IMAGE/#1783"; // uses same image as Locating
  749.         QualityIcon.upToolTip="";
  750.         break;
  751.  
  752.     case osMediaLoading:
  753.         break;
  754.  
  755.     case osMediaWaiting:
  756.         g_fIsLiveBroadcast = (player.currentMedia.getItemInfo("Type") == "broadcast");
  757.         seek.enabled = !g_fIsLiveBroadcast;
  758.         break;
  759.  
  760.     case osMediaOpening:
  761.         QualityIcon.visible=true;
  762.         QualityIcon.image = "res://wmploc/RT_IMAGE/#2020";
  763.         QualityIcon.upToolTip="";
  764.         g_strPlayIcon = "res://wmploc/RT_IMAGE/#1784";
  765.         g_strPlayTooltip = "";        
  766.         break;
  767.  
  768.     case osMediaOpen: 
  769.         tracktime.visible=true;
  770.         g_fIsLiveBroadcast = (player.currentmedia.getiteminfo("Type") == "broadcast");
  771.         seek.enabled = !g_fIsLiveBroadcast;
  772.         InitMetaDataCollection(false);
  773.         break;
  774.  
  775.     case osBeginLicenseAcquisition:
  776.         break;
  777.  
  778.     case osEndLicenseAcquisition:
  779.         break;
  780.  
  781.     case osBeginIndividualization:
  782.         break;
  783.  
  784.     case osEndIndividualization:
  785.         break;
  786.  
  787.     default:
  788.         break;
  789.     }    
  790. }
  791.  
  792. function getFormattedValue(value)
  793. {
  794.     if (player.openState!=osMediaOpen)
  795.     {
  796.         return "";
  797.     }
  798.  
  799.     if (!g_kPositionFormatString)
  800.     {
  801.         g_kPositionFormatString = theme.loadString("res://wmploc/RT_STRING/#2091");
  802.     }
  803.     var currentValue;
  804.     try
  805.     {
  806.         currentValue = app.getTimeString(value);
  807.     }
  808.     catch(err)
  809.     {
  810.         currentValue = helper.getTimeString(value);
  811.     }
  812.         
  813.     var totalTime = player.currentMedia.durationString; 
  814.     var format = g_kPositionFormatString;
  815.   
  816.     format = format.replace(/%1/i, currentValue);
  817.     format = format.replace(/%2/i, totalTime);
  818.  
  819.     return format;
  820. }
  821.  
  822. function getDarkTextColor()
  823. {
  824.     return mediacenter.appColorDark;
  825. }
  826.  
  827. function getHighlightTextColor()
  828. {
  829.     return mediacenter.itemPlayingColor;
  830. }
  831.  
  832. //----------------------------------------------------------------
  833. // multi-speed fastforward logic
  834.  
  835. var g_kFastForwardRate1 = 1.4;
  836. var g_kFastForwardRate2 = 2.0;
  837. var g_kFastForwardRate3 = 5.0;
  838. var k_bw = 0
  839. var k_wb = 1
  840. var k_normal = 2;
  841. var g_hcImages;
  842.  
  843. if ( null == g_hcImages )
  844. {
  845.    g_hcImages = new Array();
  846. }
  847.  
  848. g_hcImages["ffwdGroup"] = new Array();
  849. g_hcImages["ffwdGroup"][k_bw] = 3902;
  850. g_hcImages["ffwdGroup"][k_wb] = 3903;
  851. g_hcImages["ffwdGroup"][k_normal] = 3897;
  852.  
  853. g_hcImages["ffwdGroup2"] = new Array();
  854. g_hcImages["ffwdGroup2"][k_bw] = 4084;
  855. g_hcImages["ffwdGroup2"][k_wb] = 4085;
  856. g_hcImages["ffwdGroup2"][k_normal] = 4082;
  857.     
  858. g_hcImages["ffwdGroup3"] = new Array();
  859. g_hcImages["ffwdGroup3"][k_bw] = 4086;
  860. g_hcImages["ffwdGroup3"][k_wb] = 4087;
  861. g_hcImages["ffwdGroup3"][k_normal] = 4083;
  862.  
  863.  
  864. function SyncFFWDButtonToRate(rate)
  865. {
  866.        
  867.     var cm = mediacenter.contrastMode;
  868.     
  869.     var imageIndex = k_normal;
  870.  
  871.     if ( "BW" == cm || "WB" == cm )
  872.     {
  873.         imageIndex = (cm=="BW") ? 1 : 0;
  874.         imageIndex = (cm=="BW") ? 1 : 0;
  875.     }
  876.     
  877.     var tc = player.controls.isAvailable("timeCompression");
  878.     if ( rate < g_kFastForwardRate1 )
  879.     {
  880.         ffwdGroup.downImage="res://-/#" + g_hcImages["ffwdGroup"][imageIndex];
  881.         ffwdGroup.hoverDownImage= ffwdGroup.image;
  882.         if( !tc )
  883.         {
  884.             ffwd_multi.upToolTip="res://wmploc/RT_STRING/#1804"
  885.         }
  886.         else
  887.         {
  888.             ffwd_multi.upToolTip="res://wmploc/RT_STRING/#2194"
  889.         }
  890.         ffwd_multi.down = false;
  891.     }
  892.     else if (rate < g_kFastForwardRate2)
  893.     {
  894.         ffwdGroup.downImage="res://-/#" + g_hcImages["ffwdGroup"][imageIndex];
  895.         ffwdGroup.hoverDownImage= ffwdGroup.downImage;
  896.         
  897.         if( !tc )
  898.         {
  899.             ffwd_multi.downToolTip="res://wmploc/RT_STRING/#1804"
  900.             ffwd_multi.down = false;
  901.         }
  902.         else
  903.         {
  904.             ffwd_multi.downToolTip="res://wmploc/RT_STRING/#2195"
  905.             ffwd_multi.down = true;
  906.         }
  907.     }
  908.     else if (rate < g_kFastForwardRate3)
  909.     {
  910.         if( !tc )
  911.         {
  912.             ffwd_multi.downToolTip="res://wmploc/RT_STRING/#1804"
  913.             ffwdGroup.downImage= "res://-/#" + g_hcImages["ffwdGroup"][imageIndex];
  914.             ffwdGroup.hoverDownImage= ffwdGroup.downImage;      
  915.             ffwd_multi.down = false;
  916.         }
  917.         else
  918.         {
  919.             ffwdGroup.downImage= "res://-/#" + g_hcImages["ffwdGroup2"][imageIndex];
  920.             ffwdGroup.hoverDownImage= ffwdGroup.downimage;            
  921.             ffwd_multi.downToolTip="res://wmploc/RT_STRING/#2196"
  922.             ffwd_multi.down = true;
  923.         }
  924.     }
  925.     else
  926.     {
  927.         if( !tc )
  928.         {
  929.             ffwdGroup.downImage= "res://-/#" + g_hcImages["ffwdGroup"][imageIndex];
  930.             ffwdGroup.hoverDownImage= ffwdGroup.downImage;       
  931.         }
  932.         else
  933.         {
  934.             ffwdGroup.downImage= "res://-/#" + g_hcImages["ffwdGroup3"][imageIndex];
  935.             ffwdGroup.hoverDownImage= ffwdGroup.downimage;
  936.         }
  937.         ffwd_multi.downToolTip="res://wmploc/RT_STRING/#1818"
  938.         ffwd_multi.down = true;
  939.     }
  940. }
  941.  
  942. function OnFFWDMultiSpeed()
  943. {
  944.     var tc = player.controls.isAvailable("timeCompression");
  945.     var rate = player.settings.rate;
  946.  
  947.     if (rate < g_kFastForwardRate1 && tc)
  948.     {
  949.         player.settings.rate=g_kFastForwardRate1;
  950.     }
  951.     else if (rate<g_kFastForwardRate2 && tc)
  952.     {
  953.         player.settings.rate=g_kFastForwardRate2;
  954.     }
  955.     else if (rate<g_kFastForwardRate3)
  956.     {
  957.         player.settings.rate=g_kFastForwardRate3;
  958.     }
  959.     else
  960.     {
  961.         player.settings.rate=1;
  962.     }
  963. }
  964.  
  965. var g_trackTimeFormat = parseInt(theme.loadPreference("TrackTimeFormat")); //0 is normal, 1 is current/total, and 2 is counting down
  966. if (isNaN(g_trackTimeFormat)) g_trackTimeFormat=0;
  967. var g_totalTrackTimeFormats = 3;
  968. function SaveTracktimeFormat()
  969. {
  970.     theme.savePreference("TrackTimeFormat", g_trackTimeFormat);
  971. }
  972.  
  973. function RotateTrackTimeFormats()
  974. {
  975.     if (isNaN(g_trackTimeFormat)) g_trackTimeFormat=0;
  976.     g_trackTimeFormat = (g_trackTimeFormat+1)%g_totalTrackTimeFormats;
  977.     UpdateTrackTime();
  978. }
  979.  
  980. function UpdateTrackTime()
  981. {
  982.     switch (g_trackTimeFormat)
  983.     {
  984.         //normal mode
  985.         case 0:
  986.             tracktime.value = player.controls.currentPositionString;
  987.             return;
  988.         //current / total mode
  989.         case 1:
  990.             tracktime.value = WMPStringsFunction_GetPositionText();
  991.             return;
  992.         //counting backwards mode
  993.         case 2:
  994.             var dur = player.currentMedia.duration;
  995.             if ( dur>0 )
  996.             {
  997.                 var curPos = player.controls.currentPosition;
  998.                 if (dur>=curPos)
  999.                 {
  1000.                     tracktime.value = helper.getTimeString(dur - curPos);
  1001.                     return
  1002.                 }
  1003.             }
  1004.             break;
  1005.     }
  1006.     tracktime.value = player.controls.currentPositionString;
  1007. }
  1008.  
  1009. function DoShuffleClick()
  1010. {
  1011.     var shuffle=player.settings.getMode("shuffle");
  1012.     var loop=player.settings.getMode("loop");
  1013.     
  1014.     if (shuffle)
  1015.     {
  1016.         player.settings.setMode("shuffle",false);
  1017.         if (loop)
  1018.         {
  1019.             player.settings.setMode("loop",false);
  1020.         }
  1021.         else
  1022.         {
  1023.             player.settings.setMode("loop",true);
  1024.         }
  1025.     }
  1026.     else
  1027.     {
  1028.         player.settings.setMode("shuffle",true);
  1029.     }
  1030.     UpdateShuffleRepeat();
  1031. }
  1032.  
  1033. function UpdateShuffleRepeat()
  1034. {
  1035.     var shuffle=player.settings.getMode("shuffle");
  1036.     var loop=player.settings.getMode("loop");
  1037.     
  1038.     if (shuffle)
  1039.     {
  1040.         if (loop)
  1041.         {
  1042.             shuffle_repeat.image="res://-/#4571"; //shuffle+repeat
  1043.             shuffle_repeat_element.upToolTip="res://wmploc/RT_STRING/#4574";
  1044.         }
  1045.         else
  1046.         {
  1047.             shuffle_repeat.image="res://-/#4570";  //shuffle
  1048.             shuffle_repeat_element.upToolTip="res://wmploc/RT_STRING/#1816";
  1049.         }
  1050.     }
  1051.     else
  1052.     {
  1053.         if (loop)
  1054.         {
  1055.             shuffle_repeat.image="res://-/#4569"; //repeat
  1056.             shuffle_repeat_element.upToolTip="res://wmploc/RT_STRING/#4573";
  1057.         }
  1058.         else
  1059.         {
  1060.             shuffle_repeat.image="res://-/#4568"; //off
  1061.             shuffle_repeat_element.upToolTip="res://wmploc/RT_STRING/#1814";
  1062.         }
  1063.     }
  1064. }
  1065.  
  1066.