DictionaryManager = Class.create();

DICTIONARY_CREATION_PHP_DIR = "./";

Object.extend( DictionaryManager, {
	
	//* 辞書サービスをPlaygroundサーバにデプロイする
	deployDictionary: function(name, id, languages, data, filename, hasIcon){
		// DicitonaryManager.wait_3_seconds();
		try {
			var deploy_php_url 			= 'php/ajax/dictionary-creation/deploy-services/DeployDictionary.php';
			var parameterValue = DictionaryManager.getDeployParameter(name, id, languages, data, filename, hasIcon);
			var params = "params=" + encodeURIComponent(parameterValue);
			var result = DictionaryManager.requestPHP(deploy_php_url, 'post', params, DictionaryManager.doResultDeploy);
			return result;
		} catch (e) {
			throw e;
		}
	},
	
	//* 辞書サービスを配備可能なファイル形式でダウンロードする
	downloadDictionary: function(id, languages, data){
		// DicitonaryManager.wait_3_seconds();
		try {
			var download_php_url 		= 'php/ajax/dictionary-creation/deploy-services/DownloadDictionary.php';
			var parameterValue = DictionaryManager.getDownloadParameter(id, languages, data);
			var params = "params=" + encodeURIComponent(parameterValue);
			var result = DictionaryManager.requestPHP(download_php_url, 'post', params, DictionaryManager.doDownload);
			return result;
		} catch (e) {
			throw e;
		}
	},
	
	//* ユーザの所属組織がPlaygroudサーバにデプロイした辞書サービスのリストを得る
	getPublishedDictionaryList: function(){	
		try {
			var dictionaryList_php_url 	= 'php/ajax/dictionary-creation/deploy-services/GetPublishedDictionaryList.php';
			//var dictionaryList_php_url 	= 'GetPublishedDictionaryList.php';
			var result = DictionaryManager.requestPHP(dictionaryList_php_url, 'post', '', DictionaryManager.doResultDictionaryList);
			var dictList = new Array();
			var dictionaries = result.List;
			if (dictionaries == null || dictionaries.length == 0) {
				return dictList;
			}
			for (var i = 0; i < dictionaries.length; i++) {
				dictList.push([dictionaries[i].dictionaryName, dictionaries[i].dictionaryId, dictionaries[i].fileName, dictionaries[i].publisher, dictionaries[i].lastUpdate]);
			}
			return dictList;
		} catch (e) {
			throw e;
		}
	},
	
	//* ユーザの所属組織がPlaygroudサーバにデプロイした辞書サービスを消去する
	undeployDictionary: function(dictionaryID){
		// DicitonaryManager.wait_3_seconds();
		try {
			var unDeploy_php_url 		= 'php/ajax/dictionary-creation/deploy-services/UndeployDictionary.php';
			var parameterValue = DictionaryManager.getUnDeployDictionaryParameter(dictionaryID);
			var params = "params=" + encodeURIComponent(parameterValue);
			DictionaryManager.requestPHP(unDeploy_php_url, 'post', params, DictionaryManager.doResult);
			return true;
		} catch (e) {
			throw e;
		}
	},
	/**
	 * call request php.
	 * @param phpname call phpname.
	 * @param m method
	 * @param params http parameter
	 * @param func call back function
	 */
	requestPHP: function(phpname, m, params, func) {
		try {
			var request = new Ajax.Request(
			DICTIONARY_CREATION_PHP_DIR + phpname,
			{
				asynchronous : false,
				method		: m,
				// this parameter is type of json object.
				parameters	: params
			});
			var response = new Ajax.Response(request);
			if ((response.status >= 200) && (response.status < 300)) {
				var result = response.responseText;
				var obj = new Object();
				obj.method = func;
				var ret = obj.method(result);
				return ret;
			} else {
                                //var ret = response.responseTest;
                                //alert(ret);
				throw 'Server Error';
			}
		} catch (e) {
			throw e;
		}
	},

	/**
	 * function call back
	 * @param result HttpResponse message
	 * @return result
	 */
	doResult: function doResult(result) {
		var json = JSON.decode(result);
		if (json.Result == '0') {
			// alert("Error!! Message:" + json.Message);
			throw json.Message;
		}
		//alert("Success!! Message:" + json.Message);
		return true;
	},
	/**
	 * function call back
	 * @param result HttpResponse message
	 * @return result
	 */
	doResultDeploy: function(result) {
		var json = JSON.decode(result);
		if (json.Result == '0') {
			// alert("Error!! Message:" + json.Message);
			throw json.Message;
		}
		//alert("Success!! Message:" + json.Message);
		return json.WSDL;
	},
	/**
	 * function call back for download
	 * @param result HttpResponse message
	 * @return result
	 */
	doDownload: function(result) {
		var json = JSON.decode(result);
		if (json.Result == '0') {
			// alert("Error!! Message:" + json.Message);
			throw json.Message;
		}
		location.href = json.URL;
		return true;
	},
	
	/**
	 * function call back
	 * @param result HttpResponse message
	 * @result dicionary list
	 */
	doResultDictionaryList: function(result) {
		var json = JSON.decode(result);
		if (json.Result == '0') {
			//alert("Error!! Message:" + json.Message);
			throw json.Message;
		}
		//alert("Success!! Message:" + json.Message);
		return json;
	},

	/**
	 * crete deploy parameters.
	 * @param pName name
	 * @param pID id
	 * @param pLanguages languages
	 * @param p4 data
	 * @param p5 filename
	 * @param p6 hasIcon
	 * @return post data
	 */
	getDeployParameter: function(pName, pID , pLanguages, pData, pFileName, pIcon) {
		var pdatas = new Array();
		for (i = 0; i < pData.length; i++) {
			var row = new Array();
			for (j = 0; j < pData[i].length; j++) {
				row.push(pData[i][j]);
			}
			pdatas.push(row);
		}
		var params = {name : pName, 
					id : pID, 
					languages : pLanguages, 
					data : pdatas, 
					filename : pFileName, 
					hasIcon : pIcon};
		var postData = {result : params};	
		return JSON.encode(postData);
	},
	/**
	 * create download parameters
	 * @param pId id
	 * @param pLanguages languages
	 * @param pData data
	 * @return post data
	 */
	getDownloadParameter: function(pID, pLanguages, pData) {
		var pdatas = new Array();
		for (i = 0; i < pData.length; i++) {
			var row = new Array();
			for (j = 0; j < pData[i].length; j++) {
				row.push(pData[i][j]);
			}
			pdatas.push(row);
		}
		var params = {id : pID, 
					languages : pLanguages, 
					data : pdatas};
		var postData = {result : params};	
		return JSON.encode(postData);
	},
	/**
	 * create undeploydictionary parameter
	 * @param pId id
	 * @return post data
	 */
	getUnDeployDictionaryParameter: function(pID) {
		var params = {id : pID};
		var postData = {result : params};	
		return JSON.encode(postData);
	},
	
	//* 辞書ページにおいて、"Now loading..."の表示を確認するため、
	//* わざわざ3秒待つ処理を挿入（FireFox3で確認．IE6で動作が不調）
	wait_3_seconds: function(){
		new Ajax.Request('./php/ajax/dictionary-creation/wait3seconds.php', {
			method: 'post', asynchronous: false,
			onSuccess: function(httpObj){
				return;
			},
			onFailure: function(){
			},
			onComplete: function(){
			}
		});
	}
})

