/* REM ################################################ */
/* REM                                                  */
/* REM   LIBTOOLS.JS                                    */
/* REM                                                  */
/* REM   pushCall(field, call)                          */
/* REM   pullCall(field)                                */
/* REM   setCaller(call)                                */
/* REM   getUrl(url)                                    */
/* REM   getDir(url)                                    */
/* REM   getFile(url)                                   */
/* REM   getParams(url)                                 */
/* REM   getParam(params, param)         not available! */
/* REM   addParam(params, param, value)                 */
/* REM   trim(str)                                      */
/* REM   stringToLeft(str, pos)                         */
/* REM   stringToRight(str, pos)                        */
/* REM   inStringFound(str, substr)                     */
/* REM   inStringCount(str, substr)                     */
/* REM   leftIndex(str, substr, pos)                    */
/* REM   rightIndex(str, substr, pos)                   */
/* REM                                                  */
/* REM ################################################ */

// Neuen Aufrufer hizufuegen
function pushCall(field, call)
{
	//alert("push 1: (" + field.value + ")");
	field.value += (" " + call)
	//alert("push 2: (" + field.value + ")");
}

// Letzten Aufrufer holen
function pullCall(field)
{
	var pos
	var call
	
	alert("pull 1: (" + field.value + ")");
	pos = rightIndex(field.value, " ", -1)
	if (pos >= 0) {
		call = stringToRight(field.value, pos)
		field.value = stringToLeft(field.value, pos)
	}
	else {
		call = ''
	}
	alert("pull 2: (" + field.value + ")");
	alert("pull 3: (" + call + ")");
	if (trim(call) == '') {
		call = 'main.asp'
	}
	call = trim(call)
	alert("pull 4: (" + call + ")");
	call = addParam(call, 'Now', Math.random())
	alert("pull 5: (" + call + ")")
	return call
}

// Aufrufer setzen
function setCaller(call)
{
	var caller

	caller = call
	//alert("1: " + caller)
	if (caller == '' ) {
		caller = 'Main.asp'
	}
	else {
		caller = addParam(caller, 'Now', Math.random())
	}
	//alert("2: " + caller)
	return caller
}

// Pfad (URL ohne Parameter) eines URLs
function getUrl(url)
{
	var name
	var pos
	
	name = url
	//alert("1: " + name);
	pos = rightIndex(name, "?", -1)
	//alert("2: " + pos);
	if (pos >= 0) {
		name = stringToLeft(name, pos)
	}
	//alert("3: " + name);
	return name;
}

// Verzeichnis eines URLs
function getDir(url)
{
	var name
	var pos
	
	name = url
	//alert("1: " + name);
	pos = rightIndex(name, "/", -1) 
	name = stringToLeft(name, pos)
	//alert("2: " + name);
	pos = rightIndex(name, "/", -1) 
	//alert("3: " + pos);
	if (pos >= 0) {
		name = stringToRight(name, pos)
	}
	//alert("4: " + name);
	return name;
}

// Datei eines URLs
function getFile(url)
{
	var name
	var pos
	
	name = url
	//alert("1: " + name);
	pos = rightIndex(name, "/", -1) 
	name = stringToRight(name, pos)
	//alert("2: " + name);
	pos = leftIndex(name, "?", 0)
	//alert("3: " + pos);
	if (pos >= 0) {
		name = stringToLeft(name, pos)
	}
	//alert("4: " + name);
	return name;
}

// Alle Parameter eines URLs
function getParams(url)
{
	var name
	var pos
	
	name = url
	//alert("1: " + name);
	pos = rightIndex(name, "?", -1)
	//alert("2: " + pos);
	if (pos >= 0) {
		name = stringToRight(name, pos)
	}
	else {
		name = ""
	}
	//alert("3: " + name);
	return name;
}

// Neuer Parameter Hinzufuegen/aendern
function addParam(params, param, value)
{
	var name
	var pos
	
	name = params
	//alert("1: " + name);
	pos = leftIndex(name, param + "=", 0)
	//alert("2: " + pos);
	if (pos == -1) {
		if (leftIndex(name, "?", 0) == -1) {
			name = name + '?'
		}
		else {
			name = name + '&'
		}
		name = name + param + '=' + value
	}
	else {
		// change param
	}
	//alert("3: " + name);
	return name
}

// Leerstellen eines Strings (links und rechts) entfernen
function trim(str)
{
	var i, beg, end, result
	
	beg = -1
	for (i = 0; i < str.length; i++) {
		if (str.charCodeAt(i) != 0x20) {
			beg = i
			break
		}
	}
	end = -1
	for (i = str.length - 1; i >= 0; i--) {
		if (str.charCodeAt(i) != 0x20) {
			end = i
			break
		}
	}
	//alert('beg=' + beg + ', end=' + end);
	if (end >= beg)
		result = str.substring(beg,end+1)
	else
		result = ""
	//alert("<" + result + "> " + result.length)
	return result
}

// Substring eines Strings, left von der ang. Position
function stringToLeft(str, pos)
{
	return (pos >= 1 && pos < str.length) ? str.substring(0,pos) : ""
			
}

// Substring eines Strings, rechts von der ang. Position
function stringToRight(str, pos)
{
	return (pos >= 0 && pos < str.length-1) ? str.substring(pos+1,str.length) : ""
}

// Einen Text in einem String suchen
// Returnwert = true/false
function inStringFound(str, substr)
{
	return (leftIndex(str, substr, 0) >= 0) ? true : false
}

// Einen Text in einem String suchen
// Returnwert = die Position des Textes
function inStringCount(str, substr)
{
	var strlen, sublen, i, j

	strlen = str.length
	sublen = substr.length
	// alert(sublen + " " + strlen)
	j = 0	
	if (sublen > 0 && ((sublen) <= strlen)) {
		for (i = 0; i <= (strlen - sublen); i++) {
			// alert("string <" + str.substring(i,i+sublen) + ">")
			if (str.substring(i,i+sublen) == substr) {
				// alert("ok")
			   if (j==0)	j=i;
			}
		}
	}
	return j
}

// Die Position eines Texts, links von der ang. Startposition, in einem String
// Returnwert >= 0 OK, -1 nocht gefunden
function leftIndex(str, substr, pos)
{
	var strlen, sublen, i
	
	strlen = str.length
	sublen = substr.length
	//alert (pos + " " + sublen + " " + strlen)
	if (pos >= 0 && sublen > 0 && ((pos + sublen) <= strlen)) {
		for (i = pos; i <= (strlen - sublen); i++) {
			//alert("string <" + str.substring(i,i+sublen) + ">")
			if (str.substring(i,i+sublen) == substr) {
				//alert("ok")
				return i
			}
		}
	}
	return -1
}

// Die Position eines Texts, rechts von der ang. Startposition, in einem String
// Returnwert >= 0 OK, -1 nocht gefunden
function rightIndex(str, substr, pos)
{
	var strlen, sublen, i
	
	strlen = str.length
	sublen = substr.length
	if (pos == -1) pos = strlen - sublen
	//alert (pos + " " + sublen + " " + strlen)
	if (pos >= 0 && sublen > 0 && ((pos + sublen) <= strlen)) {
		for (i = pos; i >= 0; i--) {
			//alert("string <" + str.substring(i,i+sublen) + ">")
			if (str.substring(i,i+sublen) == substr) {
				//alert("ok")
				return i
			}
		}
	}
	return -1
}

// Entfernt substr
// Return resStr
function removeString(str, substr)
{
   var crIndex;
   do
   {
          crIndex = inStringCount(str,substr);
          if (crIndex>0)
          {
              str=stringToLeft(str,crIndex) + stringToRight(str,crIndex);
          }
    } while (crIndex > 0)
   return str;
}
