/**
 * @file cms.smartphone.js
 * @breif スマートフォン自動振り分けなどのJavaScript.
 * @date 2011/07/16
 * @charset UTF-8
 * 
 * Copyright(C) Hitachi Government & Public Corporation
 * System Engineering, Ltd. 2011. All rights reserved.
 * 
 * <p>依存するライブラリ
 *  <ul>
 *    <li>jquery.js(1.2+)</li>
 *    <li>jquery.cookie.js</li>
 *  </ul>
 * </p>
 * 
 */
// 名前空間の定義:cms
var cms;
if(!cms)
	cms = {};
else if(typeof cms != "object")
	throw new Error("cms already exits and is not an object");

// 名前空間の定義:cms.smartphone
if(!cms.smartphone)
    cms.smartphone = {};
else if(typeof cms.smartphone != "object")
    throw new Error("cms.smartphone already exits and is not an object");

// 確認ダイアログメッセージの定義
var DISPATCH_MESSAGE = {
	ja: 'このコンテンツには、スマートフォン専用のページがあります。\n表示しますか？',
	en: 'このコンテンツには、スマートフォン専用のページがあります。\n表示しますか？',
	zh: 'このコンテンツには、スマートフォン専用のページがあります。\n表示しますか？',
	ko: 'このコンテンツには、スマートフォン専用のページがあります。\n表示しますか？'
};

var COOKIE_KEY_DISPATCH = 'cms_smartphone_dispatch';

/**
 * 指定したURLに対する振り分けをを行う。
 * <p>iPhone、Androidの場合は振り分けを行う。
 * 
 * @param url 振り分け先のURL[string](必須)
 * @param langaugeCd[string]
 * @param onPreview CMSのプレビュー処理かどうか[boolean]
 * 
 */
cms.smartphone.dispatch = function(url, languageCd, onPreview) {
	// プレビュー処理の場合、何もしない
	if((onPreview != undefined || onPreview != null) && onPreview == true) {
		return;
	}
	
	// URLが指定されていない場合、何もしない
	if(url == undefined || url == null || url == "") {
		return;
	}
	
	if(languageCd == undefined 
			|| languageCd == null
			|| languageCd == "" 
			|| !(languageCd in DISPATCH_MESSAGE)) {
		langaugeCd = 'ja';
	}
	
	// ユーザエージェントのチェック
	if(!cms.smartphone.isSmartphone()) {
		// スマートフォン用ページから遷移した場合は、振り分けしない。
		return;
	}
	
	// 遷移元のチェック
	if(cms.smartphone.isSameUrlWithFrom(url)) {
		return;
	}
	
	var cookieEnabled = navigator.cookieEnabled
	if(cookieEnabled == undefined || cookieEnabled == null || cookieEnabled == false) {
		// Cookieが無効の場合、強制的に遷移する。
		location.href = url;
		return;
	}
	
	// Cookieの取得と判定
	var beforeDispatched = $.cookie(COOKIE_KEY_DISPATCH);
	if(beforeDispatched == undefined || beforeDispatched == null) {
		// Cookieの値が見つからない場合
		var msg = DISPATCH_MESSAGE[languageCd];
		if(confirm(msg)) {
			// Cookieの保存
			$.cookie(COOKIE_KEY_DISPATCH, 'true');
			
			// 画面遷移
			location.href = url;
			return;
			
		} else {
			// Cookieの保存
			$.cookie(COOKIE_KEY_DISPATCH, 'false');
			return;
		}
		
	} else if(beforeDispatched == 'true') {
		// 前回、trueと答え場合
		location.href = url;
		return;
	} else {
		// 前回、falseと答えた場合
		return;
	}
	
	
}

/**
 * 現在アクセスしている機器がスマートフォンかどうかチェックする
 * 
 * @return true:スマートフォンの場合
 */
cms.smartphone.isSmartphone = function() {
	var userAgent = navigator.userAgent;
	if((userAgent.indexOf('iPhone') > 0 && userAgent.indexOf('iPad') == -1) // iPadを除くiOS
			|| userAgent.indexOf('iPod') > 0	// iPod touch
			|| userAgent.indexOf('Android') > 0) {
		return true;
	}
	
}

/**
 * 遷移元のURLと同じかどうか、リファラーを元に比較する。
 *
 * @param url: 比較対象のURL
 * @return true: 遷移元のURLと等しい。
 */
cms.smartphone.isSameUrlWithFrom = function(url) {
	
	var referrerUrl = document.referrer;
	if(referrerUrl == null || referrerUrl.length == 0) {
		return false;
	}
	
	if(referrerUrl.indexOf(url) >= 0) {
		return true;
	}
	
	// 比較対象のURLが、index.htmlで始まり、リファラーで「/index.html」が省略されている場合
	if(url.lastIndexOf("/index.html") >=0 && referrerUrl.indexOf("/index.html") < 0) {
		var compUrl = url.replace("/index.html", "/");
		if(referrerUrl.indexOf(compUrl) >= 0) {
			return true;
		}
	}
	
	return false;
	
}


