//--------------------------------------
// ブラウザがIEかの判定
function  isIE()
{
  return (navigator.appName == "Microsoft Internet Explorer");
}

//--------------------------------------
// ブラウザがOperaかの判定
function  isOpera()
{
  return (navigator.appName == "Opera");
}

//--------------------------------------
// イベントハンドラを設置する
function installEventHandler( target, eventName, handler )
{
    target[eventName] = isIE() ? function() { handler( event ); }
                               : handler;
}

//--------------------------------------
// イベントオブジェクトを取得する
function getEventObj( _event )
{
  return isIE() ? _event.srcElement : _event.target;
}

//--------------------------------------
// 親のオブジェクトを返す
function getParent( obj )
{
  return isIE() ? obj.parentElement : obj.parentNode;
}

//--------------------------------------
// 指定要素の上端の垂直位置を調べる
function cumulativeOffsetY( elem )
{
  var offset = 0;
  do
  {
    offset += elem.offsetTop || 0;
    elem = elem.offsetParent;
  } while( elem );

  return offset;
}

//--------------------------------------
// ボタン/アンカーのテキストをタイトル文字で置き換える
var btn_org_text = "";
function btnTitleToText( _event )
{
  if( btn_org_text.length == 0 )
  {
    var obj = getEventObj( _event );
    if( obj.innerHTML.length > 0 )
    {
      btn_org_text = obj.innerHTML;
      obj.innerHTML = obj.title;
    }
  }
  return;
}

//--------------------------------------
// ボタン/アンカーのテキストを元に戻す
function btnReturnText( _event )
{
  if( btn_org_text.length > 0 )
  {
    var obj = getEventObj( _event );
    obj.innerHTML = btn_org_text;
    btn_org_text = "";
  }
  return;
}

//--------------------------------------
// 表示透過率を指定する
function setOpacity( elem, percent )
{
  if( isIE() )
  {
    elem.style.filter = "Alpha(opacity=" + percent + ")";
  }
  else
  {
    elem.style.opacity = percent / 100;
  }
}

//--------------------------------------
// ブラウザ終了まで有効なcookieを設定する。
function setTempCookie( key, val )
{
    if( navigator.cookieEnabled )
    {
        document.cookie = key + "=" + val + ";";
        // 有効期限'expires'を指定しないと、ブラウザ終了時に忘却される。
    }
}

//--------------------------------------
// cookieを参照する。
function getCookie( key )
{
    if( navigator.cookieEnabled )
    {
        tmp  = document.cookie + ";";
        tmp1 = tmp.indexOf( key, 0 );
        if( tmp1 != -1 )
        {
            tmp = tmp.substring( tmp1, tmp.length );
            start = tmp.indexOf( "=",  0 ) + 1;
            end = tmp.indexOf( ";", start );
            return( tmp.substring( start, end ) );
        }
    }
    return "";
}

//--------------------------------------
// ポップアップ･ウインドウを開く
function openPopUpWin( url, name, width, height )
{
  // ウインドウスタイルの設定
  var style = ",resizable=no"
            + ",directories=no"
            + ",location=no"
            + ",menubar=no"
            + ",scrollbars=yes"
            + ",status=no"
            + ",toolbar=no";

  // ウインドウサイズの設定
  if( width > 0 )
  {
    style += ",width=" + width;
  }
  if( height > 0 )
  {
    style += ",height=" + height;
  }

  // ウインドウを開き、ウインドウオブジェクトを返す
  // (オープン失敗時はnullが返る)
  return window.open( url, name, style );
}

//--------------------------------------
// オーダーフォームを開く
var orderform_width = 435;
var orderform_height_default = 650;
function openOrderForm( initDisp )
{
  var win_name = "KAI_ORDER";

  // フォームの初期画面を選択する
  var key = "";
  if( initDisp != undefined )
  {
    key = initDisp;
  }
  setTempCookie( win_name, key );

  // オーダーフォームをポップアップウインドウとしてオープンする
  var obj = openPopUpWin( "popup_contact.html", win_name,
                          orderform_width, orderform_height_default );
  if( obj == null  )
  {
    // オープン失敗時は<A>のhrefでフォームをオープンさせる為にtrueを返す
    return true;
  }

  // 元々オープンしている場合を考慮し、フォームにフォーカスを与える
  obj.focus();

  return false;
}

//--------------------------------------
// ウインドウクローズ前にダイアログで確認する
function closeWinAfterConfirm( dlgMessage )
{
  if( window.confirm( dlgMessage ) )
  {
    window.close();
  }
}

//--------------------------------------
// ローカルナビゲーションの位置を垂直スクロールに追従させる
function lnaviScroll_onLoad()
{
  var naviObj = document.getElementById( "LNAVI_SCROLL" );
  if( naviObj == null )
  {
    return;
  }
  var naviBase   = cumulativeOffsetY( naviObj );
  var naviHeight = naviObj.offsetHeight;
  var naviMargin = 0;
  var scrollLast = 0;
  var content_height = naviObj.offsetParent.offsetHeight;
  var naviMaxMargin = content_height - naviHeight;
  if( naviMaxMargin <= 0 )
  {
    return;
  }
  naviObj.style.marginTop = naviMargin;

  var timer_move  = null;
  var timer_fade  = null;
  var isFadeOut   = true;
  var opaRate     = 100;

  // scroll/resizeイベントハンドラ
  var handler = function()
  {
    var scrollNow = document.body.scrollTop;
    var naviTop = naviBase + naviMargin;
    var dispTop = scrollNow;
    var dispHeight = isIE() ? document.body.clientHeight
                            : window.innerHeight;

    // ナビが表示エリア内に収まる場合
    if( naviHeight <= dispHeight )
    {
      // ナビ上端を表示エリア上端にあわせる
      naviMargin = dispTop - naviBase;
    }

    // ナビが表示エリア内に収まらない場合
    else
    {
      var naviBtm = naviTop + naviHeight - 1;
      var dispBtm = dispTop + dispHeight - 1;

      // スクロールダウン時
      if( scrollNow > scrollLast )
      {
        // ナビ下端を表示エリア下端にあわせる
        if( naviBtm < dispBtm )
        {
          naviMargin += dispBtm - naviBtm;
        }
      }
      // スクロールアップ
      else
      {
        // ナビ上端を表示エリア上端にあわせる
        if( naviTop > dispTop )
        {
          naviMargin -= naviTop - dispTop;
        }
      }
    }
    scrollLast = scrollNow;

    if( naviMargin < 0 )
    {
      naviMargin = 0;
    }
    else
    {
      if( true )  // 可変長ページ対応
      {
        var content_height = naviObj.offsetParent.offsetHeight;
        naviMaxMargin = content_height - naviHeight;
      }
      if( naviMargin > naviMaxMargin )
      {
        naviMargin = naviMaxMargin;
      }
    }

    // イベント発生毎に表示位置を変更(=再描画)すると表示がカクカク
    // するので、イベントが一定時間治まった後に表示位置を変更する
    if( timer_move != null )
    {
      clearTimeout( timer_move );
    }

    // フェードアウト/インの途中で再度移動が発生した場合、フェードを一旦止める
    if( timer_fade != null )
    {
      clearTimeout( timer_fade );
      timer_fade = null;
    }

    // ナビ位置を移動させる処理
    var moveFunc = function()
    {
      timer_move = null;

      var fade_pitch = 30;
      var fade_chg   = 10;

      // 新たな位置へのフェードイン処理
      var fadeInFunc = function()
      {
        opaRate += fade_chg;
        setOpacity( naviObj, opaRate );
        if( opaRate < 100 )
        {
          timer_fade = setTimeout( fadeInFunc, fade_pitch );
        }
        else
        {
          timer_fade = null;
          isFadeOut = true;
        }
      }

      // 元の位置のフェードアウト処理
      var fadeOutFunc = function()
      {
        opaRate -= fade_chg;
        setOpacity( naviObj, opaRate );
        if( opaRate > 0 )
        {
          timer_fade = setTimeout( fadeOutFunc, fade_pitch );
        }
        else
        {
          // フェードアウト完了時点で、新たな位置へのフェードインを開始する
          naviObj.style.marginTop = naviMargin;
          timer_fade = setTimeout( fadeInFunc, fade_pitch );
          isFadeOut = false;
        }
      }

      // 表示位置を移動させる場合
      var current = parseInt( naviObj.style.marginTop );
      var diff = Math.abs( current - naviMargin );
      if( diff >= 10 )
      {
        // 元の表示のフェードアウトを開始する
        fadeOutFunc();
      }

      // 表示位置が移動無しに関わらず、既にフェードアウトを開始していた場合
      else if( opaRate < 100 )
      {
        // 表示をフェードインして戻す
        fadeInFunc();
      }
    }

    // 一定時間後に移動を開始する
    timer_move = setTimeout( moveFunc, 1000 );
  }

  // ナビ位置を初期化する
  handler();

  // ハンドラ設置
  window.onscroll = handler;
  window.onresize = handler;
}

//--------------------------------------
// 指定ページ内の指定ID位置に移動する
function gotoHref( _event )
{
  var anchor = getEventObj( _event );

  var curr = top.document.location.href;
  var next = anchor.href;

  var a1 = curr.split( "#", 2 );
  var a2 = next.split( "#", 2 );
  var path1 = a1[0];
  var path2 = a2[0];
  if( (path2 != "") && (path2 != path1) )
  {
    top.document.location.href = next;
  }
  else if( a2.length > 1 )
  {
    // ページ内移動時はhashのみ変更する事で、ページのリロードを回避する
    var id = a2[1];
    top.document.location.hash = id;
  }
}

//--------------------------------------
// ページ先頭に戻る
function gotoTopOfPage()
{
  top.document.body.scrollTop = 0;
}

//--------------------------------------
// 文字列末尾の空白文字を除去
function deleteLastSpace( str )
{
  return str.replace( /[ 　]+$/, "" );
}

//--------------------------------------
// HPBでのリンクID入力値を確認する
function checkLinkName( idString )
{
  // 末尾の空白文字は除去する
  idString = deleteLastSpace( idString );

  // 半角の数字/アルファベット以外が混入している場合はエラー扱いする
  for( var i = 0; i < idString.length; i ++ )
  {
    var c = idString.charAt( i );
    if( ((c >= "0") && (c <= "9"))
     || ((c >= "a") && (c <= "z"))
     || ((c >= "A") && (c <= "Z"))
     || (c == "#")
     || (c == "_")
     || (c == ".") )
    {
    }
    else
    {
      return "";
    }
  }
  return idString;
}

//--------------------------------------
// 記事登録欄への入力データを正式表示する - 新着情報
function setUpCommo_list( srcTblId, destId )
{
  var tbl  = document.getElementById( srcTblId );
  var rows = tbl.tFoot.rows;
  var dest = document.getElementById( destId );
  var html = "<UL>";
//for( var idx = 0; idx < rows.length; idx ++ )
  for( var idx = rows.length - 1; idx >= 0; idx -- )
  {
    var row = rows[idx];
    if( row.cells.length != 3 )
    {
      continue;
    }
    var date = deleteLastSpace( row.cells[0].innerHTML );
    var desc = deleteLastSpace( row.cells[1].innerHTML );
    if( (date == "") || (desc == "") )
    {
      continue;
    }
    var link = checkLinkName( row.cells[2].innerHTML );
    html += "<LI>" + date + " " + desc;
    if( link != "" )
    {
      html += "&lt;<A href='" + link + "' target='_top' onclick='gotoHref(event); return false'>こちら</A>&gt;";
    }
    html += "</LI>";
  }

  html += "</UL>";
  dest.innerHTML = html;
}

//--------------------------------------
// 記事登録欄への入力データを正式表示する - 商品紹介欄(特価情報/中古情報など)
var item_progress_num = 0;
var item_progress_cnt = 0;
function setUpCommo_item( srcTblId, destId )
{
  // 記事登録欄の１行データ内容を正式表示に変換する
  var xferItemRow = function( entryRow, itemDest, uniq )
  {
    if( entryRow.cells.length != 5 )
    {
      return;
    }
    var date = deleteLastSpace( entryRow.cells[0].innerHTML );
    var desc = deleteLastSpace( entryRow.cells[1].innerHTML );
    if( desc == "" )
    {
      return;
    }

    var nimg = entryRow.cells[2].getElementsByTagName("IMG");
    var ximg = entryRow.cells[3].getElementsByTagName("IMG");
    var link = checkLinkName( entryRow.cells[4].innerHTML );

    var item = document.createElement( "DIV" );
    if( (link != "") && (link.charAt(0) == "#") )   // リンクIDの先頭の'#'を除去
    {
      link = link.substring(1);
    }
    if( link != "" )
    {
      item.id = link;
    }
    item.className = "COMMO_LAYOUT";

    var html = "<DIV class='COMMO_STRETCH'>";

    // 通常画像の登録有り時...
    if( nimg.length > 0 )
    {
      html += "<DIV class='COMMO_IMAGE'>";

      var img_w_max = 240;
      var img_h_max = 180;
      var tate_naga = false;
      var img = new Image();
      img.src = nimg[0].src;
      if( img.width < img.height )
      {
        var tmp = img_w_max;
        img_w_max = img_h_max;
        img_h_max = tmp;
        tate_naga = true;
      }
      if( (img.width > img_w_max) || (img.height > img_h_max) )
      {
        var n;
        var path = img.src;
        if ((n = path.lastIndexOf("/")) != -1)
        {
          path = path.substring(n+1);
        }
        html += "<DIV style='background:red; color:white; font-size:12px; text-align:left; width:" + img_w_max + "px; height:" + img_h_max + "px;'>";
        html += "<BR>通常画像 " + path + " の解像度が" + 
                ((tate_naga)? "縦":"横") + "長画像の上限である" +
                "横 " + img_w_max + " 画素、縦 " + img_h_max + " 画素を超えています。";
        html += "</DIV>";
      }
      else
      {
        // 拡大画像登録(IMGタグ)直後のテキストを抽出する
        var getEnlargeImageComment = function( index )
        {
          index ++;
          var childs = entryRow.cells[3].childNodes;
          var cnt = 0;
          for( var c = 0; c < childs.length; c ++ )
          {
            var child = childs[c];
            if( child.tagName == "IMG" )
            {
              if( (++ cnt) > index )
              {
                break;
              }
            }
            else if( (child.tagName == undefined) && (cnt == index) )
            {
              return child.nodeValue;
            }
          }
          return "";
        }

        // 拡大画像の登録有りはアンカーを設置し、lightboxで表示できる様にする
        if( ximg.length > 0 )
        {
          var lboxid = "lightbox[" + destId + uniq + "]";
          html += "<A href='" + ximg[0].src + "' rel='" + lboxid + "' title='" + getEnlargeImageComment(0) + "'>";
        }
        html += "<IMG src='" + img.src + "'";
        if( ximg.length > 0 )
        {
          html += " title='クリックで拡大'";
        }
        html += ">";
        if( ximg.length > 0 )
        {
          html += "</A>";
          for( var i = 1; i < ximg.length; i ++ )
          {
            html += "<A href='" + ximg[i].src + "' rel='" + lboxid + "' style='display:none' title='" + getEnlargeImageComment(i) + "'></A>";
          }
          html += "<SPAN class='COMMO_IMAGE_DESC'>画像クリックで拡大";
          if( ximg.length > 1 )
          {
            html += "(" + ximg.length + "画像)";
          }
          html += "</SPAN>";
        }
      }
      html += "</DIV>";
    }
    html += "<DIV class='COMMO_DESC'>";
    html += "<SPAN class='COMMO_MORE'>▼記事クリックで全文表示▼</SPAN>";
    if( date != "" )
    {
      html += "<SPAN class='COMMO_DATE'>" + date + " UP</SPAN><BR>";
    }
    html += desc + "</DIV>";
    html += "</DIV>";

    item.innerHTML = html;
    itemDest.appendChild( item );

    // サブルーチン：先祖要素に遡って指定クラス名のものを取得する
    var getAncestorClass = function( currentElem, className )
    {
      do
      {
        currentElem = getParent( currentElem );
        if( currentElem == null )
        {
          return null;
        }
      } while( currentElem.className != className );
      return currentElem;
    }

    // サブルーチン：直下の子要素中から指定クラス名のものを取得する
    var getChildClass = function( parentElem, className )
    {
      var childs = parentElem.childNodes;
      for( var n = 0; n < childs.length; n ++ )
      {
        if( childs[n].className == className )
        {
          return childs[n];
        }
      }
      return null;
    }

    // 表示範囲を開閉するエリア
    var stretchArea = getChildClass( item, "COMMO_STRETCH" );
    stretchArea.style.overflowY = "visible";  // 初期値は開

    // サブルーチン：表示範囲の開閉をトグルする
    var item_stretch = function( itemElem )
    {
      var stretchArea = getChildClass( itemElem, "COMMO_STRETCH" );

      // 現在、開であれば閉じる
      if( stretchArea.style.overflowY.toLowerCase() == "visible" )
      {
        var max_h = 120;    // デフォルト最大高

        // 画像有り時は画像高さを考慮して表示高を決める
        var imgArea = getChildClass( stretchArea, "COMMO_IMAGE" );
        if( imgArea != null )
        {
          var h = imgArea.offsetHeight + 5;
          if( max_h < h )
          {
            max_h = h;
          }
        }
        // 表示記事範囲が高すぎる場合...
        var curr_h = stretchArea.offsetHeight;
        if( curr_h > max_h )
        {
          stretchArea.style.height = max_h + "px";
          stretchArea.style.overflowY = "hidden";

          // onMouseOver時のマウスカーソル形状を変更する
          var desc = getChildClass( stretchArea, "COMMO_DESC" );
          if( desc != null )
          {
            desc.style.cursor = "pointer";
            desc.title = "クリックで全文表示";
          }

          // ｢クリックで全文表示｣表記を表示ON
          var more = getChildClass( desc, "COMMO_MORE" );
          if( more != null )
          {
            more.style.display = "inline";
            more.style.top = max_h - more.offsetHeight;
          }
        }
      }

      // 現在、閉であれば開く
      else
      {
        stretchArea.style.height = "auto";
        stretchArea.style.overflowY = "visible";

        var desc = getChildClass( stretchArea, "COMMO_DESC" );
        if( desc != null )
        {
          desc.title = "クリックで閉じる";
        }

        // ｢クリックで全文表示｣表記を表示ON
        var more = getChildClass( desc, "COMMO_MORE" );
        if( more != null )
        {
          more.style.display = "none";
        }
      }
    }

    // イベントハンドラ：表示範囲の開閉をトグルする
    var handler_stretch = function( _event )
    {
      var elem = getAncestorClass( getEventObj( _event ), "COMMO_LAYOUT" );
      if( elem != null )
      {
        item_stretch( elem );
      }
    }

    // 画像のロードが済んでいない時点では表示の高さが不明であるので
    // ロードできた時点で表示エリアの閉処理を行う
    var imgs = item.getElementsByTagName("IMG");
    if( (imgs.length > 0) && (! imgs[0].complete) )
    {
      // イベントハンドラ：画像ロード完了時処理
      var handler_imgload = function( _event )
      {
        handler_stretch( _event );

        // 記事クリックのイベントハンドラを設置する
        var elem = getAncestorClass( getEventObj( _event ), "COMMO_LAYOUT" );
        var strh = getChildClass( elem, "COMMO_STRETCH" );
        var desc = getChildClass( strh, "COMMO_DESC" );
        installEventHandler( desc, "onclick", handler_stretch );
      }
      // 画像ロード完のイベントハンドラを設置する
      installEventHandler( imgs[0], "onload", handler_imgload );
    }

    // 画像無し、又は画像ロード済みの場合はここで表示エリアの閉処理を行う
    else
    {
      item_stretch( item );

      // 記事クリックのイベントハンドラを設置する
      var desc = getChildClass( stretchArea, "COMMO_DESC" );
      installEventHandler( desc, "onclick", handler_stretch );
    }
  }

  // 進捗表示
  var showProgress = function()
  {
    var progress = document.getElementById( "COMMO_SETUP_PROGRESS" );
    if( progress != null )
    {
      if( item_progress_cnt < item_progress_num )
      {
        var msg = "Loading " + item_progress_cnt + "/" + item_progress_num;
        progress.style.display = "block";
        progress.innerHTML = msg;
        window.status      = msg;
      }
      else
      {
        progress.style.display = "none";
        window.status = "";

        // リンク先IDの部分が未生成だった場合への対処
        var id = top.document.location.hash;
        if( id != "" )
        {
          top.document.location.hash = id;
        }
      }
    }
  }

  // 表示部分の生成は処理時間かかかる為、バックグラウンドで処理させる
  var startSetUpThread = function( srcTblId, destId )
  {
    var tbl  = document.getElementById( srcTblId );
    var rows = tbl.tFoot.rows;
    var dest = document.getElementById( destId );
    var cnt = rows.length;
    var idx = cnt;
    if( cnt > 0 )
    {
      item_progress_num += cnt;

      var setUpSomeItems = function()
      {
        // 登録欄Ｎ行分の記事を正式表示に変換する
        var n;
        for( n = 0; (n < 5) && (idx > 0); n ++ )
        {
          idx --;
          xferItemRow( rows[idx], dest, idx );

          // 境界線
          if( idx > 0 )
          {
            var line = document.createElement( "DIV" );
            line.className = "LINE2";
            dest.appendChild( line );
          }
        }

        // 進捗表示
        item_progress_cnt += n;
        showProgress();

        if( idx > 0 )
        {
          // 次行の処理を起動
          setTimeout( setUpSomeItems, 0 );
        }
      }
      setTimeout( setUpSomeItems, 0 );
    }
  }
  startSetUpThread( srcTblId, destId );
}

//--------------------------------------
// メーカーサイト登録欄への入力データを正式表示する
function setUpMakerLink()
{
  var tbl  = document.getElementById( "ENTRY_MAKERLINK" );
  var rows = tbl.tFoot.rows;
  if( rows.length >= 1 )
  {
    var row = rows[0];
    if( row.cells.length == 2 )
    {
      var japan = row.cells[0].innerHTML;
      var inter = row.cells[1].innerHTML;
      if( (japan != "") || (inter != "") )
      {
        var desc = "メーカーのWEBサイトはこちら";
        var html;
        if( (japan == "") || (inter == "") )
        {
          var url = (japan != "") ? japan : inter;
          html = "<A href='http://" + url +  "/' target='_blank'>" + desc + "</A>";
        }
        else
        {
          html = desc + "<BR>"
               + "<A href='http://" + japan +  "/' target='_blank'>Japan</A> "
               + "<A href='http://" + inter +  "/' target='_blank'>International</A>";
        }
        var dest = document.getElementById( "MAKER_LINK" );
        dest.innerHTML = html;
      }
    }
  }
}

