var max_trace_depth=1;

function debug(msg) {
	if (debug.arguments.length==2) {
		msg="<textarea rows=10 cols=20 style='width:600px;height:360px'>"+msg.escapeHTML()+"</textarea>";
	}
	try {
		//throw new Exception();
		if (typeof w == "undefined" || w.closed) {
			w=window.open('','w','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,copyhistory=no,width=640,height=400');
			w.moveTo(screen.availWidth-640, 0);
		}
		w.document.write(msg+"<br>");
	}
	catch (e) {
		try{ $('debug_container').innerHTML += msg+"<br>"; }
		catch(e) {
			var div=document.createElement('div');
			div.id='debug_container';
			div.innerHTML=msg+'<br />';
			document.body.appendChild(div);
		}
	}
}

function trace(o) {
	var out="";
	var nofunctions = (trace.arguments.length>1 && trace.arguments[1]);
	var do_return  = (trace.arguments.length>2 && trace.arguments[2]);
	
	try {
		for (z in o) {
			try {
				if (o[z]!="" && o[z]!=null)
					if (z=="innerHTML" || z=="outerHTML") out+=z+" = [..HTML-Code..]; <br>\n";
					if (typeof o[z] == "function" && nofunctions) {
						//out += z+": [..Function..]<br>\n";
						continue;
					}
					if (typeof o[z] == "object") {
						out += z+" : {<div style='margin-left: 20px'>";
						if (++tracedepth>max_trace_depth || z.indexOf('parent')!=-1 || z.indexOf('own')!=-1) out += " [ object ] ";
						else out += trace(o[z], nofunctions, true);
						tracedepth--;
						out += "</div>}<br>";
					}
					else out+=z+" = "+o[z]+"; <br>";
			}
			catch(e) {
				out+="<i>Fehler in "+z+": "+e+"</i><br />\n";
			}
		}
	}
	catch(ee) {
		out+="<b>Fatal Error in tracing: "+ee+"</b>";
	}
	if (do_return) return out;
	else debug(out)
}

function popupOpen() {		// parameter.reihenfolge: URL, WIDTH, HEIGHT
	var w,h,url,aw,ah;
	var a=popupOpen.arguments;
	if (a.length==0) return;
	url=a[0];
	if (a.length>1) {
		w=a[1]; h=a[2];
	}
	else {
		w=500; h=400
	}
	win=window.open(url,'win_front','toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=no,resizable=yes,copyhistory=no,width='+w+',height='+h);
	if (screen) {
		aw=screen.availWidth;
		ah=screen.availHeight;
		win.moveTo(((aw/2)-(w/2)),((ah/2)-(h/2)));
	}
	win.focus();
}

function openPicture() {		// parameter.reihenfolge: URL, WIDTH, HEIGHT
	var w,h,url,aw,ah;
	var a=openPicture.arguments;
	if (a.length==0) return;
	url=a[0];
	if (a.length>1) {
		w=a[1]; h=a[2];
	}
	else {
		w=500; h=400
	}
	win_pic=window.open(url,'win_pic','toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=no,resizable=yes,copyhistory=no,width='+w+',height='+h);
	if (screen) {
		aw=screen.availWidth;
		ah=screen.availHeight;
		win_pic.moveTo(((aw/2)-(w/2)),((ah/2)-(h/2)));
	}
	win_pic.focus();
}
// Flash-Detection
var isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;

function ControlVersion() {
	var version, axo, e;
	try {
		axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
		version = axo.GetVariable("$version");
	} catch (e) {}

	if (!version){
		try {
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
			version = "WIN 6,0,21,0";
			axo.AllowScriptAccess = "always";
			version = axo.GetVariable("$version");

		} catch (e) {	}
	}
	if (!version) {
		try {
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = axo.GetVariable("$version");
		} catch (e) {}
	}
	if (!version) {
		try {
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = "WIN 3,0,18,0";
		} catch (e) { }
	}
	if (!version) {
		try {
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
			version = "WIN 2,0,0,11";
		} catch (e) {
			version = -1;
		}
	}
	if (version && version!=-1) {
		if( /([^ ]*) ([0-9]*),(.*)/.exec(version) ) {
			version=parseInt(RegExp.$2);
		}
	}	
	return version;
}
function GetSwfVer(){
	var flashVer = -1;	
	if (navigator.plugins != null && navigator.plugins.length > 0) {
		if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
			var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
			var descArray = navigator.plugins["Shockwave Flash" + swVer2].description.split(" ");
			var tempArrayMajor = descArray[2].split(".");			
			var flashVer = tempArrayMajor[0];
		}
	}
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
	else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
	else if ( isIE && isWin && !isOpera ) {
		flashVer = ControlVersion();
	}	
	return flashVer;
}

function insertSWF(tag_id, flashver, data) {
	var out;
	if (isIE && isWin && !isOpera) {
		out='<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0"'+
		' width="'+data.width+'" height="'+data.height+'" id="'+data.id+'" align="middle">'+
		'<param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="false" />'+
		'<param name="movie" value="'+data.src+'" /><param name="menu" value="false" /><param name="quality" value="high" />'+
		'<param name="bgcolor" value="'+data.bgcolor+'" /><param name="wmode" value="'+data.wmode+'" />'+
		'<param name="scale" value="noscale" /></object>';
	}
	else {
		out ='<embed id="'+data.id+'" src="'+data.src+'" menu="false" quality="high" bgcolor="'+data.bgcolor+'" '+
		'width="'+data.width+'" height="'+data.height+'" name="'+data.id+'" wmode="'+data.wmode+'" '+
		'scale="noscale" align="middle" allowScriptAccess="always" allowFullScreen="false" '+
		'type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer_de" />';
	}
	if (GetSwfVer() >= flashver) {
		document.getElementById(tag_id).innerHTML=out;
	}
}

/// Galery
function changeGalleryPic(l,g,url) {
	if (typeof old_g_link == "undefined") old_g_link="g_"+g+"_0";
	if (old_g_link==l.id) return true;
	document.getElementById(old_g_link).className="gal";
	l.className="gal_sel";
	old_g_link=l.id;	
	document.getElementById("gallery_"+g).src=url;
}
function getURLParameter(url) {
	var paras=new Array();
	var value;
	url=unescape(url);
	if (url.indexOf('?')==-1) {
		var para_string=url.substr(Math.max(url.indexOf(".php")+5, url.indexOf(".php5")+6));
		var var_names= para_string.indexOf('node_id') != -1;
		var para_array=para_string.split("/");
		var arr_var_names=new Array('node_id','lang_id','scope','element_id','cmd','subcmd');
		var str, str2;
		for (var z=0; z<para_array.length; z++) {
			str = String(para_array[z]);
			if (var_names) {
				var zz= Number(z)+1;
				str2 = String(para_array[zz]);
				paras[ str ] = str2.indexOf(';') ? unescape(str2.substr(str2.indexOf(';')+1)) : unescape(str2);
				z++;
			}
			else {
				paras[ arr_var_names[z] ] = str.indexOf(';') ? unescape(str.substr(str.indexOf(';')+1)) : unescape(str);
			}
		}
	}
	else {
		var para_string=url.substr(url.indexOf("?")+1);
		var para_array=para_string.split("&");
		var str;
		para_array.each( function(str, z){
			str = String(str);
			value=unescape(str.substr(str.indexOf("=")+1));
			paras[str.substr(0,str.indexOf("="))] = value.indexOf(';') != -1 ? value.substr(value.indexOf(';')+1) : value;
		});
	}
	return paras;
} 
///////////////////////////////////
// Homepage Content Switch

//var CONT_WIDTH = 715 + 36; // b_1sp.width + b_1sp.paddingRight
var CONT_WIDTH = 745 + 36; // b_1sp.width

var cur_pageURL=document.URL.indexOf("index.php")==-1 ? document.URL+"index.php5" : document.URL;
var arr_history=[];
var num_curCont=1;
var cont_fxDefaults={duration: 0.6};

var canvasColor;


function flashMovie(name) {
	return (isIE) ? window[name] : document[name];
}


function showContainer(ev) {
	var obj, new_cont, old_cont=num_curCont;
	
	if (typeof ev =="object") {
		Event.stop(ev);
		obj=Event.element(ev);
		
		if (obj.tagName.toLowerCase()!="a") {
			obj=obj.up("a");
		}
		arr_history.uniquePush(cur_pageURL);
	}
	else {
		if (/(.*)_([0-9]*)$/.test(ev)) 
			obj={className:'_number_'};
		else 
			obj={className:"anchor"};
	}
	
	switch(obj.className) {
		case 'bt_prev':
			if (num_curCont>1) {
				new_cont=num_curCont-1;
			}
			break;
		case 'bt_next':
			if (document.getElementById("b2sp_"+(num_curCont+1)) != null ) {
				new_cont=num_curCont+1;
			}
			break;
		case 'block':
			var num=parseInt(obj.href.replace(/(.*)_([0-9]*)$/, "$2")) ;
			if ( !isNaN(num) && num != num_curCont ) {
				new_cont=num;
			}
			break;
		case 'anchor':
			ev=Try.these(function(){ return $(ev).next(".b_1sp").readAttribute('id'); }, function() { return false; });
			if (!ev)
				break;
			
		case '_number_':
			var num=parseInt(ev.replace(/(.*)_([0-9]*)$/, "$2"));
			if ( !isNaN(num)) {
				new_cont=num;
			}
			break;
	}
	if (new_cont!=null) {
		var new_x_pos = (new_cont-1)*CONT_WIDTH;
		var old_x_pos = (old_cont-1)*CONT_WIDTH;
		new Effect.Move("content_id", {x: -(new_x_pos-old_x_pos), y:0, mode: "relative", transition: Effect.Transitions.sinoidal} )
		try {
			$("page_navi_cont").down("a.sel").removeClassName("sel");
		} catch(er) {}
		$("page_navi_cont").down("a.block", (new_cont-1)).addClassName("sel");
		num_curCont=new_cont;
		
		if (obj.className != "_number_") {
			cur_pageURL = cur_pageURL.replace(/([^#]*)(#.*)?/, "$1") + "#b2sp_"+new_cont;
		}
	}
}
function initContainerNav() {
	$$("#page_navi_cont a[rel!=history_back]").invoke("observe", "click", showContainer, true);
	num_curCont=1;
	var cont_count=$$(".b_1sp").length;
	if (cont_count) {
		$("content_id").setStyle({width: (cont_count*CONT_WIDTH)+"px"});
	}
	
	if (GetSwfVer() >= 10) {
		$$('#content_id a').each(_eachModLink);
		//$$('ul.service a').each(_eachModLink);
		// Formulare
		$$("form").each(function(fel) {
			var url=fel.action;
			var get_url=url+"?node_id="+fel.node_id+"&lang_id="+fel.lang_id;
			//fel.action="javascript:void(2)";
			fel.observe("submit", function(ev) {
				Event.stop(ev);
				fel.request({
					parameters: {using_xml_object: "true"},
					onComplete: function(data) {
						var target_html=extractContent(data.responseText, "#wrapper_id");
						$("wrapper_id").innerHTML=target_html;
						
						var title = data.responseText.match(/<title>([^<]*)<\/title>/);
						document.title = title[1];
						
						var body_class = data.responseText.match(/<body class\=('|\")([^'\"]*)/);
						document.body.className= body_class==null ? '' : body_class[2];
						
						setCanvasColor();
						
						cur_pageURL=get_url;
						
						initContainerNav();
						if (typeof myLightbox != "undefined") {
							myLightbox.updateImageList();
						}
						else {
						//	myLightbox = new Lightbox();
						}
						
						if (!$("wrapper_id").visible()) {
							Effect.Appear("wrapper_id", {duration: 0.7});
						}
					}
				});
			});
			
		});
	}
}

function _eachModLink(element){
	var h=element.href;
	var alt=false;
	h = h.replace(/(http(s)?:\/)?(.*)/, "$3");
	var rel=element.readAttribute('rel');
	if (rel && (rel.indexOf('lightbox')===0 || rel=="download")) alt=true;
	if (!alt && lightbox_excludes.indexOf(element.readAttribute('id')) !== -1) alt=true;
	//if (!alt && (h.substr(0, base_url.length) != base_url || location.protocol != element.protocol)) alt=true;
	if (!alt && (location.protocol != element.protocol || element.hostname != location.hostname )) alt=true;
	if (!alt && element.href.substr(element.href.lastIndexOf('/')+1) == "#") alt=true;
	if (alt) {
		return;
	}
	//debug(element.href);
	element.href="javascript:void('"+element.href+"')";
	Event.observe(element, 'click', linkClick);
};

function linkClick(ev) {
	var el=Event.element(ev);
	if (el.tagName.toLowerCase() != "a") {
		el=el.up("a");
	}
	var url=el.href;
	Event.stop(ev);
	// entferne das "javascript:void()"
	url = url.substring(17, url.length-2);
	gotoURL( url );
	arr_history.uniquePush( url );
}

function fadeOutContent() {
	if ($("wrapper_id").visible()) {
		Effect.Fade("wrapper_id", {duration: 0.3, });
	}
}
function fadeInContent() {
	// wird eigentlich nicht gebraucht, da nur ein jumpTo() 
	// ein Einblenden auslösen kann (-> in loadContent->onSuccess wird eingeblendet)
	Effect.Appear("wrapper_id", {duration: 0.7});	
}

function setCanvasColor() {
	var str=document.body.getStyle("backgroundColor");
	if (str!=null) {
		var rgbHex="";
		if (str.indexOf("rgb")==0) {
			var parts = str.match(/\(([0-9]+)\, ([0-9]+)\, ([0-9]+)\)/);
			for (var i=1; i<parts.length; i++) {
				rgbHex+= Number(parts[i]).toString(16);
			}
		}
		else if (/#?[a-fA-F0-9]{6}/.test(str)) {
			rgbHex = str.match(/#?([a-fA-F0-9]{6})/)[1];;
		}
		else return;
		if (rgbHex != canvasColor) {
			try {
				flashMovie('flash_background').setBackgroundColor(rgbHex);
				canvasColor=rgbHex;
			}
			catch(e) {
				if (typeof console != "undefined") console.log("Fehler: "+e);
			}
			//console.log("setCanvasColor("+rgbHex+")");
		}	
	}
	
}

////////////////////////////////////////////////////////////
/////  Flash-Navi Ajax ////////////////////////////////////

lightbox_excludes=$w("bottomNavClose nextLink prevLink");

function extractContent(str, needle) {
	if (str.indexOf("<body")!=-1) {
		var a=str.indexOf(">", str.indexOf("<body")+1)+1;
		str=str.substring(a, str.lastIndexOf('</body>'));
	}
	var d=Element.extend(document.createElement("DIV"));
	d.innerHTML=str;
	if (isIE && d.querySelector != null) {
		return d.querySelector(needle).innerHTML;
	}
	return d.down(needle).innerHTML;
}


function loadContent(url, target_element) {
	//$('load').show();
	try {
		flashMovie('flash_background').changePage();
		flashMovie('flash_background').openCanvas();
		flashMovie("flash_navigation").openNavigation();
	} catch(e) {}
	var callback= arguments.length>2 ? arguments[2] : false;
	if (!callback) {
		arr_history.uniquePush( cur_pageURL );
	}
	fadeOutContent();
	new Ajax.Request(url, {
		parameters:{ using_xml_object: 'true'},
		onSuccess: function(data) {
			var target_html=extractContent(data.responseText, "#"+target_element);
			$(target_element).innerHTML=target_html;
			
			var title = data.responseText.match(/<title>([^<]*)<\/title>/);
			document.title = title[1];
			
			var body_class = data.responseText.match(/<body class\=('|\")([^'\"]*)/);
			document.body.className= body_class==null ? '' : body_class[2];
			
			setCanvasColor();
			
			initContainerNav();
			if (typeof myLightbox != "undefined") {
				myLightbox.updateImageList();
			}
			else {
			//	myLightbox = new Lightbox();
			}
			if (callback) {
				callback.apply(null);
			}
			else {
				cur_pageURL=url;
			}
			//if (!$("wrapper_id").visible() && flashMovie('flash_background').isCanvasOpen()) {
			if ( flashMovie('flash_background').isCanvasOpen()) {
				Effect.Appear("wrapper_id", {duration: 0.7});
			}
		},
		onFailure: function() {
			$('load').hide();
			alert('Fehler beim Aufruf der URL \"'+url+'\"');
		}
	});
}

function jumpTo(node_id, lang_id, ssl) {
	//debug(node_id+"-"+lang_id+"-"+ssl+" - "+arguments[3]);
	var arg_3 = (arguments.length==4) ? arguments[3] : false;
	var my_paras = "node_id="+node_id+"&lang_id="+lang_id;
	var protocol = (!arg_3 && arg_3!="_reload_") ? "http:" : "https:";
	
	var url = protocol+"//"+location.hostname+base_url+"?"+my_paras;
		
	if (node_id==0 && lang_id==0 && arg_3) {
		window.open(arg_3);
		return;
	}
	else if (jumpTo.arguments.length==4 || location.protocol != protocol) { //|| node_id==1) {
		//alert("url: "+location.protocol+"//"+location.hostname+base_url+"?"+my_paras);	
		location.href = url;
	}
	else {
		loadContent(url, "wrapper_id");
	}
}

function blurNavigation() {
	flashMovie('flash_navigation').style.zIndex=0;
	//console.log("blur Navigation");
}

function focusNavigation() {
	flashMovie("flash_navigation").style.zIndex=3;
	//console.log("focus navigation");
}

function gotoURL(url) {
	var url_part = url.split("#");
	var cur_urlPart = cur_pageURL.split("#");
	
	var paras = getURLParameter(url_part[0]);
	Try.these(function(){
		if (String(paras["node_id"])=="") {
			paras["node_id"]=1;
		}
		flashMovie('flash_navigation').setNavigation(paras['node_id'], paras['lang_id']);
	});
	var cur_paras=getURLParameter(cur_urlPart[0]);
	var eq_newUrl = paras["node_id"]+"-"+paras["lang_id"];
	var eq_curUrl = cur_paras["node_id"]+"-"+cur_paras["lang_id"];
	// neue URL und Zeiger auf Container
	if (eq_newUrl != eq_curUrl && url_part.length>1 ) {
		loadContent(url_part[0], "wrapper_id", function() {
			num_curCont=1;
			showContainer(url_part[1]);
			cur_pageURL=url;
		});
		return;
	}
	else if (eq_newUrl == eq_curUrl && url_part.length>1) {
		showContainer(url_part[1]);
	}
	else if (eq_newUrl == eq_curUrl && url_part.length==1 && cur_urlPart.length>1) {
		showContainer("b2sp_1");
	}
	else if (eq_newUrl != eq_curUrl) {
		loadContent(url_part[0], "wrapper_id", Prototype.K);
	}
	cur_pageURL=url;
}

function jumpBack() {
	if (arr_history.length>0) {
		var url=arr_history.pop();
		gotoURL(url);
	}
}
////////////////////////////
/////// Watchdogs /////////

//Event.observe(document, "dom:loaded", function() {
document.observe("dom:loaded", onDOMLoaded);

function onDOMLoaded() {
	if (GetSwfVer<10) return;
	var hideWrapper=true;
	try {
		var p=getURLParameter(document.URL);
		if (p["scope"]=="back") hideWrapper=false;
	}
	catch(e) {}
	//debug(hideWrapper ? "hideWrapper" : "!hideWrapper");
	if (hideWrapper) {
		if (isIE && $("wrapper_id")==null) {
			setTimeout(onDOMLoaded, 100);
			return;
		}
		$("wrapper_id").hide();
		$$('ul.service a').each( _eachModLink );
		
		initContainerNav();
		$("wrapper_id").update("");
	}
	else {
		$('ul.service a').each( _eachModLink );
		initContainerNav();
		var tid;
		tid=setTimeout(function(){
			flashMovie('flash_background').openCanvas();
			setCanvasColor();
			clearTimeout(tid);
		}, 800);
	}
	
	Event.observe(document.body, "click", function(ev) {
		try {
			flashMovie("flash_navigation").openNavigation();
		} catch(e) {}
	});
}


///////////////////////////
//////  Extensions ///////

Object.extend(Array.prototype, {
	uniquePush: function(arg) {
		if (this[this.length-1]!=arg) {
			this.push(arg);
		}
	
	}
});

