
// eine Klasse, mit der man den derzeitigen Browser herausfinden kann
function Browser()
{
	d=document;
	this.agt=navigator.userAgent.toLowerCase();
	this.major = parseInt(navigator.appVersion);
	this.dom=(d.getElementById)?1:0;
	this.ns=(d.layers);
	this.ns4up=(this.ns && this.major >=4);
	this.ns6=(this.dom&&navigator.appName=="Netscape");
	this.op=(window.opera? 1:0);
	this.ie=(d.all);
	this.ie4=(d.all&&!this.dom)?1:0;
	this.ie4up=(this.ie && this.major >= 4);
	this.ie5=(d.all&&this.dom);
	this.win=((this.agt.indexOf("win")!=-1) || (this.agt.indexOf("16bit")!=-1));
	this.mac=(this.agt.indexOf("mac")!=-1);
};



/*
  eine kleine Funktion, um die alle Vorkommen einer Zeichenfolge
  in einer anderen Zeichenfolge, durch eine dritte Zeichenfolge 
  zu ersetzen!
*/
function str_replace(strSearch, strReplace, str){
  
  var pos = 0;
  var ret  = str;
  pos = ret.indexOf(strSearch,pos);
  
  while(pos != -1){
    ret = ret.substring(0,pos) + strReplace + ret.substring(pos+strSearch.length,ret.length);
    pos = ret.indexOf(strSearch,pos+strReplace.length);
  }
  return ret;
}




/*
  Fügt so lange einen String (str) an einen anderen String (origStr)
  vorne dran, bis die geforderte Länge (len) erreicht wird.
  Das Ergebnis wird dann zurückgegeben.
*/
function makeLeading(origStr, len, str){
  
  if(typeof(origStr) == "undefined")
    return '';
  
  if( typeof(len) == "undefined" || len < 0 || len < origStr.length)
    return origStr;
  
  if( typeof(str) == "undefined" )
    str = " ";
  
  var strToAdd = '';
  while((strToAdd.length +origStr.length) < len){
    strToAdd += str;
  }
  
  var diff = strToAdd.length + origStr.length - len;
  if( diff > 0){
    strToAdd = strToAdd.substr(0, len-origStr.length);
  }
  return strToAdd + origStr;
}


/*
  liefert jetzigen Zeitpunkt als Array mit 6 Elementen (0-5)
  0: Jahr; YYYY (%Y)
  1: Monat; mm (%m)
  2: Tag; dd (%d)
  3: Stunde; HH (%H)
  4: Minute; MM (%i)
  5: Sekunden; SS (%S)
  
  Alle Werte sind vom Typ String.
  Das Jahr ist 4-stellig, der Rest 2-stellig.
  
*/
function getNow(){
  var now = new Date();
  
  return new Array(now.getFullYear(), makeLeading((now.getMonth()+1).toString(), 2, "0"),
    makeLeading(now.getDate().toString(), 2, "0"), makeLeading(now.getHours().toString(), 2, "0"),
    makeLeading(now.getMinutes().toString(), 2, "0"), makeLeading(now.getSeconds().toString(), 2, "0"));
}



/*
  Funktion um Passwörter anzuzeigen
*/
function togglePWD(idOfButton, idOfPwdField, showText, hideText){
  if( typeof(idOfButton) == "string")
    objButton=document.getElementById(idOfButton);
  else
    objButton = idOfButton;
  
  if( typeof(idOfPwdField) == "string")
    objPwd=document.getElementById(idOfPwdField);
  else
    objPwd = idOfPwdField;
  
  if( objPwd.type.toLowerCase() == "password"){
    objButton.value=hideText;
    objPwd.type="text";
  }else{
    if( objPwd.type.toLowerCase() == "text"){
      objButton.value=showText;
      objPwd.type="password";
    }
  }
}



/*
  Funktion zum rekursiven Durchlaufen der Menüstruktur!
  Braucht globale Variablen: _cm_localImageDir & _cm_txtForFurtherMenue
*/
function createMyCookMenue(basicArray, level){
  
  if( typeof(level) == "undefined"){
    level = 0;
  }
  level ++;
  
  var ret = new Array();
  var loopDone = false;
  
  for( var i =0; i<basicArray.length; i++)
  {
    if(basicArray[1] == "{LINESEPARATOR}"){
      return _cmSplit;
      continue;
    }
    
    if( typeof(basicArray[i]) == "object"){
      ret.push( createMyCookMenue(basicArray[i], level));
    }else{
      
      if( !loopDone ){
        loopDone = true;
        
        if(level==2 ){
          var imageUrl = '<img align="middle" src="'+_cmcm_localImageDir+'/menue/mid_' + basicArray[0]+'.gif" />&nbsp;';
    		}else{
    		  var imageUrl = '';
    		}
    		
        if( basicArray.length <= 3){
          ret[0] = imageUrl;
          ret[1] = "<span style='vertical-align:middle'>"+basicArray[1]+"</span>";       // name
          ret[2] = basicArray[2];       // url
          ret[3] = '_self';             // wo das Ziel geöffnet werden soll (in neuem Fenster, Frame, usw.)
          ret[4] = basicArray[2];       // description
        }else{
          ret[0] = imageUrl;
          ret[1] =  "<span style='vertical-align:middle'>"+basicArray[1]+"</span>";       // name
          ret[2] = null;
          ret[3] = null;
          ret[4] = _cmcm_txtForFurtherMenue;
        }
      }
    }
  }
  return ret;
}




// Funktion, die ein gültiges XMLHTTP-Request-Objekt zurückgibt!
function getXMLRequester( )
{
    var xmlHttp = false;
            
    // try to create a new instance of the xmlhttprequest object        
    try
    {
    		// Mozilla, Opera und Safari
    		if( window.XMLHttpRequest )
        {
            xmlHttp = new XMLHttpRequest();
        }else
        // Internet Explorer
        if( window.ActiveXObject )
        {
            for( var i = 5; i; i-- )
            {
                try
                {
                    // loading of a newer version of msxml dll (msxml3 - msxml5) failed
                    // use fallback solution
                    // old style msxml version independent, deprecated
                    if( i == 2 )
                    {
                        xmlHttp = new ActiveXObject( "Microsoft.XMLHTTP" );    
                    }
                    // try to use the latest msxml dll
                    else
                    {
                        
                        xmlHttp = new ActiveXObject( "Msxml2.XMLHTTP." + i + ".0" );
                    }
                    break;
                }
                catch( excNotLoadable )
                {                        
                    xmlHttp = false;
                }
            }
        }
    }
    // loading of xmlhttp object failed
    catch( excNotLoadable )
    {
        xmlHttp = false;
    }
    return xmlHttp ;
}



/**
 * kleine Debug-Funktion
 */
function my_print(o,maxCnt){
	if(typeof(maxCnt)=="undefined") maxCnt=10;
	alert(__my_print(o,maxCnt,"",0));
}
function __my_print(o,maxCnt,prefix,cnt){
	if( cnt<maxCnt && (typeof(o)=="object" || typeof(o)=="array") && typeof(o)!="string" && typeof(o)!="number" ){
		var tmp="";
		for(var i in o){
			if( cnt+1<maxCnt && ((typeof(o[i])=="object" || typeof(o[i])=="array")) ){
				tmp+=(prefix?(prefix+" "):"")+i+":\n"+__my_print(o[i],maxCnt,prefix+"__",cnt+1)+" ";
			}else{
				tmp+=(prefix?(prefix+" "):"")+i+": "+o[i]+"\n";
			}
		}
	}else{
		tmp=o;
	}
	return tmp
}


/**
 * selektiert Checkboxen anhand einer Form und eines Such-Ausdrucks; name-
 * Attribut der Checkboxen; müssen alle mit dem Such-Ausdruck beginnen
 */
function markAllCheckboxesByForm(f,searchInName){
	var arr=f.elements;
	var tmp="";
	var firstState=false;
	var firstPassed=false;
	for(i in arr){
		try{
			if(arr[i].type.toLowerCase()=="checkbox" && arr[i].name.substr(0,searchInName.length)==searchInName){
				if(!firstPassed){
					firstState=arr[i].checked;
					firstPassed=true;
				}
				arr[i].checked=!firstState;
			}
		}catch(e){}
	}
}


