﻿function ClientSideLogger(pageName, cookieName){
    this.pageName = pageName;
    this.cookieName = cookieName;
    this.addLinksFromPage();
    ClientSideLogger.Instance = this;
}
ClientSideLogger.prototype = {
    get_pageName: function() {
        return this.pageName;
    },

    get_cookieName: function() {
        return this.cookieName;
    },

    addLinksFromPage: function() {
        this.addLinks(jQuery("a"));
    },

    addLinks: function(obj) {
        var logger = this;
        obj.click(
            function() {
                logger.click(this);
            });
    },

    clearClientSideLoggingCookie: function() {
        this.createCookie(this.get_cookieName(), "");
    },

    click: function(elementToRecord) {
        var elementId;
        var targetUrl;
        var linkText;
        var eventType;

        eventType = "lnkclick";
        elementId = elementToRecord.id;
        targetUrl = elementToRecord.href;
        linkText = elementToRecord.innerHTML;

        if (!elementId) {
            var obj = jQuery(elementToRecord).parents("*[id!='']");
            if (obj.length > 0) {
                elementId = obj[0].id;
            }
        }

        var linkClickEvent = this.formatClientSideEvent(eventType, this.get_pageName(), elementId, targetUrl, linkText);
        this.createCookie(this.get_cookieName(), linkClickEvent);
    },

    formatClientSideEvent: function() {
        //clientside events are bundled in a string with a format of "command:parameterlist|command:parameterlist"
        if (arguments.length > 0) {
            var linkClickEvent = arguments[0] + ":";
            for (var i = 1; i < arguments.length; i++) {
                linkClickEvent += this.wipeSpecialCommandChars(arguments[i]);
                linkClickEvent += (i == (arguments.length - 1)) ? "|" : ",";
            }
            return linkClickEvent;
        }
        else {
            return "";
        }
    },

    wipeSpecialCommandChars: function(dirtyText) {
        if (dirtyText == null) {
            return dirtyText;
        }
        dirtyText = dirtyText.replace(/^\s+/, "");
        dirtyText = dirtyText.replace(/\s+$/, "");
        dirtyText = dirtyText.replace(/ctl[0-9]+/gi, "");
        return escape(dirtyText);
    },

    createCookie: function(name, value, days) {
        if (days) {
            var date = new Date();
            date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
            var expires = "; expires=" + date.toGMTString();
        }
        else var expires = "";
        document.cookie = name + "=" + value + expires + "; path=/";
    }
}