
/******** Log ********/

function log(s) {
    console.log(s);
}


/******** Gestion défilement progressif ********/

var docScroll;

MySmoothScroll = new Class({
    Extends: SmoothScroll,
    
    initialize: function(options, context) {
        this.parent(options, context);
        
		if (!Browser.Engine.webkit419) {
            this.removeEvents('complete');
            this.addEvent('complete', this.onComplete.bindWithEvent(this));
        }
    },
    
    start: function(x, y) {
        if (!this.check(arguments.callee, x, y)) return this;
        var rtn = this.parent(x, y);
        
        var yDiff = Math.abs(this.to[1] - this.from[1]);
        
        var duration = 1000+5000*yDiff/6000;
        
        //log(yDiff+', '+duration);
        
        this.options.duration = duration;
        
        return rtn;
    },
    
    onComplete: function() {
        SWFAddress.setValue(this.anchor);
    }
});

window.addEvent('domready', function() {
    docScroll = new MySmoothScroll({
        'links': '.menu a, #pied a, #intro a, #infos_lien-contact a, #artistes_dimitrihk_liens a',
        'transition': 'sine:in:out',
        'duration': 2000
    });
});




/******** Vidéos ********/

var videoPlayerContainerId = 'videos_lecteur';
var videoPlayerId          = 'videos_lecteur_swf';
var videoPlayer;

var videosListId = 'videos_liste';

var videoTitleContainer;

var videoUrlRegexp = /#\/?videos\/(.*)$/;
var videoUrlPrefix = './videos/';

var videoExternalInterfaceReady = false;

var videos;

function loadVideo(id, play) {
    //log('loadVideo('+id+', '+play+')');
    if (play == undefined) {
        play = false;
    }
    
    if (!videoPlayer || !videoExternalInterfaceReady) {
        new Swiff(
            'videos/lecteur.swf',
            {
                id: videoPlayerId,
                width: 409,
                height: 346,
                bgcolor: '#000000',
                container: $(videoPlayerContainerId),
                params: {
                    base: videoUrlPrefix,
                    wMode: 'window'
                },
                vars: {
                    'videoId': id,
                    'mustPlayVideo': play ? 1 : 0
                }
            }
        );
        videoPlayer = $(videoPlayerId);
    } else {
        Swiff.remote(videoPlayer, 'loadVideo', id, play);
    }
    
    videoTitleContainer.empty().set('text', getVideoTitle(id));
    
    activateVideoBt();
}

function onVideoPlayerReady() {
    //log('onVideoPlayerReady()');
    videoExternalInterfaceReady = true;
}

function getVideoIdOfLink(link) {
    //log('getVideoIdOfLink('+link+'): '+link.href+' | '+videoUrlRegexp+' | '+link.href.match(videoUrlRegexp));
    var matches = link.href.match(videoUrlRegexp);
    if (matches) {
        return matches[1];
    }
}

function getVideoAddress(id) {
    return 'videos/'+id;
}

function getVideoTitle(id) {
    return videos[id];
}

function getCurrentVideoIndex() {
    var id = getCurrentVideoId();
    if (id) {
        return videos.__ordered__.indexOf(id);
    }
}

function getCurrentVideoId() {
    return getVideoIdFromPathNames(SWFAddress.getPathNames());
}

function getVideoIdFromPathNames(pathNames) {
    if (pathNames[0] == 'videos') {
        return pathNames[1];
    }
}

function onVideoAddressInit(event) {
    //log('onVideoAddressInit('+event+')');
    if (getVideoIdFromPathNames(event.pathNames))
    {
        window.scrollTo(window.getScroll().x, $('videos').getPosition().y);
    }
    else if (videos.__ordered__[0])
    {
    
        loadVideo(videos.__ordered__[0], false, false);
    }
}

function onVideoAddressChange(event) {
    //log('onVideoAddressChange('+event+'): '+event.path);
    
    var video = getVideoIdFromPathNames(event.pathNames);
    if (video) {
        loadVideo(video, false, false);
    }
}

function initVideoBt(listItem, index) {
    var link = listItem.getElement('a');
    var id = getVideoIdOfLink(link);
    videos[
        videos.__ordered__[index] = id 
    ] = link.getProperty('title');
    
    link.addEvent('click', function() {
        SWFAddress.setValue(getVideoAddress(id));
    });
}

function activateVideoBt() {
    //log('activateVideoBt(): '+getCurrentVideoIndex());
    var index = getCurrentVideoIndex() || 0;
    var bts = $(videosListId).getElements('li');
    bts.some(function(bt, index) {
        if (bt.hasClass('active')) {
            bt.removeClass('active');
            return true;
        }
    });
    bts[index].addClass('active');
}

window.addEvent('domready', function() {
    //log('initVideos()');
    
    videos = {
        __ordered__: []
    };
    
    videoTitleContainer = $('videos').getElement('h3');
    
    var bts = $(videosListId).getElement('ul').getChildren();
    bts.each(initVideoBt);
    
    SWFAddress.addEventListener(SWFAddressEvent.INIT  , onVideoAddressInit);
    SWFAddress.addEventListener(SWFAddressEvent.CHANGE, onVideoAddressChange);
});




/******** Photos ********/

var photosViewerContainerId = 'photos_visionneuse';
var photosViewerId = 'photos_visionneuse_swf';
var photosViewer;

/**
 *  Fonction "onMouseOutOfPhotosViewer"
 *
 *  Sert à informer la visionneuse d'images que la souris en est sortie (cet
 *  évènement ne peut pas être détecté directement dans l'animation Flash).
**/
function onMouseOutOfPhotosViewer() {
    //log('onMouseOutOfPhotosViewer()');
    
    // Si "ExternalInterface" est disponible...
    if (photosViewer.toElement().CallFunction) {
        photosViewer.remote('outOfStage');
    }
}

window.addEvent('domready', function() {
    //log('initPhotos(): '+$(photosViewerContainerId));
    var container = $(photosViewerContainerId);
    if (container) {
        photosViewer = new Swiff(
            'Galerie.swf',
            {
                id: photosViewerId,
                width: 710,
                height: 800,
                bgcolor: '#4C4C4C',
                container: $(photosViewerContainerId),
                params: {
                    wMode: 'window'
                },
                vars: {
                    'readerUrl': './php/my_reader.php'
                },
                properties: {
                    /* On ne peut pas utiliser la méthode "addEvent" car
                     * MooTools ne sait pas l'implémenter dans l'"<object>"
                     * sous IE.
                     *
                     * Cf doc officielle qui évoque les particularités de 
                     * "<object>" et "<embed>" : <http://mootools.net/docs/Utilities/Swiff>
                     */
                    'onmouseout': 'onMouseOutOfPhotosViewer();'
                }
            }
        );
    }
});




/******** Arrière-plan aléatoire ********/

var bgUrl = null;
var bgLoaded = false;

function preloadBg() {
    //log('preloadBg()');
    bgUrl = 'imgs/frise'+Math.floor(Math.random()*3 + 1)+'.jpg';
    var bg = new Asset.image(bgUrl, {onload: onBgLoad});
}

function onBgLoad() {
    //log('onBgLoad()');
    bgLoaded = true;
    if (document.body) {
        showBg();
    }
}

function showBg() {
    //log('showBg(): '+bgUrl);
    $(document.body).setStyle('background-image', 'url('+bgUrl+')');
}

preloadBg();
window.addEvent('domready', function() {
    //log('initBg()');
    if (bgLoaded) {
        showBg();
    }
});
