function calculateFromNingetsu() {
	var baseNinnichi = setDefaultBaseNinnichi( document.getElementById( 'baseNinnichi' ).value );
	var baseNinji = setDefaultBaseNinji( document.getElementById( 'baseNinji' ).value );
	var inputNingetsu = setDefaultInputNingetsu( document.getElementById( 'inputNingetsu' ).value );

	document.getElementById( 'baseNinnichi' ).value = baseNinnichi;
	document.getElementById( 'baseNinji' ).value = baseNinji;
	document.getElementById( 'inputNingetsu' ).value = inputNingetsu;

	var outputNingetsu = inputNingetsu;
	var outputNinnichi = inputNingetsu * baseNinnichi;
	var outputNinji = inputNingetsu * baseNinnichi * baseNinji;

	displayResult( outputNingetsu, outputNinnichi, outputNinji );
}

function calculateFromNinnichi() {
	var baseNinnichi = setDefaultBaseNinnichi( document.getElementById( 'baseNinnichi' ).value );
	var baseNinji = setDefaultBaseNinji( document.getElementById( 'baseNinji' ).value );
	var inputNinnichi = setDefaultInputNinnichi( document.getElementById( 'inputNinnichi' ).value );

	document.getElementById( 'baseNinnichi' ).value = baseNinnichi;
	document.getElementById( 'baseNinji' ).value = baseNinji;
	document.getElementById( 'inputNinnichi' ).value = inputNinnichi;

	var outputNingetsu = inputNinnichi / baseNinnichi;
	var outputNinnichi = inputNinnichi;
	var outputNinji = inputNinnichi * baseNinji;

	displayResult( outputNingetsu, outputNinnichi, outputNinji );
}

function calculateFromNinji() {
	var baseNinnichi = setDefaultBaseNinnichi( document.getElementById( 'baseNinnichi' ).value );
	var baseNinji = setDefaultBaseNinji( document.getElementById( 'baseNinji' ).value );
	var inputNinji = setDefaultInputNinji( document.getElementById( 'inputNinji' ).value );

	document.getElementById( 'baseNinnichi' ).value = baseNinnichi;
	document.getElementById( 'baseNinji' ).value = baseNinji;
	document.getElementById( 'inputNinji' ).value = inputNinji;

	var outputNingetsu = inputNinji / baseNinji / baseNinnichi;
	var outputNinnichi = inputNinji / baseNinji;
	var outputNinji = inputNinji;

	displayResult( outputNingetsu, outputNinnichi, outputNinji );
}

function displayResult( outputNingetsu, outputNinnichi, outputNinji ) {
	var basePrice = setDefaultBasePrice( document.getElementById( 'basePrice' ).value * 10000 );

	document.getElementById( 'basePrice' ).value = basePrice / 10000;

	document.getElementById( 'outputNingetsu' ).value = outputNingetsu;
	document.getElementById( 'outputNinnichi' ).value = outputNinnichi;
	document.getElementById( 'outputNinji' ).value = outputNinji;

	document.getElementById( 'outputPriceWithoutTax' ).value = parseInt( outputNingetsu * basePrice ) / 10000;
	document.getElementById( 'outputPriceWithTax' ).value = parseInt( outputNingetsu * basePrice * 1.05 ) / 10000;
}

function calculateDate() {
	var outputNinnichi = setDefaultOutputNinnichi( document.getElementById( 'outputNinnichi' ).value );
	var inputManPower = setDefaultInputManPower( document.getElementById( 'inputManPower' ).value );
	var inputYear = setDefaultInputYear( document.getElementById( 'inputYear' ).value );
	var inputMonth = setDefaultInputMonth( document.getElementById( 'inputMonth' ).value );
	var inputDay = setDefaultInputDay( document.getElementById( 'inputDay' ).value );
	var date = new Date( inputYear, inputMonth - 1, inputDay, 0, 0, 0 );
	var dateNormal = new Date();
	var dateAbnormal = new Date();
	var dt = date.getTime();

	var normal = dt + outputNinnichi * 24 * 60 * 60 * 1000 * 7 / inputManPower / 5 - 1;
	var abnormal = dt + outputNinnichi * 24 * 60 * 60 * 1000 / inputManPower - 1;

	if ( outputNinnichi == 0 ) {
		normal = normal + 1;
		abnormal = abnormal + 1;
	}

	document.getElementById( 'outputNinnichi' ).value = outputNinnichi;
	document.getElementById( 'inputManPower' ).value = inputManPower;
	document.getElementById( 'inputYear' ).value = inputYear;
	document.getElementById( 'inputMonth' ).value = inputMonth;
	document.getElementById( 'inputDay' ).value = inputDay;

	dateNormal.setTime( normal );
	dateAbnormal.setTime( abnormal );

	document.getElementById( 'outputNormalDate' ).value = dateNormal.getFullYear() + "/" + ( dateNormal.getMonth() + 1 ) + "/" + dateNormal.getDate();
	document.getElementById( 'outputAbnormalDate' ).value = dateAbnormal.getFullYear() + "/" + ( dateAbnormal.getMonth() + 1 ) + "/" + dateAbnormal.getDate();
}

function setDefaultDate() {
	var date = new Date();

	document.getElementById( 'inputYear' ).value = date.getFullYear();
	document.getElementById( 'inputMonth' ).value = date.getMonth() + 1;
	document.getElementById( 'inputDay' ).value = date.getDate();
}

function setDefaultInputNingetsu( inputNingetsu ) {
	return nvl( inputNingetsu, 0 );
}

function setDefaultInputNinnichi( inputNinnichi ) {
	return nvl( inputNinnichi, 0 );
}

function setDefaultInputNinji( inputNinji ) {
	return nvl( inputNinji, 0 );
}

function setDefaultOutputNinnichi( outputNinnichi ) {
	return nvl( outputNinnichi, 0 );
}

function setDefaultBaseNinnichi( baseNinnichi ) {
	return nvl( baseNinnichi, 20 );
}

function setDefaultBaseNinji( baseNinji ) {
	return nvl( baseNinji, 8 );
}

function setDefaultBasePrice( basePrice ) {
	return nvl( basePrice, 800000 );
}

function setDefaultInputYear( inputYear ) {
	return nvl( inputYear, ( new Date() ).getFullYear() );
}

function setDefaultInputMonth( inputMonth ) {
	return nvl( inputMonth, ( new Date() ).getMonth() + 1 );
}

function setDefaultInputDay( inputDay ) {
	return nvl( inputDay, ( new Date() ).getDate() );
}

function setDefaultInputManPower( inputManPower ) {
	return nvl( inputManPower, 1 );
}

function nvl( obj, value ) {
	if ( isEmpy( obj ) ) {
		obj = value;
	}

	return obj;
}

function isEmpy( obj ) {
	var flg = false;

	if ( obj == null ) {
		flg = true;
	} else if ( obj == "" ) {
		flg = true;
	}

	return flg;
}

