var packageMatrixTO; // menu Timeout

function clearCellsTO (menuID) {
	clearTimeout(packageMatrixTO);
	packageMatrixTO = setTimeout("clearCells()",300);
}

function clearCells() {
	var className;
	var isIncluded;
	var isKHTML = (navigator.userAgent.indexOf("KHTML") != -1 ? true : false);
	var theads = $("packageMatrix").getElementsByTagName("thead");
	var tbods = $("packageMatrix").getElementsByTagName("tbody");

	// clear className for all thead cells
	for (var b = 0; b < theads.length; b++) {
		for (var r = 0; r < theads[b].rows.length; r++) {
			for (var c = 0; c < theads[b].rows[r].cells.length; c++) {
				theads[b].rows[r].cells[c].className = "";
			}
		}
	}		

	// clear className for all tbody cells
	for (var b = 0; b < tbods.length; b++) {
		for (var r = 0; r < tbods[b].rows.length; r++) {
			for (var c = 0; c < tbods[b].rows[r].cells.length; c++) {
				className = tbods[b].rows[r].cells[c].className;
				isIncluded = (className.indexOf("Included") != -1 ? true : false);
				if (className != "Included" && className != "") {
					tbods[b].rows[r].cells[c].className = (isIncluded ? "Included" : "");
					if (isKHTML && c != 0) khtmlResetHeight(tbods[b].rows[r].cells[c]);
				}
			}
		}
	}
}


function khtmlResetHeight (el) {
	var aDiv = el.getElementsByTagName("div");
	for (var i = 0; i < aDiv.length; i++) {
		if (aDiv[i].className == "hackKHTML") aDiv[i].style.height = "45px";
	}
}




var packageMatrixBehaviours = {
	'#packageMatrix td' : function(el){
	
		el.className = (el.innerHTML == "included" ? "Included": "");
		
		//safari hack for table cell rollovers
		if (navigator.userAgent.indexOf("KHTML") != -1) el.innerHTML = "<div class=\"hackKHTML\">" + el.innerHTML + "</div>";
		
		var selectedRow, selectedCol;
		var tbods = $("packageMatrix").getElementsByTagName("tbody");
		var theads = $("packageMatrix").getElementsByTagName("thead");

		for (var b = 0; b < tbods.length; b++) {
			for (var r = 0; r < tbods[b].rows.length; r++) {
				for (var c = 0; c < tbods[b].rows[r].cells.length; c++) {
					if (el == tbods[b].rows[r].cells[c]) {
						selectedRow = r;
						selectedCol = c;
						break;
					}
				}
				if (selectedRow == r) break;
			}
		}

		if (getFirstElementHref(theads[0].rows[0].cells[selectedCol]) != "") {
			el.onclick = function(){
				var selectedRow, selectedCol;
				var tbods = $("packageMatrix").getElementsByTagName("tbody");
				var theads = $("packageMatrix").getElementsByTagName("thead");
	
				for (var b = 0; b < tbods.length; b++) {
					for (var r = 0; r < tbods[b].rows.length; r++) {
						for (var c = 0; c < tbods[b].rows[r].cells.length; c++) {
							if (el == tbods[b].rows[r].cells[c]) {
								selectedRow = r;
								selectedCol = c;
								break;
							}
						}
						if (selectedRow == r) break;
					}
				}
	
				location.href = getFirstElementHref(theads[0].rows[0].cells[selectedCol]).href;
			}
			
			el.setAttribute("title", getFirstElementHref(theads[0].rows[0].cells[selectedCol]).getAttribute("title"));
		}
		
	
		el.onmouseover = function () {
			clearTimeout(packageMatrixTO);

//			var s = "";
			var selectedRow, selectedCol;
			var className;
			var isIncluded;
			var isKHTML = (navigator.userAgent.indexOf("KHTML") != -1 ? true : false);
			var theads = $("packageMatrix").getElementsByTagName("thead");
			var tbods = $("packageMatrix").getElementsByTagName("tbody");
			

			for (var b = 0; b < tbods.length; b++) {
				for (var r = 0; r < tbods[b].rows.length; r++) {
					for (var c = 0; c < tbods[b].rows[r].cells.length; c++) {
						if (el == tbods[b].rows[r].cells[c]) {
							selectedRow = r;
							selectedCol = c;
							break;
						}
					}
					if (selectedRow == r) break;
				}

				for (var r = 0; r < tbods[b].rows.length; r++) {
					for (var c = 0; c < tbods[b].rows[r].cells.length; c++) {
						className = tbods[b].rows[r].cells[c].className;
						isIncluded = (className.indexOf("Included") != -1 ? true : false);

						if (el == tbods[b].rows[r].cells[c]) {
							el.className = "selected" + (isIncluded ? "Included" : "");
//							s += "R" + r + "C" + c + ", ";
							if (isKHTML && c != 0) {
								var aDiv = tbods[b].rows[r].cells[c].getElementsByTagName("div");
								for (var i = 0; i < aDiv.length; i++) {
									if (aDiv[i].className == "hackKHTML") {
										aDiv[i].style.height = (parseInt(tbods[b].rows[r].cells[0].offsetHeight, 10) > 45 ? tbods[b].rows[r].cells[0].offsetHeight : "45") + "px";
									}
								}
							}
						} else if (c == selectedCol) {
							if (className.indexOf("highlightCol") == -1) {
								tbods[b].rows[r].cells[c].className = "highlightCol" + (isIncluded ? "Included" : "");
//								s += "R" + r + "C" + c + ", ";
								if (isKHTML && c != 0) khtmlResetHeight(tbods[b].rows[r].cells[c]);
							}
						} else if (r == selectedRow) {
							if (className.indexOf("highlightRow") == -1) {
								tbods[b].rows[r].cells[c].className = "highlightRow" + (isIncluded ? "Included" : "");
//								s += "R" + r + "C" + c + ", ";
								if (isKHTML && c != 0) {
									var aDiv = tbods[b].rows[r].cells[c].getElementsByTagName("div");
									for (var i = 0; i < aDiv.length; i++) {
										if (aDiv[i].className == "hackKHTML") {
											aDiv[i].style.height = (parseInt(tbods[b].rows[r].cells[0].offsetHeight, 10) > 45 ? tbods[b].rows[r].cells[0].offsetHeight : "45") + "px";
										}
									}
								}
							}
						} else {
							if (className != "Included" && className != "") {
								tbods[b].rows[r].cells[c].className = (isIncluded ? "Included" : "");
//								s += "R" + r + "C" + c + ", ";
								if (navigator.userAgent.indexOf("KHTML") != -1 && c != 0) khtmlResetHeight(tbods[b].rows[r].cells[c]);
							}
						}
					}
				}
			}
			
			for (var b = 0; b < theads.length; b++) {
				for (var r = 0; r < theads[b].rows.length; r++) {
					for (var c = 0; c < theads[b].rows[r].cells.length; c++) {
						theads[b].rows[r].cells[c].className = (c == selectedCol) ? "highlight" : "";
					}
				}
			}		


//			if ($("debug")) $("debug").innerHTML = s;
		}
	},

	'#packageMatrix tbody th' : function(el){
	
		el.className = (el.innerHTML == "included" ? "Included": "");
		
		//safari hack for table cell rollovers
		if (navigator.userAgent.indexOf("KHTML") != -1) el.innerHTML = "<div class=\"hackKHTML\">" + el.innerHTML + "</div>";
		
		var selectedRow, selectedCol;
		var tbods = $("packageMatrix").getElementsByTagName("tbody");
		var theads = $("packageMatrix").getElementsByTagName("thead");
	
		el.onmouseover = function () {
			clearTimeout(packageMatrixTO);

//			var s = "";
			var selectedRow, selectedCol;
			var className;
			var isIncluded;
			var isKHTML = (navigator.userAgent.indexOf("KHTML") != -1 ? true : false);
			var theads = $("packageMatrix").getElementsByTagName("thead");
			var tbods = $("packageMatrix").getElementsByTagName("tbody");
			

			for (var b = 0; b < tbods.length; b++) {
				for (var r = 0; r < tbods[b].rows.length; r++) {
					for (var c = 0; c < tbods[b].rows[r].cells.length; c++) {
						if (el == tbods[b].rows[r].cells[c]) {
							selectedRow = r;
							selectedCol = c;
							break;
						}
					}
					if (selectedRow == r) break;
				}

				for (var r = 0; r < tbods[b].rows.length; r++) {
					for (var c = 0; c < tbods[b].rows[r].cells.length; c++) {
						className = tbods[b].rows[r].cells[c].className;
						isIncluded = (className.indexOf("Included") != -1 ? true : false);

						if (r == selectedRow) {
							if (className.indexOf("highlightRow") == -1) {
								tbods[b].rows[r].cells[c].className = "highlightRow" + (isIncluded ? "Included" : "");
//								s += "R" + r + "C" + c + ", ";
								if (isKHTML && c != 0) {
									var aDiv = tbods[b].rows[r].cells[c].getElementsByTagName("div");
									for (var i = 0; i < aDiv.length; i++) {
										if (aDiv[i].className == "hackKHTML") {
											aDiv[i].style.height = (parseInt(tbods[b].rows[r].cells[0].offsetHeight, 10) > 45 ? tbods[b].rows[r].cells[0].offsetHeight : "45") + "px";
										}
									}
								}
							}
						} else {
							if (className != "Included" && className != "") {
								tbods[b].rows[r].cells[c].className = (isIncluded ? "Included" : "");
//								s += "R" + r + "C" + c + ", ";
								if (navigator.userAgent.indexOf("KHTML") != -1 && c != 0) khtmlResetHeight(tbods[b].rows[r].cells[c]);
							}
						}
					}
				}
			}
		}
	},

	'#packageMatrix thead th' : function(el){

		//safari hack for table cell rollovers
		if (navigator.userAgent.indexOf("KHTML") != -1) el.innerHTML = "<div class=\"hackKHTML\">" + el.innerHTML + "</div>";


		if (getFirstElementHref(el) != "") {
			el.onclick = function(){
				location.href = getFirstElementHref(el).href;
			}
			el.setAttribute("title", getFirstElementHref(el).getAttribute("title"));
		}
		

		el.onmouseover = function () {
			clearTimeout(packageMatrixTO);

//			var s = "";
			var selectedCol;
			var className;
			var isIncluded;
			var isKHTML = (navigator.userAgent.indexOf("KHTML") != -1 ? true : false);

			var theads = $("packageMatrix").getElementsByTagName("thead");
			var tbods = $("packageMatrix").getElementsByTagName("tbody");

			for (var b = 0; b < theads.length; b++) {
				for (var r = 0; r < theads[b].rows.length; r++) {
					for (var c = 0; c < theads[b].rows[r].cells.length; c++) {
						if (el == theads[b].rows[r].cells[c]) {
							selectedCol = c;
							el.className = "selected";
						} else {
							theads[b].rows[r].cells[c].className = "";
						}
					}
				}
			}		

			for (var b = 0; b < tbods.length; b++) {
				for (var r = 0; r < tbods[b].rows.length; r++) {
					for (var c = 0; c < tbods[b].rows[r].cells.length; c++) {
						className = tbods[b].rows[r].cells[c].className;
						isIncluded = (className.indexOf("Included") != -1 ? true : false);
						if (c == selectedCol) {
							tbods[b].rows[r].cells[c].className = "highlightCol" + (isIncluded ? "Included" : "");
//							s += "R" + r + "C" + c + ", ";
							if (isKHTML && c != 0) khtmlResetHeight(tbods[b].rows[r].cells[c]);
						} else if (c != selectedCol && (className.indexOf("highlight") != -1 || className.indexOf("selected") != -1 )) {
							tbods[b].rows[r].cells[c].className = (isIncluded ? "Included" : "");
//							s += "R" + r + "C" + c + ", ";
							if (isKHTML != -1 && c != 0) khtmlResetHeight(tbods[b].rows[r].cells[c]);
						}
					}
				}
			}
//			if ($("debug")) $("debug").innerHTML = s;
		}
	},
	'#packageMatrix' : function(el){
		el.onmouseout = clearCellsTO;
	},
	'#packageMatrix thead th.empty' : function(el){
		el.onmouseover = clearCellsTO;

	},
	'#packageMatrix dd' : function(el){
		el.style.display = "none";
	}/*	
	,
	'#packageMatrix tbody th' : function(el){
		el.onmouseover = function(){
			el.className = "highlightRow";
		},
		el.onmouseout = function(){
			el.className = "";
		}
	}	
	*/

};

if (readCookie("style") != "textonly") Behaviour.register(packageMatrixBehaviours);
