/*@cc_on _d=document;eval('var document=_d')@*/
//<![CDATA[
$(function() {
  var col_grp1 = 0;
  var col_grp2 = 1;
  var col_grp3 = 2;
  var col_grp4 = 3;
  var col_color = 4;
  var col_size = 5;
  var col_type = 6;
  var col_pdf = 7;
  var col_chromat_gr = 8;
  var col_chromat_sub = 9;
  var col_chromat_x = 10;
  var col_chromat_y = 11;
  var col_pbfree = 12;
  var col_newprod = 13;
  var col_CIE = 14;
  var col_underdev = 15;
  var col_intensity = 16;
  var col_flux = 17;
  var col_ra = 18;
  var col_vftyp = 19;
  var col_vfmax = 20;
  var col_directivity = 21;
  var col_if = 22;
  var col_T = 23;
  var col_grp1_j = 24;
  var col_chromat_x_s = 25;
  var col_chromat_y_s = 26;
  var col_intensity_s = 27;
  var col_flux_s = 28;
  var col_ra_s = 29;
  var col_vftyp_s = 30;
  var col_vfmax_s = 31;
  var col_directivity_s = 32;
  var col_if_s = 33;
  var col_grp2_j = 34;
  var col_odr = 35;
  var col_img = 36;
  var col_pdf_j = 37;
  var col_arng = 38;
  var col_MAX = 39;
  var url_search = '../../api/data.php';

  var retrieveGetQs = function() {
    var qsParm = new Array();
    var query = window.location.search.substring(1);
    var parms = query.split('&');
    for (var i = 0; i < parms.length; i++) {
      var pos = parms[i].indexOf('=');
      if (pos > 0) {
        var key = parms[i].substring(0, pos);
        var val = parms[i].substring(pos + 1);
        qsParm[key] = val; } }
    return qsParm;
  }

  $('#sel_color').dropdownchecklist({width: 160});
  $('#sel_application').dropdownchecklist({width: 160});
  $('#sel_wattage').dropdownchecklist({width: 160});
  $('#search2').click(function(me) {
    var cond_ptype = function() {
      var ta = new Array();
      $('input:checkbox[name=chktype]').each(function() {
        ta.push($(this).val());
      });
      return cond_in(
        ta,
        function(item) {
          return $('input:checkbox[name=chktype][value=' + item + ']').attr('checked');
        },
        function(item) {
          return item;
        },
        'grp2');
    }
    var cond_color = function() {
      var arr = $('#sel_color').val();
      return cond_in (
        arr,
        function(item) {
          return true;
        },
        function(item) {
          return item;
        },
        'color');
    }
    var cond_application = function() {
      var arr = $('#sel_application').val();
      return cond_in(
        arr, 
        function(item) {
          return true;
        },
        function(item) {
          return item;
        },
        'grp1');
    }
    var cond_wattage = function() {
      var cond = "";
      var arr = $('#sel_wattage').val();
      if (arr == null) {
        return "";
      }
      $.each(arr, function() {
        if (this == "1") {
          cond = concat_cond("or", "vftyp * [if] < 300", cond);
        } else if (this == "2") {
          cond = concat_cond("or", "vftyp * [if] >= 300 and vftyp * [if] <= 1000", cond);
        } else if (this == "3") {
          cond = concat_cond("or", "vftyp * [if] > 1000", cond);
        }
      });
      return cond;
    }
    var cond_ra = function() {
      var cond = "";
      if ($('input:checkbox[name=chkra]').attr('checked')) {
        cond = "ra > 75 and ra != ''";
      }
      return cond;
    }
    var cond_type = function() {
      var cond = "";
      var ctext = $('#cond').val();
      if (ctext != '') {
        var carr = ctext.split(' ');
        for (var i = 0; i < carr.length; i++) {
          if (carr[i].length > 0) {
            cond = concat_cond("or", "type like '%" + carr[i] + "%'", cond);
          }
        }
      }
      return cond;
    }
    var cond_new = function() {
      var cond = "";
      if ($('input:checkbox[name=chknew]').attr('checked')) {
        cond = "newprod = '1'";
      }
      return cond;
    }
    var cond = "";
    cond = concat_cond("and", cond_ptype(), cond);
    cond = concat_cond("and", cond_color(), cond);
    cond = concat_cond("and", cond_application(), cond);
    cond = concat_cond("and", cond_wattage(), cond);
    cond = concat_cond("and", cond_ra(), cond);
    cond = concat_cond("and", cond_type(), cond);
    cond = concat_cond("and", cond_new(), cond);
    search('#example', url_search, encodeURI(cond), me);
  });
  $('#cond').keydown(function(e) {
    if ($(this).val() != "" && e.keyCode == 13) {
      $('#search2').click();
    }
  });
  $('#clear2').click(function() {
    if (confirm('検索条件と検索結果がクリアされます。よろしいですか?')) {
      $('#cond').val('');
      $('input:checkbox[name=chkra]').attr('checked', false);
      $('input:checkbox[name=chktype]').attr('checked', false);
      $('input:checkbox[name=chknew]').attr('checked', false);
      clearDropdownChecklist('#sel_color', {width: 160});
      clearDropdownChecklist('#sel_application', {width: 160});
      clearDropdownChecklist('#sel_wattage', {width: 160});
      $('#example').empty();
      $('#example2').show();
    }
  });

  var clearDropdownChecklist = function(selector, opt) {
    $(selector).dropdownchecklist('destroy');
    $(selector).val(['']);
    $(selector).dropdownchecklist(opt);
  }

  var cond_in = function(arr, fcond, fval, name) {
    if (arr == null) {
      return "";
    }
    var cond = "";
    $.each(arr, function() {
      if (fcond(this)) {
        if (cond.length > 0) {
          cond += ",";
        } else {
          cond += name + " in (";
        }
        cond += "'" + fval(this) + "'";
      }
    });
    if (cond.length > 0) {
      cond += ")";
    }
    return cond;
  }

  var concat_cond = function(conj, src, dest) {
    if (src.length > 0) {
      if (dest.length > 0) {
        dest += " " + conj + " ";
      }
      dest += "(" + src + ")";
    }
    return dest;
  }

  var getGroupRowCount = function(arr) {
    if (arr.length == 0) {
      return null;
    }
    var ylen = arr.length;
    var xlen = arr[0].length;
    var ret = new Array(ylen);
    $.each(arr, function(i) {
      ret[i] = new Array(xlen);
      $.each(arr[i], function(j) {
        var c = 1;
        for (var k = i - 1; k >= 0; k--) {
          if (j == col_type || j == col_pdf) {
            if (arr[i][j] == arr[k][j] && arr[i][col_grp1] == arr[k][col_grp1]) {
              c++;
            } else {
              break;
            }
          } else {
            if (arr[i][j] == arr[k][j]) {
              c++;
            } else {
              break;
            }
          }
        }
        for (var n = 0; n < c - 1; n++) {
          ret[i - n][j] = 0;
        }
        ret[i - c + 1][j] = c;
      });
    });
    return ret;
  }

  var getColCount = function(ptype) {
    return 16;
  }

  var getCompareId = function(id, ptype) {
    return 'compare_' + id + '_' + ptype.replace(/ /g, '');
  }

  var getSortId = function(id, col) {
    return id + '_sc_' + col;
  }

  var getSortThId = function(id, col) {
    return id + '_stc_' + col;
  }

  var getColFromSortId = function(sortid) {
    return sortid.replace(/.*_/g, '');
  }

  var getSortInfo = function(id) {
    var sinfo = new Array();
    $("[id^='" + getSortId(id, '') + "']").each (function() {
      var sc = ['sortable', 'sortdesc', 'sortasc'];
      for (var i = 0; i < sc.length; i++) {
        if ($(this).hasClass(sc[i])) {
          sinfo[$(this).attr('id')] = sc[i];
          break;
        }
      }
    });
    return sinfo;
  }

  var sortArray = function(data, sorter) {
    for (var i = 0; i < data.length - 1; i++) {
      for (var j = data.length - 1; j > i; j--) {
        if (sorter(data[j - 1], data[j]) > 0) {
          var tmp = data[j];
          data[j] = data[j - 1];
          data[j - 1] = tmp;
        }
      }
    }
    return data;
  }

  var sort = function(data, col, asc) {
    var sorter = function(x, y, car, cdr) {
      if (x[car['col']] == y[car['col']]) {
        return cdr.length > 0 ? arguments.callee(x, y, cdr[0], cdr.shift()) : 0;
      } else {
        var xx = x[car['col']];
        var yy = y[car['col']];
        return (xx > yy ? 1 : -1) * (car['asc'] ? 1 : -1);
      }
    }
    if (col == col_type) {
      return sortArray(data, function(x, y) {return sorter(x, y, {'col':col_grp3, 'asc': asc}, [{'col':col_type, 'asc':asc}, {'col':col_odr, 'asc':true}]);});
    } else {
      return sortArray(data, function(x, y) {return sorter(x, y, {'col':col, 'asc': asc}, []);});
    }
  }

  var dispTable = function(res, target, id, ptype, setFunction) {
    if (res == null || res['aaData'].length == 0) {
      return false;
    }

    if ($('#' + id).size() == 0) {
      $('<div id="' + id + '"></div>').appendTo(target);
    } else {
      $('#' + id).empty();
    }

    var table = '';
    table += '<p>' + ptype + '</p>';
    table += "<div class='compbox'><a href='#' class='cbtn' id='" + getCompareId(id, ptype) + "'>製品比較</a> チェックボックスで選択した製品のみ表示</div>";
    table += '<table border="0" cellspacing="0" cellpadding="0">';
    table += getHeader(id, ptype);
    table += getContent(res, ptype);
    table += getFooter(res, ptype);
    table += "</table>";
    $('#' + id).html(table);
    if (setFunction != null) {
      setFunction();
    } else {
      $("[id^='" + getSortId(id, '') + "']").addClass('sortable');
    }

    $("[id^='" + getSortId(id, '') + "']").click(function() {
      var sortid = $(this).attr('id');
      var clicksort = function(res, col ,asc) {
        var sinfo = getSortInfo(id);
        $("[id^='" + getSortId(id, '') + "']").each (function() {
          if ($(this).attr('id') == sortid) {
            sinfo[sortid] = (sinfo[sortid] == 'sortdesc') ? 'sortasc' : 'sortdesc';
          }
        });
        res['aaData'] = sort(res['aaData'], col, asc);
        dispTable(res, target, id, ptype, function() {
          for (var sid in sinfo) {
            $('#' + sid).addClass(sinfo[sid]);
          }
          $('.cursort').removeClass('cursort');
          $('#' + getSortThId(id, getColFromSortId(sortid))).addClass('cursort');
        });
        return false;
      }
      if ($(this).hasClass('sortable') || $(this).hasClass('sortasc')) {
        clicksort(res, getColFromSortId($(this).attr('id')), false);
      } else if ($(this).hasClass('sortdesc')) {
        clicksort(res, getColFromSortId($(this).attr('id')), true);
      }
      return false;
    });

    $('#' + getCompareId(id, ptype)).click(function(me) {
      var chkdata = new Array();
      $.each($('.cmpsch'), function() {
        if ($(this).attr('checked')) {
          chkdata.push($(this).val());
        }
      });
      if (chkdata.length == 0) {
        alert('比較したい製品を1つ以上チェックボックスで選択してください。');
      }
      var sinfo = getSortInfo(id);
      dispTable(selectRes(res, col_type, chkdata), target, id, ptype, function() {
        for (var sortid in sinfo) {
          $('#' + sortid).addClass(sinfo[sortid]);
        }
      });
      return false;
    });

    $('.showlistled').click(function() {
      $('#list_led').css('left', $(this).position().left + $(this).width());
      $('#list_led').css('top', $(this).position().top + $(this).height());
      $('#list_led').show();
      return false;
    });

    $('#list_led_close').click(function() {
      $('#list_led').hide();
      return false;
    });
    tb_init('a.thickbox');
  }

  var getSortTh = function(id, col, width, rowspan, colspan, title) {
    var th = "<th id ='" + getSortThId(id, col) + "' ";
    if (rowspan > 1) {
      th += "rowspan='" + rowspan + "' ";
    }
    if (colspan > 1) {
      th += "colspan='" + colspan + "' ";
    }
    th += "style='width: " + width + "px;'><a class='sortbox' id='" + getSortId(id, col) + "' href='#'></a><div class='sorttitle' >" + title + "</div></th>";
    return th;
  }

  var getHeader = function(id, ptype) {
    var thead = "<thead>";
    thead += "<tr>";
    thead += "<th rowspan='2' style='width: 20px;'></th>";
    thead += getSortTh(id, col_type, 120, 2, 2, '品名');
    thead += getSortTh(id, col_size, 80, 2, 1, "製品寸法<br/><span class='unit'>LxWxH<br/>(mm)</span>");
    thead += "<th colspan='4'>色度座標<br/><span class='unit'>Typ(x,y)</span></th>";
    thead += getSortTh(id, col_intensity_s, 44, 2, 1, "光度<br/><span class='unit'>Typ(mcd)</span>");
    thead += getSortTh(id, col_flux_s, 44, 2, 1, "光束<br/><span class='unit'>Typ(lm)</span>");
    thead += getSortTh(id, col_ra_s, 44, 2, 1, "Ra<br/><span class='unit'>Min</span>");
    thead += "<th colspan='2'>順電圧<br/><span class='unit'>V<sub>F</sub>(V)</span></th>";
    thead += getSortTh(id, col_directivity_s, 44, 2, 1, "指向特性<br/><span class='unit'>2&theta; &frac12;<br/>(degree)</span>");
    thead += getSortTh(id, col_if_s, 44, 2, 1, "I<sub>F</sub><br/><span class='unit'>(mA)</span>");
    thead += "<th rowspan='2' style='width: 24px;'>仕様書</th>";
    thead += "</tr>";
    thead += "<tr>";
    thead += getSortTh(id, col_color, 32, 1, 2, "");
    thead += getSortTh(id, col_chromat_x_s, 44, 1, 1, "<span class='unit'>x</span>");
    thead += getSortTh(id, col_chromat_y_s, 44, 1, 1, "<span class='unit'>y</span>");
    thead += getSortTh(id, col_vftyp_s, 44, 1, 1, "<span class='unit'>Typ</span>");
    thead += getSortTh(id, col_vfmax_s, 44, 1, 1, "<span class='unit'>Max</span>");
    thead += "</tr>";
    thead += "</thead>";
    return thead;
  }

  var setSubRow = function(prev, curr, cls, force) {
    if (prev != curr || force) {
      tbody += "<tr class='" + cls + "'>";
      tbody += "<td colspan='" + getColCount(ptype) + "'>" + curr + "</td>";
      tbody += "</tr>";
    }
    return curr;
  }

  var getRspRow = function(item, prspan, col) {
    var arng = item[col_arng];
    if (arng == '1' && (col == col_chromat_x || col == col_chromat_y || col == col_intensity || col == col_flux || col == col_directivity) ||
        arng == '2' && (col == col_directivity || col == col_if) ||
        arng == '3' && col == col_directivity ||
        arng == '4' && col == col_directivity)
    {
      if (prspan > 0) {
        return "<td class='number' rowspan='"+prspan+"'>" + item[col] + "</td>";
      }
    } else {
      return "<td class='number'>" + item[col] + "</td>";
    }
    return "";
  }
      
  var getPdf = function(pdf) {
    if (pdf != '') {
      return "<a class='nobb' href='../../specification/jp/product/led/" + pdf + ".pdf' target='_blank'><img src='../../images/product/led/icon/icon_pdf.gif' alt='PDF Download' title='PDF Download' /></a>";
    } else {
      return '';
    }
  };

  var getIcons = function(item) {
    var s = "";
    var image = function(x, n, m) {
      if (x == 1) {
        return "<a href='#' class='nobb'><img class='showlistled' src='../../images/product/led/icon/" + n + ".gif' width='13' height='12' alt='"+m+"' title='"+m+"'/></a>";
      } else {
        return '';
      }
    }
    s += image(item[col_underdev], 'icon_under', '開発中');
    s += image(item[col_newprod], 'icon_new', '新製品');
    s += image(item[col_CIE], 'icon_changed', 'Changed');
    return s;
  }

  var fname2cname = function(fname) {
    var cname = '';
    switch (fname) {
    case 'white':
      cname = 'White';
      break;
    case 'wwhite':
      cname = 'Warm White';
      break;
    case 'blue':
      cname = 'Blue';
      break;
    case 'bgreen':
      cname = 'Bluish Green';
      break;
    case 'green':
      cname = 'Green';
      break;
    case 'amber':
      cname = 'Amber';
      break;
    case 'red':
      cname = 'Red';
      break;
    case 'pink':
      cname = 'Pink';
      break;
    case 'fcolor':
      cname = 'Full Color';
      break;
    }
    return cname;
  }

  var getContent = function(res, ptype) {
    var tbody = "<tbody>";
    var prev_item = new Array(col_MAX);
    var grc = getGroupRowCount(res["aaData"]);
    $.each(res["aaData"], function(i, item) {
      //prev_item[col_grp1] = setSubRow(prev_item[col_grp1], item[col_grp1], 'tr0', false);

      var tr = "<tr class='tr'>";
      var rspan = grc[i][col_type];
      var prspan = (item[col_pdf] != '') ? grc[i][col_pdf] : rspan;
      if (rspan > 0) {
        tr += "<td rowspan='" + rspan + "'><input type='checkbox' class='cmpsch' value='" + item[col_type] + "' /></td>";
        if (item[col_img] != '') {
            tr += "<td rowspan='" + rspan + "'><a class='thickbox nobb' href='../../images/product/led/photo/" + item[col_img] + ".jpg'><img src='../../images/product/led/thumbnail/" + item[col_img] + "_t.jpg' width='35' height='23' /></a></td>";
        } else {
            tr += "<td rowspan='" + rspan + "'></td>";
        }
        tr += "<td class='nowrap ptype' rowspan='" + rspan + "'>" + item[col_type] + getIcons(item);
        tr += "</td>";
        tr += "<td rowspan='" + rspan + "'>" + item[col_size] + "</td>";
      }

      if (item[col_chromat_sub] == "") {
        tr += "<td colspan='2'><a class='nobb' href='led_color.html' target='_blank'><img src ='../../images/product/led/color/" + item[col_chromat_gr] + ".png' width='10' height='10' alt='" + fname2cname(item[col_chromat_gr]) + "' title='" + fname2cname(item[col_chromat_gr]) + "' /></a></td>";
      } else { 
        if (prspan > 0) {
          tr += "<td colspan='1' rowspan='" + prspan + "'><img src ='../../images/product/led/color/" + item[col_chromat_gr] + ".png' width='10' height='10' alt='" + fname2cname(item[col_chromat_gr]) + "'/></td>";
        }
        tr += "<td>" + item[col_chromat_sub] + "</td>";
      }

      tr += getRspRow(item, prspan, col_chromat_x);
      tr += getRspRow(item, prspan, col_chromat_y);
      tr += getRspRow(item, prspan, col_intensity);
      tr += getRspRow(item, prspan, col_flux);
      tr += "<td class='number'>" + item[col_ra] + "</td>";
      tr += "<td class='number'>" + item[col_vftyp] + "</td>";
      tr += "<td class='number'>" + item[col_vfmax] + "</td>"; 
      tr += getRspRow(item, prspan, col_directivity);
      tr += getRspRow(item, prspan, col_if);

      if (prspan > 0) {
        tr += "<td rowspan='" + prspan + "'>";
        tr += getPdf(item[col_pdf_j]);
        tr += "</td>";
      }
      tr += "</tr>";
      tbody += tr;
    });
    tbody += "</tbody>";
    return tbody;
  }

  var getFooter = function(res, ptype) {
    return "<tfoot><tr><td colspan='" + getColCount(ptype) + "'>" + getCountAAData(res["aaData"]) + " items totally</td></tr></tfoot>";
  }

  var getCountAAData = function(data) {
    var count = 0;
    var prev_grp1 = '';
    var prev_type = '';
    for (var i = 0; i < data.length; i++) {
      if (data[i][col_grp1] != prev_grp1 || data[i][col_type] != prev_type) {
        count++;
      }
      prev_grp1 = data[i][col_grp1];
      prev_type = data[i][col_type];
    }
    return count;
  }

  var selectRes = function(res, col, arr) {
    var data = new Array();
    data['aaData'] = new Array();
    for (var j = 0; j < res['aaData'].length; j++) {
      var item = res['aaData'][j];
      for (var i = 0; i < arr.length; i++) {
        if (item[col] == arr[i]) {
          data['aaData'].push(item);
        }
      }
    }
    return data;
  }

  var getListLed2 = function() {
    return "<div id='list_led2'><img src='../../images/product/led/icon/icon_under.gif' width='13' height='12' border='0' alt='開発中' title='開発中' />=開発中<br/><img src='../../images/product/led/icon/icon_new.gif' width='13' height='12' border='0' alt='新製品' title='新製品' />=新製品<br/><img src='../../images/product/led/icon/icon_changed.gif' alt='Change' title='Change' width='13' height='12'>=2009年1月1日より、従来の光度表記値を現在の国際標準校正値に整合させた値へと変更(CIE127:2007に準拠)</div>";
  }

  var disp = function(res, target) {
    $(target).empty();
    if (res == null || res['aaData'].length == 0) {
      $('#example2').show();
      alert('検索条件に一致する製品はありませんでした。\n製品ライブラリページに旧製品情報は記載しております。');
    } else {
      $('#example2').hide();
      dispTable(res, target, "example_0", ' ');
      //$('input:checkbox[name=chktype]').each(function(i) {
      //  var ptype = $(this).val();
      //  dispTable(selectRes(res, col_grp2, [ptype]), target, "example_" + i, ptype);
      //});
      $(getListLed2()).appendTo(target);
      $('<p>*製品写真は、実物とは多少異なる場合がございます。<br/> *色度座標は、CIE1931色度図に基づくものとします。<br/> *本製品ページ掲載のTyp.値は代表値を示すものであり、保証値ではございませんのでご注意ください。</p><p><br/></p>').appendTo(target);
    }
    return false;
  }

  var search = function(target, url, filter, me) {
    $('#wait').css("left", me.pageX);
    $('#wait').css("top", me.pageY);
    $('#wait').show();
    $.ajax({
      type: "get",
      dataType: "json",
      data: {
        "filter": filter
      },
      cache: false,
      url: url,
      success: function(res) {
        disp(res, target);
        $('#wait').hide();
      },
      error: function(xml, status, e) {
        $('#wait').hide();
      }
    }); 
    return false;
  }

  var searchQpage = function(ptype, application) {
    $("input:checkbox[name=chktype][value='"+ptype+"']").attr('checked', true);
    $('input:checkbox[name=chknew]').attr('checked', false);
    $('#sel_application').dropdownchecklist('destroy');
    $('#sel_application').val([application]);
    $('#sel_application').dropdownchecklist({width: 160});
    $('#search2').click();
  }
  switch (retrieveGetQs()['op']) {
  case 'glighting-smt':
    searchQpage('Surface Mount Type', 'General Lighting');
    break;
  case 'glighting-lt':
    searchQpage('Lamp Type', 'General Lighting');
    break;
  case 'slighting-smt':
    searchQpage('Surface Mount Type', 'Special Lighting');
    break;
  case 'slighting-lt':
    searchQpage('Lamp Type', 'Special Lighting');
    break;
  case 'display-smt':
    searchQpage('Surface Mount Type', 'Display');
    break;
  case 'display-lt':
    searchQpage('Lamp Type', 'Display');
    break;
  case 'automotive-smt':
    searchQpage('Surface Mount Type', 'Automotive');
    break;
  case 'automotive-lt':
    searchQpage('Lamp Type', 'Automotive');
    break;
  case 'lcd-smt':
    searchQpage('Surface Mount Type', 'LCD Backlighting');
    break;
  }
});
      //]]>

