  ///
  /// NetForce Tecnologia
  /// Biblioteca do componente NFPopup
  ///

  /**
   * NFPopup
   * Controle de popup
   */
  function NFPopup()
  {
    // Propriedades
    var comp  = null;
    var popup = null;

    /**
     * Exibir popup pelo SHOW
     *
     * @param integer|string speed
     */
     this.show = function(speed, forceDir) {
       var pop = $(this.popup);
       var p   = this.getPositions(forceDir);

       pop.css('left', p.left);
       pop.css('top',  p.top);
       pop.show(speed);
     };

    /**
     * Exibir popup pelo FADEIN
     *
     * @param integer|string speed
     */
     this.fadeIn = function(speed, forceDir) {
       var pop = $(this.popup);
       var p   = this.getPositions(forceDir);

       pop.css('left',    p.left);
       pop.css('top',     p.top);
       pop.fadeIn(speed);
     };

    /**
     * Exibir popup pelo SLIDEDOWN
     *
     * @param integer|string speed
     */
     this.slideDown = function(speed, forceDir) {
       var pop = $(this.popup);
       var p   = this.getPositions(forceDir);

       pop.css('left', p.left);
       pop.css('top',  p.top);
       pop.slideDown(speed);
     };

    /**
     * Calcular posição do popup
     */
     this.getPositions = function(forceDir) {
       var pop = $(this.popup);
       var com = $(this.comp);

       var hasScroll = (jQuery.browser.mozilla != true);

       // Informações
       var rp = {pos: pop.offset({scroll: hasScroll}), width: pop.width(), height: pop.height()};
       var rc = {pos: com.offset({scroll: hasScroll}), width: com.width(), height: com.height()};

       var pos = {right  : {left: ((rc.pos.left + rc.width) - rp.width - 1), top: (rc.pos.top + rc.height + 2)},
                  left   : {left: (rc.pos.left - 1),                     top: (rc.pos.top + rc.height + 2)}};

       // Cálcular posição
       if (forceDir == undefined)
       {
         var p_left = pos.right.left;
         var p_top  = pos.right.top;
         if (p_left < 0)
         {
           p_left = pos.left.left;
           p_top  = pos.left.top;
         }
       } else {
         var p_left = 0;
         var p_top  = 0;
         switch (forceDir)
         {
           case 'left':
             p_left = pos.left.left;
             p_top  = pos.left.top;
             break;

           case 'right':
             p_left = pos.right.left;
             p_top  = pos.right.top;
             break;
         }
       }

       return {left : p_left, top : p_top};
     }
  }
