

//
// Event dispatcher.
//
// Binds to events triggered by pages, links, printing, searching etc.
//
// Currently used to hook up tracking but can be used to do other things, 
// for example UI features.
//

var eventDispatchLoaded;

(function($) {

    $(document).ready(function() {


        if (eventDispatchLoaded != true) {


            eventDispatchLoaded = true;
            // PageView({documentId,documentType,documentTitle,[sectionId],[sectionTitle]})
            $(document).bind('org.healthwise.event.pageview', function(event, data) {                
                var request = new org.healthwise.analytics.PageViewed(
                        data.documentId, data.documentType, data.documentTitle, data.documentLocalization,
                        data.sectionId, data.sectionTitle
                        );

                org.healthwise.analytics.track(request);
            });

            // HomePage()
            $(document).bind('org.healthwise.event.homepage', function(event, data) {
                var request = new org.healthwise.analytics.HomePageVisited();
                org.healthwise.analytics.track(request);
            });

            // List({letter,filter})
            $(document).bind('org.healthwise.event.list', function(event, data) {
                var request = new org.healthwise.analytics.ListViewed(data.letter, data.filter);
                org.healthwise.analytics.track(request);
            });

            // Category({category})
            $(document).bind('org.healthwise.event.category', function(event, data) {
                var request = new org.healthwise.analytics.CategoryViewed(data.category);
                org.healthwise.analytics.track(request);
            });

            // PDF({documentId, documentTitle, documentLocalization})
            $(document).bind('org.healthwise.event.pdf', function(event, data) {
                if (!data.documentTitle) {
                    // We don't have the title available for PDF documents, so they are manually added for a couple of hwids
                    data.documentTitle = "";
                    if (data.documentId == "ug3345") data.documentTitle = "Substance Abuse Self-test";
                    if (data.documentId == "ug3271") data.documentTitle = "Childhood Immunization Record";
                }
                var request = new org.healthwise.analytics.PdfViewed(data.documentId, data.documentTitle, data.documentLocalization);
                org.healthwise.analytics.track(request);
            });

            // Print({documentId, documentTitle, documentLocalization})
            $(document).bind('org.healthwise.event.print', function(event, data) {
                var request = new org.healthwise.analytics.DocumentPrinted(data.documentId, data.documentType, data.documentTitle, data.documentLocalization);
                org.healthwise.analytics.track(request);
            });

            // Search({term, numberOfResults, [conceptMatch], [matchType], filter}) {
            $(document).bind('org.healthwise.event.search', function(event, data) {
                var request = new org.healthwise.analytics.Search(data.term, data.numberOfResults, data.conceptMatch, data.matchType, data.filter);
                org.healthwise.analytics.track(request);
            });

            // Survey({question, response, documentId, documentType, documentTitle, documentLocalization, sectionId, sectionTitle})
            $(document).bind('org.healthwise.event.survey', function(event, data) {
                var request = new org.healthwise.analytics.DocumentSurveyed(
                data.question, data.response,
                data.documentId, data.documentType, data.documentTitle, data.documentLocalization,
                data.sectionId, data.sectionTitle);
                org.healthwise.analytics.track(request);
            });

            // ITool({name, stage})
            $(document).bind('org.healthwise.event.itool', function(event, data) {
                //Unbind PageView when accessing an itool. This is to prevent double page view hit when opening itool.
                $(document).unbind('org.healthwise.event.pageview');
                var request = new org.healthwise.analytics.IToolTransitioned(data.name, data.stage);
                org.healthwise.analytics.track(request);
            });

            // SlideShow({documentTitle, totalNumberOfSlides, numberOfSlidesViewed})
            $(document).bind('org.healthwise.event.slideshow', function(event, data) {
                var request = new org.healthwise.analytics.SlideShowViewed(data.documentTitle, data.totalNumberOfSlides, data.numberOfSlidesViewed);
                org.healthwise.analytics.track(request);
            });

            hwTrackEvent = function(ti) {
                if (ti.type == "ITOOL" && ti.stage != "access tool") {
                    jQuery(document).trigger("org.healthwise.event.itool", {
                        name: ti.toolName,
                        stage: ti.stage
                    });
                }
            };

            // 
            // itools requre hwTrackEvent() to be defined
            //          (cannot be in external JS file, because hwTrackEvent may be called before javascript files are loaded).
            //          "access tool" event wont fire for timing reasons in some cases, so surpress it from hwTrackEvent and do it onload instead.
            //

            if (org.healthwise.document && org.healthwise.document.itool) {

                jQuery(document).trigger("org.healthwise.event.itool", {
                    name: org.healthwise.document.title,
                    stage: "access tool"
                });
            }
        }
    });

})(jQuery);









