﻿var gaEventTrackingModule = (function () {

    var unknown = 'Unknown',
        formSubmitted = false,

        trackLinkClickEvent = function (url) {
            var eventTracked = false;
            if (isUrl(url)) {
                if (isExternalUrl(url)) {
                    _gaq.push(['_trackEvent', 'Outbound Links', 'Click', $(this).html() + url]);
                    eventTracked = true;
                }
                else {
                    if (url.indexOf('.pdf') != -1 ||
                            url.indexOf('.doc') != -1 ||
                            url.indexOf('.docx') != -1 ||
                            url.indexOf('.ppt') != -1 ||
                            url.indexOf('.pptx') != -1) {

                        var filename = url.substr(url.lastIndexOf("/") + 1, url.length);

                        var title = 'Documents - ' + getPageSeoTitle();
                        _gaq.push(['_trackEvent', title, 'Download', filename]);
                        eventTracked = true;
                    }
                }

                if (eventTracked) {
                    var target = $(this).attr('target');
                    if (!(target === '_blank')) {
                        setTimeout(function () {
                            location.href = url
                        }, 200);
                    }
                }
            }
            return eventTracked;
        },

            processCallMeBackFormSubmit = function () {
                if (!formSubmitted) {
                    formSubmitted = true;

                    _gaq.push(['_trackEvent', 'Forms', 'Form Submission', 'Call me back']);
                    setTimeout(function () {
                        $('.call_me_submit').click();
                    }, 200);

                    return false;
                }
            },

            isExternalUrl = function (url) {
                var retVal = false;

                // First check if URL is an absolute URL
                if (/^((f|ht)tps?:)\/\//.test(url)) {
                    var urlHost = getHost(url);
                    var urlRootDomain = getRootDomain(urlHost);
                    var currentHost = location.host;

                    if (urlRootDomain != currentHost) {
                        retVal = true;
                    }
                }

                return retVal;
            },

            getHost = function (url) {
                var retVal = '';

                var startingSlashesIndex = url.indexOf("//");
                retVal = url.substring(startingSlashesIndex + 2);
                var endingSlashIndex = retVal.indexOf("/").
                retVal = retVal.substring(0, startingSlashesIndex + endingSlashIndex + 3);

                return retVal;
            },

            getRootDomain = function (domain) {
                var s = domain.split('.');
                return s.slice(-2).join('.');
            },

            isUrl = function (s) {
                var retVal = false;
                if (s != null && s != '') {
                    var regexp = /^(javascript|#)/
                    retVal = !regexp.test(s);
                }
                return retVal;
            },

            getPageSeoTitle = function () {
                var title = $('head title').html();
                if (title == '') {
                    title = unknown;
                } else {
                    title = trimText(title);
                }
                return title;
            },

            trimText = function (text) {
                text = text.replace(/\n/g, '');
                text = text.replace(/\s+/g, ' ');
                text = $.trim(text);

                return text;
            }

    return {
        trackLinkClickEvent: trackLinkClickEvent,
        processCallMeBackFormSubmit: processCallMeBackFormSubmit
    }
})();

$(document).ready(function () {
    $('a').click(function () {
        if (gaEventTrackingModule.trackLinkClickEvent($(this).attr('href'))) {
            return false;
        }
    });

    $('#call_me_back').submit(function () {
        gaEventTrackingModule.processCallMeBackFormSubmit();
    });
});
