//***********************
//*						*
//*	Search engine part	*
//*						*
//***********************
var schObj = new Object();

schObj.dsDepartment = new Spry.Data.XMLDataSet("xml/medical_department.xml" , "medical_department/department", {useCache: false});
schObj.dsSupplies = new Spry.Data.XMLDataSet("xml/medical_supplies_db.xml" , "medical_supplies", {useCache: false});

schObj.dsSupplies_Ok = true;
schObj.dsDepartment_Ok = true;
schObj.obDepartment = new Object();

schObj.obSupplies = new Object();
schObj.all_Ok = false;
schObj.dsIntId="";
schObj.setCnt =0;

schObj.departmentName = new Array();	//診療科名称配列

schObj.searchValue = 0;
schObj.searchName = "";
schObj.xPath ="";			// schObj.xPath初期値
schObj.getId = "";
schObj.thisObj = this;
schObj.msgObj=null;
schObj.firstLoad = true;	//初回ロードflag

schObj.departmentID = new Object();		//検索用index

//xmlコールバック処理
schObj.dsDepartment.addObserver(schObj.obDepartment);
schObj.obDepartment.onPostLoad = function(dataSet, data) {
	schObj.dsDepartment_Ok = true;
}

schObj.dsSupplies.addObserver(schObj.obSupplies);
schObj.obSupplies.onPostLoad = function(dataSet, data) {
	schObj.dsSupplies_Ok = true;
}

window.onload = function() {
	schObj.msgObj = new msgControler();
	schObj.msgObj.msgDisp(0);	//「読み込み中」メッセージ表示
	schObj.dsIntId = setInterval("schObj.selVisible()",100); //  0.1秒周期にデータセット準備済チェック
}


schObj.selVisible = function() {
	
	var dsp_Ok = false 

	if(schObj.dsSupplies_Ok && schObj.dsDepartment_Ok)	dsp_Ok = true; 

	if(dsp_Ok) {
		
		delAllObserver();			//領域 Observer 削除
		
		schObj.searchValue =0;

		initRunner();

		schObj.all_Ok = true;

		clearInterval(schObj.dsIntId);
		
	}

	//領域 Observer 削除
	function delAllObserver() {
		if(schObj.dsSupplies_Ok) schObj.dsSupplies.removeObserver(schObj.obSupplies);
		if(schObj.dsDepartment_Ok) schObj.dsDepartment.removeObserver(schObj.obDepartment);
	}
	
	//初期表示処理
	function initRunner(){
		schObj.msgObj.msgClear();	//メッセージクリア
		if($("developmentContentArea")) $("developmentContentArea").style.display="block";
		if($("searchBlockArea")) $("searchBlockArea").style.display="block";
		if($("searchArrow")) $("searchArrow").style.display="block";

	}

}


//selectイベントで呼ばれる処理
schObj.selectResult = function(thisObj,rowNum) {
	
	schObj.searchValue = Number(thisObj.value);
	schObj.getId = thisObj.id;

	var depMax = schObj.dsDepartment.getData().length;
	var i=0;
	while(i<depMax) {
		var xIndex = schObj.searchName = schObj.dsDepartment.getData()[i].index;
		if(schObj.searchValue ==  xIndex) {
			schObj.searchName = schObj.dsDepartment.getData()[i].name;
			break;
		}
		
		i++;
	}

}
//データ検索、表示
schObj.dataDspInit = function() {
	if(schObj.searchValue != 0) {
		$("searchDataBlock").style.display = "none";
		schObj.msgObj.msgDisp(10);
		schObj.dsIntId = setTimeout("submitRun()",1000);//
	} else {
		schObj.msgObj.msgDisp(200);
	}
	submitRun = function() {
		$("searchBlockForm").submit();
	}	
}


//データ検索、表示
schObj.dataDspRun = function() {

	schObj.setCnt = null;

	if(schObj.searchValue != 0) {

		if(schObj.firstLoad) {
			depArrayMake();		//初回ロード時 診療科名称配列作成、データ読み込み
			searchDataLoad();
			schObj.firstLoad = false;
		}

		searchDataDsp();		//検索＆表示
	
	} else {
		schObj.msgObj.msgClear();	// メッセージ消去
	}

	location.href="#prList";	//検索結果ページ内リンク

	//診療科名称配列作成
	function depArrayMake() {
		if(schObj.dsDepartment.getData().length !=0) {
			var dMax = schObj.dsDepartment.getData().length;
			var i=0;
			while(i<dMax) {
				var dIndex = schObj.dsDepartment.getData()[i].index;
				schObj.departmentName[dIndex] = schObj.dsDepartment.getData()[i].name;
				i++;
			}

		}
	
	}

	//データ表示/非表示切り替え
	function searchDataDsp() {
		
		schObj.dsSupplies.filter(null);
		schObj.dsSupplies.filter(myFilterFunc);			// Filter the rows in the data set.

		schObj.setCnt = schObj.dsSupplies.getData().length;	//検索結果件数

		if(schObj.setCnt ==0) {
			$("searchDataBlock").style.display = "none";
			schObj.msgObj.msgDisp(100);	//「対象データがありません」メッセージ表示
		} else {
			schObj.msgObj.msgClear();	// メッセージ消去
			$("searchCapt").innerHTML ="「" + schObj.searchName + "」" + "に一致する開発中の新薬&nbsp;(" + schObj.setCnt + "件)";
			$("searchDataBlock").style.display = "block";
		}

	}


	//検索用データロード
	function searchDataLoad() {
		schObj.xPath = 'medical_supplies/supplies';
		schObj.dsSupplies.useCache = false;
		schObj.dsSupplies.method = "POST";
		schObj.dsSupplies.setXPath(schObj.xPath);		// データセットにschObj.xPathを再設定
	}
	

	// データフィルター処理/表示用診療科名セット
	function myFilterFunc(dataSet, row, rowNumber)
	{
		var dIndex = new Array();
		var serchStat = -1;
		if(row["department_index"]) {		// データフィルター処理
			dIndex = row["department_index"].split(",");
			serchStat = dIndex.indexOf(schObj.searchValue.toString());
		}

		if(serchStat !=-1) {
			var depIndexNum = dIndex[serchStat];	//表示用診療科名セット
			row["department"] = schObj.departmentName[depIndexNum];
			return row;		// Return the row to keep it in the data set.
		} else {
			return null;	// Return null to remove the row from the data set.
		}
		
	}
	
}



//メッセージ制御クラス
function msgControler() {
	msgTbl = {0:"読み込み中...", 10:"検索中です。しばらくお待ちください。...", 100:"該当するデータがありません。", 200:"「診療科名」を選択して下さい。"}

	msgControler.prototype.msgClear = function() {
		$("initMsgArea").style.display ="none";
		$("searchMsgArea").style.display ="none";
		$("searchArrow").style.display ="block";
	}


	msgControler.prototype.msgDisp = function(num) {
		var msgWk ="";
		if(num == 0) {
			if(msgTbl[num]) msgWk = '<p>' + msgTbl[num] + '</p>';
		} else {
			if(msgTbl[num]) msgWk = '<p>' + msgTbl[num] + '</p>';
		}
		
		if(msgWk !="") {
			if(num == 0) {
				$("initMsgArea").style.display ="block";
				$("initMsgArea").innerHTML = msgWk;
			} else {
				$("searchMsgArea").style.display ="block";
				$("searchMsgArea").innerHTML = "";
				if(num == 10) {
					$("searchArrow").style.display ="none";
				} else {
					$("searchArrow").style.display ="block";
				}
				if((num == 10)||(num == 100)) $("searchMsgArea").innerHTML = "「" + schObj.searchName + "」<br />";
				$("searchMsgArea").innerHTML += msgWk;
			}
		} 
	
	}

}


/*-----------------------
Anti-cash measure module
-----------------------*/

schObj.getRandam = function(){

var retRndNum = Math.random()* 65535;

	if(retRndNum == 0){

		retRndNum =1;

	}else{

		retRndNum =Math.ceil(retRndNum);

	}

	return retRndNum;

}



