/* 定数定義 */
var Hasu_45 = "1";
var Hasu_KS = "2";
var Hasu_KA = "3";

var RYTK1_NONE = "0";		//R未指定
var RYTK1_MI = "1";			//R未
var RYTK1_SUMI = "2";		//R済
var RYTK2_BETU = "0";		//R別
var RYTK2_KOMI = "1";		//R込
var RYTK3_NOTAX = "0";		//R非課税
var RYTK3_TAX = "1";		//R課税

var CAPTION_N = "リサイクル料";
var CAPTION_Y = "リ預相当額";

var SotoZei 	= "1";			//外税
var UchiZei 	= "2";			//内税

var GMCTG_SHAHANU = "1";		//車販U
var GMCTG_SHAHANN = "2";		//車販N

//ローン頭金端数処理区分
var Hasu_Nasi 	= "0";		//切捨無し
var Hasu_Jyu 	= "1";		//十未満
var Hasu_Hyaku 	= "2";		//百未満
var Hasu_Sen 	= "3";		//千未満
var Hasu_Man 	= "4";		//万未満

//ローンパターン
var Loan_Normal = "0";		    //通常ローン
var Loan_SueokiAdd = "1";		//通常ローン(据置分月利有)
var Loan_SueokiNoAdd = "2";		//据置ローン(据置分月利無)
var Loan_SueokiAddB = "3";		//通常ローン(据置分月利有B)
var Loan_SueokiAddC = "4";		//通常ローン(据置分月利有C)
var Loan_SueokiAddN = "5";		//通常ローン(ネクスト)

//端数処理
//	gak:	処理値
//	keta:	処理桁
//端数処理のデフォルトは四捨五入
function UxCalcHasuShori(gak, Hasu, keta) {
	var sign;
	if (gak < 0) {
		sign = -1;
	} else {
		sign = 1;
	}
	gak = gak * sign;

	//まず対象の桁未満を切捨てる(切り上げ時の不具合対応)
	var result = Math.abs(gak) * Math.pow(10, (keta));
	//var result = UxCalcOperation(gak, Math.pow(10, keta), "*");
	result = Math.floor(result);
	//桁を元に戻す
	//result = result / Math.pow(10, (keta));
	result = UxCalcOperation(result, Math.pow(10, keta),"/");
	//メインルーチン
	if (keta > 0) {
		result = UxCalcOperation(result, Math.pow(10, (keta-1)), "*");
	}else{
		result = UxCalcOperation(result, Math.pow(10, (keta * (-1) + 1)), "/");
	}
	//result = UxCalcOperation(result, Math.pow(10, (keta-1)), "*");
	if (Hasu == Hasu_KA) {
		result = Math.ceil(result);
	} else if (Hasu == Hasu_KS) {
		result = Math.floor(result);
	} else if (Hasu == Hasu_45) {
		//result = Math.floor(result + 0.5);
		result = Math.floor(UxCalcOperation(result, 0.5, "+"));
	}

	//result = result / Math.pow(10, (keta-1)) * sign;
	result = UxCalcOperation(UxCalcOperation(result, Math.pow(10, (keta-1)), "/"), sign, "*");
	
	return result;
}

//税込額計算
//	gak:	税抜額
//	ritu:	税率
//  小数点以下１位を処理
function UxCalcZeiKomi(gak, hasu, ritu) {
	//符号変換は端数処理で実施
	///var sign;
	//if (gak < 0) {
	//	sign = -1;
	//} else {
	//	sign = 1;
	//}
	//gak *= sign;
	//var result = (gak - 0) * (100 + (ritu - 0)) / 100;
	var result = UxCalcOperation(UxCalcOperation(gak,UxCalcOperation(100, ritu, "+"),"*"),100,"/");
	//result *= sign;
	return UxCalcHasuShori(result, hasu, 1);
}

//税抜額計算
//	gak:	税込額
//	ritu:	税率
//  小数点以下１位を処理
function UxCalcZeiNuki(gak, hasu, ritu) {
	//符号変換は端数処理で実施
	//var sign;
	//if (gak < 0) {
	//	sign = -1;
	//} else {
	//	sign = 1;
	//}
	//gak *= sign;
	//var zei = ((gak - 0) * (ritu - 0)) / (100 + (ritu - 0));
	zei = UxCalcZeiFromKomi(gak,hasu,ritu);
	zei = UxCalcHasuShori(zei, hasu, 1);
	var result = (gak - zei);
	//result *= sign;
	return result;

	//var result = (gak - 0) * (100 / (100 + (ritu - 0)));
	//result *= sign;
	//if (hasu == Hasu_KA) {
	//	return UxCalcHasuShori(result, Hasu_KS, 1);
	//} else if (hasu == Hasu_KS) {
	//	return UxCalcHasuShori(result, Hasu_KA, 1);
	//} else if (hasu == Hasu_45) {
	//	return UxCalcHasuShori(result, Hasu_45, 1);
	//}
}

//税込額から税額を算出
//	gak:	税込額
//	hasu:	端数処理区分
//	ritu:	税率
//  小数点以下１位を処理
function UxCalcZeiFromKomi(gak, hasu, ritu) {
	//符号変換は端数処理で実施
	//var sign;
	//if (gak < 0) {
	//	sign = -1;
	//} else {
	//	sign = 1;
	//}
	//gak *= sign;
	//var zei = ((gak - 0) * (ritu - 0)) / (100 + (ritu - 0));
	var zei = UxCalcOperation(UxCalcOperation(gak,ritu,"*"),UxCalcOperation(100, ritu, "+"),"/");
	var result = UxCalcHasuShori(zei, hasu, 1);
	//result *= sign;
	return result;

}

//税抜額から税額を算出
//	gak:	税抜額
//	hasu:	端数処理区分
//	ritu:	税率
//  小数点以下１位を処理
function UxCalcZeiFromNuki(gak, hasu, ritu) {
	//符号変換は端数処理で実施
	//var sign;
	//if (gak < 0) {
	//	sign = -1;
	//} else {
	//	sign = 1;
	//}
	//gak *= sign;
	//var zei = Number(gak) * Number(ritu) / 100;
	var zei = UxCalcOperation(UxCalcOperation(gak, ritu, "*"), 100, "/");
	var result = UxCalcHasuShori(zei, hasu, 1);
	//result *= sign;
	return result;

}

//桁あふれ丸め処理
//	gak:	金額
//	keta:	桁数
function UxMarume(gak, keta) {
	var sign;
	var maxval="";
	if (gak < 0) {
		sign = -1;
	} else {
		sign = 1;
	}
	gak *= sign;
	var i;
	for (i=0;i<keta;i++) {
		maxval += "9";
	}
	maxval = Number(maxval);
	if (gak > maxval) {
		gak = maxval;
	}
	result = gak;
	result *= sign;
	return result;
}

//演算関数(小数点の演算誤差を回避する関数)
//※必要なところでだけ使用すること
//	numberA:	演算対象値１
//	numberB:	演算対象値２
//	type:	演算種類(*,/,+,-)
function UxCalcOperation(numberA,numberB,type)
{
	var h=(type=="*")? "+":"-";
	var c=[UxCalcOperationSub(numberA),UxCalcOperationSub(numberB)];
	var A=c[0][1];
	var B=c[1][1];
	var pointA=c[0][0];
	var pointB=c[1][0];
	
	if (type=="*" || type=="/")
	{
		var k1=eval("numberA"+type+"numberB");
		var k2=eval("(A"+type+"B)");
		if (pointA+pointB==0) {
			return k1;
		}else if (UxCalcOperationSub(k1)[1]==k2) {
			return k1;
		} else {
			var d = UxCalcOperationSub(k2);
			var k3 = d[1];
			var pointD = d[0];
			return eval(k3+"/Math.pow(10,pointA"+h+"pointB+pointD)");
		}
	}
	else if (type=="+" || type=="-")
	{
		var pointL=pointA;
		if (pointA<pointB) pointL=pointB;
		numberA=UxCalcOperation(numberA,Math.pow(10,pointL),"*");
		numberB=UxCalcOperation(numberB,Math.pow(10,pointL),"*");
		return eval("numberA"+type+"numberB")/Math.pow(10,pointL);
	}
	else return 0
}
//演算関数のサブルーチン
function UxCalcOperationSub(number)
{
	number=""+number;
	if (number.indexOf(".")==-1) return [0,parseInt(number)];
	var po=number.split(".")[1].length;
	////var st=number.split(".").join("");
	////for (var i=0;i<st.length;i++) if (st.charAt(0)=="0") st=st.substr(1,st.length);
	//var stt=number.split(".").join("");
	//var st=stt.replace(/0+/,'');
	//return [po,parseInt(st)];
	var st=number.split(".").join("");
	return [po,parseInt(st, 10)];
}
