
if (typeof Effect == 'undefined')
  throw("Es fehlt die script.aculo.us library um das Akkordeon zu nutzen!");

var Accordion = Class.create({

    initialize: function(id, defaultExpandedCount) {
        if(!$(id)) throw("Attempted to initalize accordion with id: "+ id + " which was not found.");
        this.accordion = $(id);
        this.options = {
            toggleClass: "accordion-toggle",
            toggleActive: "accordion-toggle-active",
            contentClass: "accordion-content"
        }
        this.contents = this.accordion.select('div.'+this.options.contentClass);
        this.isAnimating = false;
        this.maxHeight = 0;
        this.current = defaultExpandedCount ? this.contents[defaultExpandedCount-1] : this.contents[0];
        this.toExpand = null;

        this.checkMaxHeight();
        this.initialHide();
        this.attachInitialMaxHeight();

        var clickHandler =  this.clickHandler.bindAsEventListener(this);
        this.accordion.observe('click', clickHandler);
    },

    expand: function(el) {
        this.toExpand = el.next('div.'+this.options.contentClass);
        if(this.current != this.toExpand){
			this.toExpand.show();
            this.animate();
        }
    },

    checkMaxHeight: function() {
        for(var i=0; i<this.contents.length; i++) {
            if(this.contents[i].getHeight() > this.maxHeight) {
                this.maxHeight = this.contents[i].getHeight();
            }
        }
    },

    attachInitialMaxHeight: function() {
		this.current.previous('div.'+this.options.toggleClass).addClassName(this.options.toggleActive);
        if(this.current.getHeight() != this.maxHeight) this.current.setStyle({height: this.maxHeight+"px"});
    },

    clickHandler: function(e) {
        var el = e.element();
        if(el.hasClassName(this.options.toggleClass) && !this.isAnimating) {
            this.expand(el);
        }
    },

    initialHide: function(){
        for(var i=0; i<this.contents.length; i++){
            if(this.contents[i] != this.current) {
                this.contents[i].hide();
                this.contents[i].setStyle({height: 0});
            }
        }
    },

    animate: function() {
        var effects = new Array();
        var options = {
            sync: true,
            scaleFrom: 0,
            scaleContent: false,
            transition: Effect.Transitions.sinoidal,
            scaleMode: {
                originalHeight: this.maxHeight,
                originalWidth: this.accordion.getWidth()
            },
            scaleX: false,
            scaleY: true
        };

        effects.push(new Effect.Scale(this.toExpand, 100, options));

        options = {
            sync: true,
            scaleContent: false,
            transition: Effect.Transitions.sinoidal,
            scaleX: false,
            scaleY: true
        };

        effects.push(new Effect.Scale(this.current, 0, options));

        var myDuration = 0.75;

        new Effect.Parallel(effects, {
            duration: myDuration,
            fps: 35,
            queue: {
                position: 'end',
                scope: 'accordion'
            },
            beforeStart: function() {
                this.isAnimating = true;
                this.current.previous('div.'+this.options.toggleClass).removeClassName(this.options.toggleActive);
                this.toExpand.previous('div.'+this.options.toggleClass).addClassName(this.options.toggleActive);
            }.bind(this),
            afterFinish: function() {
                this.current.hide();
                this.toExpand.setStyle({ height: this.maxHeight+"px" });
                this.current = this.toExpand;
                this.isAnimating = false;
            }.bind(this)
        });
    }

});

document.observe("dom:loaded", function(){
   if($('test-accordion'))
    accordion = new Accordion("test-accordion", 1);
})

var str_separator = "_??_";

// Global Stringtools

function ConcatStr(s1, s2)
	{
		var new_s = s1 + str_separator + s2;
		return new_s; 
	}

function SeparateStr2Obj(s)
	{
		var arr = s.split(str_separator);
		return arr;
	}

function IsEven (n)
	{
	  if (n % 2 == 0)
	    return true;
	  else
	    return false;
	}

function ValFromGetList(needle,haystack)
	{
		var ret = '';
		var hay_arr = haystack.split('&');
		var ballen;
		for(var i = 0; i < hay_arr.length; i++)
			{
				ballen = hay_arr[i].split('=');
				if(ballen[0] == needle)
					ret = ballen[1];
			}
		return ret;
	}

function Arr2GetList(arr)
	{
		var ret = '';
		var gerade = false;
		for(var i = 0; i < arr.length; i++)
			{
				if(i == 0)
					ret += '&' + arr[i] + '=';
				else
					{
						gerade = IsEven(i);
						if(gerade == true)
							ret += '&' + arr[i] + '=';
						else
							ret += arr[i];
					}
			}
		return ret;
	}

function GetstrToStr(gs)
	{
		var ret = '';
		var pool = gs.split('&');
		var einzeln;
		for(var i = 0; i < pool.length; i++)
			{
				einzeln = pool[i].split('=');
				ret += einzeln[1];
				if((i + 1) < pool.length)
					ret += ",";
			}
		return ret;
	}

// Ende Tools

// Formular-Handling
function HideErrors()
	{
	  $('errmsg').hide();
	  var elms = $$('span.errdesc');
	  for(var i = 0; i < elms.length; i++)
	  	{
	  		$(elms[i]).hide();
	  	}
	}

function ObserveFields()
	{
		var requiredfields = $$('input.required');
	  var errmsgfield = '';
	  var focusfield = '';
	  for(var i = 0; i < requiredfields.length; i++)
	  	{
 				errmsgfield = $(requiredfields[i]).id + '_err';
 				focusfield = $(requiredfields[i]).id;
 				//alert(focusfield);
 				Event.observe($(focusfield), 'focus', HideFormErrorMsg.bindAsEventListener($(focusfield), errmsgfield));
	  	}			
	}

function HideFormErrorMsg(el,wrg)
	{
		$(wrg).hide();
	}
	
function LoginForm()
	{
		HideErrors();
		// Lade alle "required"-Felder in Array
		var requiredfields = $$('input.required');
	  var errmsgfield = '';
	  var errnum = 0;
	  // Alle leere Felder markieren
	  for(var i = 0; i < requiredfields.length; i++)
	  	{
	  		if($F(requiredfields[i]) == '')
	  			{
	  				errmsgfield = $(requiredfields[i]).id + '_err';
	  				$(errmsgfield).show();
	  				return false;
	  			}
	  	}			
	}
	
function checkEmail(email, required)
	{
	  if (required == undefined)
	  	{
	    	required = true;
	    }
	 
		if (email == null)
		 	{
				if(required)
					{
		      	return false;
		    	}
		    return true;
			}

    if(email.length == 0)
	    {  
		    if (required)
		    	{
		      	return false;
		      }
				return true;
		  }

    // Sind die Zeichen gültig?
    if(!allValidChars(email))
    	{
				return false;
	    }
		// gibt es ein @ und ist es nicht an der ersten Stelle
		if (email.indexOf("@") < 1)
			{ 
	    	return false;
	    } 
	  else if (email.lastIndexOf(".") <= email.indexOf("@")) // letzer Dot muss hinter dem @ sein
	  	{
	      return false;
	    }
	  else if (email.indexOf("@") == email.length)  // @ ist nicht letztes Zeichen
	  	{
	    	return false;
	    } 
	  else if (email.indexOf("..") >=0) // 2 Dots hintereinander feht far nicht
	  	{ 
				return false;
	    }
	  else if (email.indexOf(".") == email.length)
	    {
				return false;
	    }
	    
	  return true;
	}

function allValidChars(email)
	{
	  var parsed = true;
	  var validchars = "abcdefghijklmnopqrstuvwxyz0123456789@.-_";
	  for (var i=0; i < email.length; i++)
		  {
		    var letter = email.charAt(i).toLowerCase();
		    if (validchars.indexOf(letter) != -1)
		      continue;
		    parsed = false;
		    break;
		  }
	  return parsed;
	}
	
function SendForm()
	{
		var bol_forms = CheckForm('null');
		if(bol_forms != false)
			{
				var url = 'common/formmailer.php';
				var formdata = Form.serialize('kontaktform');
				var params = 'aktion=send&' + formdata;
				new Ajax.Request(url, {
					  method: 'post',
					  parameters: params,
					  onSuccess: function(request)
						  	{
						  		if(request.responseText == "err")
					  				var msg = 'Leider konnte Ihre Anfrage nicht versendet werden. Bitte rufen Sie uns an.';
						  		else
						  			var msg = 'Ihre Anfrage wurde erfolgreich an uns versendet.';
		
									$('callbackmsg').update(msg);
									if(request.responseText != "err")
										{
											var nmsg = '';
											var warten = setTimeout('$(\'callbackmsg\').update(' + nmsg + ')', 10000);
										}
						  	}
					  });
			}
		return false;
	}

function NlSendForm()
	{
		var bol_forms = CheckForm('null');
		if(bol_forms != false)
			{
				var url = 'common/formmailer.php';
				var formdata = Form.serialize('nlform');
				var params = 'aktion=nl&' + formdata;
				new Ajax.Request(url, {
					  method: 'post',
					  parameters: params,
					  onSuccess: function(request)
						  	{
						  		if(request.responseText == "err")
					  				var msg = 'Leider konnte Ihre Anfrage nicht versendet werden. Bitte rufen Sie uns an.';
						  		else
						  			{
						  				if(request.responseText == "nladd")
						  					var msg = 'Ihre Newsletterbestellung wurde erfolgreich versendet.';
						  				else
						  					var msg = 'Sie wurden erfolgreich aus dem Newsletterversand heraus genommen.';
						  			}
		
									$('callbackmsg').update(msg);
									if(request.responseText != "err")
										{
											var nmsg = '';
											var warten = setTimeout('$(\'callbackmsg\').update(' + nmsg + ')', 10000);
										}
						  	}
					  });
			}
		return false;
	}
	
function CheckForm(mode)
	{
		HideErrors();
		// Lade alle "required"-Felder in Array
		var requiredfields = $$('input.required');
	  var errmsgfield = '';
	  var errnum = 0;
	  // Alle leere Felder markieren
	  for(var i = 0; i < requiredfields.length; i++)
	  	{
	  		if($F(requiredfields[i]) == '')
	  			{
	  				errmsgfield = $(requiredfields[i]).id + '_err';
	  				$(errmsgfield).show();
	  				return false;
	  			}
	  	}

		// Check E-mail:
		if($F('email') == '')
 			{
				$('email_err').update('Ihre E-Mailadresse fehlt!');
 				$('email_err').show();
 				return false;
 			}
		else
			{
				var chckres = checkEmail($F('email'),true);
				if(chckres == false)
					{
						$('email_err').update('Diese E-Mailadresse ist nicht korrekt!');
						$('email_err').show();
						return false;
					}
			}				
		return true;
	}