/**
 * 検索結果クラス
 **/
function SearchResults(id,name,options) {
	this.id = id;
	this.name = name;
	this.options = options;
	this.markerIcon = options["markerIcon"];
	this.markerClass = options["markerClass"];
	this.markerSubClass = options["markerSubClass"];
	this.listClass1 = options["listClass1"];
	this.listClass2 = options["listClass2"];
	this.markerFooter = options["markerFooter"];
	this.results = $H();
}

/**
 * 結果を追加
 **/
SearchResults.prototype.addResult = function( id , lat , lon , markerHtml , listHtml ) {
	var key = "ll" +  lat.toString() + "," + lon.toString();
	var result = {
		"id" : id,
		"lat":lat,
		"lon":lon,
		"markerHtml":markerHtml,
		"listHtml":listHtml
	}
	if( !this.results[key] ) {
		this.results[key] = [];
	}
	this.results[key].push(result);
}



/**
 * 結果を地図とリストへ表示
 **/
SearchResults.prototype.display = function( map , list ) {
	
	list.innerHTML = "";
	var markerClass = this.markerClass;
	var markerSubClass = this.markerSubClass;
	var listClass1 = this.listClass1;
	var listClass2 = this.listClass2;
	var listCount = 0;
	var me = this;
	this.results.each( 
		function( value , index , data ) {
			var marker = createMarker( value[1] );
			appendListDiv( list , value[1] , marker );
			map.addOverlay( marker );
		} 
	);	
	

	function createMarker( items ) {
	
		var point = new GLatLng(items[0].lat, items[0].lon);
		var icon = new GIcon();
		icon.image = me.markerIcon; // "./img/restaurant.png";
		icon.shadow = me.markerIcon; // "./img/restaurant.png";
		icon.iconSize = new GSize(30, 30);
		icon.shadowSize = new GSize(30, 30);
		icon.iconAnchor = new GPoint(6, 20);
		icon.infoWindowAnchor = new GPoint(15,15);

		var marker = new GMarker(point,icon);
		var markerId = me.id + "_marker";
		var markerHtml = "<div id='" + markerId + "' class='" + markerClass + "' >";
		for( var i = 0 ; i < items.length ; i++ ) {
			markerHtml += "<div id='" +  items[i].id + "' class='" + markerSubClass +"'>";
			markerHtml += items[i].markerHtml;
			markerHtml += "</div>";
		}
		markerHtml += "</div>";
		if( me.markerFooter ) {
			markerHtml += me.markerFooter;
		}
		
		GEvent.addListener(marker, "click", function() {
		    marker.openInfoWindowHtml( markerHtml );
		    if( marker.scrollId ) {
		    	SmoothScroll.scrollTo( marker.scrollId , markerId );
		    	marker.scrollId = "";
		    }
		});
		return marker;
	};
	

	function appendListDiv( root, items , marker ) {
		
		for( var i = 0 ; i < items.length ; i++ ) {
			
			var html = "";
			html += items[i].listHtml;
			if( listCount % 2 == 0 ) {
				var div = createDiv(html, listClass1);
			} else {
				var div = createDiv(html, listClass2)
			}
			div.scrollId = items[i].id;
			div.onclick = function() {
				if( this.scrollId ) {
					marker.scrollId = this.scrollId;
				}
				GEvent.trigger( marker , "click");
			}
			root.appendChild(div);
			listCount++;
		}
	};
	
	/** 
	 * divタグ生成
	 **/
	function createDiv(opt_text, opt_className) {
	  var el = document.createElement("div");
	  if (opt_text) {
	    el.innerHTML = opt_text;
	  }
	  if (opt_className) { el.className = opt_className; }
	  return el;
	};

}