/*
	Synthetic Page and Event Reporting Framework (SPERF)
	----------------------------------------------------
	for use when reporting is desired for things that don't exist as/in a real web 
	page (e.g. HTML). this code makes use of Omniture's Site Catalyst reporting 
	product and creates 'page' or 'link' events for the requested event_id.

	use as follows:
		REPORTING.makeCall('simple_event');
		REPORTING.makeCall('complex_event', { key1 : 'value1', key2 : 'value2' });
*/
//alert("SPERF")
var REPORTING = {
	events : { },
	makeCall : function() { }
};


// called by the app
REPORTING.makeCall = function (event_id, data_object) {
	
	
	// bail out if event_id is unknown
	if (typeof(this.events[event_id]) == "undefined") return false;

	// setup page variables
	this.events[event_id].populateData(data_object);
	this.events[event_id].setPageVariables();

	// send page event
	if (this.events[event_id].event_type == "PAGE") {
		// zero-out link event stuff
		s_linkType = "";
		s_lnk = "";

		// set pagename and URL stuff
		s_pageName = this.events[event_id].generatePageName();
		s_pageURL = this.events[event_id].generatePageURL();

		//if (s_pageName.indexOf("player.jhtml") != -1){
		//	s_channel="";
		//}

		s_hier1 = (s_pageURL.charAt(0) == "/") ? s_pageURL.substring(1, s_pageURL.length) : s_pageURL;
		//if(top.location.search.indexOf("jb_test")!=-1) alert("s_pageURL="+s_pageURL);
		s_hier1 = (s_hier1.charAt(s_hier1.length) == "/") ? s_hier1.substring(0, s_hier1.length - 1) : s_hier1;

		
		s_gs(s_account.toLowerCase());

	// send link event
	} else if (this.events[event_id].event_type == "LINK") {
         if(event_id == "browse"){
            // don't capture browse most events. 
			if (typeof this.events[event_id].data['gateway'] == "string"){
				if (unescape(this.events[event_id].data['gateway'])=="send_from_video" || unescape(this.events[event_id].data['gateway'])=="send_from_screen" || unescape(this.events[event_id].data['gateway'])=="send_from_playlist" || unescape(this.events[event_id].data['gateway'])=="send_from_mini" || unescape(this.events[event_id].data['gateway'])=="more_from_mini" || unescape(this.events[event_id].data['gateway'])=="close_from_mini"){
					//let these through
				}
				else
		            return;
			}
       }
	

		try {
			 	s_pageName = this.events[event_id].generatePageName();
					s_linkType = "o";
					s_lnk = s_co(s_wd); // this is no good
					s_hier1 = "";

   		s_gs(s_account.toLowerCase());
 } catch (e){
    window.status = "error: " + e.message;
 }				

	// unknown event type
	} else {
		return false;
	}

	// reset data for next call
	this.events[event_id].clearPageVariables();

	return true;
} // END: makeCall()




function ReportingEvent(event_type, page_name_function, page_url_function, page_variable_function) {
	this.event_type = event_type; // "PAGE" or "LINK"

	this.generatePageName = page_name_function;
	this.generatePageURL = page_url_function;
	this.setPageVariables = page_variable_function;

	this.data = {}; // holds a copy of the data passed in (for use by methods of this object)
} // END: ReportingEventType()


ReportingEvent.prototype.populateData = function(data) {
	for (var i in data) { 
      try {
         data[i] = data[i].replace(/_$/,"");
		 data[i] = data[i].replace(/(<)([^>.]+)(>)/g,"");
      }catch(e){
         // something broke? 
      }
      this.data[i] = unescape(data[i]);
   }
}; // END: populateData(


ReportingEvent.prototype.clearPageVariables = function() {
	this.data = { }; // reset data passed in by app


//motherload-- change prop21 to prop20 and took out prop1
	//s_pageName = s_pageURL = s_events = s_prop1 = s_prop21 = s_prop22 = "";
	s_pageName = s_pageURL = s_events = s_prop20 = "";
	s_linkTrackVars="None";

	// loop through and clear out all s_props, s_eVars, and s_heirs
/*
	for (var n=1; n < 51; n++) {
		s_wd['s_prop' + n] = '';
		s_wd['s_eVar' + n] = '';
		s_wd['s_hier' + n] = '';
	}
*/
}; // END: clearPageVariables()


// =============================================================================


REPORTING.events['video_play'] = new ReportingEvent(
	"PAGE",

	function() { // generatePageName()
		//return this.generatePageURL();

		// fix for page name length issue (NOT FINISHED YET)
		var name = this.generatePageURL();
		var truncated_name;
		var max_name_length = 100;
		//var max_id_length = 8;
		var pos_hash;

		if (name.length > 100) {
			pos_hash = name.lastIndexOf('#');
         if(pos_hash != -1){
            id = name.substring(pos_hash);
            truncated_name = (name.substring(0,100-id.length  )) + id; 
            return truncated_name;
         }
		}
      return name;

	},

	function() { // generatePageURL()
		// /<gateway>/<franchise>/<content title (parent)>/<video title>
		if (typeof configManager.channelName != 'undefined' && configManager.channelName=='miniplayer')
			var url_components = ['/miniplayer'];
		else
			var url_components = ['/motherload'];

  
		if (this.data['gateway']) {
		       url_components.push(this.data['gateway']);
		}	
		else { 
			 url_components.push("MTVI-NO_GATE");
		}						
		if (this.data['content_record']) {
			url_components.push(this.data['content_record']);
		}
	    else {
		 	url_components.push("MTVI-NO_RECORD");
		}	
		if (this.data['content_title'])  {
			url_components.push(this.data['content_title']);
		}	
		else {
			url_components.push("MTVI-NO_TITLE");
		}	
		if (this.data['video_title'])    
			url_components.push(this.data['video_title'] + ((this.data['video_id']) ? '#' + this.data['video_id'] : "") );

         var url = url_components.join('/');
         url = url.replace(/_\//g,"/");
         url = url.replace(/_#/g,"#");
         return (url);
	},

	
	function() { // setPageVariables()
		var vid = typeof this.data['video_id'] != 'undefined' ? "#" + this.data['video_id'] : "#0000-UNDEFINED";
//		s_prop1 = typeof this.data['artist_name'] != 'undefined' ? this.data['artist_name']: "";
		s_prop10 = typeof this.data['content_record'] != 'undefined' ? this.data['content_record'] : "MTVI-NO_RECORD";
		if (typeof configManager.channelName != 'undefined'){
			if (configManager.channelName=='miniplayer')
				s_prop12="Mini Player";
			if (configManager.channelName=='motherload')	
				s_prop12="Motherload Player";
		}
		//s_prop12 = typeof this.data['location'] != 'undefined' ? this.data['location'] + vid : "";
		s_prop20 = typeof this.data['video_title'] != 'undefined' ? this.data['video_title'] + vid : "";
		s_prop22 = "OD_USER:" + window.screen.width + "x" + window.screen.height;
		s_prop27 = typeof this.data['gateway'] != 'undefined' ? this.data['gateway'] : "MTVI-NO_GATE";		
		s_prop28 = typeof this.data['content_title'] != 'undefined' ? this.data['content_title'] : "MTVI-NO_TITLE";
		 if(isDefined(s_prop27) && s_prop27.toLowerCase().indexOf("playlist")!=-1){
		 	s_prop10="";
			s_prop28="";			
		}		
		
		// Report internal campaign for target video...
		if(typeof mtvnParams.source != null && typeof mtvnParams.source != 'undefined'){
			s_prop17 =  intCmp == null?unescape( mtvnParams.source ):"";
			var h1String = unescape( (mtvnParams.source + this.generatePageURL()).split("/").join(",") );
			s_hier1 = intCmp == null?h1String:"";
		}
		// ...and set a flag in Player.js to prevent expression in subsequent page calls
		intCmp = 1;
		
		return;
	}
); // END: video_play
	
	//function() { // setPageVariables()
	//motherload -- no artist info
		//if (typeof(this.data['artist_name']) != 'undefined') s_prop1 = this.data['artist_name'];

	//	omniCall.OD_rollUp = this.data['video_title'] + '#' + this.data['video_id'];
//motherload- changed to prop20
	//	s_prop20 = (omniCall.OD_rollUp) ? omniCall.OD_rollUp : "";
		//s_prop22 = "OD_USER:" + window.screen.width + "x" + window.screen.height;
		//s_prop10 = this.data['content_record']?this.data['content_record']:"";
		
		// Report internal campaign for target video...
		//if(typeof mtvnParams.source != null && typeof mtvnParams.source != 'undefined'){
			//s_prop17 =  intCmp == null?unescape( mtvnParams.source ):"";
			//var h1String = unescape( (mtvnParams.source + this.generatePageURL()).split("/").join(",") );
		//	s_hier1 = intCmp == null?h1String:"";
		//}
	
		// ...and set a flag in Player.js to prevent expression in subsequent page calls
		//intCmp = 1;
		
		//if (typeof(this.data['location']) != 'undefined') s_prop12 = this.data['location'];

	//	return;
	//}
//); // END: video_play

//ratings reporting
REPORTING.events['rating'] = new ReportingEvent(
	"LINK",

	function() { // generatePageName()
	/**/
		return (
			"ML RATINGS - "  + this.data['type']
		);
	
	},

	function() { // generatePageURL()
		return;
	},

	function() { // setPageVariables()
	/**/
		s_linkName = this.generatePageName();
		return;
	
	}
); // END: sratings reporting


//send to friend reporting
REPORTING.events['sendToFriend'] = new ReportingEvent(
	"LINK",

	function() { // generatePageName()
	/**/
		return (
			"ML SEND TO FRIEND - "  + this.data['title']
		);
	
	},

	function() { // generatePageURL()
		return;
	},

	function() { // setPageVariables()
	/**/
		s_linkName = this.generatePageName();
		return;
	
	}
); // END: send to friend reporting


//search results reporting
REPORTING.events['searchResult'] = new ReportingEvent(
	"LINK",

	function() { // generatePageName()
	/**/
		return (
			"ML SEARCH - " + ((this.data['searchSuccess']==1)? "SUCCESS:":"FAILED:") + this.data['searchTerm']
		);
	
	},

	function() { // generatePageURL()
		return;
	},

	function() { // setPageVariables()
	/**/
		s_linkName = this.generatePageName();
		return;
	
	}
); // END: search results reporting


//snag reporting
REPORTING.events['snag'] = new ReportingEvent(
	"LINK",

	function() { // generatePageName()
	/**/
		return (
			"SNAG:" + this.data['url']
		);
	
	},

	function() { // generatePageURL()
		return;
	},

	function() { // setPageVariables()
	/**/
		s_linkName = this.generatePageName();
		return;
	
	}
); // END: snag reporting

//RSS reporting
REPORTING.events['RSS'] = new ReportingEvent(
	"LINK",

	function() { // generatePageName()
	/**/
		return (
			"RSS"
		);
	
	},

	function() { // generatePageURL()
		return;
	},

	function() { // setPageVariables()
	/**/
		s_linkName = this.generatePageName();
		return;
	
	}
); // END: RSS reporting


REPORTING.events['player_resize'] = new ReportingEvent(
	"LINK",

	function() { // generatePageName()
	/**/
		var ufSizes=new Array("Micro","Standard","Double","Full-Screen");
		return (
			"VIEW:" + ufSizes[this.data['playerSize']]
		);
	
	},

	function() { // generatePageURL()
		return;
	},

	function() { // setPageVariables()
	/**/
		s_linkName = this.generatePageName();
		return;
	
	}
); // END: player_resize



REPORTING.events['browse'] = new ReportingEvent(
	"LINK",

	function() { // generatePageName()
		return (
			'/' + configManager.channelName + '/' + unescape(this.data['gateway']) +
			( (typeof(this.data['content_record']) != "undefined") ? '/' + this.data['content_record'] : "") + 
			( (typeof(this.data['content_title']) != "undefined") ? '/' + this.data['content_title'] : "")
		);
	},

	function() { // generatePageURL()
		return;
	},

	function() { // setPageVariables()
		s_linkName = this.generatePageName();
		return;
	}
); // END: browse

REPORTING.events['embed'] = new ReportingEvent(
	"LINK",

	function() { // generatePageName()
		return "Embed: " + this.data['video_id'] +" | "+ this.data['video_title'];
	},

	function() { // generatePageURL()
		return;
	},

	function() { // setPageVariables()
		s_linkName = this.generatePageName();
		return;
	}
); // END: browse

REPORTING.events['hp_tout'] = new ReportingEvent(
	"LINK",

	function() { // generatePageName()
		return "Homepage Tout: " + this.data['tout_id'] +" | "+ this.data['tout_title'];
	},

	function() { // generatePageURL()
		return;
	},

	function() { // setPageVariables()
		s_linkName = this.generatePageName();
		return;
	}
); // END: browse

REPORTING.events['hp_tab'] = new ReportingEvent(
	"LINK",

	function() { // generatePageName()
		return "Homepage Tab: " + this.data['tabName'];
	},

	function() { // generatePageURL()
		return;
	},

	function() { // setPageVariables()
		s_linkName = this.generatePageName();
		return;
	}
); // END: browse

REPORTING.events['mini_mute'] = new ReportingEvent(
	"LINK",

	function() { // generatePageName()
		return "Mini Player Mute: " + this.data['muteState'];
	},

	function() { // generatePageURL()
		return;
	},

	function() { // setPageVariables()
		s_linkName = this.generatePageName();
		return;
	}
); // END: browse

REPORTING.events['mini_scroll'] = new ReportingEvent(
	"LINK",

	function() { // generatePageName()
		return "Mini Player Scroll";
	},

	function() { // generatePageURL()
		return;
	},

	function() { // setPageVariables()
		s_linkName = this.generatePageName();
		return;
	}
); // END: browse


REPORTING.events['interstitial_play'] = new ReportingEvent(
	"LINK",

	function() { // generatePageName()
		return (
			'Interstitial Play:' +
			( (typeof(this.data['video_title']) != "undefined") ?  this.data['video_title'] : "MTVI-NO_TITLE") + 
			( (typeof(this.data['video_id']) != "undefined") ? '[' + this.data['video_id'] + ']' : "#0000-UNDEFINED")
		);
	},

	function() { // generatePageURL()
		return;
	},

	function() { // setPageVariables()
		s_linkName = this.generatePageName();
		return;
	}
); // END: browse

REPORTING.events['playlist_add'] = new ReportingEvent(
	"LINK",

	function() { // generatePageName()
		var artist_name_string = "";
		if ( (typeof(this.data['artist_name']) != 'undefined') && (typeof(this.data['artist_id']) != 'undefined')) {
			artist_name_string = ' by ' + this.data['artist_name'] + ' [' + this.data['artist_id'] + ']';
		}
		return ('Add to Playlist: ' + this.data['video_title'] + ' [' + this.data['video_id'] + ']' + artist_name_string);
	},

	function() { // generatePageURL()
		return;
	},

	function() { // setPageVariables()
		s_linkName = this.generatePageName();		
		return;
	}
); // END: playlist_add


REPORTING.events['overdrive_exit'] = new ReportingEvent(
	"LINK",

	function() { // generatePageName()
		return "Exit Motherload";
	},

	function() { // generatePageURL()
		return;
	},

	function() { // setPageVariables()
		s_linkName = this.generatePageName();
		return;
	}
); // END: motherload_exit

REPORTING.events['overdrive_pv'] = new ReportingEvent(
	"PAGE",


	function() { // generatePageName()
		if(isDefined(configManager.channelName)==false && isDefined(omniCall.channel)==true){
			configManager.channelName=omniCall.channel;
		}
		if (isDefined(configManager.channelName) && configManager.channelName=='motherload')
			configManager.channelName='motherload';
		else
			configManager.channelName='miniplayer';
		return "/"+configManager.channelName+"/player.jhtml";
	},

	function() { // generatePageURL()
		if(isDefined(configManager.channelName)==false && isDefined(omniCall.channel)==true){
			configManager.channelName=omniCall.channel;
		}
		if (isDefined(configManager.channelName) && configManager.channelName=='motherload')
			configManager.channelName='motherload';
		else
			configManager.channelName='miniplayer';
		return "/"+configManager.channelName+"/player.jhtml";
	},

	function() { // setPageVariables()		
		return;
	}
); // END: overdrive_exit

// ... add new reporting event types below
//REPORTING.makeCall('overdrive_pv' );
//REPORTING.makeCall('overdrive_pv', { error : 'upgrade' );
//REPORTING.makeCall('overdrive_pv', { error : 'platform' );

function getGatewayLabel(gatenum){
gatelabe=gatenum;
  if (gatenum=="1")
					gatelabe="today"; 
  else if (gatenum=="2")
					gatelabe="originals";																							
		else if (gatenum=="3")
		   gatelabe="tv_shows";																							
		else if (gatenum=="4")
						gatelabe="the_daily_show";																							
		else if (gatenum=="5")
						gatelabe="comedians";																							
		else if (gatenum=="6")
						gatelabe="cult_classics";
	
	  return gatelabe;								
}																						


// utility method to test for 
function isDefined(v) {
	if(typeof v == 'undefined' || v == null || v == '' || v == 'undefined') return false;
	else return true;
}// END: isDefined()
