/* Dynamic Table View JS Include
   (c) by Jurek Raben / Alster Media & Werbung GmbH
   V1.2
 */

var currentPage = 1;
var loaded = false;
var numPages = 0;
var lastPageNum = null;
var strAll = 'Alle';
var strHoverClassSwitch = '';
var strClickClassSwitch = 'noClick';
var timeoutObj = null;
var timeoutDefaultValue = 1000;
var tableRowsPerPage = 15;
var timeoutValue = timeoutDefaultValue;
var tableLinksBottomId = '';
var tableLinksBottomId2 = '';
var tableReloadRange = 0;
var lastSortBy = 0;
var loadOffset = 0;
var validTableReloadRange = 0;

function tableInit() {
	delayedTableInit(false);
}

function delayedTableInit(timedOut) {
	
	$(tableId).hide();
	
	if (timedOut == false){ updateTableContent(0, false);}
	else {
		if (isNaN(timedOut)) {timeoutValue = timeoutDefaultValue;}
		else {timeoutValue = timedOut;}
		timedOutTableUpdate();
	}
}

function delayedUpdateTableContent(byCol, wasClicked, timedOut) {
	timeoutValue = timedOut;
	clearTimeoutObj();
	timeoutObj = window.setTimeout('updateTableContent(' + byCol + ', ' + wasClicked + ');', timeoutValue);
	
}

function updateTableContent(byCol, wasClicked) {
	loadOffset = 0;
	currentPage = 1;
	lastPageNum = null;
	validTableReloadRange = Math.floor(tableReloadRange / tableRowsPerPage) * tableRowsPerPage;
	doUpdateTableContent(byCol, wasClicked);
	if ( byCol != 0 && document.getElementById('sort_byCol') != null) {
		if (byCol == 1) byCol = 2;
		else if (byCol == 2) byCol= 1;
		document.getElementById('sort_byCol').selectedIndex = (byCol - 1);
	}
}

function doUpdateTableContent(byCol, wasClicked, buchstabe, contId) {

	
	lastSortBy = byCol;
	clearTimeoutObj();
	if (byCol > 0) sortBy = byCol;
	if (wasClicked) {
		sortAscDesc[sortBy - 1] = 1 - sortAscDesc[sortBy - 1];
		wasClicked = 1;
	}
	else {
		wasClicked = 0;
		//sortAscDesc = Array(0,0,1,1,1,0);
	}
	if (sortBy != ""){
	updateDirs(sortBy);
	}
	if (typeof contId != "undefined"){
		tableContentId = contId;
	}
	
	var params = tableSortByVarName + '=' + sortBy + '&was_clicked=' + wasClicked + '&offset=' + loadOffset + '&buchstabe=' + buchstabe + '&limit=' + validTableReloadRange + tableSubmitAddition();
	new Ajax.Updater(tableContentId, tableUrl, {
		asynchronous:true, evalScripts:false, parameters: params,
			onComplete: function(request, json) {
				lastPageNum = null;
				if (tableLoaderContentId) $(tableLoaderContentId).hide();
				loaded = true;
				if (sortBy != "")
				{
					if (updateNumResults() == 0) {
					$(tableId).hide();
					if (tableEventLoadedNoResultsExtraFunction) tableEventLoadedNoResultsExtraFunction();
					}
					else {
					$(tableId).show();
					showPage(currentPage);
					if (tableEventLoadedHasResultsExtraFunction) tableEventLoadedHasResultsExtraFunction();
					}
				}else
			 	{
			 	$(tableId).show();
			 	}
				}, 
				onLoading: function(request, json) {
				loaded = false;
				updateNumResults();
				if (tableLoaderContentId) $(tableLoaderContentId).show();
				if (tableEventLoadingExtraFunction) tableEventLoadingExtraFunction();
			}
		});
}
function updateDirs(sortBy) {
	for (var c = 1;c <= sortAscDesc.length;c++) {
		if (c == sortBy) {
			if (sortAscDesc[c - 1]) {
				$('dir' + c).className = 'sortierpfeile_rauf';
			}
			else {
				$('dir' + c).className = 'sortierpfeile_runter';
			}
		}
		else {
			$('dir' + c).className = 'sortierpfeile_aus';
		}
	}

}

function updateNumResults() {
	if (tableReloadRange) {
		var numRes = Number($(tableContentId).firstChild.firstChild.innerHTML);
	}
	else {
		var numRes = Number($(tableContentId).childNodes.length);
	}
	if (numRes > 0 && $(tableContentId).innerHTML.length > 10) {
		$(tableId).show();
		if (tableEventLoadedHasResultsExtraFunction) tableEventLoadedHasResultsExtraFunction();		
	}
	else {
		$(tableId).hide();
		
	}
	
	numPages = Math.ceil(numRes / tableRowsPerPage);
	var linksContentTop = '';
	if (numPages > 0) linksContentTop = 'Seite ' + currentPage + ' von ' + numPages + '';
	var linksContentBottom = '';
	if (numPages > 1) {
		var title;
		for (var c = 1;c <= numPages;c++) {
			/* Anzeige aller Datensätze nicht mehr notwending, sonst im Counter oben numPages + 1 */ 
			if (c == numPages + 1) {
				title = 'Alle Seiten';
				linkValue = strAll;
			}
			else {
				title = 'Seite ' + c + ' von ' + numPages + '&nbsp;&nbsp;';
				linkValue = c;
			}
			linksContentBottom += '<option value="' + linkValue + '"';
			if (linkValue == currentPage) {
				linksContentBottom += ' selected';
				/* keine Links oben: linksContentTop += '&nbsp;' + linkValue + '&nbsp;&nbsp;&nbsp;'; */
			}
			else {
				/* keine Links oben: linksContentTop += '<a href="#" onclick="showPage(\'' + linkValue + '\');return false;">&nbsp;' + linkValue + '&nbsp;</a>&nbsp;&nbsp;'; */ 
			}
			linksContentBottom += '>' + title + '</option>';
		}
		linksContentBottom = '<select id="select_page" onchange="doShowPage(this.options[this.selectedIndex].value,true);">' + linksContentBottom + '</select>';
		if (currentPage < numPages) {
			linksContentBottom = '<div class="forward"><a href="#" onclick="doShowPage(Number(currentPage) + 1,true);return false;" class="link-right">weiter</a></div>' + linksContentBottom;
		} else {
			linksContentBottom = '<div class="forward">weiter</div>' + linksContentBottom;
		}
		if (currentPage > 1) {
			linksContentBottom += '<div class="back"><a href="#" onclick="doShowPage(Number(currentPage) - 1,true);return false;" class="link-left">zurÃ¼ck</a></div>';
		} else {
			linksContentBottom += '<div class="back">zurÃ¼ck</div>';
		}
		
	}
	if (tableLinksTopId) $(tableLinksTopId).innerHTML = linksContentTop;
	if (tableLinksBottomId) $(tableLinksBottomId).innerHTML = linksContentBottom;
	if (tableLinksBottomId2) $(tableLinksBottomId2).innerHTML = linksContentBottom;
	if (tableNumResultsId) $(tableNumResultsId).innerHTML = numRes;
	
	return numRes;
}

function showPage(showPageNum) {
	doShowPage(showPageNum, false);
}

function doShowPage(showPageNum, doCheckOffset) {
	currentPage = showPageNum;
	if (currentPage != strAll) {
		showPageNum--;
		var targetRange = tableRowsPerPage * showPageNum;
		if (Math.floor(targetRange / validTableReloadRange) != Math.floor(loadOffset / validTableReloadRange) && doCheckOffset && tableReloadRange > 0) {
			loadOffset = Math.floor(targetRange / validTableReloadRange) * validTableReloadRange;
			doUpdateTableContent(lastSortBy, false);
			return;
		}
	}
	var hoverClassNameSearch = new RegExp(strHoverClassSwitch);
	var clickClassNameSearch = new RegExp(strClickClassSwitch);
	var nodes = $(tableContentId).childNodes;
	
	if (tableReloadRange > 0) {
		showPageNum -= loadOffset / tableRowsPerPage;
	}

	if (currentPage == strAll) {
		var startOffset = 0;
		var endOffset = nodes.length;
	}
	else {
		var startOffset = showPageNum * tableRowsPerPage;
		var endOffset = nodes.length < (showPageNum + 1) * tableRowsPerPage ? nodes.length : (showPageNum + 1) * tableRowsPerPage;
		if (tableReloadRange > 0) {
			startOffset++;
			if (endOffset < nodes.length) endOffset++;
		}
	}
	for (var c = startOffset; c < endOffset; c++) {
		var node = nodes[c];
		node.style.display = '';
		if (tableHoverClassName) {
			node.onmouseover = function() {
				if (!strHoverClassSwitch.length && !strClickClassSwitch.length) {
					if (!this.className) this.className = 'dummy';
					this.className += ' ' + tableHoverClassName;
					if (this.lang.length && !clickClassNameSearch.test(this.className)) {
						this.onmousedown = function() {
							window.location.href = this.lang;
						}
					}
				}
				else {
					for (var d = 0; d < this.childNodes.length; d++) {
						if (typeof this.childNodes[d] == 'object' && (!hoverClassNameSearch.test(this.childNodes[d].className) || !strHoverClassSwitch.length)) {
							if (!this.childNodes[d].className) this.childNodes[d].className = 'dummy';
							this.childNodes[d].className += ' ' + tableHoverClassName;
						}
						if (typeof this.childNodes[d] == 'object' && (!clickClassNameSearch.test(this.childNodes[d].className) || !strClickClassSwitch.length)) {
							if (this.childNodes[d].parentNode.lang.length) {
								this.childNodes[d].onmousedown = function() {
									window.location.href = this.parentNode.lang;
								}
							}
						}
					}
				}
			}
			node.onmouseout = function() {
				if (!strHoverClassSwitch.length && !strClickClassSwitch.length) {
					this.className = this.className.replace(new RegExp(' ' + tableHoverClassName + '\\b'), '');
				}
				else {
					for (var d = 0; d < this.childNodes.length; d++) {
						if (typeof this.childNodes[d] == 'object' && (!hoverClassNameSearch.test(this.childNodes[d].className) || !strHoverClassSwitch.length)) {
							this.childNodes[d].className = this.childNodes[d].className.replace(new RegExp(' ' + tableHoverClassName + '\\b'), '');
						}
						if (typeof this.childNodes[d] == 'object' && (!clickClassNameSearch.test(this.childNodes[d].className) || !strClickClassSwitch.length)) {
							if (this.childNodes[d].parentNode.lang.length) {
								this.childNodes[d].onmousedown = null;
							}
						}
					}
				}
			}
		}
	}
	if (currentPage != strAll && lastPageNum != null) {
		var startOffset = lastPageNum * tableRowsPerPage;
		var endOffset = nodes.length < (lastPageNum + 1) * tableRowsPerPage ? nodes.length : (lastPageNum + 1) * tableRowsPerPage;
		if (tableReloadRange > 0) {
			startOffset++;
			if (endOffset < nodes.length) endOffset++;
		}
		for (var c = startOffset; c < endOffset; c++) {
			var node = nodes[c];
			node.style.display = 'none';
			if (tableHoverClassName) {
				node.onmouseover = null;
				node.onmouseout = null;
			}
		}
	}
	lastPageNum = showPageNum;
	updateNumResults(true);
}

function clearTimeoutObj() {
	if (timeoutObj != null) {
		window.clearTimeout(timeoutObj);
		timeoutObj = null;
	}
}

function timedOutTableUpdate() {
	clearTimeoutObj();
	timeoutObj = window.setTimeout('updateTableContent(sortBy, false);', timeoutValue);
}

function delayedTableUpdate(timedOut) {
	timeoutValue = timedOut;
	timedOutTableUpdate();
}


