var _gaq = _gaq || [];
var GAObj;
var ServerConnectorObject = null;
var k_IsToAlwaysSaveUniqueID = true;

(function() {
  var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
  ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
  var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();

// scrumblered function and stuff:

var SetDocumentReady = function()
{
	SendUniqueIDToServer();
	//AddFakePageToHref();
//	var k_FormInputFieldClassToCatch = "shareWithMe";
//	var dataToSend = new Object();
//	$("form.loginForm").each(function(){
//		$(this).submit(function(){
//		//alert("tomer");
//			$(this).find("."+k_FormInputFieldClassToCatch+":input").each(function(){
//				var fieldName = $(this).attr("name");
//				var fieldData = $(this).val();
//				dataToSend[fieldName] = fieldData;
//			});
//			dataToSend['UniqueID'] = GAObj.GetUniqueID();
//			if (!ServerConnectorObject)
//			{
//				ServerConnectorObject = new ServerConnector();
//			}
//			
//			ServerConnectorObject.SendDataToOutServer(dataToSend);
//			//return false;
//		});
//	});
};

var AddFakePageToHref = function()
{
	var k_HrefClassToCatch = "trackClicks";
	
	$("a.trackClicks").each(function(){
		$(this).mousedown(function(){
			var fakePageString = "URL="+document.URL;
			fakePageString+= "&" + "LinkTo=" + ($(this).attr("href"));
			//console.log(fakePageString);
			//console.log($(this).attr("href"));
			//alert("tomer");
			//console.log("currentLinkRef"+$(this).find("href").val());
			GAObj.TrackFakePageView(fakePageString);
			return false;
		});
	});
};

var SendUniqueIDToServer = function()
{
	//console.log("in checking if custom var was first set.");
	if (GAObj.WasCustomVarFirstCreated())
	{
		ServerConnectorObject = new ServerConnector();
		ServerConnectorObject.SendUniqueNumberToServer(GAObj.GetUniqueID());
	}
};


// load Google Analytics Code.
(function(){
	GAObj = new GAClient;
	GAObj.TrackPageView();

	SetDocumentReady();
})();

function ServerConnector()
{
	this.SendUniqueNumberToServer = function(i_UniqueID)
	{
		$.ajax({
			url: "http://www.swc.co.il/EMarketingTracker/saveUniqueIds.php",
			type: "POST",
			data: 
			{
				uniqueID: i_UniqueID
			},
			success: function(msg){
				//console.log(msg);
			},
			async:false,
			error : function (xhr, textStatus, errorThrown)
			{
				console.log(textStatus);
			}
	   });
	};
	

	this.SendDataToOutServer = function (i_DataToSend)
	{

//		for (index in i_DataToSend)
//		{
//			console.log("myData: index: "+index+" value:"+i_DataToSend[index]);
//		}
	//	
		$.ajax({
			url: "http://www.swc.co.il/EMarketingTracker/recieveData.php",
			type: "POST",
			data: 
			{
				myData: $.param(i_DataToSend)
			},
			success: function(msg){
				console.log("sent to server");
				//console.log(msg+"usersaved");
			},
			async:false,
			error : function (xhr, textStatus, errorThrown)
			{
				//console.log(textStatus);
			}
	   });
	};
};

/*
 * this part is for notes that needs to be dealt with:
 * 
 * a. send to log file incase there is no avaiable custom var space.
 * b. deal with jquery collision.
 * c. (done)when form is posted check again for utma since it must be there after GA sets it's cookie.
 * 
 */

function GAClient()
{
	var m_UA = 'UA-3305872-1';
	var k_ProjectCustomVarName = "MineTypeCustomVar";
	var k_FakePageViewBeginning = "/fp/?";
	
	var m_DomainName = null;
	var m_GaCookie = null;
	var m_CustomVarObjectToPush = null;
	var m_IsFirstVisit = false;
	var m_WasCustomVarFirstCreated = false;
	
	this.IsFirstVisit = function(){return m_IsFirstVisit;};
	this.WasCustomVarFirstCreated = function(){return m_WasCustomVarFirstCreated;};
	
	this.GetUniqueID = function()
	{
		 var currentUniqueId = m_GaCookie.GetUniqueID();
		 if (!currentUniqueId)
		 {
			 m_GaCookie.ExtractCookie();
			 currentUniqueId = m_GaCookie.GetUniqueID();
		 }
		 
		 return currentUniqueId;
	};
	
	var pushDomainName = function()
	{
		if (m_DomainName)
		{
			_gaq.push(['_setDomainName', m_DomainName]);
		}
	};
	
	var pushCustomVar = function()
	{
		var customVarIndex = m_CustomVarObjectToPush.GetCustomVarData('index');
		var customVarName = m_CustomVarObjectToPush.GetCustomVarData('name');
		var customVarValue = m_CustomVarObjectToPush.GetCustomVarData('value');
		var customVarScope = m_CustomVarObjectToPush.GetCustomVarData('scope');
		_gaq.push(['_setCustomVar',customVarIndex,customVarName,customVarValue,customVarScope]);
	};
	
	var createNewCustomVar = function()
	{
		m_CustomVarObjectToPush = new CustomVarObject();
		m_WasCustomVarFirstCreated = true;
		m_CustomVarObjectToPush.SetCustomVarData('index', m_GaCookie.GetAvailableCustomVarIndex());
		m_CustomVarObjectToPush.SetCustomVarData('name', k_ProjectCustomVarName);
		m_CustomVarObjectToPush.SetCustomVarData('value', m_GaCookie.GetUniqueID());
		m_CustomVarObjectToPush.SetCustomVarData('scope', 1);
		pushCustomVar();
	};
	
	var checkSetCustomVar = function()
	{
		// check if cookie exists.
		m_GaCookie = new GACookie();
		m_GaCookie.ExtractCookie();
		//
		m_CustomVarObjectToPush = m_GaCookie.GetProjectCustomVar(k_ProjectCustomVarName);
		if (!m_CustomVarObjectToPush && m_GaCookie.GetUniqueID() && m_GaCookie.GetAvailableCustomVarIndex())
		{
			createNewCustomVar();
			m_IsFirstVisit = true;
		}
	};
	
	var pushAccountNumber = function()
	{
		_gaq.push(['_setAccount', m_UA]);
	};
	
	this.TrackPageView = function()
	{
		//to delete
		//end to delete.
		pushAccountNumber();
		pushDomainName();
		checkSetCustomVar();
		_gaq.push(['_trackPageview']);

	};
	
	this.TrackFakePageView = function(i_PageURL)
	{
		var fakePage = k_FakePageViewBeginning + i_PageURL;
		_gaq.push(['_trackPageview', fakePage]);
	};
	
	this.SetDomain = function(i_DomainName)
	{
		m_DomainName = i_DomainName;
	};
};

//class
function GACookie()
{
	var ga_source = '';
	var ga_campaign = '';
	var ga_medium = '';
	var ga_term = '';
	var ga_content = '';
	var gc = '';
	var customVarData;
	var c_name = "__utmz";
	var c_customvar = "__utmv";
	var c_uniqueParams = "__utma";
	
	var m_UniqueGAVisitorNumber = null;
	var m_DomainNumber = null;
	var m_AvailableCustomVarIndex = null;
	var m_CustomVars = Array();
	var m_Utma = null;
	var m_NumberOfVisits = null;
	
	//
	var k_FirstCustomVarIndex = 1;
	var k_LastCustomVarIndex = 5;
	//
	
	this.GetCustomVars = function(){return m_CustomVars;};
	this.GetUniqueID = function(){return m_UniqueGAVisitorNumber;};
	this.GetNumberOfVisits = function(){return m_NumberOfVisits;};
	this.GetDomainID = function(){return m_DomainNumber;};
	this.GetAvailableCustomVarIndex = function(){return m_AvailableCustomVarIndex;};
	
	this.ExtractCookie = function()
	{
		if (document.cookie.length>0)  // Is there a cookie saved ?
		{
			// extract utmz
			c_start=document.cookie.indexOf(c_name + "=");	// Find analytics cookie named __utmz.
			if (c_start!=-1){
				c_start=c_start + c_name.length+1;
				c_end=document.cookie.indexOf(";",c_start);
				if (c_end==-1) c_end=document.cookie.length;
				gc = unescape(document.cookie.substring(c_start,c_end));
			}
			
			// extract utma
			c_start=document.cookie.indexOf(c_uniqueParams + "=");	// Find analytics cookie named __utmz.
			if (c_start!=-1){
				c_start=c_start + c_uniqueParams.length+1;
				c_end=document.cookie.indexOf(";",c_start);
				if (c_end==-1) c_end=document.cookie.length;
				m_Utma = unescape(document.cookie.substring(c_start,c_end));
			}
			
			if (m_Utma)
			{	
				utmaArray = m_Utma.split('.');
				m_NumberOfVisits = utmaArray[utmaArray.length - 1];
				m_DomainNumber = utmaArray[0];
				m_UniqueGAVisitorNumber = utmaArray[1];
			}
			//console.log(m_Utma);
			//console.log(m_UniqueGAVisitorNumber);
			
			// extract utmv
			c_customVarStart = document.cookie.indexOf(c_customvar + "=");
			if (c_customVarStart!=-1){
				c_customVarStart=c_customVarStart + c_customvar.length+1;
				c_end=document.cookie.indexOf(";",c_customVarStart);
				if (c_end==-1) c_end=document.cookie.length;
				customVarData = unescape(document.cookie.substring(c_customVarStart,c_end));
			}
			
			if (customVarData)
			{
				if (customVarData.length > 0)
				{
					stripCustomVar(customVarData);
				}
			}
			else if (m_Utma)	// no custom var for this site but the site there's analytics cookie
			{
				m_AvailableCustomVarIndex = 1;
			}
			
			if(gc != ""){
				var z = gc.split('.'); 
				if(z.length >= 4){
					var y = z[4].split('|');
					for(i=0; i<y.length; i++){
						if(y[i].indexOf('utmcsr=') >= 0) ga_source = y[i].substring(y[i].indexOf('=')+1);
						if(y[i].indexOf('utmccn=') >= 0) ga_campaign = y[i].substring(y[i].indexOf('=')+1);
						if(y[i].indexOf('utmcmd=') >= 0) ga_medium = y[i].substring(y[i].indexOf('=')+1);
						if(y[i].indexOf('utmctr=') >= 0) ga_term = y[i].substring(y[i].indexOf('=')+1);
						if(y[i].indexOf('utmcct=') >= 0) ga_content = y[i].substring(y[i].indexOf('=')+1);
					}
				}
			}
		}
		else
		{
			return null;
		}
		
		
		
//		console.log( ga_source);
//		console.log( ga_campaign);
//		console.log( ga_medium);
//		console.log( ga_term);
//		console.log( ga_content);
//		console.log( gc);	
	};// end of Extract cookie function.
	
	var stripCustomVar = function(i_String)
	{
		var newString = i_String.substring(i_String.indexOf('|')+1);
		var splittedStrings = newString.split(',');
		//console.log(splittedStrings);
		
		// check which customvar index avaialble
		var occupiedCustomVarArray = Array();
		for (i = k_FirstCustomVarIndex; i < k_FirstCustomVarIndex + k_LastCustomVarIndex; i++)
		{
			occupiedCustomVarArray[i] = false;
		}
		//
		var customVarObject;
		for (i=0; i<splittedStrings.length - 1; i++)
		{
			customVarObject = new CustomVarObject();
			var splittedValues = splittedStrings[i].split('=');
			customVarObject.SetCustomVarArray(splittedValues);
			m_CustomVars[splittedValues[0]] = customVarObject;
			occupiedCustomVarArray[splittedValues[0]] = true;
		}
		
		var i = k_FirstCustomVarIndex;
		while (i <= k_LastCustomVarIndex && (occupiedCustomVarArray[i] == true))
		{
			i++;
		}
		
		if (i <= k_LastCustomVarIndex)
		{
			m_AvailableCustomVarIndex = i;
		}
		// to delete
		else
			{
				//console.log("no available space");
			}
		// end to delete
		
		
		/*
		for (i=0; i<splittedStrings.length - 1; i++)
		{
			var splittedValues = splittedStrings[i].split('=');
			var currentCustomVar = new CustomVarObject();
			currentCustomVar.SetVariableNumber(splittedValues[0]);
			currentCustomVar.SetVariableName(splittedValues[1]);
			currentCustomVar.SetVariableValue(splittedValues[2]);
			currentCustomVar.SetVariableScope(splittedValues[3]);
			
		}
		*/
		
		//m_CustomVars[currentCustomVar.GetVariableNumber()] = currentCustomVar;
	};
	
	this.GetProjectCustomVar = function(i_VariableName)
	{
		customVarToReturn = null;
		for (currentVar in m_CustomVars)
		{
			if (m_CustomVars[currentVar].IsCorrectCustomVarForName(i_VariableName))
			{
				customVarToReturn = m_CustomVars[currentVar];
				break;
			}
		}
		
		return customVarToReturn;
	};
};
//class
function CustomVarObject()
{
	var k_IndexVariableIndex = 0;
	var k_IndexVariableName = 1;
	var k_IndexVariableValue = 2;
	var k_IndexVariableScope = 3;
	
	var m_CustomVarArray = Array();
	
	this.SetCustomVarArray = function (i_Array)
	{
		m_CustomVarArray = i_Array;
	};
	
	this.GetCustomVarArray = function()
	{
		return m_CustomVarArray;
	};
	
	this.IsCorrectCustomVarForName = function(i_Name)
	{
		return (i_Name == m_CustomVarArray[k_IndexVariableName]);
	};
	
	this.GetCustomVarData = function(i_DataType)
	{
		var valueToReturn = null;
		if (m_CustomVarArray)
		{
			switch (i_DataType)
			{
			case 'name':
				valueToReturn = m_CustomVarArray[k_IndexVariableName];
				break;
			case 'value':
				valueToReturn = m_CustomVarArray[k_IndexVariableValue];
				break;
			case 'index':
				valueToReturn = m_CustomVarArray[k_IndexVariableIndex];
				break;
			case 'scope':
				valueToReturn = m_CustomVarArray[k_IndexVariableScope];
				break;
				
			}
		}
		
		return valueToReturn;
	};
	
	this.SetCustomVarData = function(i_DataType, i_DataValue)
	{
		var wasValueSet = true;
		
		if (m_CustomVarArray)
		{
			switch (i_DataType)
			{
			case 'name':
				m_CustomVarArray[k_IndexVariableName] = i_DataValue;
				break;
			case 'value':
				m_CustomVarArray[k_IndexVariableValue] = i_DataValue;
				break;
			case 'index':
				m_CustomVarArray[k_IndexVariableIndex] = i_DataValue;
				break;
			case 'scope':
				m_CustomVarArray[k_IndexVariableScope] = i_DataValue;
				break;
			default:
				wasValueSet = false;
				break;	
			}
		}
		
		return wasValueSet;
	};
};
