/*

Nobia
Tracking javascript functions

Author: Creuna Danmark A/S / www.creuna.dk
Copyright: 2011, Creuna Danmark A/S. All rights resevered

-----------------------------------------------------------------------*/

var _gaq = _gaq || [];

if (!NobiaTracking)
{
    var NobiaTracking = {};
}

NobiaTracking.isDebug = false;


(function ($)
{
    $.extend({ "log": function ()
    {
        if (arguments.length > 0 && NobiaTracking.isDebug)
        {
            // join for graceful degregation
            var args = (arguments.length > 1) ? Array.prototype.join.call(arguments, " ") : arguments[0];
            // this is the standard; firebug and newer webkit browsers support this
            try
            {
                console.log(args);
                return true;
            }
            catch (e)
            {
                // newer opera browsers support posting erros to their consoles
                try
                {
                    opera.postError(args);
                    return true;
                }
                catch (e) { }
            }
            // catch all; a good old alert box
            alert(args);
            return false;
        }
    }
    });
})(jQuery);

NobiaTracking.init = function ()
{
    if (NobiaTracking.trackingInfo && NobiaTracking.trackingInfo.trackingId)
    {
        _gaq.push(['_setAccount', NobiaTracking.trackingInfo.trackingId]);
        _gaq.push(['_trackPageLoadTime']);

        var domain = window.location.hostname;
        if (domain.indexOf('myresjokok') > -1)
        { // define if myresjokok
            _gaq.push(['webstrateg._setAccount', 'UA-10872643-1']);
        }

        /* Rollup Tracker */
        if (NobiaTracking.trackingInfo.rollupTrackingId)
        {
            _gaq.push(['Rollup._setAccount', NobiaTracking.trackingInfo.rollupTrackingId]);
            _gaq.push(['Rollup._trackPageLoadTime']);
        }
        NobiaTracking.customVariable();
        NobiaTracking.setPageIdentifier();
        NobiaTracking.internalSearch();
        NobiaTracking.downloads();
        NobiaTracking.mailToDealer();
        //NobiaTracking.searchDealer();
        NobiaTracking.iPaper();
        NobiaTracking.bookMeeting();
        NobiaTracking.subscribeOrderCatalog();
        NobiaTracking.outletSection();
        NobiaTracking.socialShare();
        NobiaTracking.marbodalJobs();
        NobiaTracking.job();
    }
    else
    {
        NobiaTracking.trackingInfo = { trackingId: '', rollupTrackingId: '' };
    }
    NobiaTracking.embedJsFile();
},

NobiaTracking.marbodalJobs = function ()
{
    jQuery('#id_matrix input.btnJobsSales').live('click', function ()
    {
        if (Page_IsValid)
        {
            _gaq.push(['_trackEvent', 'JobInquiry', 'Sent']);
            if (NobiaTracking.trackingInfo.rollupTrackingId)
            {
                _gaq.push(['Rollup._trackEvent', 'JobInquiry', 'Sent']);
            }
        }
    });

},

NobiaTracking.socialShare = function ()
{
    jQuery('#footerContainer a.facebookLike').live('click', function ()
    {
        _gaq.push(['_trackEvent', 'Social', 'Facebook']);
        if (NobiaTracking.trackingInfo.rollupTrackingId)
        {
            _gaq.push(['Rollup._trackEvent', 'Social', 'Facebook']);
        }
    });
    jQuery('#footerContainer a.onLinkedin').live('click', function ()
    {
        _gaq.push(['_trackEvent', 'Social', 'LinkedIn']);
        if (NobiaTracking.trackingInfo.rollupTrackingId)
        {
            _gaq.push(['Rollup._trackEvent', 'Social', 'LinkedIn']);
        }
    });
},

NobiaTracking.lightboxStarter = function (meetingBookerHash, catalogAppHash)
{
    jQuery('a[href="#' + catalogAppHash + '"]').live('click', function ()
    {
        _gaq.push(['_trackEvent', 'OrderCatalogue', 'Start']);
        if (NobiaTracking.trackingInfo.rollupTrackingId)
        {
            _gaq.push(['Rollup._trackEvent', 'OrderCatalogue', 'Start']);
        }
    })
    jQuery('a[href="#' + meetingBookerHash + '"]').live('click', function ()
    {
        _gaq.push(['_trackEvent', 'BookMeeting', 'Start']);
        if (NobiaTracking.trackingInfo.rollupTrackingId)
        {
            _gaq.push(['Rollup._trackEvent', 'BookMeeting', 'Start']);
        }
    })
}

NobiaTracking.outletSection = function ()
{
    var filterLinks = jQuery('.modelHolder .filterBox #filter a');
    filterLinks.live('click', function ()
    {
        var self = jQuery(this),
            dealer = jQuery('.filterBox select.dealerSelect option:selected'),
            dealerVal = dealer.val() !== '-1' ? jQuery.trim(dealer.text()) : 'No shop';
        _gaq.push(['_trackEvent', 'MarketPlace', self.text(), dealerVal]);
        if (NobiaTracking.trackingInfo.rollupTrackingId)
        {
            _gaq.push(['Rollup._trackEvent', 'MarketPlace', self.text(), dealerVal]);
        }
    });
    var readMoreLinks = jQuery('.modelHolder .modelItemInfo a.readMore');
    readMoreLinks.live('click', function ()
    {
        var self = jQuery(this);
        _gaq.push(['_trackEvent', 'MarketPlace', self.attr('title')]);
        if (NobiaTracking.trackingInfo.rollupTrackingId)
        {
            _gaq.push(['Rollup._trackEvent', 'MarketPlace', self.attr('title')]);
        }

    });
    jQuery('.modelHolder').delegate('.dealerSelect', 'change', function ()
    {
        var self = jQuery(this),
            category = jQuery.trim(jQuery('#filter .selected').text()),
            dealerVal = self.val() !== '-1' ? jQuery.trim(self.find(':selected').text()) : 'No shop';
        _gaq.push(['_trackEvent', 'MarketPlace', category, dealerVal]);
        if (NobiaTracking.trackingInfo.rollupTrackingId)
        {
            _gaq.push(['Rollup._trackEvent', 'MarketPlace', category, dealerVal]);
        }
    });
},

NobiaTracking.catalogue = function (filenamesToTrack)
{
    var filenamesAmount = filenamesToTrack.length;
    if (filenamesAmount)
    {
        for (var i = 0; i < filenamesAmount; i++)
        {
            _gaq.push(['_trackEvent', 'OrderCatalogue', filenamesToTrack[i]]);
            if (NobiaTracking.trackingInfo.rollupTrackingId)
            {
                _gaq.push(['Rollup._trackEvent', 'OrderCatalogue', filenamesToTrack[i]]);
            }

        }
    }
},

NobiaTracking.subscribeOrderCatalog = function ()
{
    jQuery('.lightboxContent.step4 input.blueboxbutton, .lightboxContent.step4 input.whiteboxbutton').live('click', function ()
    {
        if (jQuery('.lightboxContent input[name="userSubscribe"]').is(':checked'))
        {
            _gaq.push(['_trackEvent', 'Newsletter', 'Sign up']);
            if (NobiaTracking.trackingInfo.rollupTrackingId)
            {
                _gaq.push(['Rollup._trackEvent', 'Newsletter', 'Sign up']);
            }
        }
    });
    jQuery('.lightboxContent input.blueboxbutton').live('click', function ()
    {
        if (jQuery('.lightboxContent input[name="userSubscribeNewsletter"]').is(':checked'))
        {
            _gaq.push(['_trackEvent', 'Newsletter', 'Sign up']);
            if (NobiaTracking.trackingInfo.rollupTrackingId)
            {
                _gaq.push(['Rollup._trackEvent', 'Newsletter', 'Sign up']);
            }
        }
    });
},

NobiaTracking.unoformSubscribe = function ()
{
    jQuery('a[href*="campaigns.emailserver2.com"]').live('click', function ()
    {
        _gaq.push(['_trackEvent', 'Newsletter', 'Sign up']);
        if (NobiaTracking.trackingInfo.rollupTrackingId)
        {
            _gaq.push(['Rollup._trackEvent', 'Newsletter', 'Sign up']);
        }
    });
},

NobiaTracking.newsletter = function (whatToTrack)
{
    if (whatToTrack == 'NewsletterUnsubscribe')
    {
        _gaq.push(['_trackEvent', 'Newsletter', 'Sign off']);
        if (NobiaTracking.trackingInfo.rollupTrackingId)
        {
            _gaq.push(['Rollup._trackEvent', 'Newsletter', 'Sign off']);
        }
    }
    else if (whatToTrack == 'NewsletterSubscribe')
    {
        _gaq.push(['_trackEvent', 'Newsletter', 'Sign up']);
        if (NobiaTracking.trackingInfo.rollupTrackingId)
        {
            _gaq.push(['Rollup._trackEvent', 'Newsletter', 'Sign up']);
        }
    }
},

// tracking search dealer
NobiaTracking.searchDealer = function (isSearchBrand, checkboxElement)
{
    var zipSelector = 'input#zipFindDealer,input#zipFindDealer.withChars';
    var btnFind = jQuery(zipSelector).next('input[type="button"]');

    function doTrack()
    {
        var self = jQuery(zipSelector);
        var curZipVal = self.val();
        var zipLengthToTrack = 0;
        var lang = window.location.hostname;
        var isLookingForCity = curZipVal.match(/^[0-9\ ]+$/) === null;
        var brands = getArray('selected', 'brand');
        var dealerTypes = getArray('selected', 'dealertype');
        dealerBrandsRequest(brands);
        dealerBrandsRequest(dealerTypes);
        
        _gaq.push(['_trackEvent', 'LocateDealer', 'City', curZipVal]);
        if (NobiaTracking.trackingInfo.rollupTrackingId)
        {
            _gaq.push(['Rollup._trackEvent', 'LocateDealer', 'City', curZipVal]);
        }
    }

    function dealerBrandsRequest(array)
    {
        jQuery.each(array, function (i, val)
        {
            _gaq.push(['_trackEvent', 'LocateDealer', 'SearchBrand', val]);
            if (NobiaTracking.trackingInfo.rollupTrackingId)
            {
                _gaq.push(['Rollup._trackEvent', 'LocateDealer', 'SearchBrand', val]);
            }
        });
    }
    if (!isSearchBrand)
    {
        doTrack();
    } else
    {
        var newArr = [];
        if (checkboxElement.is(':checked'))
        {
            newArr[0] = jQuery.trim(checkboxElement.parent().text());
            dealerBrandsRequest(newArr);
        }
    }

    function getArray(option, inputName)
    {
        var dealerTypes = [];
        var selector = 'input[name="' + inputName + '"]';
        if (option == 'selected')
        {
            selector += ':checked';
        }
        else if (option == 'notselected')
        {
            selector += ':not(:checked)';
        }
        jQuery(selector).each(function ()
        {
            dealerTypes.push(jQuery(this).parent().text());
        });
        return dealerTypes;
    };
},


// job tracking
NobiaTracking.job = function ()
{
    var category = jQuery('#uiDdlCategory'),
        dealer = jQuery('#uiDdlDealer');

    if (category.length)
    {
        category.change(function ()
        {
            _gaq.push(['_trackEvent', 'JobsectionSearch', jQuery.trim(category.find(':selected').text())]);
            if (NobiaTracking.trackingInfo.rollupTrackingId)
            {
                _gaq.push(['Rollup._trackEvent', 'JobsectionSearch', jQuery.trim(category.find(':selected').text())]);
            }
        });
    }
    if (dealer.length)
    {
        dealer.change(function ()
        {
            _gaq.push(['_trackEvent', 'JobsectionSearch', jQuery.trim(dealer.find(':selected').text())]);
            if (NobiaTracking.trackingInfo.rollupTrackingId)
            {
                _gaq.push(['Rollup._trackEvent', 'JobsectionSearch', jQuery.trim(dealer.find(':selected').text())]);
            }
        });
    }
    jQuery('#linkdiv a,.job_sub_tekst a').click(function ()
    {
        if (GetFilename(jQuery(this).attr('href')).length > 0)
        {
            _gaq.push(['_trackEvent', 'JobsectionSearch', 'Job Inquiries', GetFilename(jQuery(this).attr('href'))]);
            if (NobiaTracking.trackingInfo.rollupTrackingId)
            {
                _gaq.push(['Rollup._trackEvent', 'JobsectionSearch', 'Job Inquiries', GetFilename(jQuery(this).attr('href'))]);
            }
        }
    });

    function GetFilename(url)
    {
        if (url)
        {
            var m = url.toString().match(/.*\/(.+?)\./);
            if (m && m.length > 1)
            {
                return m[1];
            }
        }
        return "";
    }
},

//IPaper tracking
NobiaTracking.iPaper = function (sitename)
{
    jQuery('a[href*="ipaper.ipapercms.dk"]').live('click', function ()
    {
        _gaq.push(['_trackEvent', 'OnlineCatalogue', jQuery.trim(jQuery(this).text())]);
        if (NobiaTracking.trackingInfo.rollupTrackingId)
        {
            _gaq.push(['Rollup._trackEvent', 'OnlineCatalogue', jQuery.trim(jQuery(this).text())]);
        }
    });
    if (typeof (sitename) != 'undefined' && sitename == 'unoform')
    {
        jQuery('a[href*="np.netpublicator.com"]').live('click', function ()
        {
            _gaq.push(['_trackEvent', 'OnlineCatalogue', jQuery.trim(jQuery(this).text())]);
            if (NobiaTracking.trackingInfo.rollupTrackingId)
            {
                _gaq.push(['Rollup._trackEvent', 'OnlineCatalogue', jQuery.trim(jQuery(this).text())]);
            }
        });
    }
},

// tracking book meeting
NobiaTracking.bookMeeting = function ()
{
    var link = '.submitStep3';
    jQuery(link).live('click', function ()
    {
        var subject = ''
        var subjectArray = new Array();

        jQuery("input:checkbox[name=furnitureTypes]:checked").each(function ()
        {
            subjectArray.push(jQuery(this).val())
        });
        subjectArray.sort();
        var dealerName = jQuery('#hdnDealerName').val();

        _gaq.push(['_trackEvent', 'BookMeeting', dealerName]);
        if (NobiaTracking.trackingInfo.rollupTrackingId)
        {
            _gaq.push(['Rollup._trackEvent', 'BookMeeting', dealerName]);
        }
    });
}

// tracking of email to dealers
NobiaTracking.mailToDealer = function (nobiaLighbox)
{
    var links = 'a.mailToDealer';
    var footerLinks = jQuery('#footer a[href^="mailto:"], .marbodalFooter a[href^="mailto:"]');

    jQuery(links).click(function ()
    {
        var self = jQuery(this);
        var dealerName = self.attr('data-dealer');
        _gaq.push(['_trackEvent', 'MailToDealer', dealerName]);
        if (NobiaTracking.trackingInfo.rollupTrackingId)
        {
            _gaq.push(['Rollup._trackEvent', 'MailToDealer', dealerName]);
        }
    });

    footerLinks.live('click', function ()
    {
        _gaq.push(['_trackEvent', 'MailToDealer', 'Footer']);
        if (NobiaTracking.trackingInfo.rollupTrackingId)
        {
            _gaq.push(['Rollup._trackEvent', 'MailToDealer', 'Footer']);
        }
    })
}

// tracking of downloads
NobiaTracking.downloads = function ()
{
    // links to download files tracking
    var links = jQuery('a').not('.job_sub_tekst a, #linkdiv a');

    links.live('click', function ()
    {
        var href = jQuery(this).attr("href") ? jQuery(this).attr("href").toLowerCase() : undefined;
        var extensions = [".jpg", ".pdf", ".gif", ".bmp", ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".zip"]; // The extensions to look for
        var forceTracking = false;

        if (typeof (href) !== 'undefined')
        {
            for (var key in extensions)
            {
                if (href.indexOf(extensions[key]) > 0)
                {
                    forceTracking = true;
                    break;
                }
            }
        }

        if (forceTracking && typeof _gaq != 'undefined')
        {
            var docName = href.substring(href.lastIndexOf('/') + 1, href.length);

            _gaq.push(['_trackEvent', 'Download', docName]);
            if (NobiaTracking.trackingInfo.rollupTrackingId)
            {
                _gaq.push(['Rollup._trackEvent', 'Download', docName]);
            }
        }

    });
},


// internal search
// track only 0-results searches
NobiaTracking.internalSearch = function ()
{
    var isEmptySearchResults = jQuery('#isEmptySearchResults').length;
    if (isEmptySearchResults)
    {
        var searchResultKeyword = jQuery('input[id$="uiTxtSearchQuery"]').val();
        _gaq.push(['_trackEvent', 'Internal Search', '0-resultat', searchResultKeyword]);
        if (NobiaTracking.trackingInfo.rollupTrackingId)
        {
            _gaq.push(['Rollup._trackEvent', 'Internal Search', '0-resultat', searchResultKeyword]);
        }
    }
},

// set page identifier
NobiaTracking.setPageIdentifier = function (syntheticUrl)
{
    var domain = window.location.hostname;
    if (typeof (syntheticUrl) !== 'undefined')
    {
        _gaq.push(['_trackPageview'], syntheticUrl);
        if (NobiaTracking.trackingInfo.rollupTrackingId)
        {
            _gaq.push(['Rollup._trackPageview'], syntheticUrl);
        }
        if (domain.indexOf('myresjokok') > -1)
        { // define if myresjokok
            _gaq.push(['webstrateg._trackPageview'], syntheticUrl);
        }
    }
    else
    {
        _gaq.push(['_trackPageview']);
        if (NobiaTracking.trackingInfo.rollupTrackingId)
        {
            _gaq.push(['Rollup._trackPageview']);
        }
        if (domain.indexOf('myresjokok') > -1)
        { // define if myresjokok
            _gaq.push(['webstrateg._trackPageview']);
        }
    }
}


// get tracking info
// @isTestEnvironment - boolean value
// returns an object { trackingId: trackingId, rollupTrackingId: rollupTrackingId }
NobiaTracking.getTrackingInfo = function (isTestEnvironment)
{
    var trackingId, rollupTrackingId;
    var currentSite = window.location.href;
    //var currentSite = 'http://sigdal.com/SEhow-Display-Model/';

    var domains;
    domains = isTestEnvironment ? NobiaTracking.testDomains : NobiaTracking.prodDomains;

    var i = 0;
    for (var key in domains)
    {
        var pattern = new RegExp('(' + key + ')[/.|//](?!se[//|^]).*', 'i');
        var regRes = currentSite.match(pattern);
        if (regRes)
        {
            trackingId = domains[key];
            switch (true)
            {
                case (i >= 0 && i < 6):
                    rollupTrackingId = isTestEnvironment ? NobiaTracking.rollupTrackingId.hthTestRollupTrackingId : NobiaTracking.rollupTrackingId.hthProdRollupTrackingId;
                    NobiaTracking.Site.CurrentSite = NobiaTracking.Site.HTH;
                    break;
                case (i >= 6 && i < 8):
                    rollupTrackingId = isTestEnvironment ? NobiaTracking.rollupTrackingId.marbodalTestRollupTrackingId : NobiaTracking.rollupTrackingId.marbodalProdRollupTrackingId;
                    NobiaTracking.Site.CurrentSite = NobiaTracking.Site.MARBODAL;
                    break;
                case (i == 8):
                    rollupTrackingId = NobiaTracking.rollupTrackingId.noneRollupTrackingId;
                    NobiaTracking.Site.CurrentSite = NobiaTracking.Site.SIGDAL;
                    break;
                case (i == 9):
                    rollupTrackingId = NobiaTracking.rollupTrackingId.noneRollupTrackingId;
                    NobiaTracking.Site.CurrentSite = NobiaTracking.Site.MYRESJOKOK;
                    break;
                case (i >= 10 && i < 14):
                    rollupTrackingId = isTestEnvironment ? NobiaTracking.rollupTrackingId.invitaTestRollupTrackingId : NobiaTracking.rollupTrackingId.invitaProdRollupTrackingId;
                    NobiaTracking.Site.CurrentSite = NobiaTracking.Site.INVITA;
                    break;
                case (i >= 14 && i < 19):
                    rollupTrackingId = isTestEnvironment ? NobiaTracking.rollupTrackingId.unoformTestRollupTrackingId : NobiaTracking.rollupTrackingId.unoformProdRollupTrackingId;
                    NobiaTracking.Site.CurrentSite = NobiaTracking.Site.UNOFORM;
                    break;
                case (i == 15):
                    rollupTrackingId = NobiaTracking.rollupTrackingId.noneRollupTrackingId;
                    NobiaTracking.Site.CurrentSite = NobiaTracking.Site.IMPLAST;
                    break;
                default:
                    rollupTrackingId = NobiaTracking.rollupTrackingId.noneRollupTrackingId;
            }
            break;
        }
        i++;
    }
    return { trackingId: trackingId, rollupTrackingId: rollupTrackingId };
},

NobiaTracking.vimeoVideo = function (videoId)
{
    _gaq.push(['_trackEvent', 'Video', 'Play', videoId]);
    if (NobiaTracking.trackingInfo.rollupTrackingId)
    {
        _gaq.push(['Rollup._trackEvent', 'Video', 'Play', videoId]);
    }
},
NobiaTracking.customVariable = function ()
{
    var nobiaUtils = new Nobia.Utils(),
		locale = nobiaUtils.getLocale();
    if (locale == 'dk' || locale == 'da')
    {
        var url = window.location.toString().toLowerCase();
        if (url.indexOf('erhverv') > -1)
        {
            jQuery.cookie('userType', 'Erhverv', { path: '/' });
        }
        fireEvent();
    }

    function fireEvent()
    {
        if (jQuery.cookie('userType') && jQuery.cookie('userType') === 'Erhverv')
        {
            _gaq.push(['_setCustomVar', 1, 'User Type', 'Erhverv', 2]);
        } else
        {
            _gaq.push(['_setCustomVar', 1, 'User Type', 'Private', 2]);
        }
    }
};
NobiaTracking.downloadDWG = function (href)
{
    var fileName = href.toString().match(/.*\/(.+?)\./)[1],
		extension = href.substr(href.lastIndexOf('.'), href.length),
		file = fileName + extension;

    _gaq.push(['_trackEvent', 'Download', 'Erhverv', file]);
    if (NobiaTracking.trackingInfo.rollupTrackingId)
    {
        _gaq.push(['Rollup._trackEvent', 'Download', 'Erhverv', file]);
    }
};

NobiaTracking.newsletterSubscripton = function (newsLetterType)
{
    _gaq.push(['_trackEvent', 'Newsletter_B2B', 'Sign up', newsLetterType]);
    if (NobiaTracking.trackingInfo.rollupTrackingId)
    {
        _gaq.push(['Rollup._trackEvent', 'Newsletter_B2B', 'Sign up', newsLetterType]);
    }
};
// embedding GA js from Google server
NobiaTracking.embedJsFile = function ()
{
    var ga = document.createElement('script');
    ga.type = 'text/javascript';
    ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0];
    s.parentNode.insertBefore(ga, s);
},

NobiaTracking.init();

