Array.prototype.remove = function(s) {
	for (var i = 0;i < this.length;i++) {
		if (s == this[i]) this.splice(i, 1);
	}
}

Array.prototype.exists = function(s) {
	var exists = false;
	for (var i = 0;i < this.length;i++) {
		if (s == this[i]) exists = true;
	}
	return exists;
}

var orderByItems = Array();

function new_window (file) {
	win = window.open(file,"NewWindow","width=600,height=500,scrollbars=yes,resizable=no");
}

function ask(id) {
	return confirm(getTranslation(id));
}

function askDelete (text) {
	return confirm("Soll " + text + " wirklich gelöscht werden?");
}

/**
 * Adds an order column to the order request
 * New since [jug, 21.09.2006]
 */
function addOrder(sourceElement) {
	var thElement = sourceElement;
	while (thElement.nodeName != "TH") {
		thElement = thElement.parentNode;
	}
	
	var field = thElement.id;

	// parse image-src
	var image = sourceElement;
	var res = image.src.match(/^(.*)\/(sort-)(asc|desc)-?(selected|)\.(png|gif)/i);
	var dir = res[3];

	// check if the orderby field is selected
	if (res[4] == 'selected') {
		// unselect this field
		// and remove it from the order-by-string
		image.src = res[1] + "/" + res[2] + res[3] + "." + res[5];
		addOrderByItem(field, "");
	}
	else {
		// select the current field
		// unselect the other (asc|desc) image
		image.src = res[1] + "/" + res[2] + res[3] + "-selected." + res[5];
		var inverse = 'asc';
		if (res[3] == 'asc') {
			inverse = 'desc';
		}
		var inversesort = 'sort-'+inverse;
		var parentNode = image.parentNode;
		parentNode.getElementsByTagName('img')[inversesort].setAttribute('src', res[1] + "/" + res[2] + inverse + "." + res[5]);
		addOrderByItem(field, dir);
	}
}

/**
 * Adds an item to the above defined oderByItems-Array, which holds all the
 * items (field) including their sort-direction. the position is the position
 * used for the SQL-oderby clause.
 * 
 * Format: <field1>|<dir1>,<field2>|<dir2>,...
 */
function addOrderByItem (field, dir) {
	var inverseOrder = new Array();
	inverseOrder['asc'] = 'desc';
	inverseOrder['desc'] = 'asc';
	var found = false;
	for (var nr = 0;nr < orderByItems.length;nr++) {
		itemChunks = orderByItems[nr].split("|");
		if (itemChunks[0] == field) {
			// found field
			if (dir == "") {
				// dir is empty, so set this element to idle
				orderByItems[nr] = field + "|-";
			} 
			else {
				if (itemChunks[1] == "-") {
					itemChunks[1] = inverseOrder[dir];
				}
				orderByItems[nr] = field + "|" + inverseOrder[itemChunks[1]];
			}
			found = true;
		}
	}
	
	if (!found) {
		orderByItems.push(field + "|" + dir);
	}
}


/**
 * Finalizes an order request
 * New since [jug, 21.09.2006]
 */
function finalizeOrder (sourceElement) {
	var chunks = document.location.pathname.match(/([a-z0-9\/]*\.php)/i);
	var baseUrl = chunks[1] + "?orderby=";
	
	var thElement = sourceElement;
	var image = sourceElement;
	while (thElement.nodeName != "TH") {
		thElement = thElement.parentNode;
	}
	
	var field = thElement.id;
	
	addOrder(sourceElement);
	
	var string = "";
	for (var j = 0;j < orderByItems.length;j++) {
		chunks = orderByItems[j].split("|");
		if (chunks[1] != '-') {
			// only use non-empty = not a - fields
			string += ((string == "") ? "" : ",") + orderByItems[j];
		}
	}
	
	// reload page with orderby=... as get parameter
	window.location.href = baseUrl + string;
}

/**
 * selects the orders for the selected columns
 * New since [jug, 21.09.2006]
 */
function selectOrder (selectedColumns) {
	var bereich = document.getElementById("results");
	var ths = bereich.getElementsByTagName("th");
	
	var columns = selectedColumns.split(",");
	
	for (var h = 0;h < ths.length;h++) {
		for (var c = 0;c < columns.length;c++) {
			var chunks = columns[c].split("|");
			if (ths[h].id == chunks[0]) {
				markColumnOrder(ths[h], chunks[1], c+1);
			}
		}
	}
}

/**
 * New since [jug, 21.09.2006]
 */
function markColumnOrder (parentElement, dir, position) {
	if (dir) {
		var image = parentElement.getElementsByTagName("img")["sort-" + dir];
		var res = image.src.match(/^(.*)\/(sort-)(asc|desc)-?(selected|)\.(png|gif)/i);
		image.src = res[1] + "/" + res[2] + res[3] + "-selected." + res[5];
	}
}

function getTranslation (identifier, pageId) {
	if (pageId == undefined) pageId = "";
	var call = "ajaxGetTranslation="+identifier+"&pageid="+pageId;
	return unescape(ajaxCall(call));
}

function ajaxCall(call) {
	var chunks = document.location.pathname.match(/([a-z0-9\/]*\/scripts\/)/i);
	var baseUrl = chunks[1] + "ajax.php?";
	var callUrl = baseUrl + call;
	res = decodeURI(HTML_AJAX.grab(callUrl));
	return res;
}


function popup (key) {
	var chunks = document.location.pathname.match(/([a-z0-9\/]*\/scripts\/)/i);
	var baseUrl = chunks[1] + "popup.php?key="+key;
	win = window.open(baseUrl, "popup", "width=600, height=500, scrollbars=yes, resizable=no");
}



function selectAllItems (selectElement) {
	for (var o = 0;o < selectElement.options.length;o++) {
		selectElement.options[o].selected = true;
	}
}


function setHover (row) {
	if (row.className == 'rowhover') {
		row.className = row.id;
	} else {
		row.id = row.className;
		row.className = 'rowhover';
	}
}

function setClickHover (row) {
	if (row.className == 'rowclickhover') {
		row.className = row.id;
	} else {
		row.id = row.className;
		row.className = 'rowclickhover';
	}
}
