var DEBUG= 0;
var iINF = 1;
var iWRN = 2;
var iERR = 3;
var slogs= "";

var dSiteBegin       = new Date();
var adSiteOnLoadBegin= new Array();
var dSiteOnLoadBegin = null;
var searchValue="";

function getSearchText(){
  return this.searchValue;
}

function setSearchText(text){
  this.searchValue=text;
}
function setSearchTextOnLoad(){
  var searchField = document.getElementById('panelForm:inputFullText');
  if (searchField  != null)
  this.searchValue=searchField.value;
}


function timestamp(s)
{
    this.s = s;
    this.d = new Date();
}
function onbeginonload(s)
{
    if(adSiteOnLoadBegin.length < 1)
        dSiteOnLoadBegin = new Date();
    adSiteOnLoadBegin.push(new timestamp(s));
}

function onendonload()
{
   
    var endload = new Date();
    var diff    = new Date();
    var s = "";
    
    for(i=0; i < adSiteOnLoadBegin.length; i++)
    {
        if(i==0)
            s += ("dauer:\t"+((adSiteOnLoadBegin[i].d) - dSiteBegin)+"\t("+i+")\t("+adSiteOnLoadBegin[i].s+")\n");
        else
            s += ("dauer:\t"+((adSiteOnLoadBegin[i].d) - (adSiteOnLoadBegin[i-1].d))+"\t("+i+")\t("+adSiteOnLoadBegin[i].s+")\n");
        /*
        diff.setTime(Math.abs(endload.getTime() - (adSiteOnLoadBegin[i]).getTime()));
        var timediff = diff.getTime();
        weeks = Math.floor(timediff / (1000 * 60 * 60 * 24 * 7));
        timediff -= weeks * (1000 * 60 * 60 * 24 * 7);
        days = Math.floor(timediff / (1000 * 60 * 60 * 24)); 
        timediff -= days * (1000 * 60 * 60 * 24);
        hours = Math.floor(timediff / (1000 * 60 * 60)); 
        timediff -= hours * (1000 * 60 * 60);
        mins = Math.floor(timediff / (1000 * 60));
        timediff -= mins * (1000 * 60);
        secs = Math.floor(timediff / 1000); 
        timediff -= secs * 1000;
        s += (mins + " minutes til siteonloadbegin("+i+")\n" + secs + " seconds til siteonloadbegin("+i+")\nrest:"+timediff+" til siteonloadbegin("+i+")\n");
        */
    }
    //s += ("dauer: "+(endload - dSiteOnLoadBegin)+" (onload-dauer)\n");
    s += ("dauer:\t"+(endload - dSiteBegin)+"\t(site-lade-dauer-summe gesamt)");
    
    alert(s);
}
function selectHitListDropDownAction(selectElement)
{
    selectElement.form.submit();
    //if(selectElement.value==1)
}
function removesessionid(s)
{
    return s.replace(/;jsessionid=\w+/gi, "");
}
function getDocRelUrl()
{
    if(trim(getparam("xsltfilename", getelement("documentwindow").src)) != "")
    {
        return getparam("xsltfilename", getelement("documentwindow").src);
    }
    var sMyPath = getpath(self.location.href)+"/";
    var sDocUrl = getelement("documentwindow").src;
    sDocUrl = sDocUrl.replace(sMyPath, "");
    sMyPath = getpath(getpath(self.location.href))+"/";
    return removesessionid(sDocUrl.replace(sMyPath, ""));
}

function doSHIDownload(sUrl){
    var body = document.getElementsByTagName("body")[0];
    var ifr  = document.createElement("iframe");
    ifr.height = "0";   
    ifr.width = "0";    
    body.appendChild(ifr);
    ifr.src = sUrl;
}

function selectDocumentAction(selectElement, sISBN, sFN, sAli, sAnchor, sTitle,sDocType)
{
    if(selectElement.value.toLowerCase() == "pdf")
    {
        openFeatPopup(12, './weka/static/wmhtml2pdf.jsp?fn='+getDocRelUrl()+"&isbn="+sISBN+"&alias="+sAli+"&anchor="+sAnchor+"&doctype="+sDocType+"&title="+sTitle+"#"+sAnchor, 'pdf2html', 'dependent=yes,width=400,height=400,resizable=yes,scrollbars=yes,menubar=no,status=yes');
        return false;
    }
    if((selectElement.value.toLowerCase() == "favourite") || (selectElement.value.toLowerCase() == "favourites"))
    {
        openFeatPopup(12, './weka/static/wmfavourites.html?fn='+getDocRelUrl()+"&isbn="+sISBN+"&alias="+sAli+"&anchor="+sAnchor+"&doctype="+sDocType+"&title="+sTitle+"#"+sAnchor, 'favourites', 'dependent=yes,width=700,height=200,resizable=yes,scrollbars=yes,menubar=no,status=yes');
        return false;
    }
    //Do nothing
    if(selectElement.value==1)
    {
        return;
    }
    
    //Print it
    if(selectElement.value==2)
    {
        if(frames['documentwindow'].location.href.toLowerCase().indexOf("q=") > 0)
        {
            var sUrl = setparam(frames['documentwindow'].location.href, "q","");
            sUrl = setparam(sUrl, "printyourself","1");
            doSHIDownload(sUrl);
            return;
        }
        frames['documentwindow'].focus();
        frames['documentwindow'].print();
        selectElement.value=1;
        return;
    }
    
    //Send it as PDF
    if(selectElement.value==3)
    {
        alert('Nun würde ein Download des Dokuments erfolgen');
        selectElement.value=1;
        //document.forms['documentSelected'].submit();
    }
    
    //Add to Favorites
    if(selectElement.value==4)
    {
        document.forms['documentSelected'].submit();
        selectElement.value=1;
    }
    
    //Send it per EMail
    if(selectElement.value==5)
    {
        alert('Nun würde das Dokument als Email versendet werden');
        selectElement.value=1;
        //document.forms['documentSelected'].submit();
    }
}

function selectTreeFilterAction(selectElement){
    document.forms['outlookform'].submit();
        
    }





function getelement(sValue)
{
    var getElementx = document.getElementById(sValue);
    if (getElementx == null)
    {
        getElement1x = document.getElementsByName(sValue);
        if (getElement1x.length == 0)
            return null;
        getElementx = getElement1x[0];
    }
    return getElementx;
}

function spezialSearchPopUp(start)
{
    alert("is in");
        var implodeDiv = document.getElementById('exps');
	var popupDivSps = document.getElementById('sps');
	popupDivSps.style.top = getPosTop(start)+23;
	popupDivSps.style.left = getPosLeft(start)-581;
	
        var popupIframe = document.getElementById('frameSps');
	popupIframe.style.top = getPosTop(start)+25;
	popupIframe.style.left = getPosLeft(start)-581;

        if(implodeDiv.style.display!='none')
        {
            dojo.lfx.implode("exps",start, 500).play();
            dojo.lfx.implode("frameExps", start, 500).play();
        }	
	if(popupDivSps.style.display=='none')
	{
            dojo.lfx.explode(start,"frameSps", 500).play();
            dojo.lfx.explode(start,"sps", 500).play();
	}
	else 
        {
            dojo.lfx.implode("sps", start, 500).play();
            dojo.lfx.implode("frameSps", start, 500).play();
	}
        //Spez_WebNG_V1.0.pdf, page 12:
        //>>Wählt der Nutzer erneut die erweiterte Suche, so sollen die einzelnen Felder so
        //>>erscheinen, wie dies per default definiert ist;
        //var ofrm = getelement("expandedsearchform");
        //if (ofrm)   ofrm.reset();
}

function getElementsByClassName(myName){
    var CONTROLS = ["TABLE", "A"];
    var result = [];
    var searchExpression = new RegExp( "\\b" + myName + "\\b" );
    for (var i = 0; i < CONTROLS.length;i++)
    {
     var objects = document.getElementsByTagName(CONTROLS[i]);
     for (var j = 0; j < objects.length;j++) {
         if (objects[j].className.match(searchExpression)) {
             result.push(objects[j]);
         }
     }
    }
    return result;
}


//*** Scroll the Div to the selected Treenode ***
function shiJump2searchword(styleClassTarget, elementId, iScrollTop)
{
    var classElemets = getElementsByClassName(styleClassTarget);
    if(classElemets[0] == null)
    {	
	    return;
    }
    classElemets[0].scrollIntoView(true);
    var divTreeElement = document.getElementById(elementId);
    if(iScrollTop > 0 && divTreeElement.scrollTop>iScrollTop)
    {
     divTreeElement.scrollTop = divTreeElement.scrollTop-iScrollTop;
    }
    divTreeElement.scrollLeft = '0px'; 
    var topWin = getWebAppTop();
    //document.getElementById('outlookform:treeAreaDiv2').scrollTo(20,20);
}

function resizeRow(thisElement)
{
    thisElement.style.cursor='e-resize';
    setResizeColumns(
        thisElement, 
        thisElement,
        thisElement
    );
}


//*** Helpfunctions ****

function getPosLeft(element)
{
    if (element == null)
	return 0;
    var el = element;
    var posL = 0;
    var stri =element.id+"\n";
    while(el)
    {
     stri=stri+"ID: "+el.id+"Type: "+el.tagName+", Left: "+el.offsetLeft+"\n";
        posL += el.offsetLeft;
        el = el.offsetParent;
    }
   // alert(stri);
   
    return posL;
}

function getPosTop(element)
{
    var el = element;
    var posTop = 0;
    while(el)
    {
        posTop += el.offsetTop;
        el = el.offsetParent;
    }
    return posTop;
}
function getFormElementFromType(frm, sType)
{
    if(frm == null) return null;
    sType = sType.toLowerCase();
    var iElems = frm.elements.length;
    var i=0;
    for(i=0; i < iElems; i++)
    {
        if(frm.elements[i].type.toLowerCase() == sType)
            return frm.elements[i];
    }
    return null;
}
function getFormElement(frm, s)
{
    if(frm == null) return null;
    s = s.toLowerCase();
    var iElems = frm.elements.length;
    var i=0;
    for(i=0; i < iElems; i++)
    {
        if(frm.elements[i].name.toLowerCase() == s)
            return frm.elements[i];
        if(frm.elements[i].name.toLowerCase().indexOf(":"+s) > -1)
            return frm.elements[i];
    }
    return null;
}
function onChangeListCH(elem, sList)
{
    if(elem.checked == false)   return;
    elem = getFormElement(elem.form, sList);
    if(!elem)   return;
    var iOpts = elem.options.length;
    var i=0;
    for(i=0; i < iOpts; i++)
    {
        elem.options[i].selected = true;
    }
}
function expandedsearch_onsubmit_checkuserentry(elem, bDoSubmit)
{
    setSearchText("");
  
    elem = getFormElement(elem.form == null ? elem : elem.form, "text");
    if((elem != null) && (elem.value == ""))
    {
        if(bDoSubmit)alert("Tragen Sie einen Suchbegriff ein!");
        return false;
    }
    if(!bDoSubmit)
    {
        //var frm = ((elem.form == null) ? elem : elem.form);
        //alert("ok.1-->!submitform:"+frm.name);
        return true;
    }
    var frm = ((elem.form == null) ? elem : elem.form);
    //alert("ok.2-->submitform:"+frm.name);
    frm.submit();
    return false;
    var sbmt = getFormElementFromType(elem.form == null ? elem : elem.form, "submit");
    sbmt.focus();
    sbmt.click();
    return false;
    getFormElementFromType(elem.form == null ? elem : elem.form, "submit").click();
    var bRe = expandedsearchform_submit_clicked;
    expandedsearchform_submit_clicked = true;
    alert(bRe);
    return bRe;
}
function openFeatPopup(n, src, name, sFeatures, bBigPopup)
{
  try
  {
   if((sFeatures == null) || (sFeatures == ""))
       sFeatures = "dependent=yes,width=480,height=650,resizable=yes,menubar=no,status=yes";
    name = name.replace("-", "_");

    src = src.replace("ä", "%e4");
    src = src.replace("ö", "%f6");
    src = src.replace("ü", "%fc");
    src = src.replace("ß", "%df");
    src = src.replace("Ä", "%C4");
    src = src.replace("Ö", "%D6");
    src = src.replace("Ü", "%DC");

    win = window.open(src, name, sFeatures);

//    if(bBigPopup == true)
//        win.moveTo(300,5);
//    else
//        win.moveTo((screen.width/2)-300,(screen.height/2)-374);
    win.focus();
   }
   catch(e)
   {

   }
}
function removeparams(sUrl)
{
    var iPR = sUrl.indexOf('#');
    var iPQ = sUrl.indexOf('?');
    var iP = (iPR < 1) ? iPQ : iPR;
    if (iPQ > -1 && iPQ < iPR)
        iP = iPQ;
    if (iP < 0)  return sUrl;
    return sUrl.substring(0, iP);
}
function removeanchor(sUrl)
{
    var iPR = sUrl.indexOf('#');
    if (iPR < 0)  return sUrl;
    return sUrl.substring(0, iPR);
}
function getpath(sUrl)
{
    sUrl = removeparams(sUrl);
    var iLastSlash = sUrl.lastIndexOf('/');
    if (iLastSlash < 1)
    return sUrl;
    return sUrl.substring(0,iLastSlash);
}
function trim(sTxt)
{
  return sTxt.replace(/^\s*|\s*$/g,"");
}
function getfilename(sUrl)
{
    sUrl = removeparams(sUrl);
    var iLastSlash = sUrl.lastIndexOf('/');
    if (iLastSlash < 1)
    return sUrl;
    return sUrl.substring(iLastSlash+1);

}
function getextension(sUrl)
{
    sUrl = getfilename(sUrl);
    var iDot = sUrl.lastIndexOf('.');
    if (iDot < 1)
    return "";
    return sUrl.substring(iDot+1);
}
function setElementText(oElem, sTxt)
{
    if(!oElem)
    {
        dbg(iERR, "setElementText.ERR.0\n"+oElem+"\ntxt:"+sTxt);
        return false;
    }
    if(!sTxt)   sTxt = "";
    if(sTxt == "")  sTxt = " ";
    if (oElem.nodeValue)
    {
        //dbg(iINF, "setElementText.ok.1\n"+oElem+"\ntxt:\""+sTxt+"\"\nfirstchild:"+oElem.firstChild+"==>child.nodeval:"+((oElem.firstChild==null) ? "null" : oElem.firstChild.nodeValue)+"\ninnertxt:"+oElem.innerText+"\n"+oElem.nodeValue);
        oElem.nodeValue = sTxt;
        return true;
    }
    if (oElem.firstChild/* && oElem.firstChild.nodeValue*/)
    {
        //dbg(iINF, "setElementText.ok.2\n"+oElem+"\ntxt:\""+sTxt+"\"\nfirstchild:"+oElem.firstChild+"==>child.nodeval:"+((oElem.firstChild==null) ? "null" : oElem.firstChild.nodeValue)+"\ninnertxt:"+oElem.innerText+"\n"+oElem.nodeValue);
        oElem.firstChild.nodeValue = sTxt;
        return true;
    }
    if (oElem.innerText)
    {
        oElem.innerText = sTxt;
        return true;
    }
    dbg(iERR, "setElementText.ERR.1\n"+oElem+"\ntxt:\""+sTxt+"\"\nfirstchild:"+oElem.firstChild+"==>child.nodeval:"+((oElem.firstChild==null) ? "null" : oElem.firstChild.nodeValue)+"\ninnertxt:"+oElem.innerText+"\n"+oElem.nodeValue);
    return false;
}
function setparam(sHref, sParam, sValue)
{
    if ((sParam == "") && (sValue == ""))
        return sHref;

    var iRaute = sHref.indexOf("#");
    if(iRaute == 0)
        return sHref;

    var sAnchor="";
    if(iRaute > 0)
    {
        sAnchor = sHref.substring(iRaute+1);
        sHref = sHref.substring(0, iRaute);
    }

    if (sValue == "")
        sHref = sHref.replace(sParam + "=" + getparam(sParam, sHref), "");
    else
    {
        // Get current Param
        var sParamNow = getparam(sParam, sHref);

        // Get limiter
        var limiter = "&";
        if (sHref.indexOf("?") < 0)
            limiter = "?";

        // Return URL with Param set
        if(sHref.indexOf(sParam + "=") > -1)
        {
            sHref = sHref.replace(sParam + "=" + sParamNow, sParam + "=" + sValue);
        }
        else
        {
            sHref = sHref + limiter + sParam + "=" + sValue;
        }
    }
    return sHref+"#"+sAnchor;
}
function getparam(sParName, sSearch)
{
    var iFr = sSearch.indexOf('?');
    if(iFr > -1)
        sSearch = sSearch.substring(iFr+1, sSearch.length);
    var parsarray = sSearch.split('&');
    var i=0;
    for(i=0; i < parsarray.length; i++)
    {
        var par = parsarray[i];
        var pararray = par.split('=');
        if((pararray.length == 2) && (pararray[0].toLowerCase() == sParName.toLowerCase()))
            return pararray[1];
    }
    return "";
}
function selectFavouritesDropDownAction(elem)
{
    if(elem.value == "")    return;
    elem.form.submit();
    //hinzugefürgt von Sattler Natalia. Wenn in der Aktionsliste ein element gewählt wird, so wird nach der aktionsbearbeitung wieder standart wert (index=0) gewählt
    elem.selectedIndex = 0;
}
function unselectlistitems(frm)
{
    if(frm == null) return;
    for(var i=0; i < frm.elements.length; i++)
    {
        if(frm.elements[i].type.toLowerCase() == "text")
        {
            frm.elements[i].value = "";
            continue;
        }
        if((frm.elements[i].type.toLowerCase() != "select-multiple") && (frm.elements[i].type.toLowerCase() != "select-one"))
            continue;
	for(var j=0; j < frm.elements[i].options.length; j++)
        {
            frm.elements[i].options[j].selected = false;
        }
    }
}
function selectListItemsCheckBoxes(frm)
{
    if(frm == null) return;
    for(var i=0; i < frm.elements.length; i++)
    {
        if(frm.elements[i].type.toLowerCase() == "text")
        {
            frm.elements[i].value = "";
            continue;
        }
        if(frm.elements[i].type.toLowerCase() == "checkbox")
        {
            frm.elements[i].checked = true;
            continue;
        }
        if((frm.elements[i].type.toLowerCase() != "select-multiple") && (frm.elements[i].type.toLowerCase() != "select-one"))
            continue;
	for(var j=0; j < frm.elements[i].options.length; j++)
        {
            frm.elements[i].options[j].selected = true;
        }
    }
}

function cssRule(target,attrib,value) { 
 // Lokale Variable definieren
 var s=0, r=0, i, result=false, clipper, sheetNo=NaN, startSheetNo, endSheetNo, mediaType, unifiedSelectorText, complete, write;
 var sheetObj=false, ruleColl=false, ruleObj=false, styleObj=false, ownerObj=false, rulePointer="", sheetIndex=NaN;

 // Kein Ziel uebergeben: Test, ob Zugriff ueberhaupt technisch moeglich ist
 if(!target && document.styleSheets) {
  result=true;
 }

 // Bereits ermitteltes Objekt uebergeben
 if(typeof(target)=="object") {
  sheetObj=true;
  styleObj=target;
  target=false;
 }

 // Existiert das benoetigte Objekt und gibt es ueberhaupt ein Stylesheet?
 if(document.styleSheets && document.styleSheets.length && target) {

  // Wurde eine direkte Adressierung der Regel ("x/y") uebergeben?
  if(!isNaN(parseInt(target)) && target.indexOf("/")>0) {
   // Adressierung aufteilen in Stylesheet-Nummer ...
   s=parseInt(target.split("/")[0],10);
   // ... und Regel-Nummer
   r=parseInt(target.split("/")[1],10);
   // Fortfahren, wenn Stylesheet existiert (mit Extra-Check als Opera-Workaround)
   if(typeof(document.styleSheets[s])=="object" && document.styleSheets[s]) {
    sheetObj=document.styleSheets[s];
    rulePointer=""+s;
    // HTML-Element ermitteln (W3C-/IE-DOM)
    ownerObj=(sheetObj.ownerNode)?sheetObj.ownerNode:sheetObj.owningElement;
    // Weitere Daten ermitteln, wenn Zugriff moeglich
    if(sheetAccessible(s)) {

     // Objekt nach IE-DOM (vor cssRules-Abfrage wg. IE/Mac, inkl. media-Abfrage wg. Konqueror) ...
     if(sheetObj.rules && typeof(sheetObj.media)=="string") {
      ruleColl=sheetObj.rules;
      // ... falls Regel existiert
      if(ruleColl[r]) {
       ruleObj=ruleColl[r];
       styleObj=ruleObj.style;
       rulePointer+="/"+r;
      }

     // Objekt nach W3C-DOM ...
     } else if(sheetObj.cssRules) {
      ruleColl=sheetObj.cssRules;
      // ... falls Regel existiert
      if(ruleColl[r]) {
       // Nur Typ 1 (Style), nicht 3 (importedStyle)
       if(ruleColl[r].type==1) {
        ruleObj=ruleColl[r];
        styleObj=ruleObj.style;
        rulePointer+="/"+r;
       }
      }
     }

    }
   }

  // Keine direkte Adressierung sondern Suche nach uebergebenem Selektor
  } else {
   // Uebergebenen Selektor in Kleinschrift umwandeln
   target=target.toLowerCase();
   // Wurde im ersten Parameter auch ein Begrenzer uebergeben?
   i=target.indexOf("@")+1;
   if(i) {
    // Ja: Begrenzer herausloesen
    clipper=target.substring(i);
    // Aus dem Rest den Selektor bilden
    target=target.substring(0,i-1);
    // Den Begrenzer als Zahl interpretieren
    sheetNo=parseInt(clipper);
    // Wenn der Begrenzer keine Zahl war, als Media-Type interpretieren - andernfalls: alle Media-Types ("*") verwenden
    mediaType=(isNaN(sheetNo))?clipper:"*"
    // Wenn Begrenzer eine Zahl: Nummer des Stylesheets - sonst: Media-Type
   } else {
    // Kein Begrenzer: alle Media-Types ("*") verwenden
    mediaType="*";
   }

   // Zu durchsuchende Stylesheets festlegen
   if(!isNaN(sheetNo)) {
    // Stylesheet wurde im Begrenzer angegeben
    startSheetNo=sheetNo;
    endSheetNo=sheetNo;
   } else {
    // Vom letzten Stylesheet ...
    startSheetNo=document.styleSheets.length-1;
    // ... bis zum ersten durchsuchen
    endSheetNo=0;
   }

   // Fortfahren, wenn Start- & End-Sheet-Nummer zulaessig sind
   if(startSheetNo>=endSheetNo && startSheetNo<document.styleSheets.length && endSheetNo>=0) {

    // (Eingegrenzte) Stylesheets (rueckwarts) durchgehen
    for(s=startSheetNo; s>=endSheetNo; s-=1) {
     // Bereits vorhandene Positionsdaten sichern
     sheetObj=document.styleSheets[s];
     rulePointer=""+s;
     // HTML-Element ermitteln (W3C-/IE-DOM)
     ownerObj=(sheetObj.ownerNode)?sheetObj.ownerNode:sheetObj.owningElement;

     // Sofern der Zugriff erlaubt ist, alle Regeln (rueckwarts) nach dem gewuenschten Selektor durchsuchen
     if(sheetAccessible(s)) {

      // Zugriff nach IE-DOM (vor cssRules-Zugriff wg. IE/Mac, inkl. media-Abfrage wg. Konqueror)
      if(sheetObj.rules && typeof(sheetObj.media)=="string") {
       ruleColl=sheetObj.rules;
       for(r=ruleColl.length-1; r>=0; r-=1) {
        // Wenn passender Media-Type & passender Selektor:
        if(((mediaType && sheetObj.media.toLowerCase().indexOf(mediaType)>=0) || (!mediaType && !sheetObj.media) || mediaType=="*") && ruleColl[r].selectorText.toLowerCase().indexOf(target)>-1) {

         // Selektor-Text browseruebergreifend vereinheitlichen
         unifiedSelectorText=unifySelectorText(ruleColl[r].selectorText);

         // Wenn passender Selektor:
         if(unifiedSelectorText==target) {
          // Restliche Positionsdaten sichern und ...
          ruleObj=ruleColl[r];
          styleObj=ruleObj.style;
          rulePointer=s+"/"+r;
          // ... Rest des Stylesheets nicht mehr durchsuchen
          break;
         }
        }
       }

      // Zugriff nach W3C-DOM
      } else if(sheetObj.cssRules) {
       ruleColl=sheetObj.cssRules;
       for(r=ruleColl.length-1; r>=0; r-=1) {
        // Wenn Regulaere Style-Regel, Media-Type passend und gesuchter Selektor im Selektor-Text enthalten:
        if(ruleColl[r].type==1 && ((mediaType && sheetObj.media.mediaText.toLowerCase().indexOf(mediaType)>=0) || (!mediaType && !sheetObj.media.mediaText) || mediaType=="*") && ruleColl[r].selectorText.toLowerCase().indexOf(target)>-1) {

         // Selektor-Text browseruebergreifend vereinheitlichen
         unifiedSelectorText=unifySelectorText(ruleColl[r].selectorText);

         // Wenn direkt passender Selektor:
         if(unifiedSelectorText==target) {
          // Restliche Positionsdaten sichern und ...
          ruleObj=ruleColl[r];
          styleObj=ruleObj.style;
          rulePointer=s+"/"+r;
          // ... Rest des Stylesheets nicht mehr durchsuchen
          break;

         // Wenn Gruppen-Selektor:
         } else if(unifiedSelectorText.indexOf(",")>-1) {
          // Selektor-Text aufteilen
          selectorArray=unifiedSelectorText.split(",");
          // Einzelne Selektoren durchgehen ...
          for(i=0; i<selectorArray.length; i++) {
           // ... trimmen ...
           while(selectorArray[i].charAt(0)==" ") { selectorArray[i]=selectorArray[i].substring(1,selectorArray[i].length); }
           while(selectorArray[i].charAt(selectorArray[i].length-1)==" ") { selectorArray[i]=selectorArray[i].substring(0,selectorArray[i].length-1); }
           // ... und bei Erfolg ...
           if(selectorArray[i]==target) {
            // Restliche Positionsdaten sichern und ...
            ruleObj=ruleColl[r];
            styleObj=ruleObj.style;
            rulePointer=s+"/"+r;
            // ... Rest des Gruppen-Selektors nicht mehr durchsuchen
            break;
           }
          }

          // Wenn Regel gefunden wurde, Rest des Stylesheets nicht mehr durchsuchen
          if(styleObj) { break; }
         }
        }
       }
      }

      // Wenn Regel gefunden wurde, restliche Stylesheets nicht mehr durchsuchen
      if(styleObj) { break; }
     }
    }
   }

   // Wenn kein Stylesheet spezifiziert und keine Regel gefunden wurde ...
   if(isNaN(sheetNo) && !styleObj) {
    // ... Zwischenergebnisse wieder loeschen
    sheetObj=false;
    ruleColl=false;
    ownerObj=false;
    rulePointer="";
   }

  }
 }

 // Stylesheet vorhanden?
 if(!sheetObj) {
  // Nein: Beim "sheetindex" anstelle des ueblichen false ein NaN zurueckgeben
  if(attrib=="sheetindex") { result=NaN; }
 } else {

  // Ja: Ueberpruefung auf Schluesselwort in attrib
  switch(attrib) {
   // War das Sheet-Objekt gewuenscht?
   case "sheetobject":
    result=sheetObj;
    break;
   // War die Rule-Collection gewuenscht?
   case "rulecollection":
    result=ruleColl;
    break;
   // War das Rule-Objekt gewuenscht?
   case "ruleobject":
    result=ruleObj;
    break;
   // War das Style-Objekt gewuenscht?
   case "styleobject":
    result=styleObj;
    break;
   // War das Owning-Objekt gewuenscht?
   case "ownerobject":
    result=ownerObj;
    break;
   // War der HTML-Markup gewuenscht?
   case "ownermarkup":
    if(ownerObj.outerHTML) {
     // Wenn outerHTML vorhanden: nutzen
     result=ownerObj.outerHTML;
     // Ergebnis trimmen
     while(result.charCodeAt(0)==13 || result.charCodeAt(0)==10) { result=result.substring(1); } 
    } else {
     // Wenn outerHTML nicht vorhanden: Markup manuell zusammenstellen
     result="<"+ownerObj.tagName;
     for(i=0; i<ownerObj.attributes.length; i++) { result+=' '+ownerObj.attributes[i].name+'="'+ownerObj.attributes[i].value+'"'; }
     result+=(ownerObj.tagName=="LINK")?">":(">"+ownerObj.innerHTML+"</"+ownerObj.tagName+">");
    }
    break;
   // War der Sheet-Index gewuenscht?
   case "sheetindex":
    result=parseInt(rulePointer);
    break;
   // War der Regel-Pointer gewuenscht?
   case "rulepointer":
    // Wenn
    // - Sheet & Regel gefunden -> "x/y"
    // - Sheet gefunden aber Regel nicht -> "x" -> false
    // - Regel nicht gefunden -> false
    // - Sheet gefunden aber Zugriff verboten -> ""
    result=(rulePointer.indexOf("/")>-1 || rulePointer===false)?rulePointer:(sheetAccessible(rulePointer)?false:"");
    break;

  // Kein Schluesselwort: Gewuenschte Regel/Eigenschaft bearbeiten
  default:

   // Komplette Regel bearbeiten oder nur ein gewuenschtes Attribut daraus?
   complete=(!attrib)?true:false;
   
   // Gibt es einen neuen Wert (=schreiben) oder nicht (=lesen)?
   write=(typeof(value)!="undefined")?true:false;

   // Nur spezifische Eigenschaft bearbeiten?
   if(!complete) {
    // Ggf. Syntax von CSS- auf Script-Schreibweise aendern:
    attrib=propertyToStyle(attrib);
    // Gewuenschte Eigenschaft bearbeiten
    if(write) {
     // (schreiben)
     styleObj[attrib]=value;
     result=true;
    } else {
     // (auslesen)
     result=styleObj[attrib];
    }

   // Konqueror-Bug abfangen
   } else if(styleObj.cssText!=null) {
    // Kompletten Text bearbeiten
    if(write) {
     // (schreiben)
     styleObj.cssText=value;
     result=true;
    } else {
     // (auslesen)
     result=styleObj.cssText.toLowerCase();
    }
   }

  }
 }
 return result;
}

// Selektor-Text browseruebergreifend vereinheitlichen
function unifySelectorText(selText) {
 // selText='.bStil[CLASS~="bStil"] #cStil[ID"cStil"] .aStil[CLASS~="aStil"]'; // Example
 var i, addSelectors, addSelectorsRegExp;
 // Safari-Workaround: Suche nach Klassen-Selektoren, um ...
 addSelectors=selText.match(/\.([A-Za-z]+[\w-]*\[)/g);
 if(addSelectors) {
  for(i=0; i<addSelectors.length; i++) {
   addSelectorsRegExp=new RegExp("\\"+addSelectors[i].substring(0,addSelectors[i].length-1)+"\\[(CLASS|class)~=["+'"'+"|']?"+addSelectors[i].substring(1,addSelectors[i].length-1)+"["+'"'+"|']?\\]","g");
   // ... ggf. ergaenzte Attribut-Selektoren zu entfernen (.Stil[CLASS~="Stil"] -> .Stil)
   selText=selText.replace(addSelectorsRegExp,addSelectors[i].substring(0,addSelectors[i].length-1));
  }
 }
 // Safari-Workaround: Suche nach ID-Selektoren, um ...
 addSelectors=selText.match(/#([A-Za-z]+[\w-]*\[)/g);
 if(addSelectors) {
  for(i=0; i<addSelectors.length; i++) {
   addSelectorsRegExp=new RegExp(addSelectors[i].substring(0,addSelectors[i].length-1)+"\\[(ID|id)["+'"'+"|']?"+addSelectors[i].substring(1,addSelectors[i].length-1)+"["+'"'+"|']?\\]","g");
   // ... ggf. ergaenzte Attribut-Selektoren zu entfernen (#Stil[ID"Stil"] -> #Stil)
   selText=selText.replace(addSelectorsRegExp,addSelectors[i].substring(0,addSelectors[i].length-1));
  }
 }
 // Generell Kleinschreibung
 selText=selText.toLowerCase();

 return selText;
}

// Style-Schreibweise von CSS auf JS aendern
function propertyToStyle(property) {
 var syntax;
 // 1. Eigenschaften mit reserviertem Bezeichner: Unterscheidung nach JScript- bzw. JavaScript-Syntax
 if(property=="float") { property=((typeof(window.cssFloat)=="undefined")?"style":"css")+property.charAt(0).toUpperCase()+property.substring(1); }
 // 2. Eigenschaften mit Bindestrich
 else if(property.indexOf("-")>=0) {
  // CSS-Syntax am "-" auftrennen, ...
  syntax=property.split("-");
  // ... ersten Teil uebernehmen und ...
  property=syntax[0];
  // ... folgende Teile mit grossem Anfangsbuchstaben
  for(i=1; i<syntax.length; i++) { property+=syntax[i].charAt(0).toUpperCase()+syntax[i].substring(1); }
 }
 return property;
}

// Pruefen, ob Zugriff auf ein Stylesheet moeglich ist (Same-Origin-Policy)
function sheetAccessible(sheetNo) {
 // Testzugriff
 try {
  // Wenn Zugriff nach W3C- oder IE-DOM moeglich
  if(document.styleSheets[sheetNo].cssRules || document.styleSheets[sheetNo].rules) {
   // Status "Zugriff auf Sheet moeglich"
   throw "sheetAccessible";
  }
 // Statusabfrage
 } catch(e) {
  // Wenn "Zugriff auf Sheet moeglich", Rueckgabe true
  return (e=="sheetAccessible");
 }
}
function isempty(sTxt)
{
    if(sTxt == null)
        return true;
    while(sTxt.indexOf(" ") > -1)
        sTxt = sTxt.replace(" ", "");
    if(sTxt == "")
        return true;
    return false;
}
function onchangeexpslist(oLst, sChBox)
{
    var oChBox = getFormElement(oLst.form, sChBox);
    if (oChBox == null) return;
    var bAllSelected = true;
    var iOpts = oLst.options.length;
    var i=0;
    for(i=0; i < iOpts; i++)
    {
        if(oLst.options[i].selected == false)
        {
            bAllSelected = false;
            break;
        }
    }
    oChBox.checked = bAllSelected;
}
//////////////////////////////// LOGGING //////////////////////
function showlog()
{
    if(slogs == "") return;
    alert(slogs);
    slogs = "";
}
function log(s, sFunction, iSeverity)
{
  if(DEBUG < iSeverity)    return;
  var sSeverity = "";
  if(iSeverity == iINF) sSeverity = "INF";
  if(iSeverity == iWRN) sSeverity = "WRN";
  if(iSeverity == iERR) sSeverity = "ERR";
  //alert(sSeverity+" in func:"+sFunction+":\n==>"+s);
  slogs += (((slogs == "") ? "" : "\n") + sSeverity+" in func:"+sFunction+":\t"+s);
}
function dbg(i,s )
{
    return;
//  if(i != iERR)
//      return;
//  if(i != iERR && i != iWRN)
//      return;
    var sType = "ERROR";
    if(i==iWRN)        sType = "WARNING";
    else if(i==iINF)   sType = "INFO";
    alert(sType+"\n"+s);
}

function setSubElementStyle(oParent, sElIdEnd, sStyleClass)
{
    if(oParent == null || sElIdEnd == null || sElIdEnd == "" || sStyleClass == null || sStyleClass == "")
	return false;
    
    sElIdEnd = sElIdEnd.toUpperCase();
    
    var sFoundId = "";
    var iStartPos = 0;
    
    for(var i = 0; i < oParent.childNodes.length; i++)
    {
	if(oParent.childNodes[i].nodeType != 1)
	    continue;
	
	sFoundId = oParent.childNodes[i].getAttribute('id');
	if(sFoundId != null)
	{
	    sFoundId = sFoundId.toUpperCase();
	    iStartPos = sFoundId.length - sElIdEnd.length;
	}
	
	if(sFoundId != null && sFoundId != "" && iStartPos > -1 && sFoundId.substr(iStartPos) == sElIdEnd)
	{
	    oParent.childNodes[i].setAttribute('class', sStyleClass);
	    oParent.childNodes[i].setAttribute('className', sStyleClass);
	    return true;
	}
	
	if(setSubElementStyle(oParent.childNodes[i], sElIdEnd, sStyleClass))
	    return true;
    }
    
    return false;
}

function setIframeSrc()
{
    var sSrc = g_sCurrentSrc;
    sSrc = replaceISO8859Encoding(sSrc);
    
    var oIframe;
    if(g_sDocumentWindowID!="")
    {
	
	oIframe = document.getElementById(g_sDocumentWindowID);
	
	if(oIframe == null)
	    return;
	
	if(sSrc != null && sSrc != "")
	{
		oIframe.src = sSrc;
	}
	else
	{
	    oIframe.src = document.getElementById(g_sDocumentWindowID).src;
	}
    }
}

function replaceISO8859Encoding(sString)
{
    if(sString == null)
	return null;
    
    sString = sString.replace(/&#223;/, "ß");
    sString = sString.replace(/&#196;/g, "Ä");
    sString = sString.replace(/&#214;/g, "Ö");
    sString = sString.replace(/&#220;/g, "Ü");
    sString = sString.replace(/&#228;/g, "ä");
    sString = sString.replace(/&#246;/g, "ö");
    sString = sString.replace(/&#252;/g, "ü");
    
    return sString;
}

function getWebAppTop()
{
    var winBefore = null;
    try
    {
        win = window;
        if(win.name == "shiwebtop")
            return win;
        
        do
        {
            win = win.parent.window;
            if(!win || win == winBefore)
                break;
	    winBefore = win;
            if(win.name.toLowerCase() == "shiwebtop")
                return win;
        }while(true);
   }
   catch(e)
   {
   }
   return win;
}

 //function to close FF window/tab seit FF 2.0 nicht mehr anwendbar//
function shiFFcloseWindow() {
	window.open('','_parent','');
	window.close();
}


var g_iIsFadedCounter = new Array();
function shiFadeElementOut(sFadeElementId){
        if(g_iIsFadedCounter[sFadeElementId] == undefined || g_iIsFadedCounter[sFadeElementId] == 0){    
            void(dojo.style.setOpacity(dojo.byId(sFadeElementId), 0.3));
            g_iIsFadedCounter[sFadeElementId] = 1;
            }else{
                g_iIsFadedCounter[sFadeElementId] = g_iIsFadedCounter[sFadeElementId] +1;
                }
}
 function shiFadeElementIn(sFadeElementId){
     g_iIsFadedCounter[sFadeElementId] = g_iIsFadedCounter[sFadeElementId]-1;
     
     if(g_iIsFadedCounter[sFadeElementId] == 0){
        void(dojo.style.setOpacity(dojo.byId(sFadeElementId), 1.0));        
       }      
  }


 function expandedSearchPopUp(start) {       
     
     //var implodeDiv = document.getElementById('sps');
     var popupDivExps = document.getElementById('exps');
     var topPos = getPosTop(start);
     
     popupDivExps.style.top = topPos + 16+"px";
     popupDivExps.style.left = getPosLeft(start)-496+"px";
     if((getPosLeft(start)-496)<1){
         popupDivExps.style.left = 0+"px";
     }
     var popupDivIframeS = document.getElementById('frameExps');
     
     popupDivIframeS.style.top = getPosTop(start) + 19+"px";
     popupDivIframeS.style.left = getPosLeft(start)-496+"px";
     if((getPosLeft(start)-496)<1){
         popupDivIframeS.style.left = 0+"px";
     }
     
        /*if(implodeDiv.style.display!='none')
        {
             dojo.lfx.implode("sps",start, 500).play();
             dojo.lfx.implode("frameSps", start, 500).play();
             //shiFadeElementIn('documentwindow');
         }*/
     
     if(popupDivExps.style.display=='none') {
         dojo.lfx.explode(start,"frameExps", 500).play();
         dojo.lfx.explode(start,"exps", 500).play();
         shiFadeElementOut('documentwindow');
         
         
     }
     else {
         
         dojo.lfx.implode("exps", start, 500).play();
         dojo.lfx.implode("frameExps", start, 500).play();
         shiFadeElementIn('documentwindow');
     }
     
     
 }
