docs: function popinOpen(name) {
  
              // bind overlay on click
              var $overlay = instance.target.childNodes[0];
  
              addListener(gina, $overlay, 'click', function(event) {
  
                  // don't cancel here, it will corrupt child elements behaviors such as checkboxes and radio buttons
  
                  if ( /gina-popin-is-active/.test(event.target.className) ) {
  
  
                      // remove listeners
                      removeListener(gina, event.target, 'click');
  
                      // binding popin close
                      var $close = [], $buttonsTMP = [];
  
                      $buttonsTMP = $el.getElementsByTagName('button');
                      if ( $buttonsTMP.length > 0 ) {
                          for(var b = 0, len = $buttonsTMP.length; b < len; ++b) {
                              if ( /gina-popin-close/.test($buttonsTMP[b].className) )
                                  $close.push($buttonsTMP[b])
                          }
                      }
  
                      $buttonsTMP = $el.getElementsByTagName('div');
                      if ( $buttonsTMP.length > 0 ) {
                          for(var b = 0, len = $buttonsTMP.length; b < len; ++b) {
                              if ( /gina-popin-close/.test($buttonsTMP[b].className) )
                                  $close.push($buttonsTMP[b])
                          }
                      }
  
                      $buttonsTMP = $el.getElementsByTagName('a');
                      if ( $buttonsTMP.length > 0 ) {
                          for(var b = 0, len = $buttonsTMP.length; b < len; ++b) {
                              if ( /gina-popin-close/.test($buttonsTMP[b].className) )
                                  $close.push($buttonsTMP[b])
                          }
                      }
  
                      for (var b = 0, len = $close.length; b < len; ++b) {
                          removeListener(gina, $close[b], $close[b].getAttribute('id') )
                      }
  
                      popinClose(name);
                  }
              });
  
  
              var id = null, $el = null;
              if ( typeof(name) == 'string' && name != '' ) {
                  id = 'gina-popin-' + instance.id +'-'+ name;
                  if (id !== $popin.id)
                      throw new Error('Popin `'+name+'` not found !')
              } else if ( typeof(name) == 'undefined' ) {
                  id = $popin.id
              }
  
              $el = document.getElementById(id);
  
              if ( !/gina-popin-is-active/.test($el.className) )
                  $el.className += ' gina-popin-is-active';
  
              if ( !/gina-popin-is-active/.test(instance.target.firstChild.className) )
                  instance.target.firstChild.className += ' gina-popin-is-active';
  
              // binding popin close
              var $close = [], $buttonsTMP = [];
  
              $buttonsTMP = $el.getElementsByTagName('button');
              if ( $buttonsTMP.length > 0 ) {
                  for(var b = 0, len = $buttonsTMP.length; b < len; ++b) {
                      if ( /gina-popin-close/.test($buttonsTMP[b].className) )
                          $close.push($buttonsTMP[b])
                  }
              }
  
              $buttonsTMP = $el.getElementsByTagName('div');
              if ( $buttonsTMP.length > 0 ) {
                  for(var b = 0, len = $buttonsTMP.length; b < len; ++b) {
                      if ( /gina-popin-close/.test($buttonsTMP[b].className) )
                          $close.push($buttonsTMP[b])
                  }
              }
  
              $buttonsTMP = $el.getElementsByTagName('a');
              if ( $buttonsTMP.length > 0 ) {
                  for(var b = 0, len = $buttonsTMP.length; b < len; ++b) {
                      if ( /gina-popin-close/.test($buttonsTMP[b].className) )
                          $close.push($buttonsTMP[b])
                  }
              }
              var onclickAttribute = null, evt = null;
              for (var b = 0, len = $close.length; b < len; ++b) {
                  if ($close[b].tagName == 'A') {
                      onclickAttribute = $close[b].getAttribute('onclick');
                  }
  
                  if ( !onclickAttribute ) {
                      $close[b].setAttribute('onclick', 'return false;')
                  } else if ( !/return false/) {
                      if ( /\;$/.test(onclickAttribute) ) {
                          onclickAttribute += 'return false;'
                      } else {
                          onclickAttribute += '; return false;'
                      }
                  }
  
                  if (!$close[b]['id']) {
  
                      evt = 'popin.close.'+ uuid.v1();
                      $close[b]['id'] = evt;
                      $close[b].setAttribute( 'id', evt);
  
                  } else {
                      evt = $close[b]['id'];
                  }
  
                  var register = function (evt, $close) {
                      // attach submit events
                      addListener(gina, $close, evt, function(event) {
  
                          cancelEvent(event);
  
                          popinClose(name);
                          removeListener(gina, event.target, event.type)
                      });
                  }
  
  
                  if ( typeof(gina.events[evt]) == 'undefined' || gina.events[evt] != $close[b].id ) {
                      register(evt, $close[b])
                  }
              }
  
  
              if ( /gina-popin-is-active/.test(event.target.className) ) {
                  removeListener(gina, event.target, event.target.getAttribute('id'))
              }
  
              $popin.isOpen = true;
              // so it can be forwarded to the handler who is listening
              $popin.target = $el;
  
              // update toolbar
              var XHRData = document.getElementById('gina-without-layout-xhr-data');
              if ( gina && typeof(window.ginaToolbar) == "object" && XHRData ) {
                  try {
  
                      if ( typeof(XHRData.value) != 'undefined' && XHRData.value ) {
                          XHRData = JSON.parse( decodeURIComponent( XHRData.value ) );
                          // reset data-xhr
                          ginaToolbar.update("data-xhr", null);
  
                          ginaToolbar.update("data-xhr", XHRData);
                      }
  
                  } catch (err) {
                      throw err
                  }
              }
  
              triggerEvent(gina, instance.target, 'open.'+ $popin.id, $popin);
          }