﻿// JSLint Config:
/*jslint browser: true */
/* Hide JSLint errors about Google variables starting with an underscore 
* .. this is re-enabled at the base of the file
*/
/*jslint nomen: false*/
/*global cc, jQuery, tracking_UserState, tracking_RouteName, _gat, cc_resx_GA_TRACKING_CODE, cc_resx_GA_TRACKING_DOMAIN */

//  
//  Author: Kevin Burkitt
//  Date:   2010-02-25
//  
//  Container for Analytics/Tracking Scripts
//
cc.tracking = function() {

    return {

        pageTracker: false,
        preloadQueue: [],
        preloadEventQueue: [],

        /*
        * Do NOT track any pages that begin with these strings (for furture reference, this 
        * would include, for example the urls (which currently don't exist): "/tour8/",
        * "/tournament", "/alerts/show" etc. 
        * 
        * Tour pages are tracked separately by on page calls to, e.g.:
        *      cc.tracking.trackPageView('/tour7');
        * 
        * Alert pages are ignored/not tracked
        * 
        */
        ignorePages: ['/tour', '/alerts'],

        init: function(container) {

            /*
            * GOOGLE ANALYTICS (ASYNCHRONOUS)
            */
            var url = ('https:' === document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';


            jQuery.getScript(url, function() {
                cc.tracking.pageTracker = _gat._getTracker(cc_resx_GA_TRACKING_CODE);
                cc.tracking.pageTracker._setDomainName(cc_resx_GA_TRACKING_DOMAIN);
                cc.tracking.pageTracker._setAllowHash(false);
                cc.tracking.pageTracker._setVar(cc.tracking.getTrackingVar());

                var cPage = location.pathname;
                var trackPage = true;
                for (var p = 0; p < cc.tracking.ignorePages.length; p++) {
                    if (cPage.length >= cc.tracking.ignorePages[p].length && cPage.substring(0, cPage.length) === cc.tracking.ignorePages[p]) {
                        trackPage = false;
                    }
                }

                if (cc_resx_SITE_NAME === 'ZOORealGirls') {
                    
                    trackPage = false;
                    
                }


                if (trackPage !== false) {
                
                    cc.tracking.trackPageView();
                }

                // Process Queue
                cc.tracking.processPreloadQueue();

                if (typeof cc.tracking.preloadEventQueue !== 'undefined') {
                    for (var j = 0; j < cc.tracking.preloadEventQueue.length; j++) {
                        if (typeof cc.tracking.preloadEventQueue[j] === 'function') {
                            cc.tracking.preloadEventQueue[j]();
                        }
                    }
                    cc.tracking.preloadEventQueue = [];
                }
            });

            /*
            var woopra_visitor = new Array();
            if (typeof cc.activeUsername != 'undefined' && cc.activeUsername != '') woopra_visitor['name'] = cc.activeUsername;
            if (typeof cc.activeUserAvatar != 'undefined' && cc.activeUserAvatar != '') woopra_visitor['avatar'] = cc.activeUserAvatar;
            if (typeof cc.activeUserIsSubscriber != 'undefined' && cc.activeUserIsSubscriber != '') woopra_visitor['vip'] = cc.activeUserIsSubscriber;
            jQuery('body').append("<script src=\"http://static.woopra.com/js/woopra.js\" type=\"text/javascript\"></script>");
            */

            jQuery('[cc\\:trackingLabel]', container).each(function() {
                jQuery(this).click(function() {
                    var placement = jQuery(this).attr('cc:trackingPlacement');
                    var label = jQuery(this).attr('cc:trackingLabel');
                    cc.tracking.trackEvent(tracking_RouteName + '-' + placement, label);
                });
            });

        },


        getTrackingVar: function() {
            var key = '';

            if (typeof cc.activeUsername === 'undefined' || cc.activeUsername === '') {
                key = 'Visitor';
            } else {
                key = 'Member';

                if (typeof cc.activeUserIsFemale !== 'undefined') {
                    if (cc.activeUserIsFemale === '1') {
                        key += '_Female';
                    } else {
                        key += '_Male';
                    }
                } else {
                    key += '_GenderUnknown';
                }

                if (typeof cc.activeUserIsSubscriber !== 'undefined') {
                    if (cc.activeUserIsSubscriber === '1') {
                        key += '_Subscribed';
                    } else {
                        key += '_NotSubscribed';
                    }
                } else {
                    key += '_SubscribedUnknown';
                }

                if (typeof cc.activeUserIsVip !== 'undefined' && cc.activeUserIsVip === '1') {
                    if (cc.activeUserIsSubscriber === '1') {
                        key += '_Vip';
                    } else {
                        key += '_NotVip';
                    }
                } else {
                    key += '_VipUnknown';
                }
            }

            return key;
        },

        // Track Page View
        trackPageView: function(url) {
            if (typeof url === 'undefined' || url === '') {
                url = '';
            }

            cc.tracking.preloadQueue.push(url);
            cc.tracking.processPreloadQueue();
        },

        processPreloadQueue: function() {
            if (cc.tracking.pageTracker === false) {
                return;
            }
            if (typeof cc.tracking.preloadQueue !== 'undefined') {
                for (var i = 0; i < cc.tracking.preloadQueue.length; i++) {
                    if (cc.tracking.preloadQueue[i] === '') {
                        cc.tracking.pageTracker._trackPageview();
                    } else {
                        cc.tracking.pageTracker._trackPageview(cc.tracking.preloadQueue[i]);
                    }
                }
                cc.tracking.preloadQueue = [];
            }
        },

        // Track Page View
        trackEvent: function(category, label) {

            if (cc.tracking.pageTracker === false) {
                cc.tracking.preloadEventQueue.push(function() {
                    cc.tracking.trackEvent(category, label);
                });
            } else {
                cc.tracking.pageTracker._trackEvent(category, 'click-' + tracking_UserState, label, 0);
            }

            return true;
        },

        // Track Page View
        trackEcommerce: function(orderId, productCode, productName, productCategory, affilliateOrStoreName, total, city, state, country, onComplete) {
            try {
                if (cc.tracking.pageTracker === false) {
                    cc.tracking.preloadEventQueue.push(function() {
                        cc.tracking.trackEcommerce(orderId, productCode, productName, productCategory, affilliateOrStoreName, total, city, state, country, onComplete);
                    });
                } else {
                    cc.tracking.pageTracker._addTrans(orderId,                  // order ID - required
                                                        affilliateOrStoreName,    // affiliation or store name
                                                        total,                    // total - required
                                                        0,                        // tax
                                                        0,                        // shipping
                                                        city,                     // city
                                                        state,                    // state or province
                                                        country);                   // country


                    // add item might be called for every item in the shopping cart
                    // where your ecommerce engine loops through each item in the cart and
                    // prints out _addItem for each
                    cc.tracking.pageTracker._addItem(orderId,          // order ID - necessary to associate item with transaction
                                                      productCode,      // SKU/code - required
                                                      productName,      // product name
                                                      productCategory,  // category or variation
                                                      total,            // unit price - required
                                                      1);                 // quantity - required


                    cc.tracking.pageTracker._trackTrans();
                    if (typeof onComplete === 'function') {
                        onComplete();
                    }
                }

            } catch (err) {
                cc.log('Ecommerce Tracking: An error occurred');
            }

            return true;
        }

    };

} ();


/* Re-enable JSLint name errors (diabled at start of file because Google Analytics uses 
* leading underscores */
/*jslint nomen: true*/

