/********************************************************
 *
 *  Control - ZoomPanel
 *  自作ズームコントローラ
 *  投資用にカスタマイズ
 *
 ********************************************************/

(function($){

// オブジェクト(連想配列)の空設定
if(typeof jNextraGMaps2.Control !== "object"){ jNextraGMaps2.Control = {}; }

/*
 * 自作ズームコントロール
 * require ui.slider.js
 * 設定の変更は不可
 */
jNextraGMaps2.Control.ZoomPanel = function(){
	this._opts = {
		orientation: 'vertical',   //縦向きに
	    max: 19,                   //最大値
	    min: 10                     //最小値
	};
};

jNextraGMaps2.Control.ZoomPanel.prototype = new GControl();

//コントロールの中身を設定
jNextraGMaps2.Control.ZoomPanel.prototype.initialize = function(map){
	var self = this;
	self._map = map;

    //それぞれのdivを生成し、イベントを設定
    var default_latlng = map.getCenter();
	var sliderContainer = $('<div id="mapSlScale"></div>');
    var slider_ZoomOut = 
    	$('<div id="mapZoomOut"></div>')
    	.click(function(event, ui){
			if(self.getZoomLevel(self._map.getZoom()) < $(sliderPointContainer).slider('option', 'max')){
				self._map.zoomOut();
			}
    	});
    var slider_ZoomIn = 
    	$('<div id="mapZoomIn"></div>')
    	.click(function(event, ui){ 
			if(self.getZoomLevel(self._map.getZoom()) > $(sliderPointContainer).slider('option', 'min')){
				self._map.zoomIn();
			}
    	});

	var sliderPointContainer = 
		$('<div id="mapSlPoint"></div>')
		.slider({
	        orientation: this._opts.orientation,    //縦向きに
	        max: this._opts.max,                    //最大値
	        min: this._opts.min,                    //最小値
	        value: self.getZoomLevel(self._map.getZoom()) //初期値
		});

	sliderContainer
		.append(slider_ZoomOut)
		.append(slider_ZoomIn)
		.append(sliderPointContainer);
	//IE対応
	if($.browser.msie){
		if($.browser.version.match(/^6\.0/i) != null){
		    $(".ui-slider-handle",sliderPointContainer).css("marginBottom","-11px");
		}else if($.browser.version.match(/^7\.0/i) != null
		         || $.browser.version.match(/^8\.0/i) != null){
		    $(".ui-slider-handle",sliderPointContainer).css("marginTop","-11px");
		}
	}
    //ズームスライダーをグリグリさせるための設定（マウスポインタの変更）
    $('.ui-slider-handle',sliderPointContainer).bind("mousedown",function(){
		$(sliderContainer).css("cursor","url(http://maps.google.com/intl/ja_ALL/mapfiles/closedhand_8_8.cur), pointer");
    });
    $('.ui-slider-handle',sliderPointContainer).bind("mouseup",function(){
		$(sliderContainer).css("cursor","default");
    });
    $(sliderPointContainer).bind("mouseup",function(){
		$(sliderContainer).css("cursor","default");
    });
    //スライダーを離したときの処理を追加
    $(sliderPointContainer).bind("slidestop",function(event, ui){
        self._map.setZoom(self.getZoomLevel($(this).slider('option','value')));
    });
    //ズームの変更と連動してスライダーが変わるよう設定
    GEvent.addListener(self._map, 'zoomend', function(){
    	sliderPointContainer.slider('option', 'value', self.getZoomLevel(this.getZoom()));
    });

	var container = $('<div></div>').append(sliderContainer);
	var container_dom = $(container).get(0);
    self._map.getContainer().appendChild(container_dom);
    return container_dom;
};

jNextraGMaps2.Control.ZoomPanel.prototype.getZoomLevel = function(zoomLevel){
	return (this._opts.min + this._opts.max) - parseInt(zoomLevel);
};

//コントロールのデフォルト位置を設定
jNextraGMaps2.Control.ZoomPanel.prototype.getDefaultPosition = function(){
  return new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(7, 7));
};

jNextraGMaps2.Control.ZoomPanel.changeZoomLevel = function(map, target){
    $(target).slider('option', 'value', map.getZoom());
};

})(jQuery);