/*!
 * DokuWiki Bootstrap3 Template: Template Hacks!
 *
 * Home     http://dokuwiki.org/template:bootstrap3
 * Author   Giuseppe Di Terlizzi <giuseppe.diterlizzi@gmail.com>
 * License  GPL 2 (http://www.gnu.org/licenses/gpl.html)
 */


// Normalization & Basic Styling
jQuery(document).on('bootstrap3:init', function(e) {

  setTimeout(function() {

    var $dw_content = jQuery('#dokuwiki__content');  // Page Content node

    // Move/Save .curid to anchor child
    jQuery('.curid').find('a').addClass('curid');

    // Unwrap several tags
    jQuery('bdi, span.curid').contents().unwrap();

    // Non-existent DokwWiki Page
    $dw_content.find('.wikilink2').addClass('text-danger');

    // Search Hits
    jQuery('.search_hit').addClass('mark');

    // Page heading
    $dw_content.find('h1').addClass('page-header');

    // Tables (no for Rack, Diagram and Edittable Plugins)
    if (! jQuery('#edittable__editor').length) {

      if (TPL_CONFIG.tableStyle.indexOf('responsive') !== -1) {
        $dw_content.find('table').not('.rack, .diagram').parent().addClass('table-responsive');
      }

      var table_class = ['table'];

      if (TPL_CONFIG.tableStyle.indexOf('striped') !== -1)   table_class.push('table-striped');
      if (TPL_CONFIG.tableStyle.indexOf('condensed') !== -1) table_class.push('table-condensed');
      if (TPL_CONFIG.tableStyle.indexOf('hover') !== -1)     table_class.push('table-hover');
      if (TPL_CONFIG.tableStyle.indexOf('bordered') !== -1)  table_class.push('table-bordered');

      $dw_content.find('table').not('.rack, .diagram').addClass(table_class.join(' '));

    }

    if (! TPL_CONFIG.tableFullWidth) {
      $dw_content.find('.table').css('width', 'auto');
    }

    // Form and controls
    jQuery(':submit, :button, :reset').addClass('btn btn-default');
    jQuery('input, select, textarea')
      .not('[type=submit], [type=reset], [type=button], [type=hidden], [type=image], [type=checkbox], [type=radio]')
      .addClass('form-control');
    jQuery('input[type=checkbox]').addClass('checkbox-inline');
    jQuery('input[type=radio]').addClass('radio-inline');
    jQuery('label').addClass('control-label');
    jQuery('main form').addClass('form-inline');

    // Images
    jQuery('img.media, img.mediacenter, img.medialeft, img.mediaright').addClass('img-responsive');

    // Toolbar
    jQuery('#tool__bar').addClass('btn-group')
      .find('.toolbutton').addClass('btn-xs');

    // Picker
    if (dw_mode('edit')) {
      jQuery('.picker').addClass('btn-group');
    }

    // Fix list overlap in media images
    jQuery('main ul, main ol').not('.nav, .dropdown-menu').addClass('fix-media-list-overlap');

  }, 0);

});


// Nav
jQuery(document).on('bootstrap3:nav', function(e) {

  setTimeout(function() {

    // Unwrap unnecessary tags inside list items for Bootstrap nav component
    jQuery('.nav div.li')
      .contents().unwrap();

    // Move the font-icons inside a link
    var $links = jQuery('.nav li i + a');
    if ($links.length) {
      jQuery.each($links, function() {
        var $link = jQuery(this),
            $icon = $link.prev();
        $icon.prependTo($link);
        $icon.after(' ');
      });
    }

  }, 0);

});


// Tabs
jQuery(document).on('bootstrap3:tabs', function(e) {

  setTimeout(function() {

    jQuery('ul.tabs').addClass('nav nav-tabs');

    jQuery('ul.tabs strong').replaceWith(function() {

      jQuery(this).parent().addClass('active');
      return jQuery('<a href="#"/>').html(jQuery(this).contents());

    });

  }, 0);

});


// Buttons
jQuery(document).on('bootstrap3:buttons', function(e) {

  setTimeout(function() {

    jQuery('.button').removeClass('button');
    jQuery('.alert button').removeClass('btn btn-default');
    jQuery('#dw__login, #dw__register, #subscribe__form').find(':submit').addClass('btn-success');
    jQuery('#dw__profiledelete').find(':submit').addClass('btn-danger');
    jQuery('#edbtn__save').addClass('btn-success');
    jQuery('nav li span .action.register').addClass('btn btn-success navbar-btn');
    jQuery('nav li span .action.login, nav li span nav .action.logout').addClass('btn btn-default navbar-btn');

    // Section Button edit
    jQuery('.btn_secedit .btn').input2button();
    jQuery('.btn_secedit .btn').addClass('btn-xs').prepend('<i class="fa fa-fw fa-pencil"/> ');

    // Edittable Button
    jQuery('.editbutton_table .btn i').removeClass('fa-pencil').addClass('fa-table');

  }, 0);

});


// Back To Top
jQuery(document).on('bootstrap3:back-to-top', function(e) {

  setTimeout(function() {

    jQuery('.back-to-top').click(function() {
      jQuery('html, body').animate({ scrollTop: 0 }, 600);
    });

    // Display back-to-top during scroll
    jQuery(window).scroll(function() {
      if (jQuery(this).scrollTop()) {
        jQuery('.back-to-top').fadeIn();
      } else {
        jQuery('.back-to-top').fadeOut();
      }
    });

  }, 0);

});


// Icons for DokuWiki Actions
jQuery(document).on('bootstrap3:icons', function(e) {

  setTimeout(function() {

    for (i in icons) {

      var mode     = ['.mode_', icons[i][0]].join(''),
          selector = icons[i][1],
          icon     = icons[i][2];

      var icon_selector = [mode, '#dokuwiki__content', selector].join(' '),
          icon_tag      = ['<i class="', icon, '"/> '].join('');

      var $target = jQuery(jQuery(icon_selector)[0]);

      if ($target.length) {
        $target.prepend(icon_tag);
      }

    };

    // Interwiki User page icon
    jQuery('.iw_user').prepend('<i class="fa fa-fw fa-user"/> ');

    // Personal Home-Page icon
    if (NS == 'user' && dw_mode('show')) {
      jQuery('.mode_show #dokuwiki__content h1').prepend('<i class="fa fa-fw fa-user"/> ');
    }

  }, 0);

});


// Footnote
jQuery(document).on('bootstrap3:footnotes', function(e) {

  setTimeout(function() {

    if (! jQuery('.footnotes').length) return false;

    jQuery(document).bind('DOMNodeInserted', function(){
      jQuery('#insitu__fn').addClass('panel panel-body panel-default');
    });

    if (jQuery('.footnotes').length) {
      jQuery('.footnotes').prepend(jQuery('<hr/>'));
    }

  }, 0);

});


// Table of Contents
jQuery(document).on('bootstrap3:toc', function(e) {

  setTimeout(function() {

    var $dw_toc = jQuery('#dw__toc');

    if (! $dw_toc.length) return false;

    $dw_toc.find('.open strong').addClass('fa fa-fw fa-chevron-up');
    $dw_toc.css('backgroundColor', jQuery('#dokuwiki__content .panel').css('backgroundColor'));
    $dw_toc.find('h3').prepend('<i class="fa fa-fw fa-list" style="padding-right: 5px"/> ');

    $dw_toc.find('h3').click(function() {

      if ($dw_toc.find('.closed').length) {

        $dw_toc.find('h3 strong').removeClass('fa-chevron-up')
                                  .addClass('fa-chevron-down');

        jQuery($dw_toc.find('h3 strong')[0].nextSibling).wrap('<span class="label hide"/>');

      }

      if ($dw_toc.find('.open').length) {

        $dw_toc.find('h3 strong').addClass('fa-chevron-up')
                                  .removeClass('fa-chevron-down');

        $dw_toc.find('h3 .label').replaceWith(function() {
          return jQuery(this).contents();
        });

      }

    });

    $dw_toc.parent().on('affixed.bs.affix', function(e) {

      if ($dw_toc.find('.open').length) {
        $dw_toc.find('h3').trigger('click');
      }

    });

    if ((jQuery(window).height() < jQuery('#dw__toc').height())) {
      resizeToc();
      jQuery(window).resize(resizeToc);
    }

    var bodyOffset = parseInt(jQuery('body').css('paddingTop')) || 0;

    jQuery('body').scrollspy({
      target: '#dw__toc',
      offset: bodyOffset + 10
    });
    jQuery(window).on('load', function () {
      jQuery('body').scrollspy('refresh');
    });

    // Scrolling animation
    $dw_toc.find('a').click(function() {

      var sectionPosition = (jQuery(jQuery.attr(this, 'href')).offset().top - bodyOffset);

      jQuery('html, body').animate({
        scrollTop: sectionPosition
      }, 600);

      return false;

    });

  }, 0);

});


// Alerts
jQuery(document).on('bootstrap3:alerts', function(e) {

  setTimeout(function() {

    // Info
    jQuery('div.info')
      .removeClass('info')
      .addClass('alert alert-info')
      .prepend('<i class="fa fa-fw fa-info-circle"/> ');

    // Error
    jQuery('div.error')
      .removeClass('error')
      .addClass('alert alert-danger')
      .prepend('<i class="fa fa-fw fa-info-circle"/> ');

    // Success
    jQuery('div.success')
      .removeClass('success')
      .addClass('alert alert-success')
      .prepend('<i class="fa fa-fw fa-check-circle"/> ');

    // Notify
    jQuery('div.notify')
      .removeClass('notify')
      .addClass('alert alert-warning')
      .prepend('<i class="fa fa-fw fa-warning"/> ');

  }, 0);

});


// Media Manager
jQuery(document).on('bootstrap3:media-manager', function(e) {

  setTimeout(function() {

    var $media_popup    = jQuery('#media__content'),     // Media Manager (pop-up)
        $media_manager  = jQuery('#mediamanager__page'); // Media Manager (page)

    // Media Manager (pop-up)
    if ($media_popup.length) {
      jQuery('.qq-upload-button').addClass('btn btn-default');
      jQuery('#mediamanager__upload_button').addClass('btn-success');
    }

    // Media Manager (page)
    if ($media_manager.length) {
      $media_manager.find('.file dl').addClass('dl-horizontal');
      $media_manager.find('.panel').removeClass('panel').addClass('pull-left');
    }

  }, 0);

});


// Detail page
jQuery(document).on('bootstrap3:detail', function(e) {

  setTimeout(function() {

    var $detail_page = jQuery('#dokuwiki__detail'); // Detail Page node

    if (! $detail_page.length) return false;

    $detail_page.find('img.img_detail')
      .addClass('thumbnail img-responsive');
    $detail_page.find('dl')
      .addClass('dl-horizontal');
    $detail_page.find('.img_backto')
      .addClass('btn btn-success')
      .prepend('<i class="fa fa-fw fa-arrow-left"/> ');
    $detail_page.find('.mediaManager')
      .addClass('btn btn-default')
      .prepend('<i class="fa fa-fw fa-picture-o"/> ');

  }, 0);

});


// Search mode
jQuery(document).on('bootstrap3:mode-search', function(e) {

  setTimeout(function() {

    if (! dw_mode('search')) return false;

    jQuery('ul.search_quickhits li a').prepend('<i class="fa fa-fw fa-file text-muted"/> ');

    jQuery('.search_results dt')
      .contents()
      .filter(function() {
        return this.nodeType === 3;
      })
      .wrap('<span class="label label-primary"/>');

      jQuery('.search_results .label').before('&nbsp;&nbsp;&nbsp;');

      var x = 0;

      jQuery('.search_results .label').each(function() {
        var $node = jQuery(this);
        $node.html($node.html().replace(/^\: /, ''));
      });

  }, 0);

});


// Administration
jQuery(document).on('bootstrap3:mode-admin', function(e) {

  setTimeout(function() {

    if (! dw_mode('admin')) return false;

    var $mode_admin = jQuery('.mode_admin');  // Admin mode node

    // Extension page
    var $ext_manager = $mode_admin.find('#extension__manager'),
        $ext_actions = $ext_manager.find('.actions');

    $ext_actions.addClass('btn-group');

    $ext_actions.find('.permerror')
      .addClass('pull-left');

    $ext_actions.find('.btn')
      .addClass('btn-xs')
      .input2button();

    $ext_actions.find('.uninstall')
      .addClass('btn-danger')
      .prepend('<i class="fa fa-fw fa-trash"/> ');

    $ext_actions.find('.install, .update, .reinstall')
      .addClass('btn-primary')
      .prepend('<i class="fa fa-fw fa-download"/> ');

    $ext_actions.find('.enable')
      .addClass('btn-success')
      .prepend('<i class="fa fa-fw fa-check"/> ');

    $ext_actions.find('.disable').addClass('btn-warning')
      .prepend('<i class="fa fa-fw fa-ban"/> ');

    $mode_admin.find('#dokuwiki__content :submit')
      .addClass('btn-success');

    $ext_manager.find('form.search :submit, form.install :submit').input2button();

    $ext_manager.find('form.search button')
      .prepend('<i class="fa fa-fw fa-search"/> ');

    $ext_manager.find('form.install button')
      .prepend('<i class="fa fa-fw fa-download"/> ');

  }, 0);

});


// Index Page
jQuery(document).on('bootstrap3:mode-index', function(e) {

  setTimeout(function() {

    if (! dw_mode('index')) return false;

    var $directories = jQuery('ul.idx a.idx_dir'),
        $pages       = jQuery('ul.idx a.wikilink1');

    jQuery.each($directories, function() {

      var $directory = jQuery(this),
          $closed    = $directory.parents('.closed'),
          $open      = $directory.parents('.open');

      if (! $directory.find('.fa').length) {
        $directory.prepend('<i class="fa text-primary"/> ');
      }

      if ($open.length) {
        $directory.find('i')
          .removeClass('fa-folder')
          .addClass('fa-folder-open');
      }

      if ($closed.length) {
        $directory.find('i')
          .removeClass('fa-folder-open')
          .addClass('fa-folder');
      }

    });

    jQuery.each($pages, function() {

      var $page = jQuery(this);

      if (! $page.find('i').length) {
        $page.prepend('<i class="fa fa-fw fa-file-text-o text-muted"/> ');
      }

    });

  }, 0);

});


jQuery(document).on('bootstrap3:page-tools', function() {

  setTimeout(function() {

    var $page_tools_items = jQuery('#dw__pagetools ul li a');

    $page_tools_items.on('mouseenter', function () {
      var $icon = jQuery(this);
      $icon.find('i').addClass('fa-2x', 200);
    });

    $page_tools_items.on('mouseleave', function () {
      var $icon = jQuery(this);
      $icon.find('i').removeClass('fa-2x', 200);
    });

  }, 0);

});


jQuery(document).on('bootstrap3:dropdown-page', function() {

  jQuery('.dw__dropdown_page .dropdown').hover(function() {
    if (! jQuery('#screen_mode').find('.visible-xs').is(':visible')) {
      jQuery(this).addClass('open');
    }
  },
  function() {
    if (! jQuery('#screen_mode').find('.visible-xs').is(':visible')) {
      jQuery(this).removeClass('open');
    }
  });

});


jQuery(document).on('bootstrap3:cookie-law', function() {
  jQuery('#cookieDismiss').click(function(){
    jQuery('#cookieNotice').hide();
    DokuCookie.setValue('cookieNoticeAccepted', true);
  });
});


jQuery(document).on('bootstrap3:components', function(e) {

  setTimeout(function() {

    var events = [ 'toc', 'nav', 'tabs', 'buttons', 'back-to-top', 'page-tools', 'dropdown-page', 'icons', 'footnotes', 'alerts', 'mode-admin', 'mode-index', 'mode-search', 'media-manager', 'detail', 'cookie-law' ];

    for (i in events) {
      jQuery(document).trigger('bootstrap3:' + events[i]);
    }

  }, 0);

});
