home *** CD-ROM | disk | FTP | other *** search
/ PC Advisor 2005 August / PCADVD_121.iso / internet / nsb-setup.exe / chrome / browser.jar / content / browser / pref / pref-sitecontrols.js < prev    next >
Encoding:
Text File  |  2005-04-29  |  23.1 KB  |  732 lines

  1. const DEBUG_SITECONTROLS_PANEL = false;
  2.  
  3. var kSITEPREF = 'browser.preferences.selectedSite';
  4. var siteList = null;
  5. var _elementIDs = [ 'trustRatingsAuto_default', 'useTrustRatings', 'trustRatingsAuto',
  6.                     'displayWarnings', 'updateInterval', 
  7.                     'showBlockedCount', 'playBlockedSound', 'showEngineIcon' ];
  8.  
  9. var controlledFields = [ 'displayEngine', 'displayEngine_Gecko', 'displayEngine_Trident',
  10.                          'allowPopups', 'requestedPopupsInTab',
  11.                          'allowImages', 'imagesFromOrigOnly',
  12.                          'enableActiveX', 'enableJava', 'enableJavaScript',
  13.                          'jsMoveResize', 'jsRaiseLower', 'jsContextMenu',
  14.                          'jsHideStatusBar', 'jsStatusBarText', 'jsChangeImages',
  15.                          'allowCookies', 'cookiesFromOrigOnly' ];
  16. //'showBlockedCount', 'playBlockedSound',
  17. var controlledButtons = [ 'advancedJavaScript' ];
  18. //                'viewCookies', 'clearCookies' ];
  19. //'viewPasswords', 'clearPasswords',
  20. var bFormDisabled = false;
  21. var gPrefTabsSelectInit = false;
  22.  
  23. /**
  24.  * Initialize the Site Controls prefs panel
  25.  **/
  26. function Startup() {
  27.     debug('Startup()');
  28.  
  29.     if (!sitecontrols.SCSVC) {
  30.         alert('Site Controls service was not initiallized!');
  31.         return;
  32.     }
  33.  
  34.     // This should ensure that the sitecontrols object stays around
  35.     // even when switching between panels
  36.     if ('sitecontrols' in window.top) sitecontrols = window.top.sitecontrols;
  37.     else window.top.sitecontrols = sitecontrols;
  38.  
  39.     disableForm();
  40.     setTimeout('delayedStartup()', 100);
  41. }
  42.  
  43. function delayedStartup() {
  44.     siteList = document.getElementById('siteList');
  45.     RefreshTree();
  46.  
  47.     // See if there is a current site we should auto-select
  48.     var currentSite = null;
  49.     var controlledSite = null;
  50.     try {
  51.         currentSite = sitecontrols.PREF.getCharPref(kSITEPREF);
  52.         controlledSite = sitecontrols.getControlledSiteFromHost(currentSite);
  53.         debug('currentSite: '+currentSite+' controlledSite: '+controlledSite);
  54.     } catch(ex) { }
  55.     if (controlledSite) {
  56.         // See if the current starting host exists in our list
  57.         var thisSite = getSiteAtIndex(0);
  58.         var found = false;
  59.         var i = 0;
  60.         while (!found && thisSite) {
  61.             if (thisSite == controlledSite) {
  62.                 debug('matched: '+thisSite);
  63.                 siteList.tree.view.selection.select(i);
  64.                 found = true;
  65.                 break;
  66.             }
  67.             i++;
  68.             thisSite = getSiteAtIndex(i);
  69.         }
  70.         if (!found) {
  71.             debug('no match for '+controlledSite+' - using default');
  72.             siteList.tree.view.selection.select(0);
  73.         }
  74.     } else {
  75.         // Just select the first item, which will be 'Default'
  76.         siteList.tree.view.selection.select(0);
  77.     }
  78.  
  79.     parent.hPrefWindow.registerOKCallbackFunc(onSiteControlsOK);
  80.  
  81.     document.updateSiteControl = updateSiteControl;
  82.     
  83.     gPrefTabsSelectInit = true;
  84.     SetPrefTabs();
  85.  
  86.     // need to force this radio selection because nested radiogroup don't behave properly
  87.     var prefService = Components.classes["@mozilla.org/preferences-service;1"]
  88.                                 .getService(Components.interfaces.nsIPrefBranch);
  89.     var trustPref = prefService.getBoolPref("trustsettings.partnerratings");
  90.     if(!trustPref) {
  91.         document.getElementById('useTrustRatings_no').setAttribute('selected', 'true');
  92.     }
  93.  
  94.     enableDisableTrustRatings();
  95.     document.getElementById('trustRatingsNo_default').selectedIndex =
  96.         document.getElementById('trustRatingsAuto_default').selectedIndex;
  97.  
  98.     // MERC - JCH: Set the following check boxes: pop-up blocking sound, pop-up blocking count,
  99.     // and show engine icon on status bar. These values are not site-specific.
  100.     if (prefService != null) {
  101.         document.getElementById('showBlockedCount').checked = 
  102.             prefService.getBoolPref("privacy.popups.show_count");
  103.  
  104.         document.getElementById('playBlockedSound').checked = 
  105.             prefService.getBoolPref("privacy.popups.sound_enabled");
  106.  
  107.         document.getElementById('showEngineIcon').checked = 
  108.             prefService.getBoolPref("browser.show_engine_icon");
  109.     }
  110. }
  111.  
  112. /**
  113.  * Refresh the site list tree from the internal datasource
  114.  **/
  115. function RefreshTree() {
  116.     debug('RefreshTree()');
  117.     var datasources = siteList.db.GetDataSources();
  118.     while (datasources.hasMoreElements()) {
  119.         var ds = datasources.getNext();
  120.  
  121.         try {
  122.             ds.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource);
  123.             ds.Refresh(true);
  124.         } catch (ex) {
  125.             // This probably means the resource is not there because the
  126.             // list is filtered... do nothing
  127.         }
  128.     }
  129.  
  130.     // MERC - JCH: Needed to get the merged datasource instead of 
  131.     // just the profile datasource
  132.     //sitecontrols.SCSVC.startMergeDefaultSiteControls();
  133.     //sitecontrols.SCSVC.removeNegativeEntriesFromDataSource();
  134.     //sitecontrols.SCSVC.loadData();
  135.  
  136.     siteList.tree.builder.rebuild();
  137.     siteList.refreshList();
  138. }
  139.  
  140. // Make sure the MasterListSelection and SiteListSelection functions are
  141. // mutually exclusive
  142. var selectionMutex = 0;
  143. var selectedTree = null;
  144.  
  145. function MasterListSelection(index) {
  146.     if (index < 0) return;
  147.  
  148.     // Respect mutex
  149.     if (selectionMutex) return;
  150.     // Establish mutex
  151.     selectionMutex++;
  152.  
  153.     selectedTree = document.getElementById('masterList');
  154.  
  155.     debug('[][][] MasterListSelection('+index+')');
  156.  
  157.     // Clear the selection in the sitelist tree
  158.     siteList.tree.view.selection.clearSelection();
  159.  
  160.     var selectedItem = document.getElementById('masterList').view.getItemAtIndex(index);
  161.     var site = selectedItem.firstChild.firstChild.getAttribute('value');
  162.     loadSite(site);
  163.  
  164.     // Release mutex
  165.     selectionMutex--;
  166. }
  167.  
  168. /**
  169.  * Handler for selection of a site in the site list
  170.  **/
  171. function SiteListSelection(index) {
  172.     if (index < 0) return;
  173.     var site = getSiteAtIndex(index);
  174.     if (site == null) return;
  175.  
  176.     // Respect mutex
  177.     if (selectionMutex) return;
  178.     // Establish mutex
  179.     selectionMutex++;
  180.  
  181.     selectedTree = siteList.tree;
  182.  
  183.     debug('[][][] SiteListSelection('+index+')');
  184.  
  185.     // Clear the selection in the masterList tree
  186.     document.getElementById('masterList').view.selection.clearSelection();
  187.  
  188.     loadSite(site);
  189.  
  190.     // Remember which site is currently selected
  191.     sitecontrols.PREF.setCharPref(kSITEPREF, getSelectedSite());
  192.  
  193.     // Release mutex
  194.     selectionMutex--;
  195. }
  196.  
  197. /**
  198.  * Print debug output to the console
  199.  **/
  200. function debug(msg) {
  201.     if (DEBUG_SITECONTROLS_PANEL)
  202.         dump('pref-sitecontrols.js: '+msg+'\n');
  203. }
  204.  
  205. /**
  206.  * Return the name of the site at the specified index in the site list
  207.  **/
  208. function getSiteAtIndex(index) {
  209.     if (index < 0) return null;
  210.     var siteRes;
  211.     try {
  212.         siteRes = siteList.tree.view.getResourceAtIndex(index);
  213.     } catch (ex) {
  214.         return null;
  215.     }
  216.     if (!siteRes) return null;
  217.     var titleProp = sitecontrols.RDF.GetResource(sitecontrols.SC_NS+'title');
  218.     var titleRes = sitecontrols.SCDS.GetTarget(siteRes, titleProp, true);
  219.     var titleLit = titleRes.QueryInterface(Components.interfaces.nsIRDFLiteral);
  220.     return titleLit.Value;
  221. }
  222.  
  223. /**
  224.  * Return the name of the currently selected site
  225.  **/
  226. function getSelectedSite() {
  227.     if (selectedTree == siteList.tree)
  228.         return getSiteAtIndex(siteList.tree.currentIndex);
  229.     else {
  230.         var ml = selectedTree;
  231.         var item = ml.view.getItemAtIndex(ml.currentIndex);
  232.         return item.firstChild.firstChild.getAttribute('value');
  233.     }
  234. }
  235.  
  236. /**
  237.  * Load all of the site control values for the specified site into the UI
  238.  **/
  239. function loadSite(site) {
  240.     if (site) {
  241.         if (bFormDisabled) enableForm();
  242.     } else {
  243.         disableForm();
  244.         return;
  245.     }
  246.  
  247.     //var site = getSiteAtIndex(index);
  248.     debug('loadSite('+site+')');
  249.     //document.getElementById('sitegroupcaption').label = site+' Controls';
  250.     var sc = sitecontrols.SCSVC;
  251.  
  252.     var displayEngine = sc.readSiteControl(site,'displayEngine');
  253.     debug('displayEngine: '+displayEngine);
  254.     document.getElementById('displayEngine').selectedIndex = (displayEngine=='Gecko')?0:1;
  255.  
  256.     var allowPopups = sc.readSiteControl(site,'allowPopups');
  257.     debug('allowPopups: '+allowPopups);
  258.     document.getElementById('allowPopups').checked = eval(allowPopups);
  259.  
  260.     var requestedPopupsInTab = sc.readSiteControl(site,'requestedPopupsInTab');
  261.     debug('requestedPopupsInTab: '+requestedPopupsInTab);
  262.     document.getElementById('requestedPopupsInTab').checked = eval(requestedPopupsInTab);
  263.  
  264.     var allowImages = sc.readSiteControl(site,'allowImages');
  265.     debug('allowImages: '+allowImages);
  266.     document.getElementById('allowImages').checked = eval(allowImages);
  267.  
  268.     if (displayEngine=='Gecko') {
  269.         var imagesFromOrigOnly = sc.readSiteControl(site,'imagesFromOrigOnly');
  270.         debug('imagesFromOrigOnly: '+imagesFromOrigOnly);
  271.         document.getElementById('imagesFromOrigOnly').checked = eval(imagesFromOrigOnly);
  272.         document.getElementById('imagesFromOrigOnly').disabled = false;
  273.     } else {
  274.         var imagesFromOrigOnly = sc.readSiteControl(site,'imagesFromOrigOnly');
  275.         debug('imagesFromOrigOnly: '+imagesFromOrigOnly);
  276.         document.getElementById('imagesFromOrigOnly').checked = false;
  277.         document.getElementById('imagesFromOrigOnly').disabled = true;
  278.     }
  279.     
  280.     var enableActiveX = sc.readSiteControl(site,'enableActiveX');
  281.     debug('enableActiveX: '+enableActiveX);
  282.     document.getElementById('enableActiveX').checked = eval(enableActiveX);
  283.     
  284.     var enableJava = sc.readSiteControl(site,'enableJava');
  285.     debug('enableJava: '+enableJava);
  286.     document.getElementById('enableJava').checked = eval(enableJava);
  287.  
  288.     var enableJavaScript = sc.readSiteControl(site,'enableJavaScript');
  289.     debug('enableJavaScript: '+enableJavaScript);
  290.     document.getElementById('enableJavaScript').checked = eval(enableJavaScript);
  291.     //document.getElementById('enableJavaScript').setAttribute('label',
  292.     //    (displayEngine=='Gecko')?'Enable JavaScript':'Enable JavaScript/VBScript');
  293.  
  294.     var jsMoveResize = sc.readSiteControl(site,'jsMoveResize');
  295.     debug('jsMoveResize: '+jsMoveResize);
  296.     document.getElementById('jsMoveResize').checked = eval(jsMoveResize);
  297.  
  298.     var jsRaiseLower = sc.readSiteControl(site,'jsRaiseLower');
  299.     debug('jsRaiseLower: '+jsRaiseLower);
  300.     document.getElementById('jsRaiseLower').checked = eval(jsRaiseLower);
  301.  
  302.     var jsContextMenu = sc.readSiteControl(site,'jsContextMenu');
  303.     debug('jsContextMenu: '+jsContextMenu);
  304.     document.getElementById('jsContextMenu').checked = eval(jsContextMenu);
  305.  
  306.     var jsHideStatusBar = sc.readSiteControl(site,'jsHideStatusBar');
  307.     debug('jsHideStatusBar: '+jsHideStatusBar);
  308.     document.getElementById('jsHideStatusBar').checked = eval(jsHideStatusBar);
  309.  
  310.     var jsStatusBarText = sc.readSiteControl(site,'jsStatusBarText');
  311.     debug('jsStatusBarText: '+jsStatusBarText);
  312.     document.getElementById('jsStatusBarText').checked = eval(jsStatusBarText);
  313.  
  314.     var jsChangeImages = sc.readSiteControl(site,'jsChangeImages');
  315.     debug('jsChangeImages: '+jsChangeImages);
  316.     document.getElementById('jsChangeImages').checked = eval(jsChangeImages);
  317.  
  318. /*
  319.     var rememberPasswords = sc.readSiteControl(site,'rememberPasswords');
  320.     debug('rememberPasswords: '+rememberPasswords);
  321. // document.getElementById('rememberPasswords').checked = eval(rememberPasswords);        // MERC JVL
  322. */
  323.  
  324.     var allowCookies = sc.readSiteControl(site,'allowCookies');
  325.     debug('allowCookies: '+allowCookies);
  326.     document.getElementById('allowCookies').checked = eval(allowCookies);
  327.  
  328.     var cookiesFromOrigOnly = sc.readSiteControl(site,'cookiesFromOrigOnly');
  329.     debug('cookiesFromOrigOnly: '+cookiesFromOrigOnly);
  330.     document.getElementById('cookiesFromOrigOnly').checked = eval(cookiesFromOrigOnly);
  331.  
  332.     imagesChange();
  333.     cookiesChange();
  334.     engineChange();
  335.  
  336.     //checkSoundAndCount();  // MERC - JCH
  337.  
  338.     //updateClearPasswordsButton();
  339.     //updateClearCookiesButton();
  340. }
  341.  
  342.  
  343.  
  344. // MERC - JCH: When either the sound or count checkbox is 
  345. // changed, set the corresponding pref settings.
  346. // NOTE: This is currently not used BUT you never know
  347. // when sound and count will be reverted to a per site basis
  348. function onSoundCountChanged(event) {
  349.  
  350.     var targetId = event.target.getAttribute("id");
  351.  
  352.     var cval = document.getElementById(targetId).checked;
  353.  
  354.     var prefs = GetPreferencesInterface();
  355.     if (prefs == null)
  356.         return;
  357.     
  358.     var pstr = event.target.getAttribute("prefstring");
  359.     prefs.setBoolPref(pstr,cval);
  360.  
  361.     event.preventBubble();
  362.     return;
  363. }
  364.  
  365. function disableForm() {
  366.     debug('disableForm()');
  367.     for (var f = 0; f < controlledFields.length; f++) {
  368.         disableId(controlledFields[f]);
  369.     }
  370.     for (var b = 0; b < controlledButtons.length; b++) {
  371.         disableId(controlledButtons[b]);
  372.     }
  373.     bFormDisabled = true;
  374. }
  375.  
  376. function enableForm() {
  377.     debug('enableForm()');
  378.     for (var f = 0; f < controlledFields.length; f++) {
  379.         enableId(controlledFields[f]);
  380.     }
  381.     for (var b = 0; b < controlledButtons.length; b++) {
  382.         enableId(controlledButtons[b]);
  383.     }
  384.     bFormDisabled = false;
  385. }
  386.  
  387. function filterCommand(value) {
  388.     siteList.refreshList(value);
  389.     if (siteList.tree.currentIndex == -1)
  390.         disableForm();
  391. }
  392.  
  393. function updateClearPasswordsButton() {
  394.     // Clear Passwords button disabled?
  395.     debug('updateClearPasswordsButton()');
  396.     var passwordManager = Components.classes["@mozilla.org/passwordmanager;1"]
  397.                                     .getService(Components.interfaces.nsIPasswordManager);
  398.     var e = passwordManager.enumerator;
  399.     var selectedSite = getSelectedSite();
  400.     var shouldDisable = "true";
  401.     while (e.hasMoreElements()) {
  402.         var thisPasswd = e.getNext();
  403.         thisPasswd = thisPasswd.QueryInterface(Components.interfaces.nsIPassword);
  404.         debug('selectedSite: '+selectedSite+'  checking against: '+thisPasswd.host);
  405.         if (thisPasswd.host == selectedSite) {
  406.             shouldDisable = "false";
  407.             break;
  408.         }
  409.     }
  410.     //document.getElementById('clearPasswords').setAttribute('disabled', shouldDisable);
  411. }
  412.  
  413. /**
  414.  * Update the internal datasource with values from the UI
  415.  **/
  416. function updateSiteControl(obj) {
  417.     var site = getSelectedSite();
  418.     if (!site) return;
  419.  
  420.     var control = obj.id;
  421.     var value;
  422.     if (obj.localName == 'checkbox') {
  423.         value = (obj.checked) ? 'true' : 'false';
  424.     } else {
  425.         value = obj.value;
  426.     }
  427.  
  428.     debug("updateSiteControl('"+site+"','"+control+"','"+value+"')");
  429.     sitecontrols.SCSVC.updateSiteControl(site, control, value);
  430.  
  431.     if (selectedTree == siteList.tree) {
  432.         sitecontrols.SCSVC.updateSiteControl(site, "securityLevel", "Custom");    
  433.     }
  434.  
  435.     loadSite(site);
  436. }
  437.  
  438. /**
  439.  * Handle prefs window OK button press
  440.  **/
  441. function onSiteControlsOK() {
  442.     //debug('onSiteControlsOK()');
  443.     //sitecontrols.dumpRDF();
  444.     //window.top.sitecontrols.SCSVC.writeSiteControls();
  445.  
  446.     if (!document.getElementById('showBlockedCount') || 
  447.         !document.getElementById('playBlockedSound') ||
  448.         !document.getElementById('showEngineIcon')) 
  449.         return;
  450.  
  451.     var prefService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
  452.  
  453.     // MERC - JCH: Set the following global values: pop-up blocking sound, pop-up blocking count,
  454.     // and show engine icon on status bar.
  455.     if (prefService != null) {
  456.         prefService.setBoolPref("privacy.popups.show_count", document.getElementById('showBlockedCount').checked);
  457.  
  458.         prefService.setBoolPref("privacy.popups.sound_enabled",    document.getElementById('playBlockedSound').checked); 
  459.  
  460.         prefService.setBoolPref("browser.show_engine_icon",    document.getElementById('showEngineIcon').checked);
  461.     }
  462. }
  463.  
  464. /**
  465.  * Update UI in response to Display Engine value change
  466.  **/
  467. function engineChange() {
  468.     debug('engineChange()');
  469.  
  470.     var allowCookiesCheckbox = document.getElementById('allowCookies');
  471.     var imagesFromOrigOnlyCheckbox = document.getElementById('cookiesFromOrigOnly');
  472.     var jsDeck = document.getElementById('jsDeck');
  473.     var engine = document.getElementById('displayEngine').value;
  474.     document.getElementById('enableActiveX').disabled = (engine == 'Gecko');
  475.     document.getElementById('advancedJavaScript').disabled = (engine == 'Trident');
  476.     imagesFromOrigOnlyCheckbox.disabled = (engine == 'Trident');
  477.  
  478.     if (engine == 'Trident') {
  479.         disableId('allowCookies');
  480.         disableId('cookiesFromOrigOnly');
  481.         jsDeck.selectedIndex = 1;
  482.     } else {
  483.         enableId('allowCookies');
  484.         if(allowCookiesCheckbox.checked)
  485.         {
  486.             enableId('cookiesFromOrigOnly');
  487.         }
  488.         else
  489.         {
  490.             disableId('cookiesFromOrigOnly');
  491.         }
  492.         jsDeck.selectedIndex = 0;
  493.     }
  494. }
  495.  
  496. /**
  497.  * Update UI in response to Allow Images value change
  498.  **/
  499. function imagesChange() {
  500.     debug('imagesChange()');
  501.     var engine = document.getElementById('displayEngine').value;
  502.     if(engine != 'Trident') {
  503.             var bImages = document.getElementById('allowImages').checked;
  504.             document.getElementById('imagesFromOrigOnly').disabled = (!bImages);
  505.     }
  506. }
  507.  
  508. /**
  509.  * Update UI in response to Allow Cookies value change
  510.  **/
  511. function cookiesChange() {
  512.     debug('cookiesChange()');
  513.     var bCookies = document.getElementById('allowCookies').checked;
  514.     if(bCookies)
  515.     {
  516.         enableId('cookiesFromOrigOnly');
  517.     }
  518.     else
  519.     {
  520.         disableId('cookiesFromOrigOnly');
  521.     }
  522.     //document.getElementById('cookiesFromOrigOnly').disabled = (!bCookies);
  523. }
  524.  
  525. function advancedJavaScript() {
  526.     openDialog("chrome://browser/content/pref/pref-sitecontrols-advancedjs.xul",
  527.                "", "chrome,modal");
  528. }
  529.  
  530. function viewPasswords() {
  531.     var prefServ = Components.classes["@mozilla.org/preferences-service;1"]
  532.                              .getService(Components.interfaces.nsIPrefBranch);
  533.     prefServ.setCharPref('browser.preferences.formfillORpasscard', 'passcardtab');
  534.     window.top.switchPage('catFormFillButton');
  535. }
  536.  
  537. function clearPasswords() {
  538.     debug('clearPasswords()');
  539.     var passwordManager = Components.classes["@mozilla.org/passwordmanager;1"]
  540.                                     .getService(Components.interfaces.nsIPasswordManager);
  541.     var e = passwordManager.enumerator;
  542.     var selectedSite = getSelectedSite();
  543.     var shouldDisable = "true";
  544.     while (e.hasMoreElements()) {
  545.         var thisPasswd = e.getNext();
  546.         thisPasswd = thisPasswd.QueryInterface(Components.interfaces.nsIPassword);
  547.         debug('thisPasswd = { host: '+thisPasswd.host+', user: '+thisPasswd.user+' }');
  548.         if (thisPasswd.host == selectedSite) {
  549.             debug('REMOVING ' + thisPasswd.host);
  550.             passwordManager.removeUser(thisPasswd.host, thisPasswd.user);
  551.         }
  552.     }
  553.     debug('cleared!');
  554.     //document.getElementById('clearPasswords').setAttribute('disabled', 'true');
  555. }
  556.  
  557. // MERC - JCH: If there are no cookies for the site, disable the clear all cookies button
  558. function updateClearCookiesButton() {
  559.  
  560.     var cookiemanager = Components.classes["@mozilla.org/cookiemanager;1"].getService();
  561.     cookiemanager = cookiemanager.QueryInterface(Components.interfaces.nsICookieManager);
  562.  
  563.     if (!cookiemanager)
  564.       return;
  565.  
  566.     var cookieSite = getSelectedSite();
  567.     var foundACookie = false;
  568.     var enumerator = cookiemanager.enumerator;
  569.     while (enumerator.hasMoreElements()) {
  570.       var nextCookie = enumerator.getNext();
  571.       if (!nextCookie) 
  572.         break;
  573.       nextCookie = nextCookie.QueryInterface(Components.interfaces.nsICookie);
  574.       var host = nextCookie.host;
  575.  
  576.       dump('this host: '+host+'  cookieSite: '+cookieSite+'\n');
  577.       if ((host == cookieSite) || (host == '.'+cookieSite)) {
  578.         foundACookie = true;
  579.         break;
  580.       }
  581.     }
  582.     if (foundACookie)
  583.         document.getElementById('clearCookies').setAttribute('disabled', 'false');
  584.     else
  585.         document.getElementById('clearCookies').setAttribute('disabled', 'true');        
  586. }
  587.  
  588. // MERC - JCH: Clear all the cookies for the site
  589. function clearCookies() {
  590.  
  591.     var cookiemanager = Components.classes["@mozilla.org/cookiemanager;1"].getService();
  592.     cookiemanager = cookiemanager.QueryInterface(Components.interfaces.nsICookieManager);
  593.  
  594.     if (!cookiemanager)
  595.       return;
  596.  
  597.     var cookieSite = getSelectedSite();
  598.     var cookieBool = document.getElementById('allowCookies').checked? false:true;
  599.     dump('cookieBool-> permanently blocked?: '+cookieBool+'\n');
  600.  
  601.     var enumerator = cookiemanager.enumerator;
  602.     while (enumerator.hasMoreElements()) {
  603.       var nextCookie = enumerator.getNext();
  604.       if (!nextCookie) 
  605.         break;
  606.       nextCookie = nextCookie.QueryInterface(Components.interfaces.nsICookie);
  607.       var host = nextCookie.host;
  608.  
  609.       dump('this host: '+host+'  cookieSite: '+cookieSite+'\n');
  610.       if ((host == cookieSite) || (host == '.'+cookieSite)) {
  611.           cookiemanager.remove(nextCookie.host, nextCookie.name, nextCookie.path, cookieBool);
  612.       }
  613.     }
  614.  
  615.     // Also have to delete cookies stored in nsWidgetStateManager.js
  616.     if (parent.hPrefWindow.wsm.dataManager.pageData["chrome://browser/content/pref/pref-sitecontrols-cookies.xul"])
  617.         parent.hPrefWindow.wsm.dataManager.pageData["chrome://browser/content/pref/pref-sitecontrols-cookies.xul"].userData = new Object();
  618.     document.getElementById('clearCookies').setAttribute('disabled', 'true');
  619. }
  620.     
  621. function viewCookies() {
  622.     window.top.cookieSite = getSelectedSite();
  623.     openDialog("chrome://browser/content/pref/pref-sitecontrols-cookies.xul",
  624.                "_blank", "chrome,resizable=yes", "cookieManager");
  625. }
  626.  
  627. function cookieViewerOnPrefsOK()
  628. {
  629.   var dataObject = parent.hPrefWindow.wsm.dataManager.pageData["chrome://browser/content/pref/pref-sitecontrols-cookies.xul"].userData;
  630.  
  631.   if ('deletedCookies' in dataObject) {
  632.  
  633.     var cookiemanager = Components.classes["@mozilla.org/cookiemanager;1"].getService();
  634.     cookiemanager = cookiemanager.QueryInterface(Components.interfaces.nsICookieManager);
  635.  
  636.     for (var p = 0; p < dataObject.deletedCookies.length; ++p) {
  637.       cookiemanager.remove(dataObject.deletedCookies[p].host,
  638.                            dataObject.deletedCookies[p].name,
  639.                            dataObject.deletedCookies[p].path,
  640.                            dataObject.cookieBool);
  641.     }
  642.   }
  643. }
  644.  
  645. var kPrefs = "browser.sitecontrols.prefs";
  646.  
  647. function GetPreferencesInterface()
  648. {
  649.     return Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
  650. }
  651.  
  652. function SetPrefTabs()
  653. {
  654.     var prefs = GetPreferencesInterface();
  655.     if (prefs == null)
  656.         return;
  657.  
  658.     var selectedTabId = prefs.getCharPref(kPrefs);
  659.     dump("The selected sitecontrol preference tab is: " + selectedTabId + "\n");
  660.  
  661.     var theTabBox = document.getElementById("tabbox");
  662.     try {
  663.         var theTab = document.getElementById(selectedTabId);
  664.         theTabBox.selectedTab = theTab;
  665.     } catch (ex) { }
  666. }
  667.  
  668. function OnPrefTabsSelect()
  669. {
  670.     var theTabs = document.getElementById("preftabs");
  671.     if (!theTabs)
  672.         return;
  673.         
  674.     var theTab = theTabs.selectedItem;
  675.     if (!theTab)
  676.         return;
  677.  
  678.     // HACK: don't save the preference until the page has been fully initialized
  679.     //         because OnPrefTabsSelect() will be called before Startup()
  680.     if (gPrefTabsSelectInit)
  681.     {
  682.         // set as the last visted tab
  683.         var prefs = GetPreferencesInterface();
  684.         if (prefs)
  685.             prefs.setCharPref(kPrefs, theTab.id);
  686.     }
  687. }
  688.  
  689.  
  690. function enableDisableTrustRatings(event) {
  691.     debug('enableDisableTrustRatings()');
  692.     if (event) {
  693.         debug('event.target.id: '+event.target.id);
  694.     }
  695.     if (!event || event.target.id == 'useTrustRatings_yes'
  696.                || event.target.id == 'useTrustRatings_no'
  697.                || event.target.id == 'trustRatingsAuto_yes'
  698.                || event.target.id == 'trustRatingsAuto_no')
  699.     {
  700.         var useTrustRatings = document.getElementById('useTrustRatings').value;
  701.         debug('useTrustRatings: '+useTrustRatings);
  702.         if (useTrustRatings == 'true') {
  703.             enableId('trustRatingsAuto');
  704.             enableId('trustRatingsAuto_yes');
  705.             enableId('trustRatingsAuto_no');
  706.             var useAuto = document.getElementById('trustRatingsAuto').value;
  707.             if (useAuto == 'true') {
  708.                 disableId('trustRatingsAuto_default');
  709.             } else {
  710.                 enableId('trustRatingsAuto_default');
  711.             }
  712.             enableId('displayWarnings');
  713.             enableId('updateInterval');
  714.             enableId('updateIntervalLbl');
  715.             disableId('trustRatingsNo_default');
  716.             disableId('trustRatingsNoLbl');
  717.         } else {
  718.             disableId('trustRatingsAuto');
  719.             disableId('trustRatingsAuto_yes');
  720.             disableId('trustRatingsAuto_no');
  721.             disableId('trustRatingsAuto_default');
  722.             disableId('displayWarnings');
  723.             disableId('updateInterval');
  724.             disableId('updateIntervalLbl');
  725.             enableId('trustRatingsNo_default');
  726.             enableId('trustRatingsNoLbl');
  727.         }
  728.     }
  729. }
  730.  
  731. function enableId(id) { document.getElementById(id).removeAttribute('disabled'); }
  732. function disableId(id) { document.getElementById(id).setAttribute('disabled', 'true'); }