function CompleteDate(s) {
 var r='';
 var c0=0;
 var dt=new Date();
 if(s) {
  c0=s.charCodeAt(0)
  if(c0==43 || c0==45) { //+-
   var n=0;
   if(!isNaN(s)) n=parseInt(s,10);
   dt.setTime(dt.getTime()+(n*86400000));
   var d = dt.getDate();
   var m = dt.getMonth()+1;
   var y = dt.getYear();
   if(y < 70) {y+=2000} else if(y < 1000) {y+=1900};
   r=d+'.'+m+'.'+y;
  } else {
   var i=0;

function dp() {
 var j=i;
 while((i<s.length) && (s.charCodeAt(i)>=48) && (s.charCodeAt(i)<=57)) ++i;
 var t=s.substring(j,i);
 ++i; // ein Trennzeichen überspringen
 if(isNaN(t)) return 0; else return parseInt(t,10);
}

   var d=dp(); if(!d) d=dt.getDate();
   var m=dp(); if(!m) m=dt.getMonth()+1;
   var y=dp(); if(!y) y=dt.getYear();
   if(y < 70) {y+=2000} else if(y < 1000) {y+=1900};
   r=d+'.'+m+'.'+y;
  }
 }
 return r;
}

function CompleteTime(s) {
 var r='';
 var c0=0;
 var dt=new Date();
 if(s) {
  c0=s.charCodeAt(0)
  if(c0==43 || c0==45) { //+-
   var n=0;
   if(!isNaN(s)) n=1;
   dt.setTime(dt.getTime()+(s*60000));
   var h = dt.getHours();
   var m = dt.getMinutes();
   if(h < 10){r='0'+h+':'+m;}
   else if(m < 10){r=h+':0'+m;}
   else{r=h+':'+m;}
  } else {
   var i=0;

function dp(nn) {
 var j=i;
 while((i<s.length) && (s.charCodeAt(i)>=48) && (s.charCodeAt(i)<=57)) ++i;
 var t=s.substring(j,i);
 ++i; // ein Trennzeichen überspringen
 if(isNaN(t))
 	return nn;
 else
 	return parseInt(t, 10);
}
   var h=dp(0);   if((h >= 24 || h < 0) || !h) h=0;
   var m=dp(0);   if((m >= 60 || m < 0) || !m) m=0;

   //alert((h >= 24 && h <= 0) || !h));

   if(h < 10 && m < 10){r='0'+h+':0'+m;}
   else if(h < 10 && m >= 10){r='0'+h+':'+m;}
   else if(m < 10 && h >= 10){r=h+':0'+m;}
   else{r=h+':'+m;}

   var n=dp(NaN);
   if(!isNaN(n)){
    if((n >= 60 || n < 0) || !n) n=0;
    if(n<10) {r=r+':0'+n;} else {r=r+':'+n;}
   }
  }
 }
 return r;
}

function InputDate(input, arg) {
 //<input onblur="InputDateExit(this);" onkeypress="return InputDate(this, arguments);" type="Text" name="d1" value="" size="10" maxlength="10"> Date<br />

 var d=46;
 var c=0;
 var c0=0;
 var t=input.value;

 if(window.event) {
  if(window.event.keyCode) {
   c=window.event.keyCode;
   if(t!='') c0=t.charCodeAt(0);
   if((c==44)||(c==46)||(c==47)) { //,./
    //window.event.keyCode=d; nur IE
    return true;
   } else
   if((c>=48)&&(c<58) || (c==8)) { //0123456789 Back
    return true;
   } else
   if((c==43)||(c==45)) { //+-  &&(t=='')
    input.value='';
    return true;
   } else
   if(c==13) {
    input.value=CompleteDate(t);
    return true;
   } else {
    //window.event.keyCode=0;
    return false;
   }
  }
 } else
 if(arg) {
  if(arg[0]) {
   if(arg[0].which) {
    c=arg[0].which;
    if((c==44)||(c==46)||(c==47)) { //,./
     //arg[0].which=d;
     return true;
    } else
    if((c>=48)&&(c<58) || (c==8)) { //0123456789 Back
     return true;
    } else
    if((c==43)||(c==45)) { //+-  &&(t=='')
     input.value='';
     return true;
    } else
    if(c==13) {
     input.value=CompleteDate(t);
     return true;
    } else {
     //arg[0].which=0;
     return false;
    }
   }
  }
 }
 return true;
}
function InputDateExit(input) {
 input.value=CompleteDate(input.value);
}

function InputTime(input, arg) {

 var d=58;
 var c=0;
 var c0=0;
 var t=input.value;

 if(window.event) {
  if(window.event.keyCode) {
   c=window.event.keyCode;
   if(t!='') c0=t.charCodeAt(0);
   if((c==44)||(c==46)||(c==58)) { //,.:
    //window.event.keyCode=d; nur IE
    return true;
   } else
   if((c>=48)&&(c<58) || (c==8)) { //0123456789 Back
    return true;
   } else
   if((c==43)||(c==45)) { //+-  &&(t=='')
    input.value='';
    return true;
   } else
   if(c==13) {
    input.value=CompleteTime(t);
    return true;
   } else {
    //window.event.keyCode=0;
    return false;
   }
  }
 } else
 if(arg) {
  if(arg[0]) {
   if(arg[0].which) {
    c=arg[0].which;
    if((c==44)||(c==46)||(c==58)) { //,.:
     //arg[0].which=d;
     return true;
    } else
    if((c>=48)&&(c<58) || (c==8)) { //0123456789 Back
     return true;
    } else
    if((c==43)||(c==45)) { //+-  &&(t=='')
     input.value='';
     return true;
    } else
    if(c==13) {
     input.value=CompleteTime(t);
     return true;
    } else {
     //arg[0].which=0;
     return false;
    }
   }
  }
 }
 return true;
}
function InputTimeExit(input) {
 input.value=CompleteTime(input.value);
}

function InputInt(input, arg) {
 //<input onkeypress="return InputInt(this, arguments);" type="Text" name="d1" value="" size="10" maxlength="10"> Int<br />

 var r=false;
 var c=-1;
 var t=input.value;

 if(window.event) {
  if(window.event.keyCode) {
   c=window.event.keyCode;
  }
 } else
 if(arg) {
  if(arg[0]) {
   if(arg[0].which) {
    c=arg[0].which;
   }
  }
 }
 if(c>=0) {
  if((c>=48)&&(c<58) || (c==8)||(c==10)) { //0123456789 Back Enter
   r=true;
  } else
  if(c==43) { //+
   if(t && t.charCodeAt(0)==45) input.value=t.substr(1,99);
  } else
  if(c==45) { //-
   if((t=='')||(t.charCodeAt(0)!=45)) {
    input.value='-'+t;
   } else {
    input.value=t.substr(1,99);
   }
  }
 } else {
  r=true;
 }
 return r;
}

function InputFloat(input, arg) {
 //<input onkeypress="return InputFloat(this, arguments);" type="Text" name="d1" value="" size="10" maxlength="10"> Float<br />
 var r=false;
 var c=-1;
 var t=input.value;

 if(window.event) {
  if(window.event.keyCode) {
   c=window.event.keyCode;
  }
 } else
 if(arg) {
  if(arg[0]) {
   if(arg[0].which) {
    c=arg[0].which;
   }
  }
 }
 if(c>=0) {
  if((c>=48)&&(c<58) || (c==44)||(c==46) || (c==8)||(c==10)) { //0123456789 ,. Back Enter
   r=true;
  } else
  if(c==43) { //+
   if(t && t.charCodeAt(0)==45) input.value=t.substr(1,99);
  } else
  if(c==45) { //-
   if((t=='')||(t.charCodeAt(0)!=45)) {
    input.value='-'+t;
   } else {
    input.value=t.substr(1,99);
   }
  }
 } else {
  r=true;
 }
 return r;
}

function cbClick(cb) {
 //evtl. onClick ausführen
 var on=cb.attributes['onClick2']; //Firefox
 if(!on) on=cb.attributes['onclick']; // IE
 if(on) {
  var ons=on.value;
  if(!ons) ons=String(on);
  if(document.getElementById && cb.id) {
   ons=ons.replace(/this/, 'document.getElementById("'+cb.id+'")');
  } else
  if(document.getElementById && cb.name) {
   ons=ons.replace(/this/, 'document.getElementsByName("'+cb.name+'")[0]');
  }
  eval(ons);
 }
}
function onCbClick(self) {
 //span.cb, label.cb {white-space: nowrap;}
 //<span class="cb"><input type="checkbox" name="aCheckBox" value="1"><label for="aCheckBox" onClick="return onCbClick(this);">Label</label></span>
 //mit <input id> statt name geht das automatisch ...

 if(self.attributes) {
/*
    s='';
    for(i=0; i<self.attributes.length; ++i) {
     a=self.attributes[i];
     s=s+a+" : "+a.name+" => "+a.value+"\r\n"
    }
    alert(s);
*/
  var a=self.attributes['for'];
  var fc;
  var cb;
  if(a) {
   if(document.getElementById) {
    cb=document.getElementById(a.value);
    if(cb) {
     cb.checked=!cb.checked; //Checked umkehren
     cbClick(cb); //evtl. onClick ausführen
     return null;
    }
   }
   if(document.getElementsByName) {
    fc=document.getElementsByName(a.value);
    if(fc.length==0) {
     fc=document.getElementsByName(String(a)); //IE 5.5 kein a.value
    }
    if(fc.length==0) {
    } else
    if(fc.length==1) {
     fc[0].checked=!fc[0].checked; //Checked umkehren
     cbClick(fc[0]); //evtl. onClick ausführen
    } else {
     //RadioButton?  ab IE5 N6
     if(self.previousSibling) {
      var ps=self.previousSibling;
      if(ps.name==a.value) {
       ps.checked=true;
       //ToDo: cbClick geht nur für eindeutigen Namen
      }
     }
    }
   }
  }
 }
 return null;
}
