(function(){
  var calculator = {
    init: function(){
      var t = this;
      
      this._buildMarksList();
      this._buildFilms();
      
      $('#js-marksList').change(function(e){
        t._buildModelsList( $('#js-marksList').val() );
      });
      
      $('#js-worksList').click(function(e){
        if($(e.target).is('input[type=radio][value=full]')){
          $('#js-pieceWorksContainer').hide();
          $('a.js-pieceWorksLink').removeClass('activeLink');
        }
        
        if($(e.target).is('input[type=radio][value=piece]')){
          $('#js-pieceWorksContainer').show();
          $('a.js-pieceWorksLink').addClass('activeLink');
        }
        
        if($(e.target).is('a.js-pieceWorksLink')){
          e.preventDefault();
          $('#js-worksList input[type=radio][value=piece]').click();
        }
        
        if($(e.target).is('input.js-countedWork')){
          if($(e.target).attr('checked')){
            $('#js-worksList input[name='+$(e.target).attr('name')+'-count][value=one]').attr('checked', true);
            $('#js-worksList .js-'+$(e.target).attr('name')+'CountBox').show();
          } else {
            $('#js-worksList .js-'+$(e.target).attr('name')+'CountBox').hide();
            $('#js-worksList input[name='+$(e.target).attr('name')+'-count]').attr('checked', false);
          }
        }
      });
      
      $('#js-calculate, #js-reCalculate').click(function(e){
        e.preventDefault();
        t._calculate();
      });
    },
    
    _calculate: function(){
      //Получение модели и класса
      var modelListVal = $('#js-modelsList').val().split(':::');
      var currentClass = modelListVal[0];
      var currentModel = modelListVal[1];
      
      //Получение плёнки
      var currentFilm = $('#js-filmTypeSwitch input[name=color]:checked').val();
      
      //Получение списка работ
      var worksList = [];
      var worksListDesc = '';
      var workPercent = 0;
      if($('#js-worksList input[name=okl][value=full]').attr('checked')){
        workPercent = 100;
        worksListDesc = 'Полная оклейка';
      } else {
        workPercent = 0;
        var workNamesArray = [];
        
        for (var i = 0; i < worksData.length; i++) {
          var workElem = worksData[i];
          if(
           (workElem.value && $('#js-worksList input[name='+workElem.name+'][value='+workElem.value+']').attr('checked')) ||
           (!workElem.value && $('#js-worksList input[name='+workElem.name+']').attr('checked'))
            )
          {
            workNamesArray.push(workElem.desc);
            workPercent += workElem.percent;
          }
        }
        
        if(!workNamesArray.length)workNamesArray.push('ничего не выбрано')
        
        worksListDesc = 'Частичная оклейка — ' + workNamesArray.join('; ') + '.';
      }
      
      $('#js-calculate').hide();
      $('#js-calculationResult').show();

      var filmElement = parseInt((new String(currentFilm)).replace(/id/, ''));
      if (!isNaN(filmElement)) {
        var result = Math.round( classCost[currentClass] * workPercent * filmsData[filmElement].priceNum / 100 ).toString();
        $('#js-calculationResult .js-filmName').html( $('#'+currentFilm).parent().next().text() );
        $('#js-calculationResult .cost').html( result );
      }
      else {
        var result = 0;
        $('#js-calculationResult .js-filmName').html( "Укажите тип пленки!" );
        $('#js-calculationResult .cost').html( "..." );
      }
      var reg = /(-?\d+)(\d{3})/;
      while(reg.test(result)) result = result.replace(reg, '$1&nbsp;$2');

      $('#js-calculationResult .js-carName').html($('#js-marksList').val() + ' ' + currentModel);

      $('#js-calculationResult .js-workName').html( worksListDesc );
    },
    
    _buildMarksList: function(){
      var s = [];
      
      for (var markName in carsData) {
        s.push('<option value="'+markName+'">'+markName+'</option>');
      }
      
      $('#js-marksList').html(s.join(''));
      
      this._buildModelsList( $('#js-marksList').val() );
    },
    
    _buildModelsList: function(currentMark){
      var s = [];
      var markModels = carsData[currentMark];
      
      for (var carClass in markModels) {
        var classModels = markModels[carClass];
        
        for (var i = 0; i < classModels.length; i++) {
          var modelName = classModels[i];
          s.push('<option value="'+carClass+':::'+modelName+'">'+modelName+'</option>');
        }
      }
      
      $('#js-modelsList').html(s.join(''));
    },

    _buildFilms: function() {
      var point = $("#js-filmTypeSwitch");
      // sort films bu category
      var filmsByCategory = {};
      for(var filmid=0; filmid<filmsData.length; filmid++) {
        var film = filmsData[filmid];
        film['id'] = 'id'+filmid;
        if (typeof(filmsByCategory['cat'+film.category]) == 'undefined')
          filmsByCategory['cat'+film.category] = [];
        filmsByCategory['cat'+film.category].push(film);
      }
      for(var catid=1; catid<filmsSections.length; catid++) {
        var category = filmsSections[catid];
        var cat_div = $("<DIV/>").addClass("film_category").append("<div class='cat_selector'><span class='pseudo'>"+category.name+"</span></div>");
        point.append(cat_div);
        var films = filmsByCategory['cat'+catid];
        var splitpoint = Math.ceil(films.length/2)-1;
        var dl_one = $("<DL/>").addClass("calc-color").appendTo(cat_div);
        var dl_two = $("<DL/>").addClass("calc-color").addClass("color-right").appendTo(cat_div);
        for(var i=0; i<films.length; i++) {
          var film = films[i];
          var data = $('<dt><input name="color" type="radio" value="'+film.id+'" id="'+film.id+'" /></dt>'+
                       '<dd><label for="'+film.id+'"><div><img src="/bitrix/templates/autosec1/images/calc/'+film.icon+'" alt="'+film.name+'" />'+film.name+'</div></label></dd>');
          if (i > splitpoint)
            dl_two.append(data);
          else
            dl_one.append(data);
        }
        cat_div.append('<div class="clear"></div>');
      }
      $(".cat_selector", point.get(0)).bind("click fakeclick", function(){
        var context = $(this).closest(".film_category");
        $(".calc-color", point.get(0)).hide();
        $(".calc-color", context.get(0)).show();
        $(".cat_selector", point.get(0)).removeClass("cat_selector_active");
        $(this).addClass("cat_selector_active");
        return false;
      });
      $(".cat_selector", point.get(0)).eq(0).trigger("fakeclick");
      $("input[name='color']", point.get(0)).eq(0).attr("checked", "checked");
    }
  };
  
  $(function(){
    $('#js-filmTypeSwitch input, #js-worksList input').each(function(){
      if($(this).attr('checked')) $(this).attr('checked', false);
    });
    
    $('#js-filmTypeSwitch input:first').attr('checked', true);
    $('#js-worksList input[name=okl][value=full]').attr('checked', true);
    
    
    calculator.init();
  });
  
  var classCost = {
    '1': 40000,
    '2': 50000,
    '3': 60000,
    '4': 70000,
    '5': 80000
    //'6': 69000,
    //'7': 79000,
    //'8': 89000
  };
  
  var worksData = [
    {
      name: 'bamp-front',
      value: '',
      percent: 12,
      desc: 'Бампер передний'
    },
    {
      name: 'bamp-back',
      value: '',
      percent: 12,
      desc: 'Бампер задний'
    },
    {
      name: 'capot',
      value: '',
      percent: 9,
      desc: 'Капот'
    },
    {
      name: 'kr',
      value: '',
      percent: 9,
      desc: 'Крышка багажника'
    },
    {
      name: 'top',
      value: '',
      percent: 9,
      desc: 'Крыша'
    },
    {
      name: 'kr-front-count',
      value: 'one',
      percent: 5,
      desc: 'Крыло переднее: одно'
    },
    {
      name: 'kr-front-count',
      value: 'two',
      percent: 10,
      desc: 'Крыло переднее: оба'
    },
    {
      name: 'back-bok-count',
      value: 'one',
      percent: 12,
      desc: 'Задняя боковина: одна'
    },
    {
      name: 'back-bok-count',
      value: 'two',
      percent: 24,
      desc: 'Задняя боковина: обе'
    },
    {
      name: 'porog-count',
      value: 'one',
      percent: 7,
      desc: 'Порог: один'
    },
    {
      name: 'porog-count',
      value: 'two',
      percent: 14,
      desc: 'Порог: оба'
    },
    {
      name: 'door-front-count',
      value: 'one',
      percent: 7,
      desc: 'Дверь передняя: одна'
    },
    {
      name: 'door-front-count',
      value: 'two',
      percent: 14,
      desc: 'Дверь передняя: обе'
    },
    {
      name: 'door-back-count',
      value: 'one',
      percent: 7,
      desc: 'Дверь задняя: одна'
    },
    {
      name: 'door-back-count',
      value: 'two',
      percent: 14,
      desc: 'Дверь задняя: обе'
    },
    {
      name: 'mirrors',
      value: '',
      percent: 6,
      desc: 'Зеркала'
    }
  ];

  var filmsSections = [
    {},
    { name: "Защитная" }, //1
    { name: "Глянцевая" }, //2
    { name: "Матовая" }, //3
    { name: "Карбон 3D" }, //4
    { name: "Кожа" }, //5
    { name: "Металлизированная" }, //6
    { name: "Винилография" } //7
  ];

  var filmsData = [
    { priceNum: 1.0, category: 1, name: "Прозрачная антигравийная KPMF", icon: "tr.jpg" },
    { priceNum: 2.5, category: 1, name: "Прозрачная бронировочная VentureShield (3М)", icon: "tr.jpg" },

    { priceNum: 1.0, category: 2, name: "Черная и белая KPMF", icon: "c2.jpg" },
    { priceNum: 1.0, category: 2, name: "Цветная KPMF", icon: "c3.jpg" },
    //{ priceNum: 1.3, category: 2, name: "Черная и белая Hexis", icon: "c2.jpg" },
    //{ priceNum: 1.3, category: 2, name: "Цветная Hexis", icon: "c4.jpg" },
    { priceNum: 1.9, category: 2, name: "Перламутр Hexis", icon: "c12.jpg" },
    { priceNum: 1.9, category: 2, name: "Хамелеон Hexis", icon: "cn_01.jpg" },
    { priceNum: 1.5, category: 2, name: "Перламутр белый/прозрачный KPMF", icon: "cn_02.jpg" },
    { priceNum: 1.5, category: 2, name: "С блестками белая/прозрачная KPMF", icon: "cn_03.jpg" },
    { priceNum: 1.5, category: 2, name: "Цветная 3M", icon: "c4.jpg" },

    { priceNum: 1.0, category: 3, name: "Черная и белая KPMF", icon: "c1.jpg" },
    //{ priceNum: 1.3, category: 3, name: "Черная и белая Hexis", icon: "c1.jpg" },
    { priceNum: 1.0, category: 3, name: "Прозрачная KPMF", icon: "tr.jpg" },
    { priceNum: 1.5, category: 3, name: "Цветная KPMF", icon: "c6.jpg" },
    //{ priceNum: 1.3, category: 3, name: "Цветная Hexis", icon: "c6.jpg" },
    { priceNum: 1.5, category: 3, name: "Черная и белая 3M", icon: "c1.jpg" },
    { priceNum: 1.5, category: 3, name: "Серая 3M", icon: "cn_04.jpg" },
    { priceNum: 1.5, category: 3, name: "Военно-зеленая 3M", icon: "cn_05.jpg" },
    { priceNum: 1.7, category: 3, name: "Черный и прозрачный тактильный мат Hexis", icon: "cn_06.jpg" },

    { priceNum: 1.9, category: 4, name: "Черный 3M", icon: "c7.jpg" },
    { priceNum: 2.5, category: 4, name: "Цветной 3M", icon: "c14.jpg" },
    { priceNum: 2.5, category: 4, name: "Серебрянный и золотой Hexis", icon: "c16.jpg" },
    { priceNum: 1.9, category: 4, name: "Черный Hexis", icon: "c8.jpg" },
    { priceNum: 2.5, category: 4, name: "Цветной Hexis", icon: "c15.jpg" },

    { priceNum: 1.7, category: 5, name: "Черная, белая, коричневая 3M", icon: "k3m.jpg" },
    { priceNum: 2.5, category: 5, name: "Крокодиловая Hexis", icon: "kHx.jpg" },

    { priceNum: 1.9, category: 6, name: "Шлифованный метал 3М", icon: "c11.jpg" },
    { priceNum: 3.3, category: 6, name: "Хром, золото 3М", icon: "c9.jpg" },

    { priceNum: 1.9, category: 7, name: "Винилография", icon: "v.jpg" }
  ];

  /*
  var filmsData = {
    'cb-gl': {priceNum: 1.2, category: 1 }, // Черная и белая, глянцевая (KPMF)
    'cv-mt': {priceNum: 1.2, category: 1 }, // Прозрачная антигравийная, прозрачные матовые (KPMF)
    
    'cv-gl': {priceNum: 1.4, category: 2 }, // Цветные глянцевые (KPMF)
    'cv-gl-he': {priceNum: 1.4, category: 2 }, // Цветные глянцевые (Hexis)
    'bl-mt': {priceNum: 1.4, category: 2 }, // Черная матовая (3М)
    'cb-mt': {priceNum: 1.4, category: 2 }, // Черная и белая, матовые (KPMF)
    
    '3d-he': {priceNum: 1.75, category: 3 }, // 3D Карбон New (Hexis) черный
    'koja': {priceNum: 1.75, category: 3 }, // Кожа (черная/белая) (3M)
    '3d-3m': {priceNum: 1.75, category: 3 }, // 3D Карбон (3M) черный
    
    'cv-mt-2': {priceNum: 1.8, category: 4 }, // Цветные матовые KPMF
    'cv-mt-he': {priceNum: 1.8, category: 4 }, // Цветные матовые (Hexis)
    'per-he': {priceNum: 1.8, category: 4 }, // Перламутр (Hexis)
    'ha-he': {priceNum: 1.8, category: 4 }, // Супермат (Hexis)   
    '3d-3m-c': {priceNum: 1.8, category: 4 }, // 3D Карбон (3M) цветной
    '3d-he-c': {priceNum: 1.8, category: 4 }, // 3D Карбон New (Hexis) цветной
    
    'hr-z': {priceNum: 3.3, category: 6 }, // Хром, золото (3M)
    
    'koja2': {priceNum: 2.5, category: 5 }, // Кожа (черная/белая) (Hexis)
    '3d-hr-z': {priceNum: 2.5, category: 5 } // 3D карбон хром-золото (Hexis)
  };
  */

  var carsData = {
    'Alfa Romeo':   {
      '1':     [
        'Mito',
        '146'
      ],
      '2':     [
        '156',
        '159'
      ]
    },
    'Aston Martin':   {
      '5':     [
        'все модели'
      ]
    },
    'Audi ':   {
      '1':     [
        'A1',
        'A3'
      ],
      '2':     [
        'A4',
        'S3',
        'TT',
        'A5',
        'RS3',
        'S4',
        'S5',
        'RS5'
      ],
      '3':     [
        'Q3',
        'A6',
        'Q5',
        'A7',
        'A8',
        'R8'
      ],
      '4':		[
        'Q7'
      ]
    },
    'Bentley': {
      '5':  [
        'все модели'
      ]
    },
    'BMW':   {
      '1':     [
        '1-series'
      ],
      '2':     [
        '3-series',
        'Z4'
      ],
      '3':     [
        'X1',
        'X3',
        '5-series',
        'Gran Turismo',
        '6-series',
        '7-series'
      ],
      '4':     [
        'X5',
        'X6'
      ]
    },
    'Cadillac':   {
      '3':     [
        'CTS'
      ],
      '4':     [
        'SRX'
      ],
      '5':     [
        'Escalade'
      ]
    },
    'Chevrolet':   {
      '1':     [
        'Spark',
        'Aveo',
        'Cruze'
      ],
      '2': [
        'Lacetti',
        'Epica'
      ],
      '3':     [
        'Niva',
        'Orlando',
        'Captiva'
      ],
      '5':     [
        'Tahoe'
      ]
    },
    'Chrysler':   {
      '3':     [
        '300С'
      ],
      '4':    [
        'Grand Voyager'
      ]
    },
    'Citroen':   {
      '1':     [
        'C1',
        'C3',
        'DS3'
      ],
      '2':     [
        'C4',
        'C3 Picasso',
        'C4 Picasso',
        'C5'
      ],
      '3':     [
        'Berlingo',
        'Grand C4 Picasso',
        'C-Crosser',
        'C6'
      ]
    },
    'Daewoo':   {
      '1':     [
        'Matiz'
      ],
      '2':     [
        'Nexia'
      ]
    },
    'Dodge':   {
      '2':     [
        'Caliber'
      ]
    },
    'Ferrari':   {
      '5':     [
        'Все'
      ]
    },
    'Fiat':   {
      '1':     [
        'Albea',
        'Panda',
        'Punto Actual'
      ],
      '2':     [
        'Linea'
      ],
      '3':     [
        'Doblo',
        'Panorama'
      ]
    },
    'Ford':   {
      '1':     [
        'Fiesta',
        'Fusion'
      ],
      '2':		[
        'Focus',
        'Mondeo'
      ],
      '3':  [
        'Grand C-Max',
        'Tourneo Connect',
        'Kuga'
      ],
      '4': [
        'Ranger',
        'Galaxy',
        'S-MAX'
      ],
      '5': [
        'Explorer'
      ]
    },
    'Honda':   {
      '1':     [
        'Jazz',
        'Civic'
      ],
      '2':     [
        'Accord'
      ],
      '3':     [
        'CR-V',
        'Crosstour'
      ],
      '5':     [
        'Pilot'
      ]
    },
    'Hummer':   {
      '4':     [
        'H3'
      ],
      '5':     [
        'H2'
      ]
    },
    'Hyundai':   {
      '1':     [
        'Accent',
        'i30',
        'Solaris'
      ],
      '2': [
        'Sonata',
        'Elantra'
      ],
      '3':     [
        'Santa Fe',
        'ix35',
        'Genesis',
        'Equus'
      ],
      '4':     [
        'ix55'
      ]
    },
    'Infiniti':   {
      '2':     [
        'G'
      ],
      '3':     [
        'EX',
        'M'
      ],
      '4':     [
        'FX'
      ],
      '5':		[
        'QX'
      ]
    },
    'Jaguar':   {
      '2': [
        'XK'
      ],
      '3': [
        'XF',
        'XJ'
      ]
    },
    'Jeep':   {
      '3':     [
        'Compass',
        'Wrangler 2D',
        'Liberty'
      ],
      '4': [
        'Cherokee',
        'Wrangler 4D'
      ],
      '5': [
        'Grand Cherokee'
      ]
    },
    'Kia':   {
      '1':     [
        'Picanto',
        'Rio',
        'Ceed',
        'Pro_ceed'
      ],
      '2':     [
        'Cerato',
        'Soul'
      ],
      '3':     [
        'Sportage',
        'Carens',
        'Venga',
        'Sorento'
      ],
      '4':     [
        'Mohave'
      ]
    },
    'Lamborghini': {
      '5': [
        'все модели'
      ]
    },
    'Land Rover':   {
      '3':     [
        'Freelander',
        'Range Rover Evoque'
      ],
      '4':     [
        'Discоvery',
        'Range Rover'
      ],
      '5':     [
        'Defender'
      ]
    },
    'Lexus':   {
      '2':     [
        'CT',
        'IS'
      ],
      '3':     [
        'ES',
        'GS',
        'RX',
        'LS'
      ],
      '4':     [
        'LX',
        'GX'
      ]
    },
    'Maserati': {
      '5': [
        'все модели'
      ]
    },
    'Mazda':   {
      '1':     [
        '2',
        '3'
      ],
      '2':     [
        '6',
        'MX-5',
        'RX-7',
        'RX-8'
      ],
      '3':     [
        '5',
        'CX-5'
      ],
      '4':     [
        'CX-7'
      ],
      '5':     [
        'CX-9',
        'BT-50'
      ]
    },
    'Mercedes-Benz':   {
      '1':     [
        'A-class',
        'B-class'
      ],
      '2':     [
        'C-class',
        'E-class',
        'SLK-class'
      ],
      '3':     [
        'GLK-class',
        'R-class',
        'CLS-class',
        'S-class',
        'SL-class',
        'CL-class',
      ],
      '4':     [
        'M-class',
        'GL-class'
      ],
      '5':     [
        'V-class',
        'G-class'
      ]
    },
    'MINI':   {
      '1':     [
        'Cooper',
        'One',
        'JCW'
      ],
      '2':     [
        'Countryman'
      ]
    },
    'Misubishi':   {
      '1':     [
        'i-MiEV'
      ],
      '2':     [
        'Lancer'
      ],
      '3':     [
        'ASX'
      ],
      '4':     [
        'Outlander XL'
      ],
      '5':     [
        'L200',
        'Pajero'
      ]
    },
    'Nissan':   {
      '2':     [
        'Almera',
        'Note',
        'Tiida',
        'Juke'
      ],
      '3':     [
        'Teana',
        'X-Trail',
        'Qashqai',
        'GT-R'
      ],
      '4':     [
        'Qashqai+2',
        'Murano'
      ],
      '5':     [
        'Pathfinder',
        'Patrol',
        'NP300',
        'Navara'
      ]
    },
    'Opel':   {
      '1':     [
        'Corsa',
        'Astra'
      ],
      '2':     [
        'Insignia'
      ],
      '3':     [
        'Antara',
        'Zafira',
        'Meriva',
      ]
    },
    'Peugeot':   {
      '1':     [
        '107',
        '207'
      ],
      '2':     [
        '308',
        'RCZ'
      ],
      '3':     [
        '3008',
        '4007',
        'Partner',
      ]
    },
    'Porsche':   {
      '2':     [
        'Boxster',
        'Cayman'
      ],
      '3':     [
        'Panamera',
        '911'
      ],
      '4':     [
        'Cayenne'
      ]
    },
    'Renault':   {
      '1':     [
        'Clio',
        'Logan',
        'Symbol',
        'Sandero'
      ],
      '2':     [
        'Sandero Stepway',
        'Laguna',
        'Megane',
        'Fluence'
      ],
      '3':     [
        'Koleos',
        'Latitude',
        'Scenic',
        'Duster'
      ],
      '4':     [
        'Kangoo'
      ],
      '5': [
        'Traffic'
      ]
    },
    'Saab':   {
      '2':     [
        '9-3'
      ],
      '3':     [
        '9-5'
      ]
    },
    'SEAT': {
      '1': [
        'Ibiza'
      ],
      '2': [
        'Leon'
      ],
      '3': [
        'Altea Freetrack'
      ]
    },
    'Skoda':   {
      '1':     [
        'Fabia',
      ],
      '2':     [
        'Octavia'
      ],
      '3':     [
        'Superb',
        'Roomster',
        'Yeti'
      ]
    },
    'Ssangyong':   {
      '3':     [
        'Actyon'
      ],
      '4':     [
        'Kyron',
        'Rexton'
      ],
      '5': [
        'Actyon Sports'
      ]
    },
    'Subaru':   {
      '2':     [
        'Impreza',
        'Legacy',
      ],
      '3':     [
        'Outback',
        'Forester'
      ],
      '4':     [
        'Tribeca'
      ]
    },
    'Suzuki':   {
      '1':     [
        'Swift',
        'Splash'
      ],
      '2':     [
        'SX4',
        'Jimny',
        'Kizashi'
      ],
      '3':     [
        'Grand Vitara'
      ]
    },
    'Toyota':   {
      '1':     [
        'Auris',
        'Corolla'
      ],
      '2':     [
        'Verso',
        'Avensis',
        'Prius'
      ],
      '3':     [
        'Camry',
        'RAV4'
      ],
      '4':     [
        'Highlander',
        'Land Cruiser 200',
        'Land Cruiser Prado'
      ],
      '5':     [
        'Hilux',
        'Alphard'
      ]
    },
    'Volvo':   {
      '2':     [
        'S40',
        'V50',
        'C30',
        'S60',
        'V60',
        'C70'
      ],
      '3':     [
        'S80',
        'XC70'
      ],
      '4':     [
        'XC60',
        'XC90'
      ]
    },
    'Volkswagen':   {
      '1':     [
        'Polo'
      ],
      '2':     [
        'Golf',
        'CrossPolo',
        'Jeta',
        'Scirocco',
        'Passat'
      ],
      '3':     [
        'Caddy',
        'Touran',
        'Tiguan',
        'Phaeton'
      ],
      '4':     [
        'Touareg'
      ],
      '5':     [
        'Amarok'
      ]
    }
  };
})();

