// HTTP リクエストの共通設定
var http_request = false;
function setupHttpRequest(){
  if (window.XMLHttpRequest)
  {
    http_request = new XMLHttpRequest();
    if (http_request.overrideMimeType)
    {
      http_request.overrideMimeType('text/xml');
    }
  }
  else if (window.ActiveXObject)
  {
    try
    {
      http_request = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e)
    {
      try
      {
        http_request = new ActiveXObject("Microsoft.XMLHTTP");
      }
      catch (e)
      {
      }
    }
  }

  if (!http_request) {
    alert("Giving up :( Cannot create an XMLHTTP instance");
    return false;
  }
  return true;
}

// 指定されたエレメントにオプション項目を追加
// setAllHelper を使用するように変更
/*
function setHelper(elemname) {
  var ar = elemname.split("__");
  if (!setupHttpRequest())
    return;
  http_request.open('POST', '/survey/gethelper.php', false);
  http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  http_request.send('table='+ar[0]+'&field='+ar[1]);
  if (http_request.readyState == 4 && http_request.status == 200)
  {
    if (http_request.responseText == "err")
    {
      return;
    }
    else
    {
      elem = document.getElementById(elemname);
      elem.length = 0;
      var xmldoc = http_request.responseXML;
      obj = xmldoc.getElementsByTagName("values").item(0).getElementsByTagName("member");
      for (i=0; i<obj.length; i++)
      {
        e = obj.item(i).firstChild;
        if (e != null)
        {
          elem.length++;
          elem.options[elem.length-1].text = elem.options[elem.length-1].value = decodeURIComponent(e.data);
        }
      }
    }
  }
}
*/

// ドロップダウンリストの選択されているオプションを設定
function selectOptionMember(elemname, value)
{
  elem = document.getElementById(elemname);
  for (var i=0; i<elem.options.length; i++)
  {
    if (elem.options[i].value == value)
    {
      elem.options[i].selected = true;
      break;
    }
  }
}
// 抗ENA抗体MESACUP2用
function selectOptionMember4Common(tablename)
{
  elem = document.getElementById(tablename+"__dilution");
  selectOptionMember("common__dilution", elem.value);
  elem = document.getElementById(tablename+"__equipment");
  selectOptionMember("common__equipment", elem.value);
  elem = document.getElementById(tablename+"__temperature");
  selectOptionMember("common__temperature", elem.value);
  elem = document.getElementById(tablename+"__washer");
  selectOptionMember("common__washer", elem.value);
  elem = document.getElementById(tablename+"__wash_count");
  selectOptionMember("common__wash_count", elem.value);
  elem = document.getElementById(tablename+"__absorbency_meter");
  selectOptionMember("common__absorbency_meter", elem.value);
  elem = document.getElementById(tablename+"__program");
  selectOptionMember("common__program", elem.value);
}

function trim(value)
{
  return String(value).replace(/^[ 　]*/gim, "").replace(/[ 　]*$/gim, "");
}
function ltrim(value)
{
  return String(value).replace(/^[ 　]*/gim, "");
}
function rtrim(value)
{
  return String(value).replace(/[ 　]*$/gim, "");
}

function addCommaList(list, val)
{
  if (trim(list) == "")
    list = val;
  else
    list += ", " + val;
  return list;
}

// 抗ENA抗体MESACUP2用
function applyCommonOptionMember(tablename)
{
  elem = document.getElementById(tablename+"__dilution");
  if (elem != null)
    elem.value = trim(document.getElementById("common__dilution").value);
  elem = document.getElementById(tablename+"__equipment");
  if (elem != null)
    elem.value = trim(document.getElementById("common__equipment").value);
  elem = document.getElementById(tablename+"__temperature");
  if (elem != null)
    elem.value = trim(document.getElementById("common__temperature").value);
  elem = document.getElementById(tablename+"__washer");
  if (elem != null)
    elem.value = trim(document.getElementById("common__washer").value);
  elem = document.getElementById(tablename+"__wash_count");
  if (elem != null)
    elem.value = trim(document.getElementById("common__wash_count").value);
  elem = document.getElementById(tablename+"__absorbency_meter");
  if (elem != null)
    elem.value = trim(document.getElementById("common__absorbency_meter").value);
  elem = document.getElementById(tablename+"__program");
  if (elem != null)
    elem.value = trim(document.getElementById("common__program").value);
}

// データの読み込み
function loadElementValues(table, year, participant_code)
{
  if (!setupHttpRequest())
    return;
  http_request.open('POST', '/survey/loaddb.php', false);
  http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  http_request.send('table='+table+'&year='+year+'&participant='+participant_code);
  if (http_request.readyState == 4 && http_request.status == 200)
  {
    if (http_request.responseText == "err")
    {
      return;
    }
    else
    {
      var xmldoc = http_request.responseXML;
      obj = xmldoc.getElementsByTagName("dbdata").item(0).firstChild;
      while (obj != null)
      {
        if (obj.firstChild != null)
        {
          elemname = obj.nodeName;
          elem = document.getElementById(elemname);
          if (elem != null)
          {
            if (elem.type == "text" || elem.type == "hidden")
            {
              elem.value = String(decodeURIComponent(obj.firstChild.data));
            }
            else if (elem.type == "select-one")
            {
              selectOptionMember(elemname, decodeURIComponent(obj.firstChild.data));
            }
          }
        }
        obj = obj.nextSibling;
      }
    }
  }
}
// データの非同期用見込み
function loadElementValuesAsync(table, year, participant_code)
{
  if (!setupHttpRequest())
    return;
  http_request.onreadystatechange = onReceiveElementValues;
  http_request.open('POST', '/survey/loaddb.php', true);
  http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  http_request.send('table='+table+'&year='+year+'&participant='+participant_code);
}
function onReceiveElementValues()
{
  if (http_request.readyState == 4 && http_request.status == 200)
  {
    if (http_request.responseText == "err")
    {
      return;
    }
    else
    {
      var xmldoc = http_request.responseXML;
      obj = xmldoc.getElementsByTagName("dbdata").item(0).firstChild;
      while (obj != null)
      {
        if (obj.firstChild != null)
        {
          elemname = obj.nodeName;
          elem = document.getElementById(elemname);
          if (elem != null)
          {
            if (elem.type == "text" || elem.type == "hidden")
            {
              elem.value = String(decodeURIComponent(obj.firstChild.data));
            }
            else if (elem.type == "select-one")
            {
              selectOptionMember(elemname, decodeURIComponent(obj.firstChild.data));
            }
          }
        }
        obj = obj.nextSibling;
      }
    }
  }
}

// 選択肢を設定
function setAllHelper(table)
{
  if (!setupHttpRequest())
    return;
  http_request.open('POST', '/survey/getallhelper.php', false);
  http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  http_request.send('table='+table);
  if (http_request.readyState == 4 && http_request.status == 200)
  {
    if (http_request.responseText == "err")
    {
      return;
    }
    else
    {
      var xmldoc = http_request.responseXML;
      if (xmldoc.getElementsByTagName("dbdata").item(0) == null)
        return;
      obj = xmldoc.getElementsByTagName("dbdata").item(0).firstChild;
      while (obj != null)
      {
        elem = document.getElementById(obj.nodeName);
        if (elem != null && elem.type == "select-one")
        {
          elem.length = 0;
          member = obj.firstChild;
          while (member != null)
          {
            e = member.firstChild;
            if (e != null)
            {
              elem.length++;
              elem.options[elem.length-1].text = elem.options[elem.length-1].value = decodeURIComponent(e.data);
            }
            member = member.nextSibling;
          }
        }
        obj = obj.nextSibling;
      }
    }
  }
}

// 参加・不参加の値を読み込み
function loadEntryValues(year, participant_code)
{
  if (!setupHttpRequest())
    return;
  http_request.open('POST', '/survey/loadentry.php', false);
  http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  http_request.send('year='+year+'&participant='+participant_code);
  if (http_request.readyState == 4 && http_request.status == 200)
  {
    if (http_request.responseText == "err")
    {
      return;
    }
    else
    {
      var xmldoc = http_request.responseXML;
      obj = xmldoc.getElementsByTagName("dbdata").item(0).firstChild;
      while (obj != null)
      {
        if (obj.firstChild != null)
        {
          elemname = obj.nodeName;
          elem = document.getElementById(elemname);
          if (elem != null)
          {
            elem.checked = obj.firstChild.data == 't';
          }
        }
        obj = obj.nextSibling;
      }
    }
  }
}

// 小数点以下3桁までの数値かどうか
function numCheck3(num)
{
  return num.match(/^\d{1,}(\.\d{1,3})?$/);
}

// 小数点以下1桁までの数値かどうか
function numCheck1(num)
{
  if (trim(num) == "")
    return true;
  else
    return num.match(/^\d{1,}(\.\d{1,1})?$/);
}

function toHalf(src) {
  return src.replace(/([Ａ-Ｚａ-ｚ０-９＿ー．])/g,
    function ($0) {
      return String.fromCharCode($0.charCodeAt(0) - 65248);
    });
}

function numCheck(digit, elem)
{
  rnum = elem.value;
  if (trim(rnum) == "")
  {
    return true;
  }
  else if (digit == 1)
  {
    num = toHalf(rnum);
    if (num.match(/^\-?\d{1,}(\.\d{1,1})?$/))
    {
      switch (num.lastIndexOf("."))
      {
      case -1:
        elem.value = num + ".0";
        break;
      default:
        elem.value = num;
      }
      return true;
    }
  }
  else if (digit == 3)
  {
    num = toHalf(rnum);
    if (num.match(/^\-?\d{1,}(\.\d{1,3})?$/))
    {
      idx = num.lastIndexOf(".");
      if (idx < 0)
        elem.value = num + ".000";
      else
      {
        switch (num.length - idx)
        {
        case 2:
          elem.value = num + "00";
          break;
        case 3:
          elem.value = num + "0";
          break;
        default:
          elem.value = num;
        }
      }
      return true;
    }
  }
  else if (digit == 0)
  {
    num = toHalf(rnum);
    if (!num.match(/[\D]/g))
    {
      elem.value = num;
      return true;
    }
  }
  return false;
}

function dateFormatCheck(val)
{
  if (trim(val) == "")
    return true;
  else
    return val.match(/^\d{4}\/\d{1,2}\/\d{1,2}$/);
}

// DBの値と一致していればtrueを、異なっていればfalseを返す
function checkElementValues(table, year, participant_code)
{
  if (!setupHttpRequest())
    return;
  http_request.open('POST', '/survey/loaddb.php', false);
  http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  http_request.send('table='+table+'&year='+year+'&participant='+participant_code);
  if (http_request.readyState == 4 && http_request.status == 200)
  {
    if (http_request.responseText == "err")
    {
      return true;
    }
    else
    {
      var xmldoc = http_request.responseXML;

      root = xmldoc.getElementsByTagName("dbdata").item(0);

      // まだDB上にデータがない場合
      if (root.childNodes.length <= 1)	// <dbdata/>の場合、IEだと0、FireFoxだと1になる
      {
        elems = document.getElementsByTagName("input");
        for (i=0; i<elems.length; i++)
        {
          elem = elems[i];
          ar = elem.id.split("__");
          if (ar[0] != table) continue;
          if ((elem.type == "text" || elem.type == "hidden") && elem.value != "")
            return false;
        }
        elems = document.getElementsByTagName("select");
        for (i=0; i<elems.length; i++)
        {
          elem = elems[i];
          ar = elem.id.split("__");
          if (ar[0] != table) continue;
          if (!elem.options[0].selected)
            return false;
        }
      }
      // 既にDB上にデータがある場合
      else
      {
        elems = document.getElementsByTagName("input");
        for (i=0; i<elems.length; i++)
        {
          elem = elems[i];
          ar = elem.id.split("__");
          if (ar[0] != table) continue;
          if (elem.type == "text" || elem.type == "hidden")
          {
            if ((xelems = root.getElementsByTagName(elem.id)) != null && xelems.length != 0 && (xelem = xelems.item(0).firstChild) != null)
            {
              if (elem.value != String(decodeURIComponent(xelem.data)))
                return false;
            }
            else if (elem.value != "")
              return false;
          } 
        }
        elems = document.getElementsByTagName("select");
        for (i=0; i<elems.length; i++)
        {
          elem = elems[i];
          ar = elem.id.split("__");
          if (ar[0] != table) continue;
          if ((xelems = root.getElementsByTagName(elem.id)) != null && xelems.length != 0 && (xelem = xelems.item(0).firstChild) != null)
          {
            if (elem.value != String(decodeURIComponent(xelem.data)))
              return false;
          }
          else if (!elem.options[0].selected)
            return false;
        }
      }
    }
    return true;
  }
}

