/*<SCRIPT LANGUAGE=JavaScript>*/

function cstr(s, sDef)
{
  return s == null ? (sDef == null ? "" : sDef) : s;
}

function cnum(n, nDef)
{
  return n == null ? (nDef == null ? 0 : nDef) : n;
}

function cbool(b, bDef)
{
  return b == null ? (bDef == null ? false : bDef) : b;
}

function prevSib(o)
{
  var c = o.parentElement.children;
  for (var n = 1; n < c.length; n++)
    if (c[n] == o)
      break;
  if (n < c.length)
    return c[n - 1];
  else
    return null;
}

function nextSib(o)
{
  var c = o.parentElement.children;
  for (var n = 0; n < (c.length - 1); n++)
    if (c[n] == o)
      break;
  if (n < (c.length - 1))
    return c[n + 1];
  else
    return null;
}

function lineBreak()
{
	return navigator.cpuClass == "x86" ? "\r\n" : "\r";
}

function checkMoney(sMoney)
{
	var inx = 0;
	while (inx < sMoney.length && sMoney.charAt(inx) == " ")
		inx++;
	while (inx < sMoney.length && isNumeric(sMoney.charAt(inx)))
		inx++;
	if (inx >= sMoney.length || sMoney.charAt(inx++) != ".")
	  return false;
	if (inx >= sMoney.length || !isNumeric(sMoney.charAt(inx++)))
		return false;
	if (inx >= sMoney.length || !isNumeric(sMoney.charAt(inx++)))
		return false;
	while (inx < sMoney.length && sMoney.charAt(inx) == " ")
		inx++;
  return inx == sMoney.length;
}

function genSelOpts(s, nRep)
{
	var n = 0, sel, v, t, nB, nC, x;
	nB = s.indexOfDlm("!");
	nC = s.indexOfDlm(",");
	while (n < s.length)
	{
	  for (x = 0; x < nRep; x++)
		{
			v = "";
			sel = s.charAt(n) == "*";
			if (sel) n++;
			while (nB < nC)
			{
				v = v + s.substr(n, nB - n) + s.charAt(nB + 1);
				n = nB + 2;
				nB = s.indexOfDlm("!", n);
	      nC = s.indexOfDlm(",", n);
			}
			v = v + s.substr(n, nC - n);
			n = nC + 1;
			nC = s.indexOfDlm(",", n);
			if (x == 0) t = v;
		}
		document.write("<OPTION VALUE=\"");
		document.write(v);
		if (sel)
		  document.write("\" SELECTED>");
		else
		  document.write("\">");
		document.write(t);
	}
}

function moveSelOpt(bUp, sSelect)
{
	var select = eval("document.all." + sSelect);
	var inx = select.selectedIndex;
	var newinx = bUp ? inx - 1 : inx + 1;
	if ((inx >= 0) && (newinx >= 0) && (newinx < select.length))
	{
		var old = select.options[inx];
		var e = document.createElement("OPTION");
		e.text = old.text;
		e.value = old.value;
		select.options.remove(inx);
		select.add(e, newinx);
		select.selectedIndex = newinx;
	}
}

function removeSelOpt(sSelect)
{
	var select = eval("document.all." + sSelect);
	var inx = select.selectedIndex;
	if (inx >= 0)
		select.options.remove(inx);
}

function hilite(o)
{
	o.focus();
	if (o.select != null)
	  o.select();
}

function isNumeric(sChar)
{
	return sChar.length > 0 && sChar.charAt(0) >= "0" && sChar.charAt(0) <= "9";
}

function Array_push()
{
  var n;
  
  for (n = 0; n < arguments.length; n++)
    this[this.length] = arguments[n];
    
  return arguments[n];
}

function Array_splice(start, deleteCount)
{
  var n, shift, args;
  var ret = new Array();
  
  if (start == null)
    start = 0;
  else if (start > this.length)
    start = this.length;
  else if (start < 0)
    start = 0;
    
  if (deleteCount == null || deleteCount > this.length - start)
    deleteCount = this.length - start;
  else if (deleteCount < 0)
    deleteCount = 0;
    
  args = arguments.length - 2;
  if (args < 0)
    args = 0;
    
  shift = args - deleteCount; 
  
  // get deleted elements
  for (n = 0; n < deleteCount; n++)
    ret.push(this[start + n]);
    
  //shift as necessary
  if (shift > 0) // lengthen
    for (n = this.length - 1; n >= start + deleteCount; n--)
      this[n + shift] = this[n];
  else if (shift < 0) // shorten
  {
    for (n = start + args; n < this.length; n++)
      this[n + shift] = this[n];
    this.length = this.length + shift;
  }
  
  // copy in new values
  
  for (n = 0; n < args; n++)
    this[n + start] = arguments[n + 2];
    
  return ret;
}

function Array_unshift()
{
  var n;
  
  for (n = this.length - 1; n >= 0; n--)
    this[n + arguments.length] = this[n];
  
  for (n = 0; n < arguments.length; n++)
    this[n] = arguments[n];
    
  return this.length;
}

function String_indexOfDlm(sSubstr, nStart)
{
	var n = this.indexOf(sSubstr, cnum(nStart));
	if (n < 0) n = this.length;
	return n;
}

function String_trim()
{
	var n = this.length;
	var x = 0;
	while (n > 0 && this.charAt(n - 1) == " ")
		n--;
	while (n > x && this.charAt(x) == " ")	
		x++;
	return this.substr(x, n - x);
}

function Util__Init()
{
	Array.prototype.push = Array_push;
	Array.prototype.splice = Array_splice;
	Array.prototype.unshift = Array_unshift;
	String.prototype.indexOfDlm = String_indexOfDlm;
	String.prototype.trim = String_trim;
}

Util__Init();
