var AJAXLOADER = {
	
	//------------------------------------------------------------------------
	
	HASH:'',
	BASE:null,
	request:null,
	contentContainer:null,
	contentWrap:null,
	content:null,
	mainNavi:null,
	mediaNavi:null,
	logo:null,
	styleSheet:null,
	bufferContainer:null,
	scripts:null,
	searchText:{
		content:{
			start:'<div id="content">',
			end:'<div id="mediaNavigationContainer">'
		},
		mainNavi:{
			start:'<ul id="mainNavigation">',
			end:'<div id="contentWrap">'
		},
		mediaNavi:{
			start:'<ul id="mediaNavigation">',
			end:'</ul>'
		},
		mainContainer:{
			start:'<div id="mainContainer" class="',
			end:'">'
		}
	},
	
	//------------------------------------------------------------------------

	init:function() {
		this.set_base();
		this.set_onHashChange();
		this.contentWrap = $('contentWrap');
		this.content = $('content');
		this.contentContainer = $('contentContainer');
		this.mainNavi = $('mainNavigation');
		this.mediaNavi = $('mediaNavigation');
		this.logo = $('logo');
		this.parse_links();
		window.onhashchange();
	},
	
	//------------------------------------------------------------------------

	set_base:function() {
		var b = document.getElementsByTagName('base');
		if(b[0] != undefined) {
			this.BASE = b[0].href;
		}
	},

	//------------------------------------------------------------------------

	set_naviNodesStatus:function( el, navi ) {
		el.className = 'activeNodeLink';
		el.parentNode.className = 'activeNode';
		if( el.parentNode.parentNode != navi ) {
			this.set_naviNodesStatus(el.parentNode.parentNode.previousSibling, navi);
		}
	},
	
	//------------------------------------------------------------------------
	
	set_styleSheet:function( responseText ) {
		var start = responseText.indexOf(this.searchText.mainContainer.start) + this.searchText.mainContainer.start.length;
		var end = responseText.length;
		var res = responseText.substr(start,end);
		
		var end = res.indexOf(this.searchText.mainContainer.end);
		res = res.substr(0,end);
		if( res == '' ) {
			res = 'home';
		}
		PAGE.colorSchema = res;
		PAGE.styleSheet.href = '/fileadmin/templates/css/'+res+'.css';
	},

	//------------------------------------------------------------------------
	
	set_contentHeight:function() {
		this.contentWrap.style.height = this.content.offsetHeight + 'px';
		this.contentWrap.minHeight = '0px';
	},
	
	//------------------------------------------------------------------------
	
	set_onHashChange:function() {
		var isIE7 = (Browser.name == 'ie' && Browser.version < 8) ? true : false;
		var isFF35 = (Browser.name == 'firefox' && Browser.version < 3.6) ? true : false; // Firefox 3.5
		if( 'onhashchange' in window && (isIE7 || isFF35) ) {
			window.hashChangeInterval = setInterval(function(){window.onhashchange();},100);
		}
		
		window.onhashchange = function() {
			var cHash = window.location.hash.replace('#','');
			
			// Für Hashes welche nicht auf die Base zeigen
			cHash = (cHash.indexOf(AJAXLOADER.BASE) > -1) ? cHash : window.location.href.substr(0,window.location.href.indexOf('#'));
			
			if( cHash != AJAXLOADER.HASH ) {
				AJAXLOADER.HASH = cHash;
				AJAXLOADER.load_content(AJAXLOADER.HASH);
			}
			delete cHash;
		}
		delete isIE7;
		delete isFF35;
	},
	
	//------------------------------------------------------------------------
	
	parse_links:function( obj ) {
		var links = ( obj == undefined ) ? document.links : obj.getElementsByTagName('a');
		for(var i=0; i<links.length; i++) {
			var link = links[i];
			/*if( link.href.indexOf('?id=') > -1 ) {
				link.cHash = link.href;
				link.onclick = function() {
					window.location.href = '#' + this.cHash;
					return false;
				}
				link.href = '#';
			}*/
			if( link.href.indexOf(this.BASE) > -1 && this.is_file(link.href) === false ) {
				link.cHash = link.href;
				link.onclick = function() {
					window.location.href = '#' + this.cHash;
					return false;
				}
				link.href = '#';
			}
		}
		delete links;
		delete i;
	},
	
	//------------------------------------------------------------------------

	is_file:function( href ) {
		var files = new Array('.pdf','.zip','.doc','.docx','.xls','.xlsx','.ppt','.pptx','.jpg');
		for( var i=0; i<files.length; i++ ) {
			if( href.lastIndexOf(files[i]) > -1 ) {
				return true;
			} else {
				continue;
			}
		}
		return false;
	},

	//------------------------------------------------------------------------

	eval_scripts:function() {
		this.scripts = this.scripts.replace('<!--','');
		this.scripts = this.scripts.replace('// -->','');
		this.scripts = this.scripts.replace('//-->','');
		eval(this.scripts);
		this.scripts = null;
	},
	
	//------------------------------------------------------------------------

	on_load:function( responseText ){
		
		var start = '';
		var end = '';
		
		// CONTENT
		start = responseText.indexOf(this.searchText.content.start) + this.searchText.content.start.length;
		end = responseText.indexOf(this.searchText.content.end) - start;
		var res = responseText.substr(start,end);
		res = res.substr(0,res.lastIndexOf('</div>'));
		this.content.innerHTML = res;
		this.parse_links(this.content);
		
		// MAINNAVI
		start = responseText.indexOf(this.searchText.mainNavi.start) + this.searchText.mainNavi.start.length;
		end = responseText.indexOf(this.searchText.mainNavi.end) - start;
		res = responseText.substr(start,end);
		this.mainNavi.innerHTML = res;
		this.parse_links(this.mainNavi);
		PAGE.init_navi(this.mainNavi);
		
		// MEDIANAVI
		start = responseText.indexOf(this.searchText.mediaNavi.start) + this.searchText.mediaNavi.start.length;
		end = responseText.lastIndexOf(this.searchText.mediaNavi.end) - start;
		res = responseText.substr(start,end);
		this.mediaNavi.innerHTML = res;
		this.parse_links(this.mediaNavi);
		PAGE.init_navi(this.mediaNavi);
		
		this.set_styleSheet(responseText);
		
		this.eval_scripts();
		SPECIALCONTENT.init();
		
		setTimeout(function(){
			AJAXLOADER.fade_content();
			AJAXLOADER.track_google();
		},250);
		
		delete start;
		delete end;
		delete res;
		delete responseText;
	},

	//------------------------------------------------------------------------
	
	load_content:function( hash ) {
		this.set_contentHeight();
		this.content.style.visibility = 'hidden';
		AJAXLOADER.contentWrap.className = 'loader';
		this.request = new Request.HTML({
			url: hash,
			evalScripts: false,
			evalResponse: false,
			onSuccess: function( responseTree, responseElements, responseHTML, responseJavaScript ) {
				AJAXLOADER.scripts = responseJavaScript;
				AJAXLOADER.on_load( responseHTML );
			}
		});
		this.request.send();
	},

	//------------------------------------------------------------------------

	fade_content:function() {

		PAGE.fade_logo();
		
		var contentFx = new Fx.Morph(
			this.contentWrap, {
			duration:500,
			transition: Fx.Transitions.Sine.easeInOut,
			onComplete:function() {
				AJAXLOADER.content.style.visibility = 'visible';
				AJAXLOADER.contentWrap.className = '';
				if( PAGE.colorSchema == 'black' ) {
					PAGE.bgImage.setOpacity(0.3);
				} else {
					PAGE.bgImage.setOpacity(1);
				}
				PAGE.on_resize();
			}
		});
		contentFx.start({height:this.content.offsetHeight});
		
		var containerFx = new Fx.Morph(
			this.contentContainer,{duration:500,
			transition: Fx.Transitions.Sine.easeInOut
		});
		containerFx.start({top:PAGE.get_containerTop(this.content)});

	},

	//------------------------------------------------------------------------
	/**
	 * Google Analytics Track-Event
	 * Wird bei jedem Seitenwechsel aufgerufen
	 */
	track_google:function() {
		if(typeof(_gaq) == 'object') {
			var x = _gaq.push(['_trackPageview', this.HASH]);
		}
	}

	//------------------------------------------------------------------------

};

//----------------------------------------------------------------------------

window.addEvent('load',function(){AJAXLOADER.init();});

