home *** CD-ROM | disk | FTP | other *** search
/ PC World 2002 December / PCWorld_2002-12_cd.bin / Software / Topware / wmp99xrc / mpsetup.exe / wmploc.DLL / HTML / DATALOAD.HTC < prev    next >
Encoding:
Text File  |  2002-10-28  |  8.2 KB  |  360 lines

  1. <PUBLIC:COMPONENT lightWeight=true>
  2. <PUBLIC:METHOD NAME="getDataAsync" />
  3. <PUBLIC:METHOD NAME="getDataAsyncAlbum" />
  4. <PUBLIC:METHOD NAME="getDataAsyncAlbumList" />
  5. <PUBLIC:METHOD NAME="getDataAsyncHeadline" />
  6. <PUBLIC:METHOD NAME="getDataAsyncHeadlineList" />
  7. <PUBLIC:METHOD NAME="getNodeText" />
  8. <PUBLIC:METHOD NAME="getSubNode" />
  9. <PUBLIC:METHOD NAME="saveIDs" />
  10. <PUBLIC:METHOD NAME="Stop" />
  11. <PUBLIC:METHOD NAME="setNoData" />
  12. <PUBLIC:METHOD NAME="setNoMedia" />
  13. <PUBLIC:METHOD NAME="buildNoData" />
  14. <PUBLIC:METHOD NAME="getUrl" />
  15.  
  16. <PUBLIC:PROPERTY NAME="AID" />
  17. <PUBLIC:PROPERTY NAME="PID" />
  18. <PUBLIC:PROPERTY NAME="MSIDAlbum" />
  19. <PUBLIC:PROPERTY NAME="MSIDPerson" />
  20.  
  21. <SCRIPT LANGUAGE="JScript">
  22. var sPID, sAID;
  23.  
  24. var aDataCache = new Array();
  25. var aPreCacheList = new Array('info_home', 'info_artistinfo', 'info_albuminfo_bcd', 'info_relatedalbums', 'info_artistbio', 'info_latestreleases', 'info_albumreview', 'info_relatedartists', 'info_relatedradio');
  26. var sPreCacheKey = '', iPreCacheCurrent = 0;
  27.  
  28. function getDataAsync2(sPage, sPageForCache, fnCallback, sParam)
  29.     var sTOC = element.document.all('toc').innerText, sContentID = element.document.all('contentid').innerText, sCollectionID, sGenre;
  30.     sCollectionID = element.document.all('collectionid').innerText;
  31.     sGenre = element.document.all('genretext').innerText;
  32.     
  33.     if (sTOC.length || sContentID.length)
  34.         getDataExAsync(sPage, sPageForCache,
  35.             '&toc=' + sTOC + '&content_id=' + sContentID + '&a_id=' + AID + '&p_id=' + PID + '&msid_person=' + MSIDPerson + '&msid_album=' + MSIDAlbum + '&genre=' + sGenre + sParam, 
  36.             fnCallback,
  37.             sTOC + ':' + sCollectionID + ':' + sParam);
  38.     else
  39.     {
  40.         var p = element.document.all('player')
  41.         if (!p.currentMedia) 
  42.             setNoMedia();
  43.         else
  44.             setToclessMedia();
  45.     }
  46. }
  47.  
  48. function getDataAsyncAlbum(sPage, fnCallback, sParam)
  49.     getDataExAsync(sPage, sPage, '&a_id=' + sParam, fnCallback, '');
  50. }
  51.  
  52. function getDataAsyncAlbumList(sPage, fnCallback, sParam)
  53.     getDataAsync2(sPage, sPage + sParam, fnCallback, '&type=' + sParam);
  54. }
  55.  
  56. function getDataAsyncHeadline(sPage, fnCallback, sParam)
  57.     getDataExAsync(sPage, sPage, '&article_id=' + sParam, fnCallback, sParam);
  58. }
  59.  
  60. function getDataAsyncHeadlineList(sPage, fnCallback)
  61.     getDataAsync2(sPage, sPage, fnCallback, '');
  62. }
  63.  
  64. function getDataAsync(sPage, fnCallback)
  65.     getDataAsync2(sPage, sPage, fnCallback, '');
  66. }
  67.  
  68.  
  69. function saveIDs(oXML)
  70. {
  71.     var sTemp;
  72.     
  73.     sTemp = getNodeText(oXML, 'a_id');
  74.     if (sTemp.length > 0)
  75.         AID = sTemp;
  76.         
  77.     sTemp = getNodeText(oXML, 'p_id');
  78.     if (sTemp.length > 0)
  79.         PID = sTemp;
  80.         
  81.     sTemp = getNodeText(oXML, 'msid_person');
  82.     if (sTemp.length > 0)
  83.         MSIDPerson = sTemp;
  84.  
  85.     sTemp = getNodeText(oXML, 'msid_album');
  86.     if (sTemp.length > 0)
  87.         MSIDAlbum = sTemp;
  88.  
  89. }
  90.  
  91.  
  92. var oXMLCurrent = null, oCurrentData = null, iBadUrl = 0, iNoCallback = 0;
  93. function Callback()
  94. {
  95.     if (oXMLCurrent)
  96.     {        
  97.         if (oXMLCurrent.readyState == 4)
  98.         {
  99.             if (oCurrentData && oCurrentData.pfn)
  100.             {
  101.                 if (oCurrentData.url == oXMLCurrent.url)
  102.                 {
  103.                     if (oXMLCurrent.parseError.errorCode != 0)
  104.                         setServerError(oXMLCurrent.parseError);
  105.                     else
  106.                     {
  107.                         oCurrentData.pfn(oXMLCurrent);
  108.                         addAttribution(oXMLCurrent);
  109.                     }
  110.                 }
  111.                 else
  112.                     setInternalError();
  113.             }
  114.             else
  115.                 setInternalError();
  116.         }
  117.     }
  118. }
  119.  
  120. function addAttribution(oXML)
  121. {
  122.     var aProviders = oXML.getElementsByTagName('Attribution'), i, oP, oFooter = element.document.all('footer');
  123.     for (i = 0; i < aProviders.length; i++)
  124.         oFooter.addProvider(getNodeText(aProviders[i], 'ProviderName'));
  125. }
  126.  
  127. function Stop()
  128. {
  129.     oCurrentData = null;
  130.     oXMLCurrent = null;
  131. }
  132.  
  133. function getXMLUrl(sPage, sParams, sVersion)
  134. {
  135.     return 'http://windowsmedia.com/redir/servedocument.asp?locale=' + L_CurrentLocale_Text + '&version=' + sVersion + '&doc=' + sPage + sParams;
  136. }
  137.  
  138. var sVersion = '';
  139. function IsDataAccessAllowed()
  140. {
  141.     var fGetData = false;
  142.     p = element.document.all('player')
  143.     if (p && p.isOnline)
  144.     {
  145.         ex = window.external;
  146.         if (ex)
  147.         {
  148.             if (ex.appColorMedium)
  149.             {
  150.                 if (ex.IsAutoMetadataDownloadAllowed())
  151.                     fGetData = true;
  152.             }
  153.             else
  154.                 fGetData = true;
  155.         }
  156.         if (!p.currentMedia) 
  157.         {
  158.             setNoMedia();
  159.             return false;
  160.         }
  161.         if (sVersion == '')
  162.             sVersion = p.versionInfo;
  163.     }
  164.     else
  165.     {
  166.         setOffline();
  167.         return false;
  168.     }
  169.     return fGetData
  170. }
  171.  
  172. var iCacheCount = 0, iNoCache = 0;
  173. function getDataExAsync(sPage, sPageForCache, sParams, fnCallback, sCacheKey)
  174. {
  175.     var oXML, oCache, fDoDownload;
  176.  
  177.     Stop();
  178.     if (IsDataAccessAllowed())
  179.     {
  180.         var sUrl = getXMLUrl(sPage, sParams, sVersion);
  181.  
  182.         oCache = aDataCache[sPageForCache];
  183.         fDoDownload = true;
  184.         if (oCache)
  185.         {
  186.             if (sCacheKey.length && (oCache.key == sCacheKey))
  187.             {
  188.                 if (oCache.xml)
  189.                 {
  190.                     oXML = oCache.xml;
  191.                     oCache.url = oXML.url;
  192.                     fDoDownload = false;
  193.                 }
  194.             }
  195.         }
  196.  
  197.         if (fDoDownload)
  198.         {        
  199.             iNoCache++;
  200.             oXMLCurrent = getXMLData(sUrl, Callback);
  201.  
  202.             oCache = CreateCacheEntry(sCacheKey, oXMLCurrent, sUrl, fnCallback)
  203.             if (sCacheKey.length)
  204.                 aDataCache[sPageForCache] = oCache;
  205.                 
  206.             oCurrentData = oCache;
  207.         }
  208.         else
  209.         {
  210.             oCache.pfn = fnCallback;
  211.             oCurrentData = oCache;
  212.             iCacheCount++;
  213.             oXMLCurrent = oXML;
  214.             if (oXML.readyState == 4)
  215.                 window.setTimeout(Callback, 0);
  216.         }
  217.     }
  218.     else
  219.         setPrivacy()
  220. }
  221.  
  222. function getXMLData(sUrl, fnCallback)
  223. {
  224.     var oXML = new ActiveXObject('Microsoft.XMLDOM');
  225.  
  226.     element.innerText = sUrl;
  227.     oXML.async = true;
  228.     oXML.onreadystatechange = fnCallback;
  229.     oXML.load(sUrl);
  230. //    window.open(sUrl, "new");
  231.     return oXML;
  232. }
  233.  
  234. function CreateCacheEntry(sKey, oXML, sUrl, pfnCallback)
  235. {
  236.     var oCache = new Object();
  237.     oCache.key = sKey;
  238.     oCache.xml = oXML;
  239.     oCache.url = sUrl;
  240.     oCache.pfn = pfnCallback;
  241.     return oCache;
  242. }
  243.  
  244. function setOffline()
  245. {
  246.     setNoData(L_Offline_Text, 'images\\album-review.gif', false);
  247. }
  248.  
  249. function setPrivacy()
  250. {
  251.     setNoData(L_NetAccessOff_Text, 'images\\album-review.gif', false);
  252. }
  253.  
  254. function setNoMedia()
  255. {
  256.     setNoData(L_NoMediaSelected_Text, 'images\\album-review.gif', false);
  257. }
  258.  
  259. function setToclessMedia()
  260. {
  261.     if (IsMediaStream())
  262.         setNoMedia();
  263.     else
  264.         setNoData(L_NoDataAvailable_Text, 'images\\album-review.gif', true);
  265. }
  266.  
  267. function setServerError(oError)
  268. {
  269.     setNoData(L_ServerError_Text + '<br><br>' + oError.reason, 'images\\album-review.gif', false);
  270. }
  271.  
  272. function setInternalError()
  273. {
  274.     setNoData(L_ServerError_Text, 'images\\album-review.gif', false);
  275. }
  276.  
  277. function buildNoData(sText, sImage, fDoWizard)
  278. {
  279.     var s = '<table border=0 cellpadding=0 cellspacing=0><tr>';
  280.     s += '<td width=140 valign=top><img border=0 src="' + sImage + '"></td><td width=8></td><td valign=top class=nodata>';
  281.     if (fDoWizard && IsWizardAvailable())
  282.         s += '<A href="X" class=nodata onclick="window.external.EditMetadata(); return false;">' + sText + '</A></td>';
  283.     else
  284.         s += sText + '<td>';
  285.     return s + '</tr></table>';
  286. }
  287.  
  288. var sHTML;
  289. function sendNoData()
  290. {
  291.     var oP = getCurrentPage();
  292.  
  293.     if (oP && (oP.readyState == 'complete'))
  294.         oP.noData(sHTML);
  295. }
  296.  
  297. function setNoData(sText, sImage, fDoWizard)
  298. {
  299.     sHTML = buildNoData(sText, sImage, fDoWizard);
  300.     window.setTimeout(sendNoData, 1);
  301. }
  302.  
  303. function getNodeText(oXML, sNode)
  304. {
  305.     if (oXML)
  306.     {
  307.         var oObj = oXML.getElementsByTagName(sNode);
  308.         if (oObj.length > 0)
  309.             return oObj[0].text
  310.     }
  311.     return '';
  312. }
  313.  
  314. function getSubNode(oXML, sNode)
  315. {
  316.     var oObj = oXML.getElementsByTagName(sNode);
  317.     return oObj;
  318. }
  319.  
  320. var aTokens = new Array();
  321. aTokens[0] = '';
  322. aTokens[1] = 'file://';
  323. aTokens[2] = 'ftp://';
  324. aTokens[3] = 'http://';
  325. aTokens[4] = 'https://';
  326. aTokens[5] = 'http://www.';
  327. aTokens[6] = 'https://www.';
  328. aTokens[7] = 'news://';
  329. aTokens[8] = 'res://';
  330. aTokens[9] = 'mms://';
  331.  
  332. function getUrl(o)
  333. {
  334.     var iToken, sSite, sPath, sPre;
  335.  
  336.     sSite = getNodeText(o, 'Server');
  337.     if (sSite.length)
  338.     {
  339.         iToken = parseInt(getNodeText(o, 'Token'));
  340.         if ((iToken < 0) || (iToken >= aTokens.length))
  341.             iToken = 0;
  342.             
  343.         sPre = getNodeText(o, 'PrePath');
  344.         sSite = getNodeText(o, 'Server');
  345.         sPath = getNodeText(o, 'FilePath');
  346.         
  347.         return aTokens[iToken] + sPre + sSite + sPath;
  348.     }
  349.     else
  350.         return '';
  351. }
  352. </SCRIPT>
  353. </PUBLIC:COMPONENT>
  354.