/**
 * onClickOut - Identifica o clique fora do elemento $parent
 *
 * @example
 *   function fora() {
 *     console.log('clicou fora');
 *   }
 *   function dentro() {
 *     console.log('clicou dentro');
 *   }
 *   onClickOut($('.quick-setup-container'), $('.overlay'), fora, dentro, false);
 *
 * @param  {object} $parent               elemento para verificar se o clique foi fora dele
 * @param  {object|null} $removeElement   elemento a ser removido
 * @param  {function|null} functionTrue   funcao excutada quando o clique for fora do elemento
 * @param  {function|null} functionFalse  funcao excutada quando o clique for dentro do elemento
 * @param  {boolean} destroyEvent         parar de executar a funcao apos o primeiro click fora
 */
function onClickOut($parent, $removeElement, functionTrue, functionFalse, destroyEvent, preventDefault) {
  var onTouchOut = function(e) {
    if ($parent.find(e.target).length == 0 && $parent[0] != $(e.target)[0]) {
      preventDefault = (preventDefault == 'undefined') ? false : preventDefault;
      if (preventDefault) {
        e.preventDefault();
      }
      if (typeof functionTrue != 'undefined' && functionTrue != null) {
        functionTrue();
      }
      if (typeof $removeElement != 'undefined' && $removeElement != null) {
        $removeElement.remove();
      }
      if (typeof destroyEvent == 'undefined' || destroyEvent == true) {
        document.body.removeEventListener('touchstart', onTouchOut, true);
      }
    } else {
      if (typeof functionFalse != 'undefined' && functionFalse != null) {
        functionFalse();
      }
    }
  }
  document.body.addEventListener('touchstart', onTouchOut, true);
}
