
	/*
	JS
	--------------------------------------------------------------------------------------------
	@site			sho.com (site)
	@file			OmniHelp.js
	@author			dpaul
	@modified		07.08.09
	@desc			Wrapper for Omniture tracking code. (s_code.js) 
	@desc			Enables tracking of page impressions and custom links/events.
	@depend			prototype, s_code.js
	@note			no longer tracking clicks as sprops
	@note			trying to resolve undefined prefixes in hd custom links..
	
	/* =:OmniHelp
	--------------------------------------------------------------------------------------------*/
	var OmniHelp = function()
	{
		var pageID;
		var ALWAYS_DEBUG = false;
		var DEBUG_ZONES = [ 'http://129.228.130.88:8080/','localhost:8080', 'dev.sho.com', 'qa.sho.com', 'posting.sho.com' ];
		var RSID = "cbsshocom";
		var TRACK_CLICKS_AS_SPROPS = false;
		var PREFIX_CLICKS_W_PAGEDATA = true;
		var UNDEFINED_PAGE_PREFIX = '!UNDEFINED'
		
		/* =:Tracking
		--------------------------------------------------------------------------------------------*/  
		function trackPage()
		{
			// safety checks
			if(!sCodePresent()) return;
			if(!metaTagPresent()) return; 
			
			// read tracking id from meta tag
			pageID = $$('[name="page-tracking"]')[0].readAttribute('content');	
			
			// set path & hierarchy
			s.pageName=pageID;   
			s.hier1=pageID;

			// set  insight vars (sprops) 1-9 
			for( var d=0; d<pageID.split(':').length; d++)
			{
				s[ 'prop'+(d+1)] = pageID.split(':')[d];
			}
			
			// look for custom s props
			if( $$('[name="page-tracking-props"]').length == 1)
			{ 
				var sprops = $$('[name="page-tracking-props"]')[0].readAttribute('content');  
				sprops.split('&').each( function( str ){
					var key, val; [key,val] = str.split('=');
					if( !isNaN(Number(key))){
						s[ 'prop'+key ] = val;
					}
				});
			}
			
			// make impression
			var s_code=s.t();if(s_code)document.write(s_code);
			
			// show impression data
			 trace(pageID);
		}
			
		function trackClick( linkID )
		{
			if(!sCodePresent()) return;
			if(!metaTagPresent()) return;
			
			// always load pageid from meta...
			pageID = $$('[name="page-tracking"]')[0].readAttribute('content');
						
			var s=s_gi(RSID);
			
			// set custom insight vars 21-30 [s-props]
			if( TRACK_CLICKS_AS_SPROPS )
			{ 
				var props = linkID.split(':');
				for( var d=0; d<props.length; d++)
				{
					s['prop'+(d+21)] = props[d];
				}
			}
			
			// prefix link w/ page location
			if( PREFIX_CLICKS_W_PAGEDATA )
			{
				if( pageID == null || typeof pageID == 'undefined' || pageID == '' )
				{
					// if page location is bad, use url instead
					linkID = UNDEFINED_PAGE_PREFIX + ':' + document.location.pathname + ':' + linkID;
				}
				else
				{
					linkID = pageID +':'+linkID;
				}
			} 
			
			s.tl ( true, 'o', linkID );
			trace(linkID);
			
		}
		
		function trackVideo(hierarchy, id)
		{
			if(!sCodePresent()) return;
			
			pageID = hierarchy + id;

			// set path & hierarchy
			s.pageName=pageID;   
			s.hier1=pageID;
			
			// make impression
			var s_code=s.t();if(s_code)document.write(s_code);
			
			// show impression data
			 trace(pageID);
		}
				  
		/* =:Util
		--------------------------------------------------------------------------------------------*/  
		function sCodePresent()
		{
			if( typeof s == "undefined")
			{ 
				alert("Fatal Error: no s object found!\nPlease ensure that s_code.js is included in document body."); 
				return false; 
			}
			else return true;
		}
		
		function metaTagPresent()
		{
			if( $$('[name="page-tracking"]').length !== 1 )
			{	
				alert('Fatal Error: <meta name="page-tracking" /> not found!'); 
				return false; 
			}
			else return true;
		}
		
		function trace(s)
		{	
			if( !ALWAYS_DEBUG && (DEBUG_ZONES.join(' ').indexOf( window.location.host ) == -1 )){ return; }
			if( $('omni-help-output') == undefined ){ drawTerminal(); }
			$('omni-help-output').update(s);
		}
		
		function drawTerminal()
		{
			var css = [
				'position:fixed',
				'bottom:0',
				'z-index:999999',
				'padding:4px 8px 4px 8px',
				'font-family:\'Courier New\', Courier, monospace',
				'font-size:11px',
				'background:#e1e1e1',
				'color:#000',
				'width:100%',
				'height:1em',
				'line-height:1em',
				'text-align:left',
				'border-top:1px solid #CCC',
			];
			
			$$('body')[0].insert({ 
				bottom: '<div id="omni-help-output" style="'+css.join(' !important; ')+'"></div>'
			}); 
		}
		
		/* =:Public
		--------------------------------------------------------------------------------------------*/  
		return {
			track:trackPage,	
			t:trackPage,
			trackClick:trackClick,	
			tc:trackClick,
			tv:trackVideo,
 			trackVideo:trackVideo
		}
		
	}();
	
