/*
'-------------------------------------------------------------------------
' libTool.js
'-------------------------------------------------------------------------
'
' Copyright     (C) 2001  ib-tool GmbH
'
' Titel         Div, Funktionen 
'
'-------------------------------------------------------------------------
'
'               Version:                Author:                 Date:
' Ident.        1A                      MB					12.08.2001
'               (created)				
'																							
'-------------------------------------------------------------------------
'
'   pushCall(field, call)   
'   pullCall(field)
'   setCaller(call)                           
'   getUrl(url)                             
'   getDir(url)                            
'   getFile(url)                           
'   getParams(url)                           
'   getParam(params, param)         not available! 
'   addParam(params, param, value) 
'   trim(str)                                 
'   stringToLeft(str, pos)                   
'   stringToRight(str, pos)                    
'   inStringFound(str, substr)                  
'   inStringCount(str, substr)                 
'   leftIndex(str, substr, pos)                
'   rightIndex(str, substr, pos)               
'   browserSystem()
'	checkWindows(str)
*/
// 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;
}

// Browser- und Systeminfo lesen
function browserSystem()
{
  var hr;       // URL der augenblicklichen Seite
  var appcode;  // Codename des Browsers
  var app;      // Programmname des Browsers
  var ver;      // Betriebssystem und Version des Browsers
  var usr;      // Programmheader in HTTP
  var wl;       // URL und Query String des serverseitigen Scripts 
                // das den Fehler weiterverarbeitet
  var qs;       // Query String der beim Aufruf dieser Seite benutzt wird

  qs=window.location.search;
  if (qs.indexOf('JsError=return')==-1)
  {
    appcode=navigator.appCodeName;
    app=navigator.appName;
    ver=navigator.appVersion;
    usr=navigator.userAgent;
    wl="&JsErrorAppcode="+escape(appcode);
    wl+="&JsErrorApp="+escape(app);
    wl+="&JsErrorVer="+escape(ver);
    wl+="&JsErrorUsr="+escape(usr);
  }
  return wl;
}

// Windowsversion prüfen
function checkWindows(str)
{
	var tmpStr;
	var xSystem
	// Windows XP Definition
	var WindowsXPDefinition = new String("Windows%20NT%205.1")
	tmpStr = trim(str);
	//alert(tmpStr);
	if (tmpStr.indexOf(WindowsXPDefinition) == -1) {
		xSystem = "winXX";
	}
	else {
		xSystem = "XP";
    }
	//alert(xSystem);
	return xSystem;
}

