/* bo mootools extensions */
Element.implement({
    hasClasses: function(classList, all) {
        var oneTrue = false;
        var allTrue = true;
        var element = this;
        classList.each(function(item){
            item = item.trim();
            classTrue = element.hasClass(item);
            if (classTrue){
                oneTrue = true;
            }else{
                allTrue = false;
            }
        });
        return all ? allTrue : oneTrue;
    }
});
/* eo mootools extensions */

// Allgemeine Variablen
window_loaded = false;

// Objekt für die Variablen der Standardwerte zum Resizen
dimensions_default = new Object();
resizelevel = 0;

// Array für zusätzliche Funktionen die in der onload ausgeführt werden sollen
col_onload_functions = new Array();

// Cookie objekte

// Objekt für die Stylesheet Regeln (hierauf greift dann die Schriftgrössenänderung zu)
css_rules = new Object();

// Objekt für die Default Schriftgrössen
fontsizes_default = new Object();

// Objekt für die Stylesheet Regeln, die nicht behandelt werden sollen
// für jeden Behandlungsbereich (z.b. Schriftgrössen) sollte ein eigenes Objekt erstellt werden
css_rules_exceptions = new Object();
/*
da wir unter Umständen auch mal mehr machen, als nur die Schriftgrössen zu ändern, gibts für die Schriftgrössenausnahmen ein eigenes Objekt
*/
css_rules_exceptions.fontsizes = new Object();
/*
die einfachste variante ist die überprüfung ob das objekt existiert oder nicht
bsp:
css_rules_exceptions.fontsizes['#navigation'] = new Object();
css_rules_exceptions.fontsizes['#navigation td a:hover'] = new Object();
*/
css_rules_exceptions.fontsizes['#form_search a'] = new Object();
css_rules_exceptions.fontsizes['#form_search button'] = new Object();
css_rules_exceptions.fontsizes['#form_search_words'] = new Object();
css_rules_exceptions.fontsizes['#web #functions'] = new Object();
css_rules_exceptions.fontsizes['#web #functions a'] = new Object();
css_rules_exceptions.fontsizes['#functions2'] = new Object();
css_rules_exceptions.fontsizes['#web #languages'] = new Object();
css_rules_exceptions.fontsizes['#web #languages .label'] = new Object();
css_rules_exceptions.fontsizes['#web #languages a'] = new Object();
css_rules_exceptions.fontsizes['#header_bar_left'] = new Object();
css_rules_exceptions.fontsizes['#container_subnav'] = new Object();
css_rules_exceptions.fontsizes['#subnav'] = new Object();
css_rules_exceptions.fontsizes['#subnav li'] = new Object();
css_rules_exceptions.fontsizes['#subnav li a'] = new Object();
css_rules_exceptions.fontsizes['#subnav li ul'] = new Object();
css_rules_exceptions.fontsizes['#subnav li ul li'] = new Object();
css_rules_exceptions.fontsizes['#subnav li ul a'] = new Object();



var busywaiter = window.setInterval(function() {
    if (document.body) {
        window.clearInterval(busywaiter);
        init();
    }
}, 50);

window.onresize = resize;

// Initialisierung bevor Seite geladen ist
function init () {

    window_loaded = window_onload();
    if (window_loaded){
        // die Schriftgrössen werden initialisiert
        fontsizes_init();
        if (navigator.cookieEnabled) {
            cookie_init();
            // Schriftgrössenänderung
            if (fontsizefactor!=0){
                fontsize_change(fontsizefactor);
            }
        }
        for (i=0;i<col_onload_functions.length;i++){
            eval(col_onload_functions[i]);
        }
        init_team_overview_list();
        // Resizefunktion aufrufen
        resize();
    }else{
        window.onload = init;
    }

}

function window_onload() {
    // Standardwerte zum Resizen
    if (startpage){
        try {
            dimensions_default.bar_outside = new Object();
            dimensions_default.bar_outside.obj = document.getElementById('bar_outside');
            dimensions_default.bar_outside.top = dimensions_default.bar_outside.obj.offsetTop;
            dimensions_default.bar_outside.height = dimensions_default.bar_outside.obj.offsetHeight;
            dimensions_default.author = new Object();
            dimensions_default.author.obj = document.getElementById('author');
            dimensions_default.author.top = dimensions_default.author.obj.offsetTop;
            dimensions_default.head = new Object();
            dimensions_default.head.obj = document.getElementById('head');
            dimensions_default.head.top = dimensions_default.head.obj.offsetTop;
            dimensions_default.header = new Object();
            dimensions_default.header.obj = document.getElementById('header');
            dimensions_default.header.top = dimensions_default.header.obj.offsetTop;
            dimensions_default.container_search = new Object();
            dimensions_default.container_search.obj = document.getElementById('container_search');
            dimensions_default.container_search.top = dimensions_default.container_search.obj.offsetTop;
            dimensions_default.content = new Object();
            dimensions_default.content.obj = document.getElementById('content');
            dimensions_default.content.top = dimensions_default.content.obj.offsetTop;
            dimensions_default.startpic = new Object();
            dimensions_default.startpic.obj = document.getElementById('startpic');
            dimensions_default.startpic.top = dimensions_default.startpic.obj.offsetTop;
            dimensions_default.startpic.height = dimensions_default.startpic.obj.offsetHeight;
            return true;
        } catch(e) {
            return false;
        }
    }else{
        return true;
    }
}

function init_team_overview_list(){
    var team_overview_list_obj = document.getElement('.team_overview_list');
    if (team_overview_list_obj){
        var filter_obj = team_overview_list_obj.getElement('.filter');
        filter_obj.setStyle('display', 'block');
        filter_obj.getElements('select').each(function(item){
            item.addEvent('change', team_overview_list_filter_change);
        });
    }
}

function team_overview_list_filter_change(){
    classes = []
    var team_overview_list_obj = document.getElement('.team_overview_list');
    team_overview_list_obj.getElement('.filter').getElements('select').each(function(item){
        if (item.value.length>0){
            classes.push(item.name + '_' + item.value);
        }
    });
    var letternav_obj = team_overview_list_obj.getElement('.letternav');
    current_letter_row = null;
    team_overview_list_obj.getElement('.members').getElements('tr').each(function(item){
        if (item.hasClass('letter_row')){
            check_letter_row();
            current_letter_row = item;
            current_letter = item.getElement('td').innerHTML.trim();
            current_letter_show = false;
        }else{
            if (item.hasClasses(classes, true)){
                item.style.display = Browser.Engine.trident ? 'block' : 'table-row';
                current_letter_show = true;
            }else{
                item.style.display = 'none';
            }
        }
    });
    check_letter_row();
    function check_letter_row(){
        if (current_letter_row){
            letternav_listitem = letternav_obj.getElement('.letter_' + current_letter);
            letternav_linkitem = letternav_listitem.getElement('a');
            if (current_letter_show){
                current_letter_row.style.display = Browser.Engine.trident ? 'block' : 'table-row';
                if (letternav_linkitem){
                    letternav_linkitem.removeClass('disabled');
                    letternav_linkitem.removeEvents('click');
                }
            }else{
                current_letter_row.style.display = 'none';
                if (letternav_linkitem && !letternav_linkitem.hasClass('disabled')){
                    letternav_linkitem.addClass('disabled');
                    letternav_linkitem.addEvent('click', function(e){new Event(e).stop();});
                }
            }
        }
    }
}

// Cookie initialisieren
// sollten die Cookiewerte falsch sein, werden die variablen mit standardwerten befüllt
// am ende wird das cookie mit den variablen befüllt
function cookie_init () {
	// Wenn kein Cookie gesetzt ist, wird es mit Standardwerten befüllt.
	fontsizefactor = Cookie.read('fontsizefactor');
    fontsizefactor = parseInt(fontsizefactor);
    if (isNaN(fontsizefactor)){
        fontsizefactor = 0;
        Cookie.write('fontsizefactor', 0, {path:'/'});
    }
}

// Schriftgrösseninitialisierung
function fontsizes_init() {
	// Stylesheet laden
	obj_stylesheet = document.styleSheets[1];
	
	// Stylesheet Regeln laden (-> Array)
	if (obj_stylesheet.rules){
		arr_css_rules = obj_stylesheet.rules;
	}
	else {
		arr_css_rules = obj_stylesheet.cssRules;
	}
	
	// Loop über alle Regeln im Stylesheet
	for (i=0;i<arr_css_rules.length;i++){
		// Regelname temporär speichern
		rule_name = arr_css_rules[i].selectorText.toLowerCase();
		
		// wenn in der Regel eine Schriftgrösse vorhanden
		if (arr_css_rules[i].style.fontSize && arr_css_rules[i].style.fontSize.length > 0){
			
			size = parseInt(arr_css_rules[i].style.fontSize);
			if (size>1){
				// Die Regel wird mit dem Namen in das css_rules Objekt als Verweis auf die Regel im Stylesheet geladen, damit sie über den Regelnamen direkt angesprochen werden können
				css_rules[rule_name] = arr_css_rules[i];
				// Die Standardschriftgrössen werden gespeichert (zum zurücksetzen)				
				fontsizes_default[rule_name] = size;
			}
		}
	}
	
}


// beim Click auf Schriftgrösse grösser oder kleiner
function fontsize_change_click(factor){
	// die Schriftgrössen werden geändert
	fontsize_change(factor);
	
	// die neue Schriftgrösse wird im Cookie gespeichert
	fontsize_save(factor);
}

// Schriftgrössen werden geändert
function fontsize_change(factor) {
	// Schleife über alle relevanten Regeln
	for (rule in css_rules){
		// Wenn eine Schriftgrösse vorhanden ist (wurde zwar beim initialisieren überprüft, aber es können ja auch für andere Zwecke Regeln gespeichert werden, die keine Schriftgrösse haben )
		if (css_rules[rule].style.fontSize && css_rules[rule].style.fontSize.length > 0){
			size = parseInt(css_rules[rule].style.fontSize);
			if (size>1){
				// Standardausnahmen Routine, siehe oben
				doit = true;
				if (css_rules_exceptions.fontsizes[rule.toLowerCase()]){
				doit = false
				}
				// unter bestimmten Umständen reicht die Standardausnahmenroutine nicht aus
				/*
				Bsp:
				if (iam_startpage && andere_option && rule.toLowerCase()=='#container_fonthandler td'.toLowerCase()){
					doit = false;
				}
				*/
				
				// wenn alles ok wird jetzt Schriftgrösse geändert
				if (doit){
					size_new = size + parseInt(factor);
					css_rules[rule].style.fontSize = size_new + 'px';
				}
			}
		}
	}

	// wenn window bereits geladen ist jetzt der content neu gerendert
	if (window_loaded){
		content_rerender();
	}
	
	// da sich die grössenproportionen unter umständen geändert haben, wird die resizefunktion aufgerufen
	resize();
}


// Schriftgrössen auf Standard zurücksetzen
function fontsize_reset() {
	// die gespeicherten Standardschriftgrössen werden auf die Stylesheet Regeln angewandt.
	for (rule in fontsizes_default){
		css_rules[rule].style.fontSize = fontsizes_default[rule] + 'px';
	}
	
	if (navigator.cookieEnabled) {
		// der fontsizefactor wird auf 0 gesetzt und im cookie gespeichert
		fontsizefactor = 0;
        Cookie.write('fontsizefactor', 0, {path:'/'});
	}
	
	// wenn window bereits geladen ist jetzt der content neu gerendert
	if (window_loaded){
		content_rerender();
	}
	
	// da sich die grössenproportionen unter umständen geändert haben, wird die resizefunktion aufgerufen
	resize();
}


// der Schriftgrössenfactor wird im Cookie gespeichert
function fontsize_save(factor){
	// wenn Cookies erlaubt sind
	if (navigator.cookieEnabled) {
		if (!fontsizefactor) {
			fontsizefactor = factor;
		}
		fontsizefactor = parseInt(fontsizefactor) + parseInt(factor);
		Cookie.write('fontsizefactor', fontsizefactor, {path:'/'});
	}
}



//Seite aufgrund der Auflösung anpassen
function resize() {
	if (window_loaded){
        if (startpage){
            height_outside = dimensions_default.content.top + 45;
            obj_content_startpage = document.getElementById('content_startpage');
            height_needed = (height_outside + obj_content_startpage.offsetHeight + 12)-document.body.offsetHeight;
            if (height_needed>0){
                height_minus = 50;
                dimensions_default.bar_outside.obj.style.top = dimensions_default.bar_outside.top - height_minus + 'px';
                dimensions_default.author.obj.style.top = dimensions_default.author.top - height_minus + 'px';
                dimensions_default.head.obj.style.top = dimensions_default.head.top - height_minus + 'px';
                dimensions_default.header.obj.style.top = dimensions_default.header.top - height_minus + 'px';
                dimensions_default.container_search.obj.style.top = dimensions_default.container_search.top - height_minus + 'px';
                dimensions_default.startpic.obj.style.top = dimensions_default.startpic.top - height_minus + 'px';
                dimensions_default.content.obj.style.top = dimensions_default.content.top - height_minus + 'px';
                height_needed+=-height_minus;
                if (height_needed>0){
                    if (height_needed>135){
                        difference = 135;
                    }
                    else{
                        difference = height_needed;
                    }
                    new_startpic_height = dimensions_default.startpic.height - difference;
                    new_bar_outside_height = dimensions_default.bar_outside.height - difference;
                    new_author_top = dimensions_default.author.obj.offsetTop - difference;
                    new_container_search_top = dimensions_default.container_search.obj.offsetTop - difference;
                    new_content_top = dimensions_default.content.obj.offsetTop - difference;
                    
                    startpic_clip = 'rect(auto auto ' + new_startpic_height + 'px auto)';
                    dimensions_default.startpic.obj.style.clip = startpic_clip;
                    dimensions_default.bar_outside.obj.style.height = new_bar_outside_height + 'px';
                    dimensions_default.author.obj.style.top = new_author_top + 'px';
                    dimensions_default.container_search.obj.style.top = new_container_search_top + 'px';
                    dimensions_default.content.obj.style.top = new_content_top + 'px';
                }
                else {
                    dimensions_default.startpic.obj.style.clip = 'rect(auto auto auto auto)';
                    dimensions_default.bar_outside.obj.style.height = dimensions_default.bar_outside.height + 'px';
                }
            }
            else {
                dimensions_default.bar_outside.obj.style.top = dimensions_default.bar_outside.top + 'px';
                dimensions_default.head.obj.style.top = dimensions_default.head.top + 'px';
                dimensions_default.header.obj.style.top = dimensions_default.header.top + 'px';
                dimensions_default.container_search.obj.style.top = dimensions_default.container_search.top + 'px';
                dimensions_default.startpic.obj.style.top = dimensions_default.startpic.top + 'px';
                dimensions_default.content.obj.style.top = dimensions_default.content.top + 'px';
                dimensions_default.author.obj.style.top = dimensions_default.author.top + 'px';

                dimensions_default.startpic.obj.style.clip = 'rect(auto auto auto auto)';
                dimensions_default.bar_outside.obj.style.height = dimensions_default.bar_outside.height + 'px';
            }
        }
	}
}


// der content wird neu gerendert (muss nur angepasst werden, wenn in einzelnen browsern der content nach der schriftgrössenänderung nicht aussieht wie er sollte)
function content_rerender(){

}


function getAdr(prefix, postfix, text) {
        document.write('<a href="mailto:' + prefix + '@' + postfix + '">' + (text ? text : prefix + '@' + postfix) + '</a>');
}

function swapImage(element, newimage, direction) {
	var oldsrc = element.src
	element.src = newimage
	if (!element.onmouseout)
		element.onmouseout = function (event) { swapImage(this, oldsrc); };
}


function swapLinkImage(linkelement, newimage) {
	var element_img = linkelement.getElementsByTagName('img')[0];
	var oldsrc = element_img.src;
	element_img.src = newimage;
	if (!linkelement.onmouseover){
		linkelement.onmouseover = function (event) {swapLinkImage(this, newimage)};
	}
	if (!linkelement.onmouseout){
		linkelement.onmouseout = function (event) {swapLinkImage(this, oldsrc); };
	}
}

function swapNavImage(linkelement) {
	var col_img = linkelement.getElementsByTagName('img');
	for (i=0;i<col_img.length;i++){
		if (col_img[i].style.display=='none'){
			col_img[i].style.display = 'block';
		}
		else{
			col_img[i].style.display = 'none';
		}
	}
	if (!linkelement.onmouseover){
		linkelement.onmouseover = function (event) {swapNavImage(this)};
	}
	if (!linkelement.onmouseout){
		linkelement.onmouseout = function (event) {swapNavImage(this); };
	}
}


/*printjob*/
function printjob() {
	if (document.all && (navigator.appVersion.indexOf("Mac") != -1)) {
		self.focus();
		alert("Drucken-Funktion unter Macintosh nicht moeglich! \nBitte verwenden Sie Datei/Drucken");
	} else {
		if (document.all && navigator.appVersion.substring(22,23)==4) {
			self.focus();
			var OLECMDID_PRINT = 6;
			var OLECMDEXECOPT_DONTPROMPTUSER = 2;
			var OLECMDEXECOPT_PROMPTUSER = 1;
			var WebBrowser = '<object id="WebBrowser1" width="0" height="0" classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></object>';
			document.body.insertAdjacentHTML('beforeEnd',WebBrowser);
			WebBrowser1.ExecWB(OLECMDID_PRINT,OLECMDEXECOPT_DONTPROMPTUSER);
			WebBrowser1.outerHTML = '';
		} else{
			self.focus();
			window.print();
		}
	}
}



function search_submit() {
	search_ok = false;
	obj = document.getElementById('form_search_words');

	if (obj){
		if (trim(obj.value).length>0) {
			search_ok = true;
		}
	}
	if (search_ok){
		return true;
	}
	else {
		obj.focus();
		return false;
	}
}


// Leerzeichen hinten und vorne bei einem String Objekt wegschneiden
function trim(string) {
	return string.replace(/^\s*|\s*$/,'');
}


function checkEmail(val) {
	if (val) {
		var usr = "([a-zA-Z0-9][a-zA-Z0-9_.-]*|\"([^\\\\\x80-\xff\015\012\"]|\\\\[^\x80-\xff])+\")";
		var domain = "([a-zA-Z0-9][a-zA-Z0-9._-]*\\.)*[a-zA-Z0-9][a-zA-Z0-9._-]*\\.[a-zA-Z]{2,5}";
		var regex = "^"+usr+"\@"+domain+"$";
		var myrxp = new RegExp(regex);
		var check = (myrxp.test(val));
		if (check!=true) {
			return false;
		}
		else {
			return true;
		}
	}
}


function popup(url,typ,para1,width,height) {
	attrib = "";
	Y = (screen.height - width) / 2;
	X = (screen.width - height) / 2;
	X = Math.round(X);
	Y = Math.round(Y);
	if (para1 == 'CENTER') {attrib += 'height=' + height + ',width=' + width + ',top=' + Y + ',left=' + X;}
	if (typ == 'TYP1') {attrib += ",scrollbars=no";}
	if (typ == 'TYP2') {attrib += ",scrollbars=yes";}
	if (typ == 'TYP3') {attrib += ",scrollbars=yes,menubar=yes";}
	x = Math.random();
	fenster = window.open(url, 'win', attrib);
	return false;
}

