﻿/*
 * IChing 1.0 - 易经六十四卦
 *
 * Copyright (c) 2007 Zhiwei Ou (ouzhiwei@gmail.com)
 * licensed under the GPL licenses.
 *
 * 参考：
 *  http://zh.wikipedia.org/wiki/易经
 *  http://commons.wikimedia.org/wiki/I_Ching
 *
 * $Date: 2007-09-03 $
 * $Rev: $
 */

//*******************************************************
// 0-7 的二进制字符串
//*******************************************************
var arrBinStr = ['000', '001', '010', '011', '100', '101', '110', '111'];

//*******************************************************
// 八卦数据
//*******************************************************
var Trigram = {
	'111': {'name':'乾', 'nature':'天', 'temper':'健', 'family':'父',   'orientation':'西北'},
	'110': {'name':'兑', 'nature':'泽', 'temper':'悦', 'family':'少女', 'orientation':'西'},
	'101': {'name':'离', 'nature':'火', 'temper':'丽', 'family':'中女', 'orientation':'南'},
	'100': {'name':'震', 'nature':'雷', 'temper':'动', 'family':'长男', 'orientation':'东'},
	'011': {'name':'巽', 'nature':'风', 'temper':'入', 'family':'长女', 'orientation':'东南'},
	'010': {'name':'坎', 'nature':'水', 'temper':'陥', 'family':'中男', 'orientation':'北'},
	'001': {'name':'艮', 'nature':'山', 'temper':'止', 'family':'少男', 'orientation':'东北'},
	'000': {'name':'坤', 'nature':'地', 'temper':'顺', 'family':'母', 	'orientation':'西南'}	
};


//*******************************************************
// 六十四卦数据
//*******************************************************
var Hexagram = {
	'111111': {'name':'乾',		'order':1},
	'111110': {'name':'夬',		'order':43},
	'111101': {'name':'大有',	'order':14},
	'111100': {'name':'大壮', 	'order':34},
	'111011': {'name':'小畜', 	'order':9},
	'111010': {'name':'需', 	'order':5},
	'111001': {'name':'大畜', 	'order':26},
	'111000': {'name':'泰', 	'order':11},
	'110111': {'name':'履', 	'order':10},
	'110110': {'name':'兑', 	'order':58},
	'110101': {'name':'睽', 	'order':38},
	'110100': {'name':'归妹', 	'order':54},
	'110011': {'name':'中孚', 	'order':61},
	'110010': {'name':'节',		'order':60},
	'110001': {'name':'损',		'order':41},
	'110000': {'name':'临',		'order':19},
	'101111': {'name':'同人',	'order':13},
	'101110': {'name':'革',		'order':49},
	'101101': {'name':'离',		'order':30},
	'101100': {'name':'豊', 	'order':55},
	'101011': {'name':'家人', 	'order':37},
	'101010': {'name':'既济', 	'order':63},
	'101001': {'name':'贲', 	'order':22},
	'101000': {'name':'明夷', 	'order':36},
	'100111': {'name':'无妄',	'order':25},
	'100110': {'name':'随',		'order':17},
	'100101': {'name':'噬嗑',	'order':21},
	'100100': {'name':'震', 	'order':51},
	'100011': {'name':'益', 	'order':42},
	'100010': {'name':'屯', 	'order':3},
	'100001': {'name':'颐', 	'order':27},
	'100000': {'name':'复', 	'order':24},
	'011111': {'name':'姤',		'order':44},
	'011110': {'name':'大过',	'order':28},
	'011101': {'name':'鼎',		'order':50},
	'011100': {'name':'恒', 	'order':32},
	'011011': {'name':'巽', 	'order':57},
	'011010': {'name':'井', 	'order':48},
	'011001': {'name':'蛊', 	'order':18},
	'011000': {'name':'升', 	'order':46},
	'010111': {'name':'讼',		'order':6},
	'010110': {'name':'困',		'order':47},
	'010101': {'name':'未济',	'order':64},
	'010100': {'name':'解', 	'order':40},
	'010011': {'name':'涣', 	'order':59},
	'010010': {'name':'坎', 	'order':29},
	'010001': {'name':'蒙', 	'order':4},
	'010000': {'name':'师', 	'order':7},
	'001111': {'name':'遁',		'order':33},
	'001110': {'name':'咸',		'order':31},
	'001101': {'name':'旅',		'order':56},
	'001100': {'name':'小过', 	'order':62},
	'001011': {'name':'渐', 	'order':53},
	'001010': {'name':'蹇', 	'order':39},
	'001001': {'name':'艮', 	'order':52},
	'001000': {'name':'谦', 	'order':15},
	'000111': {'name':'否',		'order':12},
	'000110': {'name':'萃',		'order':45},
	'000101': {'name':'晋',		'order':35},
	'000100': {'name':'豫',		'order':16},
	'000011': {'name':'观', 	'order':20},
	'000010': {'name':'比', 	'order':8},
	'000001': {'name':'剥', 	'order':23},
	'000000': {'name':'坤',		'order':2}
};

//*******************************************************
// 卦名次序歌
//*******************************************************
var HexaOrder = '乾坤屯蒙需讼师 | 比小畜兮履泰否 | '
			  + '同人大有谦豫随 | 蛊临观兮噬嗑贲 | '
			  + '剥复无妄大畜颐 | 大过坎离三十备 | '
			  + '咸恒遁兮及大壮 | 晋与明夷家人睽 | '
			  + '蹇解损益夬姤萃 | 升困井革鼎震继 | '
			  + '艮渐归妹豊旅巽 | 兑涣节兮中孚至 | '
			  + '小过既济兼未济 | 是为下经三十四';

//*******************************************************
// 八卦描述之取得
//*******************************************************
function getTrigramInfo(strId) {
	return Trigram[strId]['name']
		+ '<br />' + '【自然】' + Trigram[strId]['nature']
		+ '<br />' + '【性情】' + Trigram[strId]['temper']
		+ '<br />' + '【家族】' + Trigram[strId]['family']
		+ '<br />' + '【方位】' + Trigram[strId]['orientation'];
}

//*******************************************************
// 六十四卦组合名之取得
//*******************************************************
function getHexagramTitle(strBin) {
	var dId = strBin.substring(0,3);
	var uId = strBin.substring(3,6);
	
	if(dId == uId) {
		return Hexagram[strBin]['order'] + '.' + Trigram[uId]['name'] + '为' + Trigram[uId]['nature'];
	} else {
		return Hexagram[strBin]['order'] + '.' + Trigram[uId]['nature'] + Trigram[dId]['nature'] + Hexagram[strBin]['name'];
	}
}

//*******************************************************
// 中文数字之取得
//*******************************************************
function getCnNumber(iNum) {
	var arrCNum = new Array('零', '一', '二', '三', '四', '五', '六', '七', '八', '九');
	return arrCNum[iNum];
}

//*******************************************************
// 随机二进制数字之取得（ 0 或 1 ），占卜用
//*******************************************************
function getRandomBit() {
	return Math.round(Math.random());
}

function getRandomBit2() {
	var today = new Date(); 
	var seed = (today.getTime() * 9301 + 49297) % 233280; 
	return Math.floor(seed/233280.0 * 2); 
}

