/* ---------------------------------------------------------------------
 *  This is the master JavaScript file for the HTML Help documentation.
 * ---------------------------------------------------------------------
 * Aenderungsdatum: 20100412:1347
 * Version: 1.0.9
 * Version OfficeHelp: 8.0.04 
 * ---------------------------------------------------------------------
 */

/* These functions (doSection, noSection) are used to make sidebars appear and disappear.
*/

var ctBottom = 0;
var ctLeft   = 115;
var ctRight  = 80;
var ctTop = 165;

function openPopup(width, height, url)
{
	window.open(url, 'popup', 'height=' + height + ',width=' + width + ',status=no,toolbar=no,menubar=no,location=no');
}

function initMouseDown() 
{
  if (window.Event) 
  {
    document.captureEvents(Event.MOUSEDOWN);
  }
  document.onmousedown = getMousePosition;
}

function getMousePosition(e)
{
  mouseX = (isNav) ? e.pageX : event.clientX + document.body.scrollLeft;
  mouseY = (isNav) ? e.pageY : event.clientY + document.body.scrollTop;
}

function calcXPosition(mouseX, objectWidth, bodyWidth)
{
    var xPosition;

    if( (parseInt(mouseX)+parseInt(objectWidth)) > parseInt(bodyWidth) )
    {
        if((parseInt(mouseX)-parseInt(objectWidth))>0)
            xPosition=parseInt(mouseX)-parseInt(objectWidth);
        else
        {
            var xDiff=(parseInt(mouseX)+parseInt(objectWidth))-parseInt(bodyWidth);
            if(parseInt(xDiff)<parseInt(mouseX))
                xPosition=parseInt(mouseX)-parseInt(xDiff)-15;
            else
            {
                xPosition=50;
                document.getElementsByTagName("body").item(0).setAttribute("scroll","yes");
            }
        }
    }
    else
        xPosition=parseInt(mouseX);

    return xPosition;
}

function calcYPosition(mouseY, objectHeight, bodyHeight)
{
    var yPosition;

    if( (parseInt(mouseY)+parseInt(objectHeight)) > parseInt(bodyHeight) )
    {
        if((parseInt(mouseY)-parseInt(objectHeight))>0)
            yPosition=parseInt(mouseY)-parseInt(objectHeight);
        else
        {
            var yDiff=(parseInt(mouseY)+parseInt(objectHeight))-parseInt(bodyHeight);
            if(parseInt(yDiff)<parseInt(mouseY))
                yPosition=parseInt(mouseY)-parseInt(yDiff)-15;
            else
            {
                yPosition=50;
                document.getElementsByTagName("body").item(0).setAttribute("scroll","yes");
            }
        }
    }
    else
        yPosition=parseInt(mouseY);

    return yPosition;
}

function openPopupDiv(file, width, height)
{
	var popup = document.getElementById("popup");

    //get body dimension
    var bodyWidth;
    var bodyHeight;
    if(navigator.userAgent.indexOf("Firefox")==-1)
    {
        bodyWidth=document.getElementsByTagName("body").item(0).offsetWidth;
        bodyHeight=document.getElementsByTagName("body").item(0).offsetHeight;
    }
    else
    {
        bodyWidth=window.innerWidth;
        bodyHeight=window.innerHeight;
    }

    //set x position
    popup.style.left = parseInt(calcXPosition(mouseX,width,bodyWidth));

    //set y position
    popup.style.top = parseInt(calcYPosition(mouseY,height,bodyHeight));

    popup.style.width = width;
	popup.style.height = height;
	popup.innerHTML = "<iframe style='width: " + (width-3) + "px; height: " + (height-3) + "px' src='" + file + "'></iframe>";
	popup.style.display = "block";
}

function closePopupDiv()
{
	var popup = document.getElementById("popup");
	popup.style.display = "none";
    document.getElementsByTagName("body").item(0).setAttribute("scroll","no");
}

function doSection (secNum)
{
	//display the section if it's not displayed; hide it if it is displayed
	if (secNum.style.display=="none")
    {
        secNum.style.display=""
    }
	else{secNum.style.display="none"}
}

function noSection (secNum)
{
	//remove the section when user clicks in the opened DIV
	if (secNum.style.display=="")
    {
        secNum.style.display="none"
    }
}

//used only in JAVA projects
function expandDivsAndSpans_javaVersion()
{
    for (i=1; i<document.all.length; i++)
    {
        if(document.all(i).tagName=="DIV" && document.all(i).id.indexOf("exp")!=-1)
        {
            var innerText=document.all(i).innerHTML;
            if(innerText.indexOf("marker")!=-1)
            {
                if(document.all(i).style.display=="none")
                {
                    var idDiv = document.all(i).id;
                    var idArrow = idDiv.replace("exp","ar");
                        doExpand(idDiv,idArrow);
                }
            }
        }
        else if(document.all(i).tagName=="SPAN" && document.all(i).id.indexOf("exp")!=-1)
        {
            var argstr = location.search.substring(1, location.search.length);
            if(argstr!=null && argstr.length!=0)
            {
                if(argstr.indexOf("|")!=-1)
                {
                    var args = argstr.split('|');
                    for(var j=0;j<args.length;j++)
                    {
                                examinNode(document.all(i),args[j],false);
                    }
                }
                else
                            examinNode(document.all(i),argstr,false);
            }

            var innerText=document.all(i).innerHTML;
            if(innerText.indexOf("marker")!=-1)
            {
                   if(document.all(i).style.display=="none")
                   document.all(i).style.display="inline";
            }
        }
    }
}

//used only in CHM project
function collapsDivsAndSpans_chmVersion()
{
	var depth = 0;
	for (i=1; i<document.all.length; i++)
	{
		if (document.all(i-1).contains(document.all(i))==true)
			depth = depth + 1;
		else
		{
			var elParent = document.all(i-1).parentElement;
			for ( ; depth>0; depth--)
			{
				if (elParent.contains(document.all(i))==true)
					break;
				elParent = elParent.parentElement;
			}
		}
		if((document.all(i).tagName=="DIV" || document.all(i).tagName=="SPAN") && document.all(i).id.indexOf("exp")!=-1)
			document.all(i).style.display="none";
	}
}

//used only in CHM project
function expandDivsAndSpans_chmVersion()
{
	var depth = 0;
	for (i=1; i<document.all.length; i++)
	{
		if (document.all(i-1).contains(document.all(i))==true)
			depth = depth + 1;
		else
		{
			var elParent = document.all(i-1).parentElement;
			for ( ; depth>0; depth--)
			{
				if (elParent.contains(document.all(i))==true)
					break;
				elParent = elParent.parentElement;
			}
		}
		if(document.all(i).tagName=="DIV" && document.all(i).id.indexOf("exp")!=-1)
		{
			var innerText=document.all(i).innerHTML;
			if(innerText.indexOf("FONT")!=-1)
            {
                var idDiv = document.all(i).id;
                var idArrow = idDiv.replace("exp","ar");
                    doExpand(idDiv,idArrow);
            }
        }
		else if(document.all(i).tagName=="SPAN" && document.all(i).id.indexOf("exp")!=-1)
		{
			var innerText=document.all(i).innerHTML;
			if(innerText.indexOf("FONT")!=-1)
				document.all(i).style.display="inline";
		}
	}
}

function doExpand(id,arrowNum)
{
    if (arrowNum=='inline')
    {
		if (document.all)
        {
			if(document.all[id].style.display=='none')
            {
				document.all[id].style.display='inline';
			}
			else
            {
				document.all[id].style.display='none';
			}
			//event.cancelBubble = true;
			return false;
		}
		else if (document.getElementById)
        {
			if(document.getElementById(id).style.display=='none')
            {
				document.getElementById(id).style.display='inline';
			}
			else
            {
				document.getElementById(id).style.display ='none';
			}
			//event.cancelBubble = true;
			return false;
		}
	}
	else
    {
		if (document.all)
        {
			if(document.all[id].style.display=='none')
            {
				document.all[id].style.display='';
				document.all[arrowNum].src="arrowdn.gif"
			}
			else
            {
				document.all[id].style.display='none';
				document.all[arrowNum].src="arrowrt.gif"
			}
			//event.cancelBubble = true;
			return false;
		}
		else if (document.getElementById)
        {
			if(document.getElementById(id).style.display=='none')
            {
				document.getElementById(id).style.display='block';
				document.getElementById(arrowNum).src="arrowdn.gif"
			}
			else
            {
				document.getElementById(id).style.display ='none';
				document.getElementById(arrowNum).src="arrowrt.gif"
			}
			//event.cancelBubble = true;
			return false;
		}
	}
}

function doExpandGrafik(id,arrowNum)
{
	if (document.all)
    {
        if(document.all[id].style.display=='none')
        {
            document.all[id].style.display='';
            document.all[arrowNum].src="GrafikVerbergen.gif"
        }
        else
        {
            document.all[id].style.display='none';
            document.all[arrowNum].src="GrafikAnzeigen.gif"
        }
        event.cancelBubble = true;
        return false;
    }
    else if (document.getElementById)
    {
        if(document.getElementById(id).style.display=='none')
        {
            document.getElementById(id).style.display='block';
            document.getElementById(arrowNum).src="GrafikVerbergen.gif"
        }
        else
        {
            document.getElementById(id).style.display ='none';
            document.getElementById(arrowNum).src="GrafikAnzeigen.gif"
        }
        //event.cancelBubble = true;
        return false;
    }
 }


//OpenAdress() sucht einen Anker in einer Html Datei und schaltet
//den umgebenden Abschnitt sichtbar
//Wenn der Anker nicht in der Datei steht, wird Textausgabe aufgerufen

function OpenAdress()
{
	Abschnitt=location.hash.slice(1);
	if (Abschnitt == "")
	{
		document.write("<H1><font color=#313680 size=5>" +document.title,"</font></H1>");
		document.write("<p>Dies ist nur ein Dummy-Text, der in keiner Hilfe erscheint. Den eigentliche Text der Fehlerhilfe, also der Inhalt der Datei <b>Fehler.doc</b>, können Sie nur über den API-Test im HTML-Workshop prüfen.</p>");
	}
	else
	{
		n=document.anchors.length;
		for(i = 0; i < n; i++)
		{
			if(document.anchors[i].name == Abschnitt)
			{
				document.all.tags("div")[i].style.display="";
				break;
			}
			if(i+1 == n)
			{
				Textausgabe(Abschnitt);
			}
		}
	}
}


//Textausgabe druckt die fehlende Zielanker-ID (=Abschnitt)
// in eine Html-Datei

function Textausgabe(Abschnitt)
{
	document.write("<H1><font color=#313680 size=5>Zu diesem Thema steht Ihnen keine Hilfe zur Verfügung</font></h1>");
	document.write("<P>Bitte benachrichtigen Sie unsere QS-Abteilung unter Angabe der ID " +Abschnitt,".</p>");
	document.write('<a href="mailto:support@dokay.de?subject=Online-Anbindung!">Mail an die dokay GmbH</a>');
}

//These functions control the behavior of the homepage go arrows.
function liteGo(spNo)
{
	spNo.style.background="#cc0033";
	spNo.style.color="#FFFFFF";
}

function liteOff(spNo)
{
	spNo.style.background="transparent";
	spNo.style.color="#000000";
}

//Diese Funktion initialisiert die Anzeige im Kopfframe

function INI(dummy)
{
	spYes=dummy;
	spYes.style.fontSize="10pt";
	spYes.style.color="#0000AF";
}

//Diese Funktion markiert den angeklickten Link im Kopfframe
//und hebt die Markierung des zuletzt angeklickten Links auf

function liteOnOff(spNo)
{
	spYes.style.fontSize="7pt";
	spYes.style.color="#000000";
	//spYes.style.background="transparent";
	spNo.style.fontSize="10pt";
	spNo.style.color="#0000AF";
	//spNo.style.background="#DEAFE5";
	spYes=spNo;
}

function INIback(dummy)
{
	//senkrecht();                        //Aufruf der Funktion, wenn senkrechte Ausrichtung der Links im Kopfteil gewünscht ist
	ID=dummy;
	document.all.tags("table")[0].background="dimmed.gif";
	ID.background="background.gif";
}



function senkrecht()
{      	//aktiviert die senkrechte Ausrichtung der Links im Kopfteil

	var i=0;          	//Laufvariable=Anzahl der Tabellenzellen
	Zwischenergebnis="";	//speichert die gesamte sekrechte Tabelle als String
	EndTag="</td></tr>";

	while(i < document.all.tags("td").length)
    {

	    Go="go";		//Erzeugt Anfangstag: Tabellenzeile und -zelle
	    Go=Go.concat(i+1);
	    EndParticle=Go.concat('">');
	    StartParticle='<tr class="Kopf"><td ID="';
	    StartTag=StartParticle.concat(EndParticle);

	    Zusatz=document.all.tags("td")[i].innerHTML;	//liest für jede Zelle alles zwischen <td></td>
	    Zwischenergebnis=Zwischenergebnis.concat(StartTag);	//Neuer Anfangstag <tr class... mit
	    Zwischenergebnis=Zwischenergebnis.concat(Zusatz);	//dem Inhalt der alten Zelle
	    Zwischenergebnis=Zwischenergebnis.concat(EndTag);	//und neuem Tag am Ende </td></tr>
	    i = i + 1;						//nächste Tabellenzelle
    }
	TabelleStart='<table>';
	TabelleEnde="</table>";
	Zwischenergebnis=TabelleStart.concat(Zwischenergebnis);
	Zwischenergebnis=Zwischenergebnis.concat(TabelleEnde);	//Schreibt die neue Tabelle zwischen Table Tags
	document.all.tags("div")[0].innerHTML="";		//löscht die alte Tabelle komplett
	document.all.tags("div")[0].insertAdjacentHTML("AfterBegin",Zwischenergebnis);	//setzt die neue Tabelle komplett ein
}


function background(spBild)
{
	spImg.background="transparent";
	spBild.background="background.gif";
	spImg=spBild;
}

//Glossarfenster für Intranet und Internet erzeugen (IE und NC 6.2)

var version4 = (navigator.appVersion.charAt(0) >= "4");
var popupHandle;
function closePopup()
{
    if(popupHandle != null && !popupHandle.closed)
        popupHandle.close()
}


function displayPopup(position,url,name,height,width,evnt)
{
// position=1 POPUP: makes screen display up and/or left,
//    down and/or right
// depending on where cursor falls and size of window to open
// position=2 CENTER: makes screen fall in center


  var properties = "toolbar=0,location=0,height="+height
  properties = properties+",width="+width

  var leftprop, topprop, screenX, screenY, cursorX, cursorY, padAmt

  if(navigator.appName == "Microsoft Internet Explorer")
  {
    screenY = document.body.offsetHeight
    screenX = window.screen.availWidth
  }
  else
  {
    //Navigator coordinates
    //screenY = window.outerHeight
    //screenX = window.outerWidth
    //change made 3/16/01 to work with Netscape:
    screenY = screen.height;
    screenX = screen.width;
  }

  if(position == 1)
  {    // if POPUP not CENTER
    cursorX = evnt.screenX
    cursorY = evnt.screenY
    padAmtX = 10
    padAmtY = 10

    if((cursorY + height + padAmtY) > screenY)
    {
      // make sizes a negative number to move left/up
      padAmtY = (-30) + (height*-1);

      // if up or to left, make 30 as padding amount
    }

    if((cursorX + width + padAmtX) > screenX)
    {
      padAmtX = (-30) + (width*-1);
      // if up or to left, make 30 as padding amount
    }

    if(navigator.appName == "Microsoft Internet Explorer")
    {
      leftprop = cursorX + padAmtX
      topprop = cursorY + padAmtY
    }
    else
    { // adjust Netscape coordinates for scrolling
      leftprop = (cursorX - pageXOffset + padAmtX)
      topprop = (cursorY - pageYOffset + padAmtY)
    }
  }
  else
  {	// CENTER
    leftvar = (screenX - width) / 2
    rightvar = (screenY - height) / 2

    if(navigator.appName == "Microsoft Internet Explorer")
    {
      leftprop = leftvar
      topprop = rightvar
    }
    else
    { // adjust Netscape coordinates for scrolling
      leftprop = (leftvar - pageXOffset)
      topprop = (rightvar - pageYOffset)
    }
  }

  if(evnt != null)
  {
    properties = properties+",left="+leftprop
    properties = properties+",top="+topprop
  }

  closePopup()
  popupHandle = open(url,name,properties)
}



//Browserweiche
if (navigator.userAgent.indexOf("Netscape6") >= 0)
{
  document.write('<link rel="stylesheet" type="text/css"; media="screen" href="StyleNC.css">');
  document.write('<link rel="stylesheet" type="text/css"; media="print" href="printNC.css">');
}

else if (navigator.userAgent.indexOf("Netscape/7") >= 0)
{
  document.write('<link rel="stylesheet" type="text/css"; media="screen" href="StyleNC.css">');
  document.write('<link rel="stylesheet" type="text/css"; media="print" href="printNC.css">');
}

else if (navigator.userAgent.indexOf("MSIE") != -1)
{
  document.write('<link rel="stylesheet" type="text/css"; media="screen" href="StyleIE.css">');
  document.write('<link rel="stylesheet" type="text/css"; media="print" href="printIE.css">');
}

else if (navigator.userAgent.indexOf("Mozilla") != -1)
{
  document.write('<link rel="stylesheet" type="text/css"; media="screen" href="StyleNC.css">');
  document.write('<link rel="stylesheet" type="text/css"; media="print" href="printNC.css">');
}


//Header-Bereich zur Non-Scrolling-Area erklären

window.onload = resizeNSRwindow;
window.onresize= resizeNSRwindow;
window.onbeforeprint= set_to_print;
window.onafterprint= reset_form;

function resizeNSRwindow()
{
  if(document.layers)
  {
    //NN 4
    NN4_Resize(true);
  }

  
  initMouseDown();

  //use in CHM project, otherwise comment
  //collapsDivsAndSpans_chmVersion();
  //expandDivsAndSpans_chmVersion();

  //use in JAVA project, otherwise comment
  //expandDivsAndSpans_javaVersion();
}


function Layer()
{
	document.write("<div style='background-image: url(Layer.js)'>");
}


function NN4_Resize(firstTime)
{
    var mainFrame = document.layers.allCt;
    var header    = document.layers.nsr;
    var content   = document.layers.text;

    var fWidth  = 0;
    var fHeight = 0;
    var hWidth  = 0;
    var hHeight = 0;
    var cWidth  = 0;
    var cHeight = 0;

    if (firstTime)
    {
        fWidth  = window.innerWidth - 26;
        fHeight = window.innerHeight - 26;
        cWidth  = fWidth - (parseInt(ctLeft)+parseInt(ctRight));
        cHeight = fHeight - ctTop;
        hWidth  = fWidth - 30;
    }
    else
    {
        fWidth  = window.innerWidth - 116;
        fHeight = window.innerHeight - 26;
        cWidth  = fWidth - ctRight;
        cHeight = fHeight - 100;
        hWidth  = fWidth;
    }

    mainFrame.style.width  = fWidth;
    mainFrame.style.height = fHeight;

    if(cWidth>=0)
    {
      content.style.width = cWidth;
    }
    else
    {
      content.style.width = 0;
    }
    if(cHeight>=0)
    {
      content.style.height = cHeight;
    }
    else
    {
      content.style.height = 0;
    }

    header.style.width     = hWidth;

    if (firstTime)
    	setTimeout("NN4_Resize(false)",1);

    mainFrame = document.layers.allCt;
    header    = document.layers.nsr;
    content   = document.layers.text;
}

function NN6_Resize(firstTime)
{
    var mainFrame = document.getElementById("allCt");
    var header    = document.getElementById("nsr");
    var content   = document.getElementById("text");

    var fWidth  = 0;
    var fHeight = 0;
    var hWidth  = 0;
    var hHeight = 0;
    var cWidth  = 0;
    var cHeight = 0;

    if (firstTime)
    {
        fWidth  = window.innerWidth - 26;
        fHeight = window.innerHeight - 26;
        cWidth  = fWidth - (parseInt(ctLeft)+parseInt(ctRight));
        cHeight = fHeight - ctTop;
        hWidth  = fWidth - 30;
    }
    else
    {
        fWidth  = window.innerWidth - 4;
        fHeight = window.innerHeight - 4;
        cWidth  = fWidth - (parseInt(ctLeft)+parseInt(ctRight));
        cHeight = fHeight - ctTop;
        hWidth  = fWidth - 30;
    }

    mainFrame.style.width  = fWidth;
    mainFrame.style.height = fHeight;

    if(cWidth>=0)
    {
     content.style.width = cWidth;
    }
    else
    {
     content.style.width = 0;
    }
    if(cHeight>=0)
    {
     content.style.height = cHeight;
    }
    else
    {
     content.style.height = 0;
    }

    header.style.width     = hWidth;

    if (firstTime)
        setTimeout("NN6_Resize(false)",1);
}

function IE_Resize()
{
    var mainFrame = document.all.item("allCt");
    var header    = document.all.item("nsr");
    var content   = document.all.item("text");

    var fWidth  = 0;
    var fHeight = 0;
    var hWidth  = 0;
    var hHeight = 0;
    var cWidth  = 0;
    var cHeight = 0;

    fWidth  = document.body.offsetWidth;
    fHeight = document.body.offsetHeight;
    cWidth  = fWidth - 5;
    cHeight = fHeight - (ctTop + 5);
    hWidth  = fWidth;

    //mainFrame.style.width  = fWidth;
    //mainFrame.style.height = fHeight;
    content.style.top = ctTop;
    if(cWidth>=0)
    {
     content.style.width = cWidth;
    }
    else
    {
     content.style.width = 0;
    }
    if(cHeight>=0)
    {
     content.style.height = cHeight;
    }
    else
    {
     content.style.height = 0;
    }
    header.style.width     = hWidth;
}

/*function actualResize() {
  var fWidth  = 0;
  var fHeight = 0;
  var hWidth  = 0;
  var hHeight = 0;
  var cWidth  = 0;
  var cHeight = 0;

  var mainFrame = null;
  var header    = null;
  var content   = null;

  if(document.layers){
    //NN 4
    mainFrame = document.layers.allCt;
    header    = document.layers.nsr;
    content   = document.layers.text;

    fWidth  = window.innerWidth - 116;
    fHeight = window.innerHeight - 26;
    cWidth  = fWidth - ctRight;
    cHeight = fHeight - 100;
    hWidth  = fWidth;
  }

  if(document.all){
    //IE browser
    mainFrame = document.all.item("allCt");
    header    = document.all.item("nsr");
    content   = document.all.item("text");

    fWidth  = document.body.offsetWidth;
    fHeight = document.body.offsetHeight;
    cWidth  = fWidth - 5;
    cHeight = fHeight - (ctTop + 5);
    hWidth  = fWidth;
  }

  if(!document.all && document.getElementById){
    //NN 6
    mainFrame = document.getElementById("allCt");
    header    = document.getElementById("nsr");
    content   = document.getElementById("text");

    fWidth  = window.innerWidth - 4;
    fHeight = window.innerHeight - 4;
    cWidth  = fWidth - (ctLeft+ctRight);
    cHeight = fHeight - ctTop;
    hWidth  = fWidth - 30;
  }


  mainFrame.style.width  = fWidth;
  mainFrame.style.height = fHeight;

  if(cWidth>=0) {
   content.style.width = cWidth;
  } else {
   content.style.width = 0;
  }
  if(cHeight >=0) {
   content.style.height = cHeight;
  } else {
   content.style.height = 0;
 }

  header.style.width     = hWidth;

}*/

function set_to_print(){
	var i;
	if (window.text) {
		document.all.text.style.height = "auto";
	}
	for (i=0; i < document.all.length; i++){
		if (document.all[i].tagName == "BODY") {
			document.all[i].scroll = "auto";
		}
//			if (document.all[i].tagName == "A") {
//				document.all[i].outerHTML = "<A HREF=''>" + document.all[i].innerHTML + "</a>";
//			}
	}
	document.all.text.style.overflow = "visible";
	//document.all.text.style.overflow = "auto";
}

//********** set for display ************

function reset_form(){
	document.all.text.style.overflow = "auto";
  document.location.reload();
}


//Mit Vorschau-Grafiken arbeiten
function openWin( winHeight, winWidth, picSrc ){
    newWin = window.open('', '', 'height='+ winHeight + ',width='+ winWidth + 'toolbars=no, scrollbars=yes' );
    newWin.document.write("<head><title>"+ picSrc +"</title></head>");
    newWin.document.write("<p align=center>");
    newWin.document.write("<img src=" + picSrc + ">");            newWin.document.write("<br><br><form><input type='button' value='Schließen' onclick='JavaScript:window.close()'>");
    newWin.document.write("</form></p>");
}

// Popups mit Mouseover aus Fußnote ableiten
if (document.layers) {navigator.family = "nn4"}
if (document.all) {navigator.family = "ie4"}
if (window.navigator.userAgent.toLowerCase().match("gecko")) {navigator.family = "gecko"}

overdiv="0";
function popLayer(a)
{
    if(!descarray[a])
    {
        descarray[a]="<font color=red>This popup (#"+a+") isn't setup correctly - needs description</font>";
    }
    if (navigator.family == "gecko")
    {
        pad="0"; bord="1 bordercolor=black";
    }
    else
    {
        pad="1"; bord="0";
    }
    desc = 	  "<table cellspacing=0 cellpadding="+pad+" border="+bord+"><tr><td>\n"
        +"<table cellspacing=0 cellpadding=3 border=0 width=100%><tr><td><font size=-1>\n"
        +descarray[a]
        +"\n</td></tr></table>\n"
        +"</td></tr></table>";

    //get body dimension
    var bodyWidth;
    var bodyHeight;
    if(navigator.userAgent.indexOf("Firefox")==-1)
    {
        bodyWidth=document.getElementsByTagName("body").item(0).offsetWidth;
        bodyHeight=document.getElementsByTagName("body").item(0).offsetHeight;
    }
    else
    {
        bodyWidth=window.innerWidth;
        bodyHeight=window.innerHeight;
    }

    if(navigator.family =="nn4")
    {
        document.object1.document.write(desc);
        document.object1.document.close();

        document.object1.left=x+15;
        document.object1.top=y-5;
    }
    else if(navigator.family =="ie4")
    {
        document.getElementById("object1").innerHTML=desc;

        var objectWidth=document.getElementById("object1").offsetWidth;
        var xPosition=calcXPosition(x, objectWidth, bodyWidth);
        var objectHeight=document.getElementById("object1").offsetHeight;
        var yPosition=calcYPosition(y, objectHeight, bodyHeight);

        document.getElementById("object1").style.left=parseInt(xPosition);
        document.getElementById("object1").style.top=parseInt(yPosition)+10;

//        document.getElementById("object1").style.left=x+15;
//        document.getElementById("object1").style.top=y+145;
    }
    else if(navigator.family =="gecko")//mozilla
    {
        document.getElementById("object1").innerHTML=desc;

        var objectWidth=document.getElementById("object1").offsetWidth;
        var xPosition=calcXPosition(x, objectWidth, bodyWidth);
        var objectHeight=document.getElementById("object1").offsetHeight;
        var yPosition=calcYPosition(y, objectHeight, bodyHeight);

        document.getElementById("object1").style.left=parseInt(xPosition);
        document.getElementById("object1").style.top=parseInt(yPosition);

//        document.getElementById("object1").style.left=x+15;
//        document.getElementById("object1").style.top=y-5;
    }
}

function hideLayer()
{
    document.getElementsByTagName("body").item(0).setAttribute("scroll","no");
    if (overdiv == "0")
    {
        if(navigator.family =="nn4")
            eval(document.object1.top="-500");
        else if(navigator.family =="ie4")
            object1.innerHTML="";
        else if(navigator.family =="gecko")
        {
            document.getElementById("object1").innerHTML="";
            //document.getElementById("object1").style.top="-500";
        }
    }
}

var isNav = (navigator.appName.indexOf("Netscape") !=-1);
function handlerMM(e)
{
    x = (isNav) ? e.pageX : event.clientX + document.body.scrollLeft;
    y = (isNav) ? e.pageY : event.clientY + document.body.scrollTop;
}

if (isNav){document.captureEvents(Event.MOUSEMOVE);}
document.onmousemove = handlerMM;



// Interpretiert Eintrag in HTML-Dateien zur korrekten Darstellung von Intranet-Dokumentataionen

function selektionAktualisieren_php (str) {
		Framename = 'frmControl';
		str2 = str.substring(0, str.lastIndexOf("."));
		url = 'php_menue.php?sync=' + str2;
		//alert ();
		//if (typeof (parent[Framename].location.href) != "undefined")
		try	{
			parent[Framename].location.href = url;
			}
		catch(e)
		{
		//alert ("xxx");
		}
} 


//= START =====================================================================================================

/* ---------------------------------------------------
 *  Variablen fuer Images
 * --------------------------------------------------- 
 */
var VICONDATA  = "js_m1.gif";
var VICONCLOSE = "js_m2.gif";
var VICONOPEN  = "js_m3.gif";

function selektionAktualisieren_js (str) {
	
  try {
	  var nodeId = top.frmCtlData.document.getElementById('toc');
  } catch (e) { }
	
  try {
		// TOC-Baum prüfen
		var nodeId = top.frmCtlData.document.getElementById('toc');
		var spanTag = nodeId.getElementsByTagName('span');

		for(var i = 0; i < spanTag.length; i++) {
			var ergebnis = spanTag[i].lastChild.href.search(str);
			if (ergebnis != -1) {
				// Markierung setzen
				spanTag[i].className = "mark5";
				// immer den letzten Eintrag markieren
				if (i != 0) {
					spanTag[i-1].className = "markNull";
				}
				
				// div-Container öffnen
				var divObjekt = spanTag[i];
				openClosedDivTags(divObjekt);

			} else {
				spanTag[i].className = "markNull";
			} 
		}

		//debugger;

		// Highlighten der Suchwoerter
		f_mark();

	} catch (e) {
		return;
	}
  return;
} 

function openClosedDivTags(obj) {
	
	// Ausstieg falls Anfang der DIV-Tags errreicht ist
	if (obj.parentNode.id == "text") {
	 return; 
	}
	
	if (obj.parentNode.className == "closed") {
		// div-Tag öffnen
		obj.parentNode.className = "open";
		// images setzen - image hat die gleiche Id wie div-Tag
		var imgId = obj.parentNode.id;
		imgId = imgId.replace("div", "img");
		var imgTag = top.frmCtlData.document.getElementById(imgId);
		imgTag.src = VICONOPEN;
		
		// rekursiver Aufruf
		openClosedDivTags(obj.parentNode);
	} else {
		// rekursiver Aufruf
		openClosedDivTags(obj.parentNode);
	}
	return;
}

function f_mark() {
	
	var value = "";
	var color = 0;
	var quote = false;
	
	//debugger;
	
  try {
    // Browserunterscheidung
    if (checkbrowsertypName('firefox') || checkbrowsertypName('opera') || checkbrowsertypName('safari')) {
  	  var str = top.frames['frmControl'].document.forms['suchexml'].q.value;
    }
    else if (checkbrowsertypName('MSIE')) {
      var str = top.frmControl.suchexml.q.value;
		}
  } catch (e) {
    return;
  }
  
//  if(str.indexOf("\"") >= 0) {
//    // "scharfe Suche" - alle Anfuehrungszeichen ersetzen
//    str = str.replace(/\"/g, "");
//    quote = true;
//  } else {
//		quote = false;
//  }

  // Sonderzeichen aus dem Suchbegriff entfernen
	var regex = "";
  regex = /\*|\+|\?|\.|\(|\)|\[|\]|\{|\}|\/|\||\^|\$|\-|\\|'|:|;|#|\§|!|=|%|,/g;
  str = str.replace(regex, '');
  	
  str = trimWhitespace(str);
  var suchwerte = str.split(" ");
	
 	var contentText = top.frmTopic.document.getElementById('text');
  var contentP = contentText.getElementsByTagName('p');  
  var contentB = contentText.getElementsByTagName('b');
  var contentA = contentText.getElementsByTagName('a');
	var contentU = contentText.getElementsByTagName('u');
  var contentDiv = contentText.getElementsByTagName('div');
  
  var contentNsr = top.frmTopic.document.getElementById('nsr');
  var contentNsrA = contentNsr.getElementsByTagName('a');
	var contentNsrH1 = contentNsr.getElementsByTagName('H1');
  var contentNsrH2 = contentNsr.getElementsByTagName('H2');
	var contentNsrH3 = contentNsr.getElementsByTagName('H3');
	var contentNsrH4 = contentNsr.getElementsByTagName('H4');
	var contentNsrH5 = contentNsr.getElementsByTagName('H5');
	var contentNsrH6 = contentNsr.getElementsByTagName('H6');
  
	for (var i = 0; i < suchwerte.length; i++) {
	
		if(suchwerte[i].indexOf("\"") >= 0) {
			// "scharfe Suche" - alle Anfuehrungszeichen ersetzen
			suchwerte[i] = suchwerte[i].replace(/\"/g, "");
			quote = true;
		} else {
			quote = false;
		}
  	
		// Suchwort speichern
  	value = suchwerte[i];
  	// Sonderzeichen $ im Suchwort maskieren
  	value = value.replace("$", '\\$');
  	
  	// hier wird die maximale Styleanzeige fuers Markieren auf 4 gesetzt 
  	if (i <= 3) { 
  	  color = i;
  	} else {
  	  color = 99;
  	}
  	
	  // Alten Inhalt auslesen
	  var v_content = top.frmTopic.document.getElementById('text');
    var v_old = v_content.innerHTML;
  	
	  // Erstmal evtl. vorhandene alte Markierungen entfernen
	  var v_pattern = new RegExp('<span class="mark' + color + '">([^<]*)</span>', 'gi');
	  var v_new = v_old.replace(v_pattern, '$1');
  	
	  if (value != '') {
			// Scharfe Suche definieren
			if (quote) {
				//v_pattern  = new RegExp('(\\W)(' + value + ')(\\W)', 'gi');
				v_pattern  = new RegExp('(\\b' + value + '\\b)', 'gi');
			} else {
				v_pattern  = new RegExp('(\\b' + value + ')', 'gi');
			}
	    
	    /* ----------------------------------------------------------------------------------------
	     *  In allen nsr-A-Tags nach Suchwoertern suchen und die gefundenen Woerter markieren
	     * ----------------------------------------------------------------------------------------
	     */
	    highlightWords(contentNsrA, v_pattern, color, quote);
	    
	    /* ----------------------------------------------------------------------------------------
	     *  In allen nsr-H1-Tags nach Suchwoertern suchen und die gefundenen Woerter markieren
	     * ----------------------------------------------------------------------------------------
	     */
	    highlightWords(contentNsrH1, v_pattern, color, quote);
			
			/* ----------------------------------------------------------------------------------------
	     *  In allen nsr-H2-Tags nach Suchwoertern suchen und die gefundenen Woerter markieren
	     * ----------------------------------------------------------------------------------------
	     */
	    highlightWords(contentNsrH2, v_pattern, color, quote);
	    
	    /* ----------------------------------------------------------------------------------------
	     *  In allen nsr-H3-Tags nach Suchwoertern suchen und die gefundenen Woerter markieren
	     * ----------------------------------------------------------------------------------------
	     */
	    highlightWords(contentNsrH3, v_pattern, color, quote);

			/* ----------------------------------------------------------------------------------------
	     *  In allen nsr-H4-Tags nach Suchwoertern suchen und die gefundenen Woerter markieren
	     * ----------------------------------------------------------------------------------------
	     */
	    highlightWords(contentNsrH4, v_pattern, color, quote);
		
			/* ----------------------------------------------------------------------------------------
	     *  In allen nsr-H5-Tags nach Suchwoertern suchen und die gefundenen Woerter markieren
	     * ----------------------------------------------------------------------------------------
	     */
	    highlightWords(contentNsrH5, v_pattern, color, quote);

			/* ----------------------------------------------------------------------------------------
	     *  In allen nsr-H6-Tags nach Suchwoertern suchen und die gefundenen Woerter markieren
	     * ----------------------------------------------------------------------------------------
	     */
	    highlightWords(contentNsrH6, v_pattern, color, quote);

	    /* ----------------------------------------------------------------------------------------
	     *  In allen P-Tags nach Suchwoertern suchen und die gefundenen Woerter markieren
	     * ----------------------------------------------------------------------------------------
	     */
			highlightWords(contentP, v_pattern, color, quote);

	    /* ----------------------------------------------------------------------------------------
	     *  In allen B-Tags nach Suchwoertern suchen und die gefundenen Woerter markieren
	     * ----------------------------------------------------------------------------------------
	     */
	    highlightWords(contentB, v_pattern, color, quote);

	    /* ----------------------------------------------------------------------------------------
	     *  In allen A-Tags nach Suchwoertern suchen und die gefundenen Woerter markieren
	     * ----------------------------------------------------------------------------------------
	     */
	    highlightWords(contentA, v_pattern, color, quote);

	    /* ----------------------------------------------------------------------------------------
	     *  In allen U-Tags nach Suchwoertern suchen und die gefundenen Woerter markieren
	     * ----------------------------------------------------------------------------------------
	     */
	    highlightWords(contentU, v_pattern, color, quote);

			/* ----------------------------------------------------------------------------------------
	     *  In allen DIV-Tags nach Suchwoertern suchen und die gefundenen Woerter markieren
	     * ----------------------------------------------------------------------------------------
	     */
	    highlightWords(contentDiv, v_pattern, color, quote);

	    /* ----------------------------------------------------------------------------------------
	     *  In geschlossenen DIV-Tags nach Suchwoertern suchen und die Bereiche öffnen
	     * ----------------------------------------------------------------------------------------
	     */
	    for (var p = 0; p < contentDiv.length; p++) {
        if (contentDiv[p].className == "exparaAuf" && contentDiv[p].innerHTML.toLowerCase().search(value.toLowerCase()) != -1) {
          contentDiv[p].style.display = "block";
        }
      }
      
	  } // if
	} // for
}

function highlightWords(contentTags, v_pattern, color, m_quote) {

	var v_new = "";
	var bObject = "";
	var bImage = "";
	var bAnker = "";
	var bScript = "";
	var bEmbed = "";
	
	// Styledatei auslesen
	var stylesheet = top.frmCtlData.document.getElementsByTagName('link')[0].href;

  for (var i = 0; i < contentTags.length; i++) {
    v_new = contentTags[i].innerHTML;

    if (v_new != "") {
			if (v_new.search("&nbsp; ") == -1 && v_new.search("&nbsp;") == -1) {

				var sCharacter = "";
				var sAltWort = "";
				var sGanzerSatz = "";
				var bTagStart = 0;
				var bTagEnde = 0;
				var bNewWort = 0; 

				for (var k = 0; k < v_new.length; k++) {
					sCharacter = v_new.substring(k, k+1)
					if (sCharacter == "<") {
						bTagStart = 1;
					} else if (sCharacter == ">") {
						bTagEnde = 1;
					} else if (sCharacter == " ") {
						bNewWort = 1;
					}
					
					if (bNewWort == 0 && bTagStart == 0 && bTagEnde == 0) {
						sAltWort += sCharacter;
					} else if (bTagStart == 1 && bTagEnde == 0) {
						sAltWort += sCharacter;
					} else if (bNewWort == 1 && bTagStart == 0 && bTagEnde == 0) {
						// Wortteile markieren
						sGanzerSatz += sAltWort.replace(v_pattern, '<span class="mark' + color + '">$1</span><link rel="stylesheet" type="text/css" href="' + stylesheet + '">') + " ";
						sAltWort = "";
						bNewWort = 0;
					} else if (bTagStart == 1 && bTagEnde == 1) {
						sAltWort += sCharacter;
						sGanzerSatz += sAltWort;
						bTagStart = 0;
						bTagEnde = 0;
						bNewWort = 0;
						sAltWort = "";
					}
				} 

				if (k == v_new.length) {
					// Wortteile markieren
					sGanzerSatz += sAltWort.replace(v_pattern, '<span class="mark' + color + '">$1</span><link rel="stylesheet" type="text/css" href="' + stylesheet + '">');;
					sAltWort = "";
					bNewWort = 0;
				}
					
				if (v_new.length != sGanzerSatz.length) {
					contentTags[i].innerHTML = sGanzerSatz;	
				}

			} // end if
		} // end if
  } // end for
  return contentTags;
}

function checkbrowsertypName(name) {
  var agent = navigator.userAgent.toLowerCase();
  if (agent.indexOf(name.toLowerCase())>-1) {
    return true;
  }  
  return false;
}

function trimWhitespace(string) {
/*
 * Diese Funktion entfernt überzählige Leerzeichen am Anfang, Ende
 * oder auch innerhalb einer Zeichenkette.
 */

  var tmp = "";
  var stringLength = string.length;

  for (var i = 0; i < string.length; i++) {
    if ((string.charAt(i) != ' ') && (string.charAt(i) != '+')) {
      tmp += string.charAt(i);
    } 
    else {
      if (tmp.length > 0) {
        if ( (string.charAt(i+1) != ' ') && (string.charAt(i) != '+') && (i != string.length-1) ) {
          tmp += string.charAt(i);
        }
      }
    }
  }
  return tmp;
}

//= END ==========================================================================================================



// Interpretiert Eintrag in HTML-Dateien zur korrekten Darstellung von Intranet-Dokumentationen
function selektionAktualisieren(str) {
  try {
    var varFrame = top.frames.frmControl;
    if (varFrame) {
      var element = varFrame.document.getElementById('geladen');
      if (element) {
        var verz = varFrame.document.getElementById('verzeichnis');
        if (verz) {
          if (verz.isActive()) {
            verz.setSelection(str);
          } else {
            setTimeout("selektionAktualisieren('"+str+"')", 100);
          }
        } else {
          alert('Applet element nicht gefunden !!');
        }
      }
    }
  } catch (e) {}

   //Auslesen der Begriffe
   var argstr = location.search.substring(1, location.search.length);
   var args = argstr.split('|');
   for(var i=0;i<args.length;i++)
   {
     if (args[i] != "")
     {
         if(args[i].indexOf(":") != -1)
         {
             var arg=args[i].split(':');
             examinNode(document.getElementsByTagName("body")[0], arg[0], false);
         }
         else
             examinNode(document.getElementsByTagName("body")[0], args[i], false);
     }
   }
}

function examinNode(knoten, argum, oneChar)
{
  var nodes = knoten.childNodes.length;
  for (var i = 0; i < nodes; i++)
  {
    if (knoten.childNodes[i].data!=null)
    {
      //alert(knoten.childNodes[i].data);

      var nodeText = knoten.childNodes[i].data;
      var isdigit = false;

      if((argum.substring(0,1)>= '0') && (argum.substring(0,1)<='9') &&
         (argum.substring(argum.length-1, argum.length) >= '0')&&
         (argum.substring(argum.length-1, argum.length) <= '9'))
      {
        isdigit = true;
      }
      if (nodeText.length!=0)
      {
        if((argum.length == 1)&&(argum.charCodeAt(0)<10000)&&(isdigit != true))
        {
           argum= " " + argum;
           var suche=new RegExp(argum, "gi");
           oneChar = true;
        }
        else
        {
           var suche=new RegExp(argum, "gi");
        }
        var enthaelt=nodeText.search(suche);
        if (enthaelt!=-1)
        {
          if(argum.charCodeAt(0)>10000)
               match = true;
          var s1 = nodeText.substring(enthaelt+argum.length, enthaelt+argum.length+1);
          if (s1 == "" || s1 == " " || s1 == "." || s1 == "," || s1 == "!" || s1 == "?" || s1 == ":" || s1== "\"" || s1 == ";" || s1 == ")" || s1 == "%")
          {
            var match = false;
            if(enthaelt == 0)
            {
            	match = true;
            }
            else if(oneChar != true)
            {
              var s2 = nodeText.substring(enthaelt-1, enthaelt);
              if (s2 == "" || s2 == " " || s2 == "." || s2 == "," || s2 == "!" || s2 == "?" || s2 == ":" || s2== "\"" || s2 == "/"|| s2 == ";" || s2 == "(")
              {
                match = true;
              }
            }
            else
            {
            	match = true;
            }
            if ((s2 == "." || s2 == "," || s1 == "." || s1 == ",")&& (isdigit == true))
            {
	      	    match = false;
            }
          }
            //alert("argum="+argum+"\n"+"s1="+s1+"\n"+"s2="+s2+"\n"+"match="+match+"\n"+"oneChar="+oneChar+"\n"+"isdigit="+isdigit);
          if (match==true)
          {
      	    var highlight = document.createElement("marker");
       	    highlight.style.backgroundColor="A0A0A0";

            var node2 = knoten.childNodes[i].cloneNode(false);
            var text0 = nodeText.substring(0, enthaelt); //before highlighting area
            var text1 = document.createTextNode(nodeText.substring(enthaelt, enthaelt+argum.length));
            highlight.appendChild(text1);

            var text2 = nodeText.substring(enthaelt + argum.length, nodeText.length);
            knoten.childNodes[i].data=text0;
            node2.data=text2;
            if (knoten.childNodes.length>i+1)
            {
                knoten.insertBefore(highlight, knoten.childNodes[i+1]);
            }
            else
            {
              knoten.appendChild(highlight);
            }
            if (knoten.childNodes.length>i+2)
            {
              knoten.insertBefore(node2, knoten.childNodes[i+2]);
            }
            else
            {
              knoten.appendChild(node2);
            }
          }
        }
      }
    }
    if (knoten.childNodes[i].hasChildNodes)
    {
      examinNode(knoten.childNodes[i], argum, oneChar);
    }
  }
}

/* ---------------------------------------------------
 *  Print-Funktion
 * --------------------------------------------------- 
 */
function pageprint() {

	if (parent.frmTopic != null) {
		Topic = parent.frmTopic
		parent.frmHeader = null
	}
	else { 
		Topic = window
	}
	Topic.focus();
    
	var contentText = Topic.document.getElementById('text');
	var contentDiv = contentText.getElementsByTagName('div');
	var contentSpan = contentText.getElementsByTagName('span');
	
	// ALLE Aufklapp-Bereiche aufklappen 
	
	// 'normale' Aufklapp-Bereiche: div class=exparaAuf
	for (var p = 0; p < contentDiv.length; p++) {
		if (contentDiv[p].className == "exparaAuf") {
			contentDiv[p].style.display = "block";
		}
	}

	// Aufklapp-Grafiken: div class=expara
	for (var p = 0; p < contentDiv.length; p++) {
		if (contentDiv[p].className == "expara") {
			contentDiv[p].style.display = "block";
		}
	}

	// Inline-Aufklapp-Bereiche: span class=expara
	for (var p = 0; p < contentSpan.length; p++) {
		if (contentSpan[p].className == "expara") {
			contentSpan[p].style.display = "";
		}
	}

	Topic.focus();
	
	// aktuelle StyleHoehe merken
	var tmpScrollHoehe = document.all.text.style.height;
	
	Topic.print();
	
	// aktuelle StyleHoehe wieder zuordnen
	document.all.text.style.height = tmpScrollHoehe;
	
	return;
}


/* ---------------------------------------------------
 *  HIGHSLIDE Start
 * --------------------------------------------------- 
 */
 
if (!hs) { var hs = {
// Language strings
lang : {
	cssDirection: 'ltr',
	loadingText : '',
	loadingTitle : 'Click to cancel',
	focusTitle : 'Click to bring to front',
	fullExpandTitle : 'Bild in 100%-Darstellung',
	creditsText : '',
	creditsTitle : 'Go to the Highslide JS homepage',
	restoreTitle : 'Benutzen Sie die Pfeiltasten, um die Bilder der Reihe nach aufzurufen.'
},
// See http://highslide.com/ref for examples of settings  
graphicsDir : 'graphics/',
expandCursor : 'zoomin.cur', // null disables
restoreCursor : 'zoomout.cur', // null disables
expandDuration : 250, // milliseconds
restoreDuration : 250,
marginLeft : 15,
marginRight : 15,
marginTop : 15,
marginBottom : 15,
zIndexCounter : 1001, // adjust to other absolutely positioned elements
loadingOpacity : 0.75,
allowMultipleInstances: true,
numberOfImagesToPreload : 5,
outlineWhileAnimating : 2, // 0 = never, 1 = always, 2 = HTML only 
outlineStartOffset : 3, // ends at 10
padToMinWidth : false, // pad the popup width to make room for wide caption
fullExpandPosition : 'bottom right',
fullExpandOpacity : 1,
showCredits : true, // you can set this to false if you want
creditsHref : 'http://highslide.com/',
creditsTarget : '_self',
enableKeyListener : true,
openerTagNames : ['a'], // Add more to allow slideshow indexing

dragByHeading: true,
minWidth: 200,
minHeight: 200,
allowSizeReduction: true, // allow the image to reduce to fit client size. If false, this overrides minWidth and minHeight
outlineType : 'drop-shadow', // set null to disable outlines
// END OF YOUR SETTINGS


// declare internal properties
preloadTheseImages : [],
continuePreloading: true,
expanders : [],
overrides : [
	'allowSizeReduction',
	'useBox',
	'outlineType',
	'outlineWhileAnimating',
	'captionId',
	'captionText',
	'captionEval',
	'captionOverlay',
	'headingId',
	'headingText',
	'headingEval',
	'headingOverlay',
	'creditsPosition',
	'dragByHeading',
	
	'width',
	'height',
	
	'wrapperClassName',
	'minWidth',
	'minHeight',
	'maxWidth',
	'maxHeight',
	'slideshowGroup',
	'easing',
	'easingClose',
	'fadeInOut',
	'src'
],
overlays : [],
idCounter : 0,
oPos : {
	x: ['leftpanel', 'left', 'center', 'right', 'rightpanel'],
	y: ['above', 'top', 'middle', 'bottom', 'below']
},
mouse: {},
headingOverlay: {},
captionOverlay: {},
timers : [],

pendingOutlines : {},
clones : {},
onReady: [],
uaVersion: /Trident\/4\.0/.test(navigator.userAgent) ? 8 :
	parseFloat((navigator.userAgent.toLowerCase().match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1]),
ie : (document.all && !window.opera),
safari : /Safari/.test(navigator.userAgent),
geckoMac : /Macintosh.+rv:1\.[0-8].+Gecko/.test(navigator.userAgent),

$ : function (id) {
	if (id) return document.getElementById(id);
},

push : function (arr, val) {
	arr[arr.length] = val;
},

createElement : function (tag, attribs, styles, parent, nopad) {
	var el = document.createElement(tag);
	if (attribs) hs.extend(el, attribs);
	if (nopad) hs.setStyles(el, {padding: 0, border: 'none', margin: 0});
	if (styles) hs.setStyles(el, styles);
	if (parent) parent.appendChild(el);	
	return el;
},

extend : function (el, attribs) {
	for (var x in attribs) el[x] = attribs[x];
	return el;
},

setStyles : function (el, styles) {
	for (var x in styles) {
		if (hs.ie && x == 'opacity') {
			if (styles[x] > 0.99) el.style.removeAttribute('filter');
			else el.style.filter = 'alpha(opacity='+ (styles[x] * 100) +')';
		}
		else el.style[x] = styles[x];
	}
},
animate: function(el, prop, opt) {
	var start,
		end,
		unit;
	if (typeof opt != 'object' || opt === null) {
		var args = arguments;
		opt = {
			duration: args[2],
			easing: args[3],
			complete: args[4]
		};
	}
	if (typeof opt.duration != 'number') opt.duration = 250;
	opt.easing = Math[opt.easing] || Math.easeInQuad;
	opt.curAnim = hs.extend({}, prop);
	for (var name in prop) {
		var e = new hs.fx(el, opt , name );
		
		start = parseFloat(hs.css(el, name)) || 0;
		end = parseFloat(prop[name]);
		unit = name != 'opacity' ? 'px' : '';
		
		e.custom( start, end, unit );
	}	
},
css: function(el, prop) {
	if (document.defaultView) {
		return document.defaultView.getComputedStyle(el, null).getPropertyValue(prop);

	} else {
		if (prop == 'opacity') prop = 'filter';
		var val = el.currentStyle[prop.replace(/\-(\w)/g, function (a, b){ return b.toUpperCase(); })];
		if (prop == 'filter') 
			val = val.replace(/alpha\(opacity=([0-9]+)\)/, 
				function (a, b) { return b / 100 });
		return val === '' ? 1 : val;
	} 
},

getPageSize : function () {
	var d = document, w = window, iebody = d.compatMode && d.compatMode != 'BackCompat' 
		? d.documentElement : d.body;
	
	var width = hs.ie ? iebody.clientWidth : 
			(d.documentElement.clientWidth || self.innerWidth),
		height = hs.ie ? iebody.clientHeight : self.innerHeight;
	
	hs.page = {
		width: width,
		height: height,		
		scrollLeft: hs.ie ? iebody.scrollLeft : pageXOffset,
		scrollTop: hs.ie ? iebody.scrollTop : pageYOffset
	}
},

getPosition : function(el)	{
	var p = { x: el.offsetLeft, y: el.offsetTop };
	while (el.offsetParent)	{
		el = el.offsetParent;
		p.x += el.offsetLeft;
		p.y += el.offsetTop;
		if (el != document.body && el != document.documentElement) {
			p.x -= el.scrollLeft;
			p.y -= el.scrollTop;
		}
	}
	return p;
},

expand : function(a, params, custom, type) {
	if (!a) a = hs.createElement('a', null, { display: 'none' }, hs.container);
	if (typeof a.getParams == 'function') return params;	
	try {	
		new hs.Expander(a, params, custom);
		return false;
	} catch (e) { return true; }
},


focusTopmost : function() {
	var topZ = 0, 
		topmostKey = -1,
		expanders = hs.expanders,
		exp,
		zIndex;
	for (var i = 0; i < expanders.length; i++) {
		exp = expanders[i];
		if (exp) {
			zIndex = exp.wrapper.style.zIndex;
			if (zIndex && zIndex > topZ) {
				topZ = zIndex;				
				topmostKey = i;
			}
		}
	}
	if (topmostKey == -1) hs.focusKey = -1;
	else expanders[topmostKey].focus();
},

getParam : function (a, param) {
	a.getParams = a.onclick;
	var p = a.getParams ? a.getParams() : null;
	a.getParams = null;
	
	return (p && typeof p[param] != 'undefined') ? p[param] : 
		(typeof hs[param] != 'undefined' ? hs[param] : null);
},

getSrc : function (a) {
	var src = hs.getParam(a, 'src');
	if (src) return src;
	return a.href;
},

getNode : function (id) {
	var node = hs.$(id), clone = hs.clones[id], a = {};
	if (!node && !clone) return null;
	if (!clone) {
		clone = node.cloneNode(true);
		clone.id = '';
		hs.clones[id] = clone;
		return node;
	} else {
		return clone.cloneNode(true);
	}
},

discardElement : function(d) {
	if (d) hs.garbageBin.appendChild(d);
	hs.garbageBin.innerHTML = '';
},
transit : function (adj, exp) {
	var last = exp = exp || hs.getExpander();
	if (hs.upcoming) return false;
	else hs.last = last;
	try {
		hs.upcoming = adj;
		adj.onclick(); 		
	} catch (e){
		hs.last = hs.upcoming = null;
	}
	try {
		exp.close();
	} catch (e) {}
	return false;
},

previousOrNext : function (el, op) {
	var exp = hs.getExpander(el);
	if (exp) return hs.transit(exp.getAdjacentAnchor(op), exp);
	else return false;
},

previous : function (el) {
	return hs.previousOrNext(el, -1);
},

next : function (el) {
	return hs.previousOrNext(el, 1);	
},

keyHandler : function(e) {
	if (!e) e = window.event;
	if (!e.target) e.target = e.srcElement; // ie
	if (typeof e.target.form != 'undefined') return true; // form element has focus
	var exp = hs.getExpander();
	
	var op = null;
	switch (e.keyCode) {
		case 70: // f
			if (exp) exp.doFullExpand();
			return true;
		case 32: // Space
		case 34: // Page Down
		case 39: // Arrow right
		case 40: // Arrow down
			op = 1;
			break;
		case 8:  // Backspace
		case 33: // Page Up
		case 37: // Arrow left
		case 38: // Arrow up
			op = -1;
			break;
		case 27: // Escape
		case 13: // Enter
			op = 0;
	}
	if (op !== null) {hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler);
		if (!hs.enableKeyListener) return true;
		
		if (e.preventDefault) e.preventDefault();
    	else e.returnValue = false;
    	if (exp) {
			if (op == 0) {
				exp.close();
			} else {
				hs.previousOrNext(exp.key, op);
			}
			return false;
		}
	}
	return true;
},


registerOverlay : function (overlay) {
	hs.push(hs.overlays, hs.extend(overlay, { hsId: 'hsId'+ hs.idCounter++ } ));
},


getWrapperKey : function (element, expOnly) {
	var el, re = /^highslide-wrapper-([0-9]+)$/;
	// 1. look in open expanders
	el = element;
	while (el.parentNode)	{
		if (el.id && re.test(el.id)) return el.id.replace(re, "$1");
		el = el.parentNode;
	}
	// 2. look in thumbnail
	if (!expOnly) {
		el = element;
		while (el.parentNode)	{
			if (el.tagName && hs.isHsAnchor(el)) {
				for (var key = 0; key < hs.expanders.length; key++) {
					var exp = hs.expanders[key];
					if (exp && exp.a == el) return key;
				}
			}
			el = el.parentNode;
		}
	}
	return null; 
},

getExpander : function (el, expOnly) {
	if (typeof el == 'undefined') return hs.expanders[hs.focusKey] || null;
	if (typeof el == 'number') return hs.expanders[el] || null;
	if (typeof el == 'string') el = hs.$(el);
	return hs.expanders[hs.getWrapperKey(el, expOnly)] || null;
},

isHsAnchor : function (a) {
	return (a.onclick && a.onclick.toString().replace(/\s/g, ' ').match(/hs.(htmlE|e)xpand/));
},

reOrder : function () {
	for (var i = 0; i < hs.expanders.length; i++)
		if (hs.expanders[i] && hs.expanders[i].isExpanded) hs.focusTopmost();
},

mouseClickHandler : function(e) 
{	
	if (!e) e = window.event;
	if (e.button > 1) return true;
	if (!e.target) e.target = e.srcElement;
	
	var el = e.target;
	while (el.parentNode
		&& !(/highslide-(image|move|html|resize)/.test(el.className)))
	{
		el = el.parentNode;
	}
	var exp = hs.getExpander(el);
	if (exp && (exp.isClosing || !exp.isExpanded)) return true;
		
	if (exp && e.type == 'mousedown') {
		if (e.target.form) return true;
		var match = el.className.match(/highslide-(image|move|resize)/);
		if (match) {
			hs.dragArgs = { exp: exp , type: match[1], left: exp.x.pos, width: exp.x.size, top: exp.y.pos, 
				height: exp.y.size, clickX: e.clientX, clickY: e.clientY };
			
			
			hs.addEventListener(document, 'mousemove', hs.dragHandler);
			if (e.preventDefault) e.preventDefault(); // FF
			
			if (/highslide-(image|html)-blur/.test(exp.content.className)) {
				exp.focus();
				hs.hasFocused = true;
			}
			return false;
		}
	} else if (e.type == 'mouseup') {
		
		hs.removeEventListener(document, 'mousemove', hs.dragHandler);
		
		if (hs.dragArgs) {
			if (hs.styleRestoreCursor && hs.dragArgs.type == 'image') 
				hs.dragArgs.exp.content.style.cursor = hs.styleRestoreCursor;
			var hasDragged = hs.dragArgs.hasDragged;
			
			if (!hasDragged &&!hs.hasFocused && !/(move|resize)/.test(hs.dragArgs.type)) {
				exp.close();
			} 
			else if (hasDragged || (!hasDragged && hs.hasHtmlExpanders)) {
				hs.dragArgs.exp.doShowHide('hidden');
			}
			hs.hasFocused = false;
			hs.dragArgs = null;
		
		} else if (/highslide-image-blur/.test(el.className)) {
			el.style.cursor = hs.styleRestoreCursor;		
		}
	}
	return false;
},

dragHandler : function(e)
{
	if (!hs.dragArgs) return true;
	if (!e) e = window.event;
	var a = hs.dragArgs, exp = a.exp;
	
	a.dX = e.clientX - a.clickX;
	a.dY = e.clientY - a.clickY;	
	
	var distance = Math.sqrt(Math.pow(a.dX, 2) + Math.pow(a.dY, 2));
	if (!a.hasDragged) a.hasDragged = (a.type != 'image' && distance > 0)
		|| (distance > (hs.dragSensitivity || 5));
	
	if (a.hasDragged && e.clientX > 5 && e.clientY > 5) {
		
		if (a.type == 'resize') exp.resize(a);
		else {
			exp.moveTo(a.left + a.dX, a.top + a.dY);
			if (a.type == 'image') exp.content.style.cursor = 'move';
		}
	}
	return false;
},

wrapperMouseHandler : function (e) {
	try {
		if (!e) e = window.event;
		var over = /mouseover/i.test(e.type); 
		if (!e.target) e.target = e.srcElement; // ie
		if (hs.ie) e.relatedTarget = 
			over ? e.fromElement : e.toElement; // ie
		var exp = hs.getExpander(e.target);
		if (!exp.isExpanded) return;
		if (!exp || !e.relatedTarget || hs.getExpander(e.relatedTarget, true) == exp 
			|| hs.dragArgs) return;
		for (var i = 0; i < exp.overlays.length; i++) (function() {
			var o = hs.$('hsId'+ exp.overlays[i]);
			if (o && o.hideOnMouseOut) {
				if (over) hs.setStyles(o, { visibility: 'visible', display: '' });
				hs.animate(o, { opacity: over ? o.opacity : 0 }, o.dur);
			}
		})();	
	} catch (e) {}
},
addEventListener : function (el, event, func) {
	if (el == document && event == 'ready') hs.push(hs.onReady, func);
	try {
		el.addEventListener(event, func, false);
	} catch (e) {
		try {
			el.detachEvent('on'+ event, func);
			el.attachEvent('on'+ event, func);
		} catch (e) {
			el['on'+ event] = func;
		}
	} 
},

removeEventListener : function (el, event, func) {
	try {
		el.removeEventListener(event, func, false);
	} catch (e) {
		try {
			el.detachEvent('on'+ event, func);
		} catch (e) {
			el['on'+ event] = null;
		}
	}
},

preloadFullImage : function (i) {
	if (hs.continuePreloading && hs.preloadTheseImages[i] && hs.preloadTheseImages[i] != 'undefined') {
		var img = document.createElement('img');
		img.onload = function() { 
			img = null;
			hs.preloadFullImage(i + 1);
		};
		img.src = hs.preloadTheseImages[i];
	}
},
preloadImages : function (number) {
	if (number && typeof number != 'object') hs.numberOfImagesToPreload = number;
	
	var arr = hs.getAnchors();
	for (var i = 0; i < arr.images.length && i < hs.numberOfImagesToPreload; i++) {
		hs.push(hs.preloadTheseImages, hs.getSrc(arr.images[i]));
	}
	
	// preload outlines
	if (hs.outlineType)	new hs.Outline(hs.outlineType, function () { hs.preloadFullImage(0)} );
	else
	
	hs.preloadFullImage(0);
	
	// preload cursor
	if (hs.restoreCursor) var cur = hs.createElement('img', { src: hs.graphicsDir + hs.restoreCursor });
},


init : function () {
	if (!hs.container) {
	
		hs.getPageSize();
		hs.ieLt7 = hs.ie && hs.uaVersion < 7;
		for (var x in hs.langDefaults) {
			if (typeof hs[x] != 'undefined') hs.lang[x] = hs[x];
			else if (typeof hs.lang[x] == 'undefined' && typeof hs.langDefaults[x] != 'undefined') 
				hs.lang[x] = hs.langDefaults[x];
		}
		
		hs.container = hs.createElement('div', {
				className: 'highslide-container'
			}, {
				position: 'absolute', 
				left: 0, 
				top: 0, 
				width: '100%', 
				zIndex: hs.zIndexCounter,
				direction: 'ltr'
			}, 
			document.body,
			true
		);
		hs.loading = hs.createElement('a', {
				className: 'highslide-loading',
				title: hs.lang.loadingTitle,
				innerHTML: hs.lang.loadingText,
				href: 'javascript:;'
			}, {
				position: 'absolute',
				top: '-9999px',
				opacity: hs.loadingOpacity,
				zIndex: 1
			}, hs.container
		);
		hs.garbageBin = hs.createElement('div', null, { display: 'none' }, hs.container);
		
		// http://www.robertpenner.com/easing/ 
		Math.linearTween = function (t, b, c, d) {
			return c*t/d + b;
		};
		Math.easeInQuad = function (t, b, c, d) {
			return c*(t/=d)*t + b;
		};
		
		hs.hideSelects = hs.ieLt7;
		hs.hideIframes = ((window.opera && hs.uaVersion < 9) || navigator.vendor == 'KDE' 
			|| (hs.ie && hs.uaVersion < 5.5));
	}
},
ready : function() {
	if (hs.isReady) return;
	hs.isReady = true;
	
	for (var i = 0; i < hs.onReady.length; i++) hs.onReady[i]();
},

updateAnchors : function() {
	var el, els, all = [], images = [],groups = {}, re;
		
	for (var i = 0; i < hs.openerTagNames.length; i++) {
		els = document.getElementsByTagName(hs.openerTagNames[i]);
		for (var j = 0; j < els.length; j++) {
			el = els[j];
			re = hs.isHsAnchor(el);
			if (re) {
				hs.push(all, el);
				if (re[0] == 'hs.expand') hs.push(images, el);
				var g = hs.getParam(el, 'slideshowGroup') || 'none';
				if (!groups[g]) groups[g] = [];
				hs.push(groups[g], el);
			}
		}
	}
	hs.anchors = { all: all, groups: groups, images: images };
	return hs.anchors;
	
},

getAnchors : function() {
	return hs.anchors || hs.updateAnchors();
},


close : function(el) {
	var exp = hs.getExpander(el);
	if (exp) exp.close();
	return false;
}
}; // end hs object
hs.fx = function( elem, options, prop ){
	this.options = options;
	this.elem = elem;
	this.prop = prop;

	if (!options.orig) options.orig = {};
};
hs.fx.prototype = {
	update: function(){
		(hs.fx.step[this.prop] || hs.fx.step._default)(this);
		
		if (this.options.step)
			this.options.step.call(this.elem, this.now, this);

	},
	custom: function(from, to, unit){
		this.startTime = (new Date()).getTime();
		this.start = from;
		this.end = to;
		this.unit = unit;// || this.unit || "px";
		this.now = this.start;
		this.pos = this.state = 0;

		var self = this;
		function t(gotoEnd){
			return self.step(gotoEnd);
		}

		t.elem = this.elem;

		if ( t() && hs.timers.push(t) == 1 ) {
			hs.timerId = setInterval(function(){
				var timers = hs.timers;

				for ( var i = 0; i < timers.length; i++ )
					if ( !timers[i]() )
						timers.splice(i--, 1);

				if ( !timers.length ) {
					clearInterval(hs.timerId);
				}
			}, 13);
		}
	},
	step: function(gotoEnd){
		var t = (new Date()).getTime();
		if ( gotoEnd || t >= this.options.duration + this.startTime ) {
			this.now = this.end;
			this.pos = this.state = 1;
			this.update();

			this.options.curAnim[ this.prop ] = true;

			var done = true;
			for ( var i in this.options.curAnim )
				if ( this.options.curAnim[i] !== true )
					done = false;

			if ( done ) {
				if (this.options.complete) this.options.complete.call(this.elem);
			}
			return false;
		} else {
			var n = t - this.startTime;
			this.state = n / this.options.duration;
			this.pos = this.options.easing(n, 0, 1, this.options.duration);
			this.now = this.start + ((this.end - this.start) * this.pos);
			this.update();
		}
		return true;
	}

};

hs.extend( hs.fx, {
	step: {

		opacity: function(fx){
			hs.setStyles(fx.elem, { opacity: fx.now });
		},

		_default: function(fx){
			try {
				if ( fx.elem.style && fx.elem.style[ fx.prop ] != null )
					fx.elem.style[ fx.prop ] = fx.now + fx.unit;
				else
					fx.elem[ fx.prop ] = fx.now;
			} catch (e) {}
		}
	}
});

hs.Outline =  function (outlineType, onLoad) {
	this.onLoad = onLoad;
	this.outlineType = outlineType;
	var v = hs.uaVersion, tr;
	
	this.hasAlphaImageLoader = hs.ie && v >= 5.5 && v < 7;
	if (!outlineType) {
		if (onLoad) onLoad();
		return;
	}
	
	hs.init();
	this.table = hs.createElement(
		'table', { 
			cellSpacing: 0 
		}, {
			visibility: 'hidden',
			position: 'absolute',
			borderCollapse: 'collapse',
			width: 0
		},
		hs.container,
		true
	);
	var tbody = hs.createElement('tbody', null, null, this.table, 1);
	
	this.td = [];
	for (var i = 0; i <= 8; i++) {
		if (i % 3 == 0) tr = hs.createElement('tr', null, { height: 'auto' }, tbody, true);
		this.td[i] = hs.createElement('td', null, null, tr, true);
		var style = i != 4 ? { lineHeight: 0, fontSize: 0} : { position : 'relative' };
		hs.setStyles(this.td[i], style);
	}
	this.td[4].className = outlineType +' highslide-outline';
	
	this.preloadGraphic(); 
};

hs.Outline.prototype = {
preloadGraphic : function () {
	var src = hs.graphicsDir + (hs.outlinesDir || "outlines/")+ this.outlineType +".png";
				
	var appendTo = hs.safari ? hs.container : null;
	this.graphic = hs.createElement('img', null, { position: 'absolute', 
		top: '-9999px' }, appendTo, true); // for onload trigger
	
	var pThis = this;
	this.graphic.onload = function() { pThis.onGraphicLoad(); };
	
	this.graphic.src = src;
},

onGraphicLoad : function () {
	var o = this.offset = this.graphic.width / 4,
		pos = [[0,0],[0,-4],[-2,0],[0,-8],0,[-2,-8],[0,-2],[0,-6],[-2,-2]],
		dim = { height: (2*o) +'px', width: (2*o) +'px' };
	for (var i = 0; i <= 8; i++) {
		if (pos[i]) {
			if (this.hasAlphaImageLoader) {
				var w = (i == 1 || i == 7) ? '100%' : this.graphic.width +'px';
				var div = hs.createElement('div', null, { width: '100%', height: '100%', position: 'relative', overflow: 'hidden'}, this.td[i], true);
				hs.createElement ('div', null, { 
						filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale, src='"+ this.graphic.src + "')", 
						position: 'absolute',
						width: w, 
						height: this.graphic.height +'px',
						left: (pos[i][0]*o)+'px',
						top: (pos[i][1]*o)+'px'
					}, 
				div,
				true);
			} else {
				hs.setStyles(this.td[i], { background: 'url('+ this.graphic.src +') '+ (pos[i][0]*o)+'px '+(pos[i][1]*o)+'px'});
			}
			
			if (window.opera && (i == 3 || i ==5)) 
				hs.createElement('div', null, dim, this.td[i], true);
			
			hs.setStyles (this.td[i], dim);
		}
	}
	this.graphic = null;
	if (hs.pendingOutlines[this.outlineType]) hs.pendingOutlines[this.outlineType].destroy();
	hs.pendingOutlines[this.outlineType] = this;
	if (this.onLoad) this.onLoad();
},
	
setPosition : function (pos, offset, vis, dur, easing) {
	var exp = this.exp,
		stl = exp.wrapper.style,
		offset = offset || 0,
		pos = pos || {
			x: exp.x.pos + offset,
			y: exp.y.pos + offset,
			w: exp.x.get('wsize') - 2 * offset,
			h: exp.y.get('wsize') - 2 * offset
		};
	if (vis) this.table.style.visibility = (pos.h >= 4 * this.offset) 
		? 'visible' : 'hidden';
	hs.setStyles(this.table, {
		left: (pos.x - this.offset) +'px',
		top: (pos.y - this.offset) +'px',
		width: (pos.w + 2 * this.offset) +'px'
	});
	
	pos.w -= 2 * this.offset;
	pos.h -= 2 * this.offset;
	hs.setStyles (this.td[4], {
		width: pos.w >= 0 ? pos.w +'px' : 0,
		height: pos.h >= 0 ? pos.h +'px' : 0
	});
	if (this.hasAlphaImageLoader) this.td[3].style.height 
		= this.td[5].style.height = this.td[4].style.height;	
	
},
	
destroy : function(hide) {
	if (hide) this.table.style.visibility = 'hidden';
	else hs.discardElement(this.table);
}
};

hs.Dimension = function(exp, dim) {
	this.exp = exp;
	this.dim = dim;
	this.ucwh = dim == 'x' ? 'Width' : 'Height';
	this.wh = this.ucwh.toLowerCase();
	this.uclt = dim == 'x' ? 'Left' : 'Top';
	this.lt = this.uclt.toLowerCase();
	this.ucrb = dim == 'x' ? 'Right' : 'Bottom';
	this.rb = this.ucrb.toLowerCase();
	this.p1 = this.p2 = 0;
};
hs.Dimension.prototype = {
get : function(key) {
	switch (key) {
		case 'loadingPos':
			return this.tpos + this.tb + (this.t - hs.loading['offset'+ this.ucwh]) / 2;
		case 'wsize':
			return this.size + 2 * this.cb + this.p1 + this.p2;
		case 'fitsize':
			return this.clientSize - this.marginMin - this.marginMax;
		case 'maxsize':
			return this.get('fitsize') - 2 * this.cb - this.p1 - this.p2 ;
		case 'opos':
			return this.pos - (this.exp.outline ? this.exp.outline.offset : 0);
		case 'osize':
			return this.get('wsize') + (this.exp.outline ? 2*this.exp.outline.offset : 0);
		case 'imgPad':
			return this.imgSize ? Math.round((this.size - this.imgSize) / 2) : 0;
		
	}
},
calcBorders: function() {
	// correct for borders
	this.cb = (this.exp.content['offset'+ this.ucwh] - this.t) / 2;
	
	this.marginMax = hs['margin'+ this.ucrb];
},
calcThumb: function() {
	this.t = this.exp.el[this.wh] ? parseInt(this.exp.el[this.wh]) : 
		this.exp.el['offset'+ this.ucwh];
	this.tpos = this.exp.tpos[this.dim];
	this.tb = (this.exp.el['offset'+ this.ucwh] - this.t) / 2;
	if (this.tpos == 0 || this.tpos == -1) {
		this.tpos = (hs.page[this.wh] / 2) + hs.page['scroll'+ this.uclt];		
	};
},
calcExpanded: function() {
	var exp = this.exp;
	this.justify = 'auto';
	
	
	// size and position
	this.pos = this.tpos - this.cb + this.tb;
	
	if (this.dim == 'x')
		exp.maxWidth = Math.min(exp.maxWidth || this.full, exp.maxHeight * this.full / exp.y.full); 
		
	this.size = Math.min(this.full, exp['max'+ this.ucwh] || this.full);
	this.minSize = exp.allowSizeReduction ? 
		Math.min(exp['min'+ this.ucwh], this.full) :this.full;
	if (exp.isImage && exp.useBox)	{
		this.size = exp[this.wh];
		this.imgSize = this.full;
	}
	if (this.dim == 'x' && hs.padToMinWidth) this.minSize = exp.minWidth;
	this.marginMin = hs['margin'+ this.uclt];
	this.scroll = hs.page['scroll'+ this.uclt];
	this.clientSize = hs.page[this.wh];
},
setSize: function(i) {
	var exp = this.exp;
	if (exp.isImage && (exp.useBox || hs.padToMinWidth)) {
		this.imgSize = i;
		this.size = Math.max(this.size, this.imgSize);
		exp.content.style[this.lt] = this.get('imgPad')+'px';
	} else
	this.size = i;

	exp.content.style[this.wh] = i +'px';
	exp.wrapper.style[this.wh] = this.get('wsize') +'px';
	if (exp.outline) exp.outline.setPosition();
	if (this.dim == 'x' && exp.overlayBox) exp.sizeOverlayBox(true);
},
setPos: function(i) {
	this.pos = i;
	this.exp.wrapper.style[this.lt] = i +'px';	
	
	if (this.exp.outline) this.exp.outline.setPosition();
	
}
};

hs.Expander = function(a, params, custom, contentType) {
	if (document.readyState && hs.ie && !hs.isReady) {
		hs.addEventListener(document, 'ready', function() {
			new hs.Expander(a, params, custom, contentType);
		});
		return;
	} 
	this.a = a;
	this.custom = custom;
	this.contentType = contentType || 'image';
	this.isImage = !this.isHtml;
	
	hs.continuePreloading = false;
	this.overlays = [];
	hs.init();
	var key = this.key = hs.expanders.length;
	// override inline parameters
	for (var i = 0; i < hs.overrides.length; i++) {
		var name = hs.overrides[i];
		this[name] = params && typeof params[name] != 'undefined' ?
			params[name] : hs[name];
	}
	if (!this.src) this.src = a.href;
	
	// get thumb
	var el = (params && params.thumbnailId) ? hs.$(params.thumbnailId) : a;
	el = this.thumb = el.getElementsByTagName('img')[0] || el;
	this.thumbsUserSetId = el.id || a.id;
	
	// check if already open
	for (var i = 0; i < hs.expanders.length; i++) {
		if (hs.expanders[i] && hs.expanders[i].a == a) {
			hs.expanders[i].focus();
			return false;
		}
	}	

	// cancel other
	if (!hs.allowSimultaneousLoading) for (var i = 0; i < hs.expanders.length; i++) {
		if (hs.expanders[i] && hs.expanders[i].thumb != el && !hs.expanders[i].onLoadStarted) {
			hs.expanders[i].cancelLoading();
		}
	}
	hs.expanders[key] = this;
	if (!hs.allowMultipleInstances && !hs.upcoming) {
		if (hs.expanders[key-1]) hs.expanders[key-1].close();
		if (typeof hs.focusKey != 'undefined' && hs.expanders[hs.focusKey])
			hs.expanders[hs.focusKey].close();
	}
	
	// initiate metrics
	this.el = el;
	this.tpos = hs.getPosition(el);
	hs.getPageSize();
	var x = this.x = new hs.Dimension(this, 'x');
	x.calcThumb();
	var y = this.y = new hs.Dimension(this, 'y');
	y.calcThumb();
	this.wrapper = hs.createElement(
		'div', {
			id: 'highslide-wrapper-'+ this.key,
			className: 'highslide-wrapper '+ this.wrapperClassName
		}, {
			visibility: 'hidden',
			position: 'absolute',
			zIndex: hs.zIndexCounter += 2
		}, null, true );
	
	this.wrapper.onmouseover = this.wrapper.onmouseout = hs.wrapperMouseHandler;
	if (this.contentType == 'image' && this.outlineWhileAnimating == 2)
		this.outlineWhileAnimating = 0;
	
	// get the outline
	if (!this.outlineType) {
		this[this.contentType +'Create']();
	
	} else if (hs.pendingOutlines[this.outlineType]) {
		this.connectOutline();
		this[this.contentType +'Create']();
	
	} else {
		this.showLoading();
		var exp = this;
		new hs.Outline(this.outlineType, 
			function () {
				exp.connectOutline();
				exp[exp.contentType +'Create']();
			} 
		);
	}
	return true;
};

hs.Expander.prototype = {
error : function(e) {
	// alert ('Line '+ e.lineNumber +': '+ e.message);
	window.location.href = this.src;
},

connectOutline : function() {
	var outline = this.outline = hs.pendingOutlines[this.outlineType];
	outline.exp = this;
	outline.table.style.zIndex = this.wrapper.style.zIndex - 1;
	hs.pendingOutlines[this.outlineType] = null;
},

showLoading : function() {
	if (this.onLoadStarted || this.loading) return;
	
	this.loading = hs.loading;
	var exp = this;
	this.loading.onclick = function() {
		exp.cancelLoading();
	};
	var exp = this, 
		l = this.x.get('loadingPos') +'px',
		t = this.y.get('loadingPos') +'px';
	setTimeout(function () { 
		if (exp.loading) hs.setStyles(exp.loading, { left: l, top: t, zIndex: hs.zIndexCounter++ })}
	, 100);
},

imageCreate : function() {
	var exp = this;
	
	var img = document.createElement('img');
    this.content = img;
    img.onload = function () {
    	if (hs.expanders[exp.key]) exp.contentLoaded(); 
	};
    if (hs.blockRightClick) img.oncontextmenu = function() { return false; };
    img.className = 'highslide-image';
    hs.setStyles(img, {
    	visibility: 'hidden',
    	display: 'block',
    	position: 'absolute',
		maxWidth: '9999px',
		zIndex: 3
	});
    img.title = hs.lang.restoreTitle;
    if (hs.safari) hs.container.appendChild(img);
    if (hs.ie && hs.flushImgSize) img.src = null;
	img.src = this.src;
	
	this.showLoading();
},

contentLoaded : function() {
	try {	
		if (!this.content) return;
		this.content.onload = null;
		if (this.onLoadStarted) return;
		else this.onLoadStarted = true;
		
		var x = this.x, y = this.y;
		
		if (this.loading) {
			hs.setStyles(this.loading, { top: '-9999px' });
			this.loading = null;
		}	
			x.full = this.content.width;
			y.full = this.content.height;
			
			hs.setStyles(this.content, {
				width: x.t +'px',
				height: y.t +'px'
			});
			this.wrapper.appendChild(this.content);
			hs.container.appendChild(this.wrapper);
		
		x.calcBorders();
		y.calcBorders();
		
		hs.setStyles (this.wrapper, {
			left: (x.tpos + x.tb - x.cb) +'px',
			top: (y.tpos + x.tb - y.cb) +'px'
		});
		this.getOverlays();
		
		var ratio = x.full / y.full;
		x.calcExpanded();
		this.justify(x);
		
		y.calcExpanded();
		this.justify(y);
		if (this.overlayBox) this.sizeOverlayBox(0, 1);
		
		if (this.allowSizeReduction) {
				this.correctRatio(ratio);
			if (this.isImage && this.x.full > (this.x.imgSize || this.x.size)) {
				this.createFullExpand();
				if (this.overlays.length == 1) this.sizeOverlayBox();
			}
		}
		this.show();
		
	} catch (e) {
		this.error(e);
	}
},

justify : function (p, moveOnly) {
	var tgtArr, tgt = p.target, dim = p == this.x ? 'x' : 'y';
	
		var hasMovedMin = false;
		
		var allowReduce = p.exp.allowSizeReduction;
			p.pos = Math.round(p.pos - ((p.get('wsize') - p.t) / 2));
		if (p.pos < p.scroll + p.marginMin) {
			p.pos = p.scroll + p.marginMin;
			hasMovedMin = true;		
		}
		if (!moveOnly && p.size < p.minSize) {
			p.size = p.minSize;
			allowReduce = false;
		}
		if (p.pos + p.get('wsize') > p.scroll + p.clientSize - p.marginMax) {
			if (!moveOnly && hasMovedMin && allowReduce) {
				p.size = Math.min(p.size, p.get(dim == 'y' ? 'fitsize' : 'maxsize'));
			} else if (p.get('wsize') < p.get('fitsize')) {
				p.pos = p.scroll + p.clientSize - p.marginMax - p.get('wsize');
			} else { // image larger than viewport
				p.pos = p.scroll + p.marginMin;
				if (!moveOnly && allowReduce) p.size = p.get(dim == 'y' ? 'fitsize' : 'maxsize');
			}			
		}
		
		if (!moveOnly && p.size < p.minSize) {
			p.size = p.minSize;
			allowReduce = false;
		}
		
	
		
	if (p.pos < p.marginMin) {
		var tmpMin = p.pos;
		p.pos = p.marginMin; 
		
		if (allowReduce && !moveOnly) p.size = p.size - (p.pos - tmpMin);
		
	}
},

correctRatio : function(ratio) {
	var x = this.x, 
		y = this.y,
		changed = false,
		xSize = Math.min(x.full, x.size),
		ySize = Math.min(y.full, y.size),
		useBox = (this.useBox || hs.padToMinWidth);
	
	if (xSize / ySize > ratio) { // width greater
		xSize = ySize * ratio;
		if (xSize < x.minSize) { // below minWidth
			xSize = x.minSize;
			ySize = xSize / ratio;
		}
		changed = true;
	
	} else if (xSize / ySize < ratio) { // height greater
		ySize = xSize / ratio;
		changed = true;
	}
	
	if (hs.padToMinWidth && x.full < x.minSize) {
		x.imgSize = x.full;
		y.size = y.imgSize = y.full;
	} else if (this.useBox) {
		x.imgSize = xSize;
		y.imgSize = ySize;
	} else {
		x.size = xSize;
		y.size = ySize;
	}
	changed = this.fitOverlayBox(useBox ? null : ratio, changed);
	if (useBox && y.size < y.imgSize) {
		y.imgSize = y.size;
		x.imgSize = y.size * ratio;
	}
	if (changed || useBox) {
		x.pos = x.tpos - x.cb + x.tb;
		x.minSize = x.size;
		this.justify(x, true);
	
		y.pos = y.tpos - y.cb + y.tb;
		y.minSize = y.size;
		this.justify(y, true);
		if (this.overlayBox) this.sizeOverlayBox();
	}
},
fitOverlayBox : function(ratio, changed) {
	var x = this.x, y = this.y;
	if (this.overlayBox) {
		while (y.size > this.minHeight && x.size > this.minWidth 
				&&  y.get('wsize') > y.get('fitsize')) {
			y.size -= 10;
			if (ratio) x.size = y.size * ratio;
			this.sizeOverlayBox(0, 1);
			changed = true;
		}
	}
	return changed;
},

show : function () {
	var x = this.x, y = this.y;
	this.doShowHide('hidden');
	
	// Apply size change
	this.changeSize(
		1, {
			wrapper: {
				width : x.get('wsize'),
				height : y.get('wsize'),
				left: x.pos,
				top: y.pos
			},
			content: {
				left: x.p1 + x.get('imgPad'),
				top: y.p1 + y.get('imgPad'),
				width:x.imgSize ||x.size,
				height:y.imgSize ||y.size
			}
		},
		hs.expandDuration
	);
},

changeSize : function(up, to, dur) {
	
	if (this.outline && !this.outlineWhileAnimating) {
		if (up) this.outline.setPosition();
		else this.outline.destroy();
	}
	
	
	if (!up) this.destroyOverlays();
	
	var exp = this,
		x = exp.x,
		y = exp.y,
		easing = this.easing;
	if (!up) easing = this.easingClose || easing;
	var after = up ?
		function() {
				
			if (exp.outline) exp.outline.table.style.visibility = "visible";
			setTimeout(function() {
				exp.afterExpand();
			}, 50);
		} :
		function() {
			exp.afterClose();
		};
	if (up) hs.setStyles( this.wrapper, {
		width: x.t +'px',
		height: y.t +'px'
	});
	if (this.fadeInOut) {
		hs.setStyles(this.wrapper, { opacity: up ? 0 : 1 });
		hs.extend(to.wrapper, { opacity: up });
	}
	hs.animate( this.wrapper, to.wrapper, {
		duration: dur,
		easing: easing,
		step: function(val, args) {
			if (exp.outline && exp.outlineWhileAnimating && args.prop == 'top') {
				var fac = up ? args.pos : 1 - args.pos;
				var pos = {
					w: x.t + (x.get('wsize') - x.t) * fac,
					h: y.t + (y.get('wsize') - y.t) * fac,
					x: x.tpos + (x.pos - x.tpos) * fac,
					y: y.tpos + (y.pos - y.tpos) * fac
				};
				exp.outline.setPosition(pos, 0, 1);				
			}
		}
	});
	hs.animate( this.content, to.content, dur, easing, after);
	if (up) {
		this.wrapper.style.visibility = 'visible';
		this.content.style.visibility = 'visible';
		this.a.className += ' highslide-active-anchor';
	}
},

afterExpand : function() {
	this.isExpanded = true;	
	this.focus();
	if (hs.upcoming && hs.upcoming == this.a) hs.upcoming = null;
	this.prepareNextOutline();
	var p = hs.page, mX = hs.mouse.x + p.scrollLeft, mY = hs.mouse.y + p.scrollTop;
	this.mouseIsOver = this.x.pos < mX && mX < this.x.pos + this.x.get('wsize')
		&& this.y.pos < mY && mY < this.y.pos + this.y.get('wsize');	
	if (this.overlayBox) this.showOverlays();
	
},

prepareNextOutline : function() {
	var key = this.key;
	var outlineType = this.outlineType;
	new hs.Outline(outlineType, 
		function () { try { hs.expanders[key].preloadNext(); } catch (e) {} });
},

preloadNext : function() {
	var next = this.getAdjacentAnchor(1);
	if (next && next.onclick.toString().match(/hs\.expand/)) 
		var img = hs.createElement('img', { src: hs.getSrc(next) });
},


getAdjacentAnchor : function(op) {
	var current = this.getAnchorIndex(), as = hs.anchors.groups[this.slideshowGroup || 'none'];
	
	/*< ? if ($cfg->slideshow) : ?>s*/
	if (!as[current + op] && this.slideshow && this.slideshow.repeat) {
		if (op == 1) return as[0];
		else if (op == -1) return as[as.length-1];
	}
	/*< ? endif ?>s*/
	return as[current + op] || null;
},

getAnchorIndex : function() {
	var arr = hs.getAnchors().groups[this.slideshowGroup || 'none'];
	if (arr) for (var i = 0; i < arr.length; i++) {
		if (arr[i] == this.a) return i; 
	}
	return null;
},


cancelLoading : function() {
	hs.discardElement (this.wrapper);
	hs.expanders[this.key] = null;
	if (this.loading) hs.loading.style.left = '-9999px';
},

writeCredits : function () {
	this.credits = hs.createElement('a', {
		href: hs.creditsHref,
		target: hs.creditsTarget,
		className: 'highslide-credits',
		innerHTML: hs.lang.creditsText,
		title: hs.lang.creditsTitle
	});
	this.createOverlay({ 
		overlayId: this.credits, 
		position: this.creditsPosition || 'top left' 
	});
},

getInline : function(types, addOverlay) {
	for (var i = 0; i < types.length; i++) {
		var type = types[i], s = null;
		if (!this[type +'Id'] && this.thumbsUserSetId)  
			this[type +'Id'] = type +'-for-'+ this.thumbsUserSetId;
		if (this[type +'Id']) this[type] = hs.getNode(this[type +'Id']);
		if (!this[type] && !this[type +'Text'] && this[type +'Eval']) try {
			s = eval(this[type +'Eval']);
		} catch (e) {}
		if (!this[type] && this[type +'Text']) {
			s = this[type +'Text'];
		}
		if (!this[type] && !s) {
			this[type] = hs.getNode(this.a['_'+ type + 'Id']);
			if (!this[type]) {
				var next = this.a.nextSibling;
				while (next && !hs.isHsAnchor(next)) {
					if ((new RegExp('highslide-'+ type)).test(next.className || null)) {
						if (!next.id) this.a['_'+ type + 'Id'] = next.id = 'hsId'+ hs.idCounter++;
						this[type] = hs.getNode(next.id);
						break;
					}
					next = next.nextSibling;
				}
			}
		}
		
		if (!this[type] && s) this[type] = hs.createElement('div', 
				{ className: 'highslide-'+ type, innerHTML: s } );
		
		if (addOverlay && this[type]) {
			var o = { position: (type == 'heading') ? 'above' : 'below' };
			for (var x in this[type+'Overlay']) o[x] = this[type+'Overlay'][x];
			o.overlayId = this[type];
			this.createOverlay(o);
		}
	}
},


// on end move and resize
doShowHide : function(visibility) {
	if (hs.hideSelects) this.showHideElements('SELECT', visibility);
	if (hs.hideIframes) this.showHideElements('IFRAME', visibility);
	if (hs.geckoMac) this.showHideElements('*', visibility);
},
showHideElements : function (tagName, visibility) {
	var els = document.getElementsByTagName(tagName);
	var prop = tagName == '*' ? 'overflow' : 'visibility';
	for (var i = 0; i < els.length; i++) {
		if (prop == 'visibility' || (document.defaultView.getComputedStyle(
				els[i], "").getPropertyValue('overflow') == 'auto'
				|| els[i].getAttribute('hidden-by') != null)) {
			var hiddenBy = els[i].getAttribute('hidden-by');
			if (visibility == 'visible' && hiddenBy) {
				hiddenBy = hiddenBy.replace('['+ this.key +']', '');
				els[i].setAttribute('hidden-by', hiddenBy);
				if (!hiddenBy) els[i].style[prop] = els[i].origProp;
			} else if (visibility == 'hidden') { // hide if behind
				var elPos = hs.getPosition(els[i]);
				elPos.w = els[i].offsetWidth;
				elPos.h = els[i].offsetHeight;
			
				
					var clearsX = (elPos.x + elPos.w < this.x.get('opos') 
						|| elPos.x > this.x.get('opos') + this.x.get('osize'));
					var clearsY = (elPos.y + elPos.h < this.y.get('opos') 
						|| elPos.y > this.y.get('opos') + this.y.get('osize'));
				var wrapperKey = hs.getWrapperKey(els[i]);
				if (!clearsX && !clearsY && wrapperKey != this.key) { // element falls behind image
					if (!hiddenBy) {
						els[i].setAttribute('hidden-by', '['+ this.key +']');
						els[i].origProp = els[i].style[prop];
						els[i].style[prop] = 'hidden';
						
					} else if (hiddenBy.indexOf('['+ this.key +']') == -1) {
						els[i].setAttribute('hidden-by', hiddenBy + '['+ this.key +']');
					}
				} else if ((hiddenBy == '['+ this.key +']' || hs.focusKey == wrapperKey)
						&& wrapperKey != this.key) { // on move
					els[i].setAttribute('hidden-by', '');
					els[i].style[prop] = els[i].origProp || '';
				} else if (hiddenBy && hiddenBy.indexOf('['+ this.key +']') > -1) {
					els[i].setAttribute('hidden-by', hiddenBy.replace('['+ this.key +']', ''));
				}
						
			}
		}
	}
},

focus : function() {
	this.wrapper.style.zIndex = hs.zIndexCounter += 2;
	// blur others
	for (var i = 0; i < hs.expanders.length; i++) {
		if (hs.expanders[i] && i == hs.focusKey) {
			var blurExp = hs.expanders[i];
			blurExp.content.className += ' highslide-'+ blurExp.contentType +'-blur';
				blurExp.content.style.cursor = hs.ie ? 'hand' : 'pointer';
				blurExp.content.title = hs.lang.focusTitle;
		}
	}
	
	// focus this
	if (this.outline) this.outline.table.style.zIndex 
		= this.wrapper.style.zIndex - 1;
	this.content.className = 'highslide-'+ this.contentType;
		this.content.title = hs.lang.restoreTitle;
		
		if (hs.restoreCursor) {
			hs.styleRestoreCursor = window.opera ? 'pointer' : 'url('+ hs.graphicsDir + hs.restoreCursor +'), pointer';
			if (hs.ie && hs.uaVersion < 6) hs.styleRestoreCursor = 'hand';
			this.content.style.cursor = hs.styleRestoreCursor;
		}
		
	hs.focusKey = this.key;	
	hs.addEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler);	
},
moveTo: function(x, y) {
	this.x.setPos(x);
	this.y.setPos(y);
},
resize : function (e) {
	var w, h, r = e.width / e.height;
	w = Math.max(e.width + e.dX, Math.min(this.minWidth, this.x.full));
	if (this.isImage && Math.abs(w - this.x.full) < 12) w = this.x.full;
	h = w / r;
	if (h < Math.min(this.minHeight, this.y.full)) {
		h = Math.min(this.minHeight, this.y.full);
		if (this.isImage) w = h * r;
	}
	this.resizeTo(w, h);
},
resizeTo: function(w, h) {
	this.y.setSize(h);
	this.x.setSize(w);
	this.wrapper.style.height = this.y.get('wsize') +'px';
},

close : function() {
	if (this.isClosing || !this.isExpanded) return;
	this.isClosing = true;
	
	hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler);
	
	try {
		this.content.style.cursor = 'default';
		this.changeSize(
			0, {
				wrapper: {
					width : this.x.t,
					height : this.y.t,
					left: this.x.tpos - this.x.cb + this.x.tb,
					top: this.y.tpos - this.y.cb + this.y.tb
				},
				content: {
					left: 0,
					top: 0,
					width: this.x.t,
					height: this.y.t
				}
			}, hs.restoreDuration
		);
	} catch (e) { this.afterClose(); }
},

createOverlay : function (o) {
	var el = o.overlayId;
	if (typeof el == 'string') el = hs.getNode(el);
	if (o.html) el = hs.createElement('div', { innerHTML: o.html });
	if (!el || typeof el == 'string') return;
	el.style.display = 'block';
	this.genOverlayBox();
	var width = o.width && /^[0-9]+(px|%)$/.test(o.width) ? o.width : 'auto';
	if (/^(left|right)panel$/.test(o.position) && !/^[0-9]+px$/.test(o.width)) width = '200px';
	var overlay = hs.createElement(
		'div', {
			id: 'hsId'+ hs.idCounter++,
			hsId: o.hsId
		}, {
			position: 'absolute',
			visibility: 'hidden',
			width: width,
			direction: hs.lang.cssDirection || '',
			opacity: 0
		},this.overlayBox,
		true
	);
	
	overlay.appendChild(el);
	hs.extend(overlay, {
		opacity: 1,
		offsetX: 0,
		offsetY: 0,
		dur: (o.fade === 0 || o.fade === false || (o.fade == 2 && hs.ie)) ? 0 : 250
	});
	hs.extend(overlay, o);
		
	if (this.gotOverlays) {
		this.positionOverlay(overlay);
		if (!overlay.hideOnMouseOut || this.mouseIsOver) 
			hs.animate(overlay, { opacity: overlay.opacity }, overlay.dur);
	}
	hs.push(this.overlays, hs.idCounter - 1);
},
positionOverlay : function(overlay) {
	var p = overlay.position || 'middle center',
		offX = overlay.offsetX,
		offY = overlay.offsetY;
	if (overlay.parentNode != this.overlayBox) this.overlayBox.appendChild(overlay);
	if (/left$/.test(p)) overlay.style.left = offX +'px'; 
	
	if (/center$/.test(p))	hs.setStyles (overlay, { 
		left: '50%',
		marginLeft: (offX - Math.round(overlay.offsetWidth / 2)) +'px'
	});	
	
	if (/right$/.test(p)) overlay.style.right = - offX +'px';
		
	if (/^leftpanel$/.test(p)) { 
		hs.setStyles(overlay, {
			right: '100%',
			marginRight: this.x.cb +'px',
			top: - this.y.cb +'px',
			bottom: - this.y.cb +'px',
			overflow: 'auto'
		});		 
		this.x.p1 = overlay.offsetWidth;
	
	} else if (/^rightpanel$/.test(p)) {
		hs.setStyles(overlay, {
			left: '100%',
			marginLeft: this.x.cb +'px',
			top: - this.y.cb +'px',
			bottom: - this.y.cb +'px',
			overflow: 'auto'
		});
		this.x.p2 = overlay.offsetWidth;
	}

	if (/^top/.test(p)) overlay.style.top = offY +'px'; 
	if (/^middle/.test(p))	hs.setStyles (overlay, { 
		top: '50%', 
		marginTop: (offY - Math.round(overlay.offsetHeight / 2)) +'px'
	});	
	if (/^bottom/.test(p)) overlay.style.bottom = - offY +'px';
	if (/^above$/.test(p)) {
		hs.setStyles(overlay, {
			left: (- this.x.p1 - this.x.cb) +'px',
			right: (- this.x.p2 - this.x.cb) +'px',
			bottom: '100%',
			marginBottom: this.y.cb +'px',
			width: 'auto'
		});
		this.y.p1 = overlay.offsetHeight;
	
	} else if (/^below$/.test(p)) {
		hs.setStyles(overlay, {
			position: 'relative',
			left: (- this.x.p1 - this.x.cb) +'px',
			right: (- this.x.p2 - this.x.cb) +'px',
			top: '100%',
			marginTop: this.y.cb +'px',
			width: 'auto'
		});
		this.y.p2 = overlay.offsetHeight;
		overlay.style.position = 'absolute';
	}
},

getOverlays : function() {	
	this.getInline(['heading', 'caption'], true);
	if (this.heading && this.dragByHeading) this.heading.className += ' highslide-move';
	if (hs.showCredits) this.writeCredits();
	for (var i = 0; i < hs.overlays.length; i++) {
		var o = hs.overlays[i], tId = o.thumbnailId, sg = o.slideshowGroup;
		if ((!tId && !sg) || (tId && tId == this.thumbsUserSetId)
				|| (sg && sg === this.slideshowGroup)) {
			this.createOverlay(o);
		}
	}
	var os = [];
	for (var i = 0; i < this.overlays.length; i++) {
		var o = hs.$('hsId'+ this.overlays[i]);
		if (/panel$/.test(o.position)) this.positionOverlay(o);
		else hs.push(os, o);
	}
	for (var i = 0; i < os.length; i++) this.positionOverlay(os[i]);
	this.gotOverlays = true;
},
genOverlayBox : function() {
	if (!this.overlayBox) this.overlayBox = hs.createElement (
		'div', {
			className: this.wrapperClassName
		}, {
			position : 'absolute',
			width: (this.x.size || (this.useBox ? this.width : null) 
				|| this.x.full) +'px',
			height: (this.y.size || this.y.full) +'px',
			visibility : 'hidden',
			overflow : 'hidden',
			zIndex : hs.ie ? 4 : 'auto'
		},
		hs.container,
		true
	);
},
sizeOverlayBox : function(doWrapper, doPanels) {
	var overlayBox = this.overlayBox, 
		x = this.x,
		y = this.y;
	hs.setStyles( overlayBox, {
		width: x.size +'px', 
		height: y.size +'px'
	});
	if (doWrapper || doPanels) {
		for (var i = 0; i < this.overlays.length; i++) {
			var o = hs.$('hsId'+ this.overlays[i]);
			var ie6 = (hs.ieLt7 || document.compatMode == 'BackCompat');
			if (o && /^(above|below)$/.test(o.position)) {
				if (ie6) {
					o.style.width = (overlayBox.offsetWidth + 2 * x.cb
						+ x.p1 + x.p2) +'px';
				}
				y[o.position == 'above' ? 'p1' : 'p2'] = o.offsetHeight;
			}
			if (o && ie6 && /^(left|right)panel$/.test(o.position)) {
				o.style.height = (overlayBox.offsetHeight + 2* y.cb) +'px';
			}
		}
	}
	if (doWrapper) {
		hs.setStyles(this.content, {
			top: y.p1 +'px'
		});
		hs.setStyles(overlayBox, {
			top: (y.p1 + y.cb) +'px'
		});
	}
},

showOverlays : function() {
	var b = this.overlayBox;
	b.className = '';
	hs.setStyles(b, {
		top: (this.y.p1 + this.y.cb) +'px',
		left: (this.x.p1 + this.x.cb) +'px',
		overflow : 'visible'
	});
	if (hs.safari) b.style.visibility = 'visible';
	this.wrapper.appendChild (b);
	for (var i = 0; i < this.overlays.length; i++) {
		var o = hs.$('hsId'+ this.overlays[i]);
		o.style.zIndex = 4;
		if (!o.hideOnMouseOut || this.mouseIsOver) {
			o.style.visibility = 'visible';
			hs.setStyles(o, { visibility: 'visible', display: '' });
			hs.animate(o, { opacity: o.opacity }, o.dur);
		}
	}
},

destroyOverlays : function() {
	if (!this.overlays.length) return;
	hs.discardElement(this.overlayBox);
},



createFullExpand : function () {
	this.fullExpandLabel = hs.createElement(
		'a', {
			href: 'javascript:hs.expanders['+ this.key +'].doFullExpand();',
			title: hs.lang.fullExpandTitle,
			className: 'highslide-full-expand'
		}
	);
	
	this.createOverlay({ 
		overlayId: this.fullExpandLabel, 
		position: hs.fullExpandPosition, 
		hideOnMouseOut: true, 
		opacity: hs.fullExpandOpacity
	});
},

doFullExpand : function () {
	try {
		if (this.fullExpandLabel) hs.discardElement(this.fullExpandLabel);
		
		this.focus();
		var xSize = this.x.size;
		this.resizeTo(this.x.full, this.y.full);
		
		var xpos = this.x.pos - (this.x.size - xSize) / 2;
		if (xpos < hs.marginLeft) xpos = hs.marginLeft;
		
		this.moveTo(xpos, this.y.pos);
		this.doShowHide('hidden');
	
	} catch (e) {
		this.error(e);
	}
},


afterClose : function () {
	this.a.className = this.a.className.replace('highslide-active-anchor', '');
	
	this.doShowHide('visible');
		if (this.outline && this.outlineWhileAnimating) this.outline.destroy();
	
		hs.discardElement(this.wrapper);
	
	hs.expanders[this.key] = null;		
	hs.reOrder();
}

};
hs.langDefaults = hs.lang;
// history
var HsExpander = hs.Expander;
if (hs.ie) {
	(function () {
		try {
			document.documentElement.doScroll('left');
		} catch (e) {
			setTimeout(arguments.callee, 50);
			return;
		}
		hs.ready();
	})();
}
hs.addEventListener(document, 'DOMContentLoaded', hs.ready);
hs.addEventListener(window, 'load', hs.ready);

// set handlers
hs.addEventListener(document, 'ready', function() {
	if (hs.expandCursor) {
		var style = hs.createElement('style', { type: 'text/css' }, null, 
			document.getElementsByTagName('HEAD')[0]);
			
		function addRule(sel, dec) {		
			if (!hs.ie) {
				style.appendChild(document.createTextNode(sel + " {" + dec + "}"));
			} else {
				var last = document.styleSheets[document.styleSheets.length - 1];
				if (typeof(last.addRule) == "object") last.addRule(sel, dec);
			}
		}
		function fix(prop) {
			return 'expression( ( ( ignoreMe = document.documentElement.'+ prop +
				' ? document.documentElement.'+ prop +' : document.body.'+ prop +' ) ) + \'px\' );';
		}
		if (hs.expandCursor) addRule ('.highslide img', 
			'cursor: url('+ hs.graphicsDir + hs.expandCursor +'), pointer !important;');
	}
});
hs.addEventListener(window, 'resize', function() {
	hs.getPageSize();
});
hs.addEventListener(document, 'mousemove', function(e) {
	hs.mouse = { x: e.clientX, y: e.clientY	};
});
hs.addEventListener(document, 'mousedown', hs.mouseClickHandler);
hs.addEventListener(document, 'mouseup', hs.mouseClickHandler);

hs.addEventListener(document, 'ready', hs.getAnchors);
hs.addEventListener(window, 'load', hs.preloadImages);
}



//Semi-Close-Button

hs.registerOverlay({
	html: '<div class="closebutton" onclick="return hs.close(this)" title=""></div>',
	position: 'top right',
	fade: 2 // fading the semi-transparent overlay looks bad in IE
});

hs.graphicsDir = 'graphics/';
hs.wrapperClassName = 'borderless';

/* ---------------------------------------------------
 *  HIGHSLIDE Ende
 * --------------------------------------------------- 
 */

// flv-Player einbauen (Pfade in absolute Pfade umwandeln) - nur für CHM
function GetCurrDir() {
  var X, Y, sl, a, ra, dir;
  ra = /::/;
  a = location.href.search(ra);
  if (a <= 0)   //no a CHM - return an empty string
    return('');

  //find the index of the first colon in the string 
  ra = /:/;
  a = location.href.search(ra);
  if (a == 2)
    X = 14;  //prefix = mk:@MSITStore:
  else
    X = 7;   //prefix = ms-its: 

  //find last back slash
  sl = "\\";
  Y = location.href.lastIndexOf(sl);
  dir = location.href.substring(X, Y);

  //UnEscape path - EG. Replace %20 with spaces
  var dir2 = unescape(dir) 
  return(dir2);
  }
