var bpAnalyticEvents = {};

/*
## Example use:
bpAnalyticEvents.formSubmit.listen(callback);
bpAnalyticEvents.formSubmit.dispatch({custom1: 'data1', custom2: 'data2', etc: '...'});

*/

(function (obj) {
    (function () {
      // polyfill for CustomEvent EI9-EI11
      if ( typeof window.CustomEvent === "function" ) return false;

      function CustomEvent ( event, params ) {
        params = params || { bubbles: false, cancelable: false, detail: undefined };
        var evt = document.createEvent( 'CustomEvent' );
        evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail );
        return evt;
    }

    CustomEvent.prototype = window.Event.prototype;

    window.CustomEvent = CustomEvent;
    })();
        
    function EventTarget() {
        var target = document.createTextNode(null);

        this.listen = function (cb) {
            target.addEventListener('on', cb);
        };

        this.dispatch = function (detail) {
            // create and dispatch the event
            var event = new CustomEvent('on', {
                detail: detail
            });
            target.dispatchEvent(event);
        }
    }

    bpAnalyticEvents.carouselClick = new EventTarget();
    bpAnalyticEvents.clickToCall = new EventTarget();
    bpAnalyticEvents.inventoryResults = new EventTarget();
    bpAnalyticEvents.formFocus = new EventTarget();
    bpAnalyticEvents.formSubmit = new EventTarget();
    bpAnalyticEvents.offerClick = new EventTarget();

})(bpAnalyticEvents);

//
// (function(bpAnalyticEvents) {
//     // setup debug listeners
//     function makeCallBack(type) {
//         return function(event) {
//             console.log("[BP DEBUG] Event: " + type);
//             console.log(event.detail);
//         }
//     }
//     for (var key in bpAnalyticEvents) {
//         if (bpAnalyticEvents.hasOwnProperty(key)) {
//             bpAnalyticEvents[key].listen(makeCallBack(key));
//         }
//     }
//
// })(bpAnalyticEvents);


