﻿/// <reference path="TheFarm.js" />
/// <reference path="http://ajax.microsoft.com/ajax/jQuery/jquery-1.4.1-vsdoc.js" />

// Global variable declarations below:
/*global TheFarm window document jQuery Moccona flowplayer */

TheFarm.registerNamespace('Moccona.Audio');

Moccona.Audio = (function ($) {
    var initialised = false,
        file,
        player,
        enabled = true,
        $controls;

    /* Cookie management
    */
    var createCookie = function (name, value, days) {
        var expires = "";

        if (days) {
            var date = new Date();
            date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
            expires = "; expires=" + date.toGMTString();
        }

        document.cookie = name + "=" + value + expires + "; path=/";
    };

    var readCookie = function (name) {
        var nameEQ = name + "=";
        var ca = document.cookie.split(';');
        for (var i = 0; i < ca.length; i = i + 1) {
            var c = ca[i];
            while (c.charAt(0) === ' ') {
                c = c.substring(1, c.length);
            }
            if (c.indexOf(nameEQ) === 0) {
                return c.substring(nameEQ.length, c.length);
            }
        }
        return null;
    };

    /* Audio on/off control
    */
    var enableControl = function () {
        player.SetVariable("method:play", "");
        createCookie("audioEnabled", "true", 7);
        $controls.removeClass("disabled");
        enabled = true;
    };

    var disableControl = function () {
        player.SetVariable("method:pause", "");
        createCookie("audioEnabled", "false", 7);
        $controls.addClass("disabled");
        enabled = false;
    };

    var initialise = function () {
        if (!file || !player) {
            throw Error("The URL of a sound file must be supplied, as well as a reference to the flash player's DOM element");
        } else if (!initialised) {
            player.SetVariable("method:setUrl", file);

            if (readCookie("audioEnabled") === "false") {
                disableControl();
            } else {
                enableControl();
            }

            $controls.click(function (e) {
                e.preventDefault();

                if (enabled) {
                    disableControl();
                } else {
                    enableControl();
                }
            });

            initialised = true;
        }
    };

    return {
        configure: function (url, flashSelector, controlsSelector) {
            file = url;
            $controls = $(controlsSelector);
            player = $(flashSelector)[0];

            setTimeout(function () {
                initialise();
            }, 1000);
        },
        listener: {
            onInit: function () {
                initialise();
            },
            onUpdate: function () {
            }
        }
    };
})(jQuery);


