/*------------------------------------------------------*/
/* Updated: 2010/12 */
/*------------------------------------------------------*/

jQuery(function($) {

$(document).ready(function(){





// *************************************************************** //
// 変数の宣言 //
// *************************************************************** //

var expenseXml = "/expense.xml";	// XMLファイルのURL
var ajaxTimeout = 10000;
var pathName = location.pathname;	// 現在のパス名
var pageName;	// 現在のページ名

var genderFlag;
var ageFlag;
var animateFlag = false;

var char1 = new Array(1,2,3,4,5,6,7,8,9,0);
var char2 = new Array("１","２","３","４","５","６","７","８","９","０");
var charCount;
var dataAge;

var btns = new Array;	// ボタンの配列
btns["disabled"] = $("#expense-check").find("img").attr("src");
btns["off"] = btns["disabled"].replace("-dis.", "-off.");
btns["on"] = btns["disabled"].replace("-dis.", "-on.");

var expenses = new Array();	// 保険料の配列
expenses["age"] = new Array();
expenses["male"] = new Array();
expenses["female"] = new Array();

var fadeSpeed = 250;
var slideSpeed = 500;
var price;





// *************************************************************** //
// XMLファイルの読み込み //
// *************************************************************** //

$.ajax({
	url: expenseXml,
	type: "GET",
	dataType: "xml",
	cache: false,
	timeout: ajaxTimeout,
	success: function(xml){
		getPathInfo();	// 現在のページ名を取得する関数へ
		getExpenseInfo(xml);	// 保険料のXML情報を取得する関数へ
	}
});





// *************************************************************** //
// 情報取得系関数 //
// *************************************************************** //

// 現在のページ名を取得する関数 --------------------------------- //

function getPathInfo() {

	if ( (pathName == "/") || (pathName == "/index.html") ) {
		pageName = "home";
	} else if ( (pathName == "/expense/") || (pathName == "/expense/index.html") ) {
		pageName = "expense";
	}
}





// 保険料のXML情報を取得する関数 --------------------------------- //

function getExpenseInfo(xml) {

	// 各カテゴリー情報の取得
	$(xml).find("expense").each(function(i) {
		expenses["age"][i] = i + 6;
		expenses["male"][i] = $(this).find("male").text();
		expenses["female"][i] = $(this).find("female").text();
	});
	
	setExpense();	// 保険料の初期設定を制御する関数へ
}





// 性別の選択値を変換・取得する関数 --------------------------------- //
function getGenderFlag() {

	// 男性が選択されている場合
	if ($("#expense-male").attr("checked") == true) {
		genderFlag = "male";

	// 女性が選択されている場合
	} else if ($("#expense-female").attr("checked") == true) {
		genderFlag = "female";

	// どちらも選択されていない場合
	} else {
		genderFlag = false;
	}
}





// 年齢の入力値を変換・取得する関数 --------------------------------- //
function getAgeFlag() {

	dataAge = $("#expense-age").val();

	// スペースが含まれている場合、スペースを削除
	if (dataAge.indexOf(" ") != -1) {
		dataAge = dataAge.replace(" ", "");
	}
	if (dataAge.indexOf("　") != -1) {
		dataAge = dataAge.replace("　", "");
	}

	// 2文字入力されていて、1文字目が「0」または「０」の場合、「0」または「０」を削除
	if (dataAge.length == 2) {
		if ( (dataAge.indexOf(0) == 0) || (dataAge.indexOf("０") == 0)) {
			dataAge = dataAge.charAt(1);
		}
	}

	// 全角数字が含まれている場合、全角数字を半角数字に変換
	while (dataAge.match(/[０-９]/)) {
		for (charCount = 0; charCount < char1.length; charCount++) {
			dataAge = dataAge.replace(char2[charCount], char1[charCount]);
		}
	}

	$("#expense-age").val(dataAge);

	// 6〜74が入力されている場合
	if ( (6 <= dataAge) && (dataAge <= 74)) {
		ageFlag = dataAge;

	// 6〜74以外が入力されている場合
	} else {
		ageFlag = false;
	}
}





// *************************************************************** //
// 制御系関数 //
// *************************************************************** //

// 保険料の初期設定を制御する関数 --------------------------------- //

function setExpense() {

	getGenderFlag();	// 性別の選択値を変換・取得する関数へ
	getAgeFlag();	// 年齢の入力値を変換・取得する関数へ
	
	// 入力値が満たされている場合
	if ( (genderFlag != false) && (ageFlag != false) ) {
		setAccept();
	}
	
	// トップページの場合、結果エリアを非表示
	if (pageName == "home") {
		$("#expense-result").hide();
	}

	// 関数の指定
	controlGender();	// 性別の制御
	controlAge();	// 年齢の制御
	controlBtn();	// ボタンの制御
}





// 性別の制御 --------------------------------- //

function controlGender() {

	$("#expense-male, #expense-female").change(function() {

		getGenderFlag();	// 性別の選択値を変換・取得する関数へ

		// 入力値が満たされている場合
		if ( (genderFlag != false) && (ageFlag != false) ) {
			setAccept();

		// 入力値が満たされていない場合
		} else {
			setUnaccept();
		}
	});
}





// 年齢の制御 --------------------------------- //

function controlAge() {

	$("#expense-age").change(function() {

		getAgeFlag();	// 年齢の入力値を変換・取得する関数へ

		// 入力値が満たされている場合
		if ( (genderFlag != false) && (ageFlag != false) ) {
			setAccept();

		// 入力値が満たされていない場合
		} else {
			setUnaccept();
		}
	});
}





// ボタンの制御 --------------------------------- //

function controlBtn() {

	// マウスオーバー時
	$("#expense-check").find("img").bind('mouseenter', function() {
		if ($(this).attr("src") == btns["off"]) {
			$(this).attr("src", btns["on"]);
		}
	});

	// マウスアウト時
	$("#expense-check").find("img").bind('mouseleave', function() {
		if ($(this).attr("src") == btns["on"]) {
			$(this).attr("src", btns["off"]);
		}
	});

	// クリック時
	$("#expense-check").find("img").click(function() {
		if (
			(genderFlag != false)
			&& (ageFlag != false)
			&& (animateFlag == false)
		) {
			showResult();
		}
	});
}





// 条件を満たしたときの処理 --------------------------------- //

function setAccept() {
	$("#expense-check").find("img").attr("src", btns["off"]).css("cursor", "pointer");
}





// 条件を満たさなかったときの処理 --------------------------------- //

function setUnaccept() {
	$("#expense-check").find("img").attr("src", btns["disabled"]).css("cursor", "default");
}





// 結果の表示 --------------------------------- //

function showResult() {

	// 男性を選択した場合
	if (genderFlag == "male") {
		price = expenses["male"][ageFlag - 6];

	// 女性を選択した場合
	} else if (genderFlag == "female") {
		price = expenses["female"][ageFlag - 6];
	}

	animateFlag = true;
	
	if ( (pageName == "home") && ($("#expense-result").is(":hidden")) ) {
		$("#expense-result").slideDown(slideSpeed, function() {
			animateFlag = false;
		});
	}

	$("#expense-number").fadeOut(fadeSpeed, function() {
		$(this).text(price).fadeIn(fadeSpeed, function() {
			animateFlag = false;
		});
	});
}





});

});





/*------------------------------------------------------*/
/* End */
/*------------------------------------------------------*/

