//  dial9uplib.js
//    dial9up.com standard libraries.
//    Copyright (C) 2007, Zootique Co., Ltd. All rights reserved.

//  externalLinks()
//    新規ページへのリンクを作成する。
//    使用法：
//      ロード時等にこの関数を実行しておく。
//      <a> タグに rel="external" を埋めておく。
function externalLinks() {
  if(!document.getElementsByTagName) return;
  var anchors = document.getElementsByTagName("a");
  for(var i=0; i<anchors.length; i++){
    var anchor = anchors[i];
    if (anchor.getAttribute("href") && anchor.getAttribute("rel") == "external") anchor.target = "_blank";
  }
}

//  setFormSelect( obj, optionList, selNum )
//    selectionコントロールの選択肢・初期選択項目を変更する。
//    引数：
//          obj:        変更したいselectionコントロールオブジェクト
//          optionList: 選択肢一覧の配列。
//          selNum:     初期選択項目のインデックス(0オリジン)
//    戻り値：
//          成功： true
//          失敗： false
function setFormSelect( obj, optionList, selNum ){
  var cnt = obj.length;
  for( ; cnt > 0 ; cnt-- ){
    obj.remove(0);
  }
  for( cnt = 0 ; cnt < optionList.length ; cnt++ ){
    var currentOption = document.createElement("option");
    currentOption.appendChild( document.createTextNode(optionList[cnt]) );
    currentOption.value = optionList[cnt];
    if( cnt == selNum ){
      currentOption.selected = "selected";
      currentOption.defaultSelected = "selected";
    }
    obj.appendChild( currentOption );
  }
  return true;
}

//  getFormSelected( obj )
//    selectionコントロールの選択肢・初期選択項目を変更する。
//    引数：
//          obj:        内容取得したいselectionコントロールオブジェクト
//    戻り値：
//          成功： 内容文字列
//          失敗： false
function getFormSelected( obj ){
  return obj.options[obj.selectedIndex].value;
}


//  caseInsensitiveCompare( string1, string2 )
//    大文字・小文字を区別せずに比較する。
//  引数：
//        string1, string2： 比較したい文字列２つ
//  戻り値：
//        true： 文字列は等しい
//        false：文字列は異なる
function caseInsensitiveCompare( string1, string2 ){
  if( string1.toLowerCase() == string2.toLowerCase() ) return true;
  else return false;
}

//  checkBrowser()
//    ブラウザチェックを行い、規定のものでなかったら警告文書を表示する。
//  引数： なし
//  戻り値：
//        true:   チェックOK
//        false:  チェックNG
function checkBrowser(){
  if( is_ie6up ) return true;
  if( is_fx2up ) return true;
  if( is_safari ) return true;
  if( is_opera9up ) return true;
  //  NG
  var errMsg = '';
  errMsg += '<div class="BrowserError">\n';
  errMsg += '  <h1>ご使用中のブラウザは対応ブラウザではありません。</h1>';
  errMsg += '  <p>本サイトはWindows Internet Explorer 6以上、Firefox 2以上、Apple Safari、Opera 9以上を対象に作成されています。</p>';
  errMsg += '  <p>対応ブラウザ以外では誤動作を起こす可能性がありますので、対応ブラウザでの御利用をお願い致します。</p>';
  if( is_mac ){
    errMsg += '  <p><em>Macintoshに関する特記事項</em>：Macintosh版Internet Explorerでは異常な動作をすることを確認済です。</p>';
    errMsg += '  <p>Macintoshをご利用のお客様は、Safari、Firefox、Opera等のブラウザをご利用くださいますようお願い致します。</p>';
    errMsg += '  <p>(なお、Macintosh版Internet Explorerは開発元のMicrosoftによるサポートが終了している状態です。セキュリティリスクを避けるためにも、ご利用されないことをお勧め致します。)</p>';
  }
  errMsg += '</div>';
  document.write(errMsg);
  return false;
}

//  readCookie( name )
//    クッキーを読み出す。
//  引数：
//        name:  クッキー名
//  戻り値：
//        クッキー名に対応する内容
function readCookie( name ){
  var wholeCookie;
  var value;
  var length;
  var start, end;
  value = "";
  name = name + "=";
  wholeCookie = document.cookie;
  length = wholeCookie.length;
  if( length > 0 ){
	  start = wholeCookie.indexOf( name, 0 );
	  if( start != -1 ){
	    start += name.length;
	    end = wholeCookie.indexOf( ";", start );
	    if( end == -1 ){
		    end = length;
	    }
	    value = unescape( wholeCookie.substring( start, end ) );
  	}
  }
  return value;
}

//  writeCookie( name, value, expires, domain, path, secure )
//    クッキーを書き込む
//  引数：
//        name:     クッキー名(必須)
//        value:    クッキーの内容(必須)
//        expires:  有効期限(数値・書き込み当日からの日数・負数可)
//        path:     パス
//        domain:   ドメイン
//        secure:   セキュア(true or false)
function writeCookie(name, value, expires, path, domain, secure){
  var cookieValue;
  var error;

  cookieValue = error = "";
  if( name ){
	  cookieValue = cookieValue + escape( name ) + "=";
	  if( cookieValue ){
	    cookieValue = cookieValue + escape( value );
	    if( expires ){
	      var cookieExpires = new Date();
	      cookieExpires.setDate( cookieExpires.getDate() + expires );
		    cookieValue = cookieValue + "; expires=" + cookieExpires.toUTCString();
	    }
	    if( path ){
		    cookieValue = cookieValue + "; path=" + path;
	    }
	    if( domain ){
		    cookieValue = cookieValue + "; domain=" + domain;
	    }
	    if( secure ){
		    cookieValue = cookieValue + "; secure";
	    }
	  }
    else{
	    error = error + "Value required.";
    }
  }
  else{
	  error = error + "Name required.";
  }
  if( !error ){
	  document.cookie = cookieValue;
	  if( value != readCookie( name ) ){
	    error = error + "Write error.";
	  }
  }
  return error;
}

//  function deleteCookie( name, path, domain )
//    有効期限に遠い過去を指定することによりクッキーを削除する。
function deleteCookie( name, path, domain ){
  if( readCookie( name ) != "" ){
    document.cookie = name + "=" + 
      ( path ? "; path=" + path : "" ) +
      ( domain ? "; domain=" + domain : "" ) +
      "; expires=Thu, 01-Jan-70 00:00:01 GMT";
  }
}

//  function combineCookie( values, delimiter )
//    複数項目を一つのクッキーに書き込むために結合する。
//  引数：
//    values:  値を含む配列
//    delimiter:  区切り文字
//  戻り値：
//    結合された文字列
function combineCookie( values, delimiter ){
  var i;
  if( !delimiter ){
	  delimiter = "|";
  }
  for( i = 0 ; i < length( values ) ; i++ ){
	  result = result + values[i] + delimiter;
  }
  return result.substring( 0, result.length() - 1 );
}

//  function breakdownCookie( combined, delimiter )
//    結合されたクッキー文字列を再分割する。
//  引数：
//    combined:  結合された文字列
//    delimiter: 区切り文字
//  戻り値：
//    分割された文字列の配列
function breakdownCookie( combined, delimiter ){
  var start, end, result, count;
  if( !delimiter ){
	  delimiter = "|";
  }
  start = end = count = 0;
  result = new Array;
  if( combined == "" || combined == undefined ){
    return undefined;
  }
  for( ; ; ){
    end = combined.indexOf( delimiter, start );
    if( end == -1 ){
      result[count] = combined.substring( start );
      break;
    }
	  result[count] = combined.substring( start, end );
	  count++;
	  start = end + 1;
  }
  return result;
}


