// Create the object.
var _pageTraxx= new Object();

// Constants
_pageTraxx.ServerDomain = "www.urltrac.com";

// Initialize object properties.
_pageTraxx.Debug = false;
if( document.referrer != "" )
    _pageTraxx.Referrer = document.referrer;
if (querySt("referrer") != "" && document.referrer == "")
    _pageTraxx.Referrer = "http://www." + querySt("referrer") + ".com/";
_pageTraxx.ReferrerDomain = "";
_pageTraxx.ReferrerURL = "";
_pageTraxx.Domain = document.domain;
_pageTraxx.Host = document.location.host;
_pageTraxx.URL = document.location.href;
_pageTraxx.Protocol = document.location.protocol;
_pageTraxx.Token = undefined;
_pageTraxx.InternalTrack = undefined;

// Function:   Submit page content to server
// Parameters: None
// Retun:      None
_pageTraxx.pageTracker = function() {

    if (_pageTraxx.Debug)
        alert("Protocol: " + _pageTraxx.Protocol + "\nURL: " + _pageTraxx.URL + 
              "\nToken: " + _pageTraxx.Token + "\nInternal Tracking: " + _pageTraxx.InternalTrack);

    // Ignore request made outside of a web server.
    if (_pageTraxx.Protocol == "file:")
        return;

    // Ignore request if no page was found.
    if (_pageTraxx.URL == "")
        return;

    // Ignore request if no token was found.
    if (_pageTraxx.Token == "")
        return;

    // Get additional information.
    if ((_pageTraxx.Referrer != null) && (_pageTraxx.Referrer.length != 0) && (_pageTraxx.Referrer != "")) {
        var referrer = _pageTraxx.Referrer;

        // Parse out the domain
        _pageTraxx.ReferrerDomain = referrer.substring(referrer.indexOf("//") + 2, referrer.indexOf("/", referrer.indexOf("//") + 2));
        

        // Parse out the querystring
        if (referrer.indexOf("?") > 0)
            _pageTraxx.ReferrerURL = referrer.substring(referrer.indexOf("//")).slice(2);
    }

    this._trackPageview = function() {

        if (_pageTraxx.Debug) {
            alert("Domain: " + _pageTraxx.Domain + "\nReferrer Domain: " + _pageTraxx.ReferrerDomain +
                  "\nReferrer URLString: " + _pageTraxx.ReferrerURL);

            if (!_pageTraxx.InternalTrack)
                alert("Internal Tracking is false and the domains are identical. No tracking will be done for this request.");
        }

        // If internal referrer and not specified to track then return.
        if ((_pageTraxx.ReferrerDomain == _pageTraxx.Domain) && (!_pageTraxx.InternalTrack))
            return;

        var serverRequest = _pageTraxx.Protocol + "//" + _pageTraxx.ServerDomain + "/Track/Tracking.aspx?";
        serverRequest = serverRequest + "PageURI=" + escape(_pageTraxx.URL) +
                                        "&ReferrerURI=" + escape(_pageTraxx.Referrer) +
                                        "&ReferrerDomain=" + escape(_pageTraxx.ReferrerDomain) +
                                        "&ReferrerURL=" + escape(_pageTraxx.ReferrerURL) +
                                        "&Token=" + escape(_pageTraxx.Token);

        if (_pageTraxx.Debug)
            alert("Server Request: " + serverRequest);

        // Add a script tag to the head. It will make a request to 
        // a URL that will send up the page information.        
        var docScriptElement = document.createElement("script");
        docScriptElement.type = "text/javascript";
        docScriptElement.id = "_pageTraxxRequest";
        docScriptElement.src = serverRequest;
        document.getElementsByTagName("head")[0].appendChild(docScriptElement);
    };

};

// Function:   Initialize tracking object.
// Parameters: token            - Site token obtained during registration.
//             internalTracking - Track internal referrals.
//             debug            - Turn on debugging.
// Retun:      None
_pageTraxx._getTracker = function(token, internalTracking, debug) {

    // Set the token.
    _pageTraxx.Token = token;

    // Set the tracking of internal site pages.
    _pageTraxx.InternalTrack = (internalTracking) ? true : false;

    // Display debug information if true.
    _pageTraxx.Debug = (debug) ? true : false;

    // Load up the tracking module   
    return new _pageTraxx.pageTracker();
};

function querySt(name) {
    name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
    var regexS = "[\\?&]" + name + "=([^&#]*)";
    var regex = new RegExp(regexS);
    var results = regex.exec(window.location.href);
    if (results == null) 
        return "";
    else
        return results[1];
}
