/**********************************************************************
* /js/component/service-information.js
* Copyright (C) 2007-2008 Kyoto University
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-
* 1301  USA
***********************************************************************/

var ServiceInformation = Class.create();

ServiceInformation.prototype = {
	initialize: function(id) {
		this.viewArea = $(id);
		this.output = new Element("div");
		this.viewArea.appendChild(this.output);
		this.output.innerHTML = 'License information will be displayed here when language resources are used.';
		this.isInitState = true;
	},

	reset: function(serviceName) {
		serviceNode = this.output.select('[title="'+serviceName+'"]');
		if (serviceNode.size() != 0) {
			serviceNode[0].remove();
		}
	},

	update: function(serviceProfile) {

		// eip kawauchi add start 20100118
		// サービス名が定義されていなければ、
		// ライセンス情報全体を表示しない
		var serviceName = serviceProfile.serviceName;
		if ((serviceName == "undefined") || (serviceName == null) || (serviceName == "")) {
			return;
		}
		// eip kawauchi add end 20100118

		if (this.isInitState) {
			this.viewArea.style.height = "170px";
			this.output.innerHTML = '';
			this.isInitState = false;
		}
		if (!Object.isUndefined(serviceProfile.children)) {
			this.serialize(serviceProfile.children);
		}
		this.reset(serviceProfile.serviceId);
		node = new Element('div', {"class": "service-element", "title": serviceProfile.serviceId});


		// eip kawauchi add start 20100115
		// 表示情報が存在するか確認
		// 無ければハイフンを入れる
		var arrProfileName = [ "serviceName", "serviceCopyright", "serviceLicense"];
		for ( var i = 0; i < arrProfileName.length; i++) {
			var val = serviceProfile[arrProfileName[i]];
			if ((val == "undefined") || (val == null) || (val == "")) {
				serviceProfile[arrProfileName[i]] = "&nbsp;-";
			}
		}
		// eip kawauchi add end 20100115

		node.innerHTML =
			'<p class="access-time"><b>Last Access</b> : ' + serviceProfile.lastAccess +'</p>';
		node.innerHTML +=
			'<h3>Service Name</h3>' +
			'<p>' + serviceProfile.serviceName + '</p>';
		if ("" != serviceProfile.serviceCopyright) {
			node.innerHTML +=
				'<h3>Copyright</h3>' +
				'<p>' + serviceProfile.serviceCopyright + '</p>';
		}

		if (Object.isUndefined(serviceProfile.children)
		|| serviceProfile.children == null
		|| serviceProfile.children.size() == 0) {
			node.innerHTML += '<h3>License Information</h3>';
			if ("" != serviceProfile.serviceLicense) {
				node.innerHTML +=
				'<p>' + serviceProfile.serviceLicense + '</p>';
			}
			else {

				// eip kawauchi mod start 20100105
				// ライセンス情報が空の時に表示される文字を変更
				node.innerHTML +=
//				'<p style="color:gray">&nbsp;[blank]</p>';
				'<p>&nbsp;-</p>';
				// eip kawauchi mod end 20100105

			}
	    this.output.insert({top : node});
		}
		else {
			node.innerHTML += '<h3>Services Included</h3>';
			includedServices = new Element('p');
			this.renderIncludedService(serviceProfile.children, includedServices);
			node.appendChild(includedServices);
			this.output.insert({top : node});
		}

		node.insert({before:new Element("a", {name: serviceProfile.serviceId})});
		return this.output;
	},

	renderIncludedService: function(callNodes, includedServices) {
		var list = new Array();
		for (var i=0;i<callNodes.size();i++) {
			if (callNodes[i].serviceName == '' || list.indexOf(callNodes[i].serviceName) != -1){
				continue;
			}else{
				includedServices.innerHTML += '<a href="#'+callNodes[i].serviceId+'">'+ callNodes[i].serviceName + '</a>&nbsp;';
				list.push(callNodes[i].serviceName);
			}
		}
//*		for (var i=0;i<callNodes.size();i++) {
//*			if (callNodes[i].serviceName != '') {
//*				includedServices.innerHTML += '<a href="#'+callNodes[i].serviceId+'">'+ callNodes[i].serviceName + '</a>&nbsp;';
//*			}
//*		}
	},

	serialize: function(callNodes) {
		callback = this;
		if (callNodes != null) {
			for (var i=0;i<callNodes.size();i++) {
				if (callNodes[i].serviceName != '') {
					callback.update(callNodes[i]);
				}
			}
		}
	},
	requestById: function(id) {
		//* for autocomplete service

		// eip kawauchi mod start 20100115
		// オートコンプリートのライセンスが取得出来ないバグを修正
//		var idMap = {"#16":"MedicalParallelText", "#9":"KawasakiCommonHandbook", "#10":"KawasakiSocialStudiesHandbook", "#11":"KawasakiParentLetterHandbook","#pt5":"MLDI","#pt6":"MLLI"};
//		this.request(idMasp[id]);
		var len = parallelTextSelection.resourceArray.length;
		var serviceId = "";
		for ( var i = 0; i < len; i++) {
			var url = parallelTextSelection.resourceArray[i].hashData._object.endpointUrl;
			if (id == url) {
				serviceId = parallelTextSelection.resourceArray[i].hashData._object.serviceId;
				break;
			}
		}
		this.request(serviceId);
		// eip kawauchi mod end 20100115

	},
	request: function(serviceId) {
		var serviceInformation = this;
		new Ajax.Request('./php/ajax/get-service-profile.php', {
			method: 'post',
			parameters: 'serviceId='+serviceId,
			onSuccess: function(httpObj) {
				serviceInformation.update(httpObj.responseJSON.contents);
			},
			onFailure: function(){
				alert('NG');
			}
		});
	}
}

