home *** CD-ROM | disk | FTP | other *** search
/ Chip 2011 November / CHIP_2011_11.iso / Programy / Narzedzia / AIMP2 / aimp_2.61.583.exe / $TEMP / YandexPackSetup.msi / fil76F7AB211F257DA46B50B20704903322 < prev    next >
Text File  |  2010-07-12  |  24KB  |  756 lines

  1. function fillTooltip(aTooltip) {
  2.   let tooltipNode = document.tooltipNode.parentNode;
  3.   if (!(tooltipNode && tooltipNode.localName == "hbox" && tooltipNode.hasAttribute("yaTooltiptext")))
  4.     return false;
  5.  
  6.   let tooltiptext = tooltipNode.getAttribute("yaTooltiptext")
  7.                                .replace(/^\s+/, '')
  8.                                .replace(/\s+$/, '')
  9.                                .replace(/([\/\-&\?\.])/g, "$1\u200B")
  10.                                .replace(/(\S{5})(\S{5})/g, "$1\u200B$2");
  11.  
  12.   if (!tooltiptext)
  13.     return false;
  14.  
  15.   if (tooltiptext.length > 1000)
  16.     tooltiptext = tooltiptext.substr(0, 1000) + "\u2026";
  17.  
  18.   let descr = aTooltip.getElementsByTagNameNS("http://www.w3.org/1999/xhtml", "div")[0];
  19.   descr.textContent = tooltiptext;
  20.  
  21.   aTooltip.style.height = "";
  22.  
  23.   window.setTimeout(function() {
  24.     aTooltip.style.height = aTooltip.boxObject.height + "px";
  25.   }, 0);
  26.  
  27.   return true;
  28. }
  29.  
  30. var YaAnimator = {
  31.   _animateTimer: null,
  32.   _animateDelay: 15,
  33.   _animateIncrement: 40,
  34.  
  35.   _diffHeight: null,
  36.  
  37.   get targetHeight() {
  38.     try {
  39.       return parseInt(window.getComputedStyle(document.getElementById("yasearch-grids-container"), "").height);
  40.     } catch (e) {}
  41.     
  42.     return 0;
  43.   },
  44.  
  45.   init: function() {
  46.     var me = this;
  47.     setTimeout(function() { me.init_(); }, 10);
  48.   },
  49.  
  50.   init_: function() {
  51.     this._diffHeight = this.targetHeight ? Math.abs(window.innerHeight - this.targetHeight) : 0;
  52.   },
  53.  
  54.   get _sizeIncrement() {
  55.     if (this._diffHeight === null)
  56.       return 0;
  57.  
  58.     let diff = this.targetHeight - window.innerHeight + this._diffHeight;
  59.  
  60.     if (diff > this._animateIncrement)
  61.       return this._animateIncrement;
  62.  
  63.     if (diff < -this._animateIncrement)
  64.       return -this._animateIncrement;
  65.  
  66.     return diff;
  67.   },
  68.  
  69.   _setUpAnimationTimer: function() {
  70.     if (!this._animateTimer)
  71.       this._animateTimer = Components.classes["@mozilla.org/timer;1"]
  72.                                      .createInstance(Components.interfaces.nsITimer);
  73.     else
  74.       this._animateTimer.cancel();
  75.  
  76.     this._animateTimer.initWithCallback(this, this._animateDelay,
  77.                                          Components.interfaces.nsITimer.TYPE_REPEATING_SLACK);
  78.   },
  79.  
  80.   notify: function(aTimer) {
  81.     if (!document)
  82.       aTimer.cancel();
  83.  
  84.     if (aTimer == this._animateTimer) {
  85.       let increment = this._sizeIncrement;
  86.       if (increment == 0) {
  87.         aTimer.cancel();
  88.       } else {
  89.         window.innerHeight += increment;
  90.       }
  91.     }
  92.   },
  93.  
  94.   animate: function() {
  95.     window.setTimeout(function(me) {
  96.       me._setUpAnimationTimer();
  97.     }, 100, this);
  98.   },
  99.  
  100.   switchToPanel: function(aGridName) {
  101.     let gridId = "yasearch-" + aGridName + "-grid";
  102.     let grid = document.getElementById("yasearch-grids-container").firstChild;
  103.     
  104.     while (grid) {
  105.       grid.hidden = (grid.id != gridId);
  106.       grid = grid.nextSibling;
  107.     }
  108.  
  109.     let docElement = document.documentElement;
  110.     document.title = docElement.getAttribute("yaTitle" + aGridName);
  111.  
  112.     docElement.setAttribute("style", docElement.getAttribute("yaStyle" + aGridName));
  113.     try {
  114.       window.sizeToContent();
  115.     } catch(e) {}
  116.  
  117.     this.animate();
  118.   }
  119. }
  120.  
  121. var YaYaRu = {
  122.   nsIYa: Components.classes["@yandex.ru/yasearch;1"].getService(Components.interfaces.nsIYaSearch).wrappedJSObject,
  123.  
  124.   __currentState: 1,
  125.  
  126.   get state() {
  127.     return this.__currentState;
  128.   },
  129.  
  130.   set state(val) {
  131.     if (!window.YaYaRu)
  132.       return null;
  133.  
  134.     let stateName;
  135.     for (var state in this.STATES) {
  136.       if (val === this.STATES[state]) {
  137.         stateName = state;
  138.         break;
  139.       }
  140.     }
  141.  
  142.     document.getElementById("yasearch-bookmark-grid").setAttribute("yayaruState", stateName.replace(/_/g, '-'));
  143.     document.getElementById("yaru-settings-informer-deck").selectedIndex = val - 1;
  144.  
  145.     YaAnimator.animate();
  146.  
  147.     this.__currentState = val;
  148.  
  149.     if (val >= this.STATES.HAS_NO_JOURNAL)
  150.       this.expandSettings();
  151.  
  152.     this._checkFormEnabled();
  153.  
  154.     return this.state;
  155.   },
  156.  
  157.   STATES: {
  158.     NO_DATA: 1,
  159.     REQUEST: 2,
  160.     ERROR: 3,
  161.     DELETED_JOURNAL: 4,
  162.     HAS_NO_JOURNAL: 5,
  163.     HAS_JOURNAL: 6
  164.   },
  165.  
  166.   get enabled() {
  167.     return (this.state >= this.STATES.HAS_NO_JOURNAL);
  168.   },
  169.  
  170.   get requestDone() {
  171.     return (this.state > this.STATES.REQUEST);
  172.   },
  173.  
  174.   get exportChecked() {
  175.     return document.getElementById("yaru-settings-checkbox").checked;
  176.   },
  177.  
  178.   set exportChecked(val) {
  179.     document.getElementById("yaru-settings-checkbox").checked = !!val;
  180.     return this.exportChecked;
  181.   },
  182.  
  183.   _checkFormEnabled: function() {
  184.     let exportCheckbox = document.getElementById("yaru-settings-checkbox");
  185.     exportCheckbox.disabled = !(this.enabled && YaBookmarks.enabled);
  186.  
  187.     let disabled = !(this.enabled && YaBookmarks.enabled && exportCheckbox.checked);
  188.  
  189.     let i = 0,
  190.         radiogroups = document.getElementsByTagName("radiogroup");
  191.     
  192.     while (radiogroups.item(i))
  193.       radiogroups.item(i++).disabled = disabled;
  194.  
  195.     document.getElementById("yaru-settings-communities-menulist").disabled = disabled;
  196.  
  197.     let communitiesRadioGroup = document.getElementById("yaru-settings-communities-group");
  198.     let clubsRadio = communitiesRadioGroup.getItemAtIndex(1);
  199.     clubsRadio.setAttribute("disabled", (disabled || communitiesRadioGroup.getAttribute("yaHasClubs") == "false"));
  200.  
  201.     this.checkPublicSettingsEnabled();
  202.   },
  203.  
  204.   onCommand: function(aCommandType) {
  205.     switch (aCommandType) {
  206.       case "checkbox":
  207.         this._checkFormEnabled();
  208.         break;
  209.  
  210.       case "communities-radio":
  211.         let communitiesMenulist = document.getElementById("yaru-settings-communities-menulist");
  212.         if (communitiesMenulist.selectedIndex == 0)
  213.           communitiesMenulist.selectedIndex = 1;
  214.         break;
  215.  
  216.       case "communities-menulist":
  217.         document.getElementById("yaru-settings-communities-group").selectedIndex = 1;
  218.         break;
  219.  
  220.       case "reload-friends-data":
  221.         this.refreshYaRuUserFriendsData();
  222.         break;
  223.  
  224.       default:
  225.         break;
  226.     }
  227.  
  228.     this.checkPublicSettingsEnabled();
  229.   },
  230.  
  231.   checkPublicSettingsEnabled: function() {
  232.     document.getElementById("yaru-settings-public-group").disabled =
  233.         !(this.enabled && YaBookmarks.enabled && this.exportChecked) ||
  234.         (document.getElementById("yaru-settings-communities-group").selectedIndex == 1);
  235.   },
  236.  
  237.   expandSettings: function(aState) {
  238.     if (typeof aState !== "boolean")
  239.       aState = this.prefsObject.get("yaruBlockExpanded");
  240.     else
  241.       this.prefsObject.set("yaruBlockExpanded", !!aState);
  242.  
  243.     let yaruSettingsRows = document.getElementsByAttribute("yaCollapsed", "*");
  244.     let i = 0,
  245.         state = !aState,
  246.         row;
  247.     
  248.     while ((row = yaruSettingsRows.item(i++)))
  249.       row.setAttribute("yaCollapsed", state);
  250.  
  251.     YaAnimator.animate();
  252.   },
  253.  
  254.   requestServerData: function() {
  255.     if (this.state == this.STATES.REQUEST)
  256.       return;
  257.  
  258.     this.state = this.STATES.REQUEST;
  259.  
  260.     var me = this;
  261.     this.nsIYa.yaBookmarks.refreshYaRuUserData(function(args){
  262.       me.prepeareDialogCallback.apply(me, [args])
  263.     });
  264.   },
  265.  
  266.   _informerLabelsHack: function() {
  267.     try {
  268.       var diff = 0;
  269.       
  270.       let informerDeck = document.getElementById("yaru-settings-informer-deck");
  271.       let settingsCheckbox = document.getElementById("yaru-settings-checkbox");
  272.       let labelElement = settingsCheckbox.labelElement || settingsCheckbox.boxObject.lastChild;
  273.       
  274.       diff = parseInt(labelElement.boxObject.x - informerDeck.boxObject.x + 1, 10);
  275.       
  276.       if (diff > 0 && diff < 100)
  277.         informerDeck.style.marginLeft = diff + "px";
  278.     
  279.     } catch(e) {}
  280.  
  281.     try {
  282.       if (diff > 0 && diff < 100)
  283.         document.getElementById("yaru-settings-communities-group").lastChild.style.marginLeft = diff + "px";
  284.     } catch(e) {}
  285.   },
  286.  
  287.   prepeareDialog: function() {
  288.     setTimeout(function(me){me._informerLabelsHack()},0,this)
  289.  
  290.     this.restoreUserPrefs();
  291.  
  292.     let i = 1, row;
  293.     while ((row = document.getElementById("yaru-settings-container-" + i++)))
  294.       row.setAttribute("hidden", "false");
  295.  
  296.     let ressurectLink = document.getElementById("yaru-settings-informer-ressurect-link");
  297.     if (ressurectLink && ressurectLink.hasAttribute("href") && this.nsIYa.username) {
  298.       ressurectLink.setAttribute("href", ressurectLink.getAttribute("href")
  299.                                                        .replace(/wow\.ya\.ru\//, this.nsIYa.username + ".ya.ru/"))
  300.     }
  301.  
  302.     this.requestServerData();
  303.   },
  304.  
  305.   prepeareDialogCallback: function(aData) {
  306.     if ("xml" !== typeof aData) {
  307.       this.state = this.STATES.ERROR;
  308.     } else {
  309.       if (aData.has_not_journal.length()) {
  310.         document.getElementById("yaru-settings-communities-group").getItemAtIndex(0).setAttribute("value", "create");
  311.         this.state = this.STATES.HAS_NO_JOURNAL;
  312.       } else {
  313.         switch (aData.has_journal.@status.toString()) {
  314.           case "deleted":
  315.             this.state = this.STATES.DELETED_JOURNAL;
  316.             this.exportChecked = false;
  317.             break;
  318.  
  319.           case "normal":
  320.             if (aData.has_journal.toString() > "") {
  321.               this.rebuildCommunitiesList(aData);
  322.               this.state = this.STATES.HAS_JOURNAL;
  323.               break;
  324.             }
  325.           default:
  326.             this.state = this.STATES.ERROR;
  327.             break;
  328.         }
  329.       }
  330.     }
  331.   },
  332.  
  333.   rebuildCommunitiesList: function(aData) {
  334.     let uidValue = (aData.has_journal.@status.toString() == "normal" &&
  335.                      aData.has_journal.toString()) ?
  336.                      aData.has_journal.toString() : "";
  337.  
  338.     document.getElementById("yaru-settings-communities-group").getItemAtIndex(0).setAttribute("value", uidValue);
  339.  
  340.     let menu = document.getElementById("yaru-settings-communities-menulist");
  341.     let menuItemCount = menu.menupopup.childNodes.length;
  342.     while (menuItemCount-- > 1)
  343.       menu.removeItemAt(menuItemCount);
  344.  
  345.     let communities = aData.communities.community;
  346.     for (let i = 0, len = communities.length(); i < len; i++) {
  347.       let label = communities[i].title.toString();
  348.       let value = communities[i].feed_id.toString();
  349.  
  350.       if (label && value)
  351.         menu.appendItem(label, value);
  352.     }
  353.  
  354.     menuItemCount = menu.menupopup.childNodes.length;
  355.  
  356.     document.getElementById("yaru-settings-communities-group").setAttribute("yaHasClubs", (menuItemCount > 1));
  357.  
  358.     if (menuItemCount > 1)
  359.       menu.selectedIndex = 1;
  360.   },
  361.  
  362.   getPostData: function() {
  363.     var data = null;
  364.  
  365.     if (this.enabled && this.exportChecked) {
  366.       let postInCommunities = (document.getElementById("yaru-settings-communities-group").selectedIndex == 1);
  367.  
  368.       let uidItem = postInCommunities ? document.getElementById("yaru-settings-communities-menulist") :
  369.                                         document.getElementById("yaru-settings-communities-group").selectedItem;
  370.  
  371.       if (uidItem && !uidItem.disabled && uidItem.getAttribute("value")) {
  372.         data = {feed_id: uidItem.getAttribute("value")};
  373.  
  374.         if (postInCommunities) {
  375.           data.status = 10;
  376.         } else {
  377.           let publicItem = document.getElementById("yaru-settings-public-group").selectedItem;
  378.           if (publicItem && !publicItem.disabled && publicItem.hasAttribute("value"))
  379.             data.status = publicItem.getAttribute("value");
  380.         }
  381.       }
  382.     }
  383.  
  384.     return data;
  385.   },
  386.  
  387.   setLiveWindowData: function(aData) {
  388.     this.nsIYa.DOMUtils.replaceNode(aData, document.getElementById("yasearch-livewindow-post-props"));
  389.     this.refreshYaRuUserFriendsData();
  390.   },
  391.  
  392.   refreshYaRuUserFriendsData: function() {
  393.     if (this.state == this.STATES.HAS_NO_JOURNAL) {
  394.       document.getElementById("yasearch-bookmarks-add-dialog").setAttribute("yaShowLiveCheckbox", "false");
  395.     } else {
  396.       var me = this;
  397.       this.nsIYa.yaBookmarks.refreshYaRuUserFriendsData(function(args) {
  398.         me.refreshYaRuUserFriendsDataCallback.apply(me, [args])
  399.       });
  400.     }
  401.  
  402.     var selectedIndex = 0;
  403.     if (document.getElementById("yasearch-livewindow-deck").selectedIndex != selectedIndex) {
  404.       document.getElementById("yasearch-livewindow-deck").selectedIndex = selectedIndex;
  405.       YaAnimator.animate();
  406.     }
  407.   },
  408.  
  409.   refreshYaRuUserFriendsDataCallback: function(aData) {
  410.     let linksDiv = document.getElementById("yasearch-livewindow-firends-links");
  411.     
  412.     while (linksDiv.firstChild)
  413.       linksDiv.removeChild(linksDiv.firstChild);
  414.     
  415.     this.nsIYa.DOMUtils.appendNode(aData, linksDiv);
  416.  
  417.     document.getElementById("yasearch-livewindow-deck").selectedIndex = 1;
  418.  
  419.     YaAnimator.animate();
  420.   },
  421.  
  422.   get prefsObject() {
  423.     return this.nsIYa.yaBookmarks.yaruPrefs;
  424.   },
  425.  
  426.   restoreUserPrefs: function() {
  427.     this.exportChecked = this.prefsObject.get("yaruExportChecked");
  428.  
  429.     if (this.prefsObject.get("yaruAddHelpShowed"))
  430.       document.getElementById("yaru-settings-informer-deck").setAttribute("yaHiddenIndex", "5");
  431.  
  432.     let publicPref = this.prefsObject.get("yaruPublicVal");
  433.     let publicRadiogroup = document.getElementById("yaru-settings-public-group");
  434.     let radio, i = 0;
  435.     
  436.     while ((radio = publicRadiogroup.getItemAtIndex(i++))) {
  437.       if (radio.getAttribute("value") == publicPref) {
  438.         publicRadiogroup.selectedItem = radio;
  439.         break;
  440.       }
  441.     }
  442.   },
  443.  
  444.   saveUserPrefs: function() {
  445.     if (this.state == this.STATES.NO_DATA)
  446.       return;
  447.  
  448.     if (this.enabled)
  449.       this.prefsObject.set("yaruExportChecked", this.exportChecked);
  450.  
  451.     let publicItem = document.getElementById("yaru-settings-public-group").selectedItem;
  452.     if (publicItem && publicItem.hasAttribute("value"))
  453.       this.prefsObject.set("yaruPublicVal", publicItem.getAttribute("value"));
  454.   }
  455. };
  456.  
  457. var YaBookmarks = {
  458.   nsIYa: Components.classes["@yandex.ru/yasearch;1"].getService(Components.interfaces.nsIYaSearch).wrappedJSObject,
  459.  
  460.   get enabledPanelName() {
  461.     return document.getElementById("yasearch-bookmarks-add-dialog").getAttribute("yaEnabledPanelName");
  462.   },
  463.  
  464.   set enabledPanelName(aName) {
  465.     if (this.enabledPanelName != aName) {
  466.       YaAnimator.switchToPanel(aName);
  467.       document.getElementById("yasearch-bookmarks-add-dialog").setAttribute("yaEnabledPanelName", aName);
  468.     }
  469.     
  470.     return this.enabledPanelName;
  471.   },
  472.  
  473.   handleListChange: function(list) {
  474.     document.getElementById("yasearch-bookmarks-newfolder").disabled =
  475.         list.selectedIndex != 0 && !list.selectedItem.hasAttribute("yafolderid");
  476.   },
  477.  
  478.   __enabled: false,
  479.   get enabled() {
  480.     return this.__enabled;
  481.   },
  482.  
  483.   set enabled(val) {
  484.     this.__enabled = !!val;
  485.     this.checkFormEnabled();
  486.     return this.__enabled;
  487.   },
  488.  
  489.   checkFormEnabled: function() {
  490.     this._checkFormEnabled();
  491.     
  492.     if (window.YaYaRu)
  493.       window.YaYaRu._checkFormEnabled();
  494.     
  495.     this.enableAcceptButton();
  496.   },
  497.  
  498.   enableAcceptButton: function() {
  499.     let disabled = !this.enabled ||
  500.                     (document.getElementById("yasearch-bookmarks-row-url").hidden != true && document.getElementById("yasearch-bookmarks-url").value == "") ||
  501.                     document.getElementById("yasearch-bookmarks-name").value == "";
  502.  
  503.     document.documentElement.getButton("accept").disabled = disabled;
  504.   },
  505.  
  506.   _checkFormEnabled: function() {
  507.     let disabled = !this.enabled;
  508.     let textboxes = document.getElementsByTagName("textbox");
  509.     let i = 0;
  510.     
  511.     while (textboxes.item(i))
  512.       textboxes.item(i++).disabled = disabled;
  513.  
  514.     document.getElementById("yasearch-bookmarks-tags").disabled = disabled;
  515.     document.getElementById("yasearch-bookmarks-folder").disabled = disabled;
  516.   },
  517.  
  518.   init: function() {
  519.     YaAnimator.init();
  520.  
  521.     this.enabled = false;
  522.  
  523.     this.stringBundleSet = document.getElementById("yasearch-string-bundle-bookmarks");
  524.  
  525.     let closeLiveWindowButton = document.documentElement.getButton("extra1");
  526.     closeLiveWindowButton.setAttribute("label", this.stringBundleSet.getString("closeWindowButtonLabel"));
  527.     closeLiveWindowButton.setAttribute("oncommand", "window.close()");
  528.  
  529.     let aBrowser = window.arguments[0],
  530.         aExistId = window.arguments[2];
  531.  
  532.     this.mode = aExistId ? "edit" : "add";
  533.     
  534.     let documentTitleType = "yaTitlebookmarks";
  535.     
  536.     let bookmark = null;
  537.  
  538.     switch (this.mode) {
  539.       case "add":
  540.         var pageData = this.nsIYa.yaBookmarks.getBrowserPageData(aBrowser);
  541.         document.getElementById("yasearch-bookmarks-url").value   = pageData.url;
  542.         document.getElementById("yasearch-bookmarks-name").value  = pageData.name;
  543.         document.getElementById("yasearch-bookmarks-descr").value = pageData.descr;
  544.  
  545.         YaYaRu.prepeareDialog();
  546.  
  547.         break;
  548.  
  549.       case "edit":
  550.         bookmark = this.nsIYa.bookmarksGetItemById(aExistId);
  551.         document.getElementById("yasearch-bookmarks-url").value   = bookmark.url;
  552.         document.getElementById("yasearch-bookmarks-name").value  = bookmark.name;
  553.         document.getElementById("yasearch-bookmarks-descr").value = bookmark.descr;
  554.  
  555.         if (bookmark.type == "folder") {
  556.           document.getElementById("yasearch-bookmarks-row-url").hidden = true;
  557.           document.getElementById("yasearch-bookmarks-row-tags").hidden = true;
  558.           documentTitleType = "yaTitlefolderEdit";
  559.         } else {
  560.           documentTitleType = "yaTitlebookmarkEdit";
  561.         }
  562.         
  563.         this.bookmark = bookmark;
  564.  
  565.         break;
  566.     }
  567.     
  568.     document.title = document.documentElement.getAttribute(documentTitleType);
  569.     
  570.     document.getElementById("yasearch-bookmarks-tags").initWithValue(bookmark ? bookmark.tags : "");
  571.  
  572.     var me = this;
  573.     this.nsIYa.bookmarksPrepeareDialog(function(args){ me.init_.apply(me, [args]) } )
  574.   },
  575.  
  576.   init_: function(aData) {
  577.     if ("string" == typeof aData)
  578.       return this.exitWithError(aData);
  579.  
  580.     this.nsIYa.DOMUtils.replaceNode(aData, document.getElementById("yasearch-bookmarks-folder"));
  581.  
  582.     var bookmarksFolderMenu = document.getElementById("yasearch-bookmarks-folder");
  583.     if (bookmarksFolderMenu.nodeName != "menulist")
  584.       document.documentElement.cancelDialog();
  585.  
  586.     let folder = window.arguments[1];
  587.  
  588.     switch (this.mode) {
  589.       case "add":
  590.         if (!folder)
  591.           folder = this.nsIYa.yaBookmarks.lastUsedFolder.toString();
  592.         break;
  593.  
  594.       case "edit":
  595.         folder = this.bookmark.parentId;
  596.  
  597.         if (this.bookmark.type == "folder") {
  598.           var folderForEdit = bookmarksFolderMenu.getElementsByAttribute("yafolderid", this.bookmark.id)[0];
  599.           if (!folderForEdit)
  600.             return this.exitWithError("input");
  601.  
  602.           folderForEdit.setAttribute("disabled","true");
  603.         }
  604.  
  605.         break;
  606.     }
  607.     
  608.     if (folder && folder != "0") {
  609.       let selectedFolder = bookmarksFolderMenu.getElementsByAttribute("yafolderid", folder)[0];
  610.       
  611.       if (selectedFolder)
  612.         bookmarksFolderMenu.selectedItem = selectedFolder;
  613.       else if (this.mode !== "add")
  614.         return this.exitWithError("input");
  615.     }
  616.  
  617.     this.enabled = true;
  618.  
  619.     return true;
  620.   },
  621.  
  622.   showError: function(aErrorType) {
  623.     this.nsIYa.yaBookmarks.showError(aErrorType, this.mode);
  624.   },
  625.  
  626.   exitWithError: function(aErrorType) {
  627.     if (document) {
  628.       this.showError(aErrorType);
  629.       setTimeout(function() { document.documentElement.cancelDialog(); }, 10);
  630.     }
  631.     
  632.     return false;
  633.   },
  634.  
  635.   bookmarkActionCallback: function(aData) {
  636.     if ("string" == typeof aData) {
  637.       YaBookmarks.enabled = true;
  638.  
  639.       if (aData == "wow_error") {
  640.         if (YaBookmarks.confirmOnYaRuNotAvailable())
  641.           YaBookmarks.onDialogAccept(true);
  642.       } else {
  643.         YaBookmarks.showError(aData);
  644.       }
  645.  
  646.     } else {
  647.       var closeDialog = true;
  648.       var postedInYaRu = false;
  649.  
  650.       if (aData && aData instanceof Components.interfaces.nsIDOMElement) {
  651.         postedInYaRu = true;
  652.  
  653.         if (!YaYaRu.prefsObject.get("yaruLiveWindowDisabled")) {
  654.           closeDialog = false;
  655.           YaYaRu.setLiveWindowData(aData);
  656.           YaBookmarks.enabledPanelName = "livewindow";
  657.         }
  658.       }
  659.  
  660.       if (closeDialog)
  661.         setTimeout(function(){document.documentElement.cancelDialog()},2);
  662.  
  663.       YaYaRu.prefsObject.onHelpShowed(postedInYaRu);
  664.     }
  665.   },
  666.  
  667.   confirmOnYaRuNotAvailable: function() {
  668.     let prompter = this.nsIYa.promptService;
  669.  
  670.     let flags = prompter.BUTTON_POS_0 * prompter.BUTTON_TITLE_IS_STRING +
  671.                 prompter.BUTTON_POS_1 * prompter.BUTTON_TITLE_IS_STRING +
  672.                 prompter.BUTTON_POS_0_DEFAULT;
  673.  
  674.     let rv = prompter.confirmEx(window,
  675.                                 this.stringBundleSet.getString("YaRuNotAvailableTitle"),
  676.                                 this.stringBundleSet.getString("YaRuNotAvailableMsg"),
  677.                                 flags,
  678.                                 this.stringBundleSet.getString("YaRuNotAvailableButtonYes"),
  679.                                 this.stringBundleSet.getString("YaRuNotAvailableButtonReturn"),
  680.                                 null, null, {});
  681.  
  682.     return !(rv === 1);
  683.   },
  684.  
  685.   onDialogAccept: function(aOnlyBookmarks) {
  686.     if (this.enabledPanelName == "livewindow")
  687.       return true;
  688.     
  689.     if (this.mode == "add")
  690.       YaYaRu.saveUserPrefs();
  691.  
  692.     var newFolder,
  693.         exFolderId = document.getElementById("yasearch-bookmarks-folder").selectedItem.getAttribute("yafolderid") || 0;
  694.  
  695.     if (exFolderId == 0 && document.getElementById("yasearch-bookmarks-folder").selectedIndex != 0) {
  696.       newFolder = document.getElementById("yasearch-bookmarks-folder").selectedItem.getAttribute("label");
  697.     } else {
  698.       newFolder = document.getElementById("yasearch-bookmarks-newfolder").disabled ? "" : document.getElementById("yasearch-bookmarks-newfolder").value;
  699.     }
  700.     
  701.     var bm = { name:      document.getElementById("yasearch-bookmarks-name").value,
  702.                 url:      document.getElementById("yasearch-bookmarks-row-url").hidden != true ? document.getElementById("yasearch-bookmarks-url").value : "",
  703.                 descr:    document.getElementById("yasearch-bookmarks-descr").value,
  704.                 tags:     document.getElementById("yasearch-bookmarks-tags").value,
  705.                 folder:   exFolderId,
  706.                 nfolder:  newFolder,
  707.                 yaru:     aOnlyBookmarks ? null : YaYaRu.getPostData(),
  708.                 callback: this.bookmarkActionCallback
  709.               };
  710.     
  711.     this.nsIYa.yaBookmarks.lastUsedFolder = exFolderId;
  712.  
  713.     if (this.mode == "add" && !YaYaRu.enabled && !aOnlyBookmarks && YaYaRu.exportChecked) {
  714.       if (!this.confirmOnYaRuNotAvailable())
  715.         return false;
  716.  
  717.       YaYaRu.exportChecked = false;
  718.       bm.yaru = null;
  719.     }
  720.  
  721.     this.enabled = false;
  722.  
  723.     if (this.mode == "edit") {
  724.       bm.id = this.bookmark.id;
  725.       bm.type = this.bookmark.type;
  726.       bm.folderOld = this.bookmark.parentId;
  727.       bm._old_info = this.bookmark;
  728.       this.nsIYa.bookmarksEditItem(bm);
  729.     } else {
  730.       this.nsIYa.bookmarksInsertNewItem(bm);
  731.     }
  732.  
  733.     return false;
  734.   },
  735.  
  736.   handleWindowClick: function(aEvent) {
  737.     var target = aEvent.originalTarget;
  738.  
  739.     var targetHref = target.getAttribute("href") || target.getAttribute("yahref");
  740.     
  741.     if (!targetHref)
  742.       target = target.parentNode;
  743.  
  744.     if (target && target.getAttribute)
  745.       targetHref = targetHref || target.getAttribute("href") || target.getAttribute("yahref");
  746.  
  747.     if (targetHref) {
  748.       var action = target.hasAttribute("yaLinkAction") ? target.getAttribute("yaLinkAction") : null;
  749.       var linkTarget = target.hasAttribute("yaLinkTarget") ? target.getAttribute("yaLinkTarget") : "tab";
  750.       this.nsIYa.loadURI(targetHref, aEvent, (action ? {action:action} : null));
  751.       return false;
  752.     }
  753.  
  754.     return true;
  755.   }
  756. };