var jsReady = false;
var overture;
var overtureIsPlaying=false;
var slideShowDepth=350;

swfobject.embedSWF("/apps/composer.swf", "composer_controller", "1", "1", "9.0.0", "/swfobject/expressInstall.swf");

$(document).ready(function() {
    
    jsReady = true;
    
    /*** Drag & Drop ***/
    
    $("#composer_well").sortable({
        connectWith: '.well_connector',
        stop: function(event) {
            $(this).children().remove();
        },
        opacity: 0.6
    }).disableSelection();

    $("#composer_sheet").sortable({
        update: function(event) {
            $(this).find("li").css({ 'position': 'static' });
        },
        beforeStop: function(event, ui) {
            if (event.pageY < $(this).offset().top) ui.item.remove();
        },
        opacity: 0.6
    }).disableSelection();
    
    $("#composer_well_menu li").mousedown(function(event) {
        var clone = $(this).clone().appendTo("#composer_well");
        clone.css({
            'position': 'absolute',
            'left': this.offsetLeft,
            'top': this.offsetTop
        });
        clone.trigger(event);
    }).disableSelection();
    
    /*** Buttons ***/
    
    $("#overtura_btn").click(function(event) {
        event.preventDefault();
        $("#slideshow").children().each(function() {
            $(this).css({ 'top' : (Math.round(Math.random()*90)-5)+'%', 'left' : (Math.round(Math.random()*90)-5)+'%' });
        });
        
        $("#info, #slideshow").css({ 'display': 'block' });
    });
    
    $("#close_btn").click(function(event) {
        $("#info, #slideshow").css({ 'display': 'none' });
    });
    
    $("#play_btn").click(function(event) {
        event.preventDefault();
        if (getSheetContents() != "") {
            $("#playhead").css({ 'display': 'block' });
            swf("composer_controller").play(getSheetContents());
            $("#stop_btn").css({ 'display': 'inline' });
        } else {
            _alert("<img src=\"/images/slideshow/Ooohhhps.jpg\" alt=\"\" /><br /><em>OOPS!</em><br />Drag some notes to the sheet, then hit Play!");
        }
    });
    
    $("#stop_btn").click(function(event) {
        event.preventDefault();
        swf("composer_controller").stop();
    });
    
    $("#slideshow").click(function(event) {
        $("#close_btn").trigger(event);
    });
    
    $("#slideshow li").draggable().mouseover(function(event) {
        $(this).css({ 'zIndex': slideShowDepth });
        slideShowDepth++;
    });
    
    $("#play_overture_btn").click(function(event) {
        if (overtureIsPlaying==false) playOverture();
        else stopOverture();
    });
});

function updatePlayheadPosition(iteration, position) {
    var el = $("#composer_sheet li:eq("+iteration+")");
    var offset = el.offset();
    var positionX = Math.abs(position*(el.width()))-3;
    $("#playhead").css({ 'top': (offset.top+20)+'px', 'left': (offset.left+positionX)+'px' });
}

function playOverture() {
    if (overture) {
        document.body.removeChild(overture);
        overture=null;
    }
    overture = document.createElement("embed");
    overture.setAttribute("src", '/sounds/Overture.mp3');
    overture.setAttribute("hidden", true);
    overture.setAttribute("autostart", true);
    document.body.appendChild(overture);
    overtureIsPlaying=true;
}

function humansMayMailAlban() {
    var a = 'gmx';
    var b = 'ch';
    var c = 'albanschelbert';
    window.location = 'mailto:' + c + '@' + a + '.' + b;
}

function stopOverture() {
    if (overture) {
        document.body.removeChild(overture);
        overture=null;
    }
    overtureIsPlaying=false;
}

function _alert(str) {
    $("#alert").html("<p>"+str+"</p>");
    $("#alert").fadeIn(100).fadeTo(2500, 1).fadeOut(300);
}

function resetButtons() {
    $("#stop_btn").css({ 'display': 'none' });
    $("#playhead").css({ 'display': 'none', 'left': '-100px' });
}

function getSheetContents() {
    var sheet = {};
    return $("#composer_sheet").children().map(function(){return this.className}).get().join(',');
}

function swf(movieName) {
    if (navigator.appName.indexOf("Microsoft") != -1) {
        return window[movieName];
    } else {
        return document[movieName];
    }
}

function isReady() {
    return jsReady;
}