EZDATA.jsLoaded = {};
EZDATA.jsLoader = function(url){
    if (typeof(EZDATA.jsLoaded[url]) == 'undefined' || EZDATA.jsLoaded[url] == null){
        EZDATA.jsLoaded[url] = 1;
        var loader = document.getElementById(url);
        loader.src = url;
    }
};


/* Waits for the function to be available before executing func.
    - func must be a function contained in obj. This means the 'window' object if it's global.
    - Accepts additional parameters that will be passed to func when func is executed.
*/
EZDATA.jsLoaderExec = function(obj, func){
    var inner = function(num, obj, func){
        if (typeof(obj[func]) == 'function'){
            var args = Array.prototype.slice.call(arguments);
            args.splice(0, 3);
            return obj[func].apply(this, args);
        }else{
            if (num >= 99){ throw("EZDATA.jsLoaderExec tried to run function '"+ func +"' 100 times, giving up"); }
                        
            var a = arguments;
            a[0] += 1;
            setTimeout(function(){return inner.apply(this, a); }, 100);
        }
    };
    
    var args = Array.prototype.slice.call(arguments);
    args.splice(0,0,0);
    return inner.apply(this, args);
};


/* Google Analytics Tracking Event */
EZDATA.trackGaEvent = function(category, action, label){
    if (typeof(pageTrackerEZ) == 'undefined' || pageTrackerEZ == null){
        var trackError = new Error("EZDATA.trackGaEvent: pageTrackerEZ is not an object.");
        if (typeof(console) != 'undefined'){
            console.error(trackError);
        }else{
                //throw trackError;
        }
    }else{
        pageTrackerEZ._trackEvent(category, action, label);
    }
    return true;
};



