// create our namespace

var BGC = BGC || {};

BGC.config = {
	firebugURL: "http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js",
	
	gaURL: (("https:" == document.location.protocol) ? "https://ssl." : "http://www.") + "google-analytics.com/ga.js",
	
	debug: false
};

// console logging (loads firebug lite if needed)
		
BGC.log = function () {
	if (BGC.config.debug || window.location.hash.match(/debug/i)) {
		try {
			if (typeof loadFirebugConsole === "function" && typeof console === "undefined") {
				window.loadFirebugConsole();
			}
			console.log.apply(this, arguments);
		} catch (err) {
			BGC.log._arg.push(arguments);
			if (!BGC.loadscript[BGC.config.firebugURL]) {
				BGC.loadscript(BGC.config.firebugURL, function () {
					try {
						var a;
						firebug.init();
						while (a = BGC.log._arg.shift()) {
							BGC.log(a);
						}
					} catch (err) {}
				});
			}
		}
	}
};

BGC.log._arg = [];

// google analytics tracking
// sample usage:

// INITIALIZE GA TRACKING, SPECIFY AS MANY UA ACCOUNT IDS AS NEEDED
// BGC.track.init("UA-XXXXXXX-X", "UA-XXXXXXX-X", "UA-XXXXXXX-X");

// OPTIONAL GA CONFIGURATION SETTINGS, SEE http://code.google.com/apis/analytics/docs/gaJS/gaJSApiBasicConfiguration.html
// BGC.track("_setSampleRate|50");

// PAGEVIEW TRACKING
// BGC.track();

// SYNTHETIC PAGEVIEW TRACKING WITH OPTIONAL CALLBACK
// BGC.track("/some/pageview", function () { BGC.log("/some/pageview callback fired"); }); 

// EVENT TRACKING WITH OPTIONAL CALLBACK, SEE http://code.google.com/apis/analytics/docs/tracking/eventTrackerOverview.html
// BGC.track("eventcat|eventaction|label|8", function () { BGC.log("eventcat|eventaction callback fired"); }); 

BGC.track = function (str, callback) { // the public method for pageview and event tracking
	BGC.track._queue(str, callback);
	BGC.track._execute();
};

BGC.track._queue = function (str, callback) { // queues all tracking requests
	if (!BGC.track._abort) {
		BGC.track._trackingstrings.push({
			str: str,
			callback: callback
		});
		BGC.log("GA queue", BGC.track._trackingstrings);
	}
};

BGC.track._execute = function () { // executes all queued tracking requests
	if (BGC.track._ready) {
		var t, ev, tracker;
			while (t = BGC.track._trackingstrings.shift()) {
				for (var i = 0, l = BGC.track._trackers.length; i < l; i++) {
					if (typeof BGC.track._trackers[i]._trackPageview === "function") {
						tracker = BGC.track._trackers[i];
					} else {
						tracker = BGC.track._trackers[i] = _gat._getTracker(BGC.track._trackers[i]);
					}
					
					if (t.str) {
						if (t.str.match(/^_set[a-zA-Z]+\|/)) { // GA configuration methods (_setVar, _setSampleRate, _setSessionTimeout)
							tracker[t.str.split("|")[0]](t.str.split("|")[1]);
							BGC.log("GA configuration", t.str.split("|")[0], t.str.split("|")[1]);
						} else if (t.str.indexOf("|") > -1 && typeof tracker._trackEvent === "function") { // event tracking call
							ev = t.str.split("|");
							if (ev.length === 4) {
								ev[3] = ev[3] * 1; // try to cast "value" argument to integer
							}
							tracker._trackEvent.apply(null, ev);
							BGC.log("GA trackEvent", ev);
						} else { // "named" pageview tracking call
							tracker._trackPageview(t.str);
							BGC.log("GA trackPageview", t.str);
						}
					} else { // default pageview tracking call
						tracker._trackPageview();
						BGC.log("GA trackPageview");
					}
				}
				
				if (typeof t.callback === "function") {
					t.callback();
				}
			}
		
	}
};

BGC.track.init = function () {
	var url = BGC.config.gaURL;
	//url += "?nocache=" + new Date(); // force it to load over the wire for testing
	//url = "badurl.js"; // for testing tracking script load error
		
	for (var i = 0; i < arguments.length; i++) {
		BGC.track._trackers.push(arguments[i]); // queue all the GA account IDs
	}
	
	if (typeof _gat === "undefined" && !BGC.loadscript[url]) { // need to load the GA script
		BGC.log("GA loading script");
		BGC.loadscript(url, function () { // our callback function will activate and call the BGC.track._execute() method after the GA script loads
			if (typeof _gat === "undefined" && BGC.loadscript[url] === "complete") {
				BGC.track._abort = true;
				BGC.log("GA tracking aborted");
			} else {
				// execute the previously queued tracking calls
				BGC.log("GA script loaded");
				BGC.track._ready = true;
				BGC.track._execute();
			}
		});
	}
};

BGC.track._abort = false;

BGC.track._ready = false;

BGC.track._trackers = [];

BGC.track._trackingstrings = [];

// on-demand script loading

BGC.loadscript = function (url, callback) {
	if (!BGC.loadscript[url]) {
		BGC.loadscript[url] = "loading";
		var done = false, head = document.getElementsByTagName('head')[0], script = document.createElement('script');
	    script.setAttribute('type', 'text/javascript');
	    script.setAttribute('src', url);
	    script.onload = script.onreadystatechange = script.onerror = function () {
	    	BGC.log(url, "readystate", this.readyState);
            if (!done && (!this.readyState || this.readyState == "loaded" || this.readyState == "complete")) {
                done = true;
                BGC.loadscript[url] = "complete";
                if (typeof callback === "function") {
					callback();
				}
            	script.onload = script.onreadystatechange = script.onerror = null; 
                head.removeChild(script);
            }
        };
        
	    head.appendChild(script);
	}
};

BGC.track.init("UA-5624474-1", "UA-5870493-14");
BGC.track();

// legacy tracking calls

MonitorFlash = monitorAjax = function (str) {
	str = str.replace(/\s/g, "").replace(/\-/g, "/");
	BGC.track(str);
}

