// *************************************************************************************************
// Program:  StdJavaData.js                                    Oprettet: 25-01-2011 19:50:27
// Path:     C:\AppServ\www\STD\inc\                           Udvikler: Hot Mansen
// -------------------------------------------------------------------------------------------------
//
// --- Indeholder Java-script procedurer til data-manipulering
//
//   Betw       (val, fra, til) = true/false for om værdi er mellem 2 andre værdier
//   CharVal    (val) = tegn udfra tegns ascii-talværdi
//   Decode     (val, test1, res1...testn, resn, def) = oversætter val fra test- til res-/def
//   FldUpper   (felt-id) - sætter feltet til Upper Case
//   In         (val, test1...testn) = true/false for om værdi er blandt testværdier
//   IntVal     (val) = talværdi af strengen, eller false hvis ikke talværdi
//   Mod        (tal,div) = rest for tal / div (modulus-værdi
//   OrdVal     (tegn) = ascii-talværdi for tegn
//   Size       (str,lgd,tegn) = str tilpasset til lgd med tegn (def. blank)
//   Trim       (str,side) = str trimmet udfra side ('r', 'l', 'rl' (def.) eller 'lr')
//   TrimL      (str) = str trimmet i venstre side
//   TrimR      (str) = str trimmet i højre side
//   TxtSplit   (txt) = areal med tekstens ord i de enkelte elementer. false hvis blank/tom txt
// *************************************************************************************************

/* ****************************************************************************************** */
/* Betw - Checker om en værdi er i intervallet af 2 andre værdier
/*
/* Param:   1   Test-værdi
/*          2   Fra-værdi
/*          3   Til-værdi
/*
/* Retur:       true/false
/* ****************************************************************************************** */

function Betw (test,fra,til)
{
  return (test >= fra && test <= til ? true : false);
}

/* ****************************************************************************************** */
/* CharVal - Oversætter ascii-talværdi for tegn til tegn
/*
/* Param:   1   Talværdi
/*
/* Retur:       Tegn - eller false hvis talværdi er < 1 eller > 255
/* ****************************************************************************************** */

function CharVal (tal)
{
  if (Betw (tal, 1, 255))
    return String.fromCharCode (tal);
  else
    return false;
}

/* ****************************************************************************************** */
/* Decode - Oversætter testværdi udfra en række oversættelses-værdier
/*
/* Param:   1   Test-værdi
/*        2,4-n Check-værdier
/*        3,5-o Oversat-værdier
/*          p   Defaultværdi (false hvis ikke angivet)
/*
/* Retur:       Korresponderende værdi, default-værdi eller false
/* ****************************************************************************************** */

function Decode (test)
{
  var ant=Decode.arguments.length;

  for (var nr = 1; nr < (ant - 1); nr+=2)
    if (test == Decode.arguments[nr])
      return Decode.arguments[nr + 1];

  return (Mod (ant, 2) == 0 ? Decode.arguments[ant - 1] : false);
}

/* ****************************************************************************************** */
/* FldUpper - Ændrer et felt til Uppercase
/*
/* Param:   1   Felt-id
/* ****************************************************************************************** */

function FldUpper (felt)
{
  if (IdExist (felt))
  {
    var ufelt=document.getElementById (felt).value;

    document.getElementById (felt).value=ufelt.toUpperCase();
  }
}

/* ****************************************************************************************** */
/* In - Checker om testværdi er blandt et antal angivne værdier
/*
/* Param:   1   Test-værdi
/*         2-n  Check-værdier
/*
/* Retur        True/false
/* ****************************************************************************************** */

function In (test)
{
  var ant=In.arguments.length;

  for (var nr = 1; nr < ant; nr++)
    if (test == In.arguments[nr])
      return true;

  return false;
}

// *************************************************************************************************
// IntVal - Returnerer talværdi af streng
//
// Param:   1   Streng-værdi
//
// Return:      Integer-værdi af streng - eller False
// *************************************************************************************************

function IntVal (txt)
{
  var Txt  = new String (txt);
  Txt      = Trim (Txt);
  var Lgd  = Txt.length;
  var Tal  = 0;
  var Mult = 1;
  var Tegn = false;

  for (Nr = Lgd - 1; Nr >= 0; Nr--)
  {
    Tegn = Txt.substr (Nr, 1);

    if (Betw (Tegn, '0', '9'))
    {
      Tal += (Mult * (OrdVal (Tegn) - 48));
      Mult *= 10;
    }
    else
      return false;
  }

  return Tal;
}

/* ****************************************************************************************** */
/* KeyTxt - Fjerner alle blanke og specialtegn fra en tekst (evt. undtagen komma), oversætter
/*             til store bogstaver, omdanner endvidere f.eks. äöü til æøy og danner tekst af
/*             angiven længde
/*
/* Param:   1   Tekst
/*         (2)  Ønsket nøglelængde (def. 0 = dannet tekst utrunkeret/upaddet)
/*         (3)  Bevar komma (def. true, eller false)
/*
/* Retur        Tekst omdannet til nøgletekst
/* ****************************************************************************************** */

function KeyTxt (txt,lgd,komma)
{
  var nr, tegn, tval, rlgd;
  var ant=KeyTxt.arguments.length;
  var ptxt=txt.toUpperCase();
  var plgd=(ant<2 ? 0    : lgd);
  var pkom=(ant<3 ? true : komma);
  var ktxt="";

  var tlgd=ptxt.length;

  for (nr = 0; nr < tlgd; nr++)
  {
    tegn = ptxt.substr (nr, 1);
    tval = OrdVal (tegn);

    tegn = (In (tval, 196, 198) ? CharVal (91) : tegn);
    tegn = (In (tval, 214, 216) ? CharVal (92) : tegn);
    tegn = (tval == 197         ? CharVal (93) : tegn);
    tegn = (tval == 220         ? CharVal (89) : tegn);

    tval = OrdVal (tegn);

    if (Betw (tval, 48, 57) ||
        Betw (tval, 65, 93) ||
        (tval == 44 && pkom))
      ktxt += tegn;
  }

  rlgd = (plgd == 0 ? ktxt.length : plgd);

  while (ktxt.length < rlgd)
    ktxt += ' ';

  return ktxt.substr (0, rlgd);
}

/* ****************************************************************************************** */
/* Mod - Giver modulus-værdi, dvs. rest når et heltal divideres med at andet
/* ****************************************************************************************** */

function Mod (tal, div)
{
  var res=Math.floor(tal / div);

  return (tal - res * div);
}

/* ****************************************************************************************** */
/* OrdVal - Oversætter et tegn til ascii-talværdi for tegn
/*
/* Param:   1   Tegn
/*
/* Retur:       Tegns ascii-talværdi
/* ****************************************************************************************** */

function OrdVal (tegn)
{
  return tegn.charCodeAt (0);
}

/* ****************************************************************************************** */
/* Rand - Returnerer et tilfældigt tal mellem 1 og angiven værdi
/* ****************************************************************************************** */

function Rand (tal)
{
  var res=Math.floor (Math.random() * tal + 1);

  return res;
}

/* ****************************************************************************************** */
/* Size - Tilpasser en streng til en bestemt størrelse
/*
/* Param:   1   Streng som skal tilpasses
/*          2   Ønsket længde (negativt tal betyder trunkering/pad i venstre side)
/*          3   Evt. pad-tegn (default blank)
/* ****************************************************************************************** */

function Size (str,lgd,tegn)
{
  var ant=Size.arguments.length;
  var chr=(ant==2 ? ' ' : tegn);
  var gllgd=str.length;
  var nylgd=Math.floor(Math.abs(lgd));
  var retur=false;

  if (nylgd <= gllgd)
    retur = (lgd > 0 ? str.substr (0, nylgd) : str.substr (gllgd - nylgd));
  else
  {
    retur = str;

    while (retur.length < nylgd)
      retur = (lgd > 0 ? retur.concat(chr) : chr.concat(retur));
  }

  return retur;
}

/* ****************************************************************************************** */
/* Trim - Fjerner blanke i højre og/eller venstre side af streng
/*
/* Param:   1   Streng som skal trimmes
/*          2   'r', 'l', 'rl' (def.) eller 'lr'
/*
/* Retur:       Trimmet streng
/* ****************************************************************************************** */

function Trim (str,side)
{
  var retur=str.toString();
  var ant=Trim.arguments.length;
  var sid=(ant == 1 ? 'rl' : side.toLowerCase());
  var sr=In (sid,'r','rl','lr');
  var sl=In (sid,'l','rl','lr');

  if (sr)
    while (retur.substr (retur.length - 1) == ' ')
      retur = retur.substr (0, retur.length - 1);

  if (sl)
    while (retur.substr (0, 1) == ' ')
      retur = retur.substr (1);

  return retur;
}

/* ****************************************************************************************** */
/* TrimL - Fjerner blanke i venstre side af streng
/*
/* Param:   1   Streng som skal trimmes
/*
/* Retur:       Trimmet streng
/* ****************************************************************************************** */

function TrimL (str)
{
  return Trim (str, 'l');
}

/* ****************************************************************************************** */
/* TrimR - Fjerner blanke i højre side af streng
/*
/* Param:   1   Streng som skal trimmes
/*
/* Retur:       Trimmet streng
/* ****************************************************************************************** */

function TrimR (str)
{
  return Trim (str, 'r');
}

/* ****************************************************************************************** */
/* TxtSplit - Omdanner tekststrenge til areal med tekstens ord
/*
/* Param:   1   Tekst i form 'ord  ord ord  ord' eller f.eks. 'ord;ord;  ord;'
/*         (2)  Skilletegn (default blank)
/*
/* Retur:       Areal med ordene som værdier. Hvis ingen ord returneres false.
/* ****************************************************************************************** */

function TxtSplit (lin)
{
  var retur = new Array;
  var skil  = (TxtSplit.arguments.length > 1 ? TxtSplit.arguments[1] : ' ');
  var txt   = Trim (lin);
  var ant   = 0;
  var pos, ptxt;

  while (txt != '')
  {
    pos  = txt.indexOf(skil);
    ptxt = TrimR (pos == -1 ? txt : txt.substr (0, pos));
    txt  = (pos == -1 ? ''  : TrimL (txt.substr (pos + 1)));

    retur [ant] = ptxt;
    ant++;
  }

  if (ant == 0)
    return false;
  else
    return retur;
}

