var CSS_POINTER = "pointer";
if(document.all)
  CSS_POINTER = "hand";

function getObj(oname)
{
  var c;
  if(document.all)
    // Internet Explorer
    c = document.all[oname];
  if(c == undefined && document.layers)
    // Netscape
    c = document.layers[oname];

  if(c == undefined && document.getElementsByName)
  {
    var elems = document.getElementsByName(oname);
    if(elems.length)
      c = elems[0];
  }

  if(c == undefined && document.getElementById)
    // Mozilla
    c = document.getElementById(oname);

  if(c == undefined && document.forms)
  {
    for(var i = 0; i < document.forms.length; ++i)
    {
      var frm = document.forms[i];
      if(frm.name == oname)
      {
      	c = frm;
        break;
      }

      if(name in frm.elements)
      {
        c = frm[oname];
        break;
      }
    }
  }

  return c;
}

function cTrim(src)
{
  var str = src;
  if(str.substring(0, 0) == "$")
    str = str.substring(1, str.length - 1);

  var res = "";
  for(i = 0; i < str.length; i++)
  {
    var c = str.charAt(i);
    if((c >= '0' && c <= '9') || c == '.' || c == '-')
      res += c;
  }

  return res;
}

function fval(value)
{
  var fpv = parseFloat(value);
  if(isNaN(fpv))
    fpv = 0.;

  return fpv;
}

function fieldVal(n)
{
  var f = getObj(n);
  if(f == undefined)
    return 0;

  return fval(cTrim(f.value));
}

function decimals(num, places)
{
  var m = Math.pow(10, places);
  var n = parseInt((num * m + 0.5) % m).toString();
  while(n.length < places)
    n = "0" + n;

  return "." + n;
}

function formatCurr(num)
{
  var res = "";
  var neg = false;
  if(num < 0)
  {
    neg = true;
    num = -num;
  }

  var res = decimals(num, 2);
  num = parseInt(num);

  while(num >= 1000)
  {
    var v = "00" + parseInt(num % 1000);
    v = v.substring(v.length - 3, v.length);
    num = parseInt(num / 1000);
    res = "," + v + res;
  }

  res = "$" + num + res;
  if(neg)
    res = "-" + res;

  return res;
}

function Trim(s) 
{
  // Remove leading spaces and carriage returns
  while((s.substring(0, 1) == ' ') || (s.substring(0, 1) == '\n') || (s.substring(0, 1) == '\r'))
    s = s.substring(1, s.length);

  // Remove trailing spaces and carriage returns
  while((s.substring(s.length-1, s.length) == ' ') || (s.substring(s.length-1, s.length) == '\n') || (s.substring(s.length-1, s.length) == '\r'))
    s = s.substring(0,s.length-1);

  return s;
}

// General purpose function to check if a value has been entered
function IsEmpty(fld)
{
  if(!fld)
    return false;

  var inputStr = Trim(fld.value);
  if(inputStr == "" || inputStr == null)
  {
//    alert("This field requires an entry.")
    fld.focus();
    fld.select();
    return true;
  }

  return false;
}

// General purpose function to check if a value is a number
function IsNumeric(fld)
{
  if(!fld)
    return false;

  if(IsEmpty(fld))
    return false;

  var inputStr = Trim(fld.value);
  var chFirst = 0;
  if(inputStr.substring(0, 1) == "-")
    chFirst = 1;

  for(var i = chFirst; i < inputStr.length; i++)
  {
    var ch = inputStr.substring(i, i + 1);
    if(ch < '0' || ch > '9')
    {
      fld.focus();
      fld.select();
      return false;
    }
  }

  return true;
}

function VerifyPortion(value)
{
  // Only allow 'A-Z, a-z, 0-9, _, -, and . in any portion of an e-mail address
  var i;
  var ch;
  var chValid = "012346789ABCDEFGHIJKLMNOPQRSTUVWXYZ_-.";

  if(value == "")
  {
    alert("The e-mail address must be in the format user@domain.com");
    return false;
  }

  for(i = 0; i < value.length; i++)
  {
    ch = value.charAt(1);
    if(chValid.indexOf(ch.toUpperCase()) < 0)
    {
      alert("The e-mail address can only contain 0-9, a-z, _, -, . (full-stop), and one @ symbol");
      return false;
    }
  }

  return true;
}

function VerifyEmail(addr)
{
  // Only allow A-Z, a-z, 0-9, _, -, . before the @ sign
  // Only allow one @ sign
  // Only allow A-Z, a-z, 0-9, _, -, . after the @ sign
  // Require that there be at least two characters after the last full-stop in the domain
  var pos = addr.indexOf("@");
  var user;
  var domain;

  if(pos < 0)
  {
    alert("The e-mail address must contain an @ symbol");
    return false;
  }

  user = addr.substr(0, pos);
  domain = addr.substr(pos + 1, addr.length);

  if(!VerifyPortion(user))
    return false;

  if(!VerifyPortion(domain))
    return false;

  // Check that there are at least two characters after the last full stop in the domain
  pos = domain.indexOf(".");
  if(pos < 0)
  {
    alert("The domain portion of the e-mail must contain at least one full-stop");
    return false;
  }

  if(pos > domain.length - 3)
  {
    alert("There must be at least two characters after the last full-stop in the domain");
    return false;
  }

  return true;
}

function ConfirmLogout()
{
	return confirm("Are you sure you want to logout?");
}

function NumbersOnly()
{
	var lKeyCode = window.event.keyCode;

	if(lKeyCode >= 0 && lKeyCode <= 31)
	{
		// Allow control characters
	}
	else if(lKeyCode >= 48 && lKeyCode <= 57)
	{
		// Allow numbers
	}
	else
		window.event.keyCode = 0;
}

function FloatNumbersOnly(currVal)
{
	var lKeyCode = window.event.keyCode;

	if(lKeyCode >= 0 && lKeyCode <= 31)
	{
		// Allow control characters
	}
	else if(lKeyCode >= 48 && lKeyCode <= 57)
	{
		// Allow numbers
	}
	else if(lKeyCode == 46 && currVal.indexOf(".") < 0)
	{
		// Allow one decimal point
	}
	else
		window.event.keyCode = 0;
}
