//----------------------------
// basisfunktionen
//----------------------------

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_showHideLayers() { //v6.0
  var i,p,v,obj,args=MM_showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v=='hide')?'hidden':v; }
    obj.visibility=v; }
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}


//----------------------------
// eigene funktionen
//----------------------------

function showLayer(name){
	MM_showHideLayers(name,'','show');
}

function hideLayer(name){
	MM_showHideLayers(name,'','hide');
}



// begrenzung von zeichen in einer textarea auf maximal-laenge
function checkMax(field, max) {
	var fieldLength = field.value.length;
	if (fieldLength>max) {
		field.value = field.value.substr(0,max);
		alert('Es sind max. '+max+' Zeichen erlaubt.');
	}
}


// neue text textaerea maximallaenge
// maxlength for textareas => START
function setMaxLength()
{		
	var x = document.getElementsByTagName('textarea');	
	var counter = document.createElement('div');
	counter.className = 'counter';
	
	for (var i=0;i<x.length;i++)
	{
		if (x[i].getAttribute('maxlength'))
		{
			var counterClone = counter.cloneNode(true);
			counterClone.relatedElement = x[i];
			
			counterClone.innerHTML = '<span>0</span>/'+x[i].getAttribute('maxlength');
			x[i].parentNode.insertBefore(counterClone,x[i].nextSibling);
			x[i].relatedElement = counterClone.getElementsByTagName('span')[0];
			x[i].onkeyup = x[i].onchange = checkMaxLength;
			x[i].onkeyup();						
		}

	}
}

function checkMaxLength()
{
	
	var maxLength = this.getAttribute('maxlength');
	var currentLength = this.value.length;
	
	if (currentLength > maxLength)
	{	
		//this.relatedElement.className = 'toomuch';
		this.value=this.value.slice(0, maxLength);		
	}
	else
		this.relatedElement.className = '';
	this.relatedElement.firstChild.nodeValue = currentLength;
	// not innerHTML
}
// maxlength for textareas => END

//----------------------------
// klasse fuer die hauptnavigation
//----------------------------

var MainNav = Class.create({

	// initialisierung
	initialize: function() {
		this.activeElm 			= null;
		
		this.savedEvent 		= null;
		this.delayedEventType 	= null;		
		this.delayID			= null;		
		
		// binden der events
		this.bindAll();		
	},
	
	bindAll: function() {
		this.boundShowLayerDelayed = this.showLayerDelayed.bind(this);
		this.boundHideLayerDelayed = this.hideLayerDelayed.bind(this);		
		this.boundHandleDelayedLayerHandling = this.handleDelayedLayerHandling.bind(this)
	
		var lvl2 = $$('#mainnav > li');		
		
		for(var l2 = 0; l2 < lvl2.length; l2++){
			var subLayer = lvl2[l2].select('ul.lvl3');
			if (subLayer.length > 0 ) {				
				lvl2[l2].observe('mouseenter', this.boundShowLayerDelayed);
				lvl2[l2].observe('mouseleave', this.boundHideLayerDelayed);
			}
		}
		
		var activeMainLink = $$('#mainnav > li > a.active');
		if (activeMainLink.length > 0 ) {
			this.activeElm = activeMainLink[0].up('li');
		}		
	},
	
	
	// ein layer soll eingeblendet werden
	showLayerDelayed: function(event) {					
		if (this.delayedEventType == 'hide') {
			// laeuft noch ein timer fuer einen zu versteckenden layer: 
			// timber beenden
			window.clearTimeout(this.delayID);
			// alten layer verstecken
			this.hideLayer(this.savedEvent);
			// neuen (sofort!) anzeigen
			this.showLayer(event); 
			// delay hat sich erledigt -> abbruch
			return;
		} else if (this.delayedEventType == 'show') {
			// laueft noch ein timer zum anzeigen eines layers den timer nullen
			window.clearTimeout(this.delayID);
		}
	
		// event-objekt und gewuenschte aktion wegsichern
		this.savedEvent 		= event;
		this.delayedEventType 	= 'show';
				
		// timer starten (+delay in sek)
		this.delayID = this.boundHandleDelayedLayerHandling.delay(0.3);				
	},
	
	// ein layer soll ausgeblendet werden
	hideLayerDelayed: function(event) { 
		// event-objekt und gewuenschte aktion wegsichern
		this.savedEvent 		= event;
		this.delayedEventType 	= 'hide';
		
		// timer starten (+delay in sek)
		this.delayID = this.boundHandleDelayedLayerHandling.delay(0.3);
	},
	
	// zentraler callback fuer den delay
	handleDelayedLayerHandling: function() {	
		if (this.delayedEventType == 'show') {
			// ggf. layer jetzt oeffnen...
			this.showLayer(this.savedEvent);
		} else if (this.delayedEventType == 'hide') {
			// ... bzw. layer jetzt oeffnen
			this.hideLayer(this.savedEvent);
		}
	},
	
	// zeigt einen layer (tatsaechlich) an
	showLayer: function(event) {		
		var mainLink = event.target;
		
		if (!mainLink.match('#mainnav > li')){			
			mainLink = mainLink.up('#mainnav > li');
		}
		
		if (this.activeElm != mainLink) {
			mainLink.down('a').addClassName('active');
		}
		
		var subLayer = mainLink.select('ul.lvl3');		
		if (subLayer.length > 0 ) {
			subLayer[0].show();
		}
		
		this.savedEvent 		= null;
		this.delayedEventType 	= null;		
		this.delayID			= null;
	}, 
	
	// versteckt einen layer (tatsaechlich)
	hideLayer: function(event) {		
		var mainLink = event.target;
		
		if (!mainLink.match('#mainnav > li')){			
			mainLink = mainLink.up('#mainnav > li');
		}
		
		if (this.activeElm != mainLink) {
			mainLink.down('a').removeClassName('active');
		}
		
		var subLayer = mainLink.select('ul.lvl3');
		if (subLayer.length > 0 ) {
			subLayer[0].hide();
		}
		
		this.savedEvent 		= null;
		this.delayedEventType 	= null;		
		this.delayID			= null;
	}
	
});

// initialisiert die hauptnavigation
document.observe("dom:loaded", function() {
  var mnav = new MainNav();
});