( function ( $, mw ) {

	mw.hook( 'wikipage.content' ).add( function () {
		var errors = mw.config.get( 'ScribuntoErrors' ),
			regex = /^mw-scribunto-error-(\d+)/,
			$dialog = $( '<div>' );

		if ( !errors ) {
			mw.log( 'mw.scribunto.errors: ScribuntoErrors does not exist in mw.config' );
			errors = [];
		}

		$dialog.dialog( {
			title: mw.msg( 'scribunto-parser-dialog-title' ),
			autoOpen: false
		} );

		$( '.scribunto-error' ).each( function ( index, span ) {
			var errorId,
				matches = regex.exec( span.id );
			if ( matches === null ) {
				mw.log( 'mw.scribunto.errors: regex mismatch!' );
				return;
			}
			errorId = parseInt( matches[ 1 ], 10 );
			$( span ).on( 'click', function ( e ) {
				var error = errors[ errorId ];
				if ( typeof error !== 'string' ) {
					mw.log( 'mw.scribunto.errors: error ' + matches[ 1 ] + ' not found.' );
					return;
				}
				$dialog
					.dialog( 'close' )
					.html( error )
					.dialog( 'option', 'position', [ e.clientX + 5, e.clientY + 5 ] )
					.dialog( 'open' );
			} );
		} );
	} );

}( jQuery, mediaWiki ) );