(function () {
var conf = mw.config.get([
	'wgHostname',
	'wgBackendResponseTime',
	'wgIsArticle',
	'wgCanonicalNamespace',
	'wgTitle'
]);
/**
 * Unwatch from watchlist
 *
 * Add an "unwatch" link near each entry on the watchlist view ([[bugzilla:424]]).
 *
 * @source www.mediawiki.org/wiki/Snippets/Unwatch_from_watchlist
 * @author Krinkle
 * @revision 2014-12-17
 */
mw.hook( 'wikipage.content' ).add( function ( $content ) {
	// Only on Watchlist and not in the /edit or /raw mode
	if ( mw.config.get( 'wgCanonicalSpecialPageName' ) !== 'Watchlist' || location.href.indexOf( '/edit' ) > 0 || location.href.indexOf( '/raw' ) > 0 ) {
		return;
	}
	mw.loader.using( ['mediawiki.util', 'mediawiki.api'] ).then( function () {
		// Get the links
		var $wlHistLinks = $content.find( 'ul.special > li > a[href$="action=history"]');

		$wlHistLinks.each( function () {
			var $unwatch,
				$el = $( this ),
				title = mw.util.getParamValue( 'title', this.href );

			$unwatch = $el.clone()
				.text( 'unwatch' )
				.attr( 'href', function ( i, val ) {
					return val.replace( 'action=history', 'action=unwatch' );
				} )
				.on( 'click', function ( e ) {
					new mw.Api().unwatch( title )
						.done( function () {
							$unwatch.css( { pointerEvents: 'none', opacity: 0.5 } );
						} )
						.fail( function () {
							$unwatch.off( 'click' ).append( ' (try again?)' );
						} );
					e.preventDefault();
				} );
			$el.after( $unwatch ).after( ' | ' );
		} );
	} );
} );


// Init
var pKrinkle = $.when(mw.loader.using(['mediawiki.util','skins.vector.js']), $.ready).then(function () {
	// Personal links
	$('#p-variants').after(
		$('#p-cactions').clone().detach()
			.attr('id', 'p-krinkle')
			.find('ul,span').empty().end()
	);

	mw.util.addPortletLink('p-krinkle', mw.util.getUrl('Special:Prefixindex/MediaWiki:'), 'Special:PrefixIndex/MediaWiki:');
	mw.util.addPortletLink('p-krinkle', mw.util.getUrl('Special:RecentChanges', { namespace: 8, days: 30, limit: 100 }), 'RecentChanges/MediaWiki:');
	$('#p-krinkle ul').append('<hr>');
	mw.util.addPortletLink('p-krinkle', '//commons.wikimedia.org/wiki/User:Krinkle/', 'commons: Snippets');
	mw.util.addPortletLink('p-krinkle', '//meta.wikimedia.org/wiki/User:Krinkle/SulBase', 'meta: SULBase');
	mw.util.addPortletLink('p-krinkle', '//meta.wikimedia.org/wiki/User:Krinkle/Le_Tour_de_Wik%C3%AD/2011_Resource_Walker', 'meta: Tour');
	mw.util.addPortletLink('p-krinkle', '//meta.wikimedia.org/wiki/User:Krinkle/global.js', 'meta: global.js');
	$('#p-krinkle ul').append('<hr><li style="padding: 0.5em; font-size: 0.8em;">' + mw.html.escape( 'host: ' + conf.wgHostname + ', backendTime: ' + conf.wgBackendResponseTime + 'ms') + '</li>');

	if (mw.config.get('skin') === 'vector' && $.collapsibleTabs) {
		$('#p-krinkle ul').collapsibleTabs();
	}
});

// [[File:Krinkle_RTRC.js]]
mw.loader.load('//meta.wikimedia.org/w/index.php?title=User:Krinkle/RTRC.js&action=raw&ctype=text/javascript');

/* Pages Created */
mw.loader.load( '//en.wikipedia.org/w/index.php?title=User:Jfmantis/pagesCreated.js&action=raw&ctype=text/javascript' );

// [[File:Krinkle_CVNSimpleOverlay_wiki.js]] CVN SIMPLE OVERLAY
mw.loader.load('//meta.wikimedia.org/w/index.php?title=User:Krinkle/Scripts/CVNSimpleOverlay_wiki.js&action=raw&ctype=text/javascript');

/* XTool Helper */
mw.loader.load('//meta.wikimedia.org/w/index.php?title=User:Hedonil/XTools/XTools.js&action=raw&ctype=text/javascript');

// This tool can tag pages with a few clicks (which is much faster than editing the whole page per Hand).
// by [[m:user:Hoo man]] <https://meta.wikimedia.org/wiki/User:Hoo_man/Scripts/Tagger>
mw.loader.load('//meta.wikimedia.org/w/index.php?title=User:Hoo_man/tagger.js‎&action=raw&ctype=text/javascript');
if(typeof window.taggerConfig === 'undefined') window.taggerConfig = {};
taggerConfig.noDeleteOnly = true;

// Provides several useful functions for rollback (custom edit summary, mark as bot edits and mass revert)
// by [[m:user:Hoo man]] <http://meta.wikimedia.org/wiki/User:Hoo_man/Scripts/Smart_rollback>
mw.loader.load('//meta.wikimedia.org/w/index.php?title=User:Hoo_man/smart_rollback.js&action=raw&ctype=text/javascript');

// Gives some useful links on user, user talk and user contribution pages
// by [[m:user:Hoo man]] <http://meta.wikimedia.org/wiki/User:Hoo_man/Scripts/Useful_links>
mw.loader.load('//meta.wikimedia.org/w/index.php?title=User:Hoo_man/useful_links.js&action=raw&ctype=text/javascript');

// Shows the number of active (one log entry in the last 7 days, or as configured) sysops, uses data from the toolserver
// by [[m:user:Hoo man]] <http://meta.wikimedia.org/wiki/User:Hoo_man/Scripts/Active_sysops>
mw.loader.load('//meta.wikimedia.org/w/index.php?title=User:Hoo_man/active_sysops.js‎&action=raw&ctype=text/javascript');
if(typeof(activeSysopsConfig) == 'undefined') activeSysopsConfig = {};
activeSysopsConfig.markWikisGS = true;

/**
 * Keep track of module cache invalidation.
 *
 * @version 2015-09-30
 * @author Timo Tijhof
 * @source https://gist.github.com/Krinkle/5751a6dd9c19d8f61961
 */
mw.loader.using([], function () {
	var i = 0, more = [];
	if (mw.config.get('debug')) {
		return;
	}
	var vary = mw.config.get('skin') + ':' + mw.config.get('wgUserLanguage');
	var versions = {};
	mw.loader.getModuleNames().forEach(function (module) {
		versions[module] = mw.loader.getVersion(module);
	} );
	var oldVersions = localStorage.getItem('MwRlVersionTrack');
	oldVersions = oldVersions && JSON.parse(oldVersions);
	if (oldVersions && oldVersions.vary === vary) {
		Object.keys(oldVersions.versions).forEach(function (module) {
			var msg;
			if (oldVersions.versions[module] === versions[module]) {
				return;
			}
			if (!oldVersions.versions[module]) {
				msg = mw.format(
					'[MwRlVersionTrack] Add module "$1" at "$2".',
					module,
					versions[module]
				);
			} else if (!versions[module]) {
				msg = mw.format(
					'[MwRlVersionTrack] Remove module "$1", was "$2".',
					module,
					oldVersions.versions[module]
				);
			} else {
				msg = mw.format(
					'[MwRlVersionTrack] Version of "$1" changed from "$2" to "$3".',
					module,
					oldVersions.versions[module],
					versions[module]
				);
			}
			i++;
			if (i < 5) {
				console.info(msg);
				mw.notify(msg);
			} else {
				more.push(module);
			}
		});
		if (more.length) {
			console.info(mw.format('[MwRlVersionTrack] $1 other modules changed: ', more.length), more);
			mw.notify(mw.format('[MwRlVersionTrack] $1 other modules changed: $2', more.length, more.join(', ').slice(0, 20) + '...'));
		}
	}
	localStorage.setItem('MwRlVersionTrack', JSON.stringify({
		vary: vary,
		versions: versions
	}));
});
}());