/*
 * @fileoverview
 * SiteCatalyst implementation for optifade.com
 * SiteCatalyst code version: H.20.3.
 * @author SHamel@immeria.net
 * @version v2.0 Phase 2 Enhancements, add self-error check, challenge friends handling, product tab switch tracking
 * @version v1.1 Bug fixes & enhancements
 * @version v1.0 Initial implementation
 * @see http://immeria.net/jitt
 */
/*
 * Multiple replacement regex string replacement
 * @addon
 * @param hash of regex & replacement
 * @param options regex.replace() options (optional)
 * @return Modified string
 * @type String
 */
String.prototype.mreplace = function(hash, options){
    if (!options) 
        options = 'g';
    var str = this, key;
    for (key in hash) 
        if (Object.prototype.hasOwnProperty.call(hash, key)) 
            str = str.replace(new RegExp(key, options), hash[key]);
    return str;
};

$jitt = jQuery.noConflict();

/*
 * Set SiteCatalyst tag values
 */
$jitt.tags = function(){
    try {
        // 404 Error page special handling
        if (/the page you requested can't be found/i.test($jitt('h1').text())) {
            s.pageType = 'errorPage';
            return;
        }
        
        // Some useful values to be used later on
        var locale = 'en_US';
        var visitStart = (s.getVisitStart('s_visit') == '1');
        
        // s.campaign - External Campaign Tracking
        s.campaign = s.getQueryParam('xcmp');
        
        // pageName - Unique page naming taxonomy
        s.pageName = (locale +
        location.pathname.mreplace({
            '\/+': ':',
            '\\.([^:]+)$': ':',
            ':$': ''
        })).toLowerCase();
        var pageNameParts = s.pageName.split(/:/);
        // channel - Site content section
        if (pageNameParts.length == 2) 
            s.channel = 'home';
        else 
            if (/:(products|page:size)/.test(s.pageName)) // If product section or sizing chart
                s.channel = 'catalog';
            else 
                if (/(store|locator):/i.test(s.pageName)) // If Store Locator
                    s.channel = 'store finder';
                else 
                    if (/flash:spot-the-hunter/.test(s.pageName)) // if Spot The Hunter game
                        s.channel = 'game';
                    else 
                        if ($jitt('.currentSection .sectionName')) 
                            s.channel = $jitt.trim($jitt('.currentSection .sectionName').text().toLowerCase()); // channel is selected nav
                        else 
                            s.channel = pageNameParts[2]; // use default channel: 2nd directory level of path
        // hier1
        s.hier1 = s.pageName.replace(/:/g, '/');
        
        // 1. Locale
        s.prop1 = locale;
        // 2. Time Parting (Hour)
        var currentYear = new Date().getFullYear();
        s.prop2 = s.getTimeParting('h', '-5', currentYear);
        // 3. Time Parting (Day)
        s.prop3 = s.getTimeParting('d', '-5', currentYear);
        // 4. Time Partig (Weekday/Weekend)
        s.prop4 = s.getTimeParting('w', '-5', currentYear);
        // 5.
        // 6. Store Locator Search term
        // 7. Store Locator Results count
        if (/nearbyloc/.test(s.pageName)) {
            s.prop6 = $jitt('.requestAddr').text().replace(/\s+/g, ' ').match(/address:\s(.+)/)[1];
            s.prop7 = $jitt('.storeList .number:last').text();
        }
        
        // 8. SubSection
        if (pageNameParts.length > 3) 
            s.prop8 = s.channel + ':' + pageNameParts[2];
        // 9. SubSubSection
        if (pageNameParts.length > 4) 
            s.prop9 = s.prop8 + ':' + pageNameParts[3];
        // 10. Page Type (product|product landing|content landing)
        if (/products:.+:\d+/.test(s.pageName)) 
            s.prop10 = 'product';
        else 
            if (/products/.test(s.pageName)) 
                s.prop10 = 'product landing';
            else 
                s.prop10 = 'content landing';
        // 11. Referring domain - keep name of referring domain if from outside
        s.prop11 = (document.referrer.indexOf(location.host) == -1 ? document.referrer.replace(/.+\/\/([^\/]+).*$/, '$1') : '');
        // 12. Inbound Keyword
        // 13.
        // 14.
        // 15. ???
        s.prop15 = s.channel + ':' + s.pageName;
        // 16. ???
        s.prop16 = location.host + ':' + s.channel + ':' + s.pageName;
        // 17. Redirects of Marketing URL
        // 18. URL
        // 19. Previous Page
        s.prop19 = s.getPreviousPage();
        // 20. Detailed Clickpath
        s.prop20 = s.campaign ? 'xcmp:' + s.campaign + ':' + s.pageName : s.pageName;
        // 21. Visit DNA - see bellow
        // 22. Lifetime DNA  - see bellow
        // 23. Registration State
        // 24. Registration Date/Time
        // 25. CMS Content ID
        // 26. Unique Visitor ID
        var tempvisID = new Date().getTime();
        s.prop26 = s.getAndPersistValue(false, 's_visitorID', 360);
        if (s.prop26 == '') 
            s.prop26 = s.getAndPersistValue(tempvisID, 's_visitorID', 360);
        // 27. Unique Visit ID
        s.prop27 = s.getAndPersistValue(false, 's_visitID');
        if (s.prop27 == '') 
            s.prop27 = s.getAndPersistValue(tempvisID, 's_visitID');
        // 28. Game Level player (Flash) - value of eVar35
        // 29. 
        // 30.
        // 31.
        // 32. SKU of Product Viewed
        if (s.prop10 == 'product') {
            s.prop32 = s.pageName.match(/:([^:]+)$/)[1];
            s.hier2 = (s.pageName.match(/:([^:]+:)([^:]+)$/)[1] + s.prop32).replace(/:/g, '/');
            s.product = ';' + s.prop32;
            s.events = s.apl(s.events, 'prodView', ',', 2);
        }
        // 33. Value of eVar42 - see bellow
        // 34. Value of eVar43 - see bellow
        // 35. Value of eVar44 - see bellow
        s.prop35 = s.getAndPersistValue(s.prop33, 'bipoints', 0);
        // 36. Value of eVar45 Purchase date - see bellow
        s.prop36 = s.getAndPersistValue(s.prop34, 'lifebi', 0);
        // 37.
        // 38.
        // 39.
        // 40. New vs Repeat
        s.prop40 = s.getNewRepeat();
        // 41. Days Since Last Visit
        s.prop41 = s.getDaysSinceLastVisit('s_lv');
        // 42. Visit Number
        s.prop42 = s.getVisitNum();
        
        // 1.
        // 2. Submission Form Name
        if (/:(signupsuccess|contactussuccess)$/i.test(s.pageName)) 
            s.eVar2 = s.pageName.match(/:([^:]+)$/)[1];
        // 3. Interaction Application Name
        if (/:(contactus|newsletter|startloc)$/i.test(s.pageName)) 
            s.eVar3 = s.pageName.match(/:([^:]+)$/)[1];
        // 4. Exit Partner Name, Store ID (n/a)
        // 5. Product View
        if (s.prop10 == 'product') 
            s.eVar5 = s.prop32;
        // 6. Store Locator Search criteria(last)
        s.eVar6 = s.prop6;
        // 7. Store Locator Search criteria (linear)
        s.eVar7 = s.prop6;
        // 8. Campaign (30 days)
        s.eVar8 = s.campaign;
        // 9. Campaign (linear, 30 days)
        s.eVar9 = s.campaign;
        // 10. Reserved for Search Center
        // 11. Referring Domain
        s.eVar11 = s.prop11;
        // 12.
        // 13.
        // 14. Inbound Search Keyword
        // 15. Session ID
        s.eVar15 = s.prop27;
        // 16. Unique Visitor ID
        s.eVar16 = s.prop26;
        // 17. Visit DNA
        if (visitStart) 
            s.eVar17 = '';
        // 18. Lifetime DNA
        // 19. Saw Campaign Site
        // 20. New vs Repeat
        s.eVar20 = s.getValOnce(s.prop40, 'nvr', 0);
        // 21. Days Since Last Visit
        s.eVar21 = s.getValOnce(s.prop41, 'dslv', 0);
        // 22. Visit Number
        s.eVar22 = s.getValOnce(s.prop42, 'vn', 0);
        // 23.
        // 24. Visit DNA
        if (visitStart) 
            s.eVar24 = s.getValOnce(s.eVar17, 'dna', 0);
        // 25. Lifetime DNA
        s.eVar25 = s.getValOnce(s.eVar18, 'lifedna', 0);
        // 26.
        // 27.
        // 28.
        // 29.
        // 30.
        // 31. Tell a Friend
        // 32. Invite Friend
        // 33. Number of Games started (Flash)
        // 34. Game ID viewed (last) (Flash)
        // 35. Games Played (total) (Flash)
        // 36. Finding method
        s.eVar36 = 'browse';
        if (s.getQueryParam('icmp')) 
            s.eVar36 = 'icampaign';
        if (s.getQueryParam('xcmp')) 
            s.eVar36 = 'campaign';
        // 37. External link domain - see events tracking
        // 38. Internal Campaign
        s.eVar38 = s.getQueryParam('icmp');
        // 39. Enhanced download tracking - in s_code
        // 40.
        // 41. Locale
        s.eVar41 = s.prop1;
        // 42. Reserved for Visit DNA
        // 43. Reserved for Lifetime DNA
        // 44. Visit DNA value
        if (visitStart) {
            s.eVar44 = s.getValOnce(s.eVar42, 'bievar', 0);
            s.eVar42 = '0';
        }
        // 45. Lifetime Visit DNA
        s.eVar45 = s.getValOnce(s.eVar43, 'lifebievar', 0);
        // 46. Time Parting (Hour)
        s.eVar46 = s.getValOnce(s.prop2, 'e46', 0);
        // 47. Time Parting (Day)
        s.eVar47 = s.getValOnce(s.prop3, 'e47', 0);
        // 48. Time Partig (Weekday/Weekend)
        s.eVar48 = s.getValOnce(s.prop4, 'e48', 0);
        // 49. Page viewed (all visits)
        // 50.
        
        // When image zoom is used, generate a pageName call
        $jitt('.btnZoom,.zoom').click(function(){
            s.t({
                'pageName': s.pageName + ':zoom'
            });
        });
        
        // Special handling for product detail pages
        if (s.channel == 'catalog') {
            // When Buy Online button is used, generate a pageName call
            $jitt('.btnBuyOnline').click(function(){
                s.t({
                    'pageName': s.pageName + ':buyonline'
                });
            });
            
            // When Print this page button is used, generate a custom link call
            $jitt('.printThisPage').click(function(){
	            s.events = s.apl(s.events, 'event3', ',', 2);
	            s.eVar17 = s.apl(s.eVar17, 'e3', ':', 2);
	            s.eVar18 = s.apl(s.eVar18, 'e3', ':', 2);
	            s.eVar42 = s.eVar43 = '+50';
	            s.linkTrackVars = 'events,eVar17,eVar18,eVar42,eVar43';
	            s.linkTrackEvents = 'event3';
                s.tl(this, 'o', 'print:' + s.pageName);
            });
            
            // When switching to view other tabs info of product page, generate a custom link call
            $jitt('.tabs A').click(function(){
                s.tl(this, 'o', s.pageName + ':' + $jitt(this).text().toLowerCase());
            });
        }
        
        // event1 - Profile created
        if (/:signupsuccess$/i.test(s.pageName)) 
            s.events = s.apl(s.events, 'event1', ',', 2);
        // event2 - Submission
        if (s.eVar2) 
            s.events = s.apl(s.events, 'event2', ',', 2);
        // event3 - Interaction
        if (s.eVar3) {
            s.events = s.apl(s.events, 'event3', ',', 2);
            s.eVar17 = s.apl(s.eVar17, 'e3', ':', 2);
            s.eVar18 = s.apl(s.eVar18, 'e3', ':', 2);
            s.eVar42 = s.eVar43 = '+50';
        }
        // event4 - Exit to Partner
        $jitt('.partners,.partner').click(function(){
            s.events = 'event4,event34';
            s.eVar4 = $jitt.trim($jitt(this).text().replace(/visit /i, ''));
            s.eVar37 = $jitt(this).attr('href').toLowerCase().match(/\/\/([^\/]+)/)[1];
            s.linkTrackVars = 'events,eVar37,eVar4';
            s.linkTrackEvents = 'event4,event34';
            s.tl(this, 'o', 'partner:' + s.eVar37);
        });
        // event5 - Product viewed
        if (s.prop10 == 'product') {
            s.events = s.apl(s.events, 'event5', ',', 2);
            s.events = s.apl(s.events, 'prodView', ',', 2);
            s.eVar17 = s.apl(s.eVar17, 'e5', ':', 2);
            s.eVar18 = s.apl(s.eVar18, 'e5', ':', 2);
            s.products = s.apl(s.products, ';' + s.prop32, ',', 2);
			$jitt('#description,#technology,#careTips').click(function() {
	            void(s.t({
	                'pageName': s.pageName + ':' + $jitt(this).text().toLowerCase()
	            }));
			});
        }
        // event6 - Set a success event on the 5th page of the the visit
        if (s.countNthPage(5) == '1') {
            s.events = s.apl(s.events, 'event6', ',', 2);
            s.events = s.apl(s.events, 'event15', ',', 2);
            s.eVar17 = s.apl(s.eVar17, 'e6', ':', 2);
            s.eVar18 = s.apl(s.eVar18, 'e6', ':', 2);
            s.eVar42 = s.eVar43 = '+50';
            //s.products = s.apl(s.products, 'BI;BI:5 pages;;;event15=50', ',', 2);
        }
        // event7 - Succesful Visit
        // event8 - Reserved for Search Center
        // event9 - Reserved for Search Center
        // event10 - Reserved for Search Center
        // event11 - Reserved for Search Center
        // event12
        // event13
        // event14
        // event15 - Visit Value
        // event16 - Home Page Viewed
        if (s.channel == 'home') 
            s.events = s.apl(s.events, 'event16', ',', 2);
        // event17
        // event18
        // event19
        // event20
        // event21 - Invite/Challenge Friend (Flash)
        // event22
        // event23 - Game Started (Flash)
        // event24 - Game Completed (Flash)
        // event25
        // event26
        // event27
        // event28
        // event29
        // event30
        // event31 - Exit to eTailer
        $jitt('.etailer').click(function(){
            s.events = 'event4,event31';
            s.eVar4 = $jitt(this).text();
            s.eVar37 = $jitt(this).attr('href').toLowerCase().match(/\/\/([^\/]+)/)[1];
            s.linkTrackVars = 'events,eVar37,eVar4';
            s.linkTrackEvents = 'event4,event31';
            s.tl(this, 'o', 'etail:' + s.eVar37);
        });
        // event32 - Exit to store
        $jitt('.store').click(function(){
            s.events = 'event4,event32';
            s.eVar37 = $jitt(this).attr('href').toLowerCase().match(/\/\/([^\/]+)/)[1];
            s.linkTrackVars = 'events,eVar37';
            s.linkTrackEvents = 'event4,event32';
            s.tl(this, 'o', 'store:' + s.eVar37);
        });
        // event33 - Exit to social network
        $jitt('.social,.youtube').click(function(){
            s.events = 'event4,event33';
            s.eVar37 = $jitt(this).attr('href').toLowerCase().match(/\/\/([^\/]+)/)[1];
            s.linkTrackVars = 'events,eVar37';
            s.linkTrackEvents = 'event4,event33';
            s.tl(this, 'o', 'social:' + s.eVar37);
        });
        // event34
        // event35 - Purhcase at eTailer - handled on Schnees.com
        // event36
        // event37
        // event38
        // event39 - File Download - handled in s_code
        // event40
        // event41
        // event42
        // event43
        // event44
        // event45
        // event46
        
        // Copy eVars to props
        s.prop21 = s.eVar17;
        s.prop22 = s.eVar18;
        s.prop23 = s.eVar24;
        s.prop24 = s.eVar25;
        s.prop33 = s.eVar42;
        s.prop34 = s.eVar43;
        s.prop35 = s.eVar44;
        s.prop36 = s.eVar45;
        
        setTimeout("$jitt.tagIntegrity();", 600);
    } 
    catch (e) {
        $jitt.get('http://metrics.gore-tex.com/b/ss/' + s.un + '/1/H.20.3--NS/0?ch=error&pageName=error:tag:' + e + ":" + (typeof e.name != 'undefined' ? e.name : '') + ':' + (typeof e.description != 'undefined' ? e.description : ''));
    }
}

/*
 * Self-error tag detection - check total tag length
 * @addon
 */
$jitt.tagIntegrity = function(){
    try {
        var t = (window['s_i_' + s.un] || window['s_i_' + s.visitorNamespace]).src;
        if (t.length > 2023) 
            $jitt.get('//canoe.112.2O7.net/b/ss/' + s.un + '/1/H.20.3--NS/0?ch=error&pageName=error:length:' + t.length + ':' + location.pathname);
        if (x = t.match(/(\w+)=undefined/)) 
            $jitt.get('//canoe.112.2O7.net/b/ss/' + s.un + '/1/H.20.3--NS/0?ch=error&pageName=error:undefined:' + x[0] + ':' + location.pathname);
    } 
    catch (e) {
        // do nothing
    }
}

$jitt.tags();
