(function() {

// don't emit events from inside the previews themselves
if ( window.location.search.match( /receiver/gi ) ) { return; }

var socket = io.connect(window.location.origin);
var socketId = Math.random().toString().slice(2);

console.log('View slide notes at ' + window.location.origin + '/notes/' + socketId);
window.open(window.location.origin + '/notes/' + socketId, 'notes-' + socketId);

// Fires when a fragment is shown
Reveal.addEventListener( 'fragmentshown', function( event ) {
        var fragmentData = {
                fragment : 'next',
                socketId : socketId
        };
        socket.emit('fragmentchanged', fragmentData);
} );

// Fires when a fragment is hidden
Reveal.addEventListener( 'fragmenthidden', function( event ) {
        var fragmentData = {
                fragment : 'previous',
                socketId : socketId
        };
        socket.emit('fragmentchanged', fragmentData);
} );

// Fires when slide is changed
Reveal.addEventListener( 'slidechanged', function( event ) {
        var nextindexh;
        var nextindexv;
        var slideElement = event.currentSlide;

        if (slideElement.nextElementSibling && slideElement.parentNode.nodeName == 'SECTION') {
                nextindexh = event.indexh;
                nextindexv = event.indexv + 1;
        } else {
                nextindexh = event.indexh + 1;
                nextindexv = 0;
        }

        var notes = slideElement.querySelector('aside.notes');
        var slideData = {
                notes : notes ? notes.innerHTML : '',
                indexh : event.indexh,
                indexv : event.indexv,
                nextindexh : nextindexh,
                nextindexv : nextindexv,
                socketId : socketId,
                markdown : notes ? typeof notes.getAttribute('data-markdown') === 'string' : false

        };

        socket.emit('slidechanged', slideData);
} );

}());