/*@cc_on _d=document;eval('var document=_d');@*/
/** マイリスト登録情報キー名. */
var __upd_myListKey = 'ml';
/** 最近閲覧した車種情報キー名. */
var __upd_dispCarKey = 'rc';
/** マイリスト最大数. */
var __upd_myListMax = 20;
/** 最近閲覧最大数. */
var __dispListMax = 10;
/** データ区切り. */
var __data_separater = ":";
/** データリスト区切り. */
var __list_separater = ",";
/** Cookie保存期間. */
var __expires = (31 * 24 * 60 * 60 * 1000); // １ヵ月(31日)

/**
 * マイリストにデータ登録する.
 *
 * @param carNameEn	車名(英字)
 * @param carType	車種タイプ
 * @param carName	車名
 * @param carUrl	車種コンテンツURL
 * @param no		登録順番号(１〜)
 * @return 実行結果<br /> 0:登録成功, 1:登録失敗, 10:既に車種が20件登録済みで登録失敗
 */
function addmylist(carNameEn, carType, carName, carUrl, no) {
	if (null == carNameEn || null == carType) {
		return 1;
	}
	var cdata = __getListArray(getCookie(__upd_myListKey));
	if (__upd_myListMax <= cdata.length) {
		return 10;
	}
	var arr = new Array();
	if (cdata.length <= 0) {
		arr.push(new Array(carNameEn, carType));
	} else {
		var flag = true;
		if (!no) {
			arr.push(new Array(carNameEn, carType));
			no = cdata.length + 1;
			flag = false;
		}
		for (var i = 0; i < cdata.length; i++) {
			if ((i + 1) == no) {
				arr.push(new Array(carNameEn, carType));
				flag = false;
			} else {
				if (carNameEn != cdata[i].carNameEn) {
					var obj = cdata[i];
					arr.push(new Array(obj.carNameEn, obj.carType));
				}
			}
		}
		if (flag) {
			arr.push(new Array(carNameEn, carType));
		}
		if (__upd_myListMax < arr.length) {
			return 10;
		}
	}
	if (!setCookie(__upd_myListKey, __getCookieString(arr))) {
		return 1;
	}
	return 0;
}

/**
 * マイリストからデータを削除する.
 *
 * @param carNameEn	車名(英字)
 * @return 実行結果<br /> 0:削除成功, 1:削除失敗
 */
function delmylist(carNameEn) {
	if (null == carNameEn) {
		return 1;
	}
	var cdata = __getListArray(getCookie(__upd_myListKey));
	var arr = new Array();
	for (var i = 0; i < cdata.length; i++) {
		if (carNameEn != cdata[i].carNameEn) {
			var obj = cdata[i];
			arr.push(new Array(obj.carNameEn, obj.carType));
		}
	}
	if (!setCookie(__upd_myListKey, __getCookieString(arr))) {
		return 1;
	}
	return 0;
}

/**
 * 最近閲覧した車種を登録する.
 *
 * @param carNameEn	車名(英字)
 * @param carType	車種タイプ
 * @param carName	車名
 * @param carUrl	コンテンツURL
 * @return 実行結果<br /> 0:登録成功, 1:登録失敗
 */
function addrecent(carNameEn, carType, carName, carUrl) {
	if (null == carNameEn || null == carType) {
		return 1;
	}
	var cdata = __getListArray(getCookie(__upd_dispCarKey));
	var arr = new Array();
	arr.push(new Array(carNameEn, carType));
	var rtn = 0;
	for (var i = 0; i < cdata.length; i++) {
		if (carNameEn != cdata[i].carNameEn) {
			var obj = cdata[i];
			arr.push(new Array(obj.carNameEn, obj.carType));
		}
		if (__dispListMax <= arr.length) {
			rtn = 1;
			break;
		}
	}
	if (!setCookie(__upd_dispCarKey, __getCookieString(arr))) {
		return 1;
	}
	return rtn;
}

/**
 * マイリストにデータを保存する.
 *
 * @param arr 登録配列データ
 * @return 実行結果 true:成功, false:失敗
 */
function addmylistArray(arr) {
	return setCookie(__upd_myListKey, __getCookieString(arr));
}
/**
 * 最近閲覧した車種にデータを保存する.
 *
 * @param arr 登録配列データ
 * @return 実行結果 true:成功, false:失敗
 */
function addrecentArray(arr) {
	return setCookie(__upd_dispCarKey, __getCookieString(arr));
}

/**
 * マイリスト情報を取得する.
 *
 * @return マイリスト情報
 */
function getmylist() {
	var rtn = __getListArray(getCookie(__upd_myListKey));
	addmylistArray(__getCookieArray(rtn));
	return __getListArray(getCookie(__upd_myListKey));
}

/**
 * 最近閲覧した車種を取得する.
 *
 * @return 最近閲覧した車種情報
 */
function getrecent() {
	var rtn = __getListArray(getCookie(__upd_dispCarKey));
	addrecentArray(__getCookieArray(rtn));
	return __getListArray(getCookie(__upd_dispCarKey));
}
/**
 * 
 */
function __getCookieArray(arr) {
	var rtn = new Array();
	for (var i = 0; i < arr.length; i++) {
		rtn[i] = new Array(arr[i].carNameEn, arr[i].carType);
	}
	return rtn;
}
/**
 * リスト情報を配列にして返す.
 *
 * @param data	リスト情報
 * @return 配列情報
 */
function __getListArray(data) {
	var dat;
	var arr = new Array();
	var datas = data.split(__list_separater);
	var cnt = 0;
	for (var i = 0; i < datas.length; i++) {
		var mlist = datas[i].split(__data_separater);
		if (mlist.length < 2) {
			continue;
		}
		dat = tidSeriesInfo.get(mlist[0], mlist[1]);
		if (dat != null) {
			arr[cnt] = new Array();
			arr[cnt].carNameEn = mlist[0];
			arr[cnt].carType = mlist[1];
			arr[cnt].carName = dat.carName;
			arr[cnt++].carUrl = dat.carUrl;
		}
	}
	return arr;
}

/**
 * Cookie保存用文字列に変換する.
 *
 * @param arr	保存データ
 */
function __getCookieString(arr) {
	if (null == arr || 0 == arr.length) {
		return '';
	}
	var str = new Array();
	for (var i = 0; i < arr.length; i++) {
		if (tidSeriesInfo.contain(arr[i][0])) {
			str.push(arr[i].join(__data_separater));
		}
	}
	return str.join(__list_separater);
}

/**
 * Cookieに値をセットする(保持期間 31日).
 *
 * @param name	セットするキー名
 * @param value	セットする値
 */
function setCookie(name, value) {
	if (!name) {
		return false;
	}
	if (null == value) {
		value = '';
	}
	// 保持期間設定
	var date = new Date();
	date.setTime(date.getTime() + __expires)
	// 文字列作成
	var arr = new Array();
	arr.push(name + "=" + encodeURIComponent(value));
	arr.push('expires=' + date.toUTCString());
	arr.push('path=/');
	document.cookie = arr.join(';');
	return true;
}

/**
 * Cookieから値を取り出す.
 *
 * @param name	取得するキー名
 * @return 取得した値
 */
function getCookie(name) {
	var value = '';
	if (document.cookie && document.cookie != '') {
		var cookies = document.cookie.split(';');
		for (var i = 0; i < cookies.length; i++) {
			var cookie = cookies[i].replace(/^\s+|\s+$/g, "");
			if (cookie.substring(0, name.length + 1) == (name + '=')) {
				value = decodeURIComponent(cookie.substring(name.length + 1));
				break;
			}
		}
	}
	return value;
}

/**
 * 公開車種情報
 */
var tidSeriesInfo;
(function() {
	var url = '/service/carlineup/sc/res/tidseriesinfo.xml';
	var urlwel = '/service/carlineup/sc/res/tidseriesinfo_welcab.xml';
	var arrDef = new Array();
	var arrWel = new Array();
	var flag = false;
	var flagwel = false;
	var flagser = false;
	var error = false;
	var strCL = '\n'
	var seriesConf;
	jQuery.ajaxSetup({ error : errorFnc });
	jQuery.get(url, successFnc, 'xml');
	jQuery.get(urlwel, successFncWel, 'xml');
	jQuery.get('/service/carlineup/sc/res/carlineup_series.conf', successFncSeries);
	jQuery.ajaxSetup({ error : '' });
	/**
	 * 
	 */
	function errorFnc() {
		error = true;
	}
	/**
	 *
	 */
	function successFnc(xml) {
		setXML(xml, true);
		flag = true;
	}
	function successFncWel(xml) {
		setXML(xml, false);
		flagwel = true;
	}
	function successFncSeries(text) {
		seriesConf = unionCL(text).split(strCL);
		flagser = true;
	}
	function setXML(xml, flag) {
		var obj = jQuery('outline[@type=Car]', xml);
		for (var i = 0; i < obj.length; i++) {
			var arr = new Array();
			arr.carNameEn = getTypeValue(obj[i], 'SeriesCode');
			arr.carName = getTypeValue(obj[i], 'CarName');
			arr.carUrl = getTypeValue(obj[i], 'CarInformationLink');
			arr.carImage = getTypeValue(obj[i], 'CarImage');
			if (flag) {
				arrDef.push(arr);
			} else {
				arrWel.push(arr);
			}
		}
	}
	function getTypeValue(obj, type) {
		return jQuery('outline[@type=' + type + ']', obj).attr('value');
	}
	function unionCL(str) {
		if (null == str) {
			return '';
		}
		return str.replace(/\r\n/g, strCL).replace(/\r/g, strCL);
	}
	tidSeriesInfo = {
		get : function(carNameEn, carType) {
			if (error) {
				return null;
			}
			if (!carNameEn) {
				return null;
			}
			var arr = arrDef;
			if (carType && 'W' == carType.toUpperCase()) {
				arr = arrWel;
			}
			for (var i = 0; i < arr.length; i++) {
				if (carNameEn == arr[i].carNameEn) {
					return arr[i];
				}
			}
			return null;
		},
		ready : function() {
			return flag && flagwel && flagser;
		},
		contain : function(carNameEn) {
			for (var i = 0; i < seriesConf.length; i++) {
				if (carNameEn == seriesConf[i]) {
					return true;
				}
			}
			return false;
		}
	}
})();

