
  (function(){
    var currentForm = null;

    var contactBlock = document.getElementById('contact-block');
    
    if (!contactBlock)
      return;


    var searchTrigger = document.getElementById('contact-block-search');
    searchTrigger.onclick = function(){
      display(document.getElementById('contact-block-content'), false);
      display(document.getElementById('search-block-content'), true);
      document.getElementById('contact-block').className += ' opened2';
      document.getElementById('contact-block-title').style.display = 'none';
      document.getElementById('contact-block').style.padding = '5px 20px 0';
      document.getElementById('contact-block-search').style.paddingLeft = '0';
    };
    if(document.getElementById('search').value != '') {
      display(document.getElementById('contact-block-content'), false);
      display(document.getElementById('search-block-content'), true);
      document.getElementById('contact-block').className += ' opened2';
      document.getElementById('contact-block-title').style.display = 'none';
      document.getElementById('contact-block').style.padding = '5px 20px 0';
      document.getElementById('contact-block-search').style.paddingLeft = '0';    
    }



    var VALIDATOR = [
      [ commonValidate ],
      [ commonValidate ],
      [ commonValidate ],
      [ commonValidate ]
    ];


    var contactTrigger = document.getElementById('contact-block-title');
    contactTrigger.onclick = function(){ 
      open.call(contactBlock); 
      display(document.getElementById('contact-block-content'), true);
      display(document.getElementById('search-block-content'), false);
      document.getElementById('contact-block-search').style.display = 'none';
      document.getElementById('contact-block').style.padding = '5px 20px 0';
    };

    var closeTrigger = document.getElementById('contact-block-close');
    closeTrigger.onclick = function(){ 

      close.call(contactBlock);
      document.getElementById('contact-block-search').style.display = 'inline'; 
      document.getElementById('contact-block-title').style.display = 'inline'; 
      document.getElementById('contact-block').style.padding = '0 20px';
      display(document.getElementById('contact-block-content'), false);
      display(document.getElementById('search-block-content'), false);
      document.getElementById('contact-block-search').style.paddingLeft = '105px';
      if (currentForm) {
        closeForm(currentForm);
      }
    };


    var formTriggers = (contactBlock && contactBlock.getElementsByTagName('li')) || [];

    for (var i = 0, trigger; trigger = formTriggers[i]; i++)
    {
      (function(){
        var number = i;
        var form = document.getElementById(trigger.className);
        if (!form)
        {
          trigger.onclick = function(){ 
            if (currentForm)
              closeForm(currentForm); 

            return false; 
          };
        }
        else
        {
          trigger.onclick = function(){ openForm(form); return false; };

          form.trigger = trigger;
          form.number = number;
          form.steps = getFormSteps(form);

          var closeTrigger = document.getElementById(form.id + '-close');
          if (closeTrigger) 
          {
            closeTrigger.onclick = function(){ 
              closeForm(form); 
            };
          }


          for (var j = 0, step; step = form.steps[j]; j++)
            step.error = getFormStepError(step);

          var buttons = form.getElementsByTagName('button');
          var handler = null;
          for (var j = 0, button; button = buttons[j]; j++)
          {
            var onclick = null
            switch(button.className){
              case 'next': 
                onclick = function(){ nextStep(form); return false }
              break;
              case 'close': 
                onclick = function(){ closeForm(form); return false }
              break;
              case 'submit': 
                onclick = function(){
                  if (validate(form)===false){
                    form.onsubmit=function(){return asyncSubmitJson(form, submitCallback.bind(form))};
										form.onsubmit();
                  }
									return false;
                }
              break;
            }

            button.onclick = onclick;
          }
        }
      })();
    }

		function refreshCaptcha(form){
		  var step=form.steps[form.currentStep];
		  var images=step.getElementsByTagName("img");
			for(var i=0;i<images.length;i++){
				var im=images[i];
	    	if(im.className=="captcha"){
					im.src="shapes/captcha_img.php?ver="+new Date().getTime();
				}
			}
		}

    function submitCallback(result){
      if (result.error)
      {
        //this.className += ' error';
        setError(this, 'ACHTUNG: ' + result.error);
        refreshCaptcha(this);
      }
      else
      	nextStep(this);
        this.className += ' complete';
    }

    function commonValidate(){
      var error = '';
      if (!this.name.value)
        error = 'Name fehlt';
      else if (!this.phone.value)
        error = 'Telefonnummer fehlt';
      else if (!this.email.value)
        error = 'E-Mail fehlt';
      else if (!/^([a-z0-9])(([-a-z0-9._])*([a-z0-9]))*\@([a-z0-9])(([a-z0-9-])*([a-z0-9]))+(\.([a-z0-9])([-a-z0-9_-])?([a-z0-9])+)+$/i.test(this.email.value))
        error = "E-Mail nicht korrekt";

      return error ? 'ACHTUNG: ' + error : null;
    }

    function openForm(form){
      if (currentForm)
        closeForm(currentForm);

      form.reset();
      open.call(form);
      open.call(form.trigger); 
      setFormStep(form, 0);
      currentForm = form;
    }

    function closeForm(form){
      close.call(form);
      close.call(form.trigger);
    }
		
		function validate(form){
      setError(form, '');
      var error = '';
      var validator = VALIDATOR[form.number] && VALIDATOR[form.number][form.currentStep];
      if (!(validator && (error = validator.call(form))))
      {
        return false;
      }
      else
        return error;
		}
		
    function nextStep(form){
      var error;
      if((error=validate(form))!==false){
        setError(form, error);
			}
			else{
        setFormStep(form, form.currentStep + 1);
        return 1;
      }
    }

    function setFormStep(form, stepNumber){
      for (var i = 0, step; step = form.steps[i]; i++)
        display(step, i == stepNumber);

      form.currentStep = stepNumber;
    	refreshCaptcha(form);
      setError(form, '');
    }

    function setError(form, error){
      if (errorBlock = form.steps[form.currentStep].error)
      {
        errorBlock.innerHTML = error;
        errorBlock.title = error;
      }
    }


    function getFormStepError(form){
      var blocks = form.getElementsByTagName('p');
      for (var i = 0; i < blocks.length; i++)
        if (blocks[i].className == 'error')
          return blocks[i];
    }

    function getFormSteps(form){
      var steps = [];
      var blocks = form.getElementsByTagName('div');
      for (var i = 0; i < blocks.length; i++)
        if (blocks[i].className == 'contact-form-step')
          steps.push(blocks[i]);

      return steps;
    }

    function open(element){
      this.className = this.className + ' opened';
    }

    function close(element){
      this.className = this.className.replace(/\s?(opened|opened2|complete|error)\s?/g, '');
    }

    function display(element, display){
      element.style.display = display ? 'block' : 'none';
    }

  })();

