//generic functions
function UA(){
 var t=this,nv=navigator,n=nv.userAgent.toLowerCase();
 t.win=n.indexOf('win')>=0;
 t.mac=n.indexOf('mac')>=0;
 t.DOM=document.getElementById?true:false;
  t.dynDOM=document.createel&&document.addEventListener;
 t.khtml=nv.vendor=='KDE';
 var idx=n.indexOf('opera');
 t.opera=idx!=-1;
 if(t.opera){t.vers=parseFloat(n.substr(idx+6));
 t.major=Math.floor(t.vers);
 t.opera5=t.major==5;
 t.opera6=t.major==6;
 t.opera7=t.major==7;
 t.opera7up=t.vers>=7;
 }t.oldOpera=t.opera5||t.opera6;
 idx=n.indexOf('msie');
 if(idx>=0&&!t.opera&&!t.khtml){
 t.vers=parseFloat(n.substr(idx+5));
 t.ie3down=t.vers<4;
 t.ie=t.ie4up=document.all&&document.all.item&&!t.ie3down;
 t.ie5up=t.ie&&t.DOM;
 t.ie55up=t.ie&&t.vers>=5.5;
 t.ie6up=t.ie&&t.vers>=6;
 t.ie7up=t.ie&&t.vers>=7;
 }
 t.cm=document.compatMode;
 t.css1cm=t.cm=='CSS1Compat';
 t.nn4=nv.appName=="Netscape"&&!t.DOM&&!t.opera;
 if(t.nn4)t.vers=parseFloat(nv.appVersion);
 t.moz=t.nn6up=t.gecko=n.indexOf('gecko')!=-1&&!t.mac;
 if(t.gecko)t.vers=parseFloat(n.substr(n.indexOf('rv:')+3));
 t.nn7up=t.gecko&&t.vers>1;
 t.hj=n.indexOf('hotjava')!=-1;
 t.aol=n.indexOf('aol')!=-1;
 t.aol4up=t.aol&&t.ie4up;
 t.major=Math.floor(t.vers);
 t.supp=t.supported=t.oldOpera||t.opera7up||t.ie||t.moz||t.nn4||t.DOM;
 };
function Undef(o){
 return typeof(o)=='undefined'||o==''||o==null;
};
function Def(o){
 return!Undef(o);
};

var ua=new UA();

function getElement (d, m, id, n) {
  var el, elList;
  if (ua.DOM) {
    if (m.toLowerCase() == "id") {
      el = d.getElementById(id);
      if(!el) el=false;
      return el;
    }
    if (m.toLowerCase() == "name") {
      elList = d.getElementsByName(id);
      el = elList[n];
      if(!el) el=false;
      return el;
    }
    if (m.toLowerCase() == "tagname") {
      elList = d.getElementsByTagName(id);
      el = elList[n];
      if(!el) el = false;
      return el;
    }
    return false;
  }
  if (ua.ie4up) {
    if (m.toLowerCase() == "id" || m.toLowerCase() == "name") {
      el = d.all(id);
      if(!el) el = false;
      return el;
    }
    if (m.toLowerCase() == "tagname") {
      elList = d.all.tags(id);
      el = elList[n];
      if(!el) el = false;
      return el;
    }
    return false;
  }
  if (ua.nn4) {
    if (m.toLowerCase() == "id" || m.toLowerCase() == "name") {
      el = d[id];
      if(!el) el = d.anchors[id];
      if(!el) el = false;
      return el;
    }
    if (m.toLowerCase() == "layerindex") {
      el = d.layers[id];
      if(!el) el = false;
      return el;
    }
    return false;
  }
  if(d.forms.item){
   for(var i=0;d.forms.item(i)!=null;++i){
    if(d.forms.item(i).namedItem&&d.forms.item(i).namedItem(id)) return d.forms.item(i).namedItem(id);
    if(d.forms.item(i).elements&&d.forms.item(i).elements[id]) return d.forms.item(i).elements[id];
   }
  }
  for(var form in d.forms){
   if(d.forms[form].elements&&d.forms[form].elements[id]) return d.forms[form].elements[id];
  }
  return false;
}

function getAttribute (d, m, id, n, an) {
  var a;
  var el = getElement(d, m, id, n);
  if (!el) return false;
  if (ua.DOM || ua.ie4up) {
    a = el.getAttribute(an);
    return a;
  }
  if (ua.nn4) {
    a = el[an]
    if (!a) a = false;
    return a;
  }
  return false;
}


function moveObj(o,x,y){
 o.style.top=y;
 o.style.left=x;
 o.style.visibility='visible';
};
function alignRight(n){
 return n<10?("0"+n):(""+n);
};

function formatTime(t){
 with(Math){
  r=floor(t);
  s=floor((t-r)*3600);
  r=r>=24?r-24:r;
  r+=":"+alignRight(floor(s/60));
  r+=":"+alignRight(s%60);
 }
 return r;
};
function formatDeg(t,k){
 with(Math){
  t=t/PI*180;
  r=floor(t);
  s=floor((t-r)*3600);
  r+=floor(s/60)>9?k+floor(s/60):k+"0"+floor(s/60);
 }
 return r;
};
function formatDate(f,d,m,y){
 var s=f;
 d=alignRight(d);
 s=s.replace("dd",d);
 m++;
 m=alignRight(m);
 s=s.replace("MM",m);
 s=s.replace("yyyy",y);
 return s;
};
function checkDate(y,m,d){
 var t=new Date(y,m,d,12);
 if(t.getFullYear()/1!=y/1||t.getMonth()/1!=m/1||t.getDate()/1!=d/1)return false;
 return true;
};
function errorOut(e,i,x){
 alert(e[0]+"\n"+e[i]+x);
}

function getEndTag(h,ss,et){
 var s=0;
 var e=h.indexOf(et);
 if(e<0) return e;
 while(s<e){
  s=h.indexOf(ss,s+1);
  if(s<0||s>=e)break;
  e=h.indexOf(et,e+1);
  if(e<0)break;
 }
 return e+et.length;
}

function getTag(h){
 var ss=h.match(/<\w+/);
 var r={tag:"",rest:""};
 ss=ss?ss.toString():"";
 if(ss=="") {
  r.tag=h;
  r.rest="";
  return r;
 }
 if(h.indexOf(ss)>0){
  r.tag=h.substr(0,h.indexOf(ss));
  r.rest=h.substr(h.indexOf(ss));
  return r;
 }
 var tag=h.substr(0,h.indexOf(">")+1);
 var endtag="</"+ss.substr(1)+">";
 var et=getEndTag(h,ss,endtag);
 if(et<0){
  r.tag=tag;
  r.rest=h.substr(tag.length);
  return r;
 }else{
  r.tag=h.substr(0,et);
  r.rest=h.substr(et);
  return r;
 }
 return r;
}

function setAttr(node,tag){
 var a=tag.match(/\b[a-z]+="[^"]+"/gi);  //"
 if(Undef(a))return;
 for(var i=0;i<a.length;i++){
  var p=a[i].replace(/^([a-z]+)=(.+)$/i,"$1");
  var v=a[i].replace(/^([a-z]+)="(.+)"$/i,"$2");
  node.setAttribute(p,v);
 }
}

function createNodes(p,html){
 var tags=new Array();
 var rest=html;
 var typ="";
 while(rest!=""){
  var pair=getTag(rest);
  tags[tags.length]=pair.tag;
  rest=pair.rest;
 }
 for(var i=0;i<tags.length;i++){
  if(tags[i].match(/<\w+/)){
   //create an element
   var tag=tags[i].substr(0,tags[i].indexOf(">")+1);
   //typ=tag.substr(1);
   //typ=typ.indexOf(" ")<0?typ.substr(0,typ.length-1):typ.substr(0,typ.indexOf(" "));
   typ=tag.match(/\w+\b|>{1,1}/);
   var newNode=document.createElement(typ);
   //set Attr
   setAttr(newNode,tag);
   inside=tags[i].match(/<\//)?tags[i].substring(tag.length,tags[i].lastIndexOf("</")):"";
   if(inside!=""){
    createNodes(newNode,inside);
   }
  }else{
   var newNode=document.createTextNode(tags[i]);
  }
  p.appendChild(newNode);
 }
}

function setHtml(e,h){
 if(typeof(e.innerHTML)!='undefined'&&e.innerHTML!=null){
  e.innerHTML=h;
  return true;
 }
 if(ua.nn4){
  e.document.open();
  e.document.write(h);
  e.document.close();
  return true;
 }
 if(ua.DOM){
  var tmp=e.cloneNode(false);
  createNodes(tmp,h);
  for(var i=0;i<e.childNodes.length;i++)e.removeChild(e.firstChild);
  for(i=0;i<tmp.childNodes.length;i++)e.appendChild(tmp.childNodes[i]);
  tmp=null;
  return true;
 }
 return false;
}
function showFoto(Adresse) {
  var w=screen.availWidth>1200?1200:screen.availWidth;
  Fenster = window.open(Adresse, "ShowFoto", "width="+w+",height=550,left=0,top=20,scrollbars=yes");
  Fenster.focus();
}
function getText(n){
    var max=n.childNodes.length
    var retval="";
    if(n.nodeType==3)return n.nodeValue+";;";
    for(var i=0;i<max;i++){
      retval+=getText(n.childNodes[i]);
    }
    return retval;
}
function checkDateFormat(s,f){
 f=f.toLowerCase();
 var l=f.match(/\W/);
 if(Undef(l))return false;
 if(l.length!=1)return false;
 if(f.indexOf("dd")==-1||f.indexOf("mm")==-1||f.indexOf("yy")==-1)return false;
 var tmp=f.replace(/dd|mm/g,"\\d{1,2}");
 f=tmp;
 tmp=f.replace(/y/g,"\\d");
 f=tmp;
 tmp=f.replace(/\./g,"\\.");
 var re=new RegExp(tmp);
 if(s.search(re)==-1) return false;
 return true;
}
function parseDate(s,f){
 if(!checkDateFormat(s,f))return false;
 f=f.toLowerCase();
 var r=new Array();
 var p=true;
 var l=f.match(/\W/);
 var da=s.split(l[0]);
 var fa=f.split(l[0]);
 for(var i=0;i<fa.length;i++){
  switch (fa[i]){
   case "dd": r[0]=da[i];break;
   case "mm": r[1]=da[i]-1;break;
   case "yy": r[2]=da[i];break;
   case "yyyy": r[2]=da[i];break;
   default: p=false;
  }
 }
 if(!p)return false;
 return r;
}
function validateDate(s,f,e){
 var di=parseDate(s,f);
 if(!di){
  alert(e[0]);
  return false;
 }
 var r=checkDate(di[2],di[1],di[0]);
 if(r)return true;
 alert(e[1]);
 return false;
}
function replaceImage(img,url){
 img.src=url;
}

