

var App = Class.create({

  // Inicializace
  //____________________________________________________________________________
  //////////////////////////////////////////////////////////////////////////////
  initialize : function()
  {
    var that = this;

    Event.observe(document, 'dom:loaded', function() {
      if($('mm_form')) {

        // Znacka
        that.mmZnackaOpt = $$('select#mm_znacka option');
        that.mmZnackaVisible = [];
        for(var i = 0; i < that.mmZnackaOpt.size(); i++) that.mmZnackaVisible[i] = false;
        
        // Mesto
        that.mmMestoOpt = $$('select#mm_mesto option');
        that.mmMestoOpt.each(function(opt) {
          if(opt.readAttribute('name') != 'label') {
            opt.remove();
          }
        });
        that.mmMestoVisible = [];
        for(var i = 0; i < that.mmMestoOpt.size(); i++) that.mmMestoVisible[i] = false;

        that.updateMMOptions();

        Event.observe($('mm_znacka'), 'change', function() {
          that.updateMMOptions();
        });

        Event.observe($('mm_mesto'), 'change', function() {
          $('mm_form').submit();
        });
      }

      if($('upv_form') || $('obj_form')) {

        if($('upv_form')) {
          that.znackaOpt = $$('select#upv_znacka option');
          that.modelOpt = $$('select#upv_model option');
          that.typOpt = $$('select#upv_typ option');
          
          that.znackaSelect = $('upv_znacka');
          that.modelSelect = $('upv_model');
          that.typSelect = $('upv_typ');
        }
        else {
          that.znackaOpt = $$('select#obj_znacka option');
          that.modelOpt = $$('select#obj_model option');
          that.typOpt = $$('select#obj_typ option');
          that.variantaOpt = $$('select#obj_varianta option');
          that.mistoOpt = $$('select#obj_misto option');
          
          that.znackaSelect = $('obj_znacka');
          that.modelSelect = $('obj_model');
          that.typSelect = $('obj_typ');
          that.variantaSelect = $('obj_varianta');
          that.mistoSelect = $('obj_misto');
        }

        // Znacka
        that.upvZnackaVisible = [];
        for(var i = 0; i < that.znackaOpt.size(); i++) that.upvZnackaVisible[i] = false;

        // Model
        that.modelOpt.each(function(opt) {
          if(opt.readAttribute('name') != 'label') {
            opt.remove();
          }
        });
        that.upvModelVisible = [];
        for(var i = 0; i < that.modelOpt.size(); i++) that.upvModelVisible[i] = false;
        
        // Typ
        that.typOpt.each(function(opt) {
          if(opt.readAttribute('name') != 'label') {
            opt.remove();
          }
        });
        that.upvTypVisible = [];
        for(var i = 0; i < that.typOpt.size(); i++) that.upvTypVisible[i] = false;
        
        // Varianta
        if($('obj_form')) {
          that.variantaOpt.each(function(opt) {
            if(opt.readAttribute('name') != 'label') {
              opt.remove();
            }
          });
          that.variantaVisible = [];
          for(var i = 0; i < that.variantaOpt.size(); i++) that.variantaVisible[i] = false;
        }
        
        // Montazni misto
        if($('obj_form')) {
          that.mistoOpt.each(function(opt) {
            if(opt.readAttribute('name') != 'label') {
              opt.remove();
            }
          });
          that.mistoVisible = [];
          for(var i = 0; i < that.mistoOpt.size(); i++) that.mistoVisible[i] = false;
        }

        that.updateUPVOptions();
        Event.observe(that.znackaSelect, 'change', function() {
          that.updateUPVOptions();
        });

        Event.observe(that.modelSelect, 'change', function() {
          that.updateUPVOptions();
        });

        if($('upv_form')) {
          Event.observe(that.typSelect, 'change', function() {
            $('upv_form').submit();
          });
        }
        else {
          Event.observe(that.typSelect, 'change', function() {
            that.updateUPVOptions();
          });
        }
      }

    });
  },

  //----------------------------------------------------------------------------
  updateMMOptions : function() {

      // Vyber znacky
      var znackaValue = null;
      var len = this.mmZnackaOpt.length;
      for (var i = 0; i < len; i++) {
        if(this.mmZnackaOpt[i].selected) {
          znackaValue = this.mmZnackaOpt[i].value;
        }
      }

      // Vyber mesta
      if(znackaValue != null) {
        var len = this.mmMestoOpt.length;

        var anyShowed = false;
        for (var i = 0; i < len; i++) {
          if(this.mmMestoOpt[i].readAttribute('name') != 'label') {
            if(this.mmMestoOpt[i].readAttribute('cars').split(',').indexOf(znackaValue) == -1 && znackaValue != null) {
              if(this.mmMestoVisible[i]) {
                this.mmMestoOpt[i].remove();
              }
              this.mmMestoVisible[i] = false;
              this.mmMestoOpt[i].selected = false;
            }
            else {
              anyShowed = true;
              $('mm_mesto').insert(this.mmMestoOpt[i]);
              this.mmMestoVisible[i] = true;
            }
          }
        }
      }
      if(anyShowed) {
        $('mm_mesto').enable();
      }
      else {
        $('mm_mesto').disable();
      }
    },

    //--------------------------------------------------------------------------
    updateUPVOptions : function() {

      // Vyber znacky
      var znackaValue = null;
      var znackaSelectedOpt = null;
      var len = this.znackaOpt.length;
      for (var i = 0; i < len; i++) {
        if(this.znackaOpt[i].selected) {
          znackaValue = this.znackaOpt[i].value;
          znackaSelectedOpt = this.znackaOpt[i];
        }
      }

      // Vyber modelu
      var modelValue = null;
      var len = this.modelOpt.size();
      var anyShowed = false;
      for (var i = 0; i < len; i++) {
        var znackaIndex = -1;
        if(this.modelOpt[i].readAttribute('cars') != null) {
          znackaIndex = this.modelOpt[i].readAttribute('cars').split(',').indexOf(znackaValue);
        }
        if((znackaIndex == -1 || znackaValue == null) && this.modelOpt[i].readAttribute('name') != 'label') {
          if(this.upvModelVisible[i]) {
            this.modelOpt[i].remove();
          }
          this.upvModelVisible[i] = false;
          this.modelOpt.selected = false;
        }
        else {
          if(this.modelOpt[i].readAttribute('name') != 'label') {
            anyShowed = true;
            this.modelSelect.insert(this.modelOpt[i]);
            this.upvModelVisible[i] = true;
            
            if(this.modelOpt[i].selected) {
              modelValue = this.modelOpt[i].value;
            }
          }
        }
      }
      if(anyShowed) {
        this.modelSelect.enable();
      }
      else {
        this.modelSelect.disable();
      }


      // Vyber typu
      var typValue = null;
      var typSelectedOpt = null;
      var len = this.typOpt.length;
      var anyShowed = false;

        for (var i = 0; i < len; i++) {
          if(this.typOpt[i].readAttribute('name') != 'label') {

            var znackaIndex = -1;
            var modelIndex = -1;
            if(this.typOpt[i].readAttribute('cars') != null) {
              znackaIndex = this.typOpt[i].readAttribute('cars').split(',').indexOf(znackaValue);
            }
            if(this.typOpt[i].readAttribute('models') != null) {
              modelIndex = this.typOpt[i].readAttribute('models').split(',').indexOf(modelValue);
            }

            if((modelIndex == -1 || modelValue == null) || (modelIndex == -1 || modelValue == null)) {
              if(this.upvTypVisible[i]) {
                this.typOpt[i].remove();
              }
              this.upvTypVisible[i] = false;
              this.typOpt[i].selected = false;
            }
            else {
              if(this.typOpt[i].readAttribute('name') != 'label') {
                anyShowed = true;
                this.typSelect.insert(this.typOpt[i]);
                this.upvTypVisible[i] = true;
                
                if(this.typOpt[i].selected) {
                  typValue = this.typOpt[i].value;
                  typSelectedOpt = this.typOpt[i];
                }
              }
            }
          }
        }
        if(anyShowed) {
          this.typSelect.enable();
        }
        else {
          this.typSelect.disable();
        }
        

      // Vyber varianty - pokud se jedna o objednavkovy formular
      if($('obj_form')) {

        var variantaSelectedOpt = null;
        var len = this.variantaOpt.length;
        var anyShowed = false;
        var varianty = [];
        
        if(typSelectedOpt != null) {
          varianty = typSelectedOpt.readAttribute('varianty').split(',');
        }

        for (var i = 0; i < len; i++) {
          if(this.variantaOpt[i].readAttribute('name') != 'label') {

            if(varianty.indexOf(this.variantaOpt[i].value) == -1) {
              if(this.variantaVisible[i]) {
                this.variantaOpt[i].remove();
              }
              this.variantaVisible[i] = false;
              this.variantaOpt[i].selected = false;
            }
            else {
              anyShowed = true;
              this.variantaSelect.insert(this.variantaOpt[i]);
              this.variantaVisible[i] = true;

              if(this.variantaOpt[i].selected) {
                variantaValue = this.variantaOpt[i].value;
              }
            }
          }
        }
        if(anyShowed) {
          this.variantaSelect.enable();
        }
        else {
          this.variantaSelect.disable();
        }
        
      }
      
      
      // Vyber montazniho mista - pokud se jedna o objednavkovy formular
      if($('obj_form')) {

        var mistoSelectedOpt = null;
        var len = this.mistoOpt.length;
        var anyShowed = false;
        var mista = [];

        if(znackaSelectedOpt != null) {
          if(znackaSelectedOpt.readAttribute('montazni_mista') != null) {
            mista = znackaSelectedOpt.readAttribute('montazni_mista').split(',');
          }
        }

        for (var i = 0; i < len; i++) {
          if(this.mistoOpt[i].readAttribute('name') != 'label') {

            if(mista.indexOf(this.mistoOpt[i].value) == -1) {
              if(this.mistoVisible[i]) {
                this.mistoOpt[i].remove();
              }
              this.mistoVisible[i] = false;
              this.mistoOpt[i].selected = false;
            }
            else {
              anyShowed = true;
              this.mistoSelect.insert(this.mistoOpt[i]);
              this.mistoVisible[i] = true;

              if(this.mistoOpt[i].selected) {
                mistoValue = this.mistoOpt[i].value;
              }
            }
          }
        }
        if(anyShowed) {
          this.mistoSelect.enable();
        }
        else {
          this.mistoSelect.disable();
        }

      }
      
      

    }

});

new App();

