﻿if (!mecca)
    var mecca = {};
    
mecca.googleLoader = function(options)
{
    var defaults = {
        setNewSession: false,
        urchinId: "",
        page: null,
        callback: function() {}
    };
    
    var options = $.extend(defaults, options);
    
    var urchinId = options.urchinId;
    var _page = options.page;
    var callback = options.callback;
    
    var loadInterval = 100;
    
    return {
        _load: function()
        {
              
            var gaHost = ("https:" == document.location.protocol) ? "https://ssl." : "http://www.";
            var s = document.createElement('script');
            s.src = gaHost + "google-analytics.com/ga.js";
            document.getElementsByTagName("head")[0].appendChild(s);
            var checker = this._wrap(this, this._check);
            setTimeout(checker, loadInterval);
        },

        _check: function()
        {      
            if (window['_gat'])
            {
                pageTracker = _gat._getTracker(urchinId);
                pageTracker._initData();

                //Let's set some custom vars before the page view so that they get sent through with the page view.
                if (options.setNewSession && typeof (setNewSession) == 'function') {
                    setNewSession();
                }

                if (typeof(setCustomVars) == 'function') {
                    setCustomVars();
                }
                
        		if (_page == null)
		        {
		            pageTracker._trackPageview();
        		}
                else
                {
		            pageTracker._trackPageview(_page);
		        }
                
                if (callback && callback.call)
                {
                    callback.call();
                }
            }
            else
            {
                var checker = this._wrap(this, this._check);
                setTimeout(checker, loadInterval);
            }
        },

        _wrap: function(obj, method)
        {
            return function() { return method.apply(obj, arguments); };
        }
    };
}
