//String.prototype.trim = function() { return (this.replace(/^[\s\xA0]+/, "").replace(/[\s\xA0]+$/, "")) }
//String.prototype.startsWith = function(str) { return (this.match("^"+str)==str) }
//String.prototype.endsWith = function(str) { return (this.match(str+"$")==str) }

function trim (zeichenkette)
{
	return zeichenkette.replace(/^[\s\xA0]+/, "").replace(/[\s\xA0]+$/, "");
}

function endsWith (zeichenkette, ende)
{
	return (zeichenkette.match(ende+"$") == ende);
}

function ShowTableRows(rowClass)
{
	var rows = document.getElementsByTagName("tr");
	for (var i = 0; i < rows.length; i++)
	{
		var splitted = rows[i].className.split(" ");
		for (var j = 0; j < splitted.length; j++)
		{
			if (splitted[j] == rowClass)
			{
				rows[i].style.display = '';
			}
		}
	}
}

function HideTableRows(rowClass)
{
	var rows = document.getElementsByTagName("tr");
	for (var i = 0; i < rows.length; i++)
	{
		var splitted = rows[i].className.split(" ");
		for (var j = 0; j < splitted.length; j++)
		{
			if (splitted[j] == rowClass)
			{
				rows[i].style.display = 'none';
			}
		}
	}
}

function myShowTableRows(mytableId, rowClass)
{
	$(mytableId).select('.' + rowClass).invoke('show');
}

function myHideTableRows(mytableId, rowClass)
{
	$(mytableId).select('.' + rowClass).invoke('hide');
}

function addClass (tagId, classToAdd)
{
	//alert("alte class: " + document.getElementById(tagId).className);

	var curClass = document.getElementById(tagId).className;
	var splitted = curClass.split(" ");
	for (var i = 0; i < splitted.length; i++)
	{
		if (splitted[i] == classToAdd)
		{
			// schon drin
			//alert("bereits vorhanden");
			return;
		}
	}
	splitted.push(classToAdd);
	document.getElementById(tagId).className = splitted.join(" ");

	//alert("neue class: " + document.getElementById(tagId).className);
}

function rmClass (tagId, classToRm)
{
	//alert("alte class: " + document.getElementById(tagId).className);

	var curClass = document.getElementById(tagId).className;
	var splitted = curClass.split(" ");
	var newClass = new Array();
	for (var i = 0; i < splitted.length; i++)
	{
		if (splitted[i] != classToRm)
		{
			newClass.push(splitted[i]);
			//alert("added: " + splitted[i]);
		}
	}
	document.getElementById(tagId).className = newClass.join(" ");

	//alert("neue class: " + document.getElementById(tagId).className);
}


//
// return true, if now visible, else false
function toggleVisibility (tagId)
{
	var tag = document.getElementById(tagId);
	var curVis = tag.style.visibility;
	if (curVis == undefined || curVis == 'hidden' || curVis == 'collapse')
	{
		tag.style.visibility = 'visible';
		return true;
	}
	else
	{
		//tag.style.visibility = 'hidden';
		tag.style.visibility = 'collapse';
		return false;
	}
}

function toggleDisplay(tagId)
{
	var tag = document.getElementById(tagId);
	var curVis = tag.style.display;
	if (curVis == undefined || curVis == 'none')
	{
//		$(tagId).setStyle({display: 'inherit'});
		tag.style.display = 'inherit';
		return true;
	}
	else
	{
//		$(tagId).setStyle({display: 'none'});
		tag.style.display = 'none';
		return false;
	}
}

function SetText (tagId, newText)
{
	var actualNewText = newText;
	// replace all mit /Zeichenfolge/g
	document.getElementById(tagId).innerHTML = actualNewText.replace(/__LF__/g, "\r\n");
}

function popup(link)
{
	var popupName = null;
	var name = (arguments[1] ? arguments[1] : null);
	
	if (arguments[1])
	{
		popupName = arguments[1];
	}
	else if (link.id)
	{
		popupName = link.id;
	}
	
	var w = 600;
	var h = 400;
	
	if (arguments[2])
	{
		w = arguments[2];
	}
	if (arguments[3])
	{
		h = arguments[3];
	}
	
	var placementx=(window.screen.availWidth/2)-((w)/2);  
	var placementy=(window.screen.availHeight/2)-((h)/2);
//	var placementx=(window.screen.width/2)-((w)/2);  
//	var placementy=(window.screen.height/2)-((h)/2);
	
	var myHref = link.href;
	if (myHref.match('\\?'))
	{
		myHref += '&popup=1';
	}
	else
	{
		myHref += '?popup=1';
	}
	
	fenster=window.open(myHref, popupName, "width="+w+",height="+h+",status=yes,scrollbars=yes,resizable=yes,"
			+ "left="+placementx+",top="+placementy+",screenX="+placementx+",screenY="+placementy+","
		);
	if (fenster)
	{
		fenster.focus();
		return false;
	}
	return true;
}

function popupFull(link)
{	
	return popup(link, arguments[1], screen.availWidth, screen.availHeight);
}

RegExp.escape = (function()
{
	var specials = [
		'/', '.', '*', '+', '?', '|',
		'(', ')', '[', ']', '{', '}', '\\'
	];
	
	sRE = new RegExp('(\\' + specials.join('|\\') + ')', 'g');
	
	return function(text) { return text.replace(sRE, '\\$1'); };
})();

function replaceHrefParameter(href, name, newValue)
{
//	name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
	// Parameter beginnt mit ? oder &
	// href ist decoded, encode erstellt korrekten Namen innerhalb des href
	// RegExp.escape maskiert RegExp-Sonderzeichen
	var regexS = "([\\?&]"+ RegExp.escape(encodeURIComponent(name)) +"=)([^&#]*)";
	var regex = new RegExp( regexS );
	var results = regex.exec( href );
	
	if( results == null )
	{
		// Parameter bisher nicht im href
		// der hier soll eingefuegt werden
		var combi = encodeURIComponent(name) + '=' + encodeURIComponent(newValue);
		var posQM = href.indexOf('?');
		var append = (posQM > -1 ? '&' : '?') + combi;
		var posAnchor = href.indexOf('#');
		if (posAnchor > -1)
		{
			// bis anchor, neuer param, anchor
			return href.substr(0,posAnchor) + combi + href.substr(posAnchor);
		}
		return href + append;
	}

	// ersetzen
	return href.substr(0,results.index) + results[1] // bis zum zu ersetzenden Value
		+ encodeURIComponent(newValue) // neuer Value
		+ href.substr(results.index + results[0].length) // nach dem alten Value
	;
}

function newWindowLocationParam(paramName, paramValue)
{
	window.location.href = replaceHrefParameter(window.location.href, paramName, paramValue);
}

/*** COOKIES ***/

function set_cookie ( name, value )
{
	var cookie_string = name + "=" + escape ( value );
	document.cookie = cookie_string;
}

function get_cookie ( cookie_name )
{
	if (document.cookie)
	{
		var results = document.cookie.match ( '(^|;) ?' + cookie_name + '=([^;]*)(;|$)' );
		if ( results )
		{
			return ( unescape ( results[2] ) );
		}
	}
	
	return null;
}

function delete_cookie ( cookie_name )
{
	var cookie_date = new Date ( );  // current date & time
	cookie_date.setTime ( cookie_date.getTime() - 1 );
	document.cookie = cookie_name += "=; expires=" + cookie_date.toGMTString();
}

/**
 * Handelt OnClick auf ZeilenFormular Delete Zeile
 * @param myCheckbox
 * @return
 */
function dzon(myCheckbox)
{
	if (myCheckbox.checked)
	{
		//myCheckbox.up('tr').setStyle({backgroundColor: 'red'});
		myCheckbox.up('tr').addClassName('del');
	}
	else
	{
		//myCheckbox.up('tr').setStyle({backgroundColor: 'white'});
		myCheckbox.up('tr').removeClassName('del');
	}
}

function sdon(myLink)
{
	var parent = myLink.up('tr');
	var myNext = parent.next('tr');
	if (myNext && myNext.hasClassName('zeile_details'))
	{
		myNext.toggle();
//		myNext = myNext.next('tr');
//		if (myNext && myNext.hasClassName('zeile_details'))
//		{
//			myNext.toggle();
//		}
	}
}

function sdeon(myLink)
{
	var parent = myLink.up('tr');
	var myNext = parent.next('tr');
	if (myNext)
	{
		myNext = myNext.next('tr');
		if (myNext && myNext.hasClassName('zeile_details_erweitert'))
		{
			myNext.toggle();
		}
//		else
//		{
//			myNext = myNext.next('tr');
//			if (myNext && myNext.hasClassName('zeile_details_erweitert'))
//			{
//				myNext.toggle();
//			}
//		}
	}
}

function toggleNextRowOnChild(tagClicked)
{
	var row = tagClicked.up('tr');
	var tag = row.next('tr');
	tag.toggle();
	var pfeil = row.down('.pfeil');
	if (pfeil)
	{
		if (tag.visible())
		{
			pfeil.update(String.fromCharCode(9660));
		}
		else
		{
			pfeil.update(String.fromCharCode(9658));
		}
	}
}

