if (typeof(BCNTRY) == 'undefined') {BCNTRY = {};}

//! Copyright (c) 2007 Backcountry.com and its Affiliates.
//! All rights reserved
//! not to be reused without permission
//! $Change: 925607 $
//! $Revision: #7 $
//! $DateTime: 2007/03/23 09:56:32 $
//! PURPOSE: Utility functions for handling onClick handlers and
//! Omniture event tracking. Uses sc_account variable set by 
//! sitecatalyst.tag usertag based on catalog.

// These variables are passed on Q and A and review events in linkTrackVars
var pdpLinkTrackVars = 'channel,pageName,events,prop7,prop10,prop11,prop18,products,eVar3,eVar9,eVar12,eVar13,eVar14,eVar15,eVar24,eVar29';

//! FUNCTION NAME: clearVars()
//! PURPOSE: clears s_sc property values used for tracking
//! INPUTS:
//! sSkipVars - '|' separated string of vars to NOT clear
//! RETURNS:
//! none

function clearVars(sSkipVars)
{
    if (!sSkipVars) {
        sSkipVars = 'null';
    }

    var aPropsToSkip = sSkipVars.split('|');
    var bSkip;
    var fSkip;

    var objRef = s_sc;
    var sScProps = /^(channel|pageName|server|events|pageType|prop|product|hier|purchaseID|campaign|eVar|state|zip)/gi;
    for (var propName in objRef) {
        if (objRef.hasOwnProperty(propName)) {
        bSkip = 0;
        for (i = 0; i < aPropsToSkip.length; ++i) {
            fSkip = new RegExp( '^' + aPropsToSkip[i], 'gi');
            if (propName.match(fSkip) ) {
                bSkip = 1;
                break;
            }
        }
    
            if ( (propName.match(sScProps)) && (bSkip === 0) ) {
                propName = '';
            }
        }
    }
}

function ScTrackPercentPageViewed(percent) { 
    s_sc=s_gi(sc_account);
    s_sc.varUsed = '';
    var sku = s_sc.prop5;
    clearVars();
    s_sc.linkTrackVars = 'events,products,eVar43';
    s_sc.events = 'event48';
    s_sc.linkTrackEvents = 'event48';
    s_sc.eVar43 = percent;
    s_sc.products = ';' + sku + ';;;;evar43=' + percent;
    s_sc.tl('-','o','Content Perusing Tracking');
}

function ucfirst( str ) {
    str += '';
    var f = str.charAt(0).toUpperCase();
    return f + str.substr(1);
}

function _scGetContentPrefix(content_type) {
    var prefix;
    if (content_type == 'review') {
        prefix = 'REV';
    }
    else if (content_type == 'question') {
        prefix = 'QUES';
    }
    else if (content_type == 'answer') {
        prefix = 'ANS';
    }
    else if (content_type == 'cpi') {
        prefix = 'CPI';
    }
    else if (content_type == 'comment') {
        prefix = 'COM';
    }
    return prefix;
}

function ScSubmitContentHelpful(sku, content_type, content_id, is_helpful) {
    var prefix = _scGetContentPrefix(content_type);

    clearVars();

    s_sc = s_gi(sc_account);
    sScLinkName = ucfirst(content_type)+' Helpful';

    s_sc.prop24 = ( is_helpful ) ? "Yes" : "No";
    var track = prefix + "_" + sku + "_" + content_id;

    if (is_helpful === true) {
        s_sc.linkTrackVars = pdpLinkTrackVars + ',prop24,eVar27';
        s_sc.eVar27 = track;
    }
    else {
        s_sc.linkTrackVars = pdpLinkTrackVars + ',prop24,eVar28';
        s_sc.eVar28 = track;
    }

    s_sc.events = 'event25';
    s_sc.linkTrackEvents = 'event25';
    s_sc.tl(this,'o',sScLinkName);
}


//! DEPRECATED!!! Use ScSubmitContentHelpful instead
//! FUNCTION NAME: ScReadReview()
//! PURPOSE: Sends event25 and review string to Omniture when yes/no 
//! hit for "Is review helpful?". called by submitReview() method.
//! INPUTS:
//! reviewID - "rev" + review_id
//! helpful - true/false
//! sku - <-that thing over there...
//! RETURNS:
//! none

function ScReadReview(reviewID, helpful, sku) 
{
    reviewID = reviewID.replace( "rev", "");
    var sc = new ScSubmitContentHelpful(sku, 'review', reviewID, helpful);
}






//! FUNCTION NAME: ScRemoveCartItem()
//! PURPOSE: Sends scRemove event and sku to Omniture when sku is 
//! removed from the cart. Called by remove_from_cart method.
//! INPUTS:
//! sSku - sku of product being removed from cart
//! RETURNS:
//! none

function ScRemoveCartItem(sSku) 
{
    clearVars();
    s_sc=s_gi(sc_account);
    sScLinkName = 'Remove';
    s_sc.linkTrackVars = 'events,products';
    s_sc.events = 'scRemove';
    s_sc.linkTrackEvents = 'scRemove';
    s_sc.products = sSku;
    s_sc.tl(this,'o',sScLinkName);
}

//! FUNCTION NAME: ScUpdateCartItem()
//! PURPOSE: Sends scUpdateCart event and sku to Omniture when sku is 
//! removed from the cart. Called by recalculate_cart_item method.
//! INPUTS:
//! sSku - sku of product being updated in cart
//! RETURNS:
//! none

function ScUpdateCartItem(sSku) 
{
    clearVars();
    s_sc=s_gi(sc_account);
    sScLinkName = 'UpdateCart';
    s_sc.linkTrackVars = 'events,products';
    s_sc.linkTrackEvents = 'event23';
    s_sc.events = 'event23';
    s_sc.products = sSku;
    s_sc.tl(this,'o',sScLinkName);
}

//! FUNCTION NAME: ScUpdateZip()
//! PURPOSE: Sends scUpdateZip event to Omniture when zip is updated. Called by update_shipping_options method.
//! INPUTS:
//! none
//! RETURNS:
//! none

function ScUpdateZip() 
{
    clearVars();
    s_sc=s_gi(sc_account);
    sScLinkName = 'UpdateZip';
    s_sc.linkTrackVars = 'events';
    s_sc.linkTrackEvents = 'event22';
    s_sc.events = 'event22';
    s_sc.tl(this,'o',sScLinkName);
}

//! FUNCTION NAME: ScModifyBillingAddress()
//! PURPOSE: Sends event24 to Omniture when Billing is updated. Called by populate_panel method.
//! INPUTS:
//! option - edit / new
//! RETURNS:
//! none

function ScModifyBillingAddress( option ) 
{
    clearVars();
    s_sc=s_gi(sc_account);
    sScLinkName = 'ModifyBillingAddress';
    s_sc.linkTrackVars = 'events,prop23';
    s_sc.linkTrackEvents = 'event24';
    s_sc.events = 'event24';
    s_sc.prop23 = option + ' Billing Address';
    s_sc.tl(this,'o',sScLinkName);
}

//! FUNCTION NAME: ScModifyShipingAddress()
//! PURPOSE: Sends event24 to Omniture when Shipping is updated. Called by populate_panel method.
//! INPUTS:
//! option - edit / new
//! RETURNS:
//! none

function ScModifyShippingAddress( option ) 
{
    clearVars();
    s_sc=s_gi(sc_account);
    sScLinkName = 'ModifyShippingAddress';
    s_sc.linkTrackVars = 'events,prop23';
    s_sc.linkTrackEvents = 'event24';
    s_sc.events = 'event24';
    s_sc.prop23 = option + ' Shipping Address';
    s_sc.tl(this,'o',sScLinkName);
}

//! FUNCTION NAME: ScReadReviews()
//! PURPOSE: Sends event10 event and sku to Omniture when sku has 
//! less than 4 reviews and user clicks 'Read Reviews' button.
//! INPUTS:
//! sSku - sku of product
//! RETURNS:
//! none

function ScReadReviews(sSku)
{
    clearVars();
    var s_sc=s_gi(sc_account);
    var sScLinkName = 'Read Reviews';
    s_sc.linkTrackVars = 'events,products,prop28';
    s_sc.linkTrackEvents = 'event10';
    s_sc.events = 'event10';
    s_sc.products = sSku;
    s_sc.prop28 = 'Buy_Box:Reviews';
    s_sc.tl(this,'o',sScLinkName);
}

//! FUNCTION NAME: ScLiveChat()
//! PURPOSE: Sends event7 to Omniture when user clicks Live Chat link
//! INPUTS:
//! none
//! RETURNS:
//! none

function ScLiveChat(buttonName)
{
    var s_sc=s_gi(sc_account);
    var page_type = s_sc.prop11;
    s_sc.sendRubicon("bc_livechat");
    s_sc.prop28 = 'lp:' + buttonName;
    s_sc.prop29 = 'Chat Initiated';
    s_sc.linkTrackVars = 'events,prop28,prop29,prop11';
    s_sc.linkTrackEvents = 'event7';
    s_sc.events = 'event7';
    s_sc.prop11 = page_type;
    s_sc.tl(this,"o","Live Help");
}

//! FUNCTION NAME: ScFilterType()
//! PURPOSE: Sends prop6 (filter type) to Omniture uses AJAX filtering
//! tools on subcat/prodgroup pages.
//! INPUTS:
//! sFilter - name of the html entity that user selected.
//! RETURNS:
//! none

function ScFilterType(sFilter)
{
  if (sFilter.match( /^(brand|sortby|price|size_filter)/gi) ) {
      clearVars('pageName');
      var s_sc = s_gi(sc_account);
      s_sc.linkTrackVars = 'prop6,pageName';
    if (sFilter == 'brand') {
        s_sc.prop6 = sFilter + ':' + $('brand_' + $(sFilter).value).text;
    }
    else {
        s_sc.prop6 = sFilter + ':' + $(sFilter).value;
    }
      s_sc.tl(this,'o',"Filter Type");
  }
}

//! FUNCTION NAME: ScTrackShipment()
//! PURPOSE: Sends event13 to Omniture when user clicks 
//! tracking # on Order Detail or 'Track this Package' on tracking page.
//! INPUTS:
//! none
//! RETURNS:
//! none

function ScTrackShipment()
{
    clearVars();
    var s_sc = s_gi(sc_account);
    s_sc.linkTrackVars = 'events';
    s_sc.linkTrackEvents = 'event13';
    s_sc.events = 'event13';
    s_sc.tl(this,'o','Track Shipping');
}

//! FUNCTION NAME: ScViewRSS()
//! PURPOSE: Sends event3 to Omniture when user clicks 
//! Get Feeds link on fuel_your_addiction page
//! INPUTS:
//! none
//! RETURNS:
//! none

function ScViewRSS()
{
    clearVars();
    var s_sc = s_gi(sc_account);
    s_sc.linkTrackVars = 'events';
    s_sc.linkTrackEvents = 'event3';
    s_sc.events = 'event3';
    s_sc.tl(this,'o','View RSS');
    clearVars();
    s_sc = s_gi(sc_account);
    s_sc.linkTrackVars = 'events';
    s_sc.linkTrackEvents = 'event3';
    s_sc.events = '';
}


//! FUNCTION NAME: ScViewRSS()
//! PURPOSE: Sends event3 to Omniture when user clicks 
//! Get Feeds link on fuel_your_addiction page
//! INPUTS:
//! none
//! RETURNS:
//! none

function ScViewGearRSS()
{
    clearVars();
    var s_sc = s_gi(sc_account);
    s_sc.linkTrackVars = 'events';
    s_sc.linkTrackEvents = 'event37';
    s_sc.events = 'event37';
    s_sc.tl(this,'o','View RSS');
    clearVars();
    s_sc = s_gi(sc_account);
    s_sc.linkTrackVars = 'events';
    s_sc.linkTrackEvents = 'event37';
    s_sc.events = '';
}




//! FUNCTION NAME: ScDownloadDesktopAlert()
//! PURPOSE: Sends event3 to Omniture when user clicks 
//! Get Feeds link on fuel_your_addiction page
//! INPUTS:
//! none
//! RETURNS:
//! none

function ScDownloadDesktopAlert()
{
    clearVars();
    var s_sc = s_gi(sc_account);
    s_sc.trackDownloadLinks=false;
    s_sc.linkTrackVars = 'events';
    s_sc.linkTrackEvents = 'event6';
    s_sc.events = 'event6';
    s_sc.tl(this,'o','Download Desktop Alert');
}

//! FUNCTION NAME: ScDownloadDesktopAlert()
//! PURPOSE: Sends event3 to Omniture when user clicks
//! Get Feeds link on fuel_your_addiction page
//! INPUTS:
//! none
//! RETURNS:
//! none

function ScDownloadVistaGadget()
{
    clearVars();
    var s_sc = s_gi(sc_account);
    s_sc.trackDownloadLinks=false;
    s_sc.linkTrackVars = 'events';
    s_sc.linkTrackEvents = 'event9';
    s_sc.events = 'event9';
    s_sc.tl(this,'o','Download Vista Gadget');
}

//! FUNCTION NAME: ScClickedOnFreeShipping()
//! PURPOSE: Sends event11 to Omniture when user clicks
//! FreeShipping promo wells
//! INPUTS:
//! none
//! RETURNS:
//! none
 
function ScClickedOnFreeShipping()
{
    clearVars();
    var s_sc = s_gi(sc_account);
    s_sc.trackDownloadLinks=false;
    s_sc.linkTrackVars = 'events,eVar36';
    s_sc.linkTrackEvents = 'event11';
    s_sc.events = 'event11';
    s_sc.eVar36 = s_sc.pageName;
    s_sc.tl(this,'o','Clicked on freeShipping');
}



//! FUNCTION NAME: ScEmailFriendOdat()
//! PURPOSE: Sends event4 to Omniture has user emails to a friend
//! INPUTS:
//! none
//! RETURNS:
//! none

function ScEmailFriendOdat()
{
    clearVars();
    var s_sc = s_gi(sc_account);
    s_sc.linkTrackVars = 'events,prop28';
    s_sc.linkTrackEvents = 'event4';
    s_sc.events = 'event4';
    s_sc.prop28 = 'Tell_A_Friend:' + s_sc.pageName + ':Left_Nav:' + s_sc.prop7; 
    s_sc.tl(this,'o','Email a Friend');
}

//! FUNCTION NAME: ScEmailSignup()
//! PURPOSE: Sends event3 to Omniture when user signs up for the daily dosage
//! INPUTS:
//! none
//! RETURNS:
//! none

function ScEmailSignup()
{
    clearVars();
    var s_sc = s_gi(sc_account);
    s_sc.linkTrackVars = 'events,prop28';
    s_sc.linkTrackEvents = 'event2';
    s_sc.events = 'event2';
    s_sc.prop28 = 'Email_Opt_In:' + s_sc.pageName;
    s_sc.tl(this,'o','Email Signup');
}

//! FUNCTION NAME: ScPostForum()
//! PURPOSE: Sends event5 to Omniture when user posts to forum
//! INPUTS:
//! none
//! RETURNS:
//! none

function ScPostForum()
{
    clearVars();
    var s_sc = s_gi(sc_account);
    s_sc.linkTrackVars = 'events';
    s_sc.linkTrackEvents = 'event5';
    s_sc.events = 'event5';
    s_sc.tl(this,'o','Post to Forum');
}

//! FUNCTION NAME: ScSubmitReview()
//! PURPOSE: Sends event5 to Omniture when user submits a review on PDP
//! INPUTS:
//! sSku to pass to omniture
//! RETURNS:
//! none
function ScSubmitReview(sSku)
{
    // Emulate var scv = new ScClearVars();, but don't clear prop10 (a/b testing)
    var objRef = s_sc;
    var sScProps = /^(channel|server|pageName|events|pageType|prop|product|hier|purchaseID|campaign|eVar|state|zip)/gi;
    for(var propName in objRef) {
        if ( propName != 'prop10' && propName.match(sScProps)) {
            propName = '';
        }
    }
    s_sc = s_gi(sc_account);
    s_sc.products = sSku;
    s_sc.linkTrackVars = pdpLinkTrackVars;
    s_sc.linkTrackEvents = 'event5';
    s_sc.events = 'event5';
    s_sc.prop11 = "Product Review";
    s_sc.channel = "Review Submission";
    s_sc.eVar13 = "Review Submission";
    s_sc.eVar15 = "Product Review";
    s_sc.tl(this,'o','Product Review Submission Thank you');
}

//! FUNCTION NAME: ScDownloadIEExt()
//! PURPOSE: Sends even8 to Omniture when user downloads IE plugin
//! INPUTS:
//! none
//! RETURNS:
//! none

function ScDownloadIEExt()
{
    clearVars();
    var s_sc = s_gi(sc_account);
    s_sc.trackDownloadLinks=false;
    s_sc.linkTrackVars = 'events';
    s_sc.linkTrackEvents = 'event8';
    s_sc.events = 'event8';
    s_sc.tl(this,'o','Download IE Extension');    
}

//! FUNCTION NAME: ScDownloadFFExt()
//! PURPOSE: Sends event7 to Omniture when user downloads FireFox plugin
//! INPUTS:
//! none
//! RETURNS:
//! none

function ScDownloadFFExt()
{
    clearVars();
    var s_sc = s_gi(sc_account);
    s_sc.trackDownloadLinks=false;
    s_sc.linkTrackVars = 'events';
    s_sc.linkTrackEvents = 'event7';
    s_sc.events = 'event7';
    s_sc.tl(this,'o','Download Firefox Extension');
}

//! FUNCTION NAME: ScShareOnFacebook()
//! PURPOSE: Sends event38 to Omniture when clicks on 'Share on Facebook' button
//! INPUTS:
//! none
//! RETURNS:
//! none

function ScShareOnFacebook()
{
    clearVars();
    var s_sc = s_gi(sc_account);
    s_sc.linkTrackVars = 'events';
    s_sc.linkTrackEvents = 'event38';
    s_sc.events = 'event38';
    s_sc.tl(this,'o','Share on Facebook');
    s_sc.prop28 = 'Home:Facebook_Share';
}

//! FUNCTION NAME: ScAbTest()
//! PURPOSE: Sends a/b test info for leftnav
//! INPUTS:
//! string to pass to Omniture
//! RETURNS:
//! none

function ScAbTest(strTestVar) 
{
    clearVars();
    var s_sc = s_gi(sc_account);
    s_sc.linkTrackVars = 'prop10,eVar9';
    s_sc.prop10 = strTestVar;
    s_sc.eVar9 = strTestVar;
    s_sc.tl(this,'o','A/B Nav Link Testing');
}

//! FUNCTION NAME: ScEmailCampaigns
//! PURPOSE: Sends pixel call for email signup campaigns
//! INPUTS:
//! strCampaignId - string to pass for internal campaign id
//! strEvent - SiteCatalyst Event (event2 = email signup, event4 = email to a friend)
//! strLinkName - Descriptive link name
//! RETURNS:
//! none

function ScEmailCampaigns(strCampaignId,strEvent,strLinkName)
{
    clearVars();
    var s_sc = s_gi(sc_account);
    s_sc.linkTrackVars = 'events,eVar5,prop28';
    s_sc.linkTrackEvents = strEvent;
    s_sc.events = strEvent;
    if(strLinkName.match(/friend/)) {
        s_sc.prop28 = 'Tell_A_Friend:' + s_sc.pageName;
    }
    else {
        s_sc.prop28 = 'Email_Opt_In:' + s_sc.pageName;
    }
    s_sc.eVar5 = strCampaignId;
    s_sc.tl(this,'o',strLinkName);
}

//! FUNCTION NAME: ScVariantPop
//! PURPOSE: Sends pixel call no variant js popup
//! INPUTS:
//! none
//! RETURNS:
//! none
function ScVariantPop()
{
    clearVars();
    var s_sc = s_gi(sc_account);
    var strLinkName = 'Variant Alert Pop Up';
    s_sc.linkTrackVars = 'events';
    s_sc.linkTrackEvents = 'event29';
    s_sc.events = 'event29';
    s_sc.tl(this,'o',strLinkName);
}

//! FUNCTION NAME: scResUpdate
//! PURPOSE: Sends pixel call for resonance suggested items on page load.
//! INPUTS:
//! none
//! RETURNS:
//! none

var scResTimeOutCount = 1000;
var scResMaxTimeOutCount = 2000; //128000

function scResUpdate() {
    var location_result = window.location.href.match('cart');
    if(location_result) {
        var returning = [];
        var itemsToCheck = ['dogfunk_cart', 'people_ab_items', 'pdp_related_items', 'store_cart', 'store_product_ri', 'outlet_product_ri', 'dogfunk_product_ri', 'related_items'];
        var skuItemsToCheck = ['item_num', 'line_items'];
        var resItems = [];
        for (var i in itemsToCheck) {
            if (document.getElementById(itemsToCheck[i]) !== null) {
                resItems.push(document.getElementById(itemsToCheck[i]));
            }
        }

        for (var j in resItems) {
            if (resItems[j] === null) {
                if (scResTimeOutCount > scResMaxTimeOutCount){return;}
                setTimeout(scResUpdate, scResTimeOutCount);
                scResTimeOutCount = scResTimeOutCount * 2;
                return;
            }
        }

        var re = /\?RSC_ID=(\w{2,4}_\w\w\w\d\d\d\d)/g;
        var current;
        for (var k in resItems) {
            if (resItems.hasOwnProperty(k)) {
                current = re.exec(resItems[k].innerHTML);
                while (current) {
                    returning.push(current);
                    current = re.exec(resItems[k].innerHTML);
                }
            }
        }
        if (returning.length === 0){
            //set up new call exit
            if (scResTimeOutCount > scResMaxTimeOutCount){return;}
            setTimeout(scResUpdate, scResTimeOutCount);
            scResTimeOutCount = scResTimeOutCount * 2;
            return;
        }
        else {
            var skusObject = {};
            for (i in returning) {
                if (returning.hasOwnProperty(i)){
                    skusObject[returning[i][1]] = returning[i][1];
                }
            }
            var skuArray = [];
            var formatted_sku;
            var formattedSkuArray = [];
            for (i in skusObject) {
                if (skusObject.hasOwnProperty(i)){
                    formatted_sku = i.replace("CUS_", "");
                    skuArray.push(i);
                    formattedSkuArray.push(formatted_sku);
                }
            }
            var prop27;
            for (i in skuItemsToCheck) {
                if (document.getElementById(skuItemsToCheck[i]) !== null) {
                    prop27 = /Item\s#?\s?(\w\w\w\d\d\d\d)/.exec(document.getElementById(skuItemsToCheck[i]).innerHTML)[1];
                    i = skuItemsToCheck.length;
                }
            }

            clearVars();
            sScLinkName = 'Suggested Items';
            s_sc=s_gi(sc_account);
            s_sc.linkTrackVars = 'prop26,prop27,prop17';
            s_sc.prop17 = prop27 + "::" + formattedSkuArray.join('-');
            s_sc.prop26 = skuArray.join(',');
            s_sc.prop27 = prop27;
            s_sc.tl(this,'o', sScLinkName);

            _setCookie('cart_cross_sell', s_sc.prop17, '1', '/');

            return; 
        }
    }
}

//! FUNCTION NAME: ScSubmitQandA()
//! PURPOSE: Sends appropriate events and evars to Omniture when user submits content
//!          for questions or answers
//! INPUTS:
//! type - Q|A
//!           based on if this is a question submission or answer, send
//!        details of that to omniture
//! action - new|edit
//!        based on if this is a new question/answer or an edit, send
//!        details of that to omniture
//! RETURNS:
//! none

function ScSubmitQandA(type, action)
{
    //Check data first
    if (type != 'Q' && type != 'A') {
        return;
    }
    if (action != 'new' && action != 'edit') {
        return;
    }
    clearVars();
    var s_sc = s_gi(sc_account);

    if (type == 'Q' && action == 'new') {
        s_sc.linkTrackEvents = 'event32';
        s_sc.events = 'event32';
    }
    else if (type == 'A' && action == 'new') {
        s_sc.sendRubicon("bc_QandA");
        s_sc.linkTrackEvents = 'event33';
        s_sc.events = 'event33';
    }
    else if (action == 'edit') {
        s_sc.linkTrackEvents = 'event34';
        s_sc.events = 'event34';
    }

    var eVarLocation = '';
    if (s_sc.eVar15 == 'Product Detail') {
        eVarLocation = s_sc.prop5;
    }

    s_sc.eVar30 = eVarLocation + '_' + s_sc.eVar15 + '_' + s_sc.eVar24 + '_' + type;

    s_sc.linkTrackVars = pdpLinkTrackVars;

    s_sc.tl(this,'o','Submit Question and Answer');
}

//! FUNCTION NAME: ScFlagQandA()
//! PURPOSE: Sends appropriate events and evars to Omniture when user flags or
//!          unflags content for questions or answers
//! INPUTS:
//! type - Q|A
//!           based on if this is a flagging a question or answer, send details of
//!        that to omniture
//! action - add|remove
//!        based on if this is adding a new flag or removing a flag - send different
//!        details to omniture
//! id     - the content id (question's unique id or answer's unique id)
//! RETURNS:
//! none
function ScFlagQandA(type, action, id)
{
    //Check data first
    if (type != 'Q' && type != 'A') {
        return;
    }
    if (action != 'add' && action != 'remove') {
        return;
    }
    clearVars();
    var s_sc = s_gi(sc_account);

    var eVarLocation = '';
    if (s_sc.eVar15 == 'Product Detail') {
        eVarLocation = s_sc.prop5;
    }

    s_sc.linkTrackVars = pdpLinkTrackVars;
    if (action == 'add') {
        s_sc.linkTrackEvents = 'event35';
        s_sc.events = 'event35';
        s_sc.eVar31 = eVarLocation + '_' + s_sc.eVar15 + '_' + s_sc.eVar24 + '_' + type + '_' + id;
        s_sc.linkTrackVars += ',eVar31';
    }
    else if (action == 'remove') {
        s_sc.linkTrackEvents = 'event36';
        s_sc.events = 'event36';
        s_sc.eVar32 = eVarLocation + '_' + s_sc.eVar15 + '_' + s_sc.eVar24 + '_' + type + '_' + id;
        s_sc.linkTrackVars += ',eVar32';
    }

    s_sc.tl(this,'o','Flag Question and Answer');
}

// If resonance is in the page, call scResUpdate()
if (typeof(resx)) {
    setTimeout(scResUpdate,2000);
}

// omniture tracking code for liveperson
// Live person interaction functions for chat invitations
//! PURPOSE: Track chat invitation accepts and declines
//! INPUTS:
//: objName - live person variable
//! RETURNS: true, to continue the action

if(typeof(lpMTagConfig)!="undefined") {
    lpMTagConfig.inviteChatShown = function(objName) {
        var inviteObj = eval(objName);
        var page_type = s_sc.prop11;
        clearVars();
        s_sc=s_gi(sc_account);
        s_sc.linkTrackVars = 'prop29,prop11';
        s_sc.prop29 = "Invite Shown";
        s_sc.prop11 = page_type;
        s_sc.tl(this,'o',"Filter Type");
        return true;
    };

    lpMTagConfig.inviteChatAccept = function(objName) {
        var inviteObj = eval(objName);
        var page_type = s_sc.prop11;
        clearVars();
        s_sc=s_gi(sc_account);
        s_sc.sendRubicon("bc_livechat");
        s_sc.linkTrackVars = 'events,prop29,prop28,prop11';
        s_sc.linkTrackEvents = "event7,event30";
        s_sc.prop28 = "lp:Invitation Accepted";
        s_sc.prop29 = "Invite Accepted";
        s_sc.prop11 = page_type;
        s_sc.events = "event7,event30";
        s_sc.tl(this,'o',"Filter Type");
        return true;
    };

    lpMTagConfig.inviteChatDeclined = function(objName) {
        var inviteObj = eval(objName);
        var page_type = s_sc.prop11;
        clearVars();
        s_sc=s_gi(sc_account);
        s_sc.linkTrackVars = 'events,prop29,prop28,prop11';
        s_sc.linkTrackEvents = "event31";
        s_sc.prop28 = "lp:Invitation declined";
        s_sc.prop29 = "Invite Declined";
        s_sc.prop11 = page_type;
        s_sc.events = "event31";
        s_sc.tl(this,'o',"Filter Type");
        return true;
    };
}

// omniture onclick tracking code for ODAT promo ad's
// Marketing writes their own anchor tags, so they have
// been instructed to call this function for all their 
// onclick tracking needs.
// PURPOSE: to track when a user clicks on an ODAT promo ad
// INPUTS: what prop28 will be set to and sent to omniture
// RETURNS: true

function odat_ad_track(value) {
    clearVars();
    var s_sc = s_gi(sc_account);
    s_sc.linkTrackVars = 'prop28';
    s_sc.prop28 = value;
    s_sc.tl(this,'o',"Filter Type");
    return true;
}

//Item Return Tracking
function return_item_tracking(sku, quantity, reason) {
    clearVars();
    var s_sc = s_gi(sc_account);
    s_sc.linkTrackVars = 'prop33,prop34,prop35';
    s_sc.prop33 = sku;
    s_sc.prop34 = quantity;
    s_sc.prop35 = reason;
    s_sc.tl(this,'o','Return Item Tracking');
    return true;
}

// PDP Mini-Profile events
function track_pdp_user_image_zoom() {
    clearVars();
    s_sc=s_gi(sc_account);
    s_sc.trackExternalLinks=false;
    s_sc.linkTrackVars = 'events';
    s_sc.linkTrackEvents = 'event58';
    s_sc.events = 'event58';
    s_sc.tl(this,'o','User PDP Image Zoom');
    return true;
}

function track_pdp_mini_proflile_popup() {
    s_sc=s_gi(sc_account);
    clearVars();
    s_sc.linkTrackVars = 'events';
    s_sc.linkTrackEvents = 'event38';
    s_sc.events = 'event38';
    s_sc.tl(this,'o','Mini Profile Popup');
    return true;
}

// Profile Events

function track_profile_use_real_name() {
    s_sc=s_gi(sc_account);
    clearVars();
    s_sc.linkTrackVars = 'events';
    s_sc.linkTrackEvents = 'event57';
    s_sc.events = 'event57';
    s_sc.tl(this,'o','Profile Use Real Name');
    return true;
}

function track_profile_edit_display_name() {
    s_sc=s_gi(sc_account);
    clearVars();
    s_sc.linkTrackVars = 'events';
    s_sc.linkTrackEvents = 'event43';
    s_sc.events = 'event43';
    s_sc.tl(this,'o','Profile Save Display Name');
    return true;
}

function track_profile_edit_photo() {
    s_sc=s_gi(sc_account);
    clearVars();
    s_sc.linkTrackVars = 'events';
    s_sc.events = 'event39';
    s_sc.linkTrackEvents = 'event39';
    s_sc.tl(this,'o','Profile Save Photo');
    return true;
}

function track_profile_edit_location() {
    s_sc=s_gi(sc_account);
    clearVars();
    s_sc.linkTrackVars = 'events';
    s_sc.events = 'event40';
    s_sc.linkTrackEvents = 'event40';
    s_sc.tl(this,'o','Profile Save Location');
    return true;
}

function track_profile_edit_bio() {
    s_sc=s_gi(sc_account);
    clearVars();
    s_sc.linkTrackVars = 'events';
    s_sc.events = 'event41';
    s_sc.linkTrackEvents = 'event41';
    s_sc.tl(this,'o','Profile Save Bio');
    return true;
}

function track_profile_edit_passions(passion_id, add) {
    var prefix = add ? '+' : '-';
    s_sc=s_gi(sc_account);
    clearVars();
    s_sc.linkTrackVars = 'events,prop47';
    s_sc.events = 'event42';
    s_sc.linkTrackEvents = 'event42';
    s_sc.prop47 = prefix + passion_id;
    s_sc.tl(this,'o','Profile Save Passions');
    return true;
}

//
// Gear list events
//

/**
 * ------------------------------------------------------------------------------------------------------------ 
 * Track when a user clicks on the 'Gear Lists' link in the header.
 * ------------------------------------------------------------------------------------------------------------ 
 */
function ScTrackGearListHeaderClick() {
    var pageName = s_sc.pageName || 'Blank';
    template_links_cookie('tr_template', pageName+':Header:Gear Lists');
}

/**
 * ------------------------------------------------------------------------------------------------------------ 
 * Track when a gear list search is performed.
 * @param {String} searchText The search phrase
 * ------------------------------------------------------------------------------------------------------------
 */
function ScTrackGearListSearch(searchText, tags) {
    s_sc=s_gi(sc_account);
    clearVars();
    s_sc.linkTrackVars = 'events,eVar25,prop21';
    s_sc.events = 'event49';
    s_sc.prop21 = tags.length ? tags.split(',').length : '0';
    s_sc.linkTrackEvents = 'event49';
    s_sc.eVar25 = searchText;
    s_sc.tl(this,'o','Gear List Search');
}

/**
 * ------------------------------------------------------------------------------------------------------------ 
 * Creates an object which tracks when a form is abandoned (leave the page without submitting)
 * and which was the last field to be focused before abandonment.
 * @param {String} name A name to represent this form
 * @param {String} prop The name of the prop that will be used to track abandonment for this form
 * @param {Object|Array} forms An array of forms who's onsubmit event indicates non-abandonment
 * @param {Object|Array} fields An array of fields who are candidates for being the last focused field before abandonment
 * ------------------------------------------------------------------------------------------------------------
 */
function ScTrackFormAbandonment(name, prop, forms, fields) {
    this.prop = prop;
    this.name = name;
    var oThis = this;
    var i;
    //for each form, attach setFormSubmitted to form submit event
    if(typeof(forms) != 'undefined') {
        for(i = 0; i < forms.length; i++) {
            ye.addListener(forms[i], 'submit', oThis.handleFormSubmitted, oThis, true);
        }
    }

    //for each field, attache fieldFocused to focus event
    if(typeof(fields) != 'undefined') {
        for(i = 0; i < fields.length; i++) {
            ye.addListener(fields[i], 'focus', oThis.handleFieldFocused, oThis, true);
        }
    }

    //attach pageUnloaded to page unload event
    ye.addListener(window, 'unload', oThis.handleUnload, oThis, true);
}
ScTrackFormAbandonment.prototype = {
    prop: null,
    name: null,
    lastFieldFocused: 'none',
    formSubmited: false,
    handleFieldFocused: function(event) {
        var fieldName = ye.getTarget(event).name;
        this.lastFieldFocused = fieldName;
    },
    handleFormSubmitted: function() {
        this.formSubmitted = true;
    },
    handleUnload: function() {
        if(!this.formSubmitted) {
            s_sc=s_gi(sc_account);
            clearVars();
            s_sc.linkTrackVars = this.prop;
            s_sc[this.prop] = this.lastFieldFocused;
            s_sc.tl(this, 'o', this.name + ' Form Abandoned');
        }
    }
};

/**
 * ------------------------------------------------------------------------------------------------------------ 
 * Track when a user clicks 
 * ------------------------------------------------------------------------------------------------------------
 */
function ScTrackAddToGearListClicked(immediate, is_new, logged_in) {
    s_sc=s_gi(sc_account);
    var propVal = s_sc.pageName + ':Add Product To ' +
        (is_new ? 'New ' : '') + 'Gear List:Logged ' +
        (logged_in ? 'In' : 'Out');
    if(immediate) {
        clearVars();
        s_sc.linkTrackVars = 'events,prop28,eVar36';
        s_sc.eVar36 = s_sc.pageName;
        s_sc.events = 'event52';
        s_sc.linkTrackEvents = 'event52';
        s_sc.prop28 = propVal;
        s_sc.tl(this, 'o', 'Add Proudct To Gear List');
    }
    else {
        template_links_cookie('tr_template', propVal);
    }
}

//! FUNCTION NAME: ScTrackContentUpload()
//! PURPOSE: Sends an arbitrary event to omniture based on user's login status
//! INPUTS:omn_event, a string of the form event\d+
//! RETURNS:
//! none
function ScTrackContentUpload(omn_event,content_type)
{
    clearVars();
    var s_sc = s_gi(sc_account);
    var events = [];
    if (omn_event) {
        events.push(omn_event);
    }
    s_sc.linkTrackVars = 'prop11,eVar15,eVar36';
    s_sc.prop11 = "Community Login";
    s_sc.eVar15 = "Community Login";
    s_sc.eVar36 = s_sc.pageName;
    if (content_type == 'list') {
        events.push('event55'); //add list
        if($('content_form').sku.value) {
            events.push('event52'); //add product to list
        }
    }
    if(events.length) {
        s_sc.linkTrackVars = 'events,' + s_sc.linkTrackVars;
        s_sc.linkTrackEvents = s_sc.events = events.join(',');
    }
    s_sc.tl(this,'o','Community Content');
}
//! FUNCTION NAME: ScPdpType()
//! PURPOSE: Sends returns pdp_type
//! INPUTS:nada
//! RETURNS:one of ('POOS','TOOS','PDP)
//! none
function ScPdpType() {
  return (/^POOS:/).test(s_sc.pageName)?'POOS'
    :(/^TOOS:/).test(s_sc.pageName)?'TOOS'
      :'PDP';
}

/**
 * ------------------------------------------------------------------------------------------------------------ 
 * Function to track when the tab alert starts
 *
 * @param {String} varValue The text set into the tab title.
 * ------------------------------------------------------------------------------------------------------------
 */
function ScTrackTabAlertStart(varValue) {
    clearVars();    
    var s_sc = s_gi(sc_account);
    s_sc.linkTrackVars = 'eVar45';
    s_sc.eVar45 = varValue;
    s_sc.tl(this,'o','Tab Alert Start');
}

/**
 * ------------------------------------------------------------------------------------------------------------ 
 * Function to track when the user comes back to the tab and the tab alert was executing.
 * ------------------------------------------------------------------------------------------------------------
 */
function ScTrackTabAlertStop() {
    clearVars();
    s_sc = s_gi(sc_account);
    s_sc.linkTrackVars = 'events';
    s_sc.events = 'event49';
    s_sc.linkTrackEvents =  'event49';
    s_sc.tl(this,'o','Tab Alert Stop');
}

/**
 * ------------------------------------------------------------------------------------------------------------ 
 * Function to track when the user clicks on the tab and we associated this with the item sku.
 * @param {String} The current item sku
 * ------------------------------------------------------------------------------------------------------------
 */
function ScTrackTabAlertClick(sku) {
    clearVars();    
    var s_sc = s_gi(sc_account);
    s_sc.linkTrackVars = 'eVar46';
    s_sc.eVar45 = sku;
    s_sc.tl(this,'o','User Clicked Tab Alert');
}

/**
 * ------------------------------------------------------------------------------------------------------------ 
 * Function to track when the user clicks on the 'What is This?' link on the cart or checkout page.
 * ------------------------------------------------------------------------------------------------------------
 */
BCNTRY.ScWhatIsThisClicked = function() {
    clearVars();    
    var s_sc = s_gi(sc_account);
    s_sc.linkTrackVars = 'events,eVar36';
    s_sc.linkTrackEvents = 'event13';
    s_sc.events = 'event13';
    s_sc.eVar36 = s_sc.pageName;
    s_sc.tl(this,'o','User Clicked "What is this?"');
};

/**
 * ------------------------------------------------------------------------------------------------------------ 
 * Function to track when the user clicks on the 'Ship Now' button on the order history page.
 * ------------------------------------------------------------------------------------------------------------
 */
BCNTRY.ScShipNowClicked = function() {
    clearVars();    
    var s_sc = s_gi(sc_account);
    s_sc.linkTrackVars = 'events,eVar36';
    s_sc.linkTrackEvents = 'event16';
    s_sc.events = 'event16';
    s_sc.eVar36 = s_sc.pageName;
    s_sc.tl(this,'o','User Clicked "Ship Now"');
};


/**
 * ------------------------------------------------------------------------------------------------------------ 
 * Function to track when the user clicks on the 'Find out more' button.
 * ------------------------------------------------------------------------------------------------------------
 */
BCNTRY.ScFindOutClicked = function() {
    clearVars();    
    var s_sc = s_gi(sc_account);
    s_sc.linkTrackVars = 'prop28';
    s_sc.prop28 = s_sc.pageName+':popup:Find out more';
    var lt=this.href!=null?s_sc.lt(this.href):"";
    if (lt=="") {
        s_sc.tl(this,'o','User Clicked "Find out more"');
    }
    return true;
};

/**
 * ------------------------------------------------------------------------------------------------------------ 
 * Function to track when the user clicks on the 'What did I miss?' button.
 * ------------------------------------------------------------------------------------------------------------
 */
BCNTRY.ScWhatDidIMissClicked = function() {
    clearVars();    
    var s_sc = s_gi(sc_account);
    s_sc.linkTrackVars = 'prop28';
    s_sc.prop28 = s_sc.pageName+':timedout:What did I miss';
    var lt=this.href!=null?s_sc.lt(this.href):"";
    if (lt=="") {
        s_sc.tl(this,'o','User clicked "What did I miss"');
    }
};

/**
 * ------------------------------------------------------------------------------------------------------------ 
 * Function to track when the user clicks on the 'Learn the ropes' button on the receipt page.
 * ------------------------------------------------------------------------------------------------------------
 */
BCNTRY.ScLearnTheRopesClicked = function() {
    clearVars();    
    var s_sc = s_gi(sc_account);
    s_sc.linkTrackVars = 'prop28';
    s_sc.prop28 = s_sc.pageName+':noncon:Learn the ropes';
    var lt=this.href!=null?s_sc.lt(this.href):"";
    if (lt=="") {
        s_sc.tl(this,'o','User Clicked "Learn the ropes"');
    }
};

/**
 * ------------------------------------------------------------------------------------------------------------ 
 * Function to track when the user clicks on the 'Hold Order' button on the receipt page.
 * ------------------------------------------------------------------------------------------------------------
 */
BCNTRY.ScHoldOrderClicked = function() {
    clearVars();    
    var s_sc = s_gi(sc_account);
    s_sc.linkTrackVars = 'events';
    s_sc.linkTrackEvents = 'event12';
    s_sc.events = 'event12';
    s_sc.tl(this,'o','User Clicked "Hold Order"');
};
