/*
パラメータにしなければいけないもの
　クッキー名 →JSとphpで一元化できるかどうか
　クッキー有効期限
　リンク先（認証用とログイン後）
　入力欄のname値（ユーザー名、パスワード、保存可否）
*/

// ログインタイムアウト（秒）　※設定しない場合は0
var LOGIN_TIMEOUT = 60*60*24;

// クッキー名称
var COOKIE_NAME = "TABITABI_ACS";
var COOKIE_NAME2 = "TABITABI_LOGIN";

// クッキータイムアウト（秒）
var COOKIE_TIMEOUT = 60*60*24*10;

// クッキー許可ドメイン
var COOKIE_DOMAIN = ".tabitabi-taipei.com";

// 認証用URL　※クロスドメイン対応のため、SSLなど別サーバ上へphpを置いて運用することも可能
var LOGIN_REQUEST_URL = "/tow_acs.php";
var COOKIE_REQUEST_URL = "http://www.tabitabi-taipei.com/tow_acsc.php";
var LOGOUT_REQUEST_URL = "http://www.tabitabi-taipei.com/login/logout.php";

// ログイン後に最初に表示するページのURL　※ページ移動させないときはnull
//var CONTENTS_URL = "contents.php";
var CONTENTS_URL = "";

// OTP用SEED保存変数
var LOGIN_SEED;

// melonのみ
if(location.hostname.match(/^melon/)) {
	COOKIE_DOMAIN = "";
	LOGIN_REQUEST_URL = "http://melon/tow/tow_acs.php";
}
//━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
var addListener = (function() {
	if ( window.addEventListener ) { // W3C 準拠ブラウザ用
		return function(elem, type, func) {
			elem.addEventListener(type, func, false);
		};
	} else if ( window.attachEvent ) { // IE 用
		return function(elem, type, func) {
		    if( ! func._bridge ) {
		        func._bridge = new Array(0);
		    }
		    var i = func._bridge.length;
		    func._bridge[i] = new Array(3);
		    func._bridge[i][0] = elem;
		    func._bridge[i][1] = type;
		    func._bridge[i][2] = function() {
		        func.apply(elem, arguments);
		    };
		    elem.attachEvent("on"+type, func._bridge[i][2]);
		};
	} else {
		return function(elem, type, func) {
		    return false;
		}
	}
})();

// イベントリスナー追加
addListener(window, "load", init);

function init() {
	if(document.getElementById('login_button')) addListener(document.getElementById('login_button'), "click", request_login);
	if(document.getElementById('logout_button')) addListener(document.getElementById('logout_button'), "click", request_logout);
	//alert("ユーザー名["+document.getElementById("user").value+"]");
	restore_cookie(COOKIE_NAME, 0);
}
function init_login(c) {
	var ln2 = "guest";
	if(typeof c == 'undefined') {
//		save_cookie(COOKIE_NAME, '', 0);
		if(document.getElementById("login_name2")) document.getElementById("login_name2").innerHTML = ln2;
		if(document.getElementById("logoff_name2")) document.getElementById("logoff_name2").innerHTML = ln2;
		toggle_login_form(0);
		return;
	}
//	document.frm1['user'].value = c[0];
	if(c[2]) ln2 = c[2];
	if(c[1] && document.getElementById('user')) document.getElementById('user').value = c[0];
	if(document.getElementById("login_name")) document.getElementById("login_name").innerHTML = c[0];
	if(document.getElementById("login_name2")) document.getElementById("login_name2").innerHTML = ln2;
	if(document.getElementById("logoff_name")) document.getElementById("logoff_name").innerHTML = c[0];
	if(document.getElementById("logoff_name2")) document.getElementById("logoff_name2").innerHTML = ln2;
	// ログイン期限切れのチェック
	if(c[1] && LOGIN_TIMEOUT) {
		day0 = new Date();
//alert("["+Date.parse(c[1])+"]:["+Date.parse(day0)+"]");
		if((Date.parse(c[1])+LOGIN_TIMEOUT*1000)<(Date.parse(day0))) {
			c[1]=0;
	        save_cookie(COOKIE_NAME, '', 0);
		}
	}
	toggle_login_form(c[1]);
}

// クッキー読み込み
function restore_cookie(coknam, flag) {
	var date = new Date();
	var timestamp = date.getTime();
	var url = COOKIE_REQUEST_URL + "?cn=" + coknam+'&tm='+timestamp;
	var sc = document.createElement("script");
	sc.setAttribute("type","text/javascript");
	sc.setAttribute("src", url );
	document.getElementsByTagName("body").item(0).appendChild(sc);

	// appendChild()の結果と同期させる為、setInterval()する
	var timerID = setInterval(function(){
		if( window.ACSC_COMPLETE ) {
			clearInterval(timerID);
			var c = COOKIE_VALUE.split("\t");
			c[2] = unescape(c[2]);
			if(!flag) init_login(c);
			else request_logout2(c);
			return;
		}
	}, 100);

	coktxt = document.cookie+";";
	stano = coktxt.indexOf(coknam);
	endno = coktxt.indexOf(";",stano);
	txt0 = unescape(coktxt.substring(stano+coknam.length+1, endno));
//alert("["+txt0+"]");
	if (stano == -1) return;
	return txt0.split("\t");
}

// クッキー保存
function save_cookie(coknam, loginname, loginflag) {
	day0 = new Date();
//	txt0 = document.frm1['user'].value+"\t";
	txt0 = '';
	if(document.getElementById('user')) txt0 += document.getElementById('user').value;
	txt0 += "\t";
	if(loginflag) txt0 += day0;
	txt0 += "\t"+loginname;
//alert("["+txt0+"]");
	//
	day0.setTime(day0.getTime()+COOKIE_TIMEOUT*1000);
	endday = day0.toGMTString();
	obj_ck = document.getElementById('sv_logininfo');
	// ログアウト時に保存チェックボックスが未チェックまたはないときにクッキーを破棄
	// →仕様変更でチェックボックスは廃止するが、コードは将来用で残す。
//	if(!loginflag && (!obj_ck || (obj_ck && !obj_ck.checked))) {
//		txt0="";
//		endday=-1;
//	}
	var d="";
	if(COOKIE_DOMAIN!="") d=";domain="+COOKIE_DOMAIN;
	document.cookie = coknam+"="+escape(txt0)+";path=/"+d+";";
	if(loginflag) document.cookie = COOKIE_NAME2+"="+escape(document.getElementById('user').value)+";path=/"+d+";expires="+endday+";";
}

// AJAX ※クロスドメインには非対応
function login() {
  new Ajax.Request( 'http://melon/etc/login2/login.php',
  {
    method: 'post',
    postBody: $('logform').serialize(),
    onSuccess: function( transport ) {
      if( transport.responseText.match( /\<ok\/\>/ ) ) {
        save_cookie(COOKIE_NAME, '', 1);
        window.location = 'contents.php';
      }
      else
        $('login_err').style.display='block';
    }
  } );
}

// ACD対策 ※AJAXのクロスドメイン
// ※OTPを使用し、パスワードを平文で流さず、URLにも直接パスワードは書かない。
function request_login() {

  // OTP用のseedを作成
  mkseed(1);

//  var user = document.frm1['user'].value;
  var user = document.getElementById('user').value;
//  var password = hex_md5(LOGIN_SEED + document.frm1['password'].value);
  var password = hex_md5(LOGIN_SEED + document.getElementById('password').value);
  var url = LOGIN_REQUEST_URL + "?user=" + user + "&seed=" + LOGIN_SEED + "&otp=" + password;
  var sc = document.createElement("script");

  sc.setAttribute("type","text/javascript");
  sc.setAttribute("src", url );
  sc.setAttribute("charset", "Shift_JIS" );
  document.getElementsByTagName("body").item(0).appendChild(sc);

  // appendChild()の結果と同期させる為、setInterval()する
  var timerID = setInterval(function(){
    if( typeof LOGIN_STATUS != 'undefined' ) {
      clearInterval(timerID);

      if( LOGIN_STATUS.substring(0, 2) == "ok" ) {
        save_cookie(COOKIE_NAME, LOGIN_STATUS.substring(2), 1);
        var url = CONTENTS_URL;
        if(document.getElementsByName('contents_url').item(0).value) {
           url = document.getElementsByName('contents_url').item(0).value;
           window.location = url;
        } else toggle_login_form(1);
      }
      else
        document.getElementById('login_err').style.display='block';
    }
  }, 100);
}

// クライアント側またはサーバ側でOTP用のseedを取得させる為の関数
function mkseed(mode) {
  // クライアント側で生成
  if(mode) {
    var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
    var l = str.length;
    var seed="";
    for(i=0; i<6; i++) {
      var p=Math.floor(Math.random()*l);
      seed += str.substring(p, p+1);
    }
    LOGIN_SEED = seed;
    return;
  }

  // サーバ側で生成
  var url = LOGIN_REQUEST_URL + "?get=1";
  var sc = document.createElement("script");
  sc.setAttribute("type","text/javascript");
  sc.setAttribute("src", url );
  document.getElementsByTagName("body").item(0).appendChild(sc);

  // appendChild()の結果と同期させる為、setInterval()する
  var timerID = setInterval(function(){
    if( typeof LOGIN_SEED != 'undefined' ) clearInterval(timerID);
  }, 100);
}

function request_logout() {
//	restore_cookie(COOKIE_NAME, 1);
	location.href = LOGOUT_REQUEST_URL;
}
function request_logout2(c) {
	var loginname='';
	if(typeof c != 'undefined') loginname = c[2];
	save_cookie(COOKIE_NAME, loginname, 0);
	var dt = new Date();
	var d="";
	if(COOKIE_DOMAIN!="") d=";domain="+COOKIE_DOMAIN;
	document.cookie = COOKIE_NAME2+"=;path=/"+d+";expires="+dt.toGMTString()+";";
	toggle_login_form(0);
}

function toggle_login_form(login_time) {
	if(login_time) {
		document.getElementById('login_form').style.display='none';
		document.getElementById('login_greeting').style.display='block';
        if(document.getElementById('login_err')) document.getElementById('login_err').style.display='none';
	} else {
		document.getElementById('login_form').style.display='block';
		document.getElementById('login_greeting').style.display='none';
        if(document.getElementById('login_err')) document.getElementById('login_err').style.display='none';
	}
}

