  String.prototype.leftTrim = function () {
    return (this.replace(/^\s+/,""));
  };
  String.prototype.rightTrim = function () {
    return (this.replace(/\s+$/,""));
  };
//kombiniert "leftTrim" und "rightTrim";
  String.prototype.basicTrim = function () {
    return (this.replace(/\s+$/,"").replace(/^\s+/,""));
  };
//dampft leerzeichen(-sequenzen) innerhalb einer zeichenkette auf ein einzelnes "space" ein;
  String.prototype.superTrim = function () {
    return(this.replace(/\s+/g," ").replace(/\s+$/,"").replace(/^\s+/,""));
  };

//zugabe: entfernt alle leerzeichen aus einer zeichenkette;
  String.prototype.removeWhiteSpaces = function () {
    return (this.replace(/\s+/g,""));
  };

  function switchStyle(s) {
    if (!document.getElementsByTagName) return;
    var el = document.getElementsByTagName("link");
    for (var i = 0; i < el.length; i++ ) {
      if (el[i].getAttribute("rel") && el[i].getAttribute("rel").indexOf("style") != -1 && el[i].getAttribute("title")) {
        el[i].disabled = true;
        if (el[i].getAttribute("title") == s) el[i].disabled = false;
      }
    }
  }

  var picwindow;
  var change=false;

  function openPic(url) {
    var b= new Image();
    b.src=url;
    if(picwindow && !picwindow.closed) {
      picwindow.close();
    }
    picwindow=window.open('','pic','toolbar=no,scrollbars=no,width='+b.width+',height='+b.height+',resizable=yes');
    picwindow.document.open('text/html');
    picwindow.document.writeln('<html>');
    picwindow.document.writeln('<body topmargin="0" marginheight="0" marginwidth="0" leftmargin="0">');
    picwindow.document.writeln('<img src="'+b.src+'" />');
    picwindow.document.writeln('</body>');
    picwindow.document.writeln('</html>');
    picwindow.document.close();
    picwindow.focus();
  }

var bestellfenster;
var sessionid;

function newWindow(session_id)
{
  var url="http://bestellung.handwerk.schluetersche.de/indexa.htm?session_id="+session_id;
//  var url="https://bestellung.schluetersche.de/indexa.htm?session_id="+session_id;
  var h = screen.height - 80;
  bestellfenster=window.open(url,"bestellfenster","status=yes,scrollbars,height="+h+",width=556");
  bestellfenster.focus();
}

function drucken(id,bg)
{
  var url="/drucken.htm?id="+id+"&bg="+bg;
  var h = screen.height - 170;
  druckfenster=window.open(url,"druckfenster","left=210,top=0,screenX=210,screenY=0,height="+h+",width=620,resizable=yes,status=yes,scrollbars=yes,menubar=yes,toolbar=yes");
  druckfenster.focus();
}

var xmlHttp = null;
var wert_global = "";
function suggest(wert) {
  wert_global = wert;
  if (wert.length) {
    for (var i=0;i<document.forms[0].elements.length;i++) {
      if (document.forms[0].elements[i].type == "text") {
        document.forms[0].elements[i].focus();
        break;
      }
    }
    if (window.ActiveXObject) {
      try {
        xmlHttp= new ActiveXObject("Msxml2.XMLHTTP");
      } catch (e) {
        try {
          xmlHttp= new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e) {
        }
      }
    } else if (window.XMLHttpRequest) {
      try {
        xmlHttp= new XMLHttpRequest();
      } catch (e) {
      }
    }


    if (xmlHttp) {
      xmlHttp.open('GET', '/suggest.htm?q=' + wert, true);
      xmlHttp.onreadystatechange = daten;
      xmlHttp.send(null);
    }
  }
}

var text = '';
var textteile = new Array();

function daten() {
  var ausgabe = '';

  if (xmlHttp.readyState == 4) {
    text = xmlHttp.responseText;
    if (text != "") {
      textteile = text.split(";");
      for (var teil in textteile) {
        ausgabe += "<a href='javascript:wert(" + teil;
        ausgabe += ")' id='" + teil + "' class='ergebnis' onmouseover='' onclick='wert_mark("+teil+");document.getElementById(\"ausgabe\").style.visibility = \"hidden\"'>";
        ausgabe += textteile[teil] + "</a>";
      }
      document.getElementById('ausgabe').innerHTML = ausgabe;
    }
    if (ausgabe != "") {
      document.getElementById('ausgabe').style.visibility = "visible";
    } else {
      document.getElementById('ausgabe').style.visibility = "hidden";
    }
  }
}
function wert(teil) {
  if (textteile[teil] != null && textteile[teil] != "") {
    for (var i=0;i<document.forms[0].elements.length;i++) {
      if (document.forms[0].elements[i].type == "text") {
        var suchfeld = document.forms[0].elements[i];
        break;
      }
    }
    if (suchfeld.name.length) {
      suchfeld.value = textteile[teil];
      suchfeld.focus();
    }
  }
}
function wert_mark(teil) {
  if (textteile[teil] != null && textteile[teil] != "") {
    for (var i=0;i<document.forms[0].elements.length;i++) {
      if (document.forms[0].elements[i].type == "text") {
        var suchfeld = document.forms[0].elements[i];
        break;
      }
    }
    if (suchfeld.name.length) {
      var start = wert_global.length;
      var laenge = textteile[teil].length;
      suchfeld.value = textteile[teil];
      if (suchfeld.createTextRange) {
        var Auswahl = suchfeld.createTextRange();
        Auswahl.moveStart("character", start);
        Auswahl.moveEnd("character", laenge - start);
        Auswahl.select();
      } else if (suchfeld.setSelectionRange) {
        suchfeld.setSelectionRange(start, laenge);
      }
      suchfeld.focus();
    }
  }
}

/**
 * Globale Konstanten:
 * _DIGITS - Zeichenkette mit allen Ziffern
 * _BASIC_LATIN - Zeichenkette mit den Kleinbuchstaben des Standard-Alphabets
 */
var _DIGITS='0123456789';
var _BASIC_LATIN='abcdefghijklmnopqrstuvwxyz';

var calendars = new Array();
var first;
var last;

/**
 * Bricht eine Zeichenkette an einer angegebenen Trenn-Zeichenkette auf und
 * liefert die Einzelteile als Array zurueck (natuerlich ohne Trennzeichen).
 * @param str Zeichenkette
 * @param delimiter Trennzeichen
 */
function tokenize(str,delimiter) {
  var arr=new Array();
  var token='';
  var c=0;
  ///
  for (var i=0;i<str.length;i++) {
    c=str.charAt(i);
    if (delimiter.indexOf(c)!=-1) {
      if (token!='') {
        arr[arr.length]=token;
        token='';
      }
    }
    else {
      token+=c;
    }
  }
  if (token!='') {
    arr[arr.length]=token;
  }
  return arr;
}

/**
 * Untersucht, ob die angegebene Zeichenkette rein numerisch ist.
 * @param str Zeichenkette
 */
function isNumeric(str) {
  var num=true;
  ///
  if (str.length==0) {
    num=false;
  }
  for (var i=0;i<str.length;i++) {
    if (_DIGITS.indexOf(str.charAt(i))==-1) {
      num=false;
      break;
    }
  }
  return num;
}

/**
 * Formatiert ein Datum in eine Zeichenkette (Format dd.mm.yyyy) um.
 * @param date Datum
 */
function formatDate(date) {
  var s='';
  ///
  s=(date.getDate()<10?'0':'')+date.getDate()+'.'+(date.getMonth()<9?'0':'')+(date.getMonth()+1)+'.'+date.getFullYear();
  return s;
}

/**
 * Prueft den Inhalt eines Textfelds auf ein gueltiges Datum. Unterstuetzt
 * werden dabei unterschiedliche Eingabeformate:
 * - Als Trennzeichen werden Komma, Punkt, Querstrich und Bindestrich akzeptiert.
 * - Die Reihenfolge kann entweder mit dem Tag oder mit dem Jahr beginnen; damit
 *   der erste Teil als Jahr erkannt wird, muss er groesser als 31 sein
 * - Zweistellige Jahreszahlen >50 werden zu 1900, alle anderen zu 2000 addiert
 * @param field Textfeld
 */
function checkDateField(field) {
  var today=new Date();
  var tokens=tokenize(field.value,',./-');
  var defaults=new Array(today.getDate(),today.getMonth()+1,today.getFullYear());
  var clamps=new Array(new Array(1,31),new Array(1,12),new Array(0,9999));
  /// Leeres Feld ignorieren
  if (field.value=='') {
    return;
  }
  /// Rein numerische Eingabe ohne Trenner?
  if ((tokens.length==1)&&isNumeric(tokens[0])) {
    if ((tokens[0].length==6)||(tokens[0].length==8)) {
      tokens[0]=field.value.substring(0,2);
      tokens[1]=field.value.substring(2,4);
      tokens[2]=field.value.substring(4,field.value.length);
    }
    else if (tokens[0].length>2) {
      tokens.length=0;
    }
  }
  /// Jahreszahl an erster Stelle? Umdrehen ...
  if ((tokens.length!=0)&&isNumeric(tokens[0])&&(parseInt(tokens[0],10)>31)) {
    tokens.reverse();
  }
  /// Jahreszahl evtl. vervollstaendigen
  if ((tokens.length==3)&&(tokens[2].length==2)&&isNumeric(tokens[2])) {
    if (parseInt(tokens[2],10)>50) {
      tokens[2]='19'+tokens[2];
    }
    else {
      tokens[2]='20'+tokens[2];
    }
  }
  /// Numerische Teile parsen, die anderen entfernen
  for (var i=0;i<defaults.length;i++) {
    if ((tokens.length>i)&&isNumeric(tokens[i])) {
      tokens[i]=parseInt(tokens[i],10);
    }
    else {
      tokens[i]=defaults[i];
    }
  }
  /// Min./Max.-Werte anwenden
  for (var i=0;i<tokens.length;i++) {
    tokens[i]=Math.max(Math.min(tokens[i],clamps[i][1]),clamps[i][0]);
  }
  today=new Date(tokens[2],tokens[1]-1,tokens[0]);
  ///
  field.value=formatDate(today);
}


function cleary(box) {
  checkDateField(box);
  for (var i = 0;i < calendars.length;i++) {
    for (var j = 1;j < 32;j++) {
      var element = document.getElementById(calendars[i].id + j);
      if (element) {
        element.style.backgroundColor = '';
      }
    }
  }
  first = last = 0;
}

var sprache="d";

function Calendar(id,monthDelta) {
  var now = new Date();
  ///
  this.id = id;
  this.showForwardControl = true;
  this.showBackwardControl = true;
  this.date = new Date(now.getFullYear(),now.getMonth() + monthDelta,1);
}

function initCalendar(f,u,l) {
  sprache = l;
  var now = new Date();
  var sel = new Date(f.substring(7,11),f.substring(4,6),1);
  var div = (sel.getFullYear()-now.getFullYear())*12+sel.getMonth()-(now.getMonth()+1);
//alert(sel.getMonth()+'  '+(now.getMonth()+1)+'  '+sel.getFullYear()+'  '+div+'  '+now);
  if (div <=-20) {
    div=0;
  }
  calendars[0] = new Calendar('cal1',0+div);
  calendars[1] = new Calendar('cal2',1+div);
  calendars[0].showForwardControl = false;
  calendars[1].showBackwardControl = false;
  for (var i = 0;i < calendars.length;i++) {
    printCalendar(calendars[i]);
  }
}

function mark(id,day) {
  var cal;
  ///
  for (var i = 0;i < calendars.length;i++) {
    if (calendars[i].id == id) {
      cal = calendars[i];
      break;
    }
  }
  if (cal) {
    var date = new Date(cal.date.getFullYear(),cal.date.getMonth(),day);
    var dateCursor = new Date(cal.date.getFullYear(),cal.date.getMonth(),1);
    ///
    if (!first) {
      first = last = date;
    }
    else if (first.getTime() > date.getTime()) {
      first = date;
    }
    else if (last.getTime() < date.getTime()) {
      last = date;
    }
    else {
      first = last = 0;
    }
    if (!first) {
      document.forms['eveForm'].from.value = '';
      document.forms['eveForm'].until.value = '';
    }
    else {
      document.forms['eveForm'].from.value = formatDate(first);
      document.forms['eveForm'].until.value = formatDate(last);
    }
    for (var i = 0;i < calendars.length;i++) {
      dateCursor.setDate(1);
      dateCursor.setFullYear(calendars[i].date.getFullYear());
      dateCursor.setMonth(calendars[i].date.getMonth());
      ///
      for (var j = 1;j < 32;j++) {
        var element = document.getElementById(calendars[i].id + j);
        ///
        if (element) {
          dateCursor.setDate(j);
          if ((first) && (last) && (dateCursor.getTime() >= first.getTime()) && (dateCursor.getTime() <= last.getTime())) {
            element.style.backgroundColor = '#d0cdba';
          }
          else {
            element.style.backgroundColor = '';
          }
        }
      }
    }
  }
}

function switchBackward() {
  for (var i = 0;i < calendars.length;i++) {
    calendars[i].date.setMonth(calendars[i].date.getMonth() - 1);
    printCalendar(calendars[i]);
  }
}

function switchForward() {
  for (var i = 0;i < calendars.length;i++) {
    calendars[i].date.setMonth(calendars[i].date.getMonth() + 1);
    printCalendar(calendars[i]);
  }
}

function printCalendar(cal) {
  var monthName;
  var dayLabel;
  if (sprache == "e") {
    monthName = new Array('January','February','March','April','May','June','July','August','September','October','November','December');
    dayLabel = new Array('Mon','Tue','Wed','Thu','Fri','Sat','Sun');
  }
  else {
    monthName = new Array('Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember');
    dayLabel = new Array('Mo','Di','Mi','Do','Fr','Sa','So');
  }

  var MONTH_LABELS = monthName;
  var HEADER_LABELS = dayLabel;
  var CELL_WIDTH = 20;
  ///
  if (cal) {
    var contents = '';
    var today = new Date();
    var dateCursor;
    var rowCount = 0;
    ///
    dateCursor = new Date(cal.date.getFullYear(),cal.date.getMonth(),1);
    ///
    if (cal.showBackwardControl) {
      contents += '<div class="vkmonatab"><a href="javascript:switchBackward();" class="navCont">[ &lt;&lt; ]</a>&nbsp;<strong>' + MONTH_LABELS[cal.date.getMonth()] + ' ' + cal.date.getFullYear() + '</strong></div>';
    }
    if (cal.showForwardControl) {
      contents += '<div class="vkmonatab"><strong>' + MONTH_LABELS[cal.date.getMonth()] + ' ' + cal.date.getFullYear() + '</strong>&nbsp;<a href="javascript:switchForward();" class="navCont">[ &gt;&gt; ]</a></div>';
    }
    contents += '<table border="0" cellspacing="0" cellpadding="0">';
    contents += '<tr><td width="4" class="bgseparator"></td>';
    for (var i = 0;i < HEADER_LABELS.length;i++) {
      var style = 'vkdatum';
      ///
      if (i > 4) {
        style = 'vkdatum';
      }
      contents += '<td width="' + CELL_WIDTH + '" class="' + style + '" align="right" style="padding-top:4px;">' + HEADER_LABELS[i] + '</td>';
    }
    contents += '</tr>';
    ///
    while (dateCursor.getMonth() == cal.date.getMonth()) {
      contents += '<tr><td width="4" class="bgseparator"></td>';
      for (var i = 0;i < 7;i++) {
        var style = 'vkangaben';
        var dayOfWeek = (dateCursor.getDay() == 0 ? 6 : dateCursor.getDay() - 1);
        ///
        if (i > 4) {
          style = 'bgToWeekend';
        }
        if ((dayOfWeek > i) || (dateCursor.getMonth() != cal.date.getMonth())) {
          contents += '<td width="' + CELL_WIDTH + '" class="' + style + '"></td>';
        }
        else {
          ///
          if ((today.getDate() == dateCursor.getDate()) && (today.getMonth() == dateCursor.getMonth()) && (today.getFullYear() == dateCursor.getFullYear())) {
            style = 'bgToDay';
          }
          contents += '<td width="' + CELL_WIDTH + '" align="right" class="' + style + '" style="cursor: hand;padding: 4px 4px 4px 0px" id="' + cal.id + dateCursor.getDate() + '" onClick="mark(\'' + cal.id + '\',' + dateCursor.getDate() + ');"><span class="text">' + dateCursor.getDate() + '</span></td>';
          dateCursor.setDate(dateCursor.getDate() + 1);
        }
      }
      contents += '</tr>';
      rowCount++;
    }
    while (rowCount < 6) {
      contents += '<tr><td width="4" class="bgseparator"></td><td class="bgseparator" colspan="5"><span class="text">&nbsp;</span></td><td class="bghead" colspan="2"><span class="text">&nbsp;</span></td></tr>';
      rowCount++;
    }
    contents += '</table>';
//picwindow=window.open('','pic','toolbar=no,scrollbars=no,width=600,height=800,resizable=yes');
//picwindow.document.open('text/html');
//picwindow.document.writeln('<html>');
//picwindow.document.writeln('<body topmargin="0" marginheight="0" marginwidth="0" leftmargin="0">');
//picwindow.document.writeln(contents);
//picwindow.document.writeln('</body>');
//picwindow.document.writeln('</html>');
//picwindow.document.close();
    ///
    try {
      document.getElementById(cal.id).innerHTML = contents;
    }
    catch (ex) {
      alert(ex.name + ': ' + ex.message);
    }
    first = last = 0;
    document.forms['eveForm'].from.value = '';
    document.forms['eveForm'].until.value = '';
  }
}

function trim(s) {
  while (s.substring(0,1) == ' ') {
    s = s.substring(1,s.length);
  }
  while (s.substring(s.length-1,s.length) == ' ') {
    s = s.substring(0,s.length-1);
  }
  return s;
}

