jQuery.extend({
	ReportingManager: function(){
        var trackers = new Array();
        var camp_vars = ["source","campaign","medium","placement","creative","offer","campaign_id"];
        var that = this;

        this.getCampVars = function(){
            return camp_vars;
        }

        this.notifyEvent = function(eventName){
            for(var i in trackers){
        		trackers[i].trackEvent(eventName);
        	}
        }

        this.notifyPage = function(pageName){
            for(var i in trackers){
        		trackers[i].trackPage(pageName);
        	}
        }

        this.notifyAddItem = function(item, sku, name, category, price, quantity){
            for(var i in trackers){
        		if(typeof trackers[i].addItem == "function"){
        		    trackers[i].addItem(item, sku, name, category, price, quantity);
        		}
        	}
        }

        this.notifyAddTrans = function(orderId, affiliation, total , tax, shipping, city, state, country){
            for(var i in trackers){
        		if(typeof trackers[i].addTrans == "function"){
        		    trackers[i].addTrans(orderId, affiliation, total , tax, shipping, city, state, country);
        		}
        	}
        }

        this.notifyTrackTrans = function(){
            for(var i in trackers){
        		if(typeof trackers[i].trackTrans == "function"){
        		    trackers[i].trackTrans();
        		}
        	}
        }

        this.trackEvent = function(eventName){
            eventName = typeof eventName != "object" ? eventName : $(this).attr("trackpage");
            eventName = unescape(eventName); 
            that.notifyEvent((eventName.replace(/[\s]+/g,"_").replace(/[^a-zA-Z0-9\/_]+/gi,"").toLowerCase()));
        }

        this.trackPage = function(pageName){
            if(typeof pageName == "object" && pageName != null){
                pageName = $(this).attr("trackpage");
            }else if(pageName == null){
                pageName = that.setPageNameToCurrentUrl();
            }
            pageName = unescape(pageName);
            that.notifyPage(pageName.replace(/[\s]+/g,"_").replace(/[^a-zA-Z0-9\/_]+/gi,"").toLowerCase());
        }
        
        this.addItem = function(item, sku, name, category, price, quantity){
            that.notifyAddItem(item, sku, name, category, price, quantity);
        }

        this.addTrans = function(orderId, affiliation, total , tax, shipping, city, state, country){
            that.notifyAddTrans(orderId, affiliation, total , tax, shipping, city, state, country);
        }

        this.trackTrans = function(){
            that.notifyTrackTrans();
        }

        this.addTracker = function(tracker){
        	trackers.push(tracker);
        }

        this.setTrackingCookies = function(){
            for ( var i in camp_vars ) {
                var current_var_value = (typeof StatusManager != "undefined" && StatusManager.get(camp_vars[i])) ? StatusManager.get(camp_vars[i]) : null
                if(current_var_value){
                    CookieManager.set(camp_vars[i],current_var_value)
                }
            }
        }
        
        this.setPageNameToCurrentUrl = function(){
            var hash = location.hash
            var hostname = location.hostname;
            var path = location.pathname;
            var portal_test = /^www/;
            var store_test = /softslate/;
            /*check list: 1) is there a # and are we on the portal 2) are we on the store 3) return null because we're only tracking the www. and store*/
      		if(hash && !store_test.test(location.pathname)){
      			var track_hash = hash.indexOf("&") != -1 ? hash.substring(1,hash.indexOf("&")) : hash.substring(1);
      			return (location.pathname.length > 0 && location.pathname != "/") ? location.pathname + "/" + track_hash : track_hash;
      		}else if (store_test.test(location.pathname)){
      		    // /softslate/do/manufacturer/familycircle/
      		    var pretty_path = location.pathname.replace(/\/softslate?/gi,"").replace(/(\.?\/?do)/gi,"");
              return pretty_path;
      		}else{
      		    return null;
      		}
        }        
        
        this.setTrackingCookies();
        $pageTrackable = $("*[trackpage]").livequery('click',this.trackPage);
        
        if(typeof(analytics_uid) != 'undefined'){ 
            this.addTracker(new $.GoogleTracker(analytics_uid));
        }
        if(typeof(txt_tracking_server) != 'undefined'){	
            this.addTracker(new $.TexterityTracker(camp_vars));
        }	
	},

    GoogleTracker: function(tracker_id){
        var analytics_key = tracker_id ? tracker_id : false;
        var page_tracker;
        if(analytics_key!==false){
            //go = true;
    	    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
    	    $.getScript(gaJsHost + "google-analytics.com/ga.js",function(){
    	        //page_tracker = (_gat ? _gat._getTracker(analytics_key) : null);
    	        var myinterval = setInterval(function(){
    	        page_tracker = (_gat ? _gat._getTracker(analytics_key) : null);
		if (page_tracker) {
                    clearInterval(myinterval);
    	            page_tracker._setDomainName("." + CookieManager.getBaseDomain());
                    if(CookieManager.get("source")){
			page_tracker._setCampSourceKey("source");
                    } 
		    if(CookieManager.get("campaign_id")){
                        page_tracker._setCampNameKey("campaign_id");
                    } 
                    if(CookieManager.get("medium")){
                        page_tracker._setCampMediumKey("medium");
                    } 
                    if(CookieManager.get("offer")){
                        page_tracker._setCampContentKey("offer");
                    } 
                    if(CookieManager.get("placement")){
                        page_tracker._setCampTermKey("placement");
                    } 
                    if(CookieManager.get("creative")){
                        page_tracker._setVar(CookieManager.get("creative"));
                    }
		}
                }, 10); 
    	    });
        }

	    this.trackEvent = function(eventName){
	        var event_params = eventName.split("/");
	        var event_category = event_params[0] ? escape(event_params[0]) : "";
	        var event_action = event_params[1] ? escape(event_params[1]) : "";
	        var event_label = event_params[2] ? escape(event_params[2]) : "";
		var interval = setInterval(function(){
                if (analytics_key===false) clearInterval(interval);
                if (page_tracker) {
		    clearInterval(interval);
                    page_tracker._trackEvent(event_category,event_action,event_label);
                } 
            	}, 10);
	    }

	    this.trackPage = function(pageName){
		var interval = setInterval(function(){
                if (analytics_key===false) clearInterval(interval);
                if (page_tracker) {
		            clearInterval(interval);
                    page_tracker._trackPageview(pageName);
                } 
            	}, 10);
	    }
	    
	    this.addItem = function(item, sku, name, category, price, quantity){
		    var interval = setInterval(function(){
                if (analytics_key===false) clearInterval(interval);
                if (page_tracker) {
		            clearInterval(interval);
                    page_tracker._addItem(item, sku, name, category, price, quantity);
                } 
            }, 10);
	    }
	    
	    this.addTrans = function(orderId, affiliation, total , tax, shipping, city, state, country){
		    var interval = setInterval(function(){
                if (analytics_key===false) clearInterval(interval);
                if (page_tracker) {
		            clearInterval(interval);
                    page_tracker._addTrans(orderId, affiliation, total , tax, shipping, city, state, country);
                } 
            }, 10);
        }
	    
	    this.trackTrans = function(){
		    var interval = setInterval(function(){
                if (analytics_key===false) clearInterval(interval);
                if (page_tracker) {
		            clearInterval(interval);
                    page_tracker._trackTrans();
                } 
            }, 10);
        }
        
	},

	TexterityTracker: function(camp_vars){
	    var event_tracking_vars = new Array("category","action","label");
	    var campaign_tracking_vars = new Array();
	    var tracking_domain = txt_tracking_server;
 
            this.trackEvent = function(eventName){
    	        if("https:" == document.location.protocol){
                    var tracking_string = "https://" + document.location.host + "/softslate/images/store/event.gif?";
                }else{
                    var tracking_string = "http://" + tracking_domain + "/icons/event.gif?";
                } 
                
	        var event_params = eventName.split("/");

	        if(event_params.length > 0){
	            for (var i in event_params){
	                if(event_params[i]){
	                    event_tracking_vars[i] = event_tracking_vars[i] + "=" + escape(event_params[i]);
	                }
	            }
	        }

	        if(event_tracking_vars.length > 0){
	            tracking_string = tracking_string + event_tracking_vars.join("&") + "&";
	        }

	        if(campaign_tracking_vars.length > 0){
	            tracking_string = tracking_string + tracking_string_vars.join("&");
	        }
	        $("body").append("<img style=\"display:none;\" src=\"" + tracking_string + "\" />"); 
	    }

	    this.trackPage = function(pageName){
            var now = new Date();
    	    var img_protocol = (("https:" == document.location.protocol) ? "https://" : "http://");
    	        if("https:" == document.location.protocol){
                    var tracking_string = "https://" + document.location.host + "/softslate/images/store/page.gif?";
                }else{
                    var tracking_string = "http://" + tracking_domain + "/icons/page.gif?";
                } 
                tracking_string = tracking_string + "pageName=" + escape(pageName) + "&d=" + now.getTime() + "&";

	        if(campaign_tracking_vars.length > 0){
	            tracking_string = tracking_string + campaign_tracking_vars.join("&");
	        }
	        $("body").append("<img style=\"display:none;\" src=\"" + tracking_string + "\" />"); 
        }

	    this.addItem = function(item, sku, name, category, price, quantity){
            var now = new Date();
    	    if("https:" == document.location.protocol){
                var tracking_string = "https://" + document.location.host + "/softslate/images/store/item.gif?";
            }else{
                var tracking_string = "http://" + tracking_domain + "/icons/item.gif?";
            } 
            tracking_string = tracking_string + "item=" + escape(item) + "&sku=" + escape(sku) + "&name=" + escape(name) + "&category=" + escape(category) + "&price=" + escape(price) + "&quantity=" + escape(quantity) + "&d=" + now.getTime();

	        $("body").append("<img style=\"display:none;\" src=\"" + tracking_string + "\" />"); 
	    }
	    
	    this.addTrans = function(orderId, affiliation, total , tax, shipping, city, state, country){
            var now = new Date();
    	    if("https:" == document.location.protocol){
                var tracking_string = "https://" + document.location.host + "/softslate/images/store/transaction.gif?";
            }else{
                var tracking_string = "http://" + tracking_domain + "/icons/transaction.gif?";
            } 
            tracking_string = tracking_string + "orderId=" + escape(orderId) + "&affiliation=" + escape(affiliation) + "&total=" + escape(total) + "&tax=" + escape(tax) + "&shipping=" + escape(shipping) + "&city=" + escape(city) + "&state=" + escape(state) + "&country=" + escape(country) + "&d=" + now.getTime();

	        $("body").append("<img style=\"display:none;\" src=\"" + tracking_string + "\" />"); 
	    }

	    function setTrackingString(){
	        if(camp_vars){
    		    for ( var i in camp_vars ) {
    		        var current_var_value = CookieManager.get(camp_vars[i]);
    		        if(current_var_value){
    		            campaign_tracking_vars.push(camp_vars[i] + "=" + current_var_value);
    		        }
    		    }
    		}
	    }

	    setTrackingString();
	}
});
