
var Matrix = {
	ROW_COUNT: 0,
	COL_COUNT: 0,
	
	CURRENT_ROW: 0,
	CURRENT_COL: 0,
	
	init: function()
	{
		var matrix = document.getElementById('matrix');
		Util.addCssClass(matrix, 'matrix-js-enabled');
		
		if ( this.CURRENT_ROW )
		{
			this.rowOver(this.CURRENT_ROW);
		}
		if ( this.CURRENT_COL )
		{
			this.colOver(this.CURRENT_COL);
		}
	},
	
	getComponent: function(id)
	{
		return document.getElementById(id);
	},
	
	cellOver: function(element, rowNum, colNum)
	{
		Util.addCssClass(element, 'hover');
		
		for ( var c = 1; c <= this.COL_COUNT; c++ )
		{
			var header = this.getComponent('matrix_top_header_' + c);
			var isAfter = c > colNum;
			var isCurrent = c == colNum;
			var className = isAfter ? 'hover-after' : ( isCurrent ? 'hover-current' : 'hover-before' );
			if ( header )
			{
				Util.addCssClass(header, className);
			}
		}
		
		for ( var r = 1; r <= this.ROW_COUNT; r++ )
		{
			var header = this.getComponent('matrix_side_header_' + r);
			var firstCell = this.getComponent('matrix_cell_' + r + '_1');
			var isBefore = r < rowNum;
			var isCurrent = r == rowNum;
			var className = isBefore ? 'hover-before' : ( isCurrent ? 'hover-current' : 'hover-after' );
			if ( header )
			{
				Util.addCssClass(header, className);
			}
			if ( firstCell )
			{
				Util.addCssClass(firstCell, className);
			}
		}
	},
	
	cellOut: function(element)
	{
		Util.removeCssClass(element, 'hover-before');
		Util.removeCssClass(element, 'hover-current');
		Util.removeCssClass(element, 'hover-after');
		Util.removeCssClass(element, 'hover');
		
		for ( var c = 1; c <= this.COL_COUNT; c++ )
		{
			var header = this.getComponent('matrix_top_header_' + c);
			if ( header )
			{
				Util.removeCssClass(header, 'hover-before');
				Util.removeCssClass(header, 'hover-current');
				Util.removeCssClass(header, 'hover-after');
			}
		}
		
		for ( var r = 1; r <= this.ROW_COUNT; r++ )
		{
			var header = this.getComponent('matrix_side_header_' + r);
			var firstCell = this.getComponent('matrix_cell_' + r + '_1');
			if ( header )
			{
				Util.removeCssClass(header, 'hover-before');
				Util.removeCssClass(header, 'hover-current');
				Util.removeCssClass(header, 'hover-after');
			}
			if ( firstCell )
			{
				Util.removeCssClass(firstCell, 'hover-before');
				Util.removeCssClass(firstCell, 'hover-current');
				Util.removeCssClass(firstCell, 'hover-after');
			}
		}
	},
	
	rowOver: function(rowNum)
	{
		for ( var r = 1; r <= this.ROW_COUNT; r++ )
		{
			var isBefore = r < rowNum;
			var isCurrent = r == rowNum;
			var className = isBefore ? 'hover-before' : ( isCurrent ? 'hover-current' : 'hover-after' );
			
			var header = this.getComponent('matrix_side_header_' + r);
			if ( header && !Util.hasCssClass(header, className) )
			{
				var firstCell = this.getComponent('matrix_cell_' + r + '_1');
				
				Util.removeCssClass(header, 'hover-before');
				Util.removeCssClass(header, 'hover-current');
				Util.removeCssClass(header, 'hover-after');
				
				Util.addCssClass(header, className);
				
				if ( firstCell )
				{
					Util.removeCssClass(firstCell, 'hover-before');
					Util.removeCssClass(firstCell, 'hover-current');
					Util.removeCssClass(firstCell, 'hover-after');
					
					Util.addCssClass(firstCell, className);
				}
			}
		}
	},
	
	rowOut: function()
	{
		this.rowOver(this.CURRENT_ROW);
	},
	
	colOver: function(colNum)
	{
		for ( var c = 1; c <= this.COL_COUNT; c++ )
		{
			var isAfter = c > colNum;
			var isCurrent = c == colNum;
			var className = isAfter ? 'hover-after' : ( isCurrent ? 'hover-current' : 'hover-before' );
			
			var header = this.getComponent('matrix_top_header_' + c);
			if ( header && !Util.hasCssClass(header, className) )
			{
				Util.removeCssClass(header, 'hover-before');
				Util.removeCssClass(header, 'hover-current');
				Util.removeCssClass(header, 'hover-after');
				
				Util.addCssClass(header, className);
			}
		}
	},
	
	colOut: function()
	{
		this.colOver(this.CURRENT_COL);
	}
};

$(document).ready(function(){
	Matrix.init();
});

