

// defining mouse events
if (document.getElementById && document.getElementsByTagName) {

    var alinks = document.getElementsByTagName('a');
    for (var i = 0; i < alinks.length; i++) {
      var type='';
      var type2='';
      var pid="";
      var fn=null;
      if (alinks[i].rel) {
        if (alinks[i].rel == "tooltip") {
          type = "mouseover";
          fn = ShowToolTip; 
          type2 = "mouseout";
          fn2 = HideToolTip;
        }
        else {
          var st = alinks[i].rel;
          if (st.indexOf('openwin')>-1) {
            alinks[i].href="javascript:void(0);";
            type = "click";
            fn = OpenWin;
          };
        };
      };
      if (alinks[i].id) {
        pid = alinks[i].id;
        if (pid.indexOf("liMenu_") > -1) {
          type = "mouseover";
          fn = HighlightMenu; 
          type2 = "mouseout";
          fn2 = UnhighlightMenu;
        };
      }
      else { // parent without id
        if (alinks[i].href) {
          if (! alinks[i].rel) { // exclude lightbox
            var shref=alinks[i].href;
            var x = shref.indexOf("#");
            if (x>-1 && x < shref.length-3) { // exclude # only: refs for page top
              /* alinks[i].id = alinks[i].href;
              alinks[i].href = "javascript:void(0);";
              type = "click";
              fn = JumpToInnerPageLink; */
            }
            else if (document.URL.indexOf('index') > 0) {
              type = "mouseover";
              fn = HighlightLink; 
            };
          };
        }
      };
      if (type.length>1) {
        addEvent(alinks[i],type,fn);
      };
      if (type2.length>1) {
        addEvent(alinks[i],type2,fn2);
      };
    };
    SwitchFontSize();
    
    // all elements with class name "playsound"
    // var divs = getElementsByClassName("playsound");
    // for(i=0; i < divs.length;i++) {
    //   addEvent(divs[i],"mouseover",PlaySound); 
    // };
    
    // all elements with class name "tooltipp"
    var divs = getElementsByClassName("tooltip");
    for(i=0; i < divs.length;i++) {
      addEvent(divs[i],"mouseover",ShowToolTipClass);
      addEvent(divs[i],"mouseout",HideToolTipClass); 
    };
    
    // to unhighlight images after mouse over
    if (document.URL.indexOf('index') > 0) {
      addEvent(document.getElementById('nav'),"mouseout",UnhighlightImg);
    };  
    
    // language
    addEvent(document.forms[0].elements[0],"change",SwitchLan);
    document.getElementById('isubmitlan').style.display='none';
    
    // soundManagerInit();
    
    // switch image top right
    var waescheklammer_pic = document.getElementById("flright11");
    if (!waescheklammer_pic) {waescheklammer_pic = document.getElementById("flright21");}
    
    if (waescheklammer_pic)
    {
      // to add new image: name the image like the standard image (eg. waescheklammer_bottom) followed by an integer, which is denoted in the array
      var waescheklammer_array=[
      ['6','firmen__und_einzelunterricht'],
      ['3','berufsorientierung_un_deutsch_am_pc'],
      ['1','studienvorbereitende_kurse'],
      ['4','testdaf_vorbereitungskurse'],
      ['7','berufsbezogene_deutschfoerderung'],
      ['2','sprachk_in'],
      ['8','sprachk_so'],
      ['0','sprachk'],
      ['5','deutschkurse_masterprogramm__tuhh_'],
      ['9','studienerg_nzung_medizin'],
      ['10','pr_fungstraining']
      ]
      var pagename = window.location.pathname;
      pagename = pagename.substring(pagename.lastIndexOf('/') + 1);
      
      for (i=0; i < waescheklammer_array.length; i++)
      {

        if (pagename.indexOf(waescheklammer_array[i][[1][0]]) >= 0)
        {
        
          waescheklammer_pic.src = 'images/waescheklammer_bottom' + waescheklammer_array[i][[0][0]] + '.jpg';
          //alert(waescheklammer_pic.src);
          if (waescheklammer_array[i][[0][0]] == "2") // map and form rows
          {
            
            // resize map image
            var img_map = document.getElementById('jumpmap');
            var img_arr = document.getElementById('jumpmape');
            var img_div = document.getElementById('jumpdiv');
            var size_factor = (document.getElementById('nav').offsetWidth + 40) / img_map.width;
            img_map.width = runde(img_map.width * size_factor,0);
            img_map.height = runde(img_map.height * size_factor,0);
            img_arr.width = img_map.width;
            img_arr.height = img_map.height;
            var ml = img_map.width; // margin-right not working when set as CSS style (Firefox 3.6.11)
            img_map.style.marginLeft = "-" + parseInt(ml + 20) + "px";
            img_arr.style.marginLeft = "-" + ml + "px";
            img_arr.style.marginBottom = "-" + img_map.height + "px";
            img_map.style.marginBottom = runde(parseInt(img_map.style.marginBottom) * size_factor,0) + "px";
            ml = runde(parseInt(img_div.style.marginBottom) * size_factor,0);
            img_div.style.marginBottom = ml  + "px";
            img_div.style.marginTop = "-" + ml  + "px";
            
            divs = document.getElementsByTagName("area");
            var co = ""; 
            for(i=0; i < divs.length;i++) {
              // match area coords to image size
              co = divs[i].coords;
              coarray = co.split(",");
              for (j=0;j<3;j++)
              {
                coarray[j] = runde(coarray[j] * size_factor,0);               
              }
              divs[i].coords = coarray.join(",");
              // add event
              addEvent(divs[i],"mouseover",Rowswitch);
              
              var xtables = document.getElementsByTagName('table');
              var xtable = xtables[xtables.length - 1];
              var iescks = xtable.rows.length; // with IE 8 xtable.rows.length decreases when appending childs to table

            };           
          };
          break;
        }
      }
    }

};


// http://www.ilfilosofo.com/blog/2008/04/14/addevent-preserving-this/
function addEvent(obj,type,fn) {
  if (obj.addEventListener) {
      obj.addEventListener(type, fn, false);
  } else if (obj.attachEvent) {
        obj.attachEvent('on' + type, function () {
        return fn.call(obj, window.event);
      });
  };
}


function Rowswitch(e) {

  if (!e.target) {e.target=e.srcElement;};
  var o = e.target;
  
  if (document.all) {o.href="javascript:void(0);"}; // IE 8 requires href to show hand cursor
   
  var maparea_alt = o.alt; // Osdorf
  
  img_arr.src = "images/" + maparea_alt + ".gif";
   
  for (i=0; i<iescks;i++) {   

    if (xtable.rows[i].cells[0].firstChild.nodeValue == maparea_alt) // if first word in first cell of row matches "alt" value in map area
    {    

      if (document.all) {
        var xrow = xtable.rows[i]; // IE 8 stops doing this after first mouseover if xtable.appendChild(ierow) is used --> this results in dencrease of xtable.rows.length !!!;
        var ierow = xtable.rows[1];     
        ierow.parentNode.replaceChild(xrow,ierow);
        xtable.childNodes[1].appendChild(ierow);
      }
      else // Ffx 3.6.11 does not run the above on first mouse event due to unknown reasons
      {
        var xrow = xtable.rows[i].innerHTML;  
        xtable.rows[i].innerHTML = xtable.rows[1].innerHTML; // IE 8 throws "unknown runtime error" when doing this
        xtable.rows[1].innerHTML = xrow;
      };     
        break;
    }

  }
}



function HighlightLink(e) {
  if (!e.target) {e.target=e.srcElement;};
  var o = e.target;
  var x = o.parentNode.className.indexOf("level");
  if (x>-1) {
    // o.style.color = "rgb(0,102,153)"; //"rgb(204,0,0)";
    // to highlight images on index page on mouse over menu
    var menunumber = o.parentNode.id;
    var idx = menunumber.indexOf('_');
    if (idx > 0) {
      var thisid = 0;
      var o;
      UnhighlightImg();
      menunumber = menunumber.substring(idx+1); // number of menu item
      if (menunumber > 1) {
        //var himgs = getElementsByClassName("mi");
        for(i=menunumber; i > 1;i--) {
          thisid = 'iiMenu_' + i;
          o = document.getElementById(thisid);
          if (o) {
            var xsrc = o.src;
            o.src = xsrc.replace('_off','_on');
            break;
          };
        };
      };
    };
  };
}
function UnhighlightImg(e) {
  var xsrc = '';
  var himgs = getElementsByClassName("mi");
  for(i=0; i < himgs.length;i++) {
    xsrc = himgs[i].src;
    if (xsrc.indexOf('_on')>0) {
      himgs[i].src = xsrc.replace('_on','_off');
    };
  };
}


function HighlightMenu(e) {
  if (!e.target) {e.target=e.srcElement;};
  var sid = e.target.id;
  sid = sid.substr(1);
  var o = document.getElementById(sid);
  if (o) {
    var divs = getElementsByClassName("menuhi");
    for(i=0; i <divs.length;i++) {
      divs[i].className = 'level1'; 
    };
    o.className = "menuhi";
    oo = document.getElementById('i' + o.id);
    if (oo) {
      oo.src="images/" + oo.id + "_on.jpg";
      //sid = "images/" + oo.id + "_bg.jpg";
      oo = document.getElementById('p' + oo.id);
      //oo.style.backgroundImage="url(" + sid + ")";
    };
  }; 
}
function UnhighlightMenu(e) {
  if (!e.target) {e.target=e.srcElement;};
  var sid = e.target.id;
  sid = sid.substr(1);
  var o = document.getElementById(sid);
  if (o) {
    o.className = "level1";
    oo = document.getElementById('i' + o.id);
    if (oo) {
      oo.src="images/" + oo.id + "_off.jpg";
      //sid = "images/" + oo.id + "_bg_gr.jpg";
      oo = document.getElementById('p' + oo.id);
      //oo.style.backgroundImage="url(" + sid + ")";
    };
  };
}

function SwitchLan(e) {
  if (!e.target) {e.target=e.srcElement;};
  
  document.forms[0].submit();
  
}

// on basis of: http://www.dhtmlgoodies.com/scripts/bubble-tooltip/bubble-tooltip.html
function ShowToolTip(e) {
	if (!e.target) {e.target=e.srcElement;};
	var o = e.target.parentNode;
	if( o.title) {
  	var obj = document.getElementById('itooltip');
  	var obj2 = document.getElementById('itooltip_content');
  	var text = o.title;
  	obj2.innerHTML = text;
  	o.title = '';
  	obj.style.display = 'block';
  	// values are equal, but position nevertheless is sometimes wrong in all browsers
  	// if the div "itooltip" is positioned at a different place inside the html file than it is positioned now
    var pos = getElementAbsolutePos(e.target);
    obj.style.left = pos.x + e.target.offsetWidth - 10 + 'px';
    obj.style.top = pos.y - obj.offsetHeight  + 10 + 'px';

  }; 
}
function HideToolTip(e) {
  if (!e.target) {e.target=e.srcElement;};
	var o = e.target.parentNode;
  o.title = document.getElementById('itooltip_content').innerHTML;
  document.getElementById('itooltip').style.display = 'none';
}

function ShowToolTipClass(e) {
	if (!e.target) {e.target=e.srcElement;};
	var o = e.target;
	if( o.alt) {
  	var obj = document.getElementById('itooltip');
  	var obj2 = document.getElementById('itooltip_content');
  	var text = o.alt;
  	obj2.innerHTML = text;
  	obj.style.display = 'block';
    var pos = getElementAbsolutePos(e.target);
    obj.style.left = pos.x + e.target.offsetWidth - 10 + 'px';
    obj.style.top = pos.y - obj.offsetHeight  + 10 + 'px';

  }; 
}
function HideToolTipClass(e) {
  if (!e.target) {e.target=e.srcElement;};
	var o = e.target;
  document.getElementById('itooltip').style.display = 'none';
}





/* one more CSS problem: Firefox, IE and Opera and perhaps more browsers jump too high to links resulting from fixed header height */
/* using % as header hight to fix this stuff is not possible */
/* no CSS cross-browser solution for several browsers found */
function JumpToInnerPageLink(e) {
  
  if (!e.target) {e.target=e.srcElement;} // IE quirk, http://www.javascriptkit.com/jsref/event.shtml
  
  if (e.target.id) {
    var sid = e.target.id;
    var i=sid.indexOf("#");
    if (i>-1) {
      var sanchor = sid.substring(i+1);
      if (document.getElementById("i_" + sanchor)) {
        var tar = document.getElementById("i_" + sanchor);
        footerdiv = document.getElementById("footer_fixed");
        var h = footerdiv.offsetHeight;
        var z = tar.offsetTop;
        window.scrollTo(0,z-h+10);
      };
    };
  };
}

// http://robertnyman.com/2005/11/07/the-ultimate-getelementsbyclassname/
function getElementsByClassName(className, tag, elm){
	var testClass = new RegExp("(^|\\s)" + className + "(\\s|$)");
	var tag = tag || "*";
	var elm = elm || document;
	var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
	var returnElements = [];
	var current;
	var length = elements.length;
	for(var i=0; i<length; i++){
		current = elements[i];
		if(testClass.test(current.className)){
			returnElements.push(current);
		}
	}
	return returnElements;
}



function PlaySound(e) {
  if (!e.target) {e.target=e.srcElement;}
  var obj = document.getElementById("soundspan");
  var y = e.target.src;
  y = y.match(/[-_\w]+[.][\w]+$/i)[0];
  y = y.slice(0,-4);
  soundManager.play(y); 
}

function OpenWin(e) {
  if (!e.target) {e.target=e.srcElement;};
  var o = e.target;
  var xid;
  var xrel ='';
  if (! o.id) {
    xid = o.parentNode.id;
  }
  else {
    xid = o.id;
  };
  if (! o.rel) {
    xrel = o.parentNode.rel;
  }
  else {
    xrel = o.rel;
  };
  
  
  if (xrel.indexOf('openwin_')<0) {
    openedw=window.open(xid,'obenedw', 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=450,height=450');
  }
  else {
    //http://jquery.phpbasic.com/divbox
    xrel = xrel.replace('openwin_','video/');
    $(this).divbox({caption: false, src: xrel});
  }

}



// matches font size either to user setting or to screen scaled default
function SwitchFontSize() {

  winW = document.body.offsetWidth;
  
  var bIE = false; // is Internet Explorer ?
  var bUserwish = false;
  var newHref = "";
  var currentCSS = "";
  
  var ufpix = 0;
  var afpoint = 0;
  var afpix = 0;


  if(document.createStyleSheet) { 
    var oStyleSheet = document.createStyleSheet("Bildschirmauflösung", "projection,screen,tv");
  }
  else if (document.createTextNode) {
    var oStyleSheet=document.createElement('style');
    oStyleSheet.type='text/css';
    oStyleSheet.id = "ff"; // required because Firefox does not append child to object oStyleSheet (???)
    document.getElementsByTagName("head")[0].appendChild(oStyleSheet);
    oStyleSheet = document.styleSheets[2];
  }
  else {
    return;
  };



  if (oStyleSheet.addRule) {bIE = true}; 
  if (!IsThereVertScrBar()) {winW=winW-16;} // without that different font sizes may result
  afpoint = (winW * 0.0162933 - 3.33605) * 0.95;
  afpoint =runde(afpoint,0);
  if (afpoint > 22) {afpoint = 22};
  AddStyle(bIE,'body','font-size:' + afpoint + 'px;',0,oStyleSheet);


  // Safari and perhaps more browsers do not automatically scale image height matching to width - even with height:auto; 290 x 97 --> 0.334
  xdiv = document.getElementById('cssissoclearthatbrowserseasilycansupportitinareliableway');
  xdiv.style.height = runde(xdiv.clientWidth * 0.334,0) + 'px';
  if(navigator.appVersion.indexOf('Safari')>0) {
    if (document.URL.indexOf('index') > 0) {  // one more Safari bug
      var himgs = getElementsByClassName("epw_h1");
      for(i=0; i < himgs.length;i++) {
        himgs[i].style.display = 'none';
      };
    };
  };
    
  // align menue to h1
  var ilikecss = document.getElementById('content');
  var pos = getElementAbsolutePos(ilikecss);
  var xdiv = document.getElementById('nav');
  xdiv.style.top = pos.y + "px";

  // align image top right
  for (var i=0;i<6;i++) {
    ilikecss =document.getElementById('simg'+i);
    if (ilikecss) {break;};
  };
  xdiv = document.getElementById('header');
  ilikecss.style.top = xdiv.offsetHeight + 'px';
  

}

// adds an inline style into the head section
function AddStyle(isIE,sSelector,sRule,iNum,objStyle) {
  if (isIE) { //IE
    if (objStyle.rules[iNum]) {objStyle.removeRule(iNum);};
    objStyle.addRule(sSelector, sRule, iNum);
  }
  else {
    var myNode = document.createTextNode(sSelector + " { " + sRule + " }");
    document.getElementById("ff").appendChild(myNode) // appendChild not working with objStyle in Firefox 3.5.6 (???)
  };
}




// gets font size in pixel by creating a hidden DIV and measuring it -- changed, original:
// http://www.webdeveloper.com/forum/showthread.php?t=170413
document.emSize=function(pa){
	pa= pa || document.body;
	var who= document.createElement('span');
	var atts= {fontSize:'1em',padding:'0',position:'absolute',lineHeight:'1'};
	for(var p in atts){
		who.style[p]= atts[p];
	}
	who.appendChild(document.createTextNode('M'));
	pa.appendChild(who);
	var fs=who.offsetHeight; //[who.offsetWidth,who.offsetHeight];
	pa.removeChild(who);
	return fs;
}

// round numbers without discalculation -- changed, original:
// http://www.dcljs.de/faq/antwort.php?Antwort=rechnen_runden
function runde(x, n) {
  if (n < 1 || n > 14) {
    var y = x.toString();
    var sy = y.split(".");
    return sy[0];
  }
  else {
    var e = Math.pow(10, n);
    var k = (Math.round(x * e) / e).toString();
    if (k.indexOf('.') == -1) k += '.';
    k += e.toString().substring(1);
    return k.substring(0, k.indexOf('.') + n+1);
  };
}



function WriteTip() { 
  var o = document.getElementById("spruch");
  if (o) {
    o.innerHTML = say[arrayindex];
    arrayindex ++;
    if (arrayindex >= say.length) arrayindex = 0;
    stoptyping = setTimeout("WriteTip()", 3500);
  }
  else { // change pic top right if existing
    o = document.getElementById("add_pic");
    if (o) {
      var filename  = "images/" + location.pathname.substring(location.pathname.lastIndexOf('\/')+1);
      filename = filename.substring(0,filename.length-5) + ".gif"; // all these files must exist
      o.src = filename;
    };
  };
}


function PreloadImages() {
  for (i=0; i < ImgArray.length; i++) {
    var ximg = new Image();
    ximg.src = ImgArray[i];
  }
}

// actually returns whether there is need for vertical scroll bar
function IsThereVertScrBar () {
var root= document.compatMode=='BackCompat'? document.body : document.documentElement;
return isVerticalScrollbar= root.scrollHeight>root.clientHeight;
}

// required because of principle misconception of CSS
function DoOnScroll(){
var arrayPageScroll = document.viewport.getScrollOffsets();
var posTop = arrayPageScroll[1];
var o = document.getElementById("floaterdiv");
o.style.marginTop = posTop + 'px';
}


// http://www.codeproject.com/KB/scripting/dom-element-abs-pos.aspx
// returns absolute position of some element within document
function getElementAbsolutePos(element) {
    var res = new Object();
    res.x = 0; res.y = 0;
    if (element !== null) {
        res.x = element.offsetLeft;
        res.y = element.offsetTop;
        
        var offsetParent = element.offsetParent;
        var parentNode = element.parentNode;
        var borderWidth = null;

        while (offsetParent != null) {
            res.x += offsetParent.offsetLeft;
            res.y += offsetParent.offsetTop;
            
            var parentTagName = offsetParent.tagName.toLowerCase();    
            
            if (offsetParent != document.body && 
                offsetParent != document.documentElement) {
                res.x -= offsetParent.scrollLeft;
                res.y -= offsetParent.scrollTop;
            }

            // next lines are necessary to support FireFox problem with offsetParent
            // if (!navigator.appVersion.match(/MSIE/)) {
            //     while (offsetParent != parentNode && parentNode !== null) {
            //         res.x -= parentNode.scrollLeft;
            //         res.y -= parentNode.scrollTop;
            //         parentNode = parentNode.parentNode;
            //     }    
            // }

            parentNode = offsetParent.parentNode;
            offsetParent = offsetParent.offsetParent;
        }
    }
    return res;
}

function MakeVisible() {

if (document.getElementsByTagName && document.getElementById) {
  
    var searchClass = "notnoscript";
    var allHTMLTags=document.getElementsByTagName("*");
    for (i=0; i<allHTMLTags.length; i++) {
      if (allHTMLTags[i].className==searchClass) {
        allHTMLTags[i].style.display = 'block';
    	  allHTMLTags[i].style.height = 'auto';
      }
    }
}
}


