var multipageform = function(el)
{
  if(typeof(el)=='object')
  {
    returnobj = {
      form : el,
      sets : new Array(),
      repeatersets : new Array(),
      navigation : null,
      current : null,
      
      repeatdiv : "\n\n---------- Eintrag ----------\n\n",
      
      show : function(num)
      {
        if(num!=this.current)
        {
          this.current = num;
          this.sets.each(function(set,i){
            set.items.each(function(el,j){
              if(i!=this.current)
                el.setStyles({'display':'none'});
              else
                el.setStyles({'display':'block'});
            }.bind(this));
          }.bind(this));
          
          this.navigation.getElements('li').removeClass('active');
          this.navigation.getElements('li')[this.current].addClass('active');
          
        }
      },
      
      getFieldValue : function(li)
      {
        if(li.getElement('textarea'))
          return li.getElement('textarea').get('value').replace(/(\r\n|\n|\r)/gm," ");
        else if(li.getElement('input[type="text"]') && !li.getElement('input[type="text"]').hasClass('repeater-label'))
          return li.getElement('input[type="text"]').get('value').replace(/(\r\n|\n|\r)/gm," ");
        else if(field = li.getElement('input[type="radio"]:checked'))
          return field.get('value');
        else if(fields = li.getElements('input[type="checkbox"]:checked'))
        {
          string = new Array();
          for(gi=0; gi<fields.length; gi++)
            string.push(fields[gi].get('value'));
          string = string.join(', ');
          return string;
        }
        else if(fields = li.getElements('option:selected'))
        {
          string = new Array();
          for(gi=0; gi<fields.length; gi++)
            string.push(fields[gi].get('value'));
          string = string.join(', ');
          return string;
        }
        else
          return '';
      },
      
      setFieldValue : function(li,value)
      {
        if(li.getElement('textarea'))
          li.getElement('textarea').set('value',value);
        else if(li.getElement('input[type="text"]') && !li.getElement('input[type="text"]').hasClass('repeater-label'))
          li.getElement('input[type="text"]').set('value',value);
        else if(fields = li.getElements('input[type="radio"]'))
        {
          for(si=0; si<fields.length; si++)
          {
            fields[si].set('checked',false);
            if(fields[si].get('value') == value)
            {
              fields[si].set('checked',true);
              break;
            }
          }
        }
        else if(fields = li.getElements('input[type="checkbox"]'))
        {
          value = value.indexOf(', ')>-1 ? value.split(', ') : new Array(value);
          for(si=0; si<fields.length; si++)
          {
            if(value.contains(fields[si].get('value')))
              fields[si].set('checked',true);
          }
        }
        else if(fields = li.getElements('option'))
        {
          value = value.indexOf(', ')>-1 ? value.split(', ') : new Array(value);
          for(si=0; si<fields.length; si++)
          {
            if(value.contains(fields[si].get('value')))
              fields[si].set('selected',true);
          }
        }
      },

      updateRepeater : function(field)
      {
        /* id : this.repeatersets.length,
           name : 'Repeater',
           emptyset : new Array(),
           items : new Array(),
           resultli : null */

        if(set = this.repeatersets[field.repeaterindex])
        {
          cnt = new Array();
          for(i=0; i<set.items.length; i++)
          {
            notempty = false;
            lines = new Array();

            for(j=0; j<set.items[i].length; j++)
            {
              value = ''; name='';

              value = this.getFieldValue(set.items[i][j]);
              if(field.get('type')=='radio')
              {
                name = set.items[i][j].getElement('input.repeater-label').get('value');
              }
              else
                name = set.items[i][j].getElement('label').get('html');
               
// alert(name+" : "+set.items[i][j].get('html'));
              if(name!='' && value!='')
              {
                notempty = true;
              }
              lines.push(name+' : '+value);
            }
            
           if(notempty)
              cnt.push(lines.join("\n"));
          }
          cnt = cnt.join(this.repeatdiv);
          set.resultli.set('value',cnt);
        }
      },
      
      addRepeaterItems : function(field)
      {
        if(set = this.repeatersets[field.repeaterindex])
        {
          newitems = new Array();

          for(i=0; i<set.emptyset.length; i++)
          {
            theitem = set.emptyset[i].clone(true,true).cloneEvents(set.emptyset[i]);
            theitem = this.addFieldEvents(theitem,field.repeaterindex);

            if(i==0)
              theitem.inject(field,'before');
            else
              theitem.inject(newitems.getLast(),'after');
            
            newitems.push(theitem);            
          }
          set.items.push(newitems);
          this.resetTabIndexes(set);
        }
      },
      
      resetTabIndexes : function()
      {
        startindex = -1;
        $(document).getElements('a,textarea,input[type="text"],input[type="radio"],input[type="checkbox"],input[type="submit"],button,select').each(function(el,i)
        {
          tabindex = el.get('tabIndex');
          if(startindex<0)
            startindex = tabindex;
          else
          {
            startindex++;
            el.set('tabIndex',startindex);
          }
        });
      },
      
      updateAllFields : function()
      {
        this.repeatersets.each(function(repeaterset){
          repeaterset.items.each(function(items){
            if(li = items.getLast())
            {
              if(li.getElement('textarea'))
                field = li.getElement('textarea');
              else if(li.getElement('input[type="text"]') && !li.getElement('input[type="text"]').hasClass('repeater-label'))
                field = li.getElement('input[type="text"]');
              else if(field = li.getElement('input[type="radio"]:checked'))
                field = field;
              else if(fields = li.getElements('input[type="checkbox"]:checked'))
                field = fields.pick();
              else if(field = li.getElement('selected'))
                field = field;
              else
                field = null;
              
              if(field)
                this.updateRepeater(field);
            }
          }.bind(this));
        }.bind(this));        
      },      
      
      addFieldEvents : function(li,setid)
      {
        if((field = li.getElement('textarea,input[type="text"]')) && !field.hasClass('repeater-label'))
        {
          field.set('value','');
          field.repeaterindex = setid;
          field.addClass('repeater-item-'+setid)
          .addEvents({
/*
            'keyup' : function(){ 
              pager.updateRepeater(this);
            }.pass([pager = this],field)
*/
          });
        }
        else if(fields = li.getElements('input[type="radio"],input[type="checkbox"]'))
        {
          fields.each(function(el,i){
            el.checked=false;
            el.repeaterindex = setid;
            
            if(set = this.repeatersets[setid])
            {
              // set new ids and names
              newid = el.get('id')+'-'+set.items.length;
              label = el.getParent('li').getElement('label[for="'+el.get('id')+'"]');
              el.set('id',newid);
              if(label)
                label.set('for',newid);
              el.set('name','repeater-radio-'+set.items.length+'-'+setid);
            }
            
            el.addClass('repeater-item-'+setid)
            .addEvents({
/*
              'click' : function(){
                pager.updateRepeater(this);
              }.pass([pager = this],el)
*/
            });
            
          }.bind(this));

          if(!this.repeatersets[setid] && (label = li.getElement('label')))
          {
            new Element('input.repeater-label',{type:'text',value:'',name:'repeater-label-'+setid}).replaces(label);
          }
          else if(inp = li.getElement('input.repeater-label'))
          {
            inp.set('value','');
            
          }

        }
        else if(field = li.getElement('select'))
        {
          if(fields = li.getElements('option'))
            fields.each(function(el,i){ el.selected=false; });

          field.repeaterindex = setid;
          field.addClass('repeater-item-'+setid)
          .addEvents({
            'change' : function(){
              pager.updateRepeater(this);
            }.pass([pager = this],field)
          });
        }
        
        return li;
      },
      
      getItemsFromString : function(repeaterset,set)
      {
        if(repeaterset.resultli)
        {
          items = repeaterset.resultli.get('value');
          if(items.indexOf(this.repeatdiv)>-1)
            items = items.split(this.repeatdiv);
          else
            items = new Array(items);

          for(i=0; i<items.length; i++)
          {
            fielditems = new Array();
            lines = items[i].indexOf("\n")>-1 ? items[i].split("\n") : new Array(items[i]);

            notempty=false;
            for(j=0; j<lines.length; j++)
            {
              if(lines[j].indexOf(" : ")>-1)
              {
                notempty = true;
                lines[j] = lines[j].split(" : ");
                name = lines[j][0];
                value = lines[j][1];
                
                for(k=0; k<repeaterset.emptyset.length; k++)
                {
                  if(label = repeaterset.emptyset[k].getElement('input.repeater-label'))
                  {
                    if(i<=0)
                    {
                      repeaterset.items[0][k].destroy();
                    }

                    {
                      theitem = repeaterset.emptyset[k].clone(true,true);
                      if(fielditems.length<=0)
                      {
                        theitem.inject(repeaterset.resultli.getParent('li'),'before');
                      }
                      else
                        theitem.inject(fielditems.getLast(),'after');
                        
                      theitem = this.addFieldEvents(theitem,repeaterset.id);
                      
                      theitem.getElement('input.repeater-label').set('value',name);
                      this.setFieldValue(theitem,value);
                      set.items.push(theitem);

                      fielditems.push(theitem);
                    }
                    break;
                  }
                  else if(label = repeaterset.emptyset[k].getElement('label'))
                  {
                    if(label.get('html')==name)
                    {
                      if(i<=0)
                      {
                        theitem = repeaterset.items[0][k];
                        this.setFieldValue(theitem,value);
                      }
                      else
                      {
                        theitem = repeaterset.emptyset[k].clone(true,true);
                        if(fielditems.length<=0)
                        {
                          theitem.inject(repeaterset.resultli.getParent('li'),'before');
                        }
                        else
                          theitem.inject(fielditems.getLast(),'after');
                          
                        theitem = this.addFieldEvents(theitem,repeaterset.id);
                        this.setFieldValue(theitem,value);
                        set.items.push(theitem);
  
                        fielditems.push(theitem);
                      }
                      break;
                    }
                  }
                }
              }              
            }
            if(notempty)
              repeaterset.items.push(fielditems);
          }
        }
      },
      
      init : function()
      {
        set = {
          name : 'Start',
          items : new Array()
        };
        
        repeaterset = {
          id : 0,
          name : 'Repeater',
          emptyset : new Array(),
          items : new Array(),
          resultli : null
        };
        
        initialshow = -1;
        
        createElements = new Array();
        
        items = this.form.getElements('li');
        for(i=0; i<items.length; i++)
        {
          li = items[i];
          if(li.getElement('.fieldset'))
          {
            if(i>0) this.sets.push(set);
            
            set = {
              name : li.getElement('.fieldset').get('html'),
              items : new Array()
            };
          }
          else if(repeaterel = li.getElement('[class*="repeater"]'))
          {
            if(repeaterel.hasClass('result'))
            {
              createElements.push({
                where : li,
                what  : 'repeater',
                setid : this.sets.length
              });
            }
          }          

          set.items.push(li);
          
          if(li.getElement('.warning') && initialshow<0)
            initialshow = this.sets.length;
        }
        
        if(initialshow<0)
          initialshow = 0;

        if(i>0) this.sets.push(set);
        delete set;
        
        createElements.each(function(cel){
          if(cel.what == 'repeater')
          {
            li = cel.where;

            repeaterset = {
              id : this.repeatersets.length,
              name : li.getElement('label').get('html'),
              emptyset : new Array(),
              items : new Array(new Array()),
              resultli :  li.getElement('textarea')
            };
            
            if(repeaterset.resultli)
            {
              repeaterset.resultli.repeaterindex = repeaterset.id;
              repeaterset.resultli.setStyle('display','none');
              repeaterset.resultli.getParent('li').getElement('label').set('html','&nbsp;');
              
              tmp = new Element('a.add-new-repeater-item',{href:'javascript:void(0)',html:__translate('add_further_examples')});
              tmp.repeaterindex = repeaterset.id;
              tmp.addEvents({
                  'click' : function(e){                
                    pager.addRepeaterItems(this);
                  }.pass([pager = this],tmp)
                });
              tmp.inject(li,'top');

              li.getElement('textarea,input').repeaterindex = repeaterset.id;
  
              for(j=0;j<cel.where.getAllPrevious('li').length; j++)
              {
                if(repeaterel = cel.where.getAllPrevious('li')[j].getElement('[class*="repeater"]'))
                {
                  if(cel.where.getAllPrevious('li')[j].hasClass('repeaterresult'))
                    break;
                  else
                  {
                    repeaterel.getParent('li').addClass('repeateritem');
                    repeaterset.items[0].push(repeaterel.getParent('li'));
                    repeaterset.emptyset.push(this.addFieldEvents(repeaterel.getParent('li'),repeaterset.id));
                  }  
                }
              }
              repeaterset.emptyset.reverse();
              repeaterset.items[0].reverse();

              this.repeatersets.push(repeaterset);
              li.addClass('repeaterresult');
  
              this.getItemsFromString(this.repeatersets.getLast(),this.sets[cel.setid]);
            }
            
          }
        }.bind(this));


        
        if(this.sets.length>1)
        {
          if(!$('right'))
          {
            new Element('div#right').inject($('content'),'after');
            new Element('span.bg-bottom').inject($('right'));
          }

          if(!$('column2'))
          {
            new Element('div#column2').inject($('right'),'top');
          }
          
          this.navigation = new Element('div',{'class':'container cf formnavi'}).inject($('column2'));
          this.navigation = new Element('ul#NAVI-'+this.form.get('id')).inject(this.navigation);
          
          for(i=0; i<this.sets.length; i++)
          {
            li = new Element('li').inject(this.navigation);
            link = new Element('a',{href:'javascript:void(0)',rel:i,html:this.sets[i].name});
            link.addEvent('click',function(e){ pager.show(this.get('rel')) }.pass([pager = this],link))
            .inject(li);
            
            if(i>0)
            {
              
              li = new Element('li.next-step-li').inject(this.sets[i].items.pick(),'before');
              link = new Element('a.next-step',{href:'javascript:void(0)',rel:i,html:__translate('continue')});
              link.addEvent('click',function(e){ pager.show(this.get('rel')) }.pass([pager = this],link))
              .inject(li);
            
              this.sets[i-1].items.push(li);
            }
          }
          this.show(initialshow );
        }
        
        this.form.addEvent('submit',function(e){
          this.updateAllFields();
        }.bind(this));
        
        return this;
      }
    }
    
    return returnobj;
  }
  
  return false;
}

var __translate = function(word,inserts) {
  word = typeOf(word)=='string' ? word : null;
  inserts = typeOf(inserts)=='array' ? inserts : [];
  
  if(word!=null && I18N!=null)
  {
    clang = CUR_CLANG;
    clang = clang==null ? 0 : clang.toInt();

    if(I18N[''+clang]!=null && typeOf(I18N[''+clang][word])=='string')
    {
      word = I18N[''+clang][word];
      
      for(wordi=0; wordi<inserts.length; wordi++)
        word = word.replace("{"+wordi+"}",inserts[wordi]);
      
      word = word.replace(/{([^}]*)}/g,'');
      return word;
    }
  }
  return '[translate:'+word+']';
};


window.addEvent('domready',function(){
  $$('.container.form form').each(function(el,i){
    if(tmp = new multipageform(el))
    {
      el.pager = tmp.init();
      delete tmp;
    }
  });
});
