/**
 * データアクセス用関数群
 *
 * = 依存ライブラリ =
 * - prototype.js
 * - cookiemanager.js
 */
function initSetting() {
	// AIRかどうか判定
	if (!window.runtime) {
		return ;
	} else {
		return initSetting4air();
	}
}

function loadSetting() {
	// AIRかどうか判定
	if (!window.runtime) {
		return loadSetting4web();
	} else {
		return loadSetting4air();
	}
}
function saveSetting(aSettings) {
	// AIRかどうか判定
	if (!window.runtime) {
		return saveSetting4web(aSettings);
	} else {
		return saveSetting4air(aSettings);
	}
}


// データ読み込み (Cookieを使います)
function loadSetting4web() {
	var aLoads = new Object();
	
	var oCookieManager = new CookieManager({shelfLife:30});
	aLoads['address'] = decodeURI(oCookieManager.getCookie("address"));
	aLoads['lat']     = oCookieManager.getCookie("lat");
	aLoads['lng']     = oCookieManager.getCookie("lng");
	aLoads['range']   = oCookieManager.getCookie("range");
	aLoads['genre1']  = oCookieManager.getCookie("genre1");
	aLoads['genre2']  = oCookieManager.getCookie("genre2");
	aLoads['genre3']  = oCookieManager.getCookie("genre3");
	
	return makeLoadedSetting(aLoads);
}

// 読み込んだデータの整形をして返す.
function makeLoadedSetting(aLoads){
	var aSettings = new Object;
	
	aSettings['address'] = (aLoads['address']  ? aLoads['address'] : 'ginza');
	aSettings['lat']     = (aLoads['lat'] ? aLoads['lat'] : 35.671989);
	aSettings['lng']     = (aLoads['lng'] ? aLoads['lng'] : 139.763965);
	aSettings['range']   = (aLoads['range'] ? aLoads['range'] : 3);
	aSettings['range-s'] = convertRange(aSettings['range']);
	aSettings['genres']  = new Array();
	if (aLoads['genre1'])	aSettings['genres'].push(convertGenre(aLoads['genre1']));
	if (aLoads['genre2'])	aSettings['genres'].push(convertGenre(aLoads['genre2']));
	if (aLoads['genre3'])	aSettings['genres'].push(convertGenre(aLoads['genre3']));
	aSettings['genre1'] = (aLoads['genre1'] ? aLoads['genre1'] : '');
	aSettings['genre2'] = (aLoads['genre2'] ? aLoads['genre2'] : '');
	aSettings['genre3'] = (aLoads['genre3'] ? aLoads['genre3'] : '');
	
	return aSettings;
}

// データ書き込み (Cookieを使います)
function saveSetting4web(aSettings) {
	var oCookieManager = new CookieManager({shelfLife:30});
	oCookieManager.setCookie("address", encodeURI(aSettings['address']));
	oCookieManager.setCookie("lat",     aSettings['lat']);
	oCookieManager.setCookie("lng",     aSettings['lng']);
	oCookieManager.setCookie("range",   aSettings['range']);
	oCookieManager.setCookie("genre1",  aSettings['genre1']);
	oCookieManager.setCookie("genre2",  aSettings['genre2']);
	oCookieManager.setCookie("genre3",  aSettings['genre3']);
}

var db = null;
// データの初期化
function initSetting4air() {
	try {
		// DBに接続
		db = new air.SQLConnection();
		var file = air.File.applicationStorageDirectory.resolvePath("ohiruda.db");
		db.open(file);
		
		// テーブルを用意 (なければ作る)
		var oSQLStatement = new air.SQLStatement();
		oSQLStatement.sqlConnection = db;
		oSQLStatement.text  = 
			"CREATE TABLE IF NOT EXISTS setting" +
			"(address TEXT, lat REAL, lng REAL, range INTEGER," +
			" genre1 TEXT, genre2 TEXT, genre3 TEXT);";
		oSQLStatement.execute();
	} catch(error) {
		alert(error.toString());
	}
}
// データ読み込み (DBを使います)
function loadSetting4air() {
	try {
		// 設定を読み込む
		oSQLStatement = new air.SQLStatement();
		oSQLStatement.sqlConnection = db;
		
		oSQLStatement.text = "SELECT COUNT(*) as cnt FROM setting";
		oSQLStatement.execute();
		var oSQLResult = oSQLStatement.getResult();
		var iCount = oSQLResult.data[0]['cnt'];
		
		oSQLStatement.text = "SELECT * FROM setting";
		oSQLStatement.execute();
		
		// 読み込んだ内容の取得
		var oSQLResult = oSQLStatement.getResult();
	} catch(error) {
		alert(error.toString());
	}
	
	var aLoads = new Object;
	if (iCount > 0) {
		aLoads['address'] = oSQLResult.data[0]['address'];
		aLoads['lat']     = oSQLResult.data[0]['lat'];
		aLoads['lng']     = oSQLResult.data[0]['lng'];
		aLoads['range']   = oSQLResult.data[0]['range'];
		aLoads['genre1']  = oSQLResult.data[0]['genre1'];
		aLoads['genre2']  = oSQLResult.data[0]['genre2'];
		aLoads['genre3']  = oSQLResult.data[0]['genre3'];
	}
	
	return makeLoadedSetting(aLoads);
}

// データ書き込み (DBを使います)
function saveSetting4air(aSettings) {
	try {
		// 一旦設定を削除して、登録する
		oSQLStatement.text = "DELETE FROM setting";
		oSQLStatement.execute();
		oSQLStatement.text = "INSERT INTO setting VALUES (".interpolate(aSettings) +
			"'#{address}','#{lat}','#{lng}','#{range}',".interpolate(aSettings) +
			"'#{genre1}','#{genre2}','#{genre3}');".interpolate(aSettings);
		oSQLStatement.execute();
	} catch(error) {
		alert(error.toString());
	}
}

