var SoundEvent = {
    rules: null,
    callbacks: [],

    register: function(rules) {
        for (var selecter in rules) {
            var elements = $$(selecter);
            for (var i = 0; i < elements.length; i++) {
                var element = elements[i];

                for (var event in rules[selecter]) {
                    (function () {
                         var sound = rules[selecter][event];
                         var cb    = function(e) { new Sound(sound) };

                         var cbfound = 0;
                         for (var j = 0; j < this.callbacks.length; j++) {
                             var cbobj = this.callbacks[j];
                             if (element == cbobj['element'] && event == cbobj['event']) {
                                 cbfound++;
                                 Event.stopObserving( element, event.replace(/^on/, ''), cbobj['callback'] );
                                 cbobj['callback'] = cb;
                                 Event.observe( element, event.replace(/^on/, ''), cbobj['callback'] );
                             }
                         }

                         if (!cbfound) {
                             this.callbacks.push({
                                 element: element,
                                 event: event,
                                 callback: cb
                             });
                             Event.observe( element, event.replace(/^on/, ''), this.callbacks[ this.callbacks.length - 1 ]['callback'] )
                         }
                     }).bind(this)();
                }
            }
        }
    },

    onloadregister: function(rules) {
        this.rules = rules;
        Event.observe(window, 'load', this.onload.bindAsEventListener(this));
    },

    onload: function(e) {
        this.register(this.rules);
    }
};

var Sound = Class.create();
Sound.id  = 'externalInterfaceSoundModule';
Sound.swf = '/swf/sound.swf';
Sound.insertObject = function() {
    var tag = [
        '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="0" height="0" id="' + Sound.id + '" align="middle">',
        '<param name="allowscriptaccess" value="always" />',
        '<param name="movie" value="' + Sound.swf + '" />',
        '<param name="quality" value="high" />',
        '<param name="bgcolor" value="#ffffff" />',
        '<embed src="' + Sound.swf + '" quality="high" bgcolor="#ffffff" width="0" height="0" name="' + Sound.id + '" align="middle" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />',
        '</object>'
    ];

    var div = document.createElement('div');
    document.body.appendChild(div);
    div.innerHTML = tag.join('');
};

Sound.prototype = {
    initialize: function(sound) {
        if (!sound) {
            return;
        }

        if (!$(Sound.id)) {
            return;
        }

        if (typeof(sound) != 'string' && sound.length) {
            sound = sound[ parseInt( Math.random() * sound.length ) ];
        }

        var jsound = navigator.userAgent.match(/MSIE/) ? window[Sound.id] : document[Sound.id];
        jsound.playSound(sound);
    }
};

Event.observe(window, 'load', Sound.insertObject);
