/**
 * func.main.js
 *
 * Enthält JS-Funktionen, die immer mal wieder gebraucht werden.
 *
 * @author		Michael Becker	(becker@digitalzone.de)
 * @since		07.11.2007
 * @version		$Id: func.main.js 5779 2008-06-26 14:43:04Z anja.stiede $
 * @copyright	2007 digitalzone.de
 */

/**
 * Öffnet ein Popup-Fenster.
 *
 * @param	string	url		die URL, die im Popup angezeigt werden soll
 * @param	string	winName	ein eindeutiger Fenstername
 * @param	int		width	die Breite des Fensters
 * @param	int		height	die Höhe des Fensters
 */
function openPopup(url,winName,width,height) {
	if (height > screen.availHeight) {
		var scrollbars	= 'yes';
		var top			= 0;
	} else {
		var scrollbars	= 'no';
		var top			= (screen.availHeight - height) / 2;	
	}
	var left	= (screen.availWidth - width) / 2;
	
	var winParams = "left="+left+",top="+top+",width="+width+",height="+height+",status=0,menubar=0,scrollbars="+scrollbars+",resizable=no";
	var theWindow = window.open(url,winName,winParams);

	if (theWindow) {
		theWindow.focus();
	}
}

/**
 * Öffnet ein Popup-Fenster mit einer Standardgröße.
 * 
 * @param	string	url		die URL, die im Popup angezeigt werden soll
 * @param	string	winName	der Fenstername
 *
 * @return	bool	false wenn das Fenster geöffnet wurde
 					true ansonsten
 */
function openResizingPopup(url, winName) {
	var winParams = "status=0,menubar=0,scrollbars=no,resizable=no";
	var theWindow = window.open(url,winName,winParams);

	if (theWindow) {
		theWindow.focus();
		return false;
	} else {
		return true;
	}
}

// Funktion zur Schnittmengenberechnung zweier Arrays
function intersect(array1, array2) {
	var array1copy = clone(array1);
	var array2copy = clone(array2);

	var intersection = Array();

	array1copy.sort();
	array2copy.sort();

	while (array1copy.length>0 && array2copy.length>0) {
		var val1 = customPop(array1copy);
		var val2 = customPop(array2copy);

		if (val1 == val2) {
			intersection = customUnshift(intersection, val1);
		} else {
			if (val1 == customPop(Array(val1,val2).sort())) {
				customPush(array2copy,val2);
			} else {
				customPush(array1copy,val1);
			}
		}
	}
	return intersection;
}

// Funktion zum Clonen eines Arrays (Umgehung der Referenzierung)
function clone(arr) {
	var arr_clone = Array();
	for (var key in arr) {
		arr_clone[key] = arr[key];
	}
	return arr_clone;
}

// Custom-Funktionen push, pop, shift, unshift, die in IE <5.0 nicht implementiert sind
function customPush(arr, val) {
	arr[arr.length] = val;
}
function customPop(arr) {
	if (arr.length <= 0) return false;

	var val = arr[arr.length-1];
	arr.length --;
	return val;
}

function customUnshift(arr, val){
	return Array(val).concat(arr);
}

function  replaceSpecialChars(string, index){
	var anArray = new Array(2);
	anArray[0] = new Array("&Ouml;", "&ouml;", "&Auml;", "&auml;", "&Uuml;", "&uuml;", "&szlig;", "&quot;", "&amp;", "&nbsp;", "&acute;");;
	anArray[1] = new Array("Ö", "ö", "Ä", "ä", "Ü", "ü", "ß", "\"", "&", "", "\'");    
	for (var i=0; i<anArray[index].length; i++) {
		myRegExp = new RegExp(anArray[index][i],"g");
		string = string.replace(myRegExp, anArray[(index==0?1:0)][i]);
	}
	return string;
}

// Funktionsäquivalent zu PHP
function implode(arr, sep) {
	var str="EMPTY";
	var first = true;
	for (var key in arr) {
		if (first) {str = arr[key]; first = false;}
		else str += sep + arr[key];
	}
	return str;
}

// Funktion zur Feststellung, ob ein Wert val in einem Array arr enthalten ist
function isElementOf(arr, val) {
	for (var key in arr) {
		if (val == arr[key]) {
			return true;
		}
	}
	return false;
}

/**
 * Weist einer Liste von Elementen eines Formulars Werte zu und
 * submittet anschließend dieses Formular
 *
 * @param	Argumentenvektor beliebiger ungerader Länge:
 *			erstes Element ist die Formular-ID
 *			(2*k)tes Element ist die ID des k-ten Elements
 *			(2*k+1)tes Element ist der Wert, der dem k-ten Element zugewiesen werden soll
 */
function set_and_submit() {

	var argv = set_and_submit.arguments;
	
	// Check: ungerade Parameteranzahl, wenigstens 3 Parameter
	if ((argv.length < 3) || (argv.length % 2 == 0)) {
		return false;
	}

	// Parameter auslesen und Formular anpassen
	form = argv[0];
	for ( i = 1; i < argv.length; i += 2) {
		element = argv[i];
		value = argv[i+1];
		document.forms[form].elements[element].value = value;
	}

	// Formular abschicken
 	document.forms[form].submit();
}

/*
 * Erweitert das String-Objekt und entfernt Leerzeichen (oder andere Zeichen) vom Anfang eines Strings.
 *
 * @param	string	clist	eine Liste von Zeichen, die am Anfang des Strings gelöscht werden sollen
 *
 * @return	string	der gekürzte String
 */
String.prototype.ltrim = function (clist) {
	if (clist) {
		return this.replace (new RegExp ('^[' + clist + ']+'), '');
	} else {
		return this.replace (/^\s+/, '');
	}
}

/*
 * Erweitert das String-Objekt und entfernt Leerzeichen (oder andere Zeichen) vom Ende eines Strings.
 *
 * @param	string	clist	eine Liste von Zeichen, die am Ende des Strings gelöscht werden sollen
 *
 * @return	string	der gekürzte String
 */
String.prototype.rtrim = function (clist) {
	if (clist) {
		return this.replace (new RegExp ('[' + clist + ']+$'), '');
	} else {
		return this.replace (/\s+$/, '');
	}
}

/**
 * Erweitert das String-Objekt und entfernt Leerzeichen (oder andere Zeichen) vom Anfang und Ende eines Strings.
 *
 * @param	string	clist	eine Liste von Zeichen, die gelöscht werden sollen
 *
 * @return	string	der gekürzte String
 */
String.prototype.trim = function (clist) {
	if (clist) {
		return this.ltrim (clist).rtrim (clist);
	} else {
		return this.ltrim ().rtrim ();
	}
};

function move_layer(obj_id,curr,dist,axis,container) {

	var sign = 1;
	var sign_str = "";
	if (dist<0) {
		curr = -curr;
		dist = -dist;
		sign=-1;
		sign_str = "-";
	}
	var speed = parseInt(Math.sqrt(curr * (dist - curr))/2 + .5);
	if (speed==0) {speed=1;}
	if (speed > dist-curr) {speed = dist-curr;}
	curr = curr + speed;

	var myobj = document.getElementById(obj_id);
	if (axis == "vertical") {
		myobj.style.top = parseInt(myobj.style.top.split("px")[0]) + (speed * sign) + "px";
	} else {
		myobj.style.left = parseInt(myobj.style.left.split("px")[0]) + (speed * sign) + "px";
	}

	if (container != "") {
		var containerobj = document.getElementById(container);
		if (axis == "vertical") {
			containerobj.style.height = parseInt(containerobj.style.height.split("px")[0]) + (speed * sign) + "px";
		} else {
			containerobj.style.width = parseInt(containerobj.style.width.split("px")[0]) + (speed * sign) + "px";
		}
	}

	if (dist>curr) {
		setTimeout("move_layer('" + obj_id + "', " + sign_str + curr + ", " + sign_str + dist + ", '" + axis + "', '" + container + "')",50);
	}
	
}
