// 20190719 add[nishino]
_.mixin({
  /**
   * クエリパラメータを取得する
   * Parse query string.
   * ?a=b&c=d to {a: b, c: d}
   *
   * Parse query string. use Underscore.js. ・ GitHub
   * https://gist.github.com/ryoppy/5780748
   * @param {String} (option) queryString
   * @return {Object} query params
   */
  getQueryParams: function (queryString) {
    var query = (queryString || window.location.search).substring(1); // delete ?
    if (!query) {
      return false;
    }

    return _
      .chain(query.split('&')).map(function (params) {
        var p = params.split('=');
        return [p[0], decodeURIComponent(p[1])];
      })
      .fromPairs()
      .value();
  }
});

//////////////// 定数定義 start//////////////////////

var EXTENTION = '.js';
var DATA_PREFIX = 'data_';
var DRIVER_DATA_PREFIX = 'data';
var PATH = {
        MAKERS: 'makers/maker_',
        COMM:  'comm/',
        MANUAL: '/manual_',
        MAKER: 'js/maker' + EXTENTION,
        DETAIL: 'js/detail' + EXTENTION,
        //driver.js分追加
        DRIVERS: 'drivers' + EXTENTION,
};

//////////////// 定数定義 end //////////////////////

//////////////// 関数定義 start//////////////////////

/**
 * scriptエレメントの生成
 */
var createScriptEl = function(path, index, onsuccess, onfail){
    // scriptエレメント生成
    var el = document.createElement('script');

    // リソースパス設定
    el.src = path;

    // リソース読込後の処理
    el.onload = function(){
        if(onsuccess) onsuccess(index);
    };

    // エラー後の処理
    el.onerror = function(){
        el.parentNode.removeChild(el);
        if(onfail) onfail(index);
    };

    return el;
};

/**
 * 対象のエレメントをheadタグに挿入（リソースの読込開始）
 */
var appendElement = function(element){
    document.head.appendChild(element);
};

/**
 * makerデータを取得する
 */
var getMakerFromMakerJs = function(makerCd){
    var targetMakerData = eval(DATA_PREFIX + makerCd);
    return targetMakerData;
};

/**
 * maker_[メーカーCD].jsからドライバーリスト取得
 */
var getDriverListFromMakerData = function(makerData){
    var drivers = makerData.drivers;

    for (var i = drivers.length - 1; i >= 0; i--) {
        if (drivers[i]['directory-nm'] === params.type) {
            // パラメータで指定されたポートのドライバー一覧を取得
            return drivers[i].lists;
        }
    }

    return null;
};

/**
 * manualデータを取得する
 */
var getManualFromManualJs = function(driverId){
    var targetManualData = eval(DATA_PREFIX + params.maker_cd + '_' + driverId);
    return targetManualData;
};

/**
 * 配列から空要素を削除
 */
var deleteEmptyArray = function(array){
    var formattedArray = array.filter(function(val) {
        if(val) return val;
    });
    return formattedArray;
};

//////////////// 関数定義 end //////////////////////
