/////////////////////////////////////////////////////////////
// Copyright 1999,2000 Amaris Software Entwicklungsges. mbH
// waUtil.js
// Javascript-Bibliothek für allgemeine Funktionen
/////////////////////////////////////////////////////////////

// für HTML-Kodierung benötigte Variablen
// 1. String mit einzelnen zu konvertierenden Zeichen
waHTMLEncodeChars="\"&<>©­ÁÀÂÃÄÅÆÇÉÈÊËÍÌÎÏÐÑÓÒÔÕÖØÚÙÛÜÝÞßáàâãäåæçéèêëíìîïðñòóôõöøúùûüýþ";

// 2. StringArray, in dem für jedes zu konvertierende Zeichen ein String steht in den es konvertiert werden muss (Reihenfolge beachten!)
waHTMLEncodeStrings=new Array("&quot;", "&amp;", "&lt;", "&gt;", "&copy;", "&shy;", "&Aacute;", "&Agrave;", "&Acirc;", "&Atilde;", "&Auml;", "&Aring;", "&AElig;", "&Ccedil;", "&Eacute;",
  "&Egrave;", "&Ecirc;", "&Euml;", "&Iacute;", "&Igrave;", "&Icirc;", "&Iuml;", "&ETH;", "&Ntilde;", "&Oacute;", "&Ograve;", "&Ocirc;", "&Otilde;", "&Ouml;",
  "&Oslash;", "&Uacute;", "&Ugrave;", "&Ucirc;", "&Uuml;", "&Yacute;", "&THORN;", "&szlig;", "&aacute;", "&agrave;", "&acirc;", "&atilde;", "&auml;", "&aring;",
  "&aelig;", "&ccedil;", "&eacute;", "&egrave;", "&ecirc;", "&euml;", "&iacute;", "&igrave;", "&icirc;", "&iuml;", "&eth;", "&ntilde;", "&ograve;", "&oacute;",
  "&ocirc;", "&otilde;", "&ouml;", "&oslash;", "&uacute;", "&ugrave;", "&ucirc;", "&uuml;", "&yacute;", "&thorn;", "&yuml;", "");

// assoziatives Array mit den Währungs-ISO-Codes und den dazugehörenden Umrechnungsfaktoren zum Euro
waCurrFactor=new Array();
// --- Konfigurierbares Array Start
waCurrFactor["BEF"]= 40.339900;    // Belgische Franc
waCurrFactor["DEM"]= 1.955830;    // Deutsche Mark
waCurrFactor["EUR"]= 1.000000;    // Euro
waCurrFactor["FIM"]= 5.945730;    // Finnische Mark
waCurrFactor["FRF"]= 6.559570;    // Französische Franc
waCurrFactor["GRD"]= 340.750000;    // Griechische Drachme
waCurrFactor["IEP"]= 0.787564;    // Irisches Pfund
waCurrFactor["ITL"]= 1936.270000;    // Italienische Lira
waCurrFactor["NLG"]= 2.203710;    // Niederländische Gulden
waCurrFactor["ATS"]= 13.760300;    // Österreichische Schilling
waCurrFactor["PTE"]= 200.482000;    // Portugisische Escudo
waCurrFactor["ESP"]= 166.386000;    // Spanische Peseta
waCurrFactor["CHF"]= 1.538300;    // Schweizer Franken
// --- Konfigurierbares Array Ende

function waToHTML(s)
{
  var r="",a,b,i;

  s =waToAscii(s);
  for (i=0; i < s.length; i++)
  {
    a=s.charAt(i);
    if (a == 255)
      r+=waHTMLEncodeStrings[67];
    else
      if ((b=waHTMLEncodeChars.indexOf(a)) == -1)
        r+=a;
      else
        r+=waHTMLEncodeStrings[b];
  }
  return r;
}

function waToAscii(s)
{
  var r="";
        newIndex = s.indexOf ( "&" ) ;
  if ( newIndex == -1 )
          return s ;
  while ( (newIndex) != -1 )
  {
          if ( newIndex > 0 )
                  r += s.slice ( 0, newIndex ) ;
          i=0 ;
          len = waHTMLEncodeStrings[i].length ;
          while ( len != 0 )
          {
                  if ( waHTMLEncodeStrings[i] == s.slice ( newIndex, newIndex + len ) )
                  {
                          fChange = true ;
                          break ;
                  }
                  else
                          i ++ ;
                  len = waHTMLEncodeStrings[i].length ;
          }
          if ( fChange )
          {
                  r += waHTMLEncodeChars.charAt (i) ;
                  s= s.slice ( newIndex + len) ;
          }
          else
          {
                  r += '&' ;
                  s= s.slice ( 1) ;
          }
          newIndex = s.indexOf ( "&" ) ;
          if ( newIndex == -1 && s.length > 0 )
          	r += s ;
  }
        return r;
}

function waToCurrent(value)
{
  return value*waCurrFactor[waCurrCurrency]/waCurrFactor[waBaseCurrency];
}

function waCurrencyToString(value)
{
  return waFormatFloat(value/100, ",", 2)+" "+waCurrCurrency;
}

function waFormatFloat(value, decDivider, fracDigits)
{
  s=value+"";
  if (s.indexOf('.') < 0) s+=".";
  s=waReplace(s+"0000000000",'.',decDivider);
  return s.substring(0,s.indexOf(decDivider)+fracDigits+1);
}

function waTConv(value, type)
{
  if (type <= 2)  // Text oder Zahl
    return value;
  else
    if (type == 3) // Betrag
      return waCurrencyToString(parseInt(waToCurrent(value)));
    else
      if (type == 4) // Grafik
        return "<img src=\""+value+"\" border=0>";
      else
        if (type == 5) // Link
          return value.link(value);
              else
                return waToHTML(value);
}

function waGetTyped(db, mask)
{
 return waTConv(db.get(mask), db.getType(mask));
}

function waMap2Str(map)
{
var str="";

  for (i in map)
  {
    str=str+i+"="+escape(map[i])+"&";
  }
  return str;
}

function waStr2Map(str)
{
var map=new Object();

  var pairs=str.split("&");
  for (var i=0; i<pairs.length; i++)
  {
    var pos=pairs[i].indexOf('=');
    if (pos == -1) continue;
    var index=pairs[i].substring(0,pos);
    var value=pairs[i].substring(pos+1);
    map[index]=unescape(value);
  }
  return map;
}

function waFilterMap(map,filter)
{        var IdxMap=new Object();
        for (i in map)
  { if (i.indexOf(filter) != -1)
            { IdxMap[i]=map[i]}
  }
        return IdxMap;
}

function waGetMapWithoutFilter(map,filter)
{        
	var IdxMap=new Object();
  for (i in map)
  { 
    if (i != filter)
      IdxMap[i]=map[i]
  }
  return IdxMap;
}

function waGetCookieVal(offset)
{        var endstr = document.cookie.indexOf (";", offset);  if (endstr == -1)
    endstr = document.cookie.length;
  return unescape(document.cookie.substring(offset, endstr));
}

function waFixCookieDate(date)
{ var base = new Date(0);
  var skew = base.getTime();                // dawn of (Unix) time - should be 0
  if (skew > 0)                                                                        // Except on the Mac - ahead of its time
    date.setTime (date.getTime() - skew);
}

function waGetCookie(name)
{
var arg = name + "=";  var alen = arg.length;
  var clen = document.cookie.length;  var i = 0;  while (i < clen)
  { var j = i + alen;
    if (document.cookie.substring(i, j) == arg)
      return waGetCookieVal (j);
    i = document.cookie.indexOf(" ", i) + 1;
    if (i == 0) break;
   }
   return null;
}

function waSetCookie(name,value,expires,path,domain,secure)
{        document.cookie = name + "=" + escape (value) +
    ((expires) ? "; expires=" + expires.toGMTString() : "") +
    ((path) ? "; path=" + path : "") +
    ((domain) ? "; domain=" + domain : "") +    ((secure) ? "; secure" : "");
}

function waDeleteCookie(name,path,domain)
{        if (waGetCookie(name))
  {        document.cookie = name + "=" + ((path) ? "; path=" + path : "") + ((domain) ? "; domain=" + domain : "") + "; expires=Thu, 01-Jan-70 00:00:01 GMT"; }
}

function waReplace(string,text,by)
{        var strLength = string.length, txtLength = text.length;
        if ((strLength == 0) || (txtLength == 0)) return string;

        var i = string.indexOf(text);
        if ((!i) && (text != string.substring(0,txtLength))) return string;
        if (i == -1) return string;

        var newstr = string.substring(0,i) + by;
        if (i+txtLength < strLength)
            newstr += waReplace(string.substring(i+txtLength,strLength),text,by);
        return(newstr);
}

function waMakeDateArray()
{
  for (i = 0; i<waMakeDateArray.arguments.length; i++) this[i + 1] = waMakeDateArray.arguments[i];
}

function waY2K(number)
{
  return (number < 1000) ? number + 1900 : number;
}

function waCheckIsEmail(s)
{ var lstr = s.indexOf("@");
        if ( (lstr != -1) && (s.charAt(0) != "@") )
                {        var ls2 = s.substring(lstr,s.length);
                        lstr = ls2.indexOf(".");
                        ls2 = s.lastIndexOf(".");
                        if ( (lstr != -1) && (ls2 != s.length-1) ) {return true;} else {return false;}
                }
        else
                { return false; }
}

function waCheckIsInteger(s)
{ var i;
        for (i = 0; i < s.length; i++)
                {        var c = s.charAt(i);
                          if (!((c >= "0") && (c <= "9"))) return false;
                }
  return true;
}

function waCheckIsEmpty(s)
{        return ((s == null) || (s.length == 0) || (s.value == ""))
}

function waCheckIsblank(s)
{ for(var i = 0; i < s.length; i++)
  { var c = s.charAt(i);
    if ((c != ' ') && (c != '\n') && (c != '\t')) return false;
  }
  return true;
}

function waCheckCharInString (lStr, ws)
{        for (i = 0; i < ws.length; i++)
          {        if (ws.charAt(i) == lStr) return true; }
  return false;
}

function waLeftTrim(lStr)
{        var i = 0;
  while ( (i < lStr.length) && (lStr.charAt(i) == " ") )
  i++;
  return lStr.substring (i, lStr.length);
}

function waRightTrim(lStr)
{        var i = lStr.length-1;
  while ( (i >= 0) && (lStr.charAt(i) == " ") )
  i--;
  return lStr.substring (0,i+1);
}

function waParameter()
{
 var i=location.href.indexOf("?")
 if (i > 0)
 {
  return location.href.substring(i)
 }
 else
 {
  return "?"
 }
}

function waReverseIt(str)
{
  if (!str) return; // keine Aenderung
  var rstr = '';
  for (i=str.length-1;i>=0;i--) rstr += str.charAt(i);
  return rstr;
}

function waDecimalGroup(str)
{
  var saveStr = "" + waLeftTrim(str);
  var kommaPos=4 + waCurrCurrency.length;
  var nachkomma=saveStr.slice(saveStr.length-kommaPos);
  saveStr=saveStr.slice(0,saveStr.length-kommaPos);
  if (saveStr.length < 4) return str;
  var revStr = waReverseIt(saveStr);
  var newStr = '';
  for (var i=0;i<revStr.length;i++)
  {
    if (i>0 && (i%3)==0) newStr += '.';
    newStr += revStr.charAt(i);
  }

  return waReverseIt(newStr)+nachkomma;
}