<!--
//
// StringUtils.js
//
// @author      Michael Skolik
// @version     2.4
// @date        November  06, 1999
// @modified    June      26, 2002
//
// @purpose:	Collection of String functions
//


//
// Trims leading and trailing spaces.
//
// Arguments:
//	str	- string
//

function trim(str)
{
  newStr = new String("");
  for (i=0; i < str.length; i++){
     if (str.charAt(i) != " ")	break;
  }
  if (i < str.length) {
    for (var j=str.length-1; j > 0  &&  str.charAt(j) == " "; j--){
       if (str.charAt(j) != " ")	break;
    }
    newStr += str.substring(i,j+1);
  }
  return newStr;
}



//
// Replaces oldString through newString in line.
//
// Arguments:
//	line		- original string
//	oldString	- string which has to be replaced
//	newString	- replacement string for oldString
//

function replace(line, oldString, newString)
{
  var is = 0;
  var ie = 0;
  var oLen = oldString.length;
  s = new String();

  while ((ie = line.indexOf(oldString, is)) >= 0) {
    // Replace the old string with the new string
    s += line.substring(is, ie);
    s += newString;
    is = ie + oLen;
  }
  s += line.substring(is,line.length);
  return s.toString();
}



//
// Extract a SubList from a Vector based on an ID-List
//
// Arguments:
//	vID	  - ID Vector
//	vItems    - Itmes Vector 
//	Delimiter - Delimiter (default = ",")

function ExtractList(vID, vItems)
{
  var argv      = ExtractList.arguments;
  var argc      = ExtractList.arguments.length;
  var Delimiter = (argc > 2) ? argv[2] : ",";
  var str = "";
  for (var i=0; i < vID.length; i ++) {
     str = AppendWord(str, vItems[vID[i]], i, Delimiter);
  } 
  return str;
}


//
// Concatinates all argument-list elements using Delimiter 
//
// Arguments:
//	Delimiter - Delimiter

function ConcatItems(Delimiter, FirstItem)
{
  var argv      = ConcatItems.arguments;
  var argc      = ConcatItems.arguments.length;
  var str	= FirstItem;
  for (var i=2; i < argc; i ++)	str += Delimiter + argv[i];
  return str;
}



//
// Append a word with a delimiter to a string
//
// Arguments:
//	line		- String where word has to be added.
//	word		- Word to add.
//	AddEmptyWord	- Flag indicating, if an empty word should be added.
//	Delimiter	- Delimiter (default = ",") 

function AppendWord(Line, Word, AddEmptyWord)
{
  var argv      = AppendWord.arguments;
  var argc      = AppendWord.arguments.length;
  var Delimiter	= (argc > 3) ? argv[3] : ",";
  if (Word.length > 0) {
    if (Line.length > 0)	Line += Delimiter;
    Line += Word;
  } else {
    if (AddEmptyWord)		Line += Delimiter;
  }
  return Line;
}


//
// Rounds a number and formats the string with digits decimals.
//
// Arguments:
//	number	- Number to format
//	digits	- number of digits
//

function FormatNumber(number, digits) {
  if (digits < 0)	return number;
  if (digits == 0)	return Math.floor(number*1+0.5);
  var d = Math.pow(10,digits);
  var f = Math.floor(number*d+0.5)/d;
  var s = new String(f);
  var l = s.length;
  var p = s.lastIndexOf(".");
  if (p < 0) {
    s += "."; p = l; l++;
  }

  for (var i = 1; i <= digits; i++) {
    if (p+i >= l)  s += "0";
  }
  return s;
}


//
// Formats a number with leading zeros.
//
// Arguments:
//	price	- Number to format
//	digits	- number of digits
//

function FormatNumber1(number, digits) {
  if (digits < 2)	return String(number);
  var s = new String(number);
  var n = digits - s.length;
  if (n < 0) n = 0;

  s = new String("");
  for (var i = 0; i < n; i++)  s += "0";
  s += String(number);

  return s;
}


//
// Formats a Timestamp value into a proper Date format.
//
// Arguments:
//	tStamp	- Timestamp variable
//	Format	- Date/Time Template (YYYY-MM-DD hh:mm:ss is default)
//

function FormatTimestamp(tStamp)
{
  var argv      = FormatTimestamp.arguments;
  var argc      = FormatTimestamp.arguments.length;
  var Template  = (argc > 1) ? argv[1] : "YYYY-MM-DD hh:mm:ss";
   
  var Year	= tStamp.substring(0, 4);
  var Month	= tStamp.substring(4, 6);
  var Day	= tStamp.substring(6, 8);
  var Hour	= tStamp.substring(8, 10);
  var Minute	= tStamp.substring(10, 12);
  var Second	= tStamp.substring(12, 14);

  var str	= Template;
  str = replace(str, "YYYY", Year);
  str = replace(str, "MM",   Month);
  str = replace(str, "DD",   Day);
  str = replace(str, "hh",   Hour);
  str = replace(str, "mm",   Minute);
  str = replace(str, "ss",   Second);
  
  return str;
}


// Extension of indexOf, but for multiple characters.
//
// Arguments:
//	str		- string to search
//	SearchChars	- Characters to search for 
//	iStart		- start position
//

function MultiIndexOf(str, SearchChars, iStart)
{
  var ie = 0;
  for (var i=0; i < SearchChars.length; i++) {
     if ((ie = str.indexOf(SearchChars.charAt(i), iStart)) >= 0)  break;
  }
  return ie;
}


//
// The following 2 functions parses a given text and converts a
// word starting with http:// into a hyperlink and a word containing
// a @ into a Mailto hyperlink.
//
// Arguments:
//	line	- text
//

function CreateHttpLink(line)
{
  var is = 0;
  var ie = 0;
  var ll = line.length;
  var str;
  var s = "";
  
  while((ie = line.indexOf("http://", is)) >= 0) {
    s += line.substring(is, ie);
    is = isNextValidChar(line, VALIDLINKCHARS, ie+7, 1, false);
    str = line.substring(ie, is);
    s += "<a target=\"_blank\" href=\"" + str + "\">" + str + "</a>";
  }
  s += line.substring(is, ll);
  return s;
}


function CreateMailLink(line)
{
  var is = 0;
  var ie = 0;
  var ia = 0;
  var ll = line.length;
  var str;
  var s = "";
  
  while((ia = line.indexOf("@", is)) >= 0) {
    ie = isNextValidChar(line, VALIDLINKCHARS, ia-1, -1, false) + 1;
    s += line.substring(is, ie);
    is = isNextValidChar(line, VALIDLINKCHARS, ia+1, 1, false)
    str = line.substring(ie, is);
    s += "<a href=\"mailto:" + str + "\">" + str + "</a>";
  }
  s += line.substring(is, ll);
  return s;
}



// Hide Credit Card Number starting at Digit n
//
function CCnumberHide(CCnumber, n) {
  var str = "";
  for (var i = 0; i < CCnumber.length; i++) {
    if (i < n) {
      str += CCnumber.charAt(i);
    } else {
      if (CCnumber.charAt(i) == " ")	str += " ";
      else				str += "x"
    }
  }
  return str;
}

// string.toUpperCase()
// string.toLowerCase()
// document.modified
