// dmHandler.uc.js:
//   pass control+clicked links to an external download manager
  
var dmHandler = {
  path: '/home/logan/bin/mozilla-cwget',
  proc: null,
  uri: Components.classes['@mozilla.org/network/standard-url;1']
                 .createInstance(Components.interfaces.nsIURL),
  opts: 'toolbar=0,status=0,scrollbars=1,width=640,height=480',
  init: function()
  {
    var path = Components.classes['@mozilla.org/file/local;1']
                         .createInstance(Components.interfaces.nsILocalFile);
    path.initWithPath(dmHandler.path);
  
    dmHandler.proc = Components.classes['@mozilla.org/process/util;1']
                              .createInstance(Components.interfaces.nsIProcess);
    dmHandler.proc.init(path);

    window.addEventListener('click',
      function(event) {
        if (event.button == 0 && event.ctrlKey) {
          var node = event.originalTarget;

          var i = 0;

          while (node && node.nodeName != 'A' && i++ < 5)
            node = node.parentNode;

          if (node.nodeName == 'A' && node.href) {
            dmHandler.uri.spec = node.href;

            if (dmHandler.uri.fileExtension) {
              if (/^(nfo|txt)$/i.test(dmHandler.uri.fileExtension))
                window.open('view-source:' + node.href,
                            'Source Viewer', dmHandler.opts);
              else if (node.innerHTML == '[T]')  // XXX: easynews
                window.open(node.href, 'Thumb Viewer', dmHandler.opts);
              else
                try {
                  dmHandler.proc.run(false, [ node.href ], 1);
                } catch (e) { alert(e); }

              event.stopPropagation();
              event.preventDefault();
            }
          }
        }
      }, true);
  }
};
  
dmHandler.init();
