function TK_RecordVisit()
{
    var xmlHttp = GetXmlHttpObject();

    var uniqueVisitorKey = TK_getVisitorKey();
    var siteVisitKey = TK_getSiteVisitKey();
    var siteVisitInfo = TK_getSiteVisitInfo();
    
    //this URL may be modified to reflect the actual path of your proxy page.
    var strURL = "/tktrack/tkaspproxy.asp";
    
    strURL += "?uniqueVisitorKey=" + uniqueVisitorKey 
            + "&uniqueSiteVisitKey=" + siteVisitKey
            + "&siteVisitID=" + TK_Get_Cookie("TK_SiteVisitID")
            + siteVisitInfo
            + TK_GetStoredFormInfo()
			+ "&ts=" + escape(new Date().getTime());

    xmlHttp.open("GET", strURL, true);
    
    xmlHttp.onreadystatechange = function()
    {
        if(xmlHttp.readyState == 4)
        {
            var strReturn = xmlHttp.responseText;
            TK_Set_Cookie("TK_SiteVisitID", strReturn, null, null, null, null);
        }
    }
    
    xmlHttp.send(null);
}

function TK_getVisitorKey()
{
    var visitorKey = TK_Get_Cookie("TK_visitor_Key");

    if(visitorKey == null)
    {
        visitorKey = TK_createUniqueKey();
    }
    
    var d = new Date();
    d.setDate(d.getDate() + 730);
    TK_Set_Cookie("TK_visitor_Key", visitorKey, d, null, null, false);
     
    return visitorKey;   
}

function TK_getSiteVisitKey()
{
    var siteVisitKey = TK_Get_Cookie("TK_Site_Visit_Key");
   
    if (siteVisitKey == null)
    {
        siteVisitKey = TK_createUniqueKey();
        TK_Set_Cookie("TK_Site_Visit_Key", siteVisitKey, null, null, null, false);
    }
    
    return siteVisitKey;      
}

function TK_createUniqueKey()
{
    var uniquekey = "";
    
    for (var i=0; i<25; i++)
    {
        uniquekey = uniquekey + TK_createHexDigit();
    }
    
    return uniquekey;
}

function TK_getSiteVisitInfo()
{
    var queryString = location.search;
    var url = location.href;
    var browserName = navigator.appName;
    var operatingSystem = navigator.platform;
    var language = navigator.userLanguage;
    var referrer = navigator.referrer;
    var appCodeName = navigator.appCodeName;
    var searchengineinfo = TK_findSearchTerms(referrer + "");
    var plugins = navigator.plugins;
    return "&querystring=" + escape(queryString)
            + "&url=" + escape(url)
            + "&browserName=" + escape(browserName)
            + "&operatingSystem=" + escape(operatingSystem)
            + "&referrer=" + escape(referrer)
            + "&appCodeName=" + escape(appCodeName)
            + "&" + searchengineinfo;
}

function TK_findSearchTerms(urlString)
{
    var parts = urlString.split("?");
    
    if (parts.length <= 1)
        return "";
        
    var queryString = parts[1];
    
    if (urlString.indexOf("google") >= 0)
        return "searchengine=google&terms=" + TK_googleQuery(queryString);
    if (urlString.indexOf("yahoo") >= 0)
        return "searchengine=yahoo&terms=" + TK_yahooQuery(queryString);
    if (urlString.indexOf("search.live") >= 0)
        return "searchengine=live&terms=" + TK_yahooQuery(queryString);
    if (urlString.indexOf("lycos") >= 0)
        return "searchengine=lycos&terms=" + TK_lycosQuery(queryString);
    if (urlString.indexOf("ask") >= 0)
        return "searchengine=ask&terms=" + TK_askQuery(queryString);
    if (urlString.indexOf("altavista") >= 0)
        return "searchengine=altavista&terms=" + TK_altavistaQuery(queryString);
    
    return ""; 
}

function TK_googleQuery(qstring)
{
    var str = qstring;
    var terms = "";
    
    if (str.indexOf("&q=") >= 0)
    {
        var arr = str.split("&q=");
        terms = arr[1];
        
        if (terms.indexOf("&") >= 0)
        {            
            terms = terms.replace(/&.*/,"");
        }
    }
    
    return escape(terms.replace("+", ","));
}

function TK_yahooQuery(qstring)
{
    var str = qstring;
    var terms = "";
    
    if (str.indexOf("&p=") >= 0)
    {
        var arr = str.split("&p=");
        terms = arr[1];
        
        if (terms.indexOf("&") >= 0)
        {            
            terms = terms.replace(/&.*/,"");
        }
    }
    
    return escape(terms.replace("+", ","));       
}

function TK_liveQuery(qstring)
{
    var str = qstring;
    var terms = "";
    
    if (str.indexOf("?q=") >= 0)
    {
        var arr = str.split("?q=");
        terms = arr[1];
        
        if (terms.indexOf("&") >= 0)
        {            
            terms = terms.replace(/&.*/,"");
        }
    }
    
    return escape(terms.replace("+", ","));       
}

function TK_askQuery(qstring)
{
    var str = qstring;
    var terms = "";
    
    if (str.indexOf("q=") >= 0)
    {
        var arr = str.split("q=");
        terms = arr[1];
        
        if (terms.indexOf("&") >= 0)
        {            
            terms = terms.replace(/&.*/,"");
        }
    }
    
    return escape(terms.replace("+", ",")); 
}

function TK_lycosQuery(qstring)
{
    var str = qstring;
    var terms = "";
    
    if (str.indexOf("query=") >= 0)
    {
        var arr = str.split("query=");
        terms = arr[1];
        
        if (terms.indexOf("&") >= 0)
        {            
            terms = terms.replace(/&.*/,"");
        }
    }
    
    return escape(terms.replace("+", ",")); 
}

function TK_altavistaQuery(qstring)
{
    var str = qstring;
    var terms = "";
    
    if (str.indexOf("q=") >= 0)
    {
        var arr = str.split("q=");
        terms = arr[1];
        
        if (terms.indexOf("&") >= 0)
        {            
            terms = terms.replace(/&.*/,"");
        }
    }
    
    return escape(terms.replace("+", ",")); 
}

function TK_createHexDigit()
{
    var d = Math.floor(16*Math.random());
    return d.toString(16);
}

function TK_Get_Cookie(check_name) 
{
	// first we'll split this cookie up into name/value pairs
	// note: document.cookie only returns name=value, not the other components
	var a_all_cookies = document.cookie.split(';');
	var a_temp_cookie = '';
	var cookie_name = '';
	var cookie_value = '';
	var b_cookie_found = false; // set boolean t/f default f

	for (i = 0; i < a_all_cookies.length; i++)
	{
		// now we'll split apart each name=value pair
		a_temp_cookie = a_all_cookies[i].split( '=' );

		// and trim left/right whitespace while we're at it
		cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');

		// if the extracted name matches passed check_name
		if (cookie_name == check_name)
		{
			b_cookie_found = true;
			// we need to handle case where cookie has no value but exists (no = sign, that is):
			if (a_temp_cookie.length > 1)
			{
				cookie_value = unescape(a_temp_cookie[1].replace(/^\s+|\s+$/g, ''));
			}
			// note that in cases where cookie is initialized but no value, null is returned
			return cookie_value;
			break;
		}
		a_temp_cookie = null;
		cookie_name = '';
	}
	
	if (!b_cookie_found)
	{
		return null;
	}
}

function TK_Set_Cookie(name, value, expires, path, domain, secure)
{
    document.cookie = name + "=" + escape(value) +
        ((expires) ? ";expires=" + expires.toGMTString() : "") +
        ((path) ? ";path=" + path : "") +
        ((domain) ? ";domain=" + domain : "") +
        ((secure) ? ";secure" : "");
}

function GetXmlHttpObject()
{
    var xmlHttp=null;
    try
    {
        // Firefox, Opera 8.0+, Safari
        xmlHttp = new XMLHttpRequest();
    }
    catch (e)
    {
        // Internet Explorer
        try
        {
            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e)
        {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
    
    return xmlHttp;
}

function TK_findFirstName()
{
    var i = 0;
    var j = 0;
    
    for (i = 0; i < document.forms.length; i++)
    {
        var frm = document.forms[i];
        
        for (j=0; j < frm.elements.length; j++)
        {
            var elem = frm.elements[j];
            
            var tkinput = "";
            
            if (elem.name != null && elem.name.length > 0)
                tkinput = elem.name.toUpperCase();
            else
                tkinput = elem.id.toUpperCase();
                
            if (tkinput.indexOf("NAME") >= 0
                || tkinput.indexOf("FIRST") >= 0)
            {
                if (elem.selectedIndex != null)
                {
                    return elem.options[elem.selectedIndex].value;
                }
                
                if (elem.checked != null && elem.checked == true)
                {
                    return elem.value;
                }
                
                if (elem.value != null)
                {
                    return elem.value;
                }
            }
        }
    }   
    
    return ""; 
}


function TK_findLastName()
{
    var i = 0;
    var j = 0;
    
    for (i = 0; i < document.forms.length; i++)
    {
        var frm = document.forms[i];
        
        for (j=0; j < frm.elements.length; j++)
        {
            var elem = frm.elements[j];
            
            var tkinput = "";
            
            if (elem.name != null && elem.name.length > 0)
                tkinput = elem.name.toUpperCase();
            else
                tkinput = elem.id.toUpperCase();
                
            if (tkinput.indexOf("LNAME") >= 0
                || tkinput.indexOf("LAST") >= 0)
            {
                if (elem.selectedIndex != null)
                {
                    return elem.options[elem.selectedIndex].value;
                }
                
                if (elem.checked != null && elem.checked == true)
                {
                    return elem.value;
                }
                
                if (elem.value != null)
                {
                    return elem.value;
                }
            }
        }
    }   
    
    return ""; 
}

function TK_findCity()
{
    var i = 0;
    var j = 0;
    
    for (i = 0; i < document.forms.length; i++)
    {
        var frm = document.forms[i];
        
        for (j=0; j < frm.elements.length; j++)
        {
            var elem = frm.elements[j];
            
            var tkinput = "";
            
            if (elem.name != null && elem.name.length > 0)
                tkinput = elem.name.toUpperCase();
            else
                tkinput = elem.id.toUpperCase();
                
            if (tkinput.indexOf("CITY") >= 0
                || tkinput.indexOf("CTY") >= 0)
            {
                if (elem.selectedIndex != null)
                {
                    return elem.options[elem.selectedIndex].value;
                }
                
                if (elem.checked != null && elem.checked == true)
                {
                    return elem.value;
                }
                
                if (elem.value != null)
                {
                    return elem.value;
                }
            }
        }
    }   
    
    return ""; 
}

function TK_findZipCode()
{
    var i = 0;
    var j = 0;
    
    for (i = 0; i < document.forms.length; i++)
    {
        var frm = document.forms[i];
        
        for (j=0; j < frm.elements.length; j++)
        {
            var elem = frm.elements[j];
            
            var tkinput = "";
            
            if (elem.name != null && elem.name.length > 0)
                tkinput = elem.name.toUpperCase();
            else
                tkinput = elem.id.toUpperCase();
                
            if (tkinput.indexOf("ZIP") >= 0
                || tkinput.indexOf("POSTAL") >= 0)
            {
                if (elem.selectedIndex != null)
                {
                    return elem.options[elem.selectedIndex].value;
                }
                
                if (elem.checked != null && elem.checked == true)
                {
                    return elem.value;
                }
                
                if (elem.value != null)
                {
                    return elem.value;
                }
            }
        }
    }   
    
    return ""; 
}

function TK_findAddress1()
{
    var i = 0;
    var j = 0;
    
    for (i = 0; i < document.forms.length; i++)
    {
        var frm = document.forms[i];
        
        for (j=0; j < frm.elements.length; j++)
        {
            var elem = frm.elements[j];
            
            var tkinput = "";
            
            if (elem.name != null && elem.name.length > 0)
                tkinput = elem.name.toUpperCase();
            else
                tkinput = elem.id.toUpperCase();
            
            if (tkinput.indexOf("ADDRESS") >= 0
                || tkinput.indexOf("ADD") >= 0)
            {
                if (elem.selectedIndex != null)
                {
                    return elem.options[elem.selectedIndex].value;
                }
                
                if (elem.checked != null && elem.checked == true)
                {
                    return elem.value;
                }
                
                if (elem.value != null)
                {
                    return elem.value;
                }
            }
        }
    }   
    
    return ""; 
}

function TK_findAddress2()
{
    var i = 0;
    var j = 0;
    
    for (i = 0; i < document.forms.length; i++)
    {
        var frm = document.forms[i];
        
        for (j=0; j < frm.elements.length; j++)
        {
            var elem = frm.elements[j];
            
            var tkinput = "";
            
            if (elem.name != null && elem.name.length > 0)
                tkinput = elem.name.toUpperCase();
            else
                tkinput = elem.id.toUpperCase();
                
            if (tkinput.indexOf("ADDRESS2") >= 0
                || tkinput.indexOf("ADD2") >= 0
                || tkinput.indexOf("ADDR2") >= 0)
            {
                if (elem.selectedIndex != null)
                {
                    return elem.options[elem.selectedIndex].value;
                }
                
                if (elem.checked != null && elem.checked == true)
                {
                    return elem.value;
                }
                
                if (elem.value != null)
                {
                    return elem.value;
                }
            }
        }
    }   
    
    return ""; 
}

function TK_findPhone()
{
    var i = 0;
    var j = 0;
    
    for (i = 0; i < document.forms.length; i++)
    {
        var frm = document.forms[i];
        
        for (j=0; j < frm.elements.length; j++)
        {
            var elem = frm.elements[j];
            
            var tkinput = "";
            
            if (elem.name != null && elem.name.length > 0)
                tkinput = elem.name.toUpperCase();
            else
                tkinput = elem.id.toUpperCase();
                
            if (tkinput.indexOf("PHONE") >= 0)
            {
                if (elem.selectedIndex != null)
                {
                    return elem.options[elem.selectedIndex].value;
                }
                
                if (elem.checked != null && elem.checked == true)
                {
                    return elem.value;
                }
                
                if (elem.value != null)
                {
                    return elem.value;
                }
            }
        }
    }   
    
    return ""; 
}

function TK_findState()
{
    var i = 0;
    var j = 0;
    
    for (i = 0; i < document.forms.length; i++)
    {
        var frm = document.forms[i];
        
        for (j=0; j < frm.elements.length; j++)
        {
            var elem = frm.elements[j];
            
            var tkinput = "";
            
            if (elem.name != null && elem.name.length > 0)
                tkinput = elem.name.toUpperCase();
            else
                tkinput = elem.id.toUpperCase();
                
            if (tkinput.indexOf("STATE") >= 0)
            {
                if (elem.selectedIndex != null)
                {
                    return elem.options[elem.selectedIndex].value;
                }
                
                if (elem.checked != null && elem.checked == true)
                {
                    return elem.value;
                }
                
                if (elem.value != null)
                {
                    return elem.value;
                }
            }
        }
    }   
    
    return ""; 
}

function TK_findEmail()
{
    var i = 0;
    var j = 0;
    
    for (i = 0; i < document.forms.length; i++)
    {
        var frm = document.forms[i];
        
        for (j=0; j < frm.elements.length; j++)
        {
            var elem = frm.elements[j];
            
            var tkinput = "";
            
            if (elem.name != null && elem.name.length > 0)
                tkinput = elem.name.toUpperCase();
            else
                tkinput = elem.id.toUpperCase();
                
            if (tkinput.indexOf("EMAIL") >= 0
                || tkinput.indexOf("E_MAIL") >= 0
                || tkinput.indexOf("E-MAIL") >= 0)
            {
                if (elem.selectedIndex != null)
                {
                    return elem.options[elem.selectedIndex].value;
                }
                
                if (elem.checked != null && elem.checked == true)
                {
                    return elem.value;
                }
                
                if (elem.value != null)
                {
                    return elem.value;
                }
            }
        }
    }   
    
    return ""; 
}

function TK_findCountry()
{
    var i = 0;
    var j = 0;
    
    for (i = 0; i < document.forms.length; i++)
    {
        var frm = document.forms[i];
        
        for (j=0; j < frm.elements.length; j++)
        {
            var elem = frm.elements[j];
            
            var tkinput = "";
            
            if (elem.name != null && elem.name.length > 0)
                tkinput = elem.name.toUpperCase();
            else
                tkinput = elem.id.toUpperCase();
                
            if (tkinput.indexOf("COUNTRY") >= 0)
            {
                if (elem.selectedIndex != null)
                {
                    return elem.options[elem.selectedIndex].value;
                }
                
                if (elem.checked != null && elem.checked == true)
                {
                    return elem.value;
                }
                
                if (elem.value != null)
                {
                    return elem.value;
                }
            }
        }
    }   
    
    return ""; 
}

function TK_findCompany()
{
    var i = 0;
    var j = 0;
    
    for (i = 0; i < document.forms.length; i++)
    {
        var frm = document.forms[i];
        
        for (j=0; j < frm.elements.length; j++)
        {
            var elem = frm.elements[j];
            
            var tkinput = "";
            
            if (elem.name != null && elem.name.length > 0)
                tkinput = elem.name.toUpperCase();
            else
                tkinput = elem.id.toUpperCase();
            
            if (tkinput.indexOf("COMPANY") >= 0
                || tkinput.indexOf("BUSINESS") >= 0)
            {
                if (elem.selectedIndex != null)
                {
                    return elem.options[elem.selectedIndex].value;
                }
                
                if (elem.checked != null && elem.checked == true)
                {
                    return elem.value;
                }
                
                if (elem.value != null)
                {
                    return elem.value;
                }
            }
        }
    }   
    
    return ""; 
}

function TK_relayFormInfo()
{
    try
    {
        var firstName = TK_findFirstName();
        var lastName = TK_findLastName();
        var add1 = TK_findAddress1();
        var add2 = TK_findAddress2();
        var city = TK_findCity();
        var state = TK_findState();
        var zip = TK_findZipCode();
        var country = TK_findCountry();
        var company = TK_findCompany();
        var email = TK_findEmail();
        var phone = TK_findPhone();
        
        var strInfoCookie = "f^" + firstName
                + "|l^" + lastName
                + "|1^" + add1
                + "|2^" + add2
                + "|c^" + city
                + "|s^" + state
                + "|z^" + zip
                + "|y^" + country
                + "|b^" + company
                + "|e^" + email
                + "|p^" + phone;
        
        TK_Set_Cookie("TK_Info", strInfoCookie, null, null, null, null);
    }
    catch (err)
    {
        var x = 5;
    }
    
    return true;
}

function TK_GetStoredFormInfo()
{
    var infoString = "";
    var strOut = "";
    
    if (TK_Get_Cookie("TK_Info") != null)
    {
        infoString = TK_Get_Cookie("TK_Info");
    }
    
    if (infoString.length > 0)
    {
        var strVals = infoString.split("|");
        var i = 0;
        
        for (i = 0; i < strVals.length; i++)
        {
            if (strVals[i].indexOf("f^") >= 0)
            {
                strOut += "&firstName=" + strVals[i].replace("f^", "");
            }
            
            if (strVals[i].indexOf("l^") >= 0)
            {
                strOut += "&lastName=" + strVals[i].replace("l^", "");
            }
            
            if (strVals[i].indexOf("1^") >= 0)
            {
                strOut += "&add1=" + strVals[i].replace("1^", "");
            }
            
            if (strVals[i].indexOf("2^") >= 0)
            {
                strOut += "&add2=" + strVals[i].replace("2^", "");
            }
            
            if (strVals[i].indexOf("c^") >= 0)
            {
                strOut += "&city=" + strVals[i].replace("c^", "");
            }
            
            if (strVals[i].indexOf("s^") >= 0)
            {
                strOut += "&state=" + strVals[i].replace("s^", "");
            }
            
            if (strVals[i].indexOf("z^") >= 0)
            {
                strOut += "&zip=" + strVals[i].replace("z^", "");
            }
            
            if (strVals[i].indexOf("p^") >= 0)
            {
                strOut += "&phone=" + strVals[i].replace("p^", "");
            }
            
            if (strVals[i].indexOf("e^") >= 0)
            {
                strOut += "&email=" + strVals[i].replace("e^", "");
            }
            
            if (strVals[i].indexOf("b^") >= 0)
            {
                strOut += "&company=" + strVals[i].replace("b^", "");
            }
            
            if (strVals[i].indexOf("y^") >= 0)
            {
                strOut += "&country=" + strVals[i].replace("y^", "");
            }
        }
            
        if (strOut.length > 0)
            strOut += "&contactform=true";
        
        TK_Set_Cookie("TK_Info", "", null, null, null, null);
    }
    
    return strOut;
}

function TK_Bind()
{
    var i = 0;
    var j = 0;
    
    for (i = 0; i < document.forms.length; i++)
    {
        var frm = document.forms[i];
         
        for (j=0; j < frm.elements.length; j++)
        {
            var elem = frm.elements[j];
            
            var tkinput = "";
            
            if (elem.name != null && elem.name.length > 0)
                tkinput = elem.name.toUpperCase();
            else
                tkinput = elem.id.toUpperCase();
            
            if (tkinput.indexOf("NAME") >= 0
                || tkinput.indexOf("FIRST") >= 0)
            {
                TK_AddFormSubmitEvent(frm, TK_relayFormInfo);
                break;
            }
        }
    }
    
    return true;
}

function TK_AddFormSubmitEvent(frmIn, func) 
{   
    var oldsubmit = frmIn.onsubmit;
    if (typeof frmIn.onsubmit != 'function') 
    {   
        frmIn.onsubmit = func;   
    }
    else 
    {   
        frmIn.onsubmit = function() {
                                        if (oldsubmit)
                                        {
                                            oldsubmit();
                                        }
                                        func();
                                    }
    }   
}

function TK_AddBodyOnloadEvent(func) 
{   
    var oldonload = window.onload;
    if (typeof window.onload != 'function') 
    {   
        window.onload = func;   
    }
    else 
    {   
        window.onload = function() {
                                        if (oldonload)
                                        {
                                            oldonload();
                                        }
                                        func();
                                    }
    }   
}

TK_RecordVisit();
TK_AddBodyOnloadEvent(TK_Bind);