// *************************************************************************************************
// Program:  StdJavaHtml.js                                    Oprettet: 22-01-2011 13:03:53
// Path:     C:\AppServ\www\STD\inc\                           Udvikler: Hot Mansen
// -------------------------------------------------------------------------------------------------
//
// --- Indeholder Java-script procedurer som vedrører Html
//
//   _BorderVal     (bv) = expanderet eller urørt border-value, eller FALSE
//   _ColorVal      (cv) = expanderet eller urørt color-value, eller FALSE
//   _EventName     (ev) = expanderet eller urørt eventnavn, eller FALSE
//   _FontFamilyVal (ff) = expanderet eller urørt font-family-value, eller FALSE
//   _FontStyleVal  (fs) = expanderet eller urørt font-style-value, eller FALSE
//   _FontWeightVal (fw) = expanderet eller urørt font-weight-value, eller FALSE
//   _PositionVal   (pv) = expanderet eller urørt position-value, eller FALSE
//   _PropName      (pn) = expanderet eller urørt property, eller FALSE
//   _StyleName     (sn, val) = expanderet eller urørt style plus evt. value, eller FALSE
//   _TextAlignVal  (ta) = expanderet eller urørt text-align-value, eller FALSE
//
//   ActElem        (info) = returnerer aktiv elements ønskede information (f.eks. 'id', 'value', 'name')
//   Confirm        (meddelelsestekst inkl. linieskift (CRLF = '\r\l')) = true/false for svaret
//   CookDelete     (cookie-navn)
//   CookGet        (cookie-navn) = værdi af cookie, eller ''
//   CookSet        (cookie-navn, værdi) - danner cookie med værdi
//   ElemAdd        (typ, fid, id, prop1...propn) - danner element id i enhed fid af typen typ
//   ElemDrop       (fid, id1...idn) - Sletter elementer i fid med id1-idn, hvis de findes
//   ElemGet        (id, prop) = returnerer element-objekt, eller property hvis angivet
//   ElemSet        (id, prop1...propn) - Ændrer properties for element id
//   EventAdd       (id, ev1, f1...evn, fn) - danner funktionskald for events til et id
//   EventDrop      (id, ev1, f1...evn, fn) - dropper funktionskald for events til et id
//   FocusSet       (id) - sætter fokus på angivet id
//   FormSubmit     (form-id)
//   IdExist        (id) = true/false for om id eksisterer
//   KeyGet         (event) = streng tasteværdi
//   KeyNum         (event) = numerisk tasteværdi
//   Msg            (meddelelsestekst inkl. linieskift (CRLF = '\r\l'))
//   Prompt         (prompttxt inkl. linieskift (CRLF = '\r\l'), def.værdi eller ikke udfyldt) = svarværdi
//   ScrGet         () - sætter cookies 'ScrHeight' og 'ScrWidth' mm.
//   SelectId       (id) - markerer indhold af angivet id
//   StyleGet       (id, fork) = style-værdi udfra style-forkortelse
//   StyleSet       (id, fork+værdi1...n) - sætter style-værdi udfra style-forkortelser/værdier
//   ValCopy        (felt-id fra, felt-id til) - kopierer fra id fra til id til
//   ValGet         (felt-id) = id værdi
//   ValSet         (felt-id, værdi) - sætter id til værdi
//   WinClose       () - lukker et vindue
//   WinMove        (venstre plac., top plac. (i pixels)) - flytter vinduet som angievt
//   WinOpen        (destination (form), parameterliste) - åbner et vindue som angivet
//   WinSize        (bredde, højde (i pixels)) - sætter vinduets dimensioner som angivet
/* ****************************************************************************************** */

// *************************************************************************************************
// _BorderVal - oversætter border-value-forkortelser til fulde værdier, eller returnerer uændret
//
// Param:   1   border-value til ekspandering (eller check)
//
// Retur:       Ekspanderet eller uændret border-value - eller FALSE hvis fejl
// *************************************************************************************************

function _BorderVal (txt)
{
// {Border

  var Tab = new Array ('db',  'double',
                       'in',  'inset',
                       'out', 'outset',
                       'rid', 'ridge',
                       'gr',  'groove',
                       'sol', 'solid',
                       'hid', 'hidden',
                       'n',   'none');
// Border}

  var Ant = Tab.length;

  for (var Nr = 0; Nr < Ant; Nr+=2)
    if (txt == Tab [Nr] |
        txt == Tab [Nr+1])
      return Tab [Nr+1];

  Msg ('_BorderVal - Ugyldig value: ' + txt);

  return false;
}

// *************************************************************************************************
// _ColorVal - oversætter color-value-forkortelser til fulde værdier, eller returnerer uændret
//
// Param:   1   color-value til ekspandering (eller check)
//
// Retur:       Ekspanderet eller uændret color-value - eller FALSE hvis fejl
// *************************************************************************************************

function _ColorVal (txt)
{
// {Color

  var Tab = new Array ('aqm', 'aquamarine',
                       'be',  'beige',
                       'bl',  'blue',
                       'bla', 'black',
                       'br',  'brown',
                       'ch',  'chocolate',
                       'cr',  'crimson',
                       'cy',  'cyan',
                       'db',  'darkblue',
                       'dg',  'darkgreen',
                       'dr',  'darkred',
                       'go',  'gold',
                       'gr',  'green',
                       'gra', 'gray',
                       'gre', 'gray',
                       'kh',  'khaki',
                       'lb',  'lightblue',
                       'lg',  'lightgreen',
                       'lgr', 'lightgrey',
                       'li',  'lime',
                       'lp',  'lightpink',
                       'or',  'orange',
                       'p',   'pink',
                       'pgr', 'palegreen',
                       'r',   'red',
                       't',   'tan',
                       'wh',  'white',
                       'ye',  'yellow');
// Color}

  var Ant = Tab.length;

  for (var Nr = 0; Nr < Ant; Nr+=2)
    if (txt == Tab [Nr] |
        txt == Tab [Nr+1])
      return Tab [Nr+1];

  Msg ('_ColorVal - Ugyldig value: ' + txt);

  return false;
}

// *************************************************************************************************
// _EventName - oversætter event-forkortelser til fulde navne, eller returnerer navnet uændret
//
// Param:   1   Event til ekspandering (eller check)
//
// Retur:       Ekspanderet eller uændret event - eller FALSE hvis fejl
// *************************************************************************************************

function _EventName (txt)
{
// {Event

  var Tab = new Array ('onbl', 'onblur',
                       'onch', 'onchange',
                       'oncl', 'onclick',
                       'oncm', 'oncontextmenu',
                       'ondc', 'ondblclick',
                       'onfo', 'onfocus',
                       'onhe', 'onhelp',
                       'onkd', 'onkeydown',
                       'onkp', 'onkeypress',
                       'onku', 'onkeyup',
                       'onlo', 'onload',
                       'onmo', 'onmouseout',
                       'onmp', 'onmouseover',
                       'onre', 'onreset',
                       'onsu', 'onsubmit',
                       'onun', 'onunload');
// Event}

  var Ant = Tab.length;

  for (var Nr = 0; Nr < Ant; Nr+=2)
    if (txt == Tab [Nr] |
        txt == Tab [Nr+1])
      return Tab [Nr+1];

  Msg ('_EventName - Ugyldig event: ' + txt);

  return false;
}

// *************************************************************************************************
// _FontFamilyVal - oversætter font-family-value-forkortelser til fulde værdier, eller returnerer
//                     uændret
//
// Param:   1   font-family-value til ekspandering (eller check)
//
// Retur:       Ekspanderet eller uændret font-family-value - eller FALSE hvis fejl
// *************************************************************************************************

function _FontFamilyVal (txt)
{
// {FontFamily

  var Tab = new Array ('ar',  'arial',
                       'con', 'consolas',
                       'cou', 'courier',
                       'cne', 'courier new',
                       'el',  'elite',
                       'tim', 'times');
// FontFamily}

  var Ant = Tab.length;

  for (var Nr = 0; Nr < Ant; Nr+=2)
    if (txt == Tab [Nr] |
        txt == Tab [Nr+1])
      return Tab [Nr+1];

  Msg ('_FontFamilyVal - Ugyldig value: ' + txt);

  return false;
}

// *************************************************************************************************
// _FontStyleVal - oversætter font-style-value-forkortelser til fulde værdier, eller returnerer
//                     uændret
//
// Param:   1   font-style-value til ekspandering (eller check)
//
// Retur:       Ekspanderet eller uændret font-style-value - eller FALSE hvis fejl
// *************************************************************************************************

function _FontStyleVal (txt)
{
// {FontStyle

  var Tab = new Array ('it',  'italic',
                       'n',   'normal');
// FontStyle}

  var Ant = Tab.length;

  for (var Nr = 0; Nr < Ant; Nr+=2)
    if (txt == Tab [Nr] |
        txt == Tab [Nr+1])
      return Tab [Nr+1];

  Msg ('_FontStyleVal - Ugyldig value: ' + txt);

  return false;
}

// *************************************************************************************************
// _FontWeightVal - oversætter font-weight-value-forkortelser til fulde værdier, eller returnerer
//                     uændret
//
// Param:   1   font-weight-value til ekspandering (eller check)
//
// Retur:       Ekspanderet eller uændret font-weight-value - eller FALSE hvis fejl
// *************************************************************************************************

function _FontWeightVal (txt)
{
// {FontWeight

  var Tab = new Array ('b',   'bold',
                       'bb',  'bolder',
                       'li',  'lighter',
                       'n',   'normal');
// FontWeight}

  var Ant = Tab.length;

  for (var Nr = 0; Nr < Ant; Nr+=2)
    if (txt == Tab [Nr] |
        txt == Tab [Nr+1])
      return Tab [Nr+1];

  Msg ('_FontWeightVal - Ugyldig value: ' + txt);

  return false;
}

// *************************************************************************************************
// _PositionVal - oversætter position-value-forkortelser til fulde værdier, eller returnerer uændret
//
// Param:   1   position-value til ekspandering (eller check)
//
// Retur:       Ekspanderet eller uændret position-value - eller FALSE hvis fejl
// *************************************************************************************************

function _PositionVal (txt)
{
// {Position

  var Tab = new Array ('a', 'absolute',
                       'r', 'relative',
                       's', 'static');
// Position}

  var Ant = Tab.length;

  for (var Nr = 0; Nr < Ant; Nr+=2)
    if (txt == Tab [Nr] |
        txt == Tab [Nr+1])
      return Tab [Nr+1];

  Msg ('_PositionVal - Ugyldig value: ' + txt);

  return false;
}

// _PropName - Oversætter element-properties forkortelser til fulde navne, eller returnerer property
//                uændret
//
// Param:   1   Property til ekspandering (eller check)
//
// Retur:       Ekspanderet eller uændret property - eller FALSE hvis fejl
// *************************************************************************************************

function _PropName (txt)
{
// {Property

  var Tab = new Array ('act', 'action',
                       'ali', 'align',       // For 'img'
                       'bor', 'border',      // For 'img'
                       'dis', 'disabled',
                       'hei', 'height',      // For 'img'
                       'id',  'id',
                       'inh', 'innerHTML',
                       'inn', 'innerText',
                       'max', 'maxLength',
                       'met', 'method',
                       'nam', 'name',
                       'rea', 'readOnly',
                       'siz', 'size',
                       'src', 'src',
                       'tab', 'tabIndex',
                       'tix', 'tabIndex',
                       'tit', 'title',
                       'typ', 'type',
                       'val', 'value',
                       'wid', 'width');      // For 'img'
// Property}

  var Ant = Tab.length;

  for (var Nr = 0; Nr < Ant; Nr+=2)
    if (txt == Tab [Nr] |
        txt == Tab [Nr+1])
      return Tab [Nr+1];

  Msg ('_PropName - Ugyldig property: ' + txt);

  return false;
}

// *************************************************************************************************
// _StyleName - Oversætter style-type forkortelser til fulde navne, eller returnerer style uændret
//
// Param:   1   Style til ekspandering (eller check)
//          2   Værdi til ekspandering (eller check) - kan udelades
//
// Retur:       Hvis parameter 2 er angivet:
//                Array med 0) Ekspanderet eller uændret style
//                          1) Ekspanderet eller uændret style-værdi
//              Hvis kun parameter 1 er angivet:
//                Ekspanderet eller uændret style
//              Eller (i begge tilfælde) FALSE hvis fejl
/// *************************************************************************************************

function _StyleName (txt)
{
  var Argant = _StyleName.arguments.length;

  if (Argant > 1)
    var val = _StyleName.arguments [1];

// {Style

  var Tab = new Array ('bac', 'backgroundColor',   'Col',
                       'bco', 'borderColor',       'Col',
                       'bst', 'borderStyle',       'Bor',
                       'bwi', 'borderWidth',       '',
                       'bbc', 'borderBottomColor', 'Col',
                       'bbs', 'borderBottomStyle', 'Bor',
                       'bbw', 'borderBottomWidth', '',
                       'blc', 'borderLeftColor',   'Col',
                       'bls', 'borderLeftStyle',   'Bor',
                       'blw', 'borderLeftWidth',   '',
                       'brc', 'borderRightColor',  'Col',
                       'brs', 'borderRightStyle',  'Bor',
                       'brw', 'borderRightWidth',  '',
                       'btc', 'borderTopColor',    'Col',
                       'bts', 'borderTopStyle',    'Bor',
                       'btw', 'borderTopWidth',    '',
                       'bot', 'bottom',            '',
                       'col', 'color',             'Col',
                       'cur', 'cursor',            '',
                       'ffa', 'fontFamily',        'Ffa',
                       'fil', 'filter',            '',
                       'fsi', 'fontSize',          '',
                       'fst', 'fontStyle',         'Fst',
                       'fwe', 'fontWeight',        'Fwe',
                       'hei', 'height',            '',
                       'lef', 'left',              '',
                       'mab', 'marginBottom',      '',
                       'mal', 'marginLeft',        '',
                       'mar', 'marginRight',       '',
                       'mat', 'marginTop',         '',
                       'opa', 'opacity',           '',
                       'ovf', 'overflow',          '',
                       'pab', 'paddingBottom',     '',
                       'pal', 'paddingLeft',       '',
                       'par', 'paddingRight',      '',
                       'pat', 'paddingTop',        '',
                       'pos', 'position',          'Pos',
                       'rig', 'right',             '',
                       'top', 'top',               '',
                       'txa', 'textAlign',         'Txa',
                       'txi', 'textIndent',        '',
                       'vta', 'vertical-align',    'Vta',
                       'wid', 'width',             '');
// Style}

  var Ant = Tab.length;
  var Funk;

  for (var Nr = 0; Nr < Ant; Nr+=3)
    if (txt == Tab [Nr] |
        txt == Tab [Nr+1])
    {
      if (Argant == 1)
        return Tab [Nr+1];

      Funk = Tab [Nr+2];

      if (val !== '')
        switch (Funk)
        {
          case 'Bor':
            val = _BorderVal (val); break;
          case 'Col':
            val = _ColorVal (val); break;
          case 'Ffa':
            val = _FontFamilyVal (val); break;
          case 'Fst':
            val = _FontStyleVal (val); break;
          case 'Fwe':
            val = _FontWeightVal (val); break;
          case 'Pos':
            val = _PositionVal (val); break;
          case 'Txa':
            val = _TextAlignVal (val); break;
          case 'Vta':
            val = _VerticalAlignVal (val); break;
        }

      if (val !== false)
        return Array (Tab [Nr+1], val);
    }

  Msg ('_StyleName - Ugyldig style: ' + txt + '=' + val);

  return false;
}

// *************************************************************************************************
// _TextAlignVal - oversætter text-align-value-forkortelser til fulde værdier, eller returnerer
//                    uændret
//
// Param:   1   text-align-value til ekspandering (eller check)
//
// Retur:       Ekspanderet eller uændret text-align-value - eller FALSE hvis fejl
// *************************************************************************************************

function _TextAlignVal (txt)
{
// {TextAlign

  var Tab = new Array ('c',   'center',
                       'l',   'left',
                       'r',   'right',
                       'j',   'justify');
// TextAlign}

  var Ant = Tab.length;

  for (var Nr = 0; Nr < Ant; Nr+=2)
    if (txt == Tab [Nr] |
        txt == Tab [Nr+1])
      return Tab [Nr+1];

  Msg ('_TextAlignnVal - Ugyldig value: ' + txt);

  return false;
}

// *************************************************************************************************
// _VerticalAlignVal - oversætter vertical-align-value-forkortelser til fulde værdier, eller
//                       returnerer uændret
//
// Param:   1   vertical-align-value til ekspandering (eller check)
//
// Retur:       Ekspanderet eller uændret vertical-align-value - eller FALSE hvis fejl
// *************************************************************************************************

function _VerticalAlignVal (txt)
{
// {VertAlign

  var Tab = new Array ('m',   'middle',
                       'b',   'bottom',
                       't',   'top');
// VertAlign}

  var Ant = Tab.length;

  for (var Nr = 0; Nr < Ant; Nr+=2)
    if (txt == Tab [Nr] |
        txt == Tab [Nr+1])
      return Tab [Nr+1];

  Msg ('_VerticalAlignnVal - Ugyldig value: ' + txt);

  return false;
}

// *************************************************************************************************

// *************************************************************************************************
// ActElem - Henter information fra aktivt element
//
// Param:   1   Ønsket information - hvis '' returneres hele elementet
// *************************************************************************************************

function ActElem (inf)
{
  if (inf=='')
    return document.activeElement;
  else
    return document.activeElement [inf];
}

/* ****************************************************************************************** */
/* Confirm - Kommer med en meddelelsesbox og beder om bekræftelse
/*
/* Param:   1   Tekst (med linieskift)
/*
/* Return:      true/false for svaret
/* ****************************************************************************************** */

function Confirm (txt)
{
  return confirm (txt);
}

/* ****************************************************************************************** */
/* CookDelete - Sletter en cookie
/*
/* Param:   1   Cookie-navn
/* ****************************************************************************************** */

function CookDelete (navn)
{
  var dato=new Date();

  dato.setDate (dato.getDate () - 10);

  document.cookie=navn + '=' + ';expires=' + dato.toUTCString();
}

/* ****************************************************************************************** */
/* CookGet - Henter værdi fra en cookie
/*
/* Param:   1   Cookie-navn
/*
/* Retur:       Cookie's værdi eller ''
/* ****************************************************************************************** */

function CookGet (navn)
{
  if (document.cookie.length > 0)
  {
    var fra=document.cookie.indexOf(navn + '=');

    if (fra != -1)
    {
      fra=fra + navn.length + 1;
      var til=document.cookie.indexOf (';', fra);

      if (til == -1)
        til=document.cookie.length;

      return unescape(document.cookie.substring(fra, til));
    }
  }

  return '';
}

/* ****************************************************************************************** */
/* CookSet - Indsætter værdi i en cookie
/*
/* Param:   1   Cookie-navn
/*         (2)  Værdi (default blank)
/* ****************************************************************************************** */

function CookSet (navn)
{
  var ant = CookSet.arguments.length;
  var val=(ant == 1 ? '' : CookSet.arguments[1]);

  document.cookie=navn + '=' + escape(val);
}

/* ****************************************************************************************** */
/* ElemAdd - Danner et Element
/*
/* Param:   1   Tagnavn eller for input: type (f.eks. 'div', 'p', 'text', 'hidden' 'button')
/*          2   Id for form-del, tag er del af (f.eks. body eller div - eller '' = document)
/*          3   Id for nyt tag
/*         4-n  Element-properties fork. eller fuldt navn efterfulgt af '=' og værdi
/* ****************************************************************************************** */

function ElemAdd (typ, fenh, elem)
{
  var ant = ElemAdd.arguments.length;
  if (fenh != '');
    var fid = ElemGet(fenh);
  var nel, nr, pos, pfor, ptyp, pval;

  if (In (typ, 'button', 'hidden', 'submit', 'text'))
  {
    nel      = document.createElement('input');
    nel.type = typ;
  }
  else
    nel      = document.createElement(typ);

  nel.id = elem;

  var Prop;

  for (nr = 3; nr < ant; nr++)
  {
    txt = ElemAdd.arguments [nr];
    pos = txt.indexOf('=');

    pval = (pos < 0 ? '' : txt.substr (pos + 1));
    pval = Decode (pval, 'true', true, 'false', false, pval);

    pfor = (pos < 0 ? txt : txt.substr (0, pos));

    Prop = _PropName (pfor);

    if (Prop !== false)
      nel[Prop] = pval;
  }

  if (fenh != '')
    fid.appendChild(nel);
  else
    document.appendChild(nel);
}

/* ****************************************************************************************** */
/* ElemDrop - Dropper et eller flere elementer
/*
/* Param:   1   Id for form-del, elementet er del af (f.eks. body eller div - eller '' = document)
/*         2-n  Id for elementer, der skal slettes
/* ****************************************************************************************** */

function ElemDrop (fdel)
{
  var ant = ElemDrop.arguments.length;
  var nr, fid, elem, eid;

  if (IdExist (fdel) ||
      fdel == '')
  {
    if (fdel != '')
      fid = ElemGet (fdel);

    for (nr = 1; nr < ant; nr++)
    {
      elem = ElemDrop.arguments [nr];

      if (IdExist (elem))
      {
        eid = ElemGet (elem);

        if (fdel != '')
          fid.removeChild(eid);
        else
          document.removeChild(eid);
      }
    }
  }
}

/* ****************************************************************************************** */
/* ElemGet - Henter element-objekt udfra id-navn
/*
/* Param:   1   Id-navn
/*          2   Element-property fork. eller fuldt navn. default ingenting, og hele elementet
/*              returneres
/*
/* Retur        Dokument-element-objekt, -property eller false
/* ****************************************************************************************** */

function ElemGet (navn, prop)
{
  if (IdExist (navn))
  {
    var elem=document.getElementById(navn);

    if (prop === undefined)
      return elem;

    var Prop = _PropName (prop);

    if (Prop !== false)
      return elem[Prop];
  }

  return false;

}

/* ****************************************************************************************** */
/* ElemSet - Ændrer på et elements properties
/*
/* Param:   1   Id for element
/*         2-n  Element-properties,  fork. eller fuldt navn efterfulgt af '=' og værdi.
/*                Hvis intet '=', sættes værdi til ''
/* ****************************************************************************************** */

function ElemSet (id)
{
  if (IdExist (id) === false)
    return;

  var ant = ElemSet.arguments.length;
  var elem = ElemGet(id);
  var nr, txt, pos, pfor, pval, prop;

  for (nr = 1; nr < ant; nr++)
  {
    txt = ElemSet.arguments [nr];
    pos = txt.indexOf('=');

    pval = (pos < 0 ? '' : txt.substr (pos + 1));
    pval = Decode (pval, 'true', true, 'false', false, pval);

    pfor = (pos < 0 ? txt : txt.substr (0, pos));

    prop = _PropName (pfor);

    if (prop !== false)
      elem[prop] = pval;
  }
}

/* ****************************************************************************************** */
/* EventAdd - Tilføjer Events funktionskald til Elementer
/*
/* Param:   1   Id for element, som skal have tilføjet events funktionskald
/*         2-n  Event-navne (evt. forkortelser som i StdAttr.inc)
/*         3-o  Funktioner som skal kaldes for tilknyttede events
/* ****************************************************************************************** */

function EventAdd (elem)
{
  var ant = EventAdd.arguments.length;
  var nel = ElemGet (elem);
  var nr, ev, funk;

  for (nr = 1; nr < ant; nr += 2)
  {
    ev = EventAdd.arguments [nr];

    ev = _EventName (ev);

    if (ev !== false)
    {
      funk = EventAdd.arguments [nr + 1];

      nel.attachEvent (ev, funk);
    }
  }
}

/* ****************************************************************************************** */
/* EventDrop - Dropper Events funktionskald for Elementer
/*
/* Param:   1   Id for element, som skal have droppet events funktionskald
/*         2-n  Event-navne (evt. forkortelser som i StdAttr.inc)
/*         3-o  Funktionskald som skal droppes for events
/* ****************************************************************************************** */

function EventDrop (elem)
{
  var ant = EventDrop.arguments.length;
  var nel = ElemGet (elem);
  var nr, ev, funk;

  for (nr = 1; nr < ant; nr += 2)
  {
    ev = EventDrop.arguments [nr];

    ev = _EventName (ev);

    if (ev !== false)
    {
      funk = EventDrop.arguments [nr + 1];

      nel.detachEvent (ev, funk);
    }
  }
}

/* ****************************************************************************************** */
/* FocusSet - Sætter fokus på bestemt felt id
/*
/* Param:   1   Felt-id
/* ****************************************************************************************** */

function FocusSet (navn)
{
  if (IdExist (navn))
    document.getElementById(navn).focus ();
}

/* ****************************************************************************************** */
/* FormSubmit - Submitter en form
/*
/* Param:   1   Form-id
/* ****************************************************************************************** */

function FormSubmit (fid)
{
  document.getElementById (fid).submit ();
}

/* ****************************************************************************************** */
/* IdExist - Checker om et id findes
/*
/* Param:   1   Id for enhed hvis eksistens skal bekræftes
/*
/* Retur:       true/false for om Id eksisterer
/* ****************************************************************************************** */

function IdExist (id)
{
  if (document.getElementById (id))
    return true;
  else
    return false;
}

/* ****************************************************************************************** */
/* KeyGet - Henter tasteværdi fra et felt
/*
/* Param:   1   Event
/*
/* Retur:       Tasteværdi (talværdi) oversat til Navn
/*                for event KeyPress (udløses kun ved printbart tegn samt Esc, Return og Space)
/*                  returneres det pågældende tegn.
/*                for events KeyUp og KeyDown (udløses altid) returneres navn for key, men kun
/*                  for (de fleste) specialnøgler og enkelte tegn (Esc, Return, Space, Plus
/*                  og Minus)
/* ****************************************************************************************** */

function KeyGet (ev)
{
  var tal=ev.keyCode;
  var navn='';

  if (ev.type == 'keypress')
    if (tal==13 || tal==27)
      navn = '';
    else
      navn = CharVal(tal);
  else
  {
    if (ev.altKey==1)
      navn+='Alt';

    if (ev.ctrlKey==1)
      navn+='Ctl';

    if (ev.shiftKey==1)
      navn+='Sh';

    if (ev.altKey==1)
    {
      if (tal > 64 & tal < 91)
      {
        navn += CharVal(tal);
        return navn;
      }
      if (tal > 96 & tal < 123)
      {
        navn += CharVal(tal-32);
        return navn;
      }
    }

    switch (tal)
    {
// {Keys
      case 8:   navn+='DelLeft';    break;
      case 9:   navn+='Tab';        break;
      case 13:  navn+='Return';     break;
      case 27:  navn+='Esc';        break;
      case 32:  navn+='Space';      break;
      case 33:  navn+='PgUp';       break;
      case 34:  navn+='PgDown';     break;
      case 35:  navn+='End';        break;
      case 36:  navn+='Home';       break;
      case 37:  navn+='Left';       break;
      case 38:  navn+='Up';         break;
      case 39:  navn+='Right';      break;
      case 40:  navn+='Down';       break;
      case 45:  navn+='Ins';        break;
      case 46:  navn+='Del';        break;
      case 112: navn+='F1';         break;
      case 113: navn+='F2';         break;
      case 119: navn+='F8';         break;
      case 120: navn+='F9';         break;
      case 121: navn+='F10';        break;
      case 187: navn+='Plus';       break;
      case 189: navn+='Minus';      break;
// Keys}
      default:  navn= '?';          break;
    }
  }

  return navn;
}

/* ****************************************************************************************** */
/* KeyNum - Henter numerisk tasteværdi
/*
/* Param:   1   Event
/*
/* Retur:       Tasteværdi  - talværdi
/*                for event KeyPress (udløses kun ved printbart tegn samt Esc, Return og Space)
/*                  returneres det pågældende tegns ISO-tegnværdi
/*                for events KeyUp og KeyDown (udløses altid) returneres keyboard-værdi for key.
/*                  Ved Alt-key tillægges 2000, Ctl-key 1000 og Shift 500.
/* ****************************************************************************************** */

function KeyNum (ev)
{
  var val=ev.keyCode;

  if (ev.type != 'keypress')
  {
    if (ev.altKey==1)
      val+=2000;

    if (ev.ctrlKey==1)
      val+=1000;

    if (ev.shiftKey==1)
      val+=500;
  }

  return val;
}

/* ****************************************************************************************** */
/* Msg - Kommer med en meddelelsesbox
/*
/* Param:   1   Tekst (med linieskift)
/* ****************************************************************************************** */

function Msg (txt)
{
  alert (txt);
}

/* ****************************************************************************************** */
/* Prompt - Prompter for værdi via en meddelelsesbox
/*
/* Param:   1   Prompt-tekst (med linieskift)
/*          2   Evt. default-værdi eller ikke udfyldt
/*
/* Retur        Indtastet værdi
/* ****************************************************************************************** */

function Prompt (txt, def)
{
  if (def === undefined)
    return prompt (txt, '');
  else
    return prompt (txt, def);
}

/* ****************************************************************************************** */
/* ScrGet - Danner cookies ScrHeight/Width, ScrAHeight/Width og WinHeight
/*            samt ScrMinus (til Overflow-skærme)
/* ****************************************************************************************** */

function ScrGet ()
{
  CookSet ('ScrHeight',  screen.height);
  CookSet ('ScrWidth',   screen.width);
  CookSet ('ScrAHeight', screen.availHeight);
  CookSet ('ScrAWidth',  screen.availWidth);
  CookSet ('ScrMinus',   190);

  CookSet ('WinHeight', (screen.availHeight == '' | screen.availHeight < 680
                           ? 500 : screen.availHeight-180));
}

/* ****************************************************************************************** */
/* SelectId - Markerer indhold af bestemt felt id
/*
/* Param:   1   Felt-id
/* ****************************************************************************************** */

function SelectId (navn)
{
  if (IdExist (navn))
    document.getElementById(navn).select ();
}

/* ****************************************************************************************** */
/* StyleGet - Henter style-værdi
/*
/* Param:   1   Id
/*          2   Styletype-forkortelse (som i StdAttr.inc)
/*
/* Retur:       Style-værdi - eller false hvis Id ikke eksisterer
/* ****************************************************************************************** */

function StyleGet (navn, fork)
{
  var retur = false;

  if (IdExist (navn))
    retur = _StyleName (fork);

  if (retur !== false)
    retur = document.getElementById(navn).style[retur];

  return retur;
}

/* ****************************************************************************************** */
/* StyleSet - Sætter style-værdi på et id
/*
/* Param:   1   Id
/*          2   Styletype(-forkortelser) efterfuldt af underscore og værdi(-forkortels)er
/*                (f.eks. 'pos_a mal_10')
/* ****************************************************************************************** */

function StyleSet (navn, pars)
{
  if (IdExist (navn))
  {
    var tab, ant, txt, pos, fork, val, nr, Star;

    tab=TxtSplit (pars);
    ant=tab.length;

    for (nr = 0; nr < ant; nr++)
    {
      txt = tab[nr];

      pos = txt.indexOf ('_');

      fork = txt.substr (0, pos);
      val  = txt.substr (pos + 1);

      Star = _StyleName (fork, val);

      if (Star !== false)
        document.getElementById(navn).style [Star [0]] = Star [1];
    }
  }
}

/* ****************************************************************************************** */
/* ValCopy - Henter værdi fra et id og indsætter den i et andet id
/*
/* Param:   1   Id fra
/*          2   Id til
/* ****************************************************************************************** */

function ValCopy (fra,til)
{
  if (IdExist (fra) && IdExist (til))
  {
    var ind=document.getElementById(fra).value;

    document.getElementById(til).value=ind;
  }
}

/* ****************************************************************************************** */
/* ValGet - Henter værdi fra et id
/*
/* Param:   1   Id fra
/*
/* Retur:       Feltværdi
/* ****************************************************************************************** */

function ValGet (navn)
{
  if (IdExist (navn))
    return document.getElementById(navn).value;
}

/* ****************************************************************************************** */
/* ValSet - Indsætter værdi i et id
/*
/* Param:   1   Id til
/*          2   Værdi
/* ****************************************************************************************** */

function ValSet (navn,val)
{
  if (IdExist (navn))
   document.getElementById(navn).value=val;
}

/* ****************************************************************************************** */
/* WinClose - Lukker aktuelt vindue
/* ****************************************************************************************** */

function WinClose ()
{
  window.close ();
}

/* ****************************************************************************************** */
/* WinMove - Flytter aktuelt vindue
/*
/* Param:   1   Venstre (pixels)
/*          2   Top     (pixels)
/* ****************************************************************************************** */

function WinMove (left,top)
{
  window.moveTo (left,top);
}

/* ****************************************************************************************** */
/* WinOpen - Åbner et vindue
/*
/* Param:   1   Destination (program)
/*          2   Parameterliste adskilt af komma i formen <par1>=<val1>, <par2>=<val2>...
/*                Parametre kan f.eks. være:
/*                  width=<pixels>
/*                  height=<pixels>
/*                  top=<pixels>
/*                  left=<pixels>
/*                  resizable=0/1
/*                  menubar=0/1
/*         (3)  Target - kan være '_self', '_top', '_blank', '_parent' eller frame
/* ****************************************************************************************** */

function WinOpen (dest,par)
{
  var ant = WinOpen.arguments.length;
  var tar=(ant < 3 ? '' : WinOpen.arguments[2]);

  Vnavn=window.open (dest,tar,par);
  Vnavn.focus ();
}

/* ****************************************************************************************** */
/* WinSize - Ændrer aktuelt vindues størrelse
/*
/* Param:   1   Bredde (pixels)
/*          2   Højde  (pixels)
/* ****************************************************************************************** */

function WinSize (width,height)
{
  window.resizeTo (width,height);
}

