/**
 * @author mtanaka
 */

// リクエスト例
// http://api.gnavi.co.jp/ver1/RestSearchAPI/?keyid=801bc78c48227676b3e837abc3a11014&latitude=35.0034&longitude=135.7496&range=1

var GnaviRequest = Class.create();

GnaviRequest.prototype = {

	idPrefix: 'gnavi_',
	restaurantManager: null, // 
	bCompleted: false, // リクエストが完了ならtrue
	
	
	/**
	 * コンストラクタ
	 * @param {Object} params
	 *  params.lat 検索範囲中心の緯度
	 *  params.lng 検索範囲中心の経度
	 *  params.dist 中心からの検索範囲
	 */
	initialize: function(params){
	
		this.serviceURL = 'http://' + host + '/cgi-bin/GnaviSearchWrapper.cgi';
		this.restaurantManager = params.restaurantManager;
		
		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("name");
		var addresses = result.getElementsByTagName("address");
		var lats = result.getElementsByTagName("latitude");
		var lngs = result.getElementsByTagName("longitude");
		var phones = result.getElementsByTagName("tel");
		var accesses = result.getElementsByTagName("access");
		var urls = result.getElementsByTagName("url");
	
		var infos = new Array();
		for (var i = 0; i < names.length; i++) {

			var name = names[i].firstChild.nodeValue;
			var address = addresses[i].firstChild.nodeValue;
			var url = urls[i].firstChild.nodeValue;
			var desc = "<a target=\"_blank\" href=\"" + urls[i].firstChild.nodeValue +"\">Link</a>";

			var lng = lngs[i].firstChild.nodeValue;
			var lat = lats[i].firstChild.nodeValue;
			var id = this.idPrefix + MD5_hexhash(name + address);
	
			var info = new GeoInfo(id, new GLatLng(lat, lng), name, address, desc, url);
			infos.push(info);
		}

		this.bCompleted = true;

		this.restaurantManager.notifyRestaurantRequestFinished(infos);
	},
	
	// クエリ文字列を生成 (UTF8をURLエンコード)
	generateQueryString: function(query){
		result = utf.URLencode(query);
		return result;
	
	}
}
