// プロパティ一覧表示関数
Object.prototype.obj = function(){
	var ary = [];
	for(var i in this){
		ary.push(i);
	}
	alert(ary.join(" / "));
}


/**
  *  グーグルマップ作成クラス
  *
  */
// Constructor
function googleMap(){}

googleMap.prototype = {
	// GMap2オブジェクト
	map:"",
	
	// XMLデータ
	data_ary:[],

	// 属性パラメータ
	p:{
	   ido:35.67849408943879,   //初期表示位置 緯度
	   keido:139.77081298828125, //初期表示位置 経度
	   scale:11                  // 倍率
	},

	// 初期表示
	init:function(){
  	this.spreadMap();
  },
  
  // 初回描画
	spreadMap:function(){
    if (GBrowserIsCompatible()) {

      this.map = new GMap2(document.getElementById("map"));
			this.map.setCenter(new GLatLng(this.p["ido"], this.p["keido"]), this.p["scale"]);
			// マップの初期表示スタイル
//			this.map.setMapType(G_HYBRID_MAP);

			this.map.addControl(new GLargeMapControl());
			this.map.addControl(new GScaleControl());
			this.map.addControl(new GMapTypeControl());
			
			// マウスホイール、クリックでの拡大・縮小
			this.map.enableContinuousZoom();
			this.map.enableScrollWheelZoom();
    }
  },
  
  // 固有情報（マーカー）描画
  setInfo:function(){
  	var n = this.data_ary;
  	var len  = this.data_ary.length;

    for(var i=0; len>i; i++){

			var icon = new GIcon();
			icon.image = "./images/"+n[i]['image'];
		  icon.iconSize = new GSize(26,33);
		  icon.iconAnchor = new GPoint(0, 0);
			var ms = new Object();
			ms.icon = icon;
			
			
			// マーカーの設置
			var marker = new GMarker(new GLatLng(n[i]['ido'], n[i]['keido']),ms);
		  this.map.addOverlay(marker);
			
			GEvent.addListener(marker, "click", this.detailInfo(n[i]) );
		}
  },

	// イベント登録 戻り値は関数オブジェクト
	detailInfo:function(x){
		var obj = x;
		var self = this;

		return function(){
			var x = obj['extra'] ? "<div style='width:215px;height:60px;'><div style='width:80px;height:80px;float:left;'><a href='"+obj['url']+"'><img src='./images/"+obj['extra']+"' style='padding:0 2px 0 0;'><\/a><\/div>" : "";
			self.map.openInfoWindowHtml(new GLatLng( obj["ido"], obj["keido"] ),
			x+"<span style='line-height:1.4'>"+obj['txt']+"</span>");
			var point=new GLatLng(obj["ido"], obj["keido"]);
			self.map.setCenter(new GLatLng(obj["ido"], obj["keido"]), obj["scale"]);
		};
	},
	
	// データセット
	setData:function(data){
		this.data_ary = data;
	},
	
	// オンフォーカス
	setFocus:function(obj){
		this.map.openInfoWindowHtml(new GLatLng( obj["ido"], obj["keido"], obj["scale"]),
			"<div style='width:215px;height:60px;'><div style='width:80px;height:80px;float:left;'><a href='"+obj['url']+"'><img src='./images/"+obj['extra']+"' style='padding:0 2px 0 0;'><\/a><\/div>"+obj['txt']+"");
		this.map.setCenter(new GLatLng(obj["ido"], obj["keido"]), obj["scale"]);

	},
	
	// 表示位置の移動
	setPosition:function(){
		//this.map.setCenter(new GLatLng(this.p["keido"], this.p["ido"]), this.p["scale"]);
		this.init();
		this.setInfo();
	},
	
	// 初期属性パラメータの再設定
	setDefaultParam:function(obj){
		for(var v in obj){
		
			// 同一なオブジェクトリテラルにのみ設定する
			for(var z in this.p){
					if(z == v) this.p[v] = obj[v];
			}
		}
	}
	
}



/**
 *
 * XMLパース＆イベントハンドラ
 * JSONは下記のツリーで構成されている
 * DATA["items"]["item"][n]["～"]  → [n：ノード番号]
 * 
 */
var mapObject = {
			x:new Object(),
			xml_data:new Object(),       // JSON
			url:"test.xml",              // XMLファイルパス
			
			execute:function(obj){
				this.x = new googleMap();
	    	this.x.init();
	    	this.x.setData(obj);
	    	this.x.setInfo();
			},
			
			// リンククリック
			focus:function(num){
				this.x.setFocus(this.xml_data[num]);
			},

			openXMLData:function(){

				return this.xml_data = items;
//				var http = new JKL.ParseXML(this.url);
//				var y = http.parse();
//				// ループするのノードのみ対象
//				return this.xml_data = y["items"]["item"];

			},
			
			change:function(id){
				var icon = [];
				var i = 0;
				var o = this.xml_data;
				var n = [];

				for(var j=0; o.length>j; j++ ){
					if(id==o[j]['category'] || id == 0){
						n.push(o[j]);
					} else{	}
				}
				this.execute(n);
			},
			
			setCenter:function(){
				this.x.setPosition();
			}
}

// オンロードで実行
function load(){
	mapObject.execute( mapObject.openXMLData() );
}
