billboard.metrics = new ( function($){

    var me = this;
    me.firstImgLoad = true;

    me.engines = [];

    /**
     *
     */
    me.init = function() 
    {
        billboard.info("Metrics.init()");
        billboard.broadcaster.addListener( "pageLoaded", function() { me.onPageLoaded() } );
    }

    /**
     *
     */
    me.registerEngine = function( name, engine ) 
    {
        billboard.info("Metrics.registerEngine("+name+")");
        me.engines[name] = engine;
    }

    me.onPageLoaded = function()
    {
        billboard.info( "Metrics.onPageLoaded()" );
        me.trackPageView();
    }

    /**
     *
     */
    me.trackPageView = function(url) 
    {
        billboard.info( "Metrics.trackPageView()" );
        billboard.info( "  tracking current URL: "+billboard.currentUrl );
        
        URL = url ? url : billboard.history.hash;

        billboard.info( "  tracking hash URL: "+URL );
        
        for ( var e in me.engines ) {
            if ((me.engines[e]).trackPageView)
                (me.engines[e]).trackPageView(URL);
        }

        /** quantcast attempt **/
        if(me.firstImgLoad){
            me.firstImgLoad = false;
        }
        else {
            var img_src = $("#quantcast_img").attr("src").split("?timestamp");
            var timestamp = new Date();
            $("#quantcast_img").attr("src", img_src[0] + "?timestamp=" + timestamp.getTime());
        }
    }

    me.trackInteraction = function() 
    {
        billboard.info( "Metrics.trackPageView()" );
        for ( var e in me.engines ) {
            (me.engines[e]).trackInteraction();
        }
    }

    me.trackDownload = function()
    {
        billboard.info( "Metrics.trackPageView()" );
        for ( var e in me.engines ) {
            (me.engines[e]).trackDownload();
        }
    }

    $(function(){
        //billboard.info("Metrics onLoad");
    })

})(jQuery);

