var _gaq = _gaq || [];
var com = (com) ? com: {};
com.evite = (com.evite) ? com.evite: {};                                                                                                                                                 
com.evite.analytics = {
    trackers: [],
    init: function(){
        var envs = {}; envs['test.evite.com'] = 2, envs['stage.evite.com'] = 3; // default is 1 (prod)
        _gaq.push(['_setAccount', 'UA-3914470-' + (envs[document.location.hostname] ? envs[document.location.hostname] : 1)],
          ['_setLocalRemoteServerMode'],['_setDomainName','evite.com'],['_setLocalGifPath','http://utmtrk.evite.com/__utm.gif']
        );
        (function() {
        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
        ga.src = 'http://www.google-analytics.com/ga.js';
        (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ga);
        })();
    },
    track: function(){
        var path = document.location.pathname;
        var qs = document.location.search.replace(/\+/g, " ");
        for (var i=0; i<this.trackers.length; i++){
            tracker = this.trackers[i];
            if (tracker.handle(path, qs)){
                tracker.track(path, qs);
                break;
            }
        }
    },
    add: function(tracker){
        this.trackers[this.trackers.length] = tracker;
    }
};
com.evite.analytics.viewInviteTracker = {
    handle: function(path, qs){
        return ('/pages/invite/viewInvite.jsp'==path);
    },
    track: function(path, qs){
        _gaq.push(['_setCampNameKey','li'],['_setCampMediumKey','src'],['_setCampSourceKey','src'],['_setCampContentKey','trk']);
        var role = '', pvPath = '', et = '';
        if ('true'==getParam('showPreview',qs)) { // categorize w host create flow
            role = 'host';  pvPath = '/create/preview';
        } else {
            if (SPD_INVITE_DATA && SPD_INVITE_DATA['eventType']) {
                et = '/' + SPD_INVITE_DATA['eventType'];
                _gaq.push(['_setCustomVar', 2, 'event_type', et, 3]); // slot 2, scope 3(page)
            }
            role = this.getRole(qs);  pvPath = '/invite/' + role + this.getSubView(qs) + et;
        }
        _gaq.push(['_setCustomVar', 1, 'invite_role', role, 3]); // slot 1, scope 3(page)
        _gaq.push(['_trackPageview', pvPath]);
    },
    getSubView: function(qs){ // separates sorts, paginations etc from main view (via qs params)
        var params=['endGuestCounter','viewAll','sortOrder','responseToExpand','showResponse'];
        for (var i=0; i<params.length; i++){
            if (getParam(params[i],qs).length>0) { return '/sub/' + params[i]; }
        }
        return '/view';
    },
    getRole: function(qs){
// TODO: add more host view conditions (eg hosts clicking from My Events or Host FRP)
        var hostConfLink = ('iq'==getParam('li', qs) && ''==getParam('trk', qs)); // host conf email
        return hostConfLink ? 'host' : 'guest';
    }
};
com.evite.analytics.pathTranslatorTracker = {
    map: {},
    handle: function(path, qs){
        this.init(path, qs);
        return (this.map[path]);
    },
    track: function(path, qs){
        _gaq.push(['_trackPageview', this.map[path]]);
    },
    init: function(path, qs){
        this.map['/roofframe']='/FRP/respond';
        this.map['/hostConfirmFrame']='/FRP/create';
        this.map['/app/invitations/create/saveDraftHeaderView.do']='/FRP/saveDraft';
    }
};
com.evite.analytics.createTracker = {
    handle: function(path, qs){
        return ('/app/invitations/create/event.do'==path || '/app/invitations/dyo/custom.do'==path);
    },
    track: function(path, qs){
        _gaq.push(['_setCustomVar', 1, 'invite_role', 'host', 2]); // slot 1, scope 2(session)
        var step = this.getStep(path, qs);
        if (step=='enterDetails') {
            var et = getParam('eventType', qs);
            if (et.length>0) {
                _gaq.push(['_setCustomVar', 2, 'event_type', et, 2]); // slot 2, scope 2(session)
            }
        }
        _gaq.push(['_trackPageview', '/create' + step]);
    },
    getStep: function(path, qs){
        if ('/app/invitations/dyo/custom.do'==path) { return '/dyo'; }
        else if ('guestModule'==getParam('vwmModuleId', qs)) { return '/addGuests'; }
        else if (''!=getParam('eventID', qs)) { return '/editDetails'; }
        else { return '/enterDetails'; }
    }
};
com.evite.analytics.defaultTracker = {
    handle: function(path, qs){ return true; },
    track: function(path, qs){
        _gaq.push(['_trackPageview']);
    }
};
function getParam(name, qs){
   var results = new RegExp("[\\?&]" + name + "=([^&#]*)").exec(qs);
   return (results!=null) ? results[1] : '';
}
com.evite.analytics.add(com.evite.analytics.viewInviteTracker)
com.evite.analytics.add(com.evite.analytics.createTracker)
com.evite.analytics.add(com.evite.analytics.pathTranslatorTracker)
com.evite.analytics.add(com.evite.analytics.defaultTracker)
com.evite.analytics.init();
com.evite.analytics.track();

