var fwWaveApp;
var fwCookieDuration = 168;
var fwSite;
var fwSubPartnerCode = "";

function Tracker(site)
{
	Tracker(site, "Wave4Test");
}

function TrackerDomain(site, waveApp, subPartnerCode)
{
    fwSubPartnerCode = subPartnerCode;
    Tracker(site, waveApp)
}

function Tracker(site, waveApp)
{
  fwWaveApp = waveApp;
  fwSite = site;
  
  if (!navigator.cookieEnabled)
  {
    alert("Please enable cookies");
  }
  else
  {
    var query = document.location.href;
    var track = (query.indexOf("email=") >= 0) || (query.indexOf("&e=") >= 0) || true;

    //alert("query: " + query);
    //alert("track: " + track);

	//Find Firstwave KeyWord in the URL, if any...
	var adKeyWord = (query.indexOf("fwKeyWord=") >= 0);
	if (adKeyWord)
	{
		var queryURL = document.location.search;
		queryURL = queryURL.substring(1, queryURL.length);
		//alert(queryURL);

		var params = queryURL.split('&');
		//alert(params[0]);

		var paramValue = "[NONE]";
		for(var i=0; i < params.length; i++)
		{
			var param = params[i].split("=");
			if (param[0] == "fwKeyWord")
			{
				paramValue = param[1];
				break;
			}
		}
		//alert(paramValue);
		if (paramValue != "[NONE]")
		{
			writeCookie("fwKeyWord", paramValue, 1);
			//alert(readCookie("fwKeyWord"));
		}
	}
	else
	{
		//alert(readCookie("fwKeyWord"));
	}
	

	//return;


    //var cookie = track ? query : readCookie("Tracker");
    var cookie = readCookie("Tracker");
    //alert(cookie);
    if (track)
    {
        if (cookie == "" || cookie == "undefined")
        {
            //alert("No Cookie:" + cookie);
            cookie = query;
            if (cookie.indexOf("&company=") >= 0)
            {
                cookie += "&date=" + new Date().toGMTString();
            }
            else
            {
                //  cookie += "&company=" + fwWaveApp + "&date=" + new Date().toGMTString();
                if (fwSubPartnerCode == "" || fwSubPartnerCode == "undefined")
                {
                    cookie += "&company=" + fwWaveApp + "&date=" + new Date().toGMTString();
                }
                else
                {
                    cookie += "&company=" + fwWaveApp + "-" + fwSubPartnerCode + "&date=" + new Date().toGMTString();
                }

            }
        }
    }

	//Uncomment below to get Referrer, etc. for each visit - might be helpful for Visitor WebSite Pages-Visited Playback...
	//Hopefully will also fix the issue of "more deterministic cookie"
    cookie = FixCookie(cookie, query);
    
    writeCookie("Tracker", cookie, fwCookieDuration);
    if ((cookie.indexOf("email=") >= 0) || (cookie.indexOf("&e=") >= 0) || track)
    {
      var ttl = document.title;
      if (document.getElementsByName)
      {
         var metaArray = document.getElementsByName('PageTitle');
         if (metaArray.length > 0)
         {
             ttl = metaArray[0].content;
	     if (ttl == null || ttl == "")
	     {
		ttl = document.title;
	     }
         }
      }
      SendMessage(site, (track ? (document.location.protocol + "//" + document.location.host + document.location.pathname) : document.location.href) + "@@" + ttl + "||" + cookie);
      //SendMessage(site, (track ? (document.location.protocol + "//" + document.location.host + document.location.pathname) : document.location.href) + "@@" + document.title + "||" + cookie);
    }
  }
}


function TrackInWave()
{
	var adKeyWord = readCookie("fwKeyWord")
	if (adKeyWord != "")
	{
		//alert(adKeyWord);
	}
}


function writeCookie(name, value, hours)
{
  if (hours)
  {
    var date = new Date();
    date.setTime(date.getTime() + (hours * 60 * 60 * 1000));
    document.cookie = name + "=" + escape(value) + "; expires=" + date.toGMTString() + "; path=/";
  }
  else
  {
    document.cookie = name + "=" + escape(value) + "; path=/";
  }
}

function readCookie(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 (unescape(c.substring(nameEQ.length, c.length)));
    }
  }
  return ("");
}

// Get the value of the cookie with the specified name.
function GetCookie(sName)
{
  // cookies are separated by semicolons
  var aCookie = document.cookie.split("; ");
  for (var i=0; i < aCookie.length; i++)
  {
    // a name/value pair (a crumb) is separated by an equal sign
    var aCrumb = aCookie[i].split("=");
    if (sName == aCrumb[0]) 
      return unescape(aCrumb[1]);
  }

  // a cookie with the requested name does not exist
  return "";
}

// Create a cookie with the specified name and value.
// The cookie expires at the end of the 21st century.
function SetCookie(sName, sValue)
{
  date = new Date();
  document.cookie = sName + "=" + escape(sValue) + "; expires=Fri, 31 Dec 2099 23:59:59 GMT;";
}


function SendMessage(site, args)
{
  try
  {
    //alert("SendMessage: " + escape(args));
    var img = new Image(1, 1);
    img.src = "http://" + site + "/Tracker/WaveTracker.asmx/Trackit?argument=" + escape(args);
    //alert("SendMessage Done: " + escape(args));
  }
  catch (e)
  {
    alert(e); 
  }
}

function TrackPreFormVisits(site, args)
{
  try
  {
    var img = new Image(1, 1);
    img.src = "http://" + site + "/Tracker/WaveTracker.asmx/SetCookieQueryString2?argument=" + escape(args);
  }
  catch (e)
  {
    alert(e); 
  }
}

function GetPageTitle()

{
    var ttl = document.title;
    if (document.getElementsByName)
    {
        var metaArray = document.getElementsByName('PageTitle');
        if (metaArray.length > 0)
        {
            ttl = metaArray[0].content;
            if (ttl == null || ttl == "")
            {
                ttl = document.title;
            }
        }
    }
    return ttl;
}


function fwTrackInWave3(fwPostBackPage, leadDetailXML, eventName)
{
	writeCookie("fwKeyWord", eventName, 1);

	fwTrackInWave(fwPostBackPage, leadDetailXML);
}


function fwTrackAssessmentInWave(fwPostBackPage, leadDetailXML)
{
	writeCookie("fwKeyWord", "__fw__Assessment", 1);

	fwTrackInWave(fwPostBackPage, leadDetailXML);
}


function fwTrackInWave5(fwPostBackPage, emailAddress, firstName, lastName, companyName)
{
	var result;

	var leadDetailXML = '<leadDetail><email>' + emailAddress + '</email><first_name>' + firstName + '</first_name><last_name>' + lastName + '</last_name><bus_name>' + companyName + '</bus_name></leadDetail>';
	//alert(leadDetailXML);

	result = fwTrackInWave(fwPostBackPage, leadDetailXML);
	//alert(result);
	return result;
}

function fwTrackInWave(fwPostBackPage, leadDetailXML)
{
	var result;
	var XmlHttpRequest;
	var url;
	var xmlDOC;
	var fwKeyWord = readCookie("fwKeyWord");
	//var server = "http://192.168.1.179/" + fwWaveApp;
	var server = "http://www.leadlifesolutions.com/" + fwWaveApp;


	//alert(fwKeyWord);

	//WebSite Leads
	if (fwKeyWord == "") 
	{
		fwKeyWord = "WebSite Leads";

	}

    //Get the Page Title and send it over...
    var ttl = GetPageTitle();
    ttl = '<fwPageTitle>' + ttl + '</fwPageTitle>';
    leadDetailXML = leadDetailXML.replace('</leadDetail>', ttl + '</leadDetail>');


	if (fwKeyWord == "") 
	{
		result = "";

	}
	else
	{
		//alert(url);


		url = fwPostBackPage + "?" + server + "/WebServices/marketing.asmx/TrackLeadDetailXMLInWave?fwKeyWord=" + fwKeyWord;
		//alert(url);
		url = url + "&leadDetailXML=" + leadDetailXML;

		//alert(url);



		// code for Mozilla, etc.
		if (window.XMLHttpRequest)
		{
			XmlHttpRequest = new XMLHttpRequest();
			//alert("xmlHTTP Object Created For Firefox");
		}
		// code for IE
		else if (window.ActiveXObject)
		{
			XmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
			//alert("xmlHTTP Object Created For IE");
		}



		//XmlHttpRequest = new ActiveXObject("MSXML2.XMLHTTP");
		//alert("xmlHTTP Object Created");

		XmlHttpRequest.open("GET", url, false);
		//alert("xmlHTTP Object Opened");	
		XmlHttpRequest.send(null);
		//alert("xmlHTTP Object Request Sent");

		result = XmlHttpRequest.responseText;
		//alert(result);
		
		result = FixResult(result);

		var query = result;
		var track = (query.indexOf("email=") >= 0);
		
		var pageURL = document.location.href;
		var queryURL = document.location.search;
		if (queryURL.length == 0)
		{
			query = pageURL + query;
		}
		else
		{
			//remove the ? mark and prefix &...
			query = query.substring(1, query.length);
			query = "&" + query;
			query = pageURL + query;
		}

		if (track)
		{
			//var cookie = query + "&date=" + new Date().toGMTString();
			//writeCookie("Tracker", cookie, fwCookieDuration);
			//TrackPreFormVisits(fwSite, result);
			var origCookie = readCookie("Tracker");
			var cookie = query + "&date=" + new Date().toGMTString();
			
			
				//After Submit - Update - replace values in old cookier from the result!!
				//This will make sure the cookies are in sync on the client and server!!
				//alert("original cookie:" + origCookie);
				cookie = UpdateCookie(origCookie, result);
				//Add ipaddr - so that it stays at the same position in the cookie...
				cookie = cookie.replace("&campaign=", "&ipaddr=None&campaign=");
				//alert("updated cookie:" + cookie);
				
			
			writeCookie("Tracker", cookie, fwCookieDuration);
			//alert(result  + "&" +  origCookie);
			TrackPreFormVisits(fwSite, result  + "&" +  origCookie);
			//alert("After TrackPreFormVisits");

		}

	}


	return result;
}

function FixResult(result)
{

		//alert(result);

		//PHP Issue Fix...
		result = result.replace('<?xml version="1.0" encoding="utf-8"?>', '');
		result = result.replace('<string xmlns="http://www.firstwave.net/webservices/">', '');
		result = result.replace('</string>', '');
		result = result.replace('\n', '');
		result = result.replace('\t', '');
		result = result.replace('\r', '');
		result = result.replace('\n', '');
		result = result.replace('\t', '');
		result = result.replace('\r', '');
		result = result.replace('&amp;', '&');
		result = result.replace('&amp;', '&');

		//alert(result);
		return result;
}

	/**
	* This function will Fix the Cookie to make sure it has the referrer 
	* and browser info in it.
	*/
	function FixCookie(Cookie, Query) 
	{
		var Cookiez = "";
		if (Cookie.indexOf("&browser") < 0) 
		{
			Cookie += "&browser=" + escape(navigator.appName + " " + navigator.appVersion);
		}
		if (Cookie.indexOf("&referrer") < 0) 
		{
			Cookie += "&referrer=" + escape(document.referrer);
		}
		var changes = 0;
		var cookies = Cookie.replace("?", "&").split("&");
		var queries = Query.replace("?", "&").split("&");
		for (var inx = 1; inx < queries.length; inx++) 
		{
			var quer = queries[inx].split("=");
			if ((quer.length > 1) && (quer[1] > "")) 
			{
				var que = quer[0].toLowerCase();
				if ((que == "browser") || (que == "campaign") || (que == "company") || (que == "date") || (que == "e") || (que == "email") || (que == "fwkeyword") || (que == "i") || (que == "ipaddr") || (que == "referrer")) 
				{
					for (var iny = 1; iny < cookies.length; iny++) 
					{
						var cook = cookies[iny].split("=");
						if (cook.length > 1) 
						{
							var coo = cook[0].toLowerCase();
							if (coo == que) 
							{
								if (cookies[iny].toLowerCase() != queries[inx].toLowerCase()) 
								{
									cookies[iny] = queries[inx];
									++changes;
								}
								que = "";
								break;
							}
						}
					}
					if (que > "") 
					{
						Cookiez += "&" + queries[inx];
					}
				}
			}
		}
		if (changes > 0) 
		{
			Cookie = cookies.join("&");
		}
		if (Cookie.indexOf("?") < 0) 
		{
			var quest = Cookie.indexOf("&");
			if (quest > 0) 
			{
				Cookie = Cookie.substr(0, quest) + "?" + Cookie.substr(quest + 1);
			}
		}
		return (Cookie + Cookiez);
	}


	/**
	* This function will Update the current Cookie with the new Info, mainly email and campaign, 
	* returned by the Submit Call.
	*/
	function UpdateCookie(Cookie, Query) 
	{
		var Cookiez = "";
		var changes = 0;
		var cookies = Cookie.replace("?", "&").split("&");
		var queries = Query.replace("?", "&").split("&");
		for (var inx = 1; inx < queries.length; inx++) 
		{
			var quer = queries[inx].split("=");
			if ((quer.length > 1) && (quer[1] > "")) 
			{
				var que = quer[0].toLowerCase();
				if ((que == "browser") || (que == "campaign") || (que == "company") || (que == "date") || (que == "e") || (que == "email") || (que == "fwkeyword") || (que == "i") || (que == "ipaddr") || (que == "referrer")) 
				{
					for (var iny = 1; iny < cookies.length; iny++) 
					{
						var cook = cookies[iny].split("=");
						if (cook.length > 1) 
						{
							var coo = cook[0].toLowerCase();
							if (coo == que) 
							{
								if (cookies[iny].toLowerCase() != queries[inx].toLowerCase()) 
								{
									cookies[iny] = queries[inx];
									++changes;
								}
								que = "";
								break;
							}
						}
					}
					if (que > "") 
					{
						Cookiez += "&" + queries[inx];
					}
				}
			}
		}
		if (changes > 0) 
		{
			Cookie = cookies.join("&");
		}
		if (Cookie.indexOf("?") < 0) 
		{
			var quest = Cookie.indexOf("&");
			if (quest > 0) 
			{
				Cookie = Cookie.substr(0, quest) + "?" + Cookie.substr(quest + 1);
			}
		}
		return (Cookie + Cookiez);
	}

