/**
 * Класс для обработки связанных селектов
 * пока поддерживает связь 1-* селектов между собой безо всяких
 * наворотов.
 *
 * @param {string} primaryId id-к "первичного" селекта
 */
function  ConnectedSelect(primaryId){

    var _this  =  this;

    /**
     * Jquery объект для работы с первичным селектом
     *
     * @type {Jquery}
     */
    this.primary  =  $('#'+primaryId);

    /**
     * Значение ведущего селекта
     *
     * @type  {String}
     */
    this.primaryValue  =  '';

    /**
     * Объекты для работы с вторичными селектами
     *
     * @type {Object}
     */
    this.secondaries  =  {};

    /**
     * Функции для получения данных для вторичных селектов
     * формат {'firstId':function(example)} где 'example' значение первичного селекта
     *
     * @type {object}
     */
    this.secondariesData  =  {};

     this.init  =  (function(){

        this.setSecondariesState();

        $(this.primary).change(function(){
            _this.setSecondariesState();
        });
     });


    /**
     * Добавляем вторичный селект
     *
     * @return  ConnectedSelect
     */
    this.addSecondary  =  (function(id, data, emptyText){

        this.secondaries[id]  =  new Select(id, {}, emptyText);
        this.secondariesData[id]  =  data;

        return  this;
    });


    /**
     * Обновляем значение 1-го вторичного селекта
     */
    this.setSecondaryState  =  (function(secondaryId, data){

        if(data){
            this.secondaries[secondaryId].updateOptions(data);
        }
        else{
            this.secondaries[secondaryId].disable();
        }
    });


    /**
     * Обновляем значения всех вторичных селектов
     */
    this.setSecondariesState  =  (function(){

        this.primaryValue  =  $(this.primary).attr('value');

        for(var id in this.secondaries){
			this.secondariesData[id](this.primaryValue, id, _this);
        }
    });
}
