
// 配布元ID
var deliverer_id = 1;

// ドメイン名設定
var domain_name  = "point.gmo.jp";
//var domain_name  = "1id-test.gmo-pass.jp";
var http_domain  = "http://" + domain_name;
var https_domain = "https://" + domain_name;

// 各種URL設定
var top_url                = http_domain  + "/consumer/";
var login_form_url         = https_domain + "/consumer/auth/loginForm.do";
var logout_form_url        = http_domain  + "/consumer/auth/logoutForm.do";
var login_url              = http_domain  + "/consumer/auth/toolbarLogin.do";
var setting_url            = http_domain  + "/consumer/toolbar/setting.html";
var info_url               = http_domain  + "/consumer/toolbar/toolbar_info.json";
var item_post_search_url   = http_domain  + "/consumer/toolbar/itemPostSearch.do";
var main_menu_url          = http_domain  + "/consumer/toolbar/main_menu.html";
var search_menu_url        = http_domain  + "/consumer/toolbar/search_menu.html";
var service_menu_url       = http_domain  + "/consumer/toolbar/service_menu.html";
var mail_menu_url          = http_domain  + "/consumer/toolbar/mail_menu.html";
var selling_menu_url       = http_domain  + "/consumer/toolbar/selling_menu.html";
var daily_point_url        = http_domain  + "/consumer/toolbar/toolbarDailyPoint.do";
var tokup_point_history    = https_domain + "/consumer/point/showPointHist.do";
var affiliate_url          = "http://user.calamel.jp/affiliate/?afid=toolbar";
var favorite_url           = "http://user.calamel.jp/recent?afid=toolbar";
var calamel_item_rank_url  = http_domain  + "/consumer/toolbar/calamel_item_rank.json";
var itempost_item_rank_url = http_domain  + "/consumer/toolbar/itempost_item_rank.json";
var activity_record_url    = http_domain  + "/consumer/toolbar/toolbarActivityRecord.do";
var member_rank_url        = http_domain  + "/consumer/aboutUserRank/index.html"; 

// 各種設定値
var status_check_interval           = 10000;
var login_check_interval            = 1000;
var toolbar_info_check_interval     = 600000;
var toolbar_info_refresh_interval   = 30000;
var shopping_navi_items_per_page    = 5;
var keyword_placeholder             = "<<:QUERY:>>";

// 検索エンジンリスト
var search_engine_list = {
	  "web"     : {
		  "id"           : "web"
		, "name"         : "ウェブ検索"
		, "query_encode" : "UTF-8"
		, "query_url"    :  http_domain + "/consumer/point/dailySearchPoint.do?Keywords=" + keyword_placeholder
	  }
	, "calamel" : {
		  "id"           : "calamel"
		, "name"         : "カラメル商品検索"
		, "query_encode" : "UTF-8"
		, "query_url"    :  "http://calamel.jp/search/" + keyword_placeholder + "?afid=toolbar"
	}
};

// ECサイトの商品URL
// 後方参照1：ドメイン名
var ec_site_item_url = {
	  "楽天"              : new RegExp("https?://[^/]*?(rakuten\\.co\\.jp)/[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]*?/.*$")
	, "Amazon"            : new RegExp("https?://[^/]*?(amazon\.co\.jp)/[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+$")
	, "Yahooショッピング" : new RegExp("https?://[^/]*?(store\.shopping\.yahoo\.co\.jp)/.*$")
	, "価格.com"          : new RegExp("https?://[^/]*?(kakaku\.com)/item/.*$")
	, "ECナビ"            : new RegExp("https?://[^/]*?(ecnavi\.jp)/item_info/.*$")
};

// ECサイトの検索URL
// 後方参照1：ドメイン名
// 後方参照2：キーワード
var ec_site_search_url = {
	  "楽天"              : new RegExp("https?://[^/]*?(rakuten\\.co\\.jp)[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]*?[?&]sitem=([^&]+).*$")
	, "Amazon"            : new RegExp("https?://[^/]*?(amazon\.co\.jp)[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]*?[?&]field\-keywords=([^&]+).*$")
	, "Yahooショッピング" : new RegExp("https?://[^/]*?(shopping\.yahoo\.co\.jp)[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]*?[?&]p=([^&]+).*$")
	, "価格.com"          : new RegExp("https?://[^/]*?(kakaku\.com)/search_results/.*?[?&]query=([^/?&]+).*$")
	, "ECナビ"            : new RegExp("https?://[^/]*?(ecnavi\.jp)[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]*?[?&]keyword=([^&]+).*$")
};

// 検索エンジンの検索URL
// 後方参照1：ドメイン名
// 後方参照2：キーワード
var search_engine_search_url = {
	  "Google検索"        : new RegExp("https?://[^/]*?(google\.com|google\.co\.jp)[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]*?[?&]q=([^&]+).*$")
	, "Yahoo検索"         : new RegExp("https?://[^/]*?(search\.yahoo\.co\.jp)[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]*?[?&]p=([^&]+).*$")
	, "Bing検索"          : new RegExp("https?://[^/]*?(bing\.com)[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]*?[?&]q=([^&]+).*$")
	, "Mooter検索"        : new RegExp("https?://[^/]*?(mooter\.co\.jp)[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]*?[?&]keywords=([^&]+).*$")
};

// EC、検索エンジンのキーワードエンコード
var keyword_encode = {
	  "楽天"              : "EUC_JP"
	, "Amazon"            : "SJIS"
	, "Yahooショッピング" : "EUC_JP"
	, "価格.com"          : "SJIS"
	, "ECナビ"            : "EUC_JP"
	, "Google検索"        : "UTF-8"
	, "Yahoo検索"         : "UTF-8"
	, "Bing検索"          : "UTF-8"
	, "Mooter検索"        : "UTF-8"
	, "Bing検索"          : "UTF-8"
};

// とくとくポイント連携媒体一覧
var site_information = {
	    0 : { "site_id" :   "0", "site_name" : "GMOとくとくポイント"     , "top_url" : "http://point.gmo.jp/"                                    , "show" : true , "icon_url" : "http://point.gmo.jp/consumer/images/globalsign.gif"}
	, 100 : { "site_id" : "100", "site_name" : "ヤプログ！"              , "top_url" : "https://sso.gmo.jp/base/SyozaiLogin.do?siteid=yaplog"    , "show" : true , "icon_url" : "https://point.gmo.jp/consumer/images/minilogo_yaplog.gif"}
	, 110 : { "site_id" : "110", "site_name" : "写真部"                  , "top_url" : "http://www.kabegami.com/shashin-bu/"                     , "show" : true , "icon_url" : "https://point.gmo.jp/consumer/images/shashinbu_115_33.gif"}
	, 120 : { "site_id" : "120", "site_name" : "ポイントタウン"          , "top_url" : "https://sso.gmo.jp/base/SyozaiLogin.do?siteid=pointtown" , "show" : true , "icon_url" : "https://point.gmo.jp/consumer/images/pointtown_115_33.gif"}
	, 130 : { "site_id" : "130", "site_name" : "freeml"                  , "top_url" : "http://www.freeml.com/"                                  , "show" : true , "icon_url" : "https://point.gmo.jp/consumer/images/freeml_115_33.gif"}
	, 140 : { "site_id" : "140", "site_name" : "ふくびき.com"            , "top_url" : "http://www.fukubiki.com/"                                , "show" : true , "icon_url" : "https://point.gmo.jp/consumer/images/fukubiki_115_33.gif"}
	, 210 : { "site_id" : "210", "site_name" : "teacup."                 , "top_url" : "http://www.teacup.com/"                                  , "show" : true , "icon_url" : "https://point.gmo.jp/consumer/images/teacup_115_33.gif"}
	, 220 : { "site_id" : "220", "site_name" : "カラメル"                , "top_url" : "http://calamel.jp/"                                      , "show" : true , "icon_url" : "https://point.gmo.jp/consumer/images/calamel_115_33.gif"}
	, 221 : { "site_id" : "221", "site_name" : "カラーミーショップ！プロ", "top_url" : "http://shop-pro.jp/"                                     , "show" : false, "icon_url" : "http://shop-pro.jp/img/common/side_btn_ebank_01.gif"}
	, 230 : { "site_id" : "230", "site_name" : "GMOGames"                , "top_url" : "http://www.gmog.co.jp/"                                  , "show" : false, "icon_url" : "https://point.gmo.jp/consumer/images/games_115_33.gif"}
	, 240 : { "site_id" : "240", "site_name" : "JugemKey"                , "top_url" : "http://jugemkey.jp/"                                     , "show" : true , "icon_url" : "https://point.gmo.jp/consumer/images/jugemkey_115_33.gif"}
	, 260 : { "site_id" : "260", "site_name" : "ブログセンター"          , "top_url" : "http://blog.mypop.jp/"                                   , "show" : true , "icon_url" : "https://point.gmo.jp/consumer/images/blogcenter_115_33.gif"}
	, 270 : { "site_id" : "270", "site_name" : "GMOとくとくBB"           , "top_url" : "http://gmobb.jp/"                                        , "show" : true , "icon_url" : "https://point.gmo.jp/consumer/images/tokutokubb_115_33.gif"}
	, 280 : { "site_id" : "280", "site_name" : "MakeShop"                , "top_url" : "http://www.makeshop.jp/"                                 , "show" : false, "icon_url" : "http://www.makeshop.jp/images/makeshoplogo.gif"}
	, 290 : { "site_id" : "290", "site_name" : "とくするバイト.com"      , "top_url" : "http://www.tokusurubaito.com/"                           , "show" : false, "icon_url" : "https://point.gmo.jp/consumer/images/tokusurubaito_115-33.gif"}
	, 300 : { "site_id" : "300", "site_name" : "Epsilon"                 , "top_url" : "http://www.epsilon.jp/"                                  , "show" : false, "icon_url" : "http://www.epsilon.jp/images/logo.gif"}
	, 310 : { "site_id" : "310", "site_name" : "infoQ"                   , "top_url" : "http://infoq.jp/"                                        , "show" : false, "icon_url" : "http://infoq.jp/common/img/s.gif"}
	, 320 : { "site_id" : "320", "site_name" : "とくとくショップ"        , "top_url" : "http://gmo-toku.jp/"                                     , "show" : false, "icon_url" : "http://gmo-toku.jp/common/img/top_logo_01.gif"}
	, 330 : { "site_id" : "330", "site_name" : "kuchikomi.jp"            , "top_url" : "http://kuchikomi.jp/"                                    , "show" : false, "icon_url" : "http://kuchikomi.jword.jp/_img/kk_header_logo.jpg"}
	, 340 : { "site_id" : "340", "site_name" : "とくとくリサーチ"        , "top_url" : "http://www.gmo-research.jp/"                             , "show" : false, "icon_url" : "http://www.gmo-research.jp/images/main_img01.gif"}
};

// ***** 以下、共通関数等 ***** //

// 配列と値の交差チェック
Array.prototype.contains = function (v) {
	for(var i = 0; i < this.length; i++)
		if(this.hasOwnProperty(v) && this[i] === v)
			return true;
	return false;
};

// 配列と配列の交差チェック
Array.prototype.containsEach = function (v) {
	for(var i = 0; i < v.length; i++)
		if (this.contains(parseInt(v[i])))
			return true;
	return false;
};

/**
 * 検索エンジンで検索する
 */
function search(keyword, engine, obj) {
	// 検索履歴の記録
	recordActivity('TOOLBAR_SEARCH', new Array(
				 engine
				,keyword));
	var encodedKeyword = keyword;
	if (search_engine_list[engine].query_encode == "SJIS")
		encodedKeyword = EscapeSJIS(keyword);
	else if (search_engine_list[engine].query_encode == "EUC_JP")
		encodedKeyword = EscapeEUCJP(keyword);
	else if (search_engine_list[engine].query_encode == "UTF-8")
		encodedKeyword = EscapeUTF8(keyword);
	navigateTo(search_engine_list[engine].query_url.replace(keyword_placeholder, encodedKeyword), obj);
}

/**
 * EC検索時のキーワードを取得する
 * @param url URL
 * @return EC検索時は検索キーワード、EC検索時以外はfalse
 */
function getKeywordFromECSearch(url) {
	// ECサイトでの検索を検知して・・・
	for(key in ec_site_search_url) {
		if (url.match(ec_site_search_url[key])) {
			var keyword = RegExp.$2;
			keyword = keyword.replace(/\+/g, " ");
			if (url.match(/[?&](ie|ei)=([^&]+)/)) {
				if (RegExp.$2.indexOf('EUC') >= 0)
					return keyword = UnescapeEUCJP(keyword);
				else if (RegExp.$2.indexOf('UTF') >= 0)
					return keyword = UnescapeUTF8(keyword);
			}
			if (keyword_encode[key] == "SJIS")
				keyword = UnescapeSJIS(keyword);
			else if (keyword_encode[key] == "EUC_JP")
				keyword = UnescapeEUCJP(keyword);
			else if (keyword_encode[key] == "UTF-8")
				keyword = UnescapeUTF8(keyword);
			else
				keyword = decodeURI(keyword);
			return keyword;
		}
	}
	return false;
}

/**
 * 検索エンジン検索時のキーワードを取得する
 * @param url URL
 * @return 検索エンジン検索時は検索キーワード、検索エンジン検索時以外はfalse
 */
function getKeywordFromSearchEngine(url) {
	// 検索エンジンでの検索を検知して・・・
	for(key in search_engine_search_url) {
		if (url.match(search_engine_search_url[key])) {
			var keyword = RegExp.$2;
			keyword = keyword.replace(/\+/g, " ");
			if (url.match(/[?&](ie|ei)=([^&]+)/)) {
				if (RegExp.$2.indexOf('EUC') >= 0)
					return keyword = UnescapeEUCJP(keyword);
				else if (RegExp.$2.indexOf('UTF') >= 0)
					return keyword = UnescapeUTF8(keyword);
			}
			if (keyword_encode[key] == "SJIS")
				keyword = UnescapeSJIS(keyword);
			else if (keyword_encode[key] == "EUC_JP")
				keyword = UnescapeEUCJP(keyword);
			else if (keyword_encode[key] == "UTF-8")
				keyword = UnescapeUTF8(keyword);
			else
				keyword = decodeURI(keyword);
			return keyword;
		}
	}
	return false;
}

/**
 * 指定したURLがECサイトの商品ページかどうかを判断する。
 * @param url URL
 * @return URLがECサイトの商品ページかどうか
 */
function isECSiteItemPage(url) {
	// ECサイトの商品ページへのアクセスを検知
	for(key in ec_site_item_url) {
		if (url.match(ec_site_item_url[key])) {
			return true;
		}
	}
	return false;
}

/**
 * ツールバーやサイドバーから、メイン画面のURLを遷移させる。
 * @param url URL
 * @param obj ツールバーオブジェクト（ツールバーやサイドバーでのイベントハンドラでのみ有効）
 */
function navigateTo(url, obj) {
	obj.Navigate(url);
}

/**
 * お知らせクリック時の履歴記録＆画面遷移処理。
 * @param url URL
 * @param obj ツールバーオブジェクト（ツールバーやサイドバーでのイベントハンドラでのみ有効）
 */
function infoClick(url, obj) {
	recordActivity('TOOLBAR_INFO_CLICK', new Array(url));
	navigateTo(url, obj);
}

/**
 * サイドバーの表示を切り替える。
 * @param flag 表示する場合はtrue、非表示にする場合はfalse
 * @param obj ツールバーオブジェクト（ツールバーやサイドバーでのイベントハンドラでのみ有効）
 */
function showSidebar(flag, obj) {
	var app = obj.GetApplication();
	app.ShowBrowserBar("{345BB1B9-379E-400A-A14E-845125B046A2}", flag);
}

/**
 * メニューオブジェクトを新たに作成して取得する。
 * @return メニューオブジェクト
 */
function createMenu() {
	var menu = null;
	try {
		menu = new ActiveXObject("TokuTokuPointExtensions.HostMenu.1");
	} catch(e) {
		menu = new ActiveXObject("TokuTokuExtensions.HostMenu.1");
		alert("テスト用のメニューサンプルがインストールされています。最新のインストーラをご使用ください。");
	}
	return menu;
}

/**
 * ツールバー関連の行動履歴を記録する。
 * @param name 行動名
 * @param values 行動値（配列で）
 */
function recordActivity(name, values) {
	var url = activity_record_url + "?activityName=" + EscapeUTF8(name) + "&activityValues=" + EscapeUTF8(values.join(","));
	// AJAXで行動履歴を記録するリクエストを投げる（投げっぱなし）
	$.getJSON(url, function(json){void(0);});
}

/**
 * ツールバー関連の行動履歴を記録する。同期通信
 * @param name 行動名
 * @param values 行動値（配列で）
 */
function recordActivitySync(name, values) {
	var url = activity_record_url + "?activityName=" + EscapeUTF8(name) + "&activityValues=" + EscapeUTF8(values.join(","));
	// AJAXで行動履歴を記録するリクエストを投げる（同期通信）
	$.ajax({
		url: url,
		async: false
	});
}

/**
 * 数値の3桁カンマ表現を取得する。
 * @param value 数値
 * @return 3桁カンマ表現
 */
function comma(value) {
	if (value == null || value == "")
		return 0;
	else
		return value.toString().replace(/[^0-9]/g,'').replace(/((?:^[-+])?\d{1,3})(?=(?:\d{3})+(?!\d))/g, "$1,")
}

