﻿///<reference path="jquery-1.4.2.min.js"/>
///<reference path="dep.js"/>

var dep = {
    settings: [],
    eventHandlers: [],

    addConfigSetting: function (name, value) {
        this.settings[name] = value;
    },

    addEventHandler: function (id, handlerFunction) {
        dep.eventHandlers[id] = handlerFunction;
    },

    depEvent: function (handlerId, argString, sender) {
        this.sender = sender;

        // extract arguments from string and set up arguments collection
        var args = argString.split("|");
        this.arguments = []
        for (var i = 0; i < args.length; i += 2) {
            this.arguments[args[i]] = args[i + 1];
        }

        // method for firing the event
        this.fire = function () {
            return dep.eventHandlers[handlerId](this);
        }

        return this;
    },

    click: function (e) {
        var sender = this;
        var result = true;

        // check for events
        if (sender.attributes.getNamedItem("depEvents")) {
            var events = [];
            var tagEvents = [];

            tagEvents = sender.attributes.getNamedItem("depEvents").value.split("~");

            for (var i = 0; i < tagEvents.length; i++) {
                var handlerId = tagEvents[i].substring(0, tagEvents[i].indexOf("["));
                var argString = tagEvents[i].substring(tagEvents[i].indexOf("[") + 1, tagEvents[i].indexOf("]"));

                if (dep.eventHandlers[handlerId]) {
                    events.push(new dep.depEvent(handlerId, argString, sender));
                }
            }

            // fire each event
            for (var evt in events) {
                result = events[evt].fire();
            }
        }

        // run WebTrends tracking on the click directly
        e.which = 1;
        if (typeof (_tag) != "undefined" & (typeof (gTrackEvents) != "undefined" && gTrackEvents == "0"))
            _tag.dcsMSLinkTrack(e);

        // prevent navigation in nonIE browsers if last event returns false
        if (e.target != null & result == false)
            e.preventDefault();

        return result;
    },

    pageLoad: function (e) {
        // add click to all A tags
        $("a").live("click", dep.click);

        document.onkeyup = function (e) {
            if (!e) var e = window.event;
            if (e.keyCode == 78)
                dep.nkey = false;
        }
        document.onkeydown = function (e) {
            if (!e) var e = window.event;
            if (e.keyCode == 78)
                dep.nkey = true;
        }
    },

    utils: {

        makeUrlUnique: function (url) {
            if (url.indexOf("?") > -1)
                url += "&uniqueid=";
            else
                url += "?uniqueid=";

            var stamp = new Date().getTime();
            return url + stamp;
        },

        appendQueryString: function (url, qs) {
            if (url.indexOf("?") > -1)
                url += "&" + qs;
            else
                url += "?" + qs;

            return url;
        },

        cookie: {
            write: 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=/; domain=.microsoft.com";
                //document.cookie = name + "=" + value + expires + "; path=/";
            },

            read: function (name) {
                var nameEQ = name + "=";
                var ca = document.cookie.split(';');
                for (var i = 0; i < ca.length; i++) {
                    var c = ca[i];
                    while (c.charAt(0) == ' ') c = c.substring(1, c.length);
                    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
                }
                return null;
            },

            clear: function (name) {
                createC(name, "", -1);
            }
        }

    },

    nkey: false
}

//set up dep page load event listener
if (window.addEventListener) {
    window.addEventListener("load", dep.pageLoad, true);
}
else if (window.attachEvent) {
    window.attachEvent("onload", dep.pageLoad);
}
 

