function ButtonTrackingObj(exp, titleName, cm, frame){
   this.VarTrivBtnTracking = new Variable( 'VarTrivBtnTracking', null, 0, cm, frame, exp, titleName, true );
   this.title = null;
}

ButtonTrackingObj.codeToStateMap =
{
	'N' : 'normalState',
	'O' : 'overState',
	'D' : 'downState',
	'A' : 'disabledState',
	'V' : 'visitedState',
	'S' : 'selectedState'
};
ButtonTrackingObj.stateToCodeMap = {};
for (var key in ButtonTrackingObj.codeToStateMap)
	ButtonTrackingObj.stateToCodeMap[ButtonTrackingObj.codeToStateMap[key]] = key;

ButtonTrackingObj.prototype.InitPageTracking = function ( )
{
	var THIS = this;
	var pageTrackData = this.VarTrivBtnTracking.getValue();
	var bDoInit = true;
	try {
	    if (pageTrackData && pageTrackData.length > 0 && pageTrackData != '~~~null~~~')
	    {
	        var topLevelSplit = pageTrackData.split('#');
	        if (topLevelSplit && topLevelSplit.length > 1)
            {
		        var arrIds = topLevelSplit[0].split(',');
		        var arrStatus = topLevelSplit[1].split(',');
		        for( var i=0; i<arrIds.length; i++ )
		        {
			        var id = parseInt( '0x' + arrIds[i] );
			        var status = arrStatus[i];
			        var node = this.FindNode( this.title, id );
			        if( node )
						node.v = ButtonTrackingObj.codeToStateMap[status] || status;
		        }
    		}
        }
    } catch (e) { }
}

ButtonTrackingObj.prototype.FindNode = function( node, id )
{
	if( node.id == id )
		return node;
	
	var match = null;
	if( typeof( node.c ) != 'undefined' ){
		for( var i=0; i<node.c.length; i++ ){
			match = this.FindNode( node.c[i], id );
			if( match != null )
				break;
		}
	}
	
	return match;
}

ButtonTrackingObj.prototype.InternalGetRangeStatus = function( node )
{
	if( node == null )
		return -1;
		
	if( typeof(node.c) == 'undefined' )
	{
		return node.v;
	}
	else
	{
		return 'normalState';
	}
}


ButtonTrackingObj.prototype.GetRangeStatus = function( id, bInit )
{
	var status = -1;
	if ( bInit ) 
		this.InitPageTracking();
	
	status = this.InternalGetRangeStatus( this.FindNode( this.title, id ) );

	return status;
}


ButtonTrackingObj.prototype.InternalSetRangeStatus=function( node, status )
{
	if( node == null )
		return;
	node.v = status;
	if( status == 0 && typeof(node.c)!='undefined')
	{
		for( var i=0; i<node.c.length; i++ )
			this.InternalSetRangeStatus( node.c[i], status ); 
	}
}

ButtonTrackingObj.prototype.SetRangeStatus = function( id, status /*0 or 1 or 2*/)
{
	this.InternalSetRangeStatus( this.FindNode(this.title, id), status );
	
	this.SavePageTracking();
}

ButtonTrackingObj.prototype.IterateTree = function( func )
{
	var stack = [];
	stack.push( this.title );
	var i = 0;
	while( stack.length > 0 )
	{
		var node = stack.shift();
		
		if( typeof(node.c) != 'undefined' )
			stack = node.c.concat(stack);
			
		//do the thing
		func( node, i, stack );
		i++;
	}	
}

ButtonTrackingObj.prototype.SavePageTracking = function()
{
	var fnIsSaveState = window.ObjButton && ObjButton.isSaveState || function () { return false; };
	var hexString = '';
	var arrayIds = [];
	var arrayStatus= [];
	
	this.IterateTree(function(node, i, stack){
		if (fnIsSaveState(node.v))
		{
			arrayIds.push(node.id);
			arrayStatus.push(node.v);
		}
	});
	
	for( var i=0; i<arrayIds.length; i++ )
		hexString += (i > 0 ? ',' : '') + arrayIds[i].toString(16);

	hexString += (arrayIds.length > 0 ? '#' : '');
	
	for (var i = 0; i < arrayStatus.length; i++)
		hexString += (i > 0 ? ',' : '') + (ButtonTrackingObj.stateToCodeMap[arrayStatus[i]] || arrayStatus[i]);

	//LD-8267 - Added a condition to avoid tracking null/empty data unnecessarily
	if (hexString.length > 0 || (myTop.suspendDataCache && myTop.suspendDataCache.indexOf('VarTrivBtnTracking') >= 0) || !this.VarTrivBtnTracking.bSCORM)
		this.VarTrivBtnTracking.set(hexString);
}

var trivBtnTracking = new ButtonTrackingObj(365,'nexus_cna_e_learning_module', 0, 'scorm2004');
trivBtnTracking.title={id:1,v:0,c:[{id:474918,v:'normalState'},{id:477339,v:'normalState'},{id:478032,v:'normalState'},{id:487758,v:'normalState'},{id:565151,v:'normalState'},{id:572229,v:'normalState'},{id:585085,v:'normalState'},{id:611844,v:'normalState'},{id:611828,v:'normalState'},{id:590639,v:'normalState'},{id:490471,v:'normalState'},{id:487902,v:'normalState'},{id:499905,v:'normalState'},{id:554601,v:'normalState'},{id:500322,v:'normalState'},{id:612540,v:'normalState'},{id:612550,v:'normalState'},{id:612561,v:'normalState'},{id:612570,v:'normalState'},{id:612581,v:'normalState'},{id:612591,v:'normalState'},{id:612602,v:'normalState'},{id:612612,v:'normalState'},{id:612623,v:'normalState'},{id:612633,v:'normalState'},{id:612644,v:'normalState'},{id:612654,v:'normalState'},{id:612665,v:'normalState'},{id:585416,v:'normalState'},{id:500960,v:'normalState'},{id:612775,v:'normalState'},{id:612783,v:'normalState'},{id:612794,v:'normalState'},{id:612804,v:'normalState'},{id:612815,v:'normalState'},{id:612825,v:'normalState'},{id:612836,v:'normalState'},{id:612846,v:'normalState'},{id:612857,v:'normalState'},{id:612867,v:'normalState'},{id:612878,v:'normalState'},{id:612888,v:'normalState'},{id:612899,v:'normalState'},{id:612909,v:'normalState'},{id:612920,v:'normalState'},{id:612929,v:'normalState'},{id:612939,v:'normalState'},{id:612948,v:'normalState'},{id:612959,v:'normalState'},{id:555501,v:'normalState'},{id:555708,v:'normalState'},{id:503531,v:'normalState'},{id:614133,v:'normalState'},{id:504092,v:'normalState'},{id:614588,v:'normalState'},{id:504688,v:'normalState'},{id:615062,v:'normalState'},{id:505121,v:'normalState'},{id:615501,v:'normalState'},{id:505544,v:'normalState'},{id:616124,v:'normalState'},{id:506257,v:'normalState'},{id:616658,v:'normalState'},{id:506534,v:'normalState'},{id:617062,v:'normalState'},{id:507159,v:'normalState'},{id:617501,v:'normalState'},{id:507457,v:'normalState'},{id:618010,v:'normalState'},{id:507901,v:'normalState'},{id:618464,v:'normalState'},{id:508516,v:'normalState'},{id:618893,v:'normalState'},{id:510990,v:'normalState'},{id:619396,v:'normalState'},{id:567067,v:'normalState'},{id:555894,v:'normalState'},{id:556203,v:'normalState'},{id:568746,v:'normalState'},{id:597741,v:'normalState'},{id:598554,v:'normalState'},{id:576071,v:'normalState'},{id:527676,v:'normalState'},{id:609334,v:'normalState'},{id:528709,v:'normalState'},{id:605492,v:'normalState'},{id:613317,v:'normalState'},{id:613328,v:'normalState'},{id:613340,v:'normalState'},{id:613352,v:'normalState'},{id:613364,v:'normalState'},{id:613376,v:'normalState'},{id:613385,v:'normalState'},{id:613394,v:'normalState'},{id:613403,v:'normalState'},{id:535257,v:'normalState'},{id:578976,v:'normalState'},{id:595060,v:'normalState'},{id:579887,v:'normalState'},{id:532238,v:'normalState'},{id:600217,v:'normalState'},{id:532460,v:'normalState'},{id:602133,v:'normalState'},{id:603004,v:'normalState'},{id:603256,v:'normalState'},{id:621757,v:'normalState'},{id:621737,v:'normalState'},{id:621725,v:'normalState'},{id:621790,v:'normalState'},{id:589759,v:'normalState'},{id:589556,v:'normalState'},{id:589575,v:'normalState'},{id:550502,v:'normalState'},{id:562092,v:'normalState'}]};
