/*
    jobSystem 1.0 css-1@eclat friends.css Lv.4
    file http://www.eclat.cc/home/css-1/friends.css create Wed, 02 Jan 2019 01:37:48 GMT (ver1.0)
    (C) nancyan update Sat, 26 Dec 2020 23:51:48 GMT
*/
/* type of js */

userInfo = obj => {
  Fcl(obj).toggle("ads");
  const o = Fcn("mainDoc", "entry");
  for(let i = 0; i < o.length; i++){
    if(Fcl(o[i]).contains("E" + obj.parentNode.id)) Fcl(o[i]).toggle("ads-on");
  }

};


/* -- 拡大サムネイルの削除 -- */
thumbDelete = () => {
  Fcl(doc.body).remove("thumb");
};

/* -- 拡大サムネイルの表示 -- */
bodyThumb = e => {
  echo("thumbBody", echo(e.parentNode));
  Fcl(doc.body).add("thumb");
};

createCateValue = s => {
  const max = s.match(/\((\d+) 件\)/) ? RegExp.$1 - 0 : 0;
  const entLen =  s.split("<hr />").length;
  let ups = s.match(/entry_date">\d\d(\d\d)\s(\d\d)/) ?
    ("20" + "" + RegExp.$1 + "" + RegExp.$2) - 0 : 0;
  let up = ups > 201901 ? 3 : ups > 201501 ? 2 : 1;
  echo("Up" + up, echo("Up" + up) - 0 + 1);
  const ct = Fid("C" + cPath);
  if(ct.className == ""){
    allUserPost += max;
    let lv = max == 200 ? 5 : max > 40 ? 4 : max > 4 ? 3 : max > 1 ? 2 : 1;
    ct.className = (autoLoopAct ? "" : "act ") + "Lv" + lv + " Up" + up;
    echo("CL" + cPath, max);
    echo("Lv0", echo("Lv0") - 1);
    echo("Lv" + lv, echo("Lv" + lv) - 0 + 1);
  }
  echo("secLen", echo("secLen") - 0 + 1);
  echo("entLen", echo("entLen") - 0 + entLen);
  Fid("logs").value += cPath + "," +
    echo(Ftag("C" + cPath, "span")[1]) + "," + entLen + "," + ups + ", ,";
};

/* -- 新たなセクションの作成 -- */
createSec = s => {
alert("ok");
 // let dt = s.replace(/.+(<hr \/>)(.+)\1.+?$/, "$2");
  let dt = s.replace(/(target="_)blank"/g, "$1top\"");
  dt = dt.replace(/(<div class="entry_body")/g, "$1 onclick=\"bodyThumb(this)\"");
  dt = dt.replace(/(c=)(\d+)(">)[^<]+/g, "$1$2$3C$2");

  echo(obj, `<div class="sec_title">
    C${cPath} ${echo(Ftag("C" + cPath, "a")[0]).replace(/.+>/g, "")}
    <span class="es-btn" onclick="secEsc(this)">❌</span>
    </div>${dt}`
  );
  const tar =  Fid("mainInfo");
  tar.parentNode.insertBefore(obj, tar.nextElementSibling);

  let o = Fcn(obj, "import_cite");
  for(let i = 0; i < o.length; i++){
    let user = echo(o[i]).replace(/(.+home\/)/, "").replace(/\/.+/, "");
    let list = Fid("U" + user);
    let userCate = "UC" + cPath;
    if(!list){
      allUserEntry++;
      list = Fce("li"); list.id = "U" + user;
      list.className = userCate;
      echo(list, `
        <a href="javascript:userInfo()">${user}</a>
        <span class="us-ct">1</span>
        <span class="us-len">1</span>`
      );
      Fid("userDat").append(list);
    } else {
      list.classList.add(userCate);
      const sp = Ftag(list, "span");
      echo(sp[0], list.classList.length);
      echo(sp[1], echo(sp[1]) - 0 + 1);
    }
  }
  
  if(autoLoopAct){
    Fid("logsEntry").value = allUserEntry;
    Fid("logsPost").value = allUserPost;
    const a = Ftag("userDat", "li");
    let ans = "[userDat]";
    for(let i = 0; i < a.length; i++){
      let sp = Ftag(a[i], "span");
      ans += a[i].id.substring(1) + " " + echo(sp[1]) + " " + echo(sp[0]) + " " +
        a[i].className.replace(/U/g, "") + ",";
    }
    Fid("userLogs").value = ans;
    Fid("logsCNT").value =  autoCNT;
    Fid("logsLen").value = Fid("logs").value.length;
    Fid("userLen").value = Fid("userLogs").value.length;
    obj.remove();
    autoCNT++;
    autoLen--;
    if(autoLen > 0) setTimeout(() => { autoLoop()}, 500);
    else autoLoopAct = false;
  } else {
    delayScroll(obj, 1);
  }
};

/* -- ユニットの追加 -- */
appendUnit = (uri, obj) => {
  xhr("/cgi-bin/diary.cgi?" + uri, s => {
    Fcl(obj.parentNode).add("line");
    let o = Fce("div");
    o.className = "unit";
    echo(o, viewDatRep(s));
    obj.parentNode.parentNode.append(o);
  });
};

/* -- サムネイル表示の文字置換 -- */
viewDatRep = s => {
  let dat = s.replace(/.+?<hr \/>/, "").replace(/<\/div>\s+<\/body.+/, "");
  dat = dat.replace(/(class="entry)(".+?\/home\/)([0-9a-z\-]+)(.+?c=)(\d+)(">)/g,
     "$1 EC$5 EU$3$2$3$4$5$6");
  dat = dat.replace(/(target="_)blank"/g, "$1top\"");
  dat = dat.replace(/(<div class="entry_body")/g,
    "$1 onclick=\"bodyThumb(this)\"").replace(/(c=)(\d+)(">)[^<]+/g, "$1$2$3C$2");
  dat = dat.replace(/<hr \/>/g, "").replace(/>[\s\t]+(<div)/g, ">$1");
  dat = dat.replace(/(<div class="page_link">)(.+?)(<\/div>)/, (e0,e1,e2,e3) => {
    return e2.match(/(oid=all;[0-9a-z;=]+)"><span title="より古/) ? e1 + "<span onclick=\"appendUnit('" + RegExp.$1 + "', this)\">もっと読み込む</span>" + e3 : "" });

  return dat;
};

/* -- カテゴリのソート -- */
cateSort = () => {
  const par = Fid("cateDat");  
  let dt = echo(par).replace(/<\/li>$/, "").
    replace(/(<li title=")(\d{6})/g, "$2$1$2").split("</li>");
  dt.sort().reverse();
  dt = (dt.join("</li>") + "</li>").replace(/\d{6}(<li)/g, "$1");
  echo(par, dt);
};

secControl = no  => {
  const btn = Ftag("mlb", "span")[secCNT];
  Fcl(echo(btn, "C" + cPath)).add("job");
  secCNT++;
};

secView = s => {
  Fcl("C" + cPath).add("act");
  let dat = viewDatRep(s);
  let obj = Fce("div");
  obj.className = "sec"; obj.id = "E" + cPath;
  echo(obj, `<div class="sec_title">
    C${cPath} ${echo(Fcn("C" + cPath, "label")[0])}
    <span class="es-btn" onclick="secEsc(this)">❌</span>
    </div><div class="unit">${dat}</div>`
  );
  const tar = Fid("mainInfo");
  tar.parentNode.insertBefore(obj, tar.nextElementSibling);

  let o = Fcn(obj, "import_cite");
  for(let i = 0; i < o.length; i++){
    let user = echo(o[i]).replace(/(.+home\/)/, "").replace(/\/.+/, "");
    let list = Fid("U" + user);
    let userCate = "UC" + cPath;
    if(!list){
      allUserEntry++;
      list = Fce("li"); list.id = "U" + user;
      list.className = userCate;
      echo(list, `
        <a href="#" onclick="userInfo(this); return false;">${user}</a>
        <span class="us-ct">1</span>
        <span class="us-len">1</span>`
      );
      Fid("userDat").append(list);
    } else {
      list.classList.add(userCate);
      const sp = Ftag(list, "span");
      echo(sp[0], list.classList.length);
      echo(sp[1], echo(sp[1]) - 0 + 1);
    }
  }
  delayScroll(obj, 1); 
};

autoLoop = () => {
  const o = Ftag("cateDat", "a");
  if(o.length >= autoCNT) o[autoCNT].click();
  else autoLoopAct = false;
};

runAutoLoop = () => {
  Fcl("updateLog").add("vis");
  autoLoopAct = true;
  autoCNT = 0;

  autoLen = echo("Lv0") - 0;
  echo("logs", "[upDateLog]");
  autoLoop();
};
stopAutoLoop = () => {
  autoLoopAct = false;
};

/* -- セクションの削除 -- */
secEsc = e => {
  const o = Fcn("mainDoc", "sec");
  if(o.length == 0) return;
  const obj = typeof(e) == "object" ? e.parentNode.parentNode : o[0];
  let ent = Fcn(obj, "entry"); let len = ent.length - 1;
  for(let i = len; i > 7; i--) ent[i].remove();
  Fcl(obj.id.replace(/E/, "C")).remove("act");
  Fcl(obj).add("es");
  setTimeout(() => { obj.remove(); }, 1000);
};


/* -- メニューの生成 -- */
createMenu = () => {
  xhr("/cgi-bin/diary.cgi?oid=new-diary;c=886;n=2;s=217387", s => {
    let dt = ("0,全カテゴリ,200,201224," + key(s, "upDateLog")).split(",");
    const par = Fid("cateDat");
    for(let i = 0; i < dt.length; i += 4){
      let lv = dt[i + 2] - 0; lv = lv == 200 ? 5 : lv > 40 ? 4 : lv > 4 ? 3 : lv > 1 ? 2 : 1;
      let up = dt[i + 3] - 0; up = up > 201901 ? 3 : up > 201501 ? 2 : 1;
      let obj = Fce("li"); obj.title = dt[i + 3];
      obj.id = "C" + dt[i]; obj.className = "Lv" + lv + " Up" + up;
      echo(obj,
        '<a href="main.html?c=' + dt[i] + '" onclick="mainEntry(' + dt[i] + '); return false;">' +
          '<span class="ct">' + dt[i] + '</span>' +
          '<span class="label">' + dt[i + 1] + '</span>' +
        '</a>' +
        '<span id="CL' + dt[i] + '" class="ct-len">' + dt[i + 2] + '</span>'
      );
      par.append(obj);
    }
    echo("Lv0", Ftag("cateDat", "li").length);
    cateSort();
  });
};

/* -- バックグラウンドのコントロール -- */
topBGControl = (n, obj) => {
  Fcl(doc.documentElement).toggle("type" + n);
  Fcl(obj).toggle("job");
};


/* -- 領域のコントロール -- */
dcControl = (key, obj) => {
  Fcl(doc.body).toggle(key);
  Fcl(obj).toggle("job");
};

fullChg = obj => {
  const fg = Fcl(obj).contains("job");
  fg ? doc.exitFullscreen() : doc.documentElement.requestFullscreen();
  Fcl(obj).toggle("job");
};






createList = o => {
  alert("ok");

};

/* -- カテゴリのコマンド -- */
mainEntry = c => {
  const obj = Fid("E" + c);
  if(obj) delayScroll(obj);
  else {
    cPath = c;
    xhr("/cgi-bin/diary.cgi?oid=all;n=40;c=" + c, s => {
      secControl(1);
      secView(s);
   });
  }
};


autoLoadStart = () => {
  if(autoLoadFg == false || loadCNT == datCATE.length){
    const obj = Fid("userLogs");
    obj.value = "[main_data]" + obj.value.replace(/\,$/, "") + "[/main_data]";
    echo("loadLabel", "LD");
    Fcl("loadLabel").remove("job");
    autoLoadFg = false;
  } else {
    echo("loadLabel", loadCNT);
    const uri = "/cgi-bin/diary.cgi?oid=all;n=1;c=" + datCATE[loadCNT];
    xhr(uri, s => {
      s = s.replace(/.+<div id="main">/, "");
      if(s.match(/\d\d(\d\d) (\d\d)\/(\d\d)/)) datDATE.push(RegExp.$1 + RegExp.$2 + RegExp.$3);
      if(s.match(/\((\d+) 件\)/)) datMAX.push(RegExp.$1);
      Fid("userLogs").value += datCATE[loadCNT] + "," + datNAME[loadCNT] + "," +
        datMAX[loadCNT] + "," + datDATE[loadCNT] + ",";
      loadCNT++;
      setTimeout(() => { autoLoadStart() }, 500);
    });
  }
};



menuExec = (n, obj) => {
  Fcl(obj).toggle("job");

};

/* -- メインコマンド -- */
mainExec = (n, obj) => {
  const pars = Fcl(doc.body);
  const tar = Fcl(obj);
  switch(n){

case 9 :
  const fg =  tar.contains("job");
  Fcl("main" + (fg ? "Log" : "Doc")).add("small");
  setTimeout(() => {
    Fcl("main" + (fg ? "Doc" : "Log")).remove("small");
    Fid("BG1").click();
  }, 900); break;

case 10 : pars.toggle("togs"); break;
case 11 : autoLoadFg = true; loadCNT = 0; autoLoadStart(); break;
case 12 : autoLoadFg = !autoLoadFg; if(autoLoadFg) autoLoadStart(); break;


  }
  tar.toggle("job");
}


upDateEntry = () => {
};

mainArray = s => {
  let dat = s.replace(/.+<ul/, "").replace(/\/ul>.+/, "");
  dat = dat.match(/c=\d+">[^<]+/g).join(",").replace(/c=/g, "").replace(/">/g, ",");
  echo("logs",  "[main_data]" + dat  + "[/main_data]");

  datCATE = [];
  datNAME = []
  datMAX = [];
  datDATE = [];
  let a = dat.split(",");
  for(let i = 0; i < a.length; i += 2){
    datCATE.push(a[i]);
    datNAME.push(a[i + 1]);
  }
  Fid("logsCNT").value =  datCATE.length;
};


/* -- 処理のエントリ -- */
entry = num => {
  secCNT = 0;
  createBody(num);
  createMenu();
  allUserEntry = 0;
  allUsePost = 0;
  let uri = "/cgi-bin/diary.cgi?oid=all;n=40;c=" + (isUpdate ? 17 : cPath);
  xhr(uri, s => {
    mainArray(s);
    secControl(1);
    secView(s);
    delayScroll("C" + cPath, 0);
  });
  
};

if(doc.URL.match(/c=(\d*)/)) entry(RegExp.$1);






/*  */