﻿ClickTrax = {};
ClickTrax.TEST_ID = 9;

ClickTrax.init = function()
{
	ClickTrax.enableToolBox();
	ClickTrax.enableAIS2x2();
	ClickTrax.enableGetSlate();
	ClickTrax.enableMore();
	ClickTrax.enableTodaysMedia();
	ClickTrax.enableTheMost();
	ClickTrax.enableTwitter();
	ClickTrax.enablePartnerFeed("root");
	ClickTrax.enablePartnerFeed("foreignpolicy");
	ClickTrax.enablePartnerFeed("abc");
}
 
/* The general pattern for all of the following ClickTrax.enable[Something] functions is to: 
 * 1. Gather all the elements to apply click tracking to in one array.
 * 2. Create an synched array of property objects to assign to those elements. Properties are testId(int), testGroup(String), and item(String)
 * 3. Call ClickTrax.enableLinks(elms, props) to map the two together and add the listeners that will send the test data to the server.
 *    Pass the array from step 1 as the elms arg and the array from step 2 as the props arg
 *    Note: There is a try...catch in ClickTrax.enableLinks to make sure this script won't fail if a widget isn't currently on the page
 */
ClickTrax.enableToolBox = function()
{
	var toolsCntr = document.getElementById("tool_cntr");
	var tools = SlateDom.getElementsByClassName(toolsCntr.getElementsByTagName("a"),"tools");
	var GROUP = "ToolBox";
	//must line up to items in tools var
	var propArray = [
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"print"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"discuss"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"email"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"rss"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"singleview"}
	]
	ClickTrax.enableLinks(tools, propArray);
	
	var recommendCntr = document.getElementById("recommend_tab");
	var recAncs = recommendCntr.getElementsByTagName("a");
	//recommend links are too inconsistent to collect in one var. must hard code
	var recItems = [
		recAncs[0].getElementsByTagName("span")[0],
		recAncs[0].getElementsByTagName("span")[1],
		recAncs[1],
		recAncs[2],
		recAncs[3],
		recAncs[4],
		recAncs[5],
		recAncs[6],
		recAncs[7],
		recAncs[8],
		recAncs[9],
		recAncs[10],
		recAncs[11],
		toolsCntr.getElementsByClassName("bottom_tools")[0]
	]
	var propArrayRec = [
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"popup|yahoo"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"popup|yahoo"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"popup|facebook"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"popup|myspace"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"popup|mixx"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"popup|digg"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"popup|reddit"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"popup|delicious"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"popup|furl"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"popup|magnolia"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"popup|sphere"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"popup|stumbleupon"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"popup|close"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"recommend"}
	]
	ClickTrax.enableLinks(recItems, propArrayRec);	
}
ClickTrax.enableGetSlate = function()
{

	var cntr = document.getElementById("subscription-box-cntr");
	var links = cntr.getElementsByTagName("a");
	var imgs = new Array();
	
	for (var i=0; i<links.length; i++)
	{
		imgs.push(links[i].firstChild);
	}
	
	var GROUP = "GetSlateEverywhere";
	//array must line up to items in links var
	var propArray = [
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"sign-up"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"twitter"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"facebook"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"rss"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"mobile"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"podcast"}
	]	
	ClickTrax.enableLinks(imgs, propArray);
}
ClickTrax.enableAIS2x2 = function()
{
	var lis = document.getElementById("also_in_slate_2x2").getElementsByTagName("li");
	//no elegant way to pull from dom, hard coding items
	var items = [
		lis[0].getElementsByTagName("span")[0],
		lis[1].getElementsByTagName("span")[0],
		lis[2].getElementsByTagName("span")[0],
		lis[3].getElementsByTagName("span")[0],
		lis[0].getElementsByTagName("div")[0],
		lis[1].getElementsByTagName("div")[0],
		lis[2].getElementsByTagName("div")[0],
		lis[3].getElementsByTagName("div")[0]	
	]
	var GROUP = "AIS2x2";
	//array must line up to items in tabs var
	var propArray = [
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"AIS|1"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"AIS|2"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"AIS|3"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"AIS|4"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"AIS|1"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"AIS|2"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"AIS|3"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"AIS|4"}
	]	
	ClickTrax.enableLinks(items, propArray);
}
ClickTrax.enableMore = function()
{
	var listItems = document.getElementById("navomatic").getElementsByTagName("ul")[0].getElementsByTagName("li");
	//no easy way to pull from dom, hard coding items
	var items = [
		SlateDom.getElementsByClassName(listItems[0].getElementsByTagName("span"),"navo_head")[0],
		SlateDom.getElementsByClassName(listItems[1].getElementsByTagName("span"),"navo_head")[0],
		SlateDom.getElementsByClassName(listItems[2].getElementsByTagName("span"),"navo_head")[0],
		listItems[3].getElementsByTagName("a")[0],
		listItems[4].getElementsByTagName("a")[0],
		listItems[5].getElementsByTagName("a")[0]	
	]
	var GROUP = "More";
	//must line up to items	
	var propArray = [
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"article|1"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"article|2"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"article|3"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"search"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"rss"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"archive"}
	]	
	ClickTrax.enableLinks(items, propArray);
}
ClickTrax.enableTheMost = function()
{	
	var GROUP = "TheMost";
	//must line up to items	
	var tabs = [document.getElementById("most_link1"),document.getElementById("most_link2")];
	var propArrayTabs = [
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"tab|read"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"tab|emailed"}
	]	
	ClickTrax.enableLinks(tabs, propArrayTabs);

	var readItems = document.getElementById("most_read_1").getElementsByTagName("h3");
	var propArrayRead = [
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"read|article|1"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"read|article|2"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"read|article|3"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"read|article|4"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"read|article|5"}
	]	
	ClickTrax.enableLinks(readItems, propArrayRead);

	var emailItems = document.getElementById("most_read_2").getElementsByTagName("h3");
	var propArrayEmail = [
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"emailed|article|1"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"emailed|article|2"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"emailed|article|3"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"emailed|article|4"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"emailed|article|5"}
	]	
	ClickTrax.enableLinks(emailItems, propArrayEmail);
}
ClickTrax.enableTodaysMedia = function()
{
	var tabs = SlateDom.getElementsByClassName(document.getElementById("toc_media_controller").childNodes,"media_tab");
	var images = document.getElementById("media_container").getElementsByTagName("img");
	var GROUP = "TodaysMedia";
	
	//must line up to tabs. tabs and boxes cannot be joined, enable separately
	var propArrayTabs = [
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"tab|pictures"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"tab|cartoons"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"tab|doonesbury"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"tab|video"}
	]	
	ClickTrax.enableLinks(tabs, propArrayTabs);
	
	var propArrayImages = [
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"image|pictures"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"image|cartoons"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"image|doonesbury"}
	]	
	ClickTrax.enableLinks(images, propArrayImages);
}
ClickTrax.enableTwitter = function()
{
	var links = document.getElementById("slatest_twitter").getElementsByTagName("a");
	var GROUP = "Twitter";
	//array must line up to items in links var
	var propArray = [
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"title"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"tweet|1"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"tweet|2"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"tweet|3"}
	]	
	ClickTrax.enableLinks(links, propArray);
}
ClickTrax.enablePartnerFeed = function(p)
{
	var partner = p;
	var links = document.getElementById(partner + "_feed").getElementsByTagName("a");
	var items = [
		links[0].getElementsByTagName("img")[0],
		links[1],
		links[2],
		links[3]
	]
	var GROUP = "PartnerFeed|" + partner;
	//array must line up to items in items var
	var propArray = [
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"title"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"article|1"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"article|2"},
		{testId:ClickTrax.TEST_ID,testGroup:GROUP,item:"article|3"}
	]	
	ClickTrax.enableLinks(items, propArray);
}
ClickTrax.enableLinks = function(elms, props)//element list, array of property objects
{
	try
	{
		for (var i=0; i<elms.length; i++)
		{
			/*
			 *	In order to make the props values available to the element being clicked, pass the data
			 *	into arbitrary attributes of that element. onclick will be able to grab that data from 
			 *	those newly-defined attributes and pass to the ABTest.send function.
			 *  e.g. <span testId="6" testGroup="Twitter" item="title">stuff</span>
			 */
			
			for (var p in props[i])
			{
				elms[i].setAttribute(p, props[i][p]);
			}
			
			//pass an annonymous function as the "function" arg
			SlateDom.addListener(elms[i],"click",function(evt){
				var testId = SlateDom.getTarget(evt).getAttribute("testId");
				var group = SlateDom.getTarget(evt).getAttribute("testGroup");
				var item = SlateDom.getTarget(evt).getAttribute("item");
				
				//alert("This " + SlateDom.getTarget(evt).tagName + " obj is sending: " + testId + ", " + group + ", " + item);
				ABTesting.sendStats(testId, group, item);
			});
		}	
	}
	catch(e){}
}


