﻿/*Ajax*/
function getQs(qs){
    var qsArray =  qs.split("&");
    var qsLookup = new Object();
    
    for(var i=0; i<qsArray.length; i++)
    {
        var tokens = qsArray[i].split("=");
        if(tokens[0].length > 0)
        {
            qsLookup[tokens[0]] = tokens[1];
        }
    } 
    return qsLookup;
}
function maskQs(baseQs, overrideQs)
{
    var qs = getQs(baseQs);
    var newQs = getQs(overrideQs);

    for(var key in newQs)
    {
        qs[key]= newQs[key];
    }

    var finalQs = "";
    for(var key in qs)
    {
        finalQs += key+"="+qs[key]+"&";
    }
    return finalQs;
}

function replaceUrl( baseUrl, baseQs, overrideQs)
{
      baseUrl += "?" + maskQs(baseQs, overrideQs);
      return baseUrl;
}

function replaceAjax(targetElem, newContext)
{
    var ajaxElemName = targetElem+ "AJAX";

    //find parent ajax container
    var ajaxElem = document.getElementById(ajaxElemName);

    //if the parent ajax does not exist, create it
    if(null == ajaxElem)
    {
        $("#" + targetElem).wrap("<div id='"+ajaxElemName+"'></div>");
    }
    var context= $("#"+targetElem+"Ctx").val();
    newContext +="&ajaxId="+targetElem;
    
    var baseUrl = window.location.href;
    var idxQs = baseUrl.indexOf("?");
    if(idxQs<0)
    {
        idxQs=baseUrl.indexOf("#");
    }
    if(idxQs>=0)
    {
        baseUrl = baseUrl.substring(0,idxQs);
    }
    
    var oldQs = window.location.search
    if(oldQs.length>0){
    oldQs=oldQs.substring(1);
    }
    var url = replaceUrl(baseUrl, oldQs, newContext);
    

    //right now we submit using get, but we could also use post
    $("#" + ajaxElemName).load(url );
    return false;
}
function replaceAjaxForm(formElem, targetElem, newContext)
{
    var formContext = $(formElem.parentNode).serialize();
    
    //Add the element that was clicked
    if(formElem.name)
    {
        formContext+="&"+encodeURI(formElem.name)+"="+encodeURI(formElem.value);
    }
    newContext = maskQs(newContext, formContext);
    
    return replaceAjax(targetElem, newContext);
}

/*Tracking*/
function trackEvent(category, action, optional_label, optional_value)
{
    try
    {
        if("undefined" != typeof(pageTracker) && pageTracker._trackEvent)
        {
            pageTracker._trackEvent(category, action, optional_label, optional_value);
        }
        else if(location.href.toLowerCase().indexOf("traderbot.com") >=0)
        {
            alert(category+"/"+action+"/"+optional_label+"/"+optional_value);
        }
    }catch(err){}
}

function wireUpTracking()
{
    $("body").bind("click keypress",
    function(event)
    {   
        try
        {
            var code = event.charCode || event.keyCode;
            var targetElem = event.target;
            
            //Finds the wrapping anchor
            while(null != targetElem && targetElem.tagName != "A")
            {
                targetElem = targetElem.parentNode;
            }        
            
            if(null != targetElem && !code || (code && code == 13)) 
            {
                
                //Get Category
                var category = "";
                var node = targetElem;
                
                //make sure current node is not null and parent node is not null. If parent node is null, that means we're at the document node
                while(null != node && null != node.parentNode)
                {
                    var className =node.className;
                    var startIdx = className.indexOf("trk:");
                    if(startIdx >= 0)
                    {
                        var endIdx = Math.max(className.indexOf(" ", startIdx), className.length);
                        
                        if(category.length>0)
                        {
                            category+="|";
                        }
                        
                        category += className.substring(startIdx+4,endIdx);
                    }
                    node = node.parentNode;
                }
                
                //Current url - we ignore hashes for the current location
                var currentUrl = location.href.toLowerCase();
                var idx = currentUrl.indexOf("#");
                if(idx>=0)
                {
                    currentUrl = currentUrl.substring(0,idx);
                }

                //Get target url - we strip off the base url if we're only navigating to bookmarks within the current page
                var targetUrl = targetElem.href;
                idx = targetUrl.indexOf("#");
                if(idx >= 0 && targetUrl.indexOf(currentUrl) >= 0)
                {
                    targetUrl=targetUrl.substr(idx+1);
                }
                else
                {
                    //normalize the targetUrl
                    targetUrl=targetUrl.toLowerCase();
                }

                trackEvent(category, targetUrl, currentUrl);
            }
        }
        catch(err)
        {}
        
    }); 
}

 
$(document).ready(function() {
    wireUpTracking();
});
 
 

