/* Scriptmodule voor filmhuis weekoverzicht v1.0
   
   (C) 2006 vizi

   DOM, ECMA-262 en Javascript compatible implementatie van fancy weekoverzicht Lumen
   
   Plaats: /scripts/class_weekview.js
   Revisie: april 2006

 */

// Zet globale variabelen voor timeout.
//
var tableview_delay   = 1000;
var tableview_clear   = null;

// Initieer weektabeloverzicht.
// 
function weekviewInit(e)
{
	if (document.getElementsByTagName && document.getElementById)
	{
		// Haal het weekoverzicht uit het DOM.
		var weektabel = document.getElementById('weektabel');
		if (!weektabel) return;

		// Haal alle links uit DOM.
		var all_links = weektabel.getElementsByTagName('a');
		
		// Loop ze een voor een na.
		for (var i = 0; i < all_links.length; i++)
		{
			// Bepaal of het een 'gewone' hover is...
			if (all_links[i].parentNode.className.indexOf('special') < 0)
			{
				// Mouseover & out
				all_links[i].targetMouseoverHandler = showHighlight;
				all_links[i].targetMouseoutHandler = clearHighlight;
				dispatch(all_links[i], "mouseover", "targetMouseoverHandler");
				dispatch(all_links[i], "mouseout",  "targetMouseoutHandler");
			}
		}

		// Haal alle links uit DOM.
		var all_screenings = weektabel.getElementsByTagName('em');
		
		// Loop ze een voor een na.
		for (var i = 0; i < all_screenings.length; i++)
		{
			// Mouseover & out
			all_screenings[i].targetMouseoverHandler = showHighlight;
			all_screenings[i].targetMouseoutHandler = clearHighlight;
			dispatch(all_screenings[i], "mouseover", "targetMouseoverHandler");
			dispatch(all_screenings[i], "mouseout",  "targetMouseoutHandler");
		}
	}
}

// Eigenlijke functie: toon highlight van dag, film of specifieke voorstelling.
// 
function showHighlight()
{
	// Temp: voor em in plaats van link
	this.className = "hover";
	
	// Bepaal rij- en kolomnummer van cel waar muis staat.
	var this_cell = this.parentNode.id.split('-');
	var this_row  = parseInt(this_cell[1]);
	var this_col  = parseInt(this_cell[2]);
	var this_film = this.parentNode.parentNode.className;
	
	//window.status = this_film;
	
	// Wis eventuele timeout.
	if (tableview_clear != null)
	{
		clearTimeout(tableview_clear);
		tableview_clear = null;
	}
	
	// Schakel tabel in 'laaglicht' stand.
	document.getElementById('weektabel').className = "laaglicht";
	
	if (this_row == 0)
	{
		// Rijnummer 0: dag.
		var row_count = 1, current_cell = null;

		while (current_cell = document.getElementById('cel-' + row_count + '-' + this_col))
		{
			// Highlight deze cel.
			current_cell.className = "hooglicht";
			
			// Check of er een tijd in cel staat; zo ja: highlight ook de filmtitel!
			if ((current_cell.innerHTML.indexOf("a href") > -1) || (current_cell.innerHTML.indexOf("em") > -1))
			{
				document.getElementById('cel-' + row_count + '-0').className = "hooglicht";
			}
						
			row_count++;
		}	
	}
	else if (this_col == 0)
	{
		// Zet alle rijen aan met dezelfde class als huidige rij.
		var all_rows = document.getElementsByTagName("tr");
		var all_rows_len = all_rows.length;
		for (i = 0; i < all_rows_len; i++)
		{
			if (all_rows[i].className != this_film) continue;
			
			var row_children = all_rows[i].childNodes;
			var row_children_len = row_children.length;

			for (j = 0; j < row_children_len; j++)
			{
				current_child = row_children[j];
				if (current_child.nodeName == "TD")
				{
					var current_child_id = current_child.id.split("-");
					current_child.className = "hooglicht";
					if ((current_child.innerHTML.indexOf("a href") > -1) || (current_child.innerHTML.indexOf("em") > -1))
					{
						document.getElementById('cel-0-' + current_child_id[2]).className = "hooglicht";
					}
				}
				else if (current_child.nodeName == "TH")
				{
					current_child.className = "hooglicht";
				}
			}
		}
	}
	else
	{
		// Overige gevallen: voorstelling.
		document.getElementById('cel-' + this_row + '-0').className = "hooglicht";
		document.getElementById('cel-0-' + this_col).className = "hooglicht";
	}
}


// Eigenlijke functie: verberg alle highlights.
// 
function clearHighlight()
{
	// Temp: voor em in plaats van link
	this.className = "";
	
	// Haal het weekoverzicht uit het DOM.
	var weektabel = document.getElementById('weektabel');
	if (!weektabel) return;
	
	// Haal alle tabelcellen uit DOM.
	var all_cells = weektabel.getElementsByTagName('td');
	
	// Loop ze een voor een na.
	for (var i = 0; i < all_cells.length; i++)
	{
		// Wis classnaam van link.
		all_cells[i].className = "";
	}

	// Haal alle tabelhoofden uit DOM.
	var all_cells = weektabel.getElementsByTagName('th');
	
	// Loop ze een voor een na.
	for (var i = 0; i < all_cells.length; i++)
	{
		// Wis classnaam van link.
		all_cells[i].className = (all_cells[i].className == "special") ? "special" : "";
	}

	tableview_clear = setTimeout('clearTableview()', tableview_delay);
}


// Helperfunctie: zet tabel in normale stand.
//
function clearTableview()
{
	// Schakel tabel weer in 'normale' weergavestand.
	document.getElementById('weektabel').className = "";
}



// Hang script in window.onload ketting.
window.targetWeekviewHandler = weekviewInit;
dispatch(window, "load", "targetWeekviewHandler");
