/*

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.setPageIdentifier();
        NobiaTracking.internalSearch();
        NobiaTracking.downloads();
        NobiaTracking.mailToDealer();
        NobiaTracking.searchDealer();
        NobiaTracking.iPaper();
        NobiaTracking.bookMeeting();
        NobiaTracking.subscribeOrderCatalog();
        NobiaTracking.outletSection();
        NobiaTracking.socialShare();
        NobiaTracking.marbodalJobs();
    }
    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);
        _gaq.push(['_trackEvent', 'MarketPlace', self.text(), jQuery('.filterBox select.dealerSelect option:selected').text()]);
        if (NobiaTracking.trackingInfo.rollupTrackingId) {
            _gaq.push(['Rollup._trackEvent', 'MarketPlace', self.text(), jQuery('.filterBox select.dealerSelect option:selected').text()]);
        }
    })

    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')]);
        }

    })

},

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']);
            }
        }
    })
},

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 == 'tracksignoff') {
        _gaq.push(['_trackEvent', 'Newsletter', 'Sign off']);
        if (NobiaTracking.trackingInfo.rollupTrackingId) {
            _gaq.push(['Rollup._trackEvent', 'Newsletter', 'Sign off']);
        }
    }
    else if (whatToTrack == 'tracksignin') {
        _gaq.push(['_trackEvent', 'Newsletter', 'Sign up']);
        if (NobiaTracking.trackingInfo.rollupTrackingId) {
            _gaq.push(['Rollup._trackEvent', 'Newsletter', 'Sign up']);
        }
    }
},

// tracking search dealer
NobiaTracking.searchDealer = function () {
    var zipSelector = 'input#zipFindDealer,input#zipFindDealer.withChars';
    var btnFind = jQuery(zipSelector).next('input[type="button"]');
    jQuery(zipSelector).live('keyup keydown', function (event) {
        if (event.keyCode == '13') {
            doTrack();
        }
        /*
        if(!jQuery(zipSelector).hasClass('withChars'))
        {
        nobiaUtils.removeNotAllowedCharsForZip(this);
        }
        */
    });

    btnFind.click(function () {
        doTrack();
    });

    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;

        if (!isLookingForCity) {
            lang = (lang = lang.match(/\.([a-z,A-Z]{2,6})$/)) ? lang[1] : 'dk';
            switch (lang) {
                case 'uk', 'dk', 'no':
                    zipLengthToTrack = 4;
                    break;
                case 'se', 'fi', 'pl':
                    zipLengthToTrack = 5;
                    break;
                default:
                    zipLengthToTrack = 4;
            }
            if (curZipVal.length == zipLengthToTrack) {
                _gaq.push(['_trackEvent', 'LocateDealer', 'Zip', curZipVal]);
                if (NobiaTracking.trackingInfo.rollupTrackingId) {
                    _gaq.push(['Rollup._trackEvent', 'LocateDealer', 'Zip', curZipVal]);
                }
            }
        }
        else {
            _gaq.push(['_trackEvent', 'LocateDealer', 'City', curZipVal]);
            if (NobiaTracking.trackingInfo.rollupTrackingId) {
                _gaq.push(['Rollup._trackEvent', 'LocateDealer', 'City', curZipVal]);
            }
        }
    }



    jQuery('input[name="dealertype"], input[name="brand"]').live('click', function () {
        var dealerTypes = getArray('selected', 'dealertype');
        var brands = getArray('selected', 'brand');

        jQuery.each(brands, function (i, val) {
            _gaq.push(['_trackEvent', 'LocateDealer', 'SearchBrand', val]);
            if (NobiaTracking.trackingInfo.rollupTrackingId) {
                _gaq.push(['Rollup._trackEvent', 'LocateDealer', 'SearchBrand', val]);
            }
        });

        jQuery.each(dealerTypes, function (i, val) {
            _gaq.push(['_trackEvent', 'LocateDealer', 'SearchDealerType', val]);
            if (NobiaTracking.trackingInfo.rollupTrackingId) {
                _gaq.push(['Rollup._trackEvent', 'LocateDealer', 'SearchDealerType', val]);
            }
        });
    });

    if (jQuery('.findDealer').length) {
        var dealerTypes = getArray('selected', 'dealertype');
        var brands = getArray('selected', 'brand');

        jQuery.each(brands, function (i, val) {
            _gaq.push(['_trackEvent', 'LocateDealerEntry', 'SearchBrand', val]);
            if (NobiaTracking.trackingInfo.rollupTrackingId) {
                _gaq.push(['Rollup._trackEvent', 'LocateDealerEntry', 'SearchBrand', val]);
            }
        });
        jQuery.each(dealerTypes, function (i, val) {
            _gaq.push(['_trackEvent', 'LocateDealerEntry', 'SearchDealerType', val]);
            if (NobiaTracking.trackingInfo.rollupTrackingId) {
                _gaq.push(['Rollup._trackEvent', 'LocateDealerEntry', 'SearchDealerType', val]);
            }
        });
    }

    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).next().text());
        });

        return dealerTypes;
    };
},


// job tracking
NobiaTracking.job = function () {
    jQuery('#uiDdlCategory').change(function () {
        _gaq.push(['_trackEvent', 'JobsectionSearch', jQuery("#uiDdlCategory :selected").text()]);
        if (NobiaTracking.trackingInfo.rollupTrackingId) {
            _gaq.push(['Rollup._trackEvent', 'JobsectionSearch', jQuery("#uiDdlCategory :selected").text()]);
        }
    });

    jQuery('#uiDdlDealer').change(function () {
        _gaq.push(['_trackEvent', 'JobsectionSearch', jQuery("#uiDdlDealer :selected").text()]);
        if (NobiaTracking.trackingInfo.rollupTrackingId) {
            _gaq.push(['Rollup._trackEvent', 'JobsectionSearch', jQuery("#uiDdlDealer :selected").text()]);
        }
    });

    jQuery('#linkdiv a').click(function () {
        _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(this).text()]);
        if (NobiaTracking.trackingInfo.rollupTrackingId) {
            _gaq.push(['Rollup._trackEvent', 'OnlineCatalogue', jQuery(this).text()]);
        }
    });
    if (typeof (sitename) != 'undefined' && sitename == 'unoform') {
        jQuery('a[href*="np.netpublicator.com"]').live('click', function () {
            _gaq.push(['_trackEvent', 'OnlineCatalogue', jQuery(this).text()]);
            if (NobiaTracking.trackingInfo.rollupTrackingId) {
                _gaq.push(['Rollup._trackEvent', 'OnlineCatalogue', jQuery(this).text()]);
            }
        });
    }
},

// tracking book meeting
NobiaTracking.bookMeeting = function () {
    var link = '.stepfour';
    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, subjectArray.join(',')]);
        if (NobiaTracking.trackingInfo.rollupTrackingId) {
            _gaq.push(['Rollup._trackEvent', 'BookMeeting', dealerName, subjectArray.join(',')]);
        }
    });
}

// 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');

    links.live('click', function ()
    {
        var href = jQuery(this).attr("href");
        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 };
},

// 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();


