/**
 * @author mtanaka
 */

// リクエスト例
// http://localhost/cgi-bin/RakutenTravelServiceWrapper.cgi?latitude=35.0034&longitude=135.7496

var RakutenTravelRequest = Class.create();

RakutenTravelRequest.prototype = {

	idPrefix: 'rakutentravel_',
	hotelManager: null, // Googleマップのハンドラ
	bCompleted: false, // リクエストが完了ならtrue

	/**
	 * コンストラクタ
	 * @param {Object} params
	 *  params.lat 検索範囲中心の緯度
	 *  params.lng 検索範囲中心の経度
	 *  params.dist 中心からの検索範囲
	 */
	initialize: function(params){
	
		this.serviceURL = 'http://' + host + '/cgi-bin/RakutenTravelServiceWrapper.cgi';
		this.hotelManager = params.hotelManager;
		
		this.params = {};
		this.params.lat = params.lat;
		this.params.lon = params.lng;
	
		this.handler = params.handler;
	
		// toQueryString のエンコードを避ける
		var strParams = 
		 '&latitude=' + this.params.lat
		 + '&longitude=' + this.params.lon;

		// リクエスト発行
		var req = new Ajax.Request(this.serviceURL + "?" + strParams, 
				{	
					method: 'get', 
					onFailure    : function(httpObj) {},
					onSuccess : function(httpObj) {},
					onComplete: function (httpObj) {
						// サブクラスでオーバーライド
						this.complete(httpObj);
					}.bindAsEventListener(this, false)
				});
		
		this.bCompleted = false;
//		this.numDone += this.numResultSize;
	},
	
	// 検索結果を追加
	complete: function(httpObj){
	
		var result = httpObj.responseXML;
		var names = result.getElementsByTagName("hotelName");
		var addresses1 = result.getElementsByTagName("address1");
		var addresses2 = result.getElementsByTagName("address2");
		var lats = result.getElementsByTagName("latitude");
		var lngs = result.getElementsByTagName("longitude");
		var phones = result.getElementsByTagName("telephoneNo");
		var accesses = result.getElementsByTagName("access");
		var urls = result.getElementsByTagName("hotelInformationUrl");
	
		var infos = new Array();
		for (var i = 0; i < names.length; i++) {

			var name = names[i].firstChild.nodeValue;
			var address = addresses1[i].firstChild.nodeValue + addresses2[i].firstChild.nodeValue;
			var desc = "<a target=\"_blank\" href=\"" + urls[i].firstChild.nodeValue +"\">Link</a>";
			var url = urls[i].firstChild.nodeValue;

			var lng = Number(lngs[i].firstChild.nodeValue);
			var lat = Number(lats[i].firstChild.nodeValue);
			var point = new GLatLng(lat, lng);
			
			var id = this.idPrefix + MD5_hexhash(name + address);
	
			var info = new GeoInfo(id, point, name, address, desc, url);
			infos.push(info);
		}

		this.bCompleted = true;

		this.hotelManager.notifyHotelRequestFinished(infos);
	},
	
	// クエリ文字列を生成 (UTF8をURLエンコード)
	generateQueryString: function(query){
		result = utf.URLencode(query);
		return result;
	
	}
}
