/*
    Company     : Bionic Communications Ltd
    Document    : disneyj_tracking.js
    Author      : geoff.everitt
    Email       : geoff.everitt@bionic-comms.co.uk
    Description : wrapper around disney OMNITURE tracking.
    REQUIRES    : wdigWebAnalytics.js
*/

var namespace = function() {
	var a=arguments, o=null, i, j, d;
    for (i=0; i<a .length; i=i+1) {
        d=a[i].split(".");
        o=window;
 
        for (j=0; j<d.length; j=j+1) {
            o[d[j]]=o[d[j]] || {};
            o=o[d[j]];
        }
    }
    return o;
};

/* create global analytics namespace */
namespace("com.bionic.disney.analytics");

/* ----------------------------------------------------------------
 * com.bionic.Logger
 * ---------------------------------------------------------------*/
com.bionic.disney.analytics.Logger = function(){
	var __this__ = this;
	var logging = true;
	this.log = function(msg){
		try{
			console.log("[ANALYTICS TRACKING] "+msg);
		}catch(e){
			return;
		}
	};
};

/* ----------------------------------------------------------------
 * com.bionic.disney.Tracking
 * ---------------------------------------------------------------*/

com.bionic.disney.analytics.Tracking = function(enabled){
	var __this__ = this;
	__this__enabled = false;
	if (enabled!=null && enabled==true || enabled==false){
		__this__enabled = enabled;
	}
	__this__.logger = new com.bionic.disney.analytics.Logger();
	
	__this__.CTO = null;
	
	// TOGGLE JS LOGGING
	var logging = true;
	
	var constructor = function(){
		/* get shared CTO object */
		try{
			__this__.CTO = new CTO();
		}catch(e){
			__this__.logger.log("ERROR: new CTO() failed. wdigWebAnalytics.js is likely not included. ");
			return;
		}
		
	}();
	
	__this__.track = function(siteSection, pageName, brandCode){
		
		if (logging==true){
			__this__.logger.log("----------------- com.bionic.disney.analytics.Tracking -------------------");
			__this__.logger.log("track() request with parameters: [siteSection="+siteSection+"] [pageName="+pageName+"] [brandCode="+brandCode+"]");
			__this__.logger.log("--------------------------------------------------------------------------");
		}
		
		if (!__this__enabled){
			__this__.logger.log("WARNING: Tracking disabled.");
			return;
		}
		
		var cto = __this__.CTO;

		if (siteSection!=null && siteSection!=''){
			cto.siteSection = siteSection;
		}
		
		if (pageName!=null && pageName!=''){
			cto.pageName = pageName;
		}
		
		if (brandCode!=null && brandCode!=''){
			/* note: assumes passed bradcodes will already be OMNITURE friendly, 
			 * if not then they will need to be converted.
			 */
			cto.property = brandCode;
		}
		
		try{
			cto.track();
		}catch(e){
			__this__.logger.log("ERROR: cto.track() failed. "+e);
		}
	}
	
	__this__.trackLink = function(linkEventObject){
		
		var name = null;
		var brandCode = null;
    	try{
    		/* 
    		 * These need to be added to the links
    		 * ref = home_<itemname>_entry ???
    		 * code = brand
    		 */
        	name = $(linkEventObject).attr("ref");
        	brandCode = $(linkEventObject).attr("code");
    	}catch(e) {}
		
		if (logging==true){
			__this__.logger.log("----------------- com.bionic.disney.analytics.Tracking -------------------");
			__this__.logger.log("trackLink() request with data: [name="+name+"] [brandCode="+brandCode+"]");
			__this__.logger.log("--------------------------------------------------------------------------");
		}
		
		if (!__this__enabled){
			__this__.logger.log("WARNING: Tracking disabled.");
			return;
		}
		
		var cto = __this__.CTO;
		
		try{
			cto.trackLink(this);
		}catch(e){
			__this__.logger.log("ERROR: cto.trackLink() failed. "+e);
		}
	}
	
	__this__.mediaOpen = function(mediaName, mediaLength, mediaPlayerName){
		if (logging==true){
			__this__.logger.log("----------------- com.bionic.disney.analytics.Tracking -------------------");
			__this__.logger.log("mediaOpen() request with data: [mediaName="+mediaName+"] [mediaLength="+mediaLength+"] [mediaPlayerName="+mediaPlayerName+"]");
			__this__.logger.log("--------------------------------------------------------------------------");
		}
		
		if (!__this__enabled){
			__this__.logger.log("WARNING: Tracking disabled.");
			return;
		}
		
		var cto = __this__.CTO;
		
		__this__.logger.log("trying... cto.MediaOpen('"+mediaName+"',"+parseFloat(mediaLength)+",'"+mediaPlayerName+"' ) ");
		try{
			cto.MediaOpen(mediaName, parseFloat(mediaLength), mediaPlayerName);
			__this__.logger.log("cto.MediaOpen() called without error");
		}catch(e){
			__this__.logger.log("ERROR: cto.MediaOpen() failed. "+e);
		}
		
	}
	
	__this__.mediaPlay = function(mediaName, mediaOffset, contentType){
		if (logging==true){
			__this__.logger.log("----------------- com.bionic.disney.analytics.Tracking -------------------");
			__this__.logger.log("mediaPlay() request with data: [mediaName="+mediaName+"] [mediaOffset="+mediaOffset+"] [contentType="+contentType+"]");
			__this__.logger.log("--------------------------------------------------------------------------");
		}
		
		if (!__this__enabled){
			__this__.logger.log("WARNING: Tracking disabled.");
			return;
		}
		
		var cto = __this__.CTO;
		
		if (mediaOffset==null){
			mediaOffset = 0;
		}
		
		__this__.logger.log("trying... cto.MediaPlay('"+mediaName+"',"+parseFloat(mediaOffset)+",'"+contentType+"' ) ");
		try{
			 cto.MediaPlay(mediaName, parseFloat(mediaOffset), contentType);
			 __this__.logger.log("cto.MediaPlay() called without error");
		}catch(e){
			__this__.logger.log("ERROR: cto.MediaPlay() failed. "+e);
		}
	}
	
	__this__.mediaStop = function(mediaName, mediaOffset, contentType){
		if (logging==true){
			__this__.logger.log("----------------- com.bionic.disney.analytics.Tracking -------------------");
			__this__.logger.log("mediaStop() request with data: [mediaName="+mediaName+"] [mediaOffset="+mediaOffset+"] [contentType="+contentType+"]");
			__this__.logger.log("--------------------------------------------------------------------------");
		}
		
		if (!__this__enabled){
			__this__.logger.log("WARNING: Tracking disabled.");
			return;
		}
		
		var cto = __this__.CTO;
		
		try{
			cto.MediaStop(mediaName, ''+mediaOffset, contentType);
		}catch(e){
			__this__.logger.log("ERROR: cto.MediaStop() failed. "+e);
		}
	}
	
	__this__.mediaClose = function(mediaName){
		if (logging==true){
			__this__.logger.log("----------------- com.bionic.disney.analytics.Tracking -------------------");
			__this__.logger.log("mediaClose() request with data: [mediaName="+mediaName+"]");
			__this__.logger.log("--------------------------------------------------------------------------");
		}
		
		if (!__this__enabled){
			__this__.logger.log("WARNING: Tracking disabled.");
			return;
		}
		
		var cto = __this__.CTO;
		
		try{
			cto.MediaClose(mediaName);
		}catch(e){
			__this__.logger.log("ERROR: cto.MediaClose() failed. "+e);
		}
	}
	
}
