$(function() {
	'use strict';
	
	//创建和初始化地图函数：
	function initMap(){
	    createMap();//创建地图
	    setMapEvent();//设置地图事件
	    addMapControl();//向地图添加控件
	    addMarker();//向地图中添加marker
	}

	//创建地图函数：
	function createMap(){
	    var map = new BMap.Map("dituContent");//在百度地图容器中创建一个地图
	    var point = new BMap.Point(113.953184,22.540662);//定义一个中心点坐标
	    map.centerAndZoom(point,18);//设定地图的中心点和坐标并将地图显示在地图容器中
	    window.map = map;//将map变量存储在全局
	}

	//地图事件设置函数：
	function setMapEvent(){
	    map.enableDragging();//启用地图拖拽事件，默认启用(可不写)
	    map.enableScrollWheelZoom();//启用地图滚轮放大缩小
	    map.enableDoubleClickZoom();//启用鼠标双击放大，默认启用(可不写)
	    map.enableKeyboard();//启用键盘上下左右键移动地图
	}

	//地图控件添加函数：
	function addMapControl(){
	    //向地图中添加缩放控件
	    var ctrl_nav = new BMap.NavigationControl({anchor:BMAP_ANCHOR_TOP_LEFT,type:BMAP_NAVIGATION_CONTROL_LARGE});
	    map.addControl(ctrl_nav);
//	    //向地图中添加缩略图控件
//	    var ctrl_ove = new BMap.OverviewMapControl({anchor:BMAP_ANCHOR_BOTTOM_RIGHT,isOpen:1});
//	    map.addControl(ctrl_ove);
//	    //向地图中添加比例尺控件
//	    var ctrl_sca = new BMap.ScaleControl({anchor:BMAP_ANCHOR_BOTTOM_LEFT});
//	    map.addControl(ctrl_sca);
	}

	//标注点数组
	var markerArr = [{title:"优软科技",content:"深圳市南山区高新技术产业园科技南5路英唐大厦6楼",point:"113.953126|22.540737",isOpen:0,icon:{w:21,h:21,l:0,t:0,x:6,lb:5}}
	];
	//创建marker
	function addMarker(){
	    for(var i=0;i<markerArr.length;i++){
	        var json = markerArr[i];
	        var p0 = json.point.split("|")[0];
	        var p1 = json.point.split("|")[1];
	        var point = new BMap.Point(p0,p1);
	        var iconImg = createIcon(json.icon);
	        var marker = new BMap.Marker(point,{icon:iconImg});
	        var iw = createInfoWindow(i);
	        var label = new BMap.Label(json.title,{"offset":new BMap.Size(json.icon.lb-json.icon.x+10,-20)});
	        marker.setLabel(label);
	        map.addOverlay(marker);
	        label.setStyle({
	            borderColor:"#808080",
	            color:"#333",
	            cursor:"pointer"
	        });

	        (function(){
	            var index = i;
	            var _iw = createInfoWindow(i);
	            var _marker = marker;
	            _marker.addEventListener("click",function(){
	                this.openInfoWindow(_iw);
	            });
	            _iw.addEventListener("open",function(){
	                _marker.getLabel().hide();
	            })
	            _iw.addEventListener("close",function(){
	                _marker.getLabel().show();
	            })
	            label.addEventListener("click",function(){
	                _marker.openInfoWindow(_iw);
	            })
	            if(!!json.isOpen){
	                label.hide();
	                _marker.openInfoWindow(_iw);
	            }
	        })()
	    }
	}
	//创建InfoWindow
	function createInfoWindow(i){
	    var json = markerArr[i];
	    var iw = new BMap.InfoWindow("<b class='iw_poi_title' title='" + json.title + "'>" + json.title + "</b><div class='iw_poi_content'>"+json.content+"</div>");
	    return iw;
	}
	//创建一个Icon
	function createIcon(json){
	    var icon = new BMap.Icon("http://app.baidu.com/map/images/us_mk_icon.png", new BMap.Size(json.w,json.h),{imageOffset: new BMap.Size(-json.l,-json.t),infoWindowOffset:new BMap.Size(json.lb+5,1),offset:new BMap.Size(json.x,json.h)})
	    return icon;
	}

	initMap();//创建和初始化地图
	
	
	//竖导航栏
	$(function(){
		$('#vertical-nav').onePageNav();
	});
	(function($, window, document, undefined) {

		// our plugin constructor
		var OnePageNav = function(elem, options) {
			this.elem = elem;
			this.$elem = $(elem);
			this.options = options;
			this.metadata = this.$elem.data('plugin-options');
			this.$win = $(window);
			this.sections = {};
			this.didScroll = false;
			this.$doc = $(document);
			this.docHeight = this.$doc.height();
		};

		// the plugin prototype
		OnePageNav.prototype = {
			defaults: {
				navItems: 'a',
				currentClass: 'current',
				changeHash: false,
				easing: 'swing',
				filter: '',
				scrollSpeed: 750,
				scrollThreshold: 0.5,
				begin: false,
				end: false,
				scrollChange: false
			},

			init: function() {
				// Introduce defaults that can be extended either
				// globally or using an object literal.
				this.config = $.extend({}, this.defaults, this.options, this.metadata);

				this.$nav = this.$elem.find(this.config.navItems);

				//Filter any links out of the nav
				if(this.config.filter !== '') {
					this.$nav = this.$nav.filter(this.config.filter);
				}

				//Handle clicks on the nav
				this.$nav.on('click.onePageNav', $.proxy(this.handleClick, this));

				//Get the section positions
				this.getPositions();

				//Handle scroll changes
				this.bindInterval();

				//Update the positions on resize too
				this.$win.on('resize.onePageNav', $.proxy(this.getPositions, this));

				return this;
			},

			adjustNav: function(self, $parent) {
				self.$elem.find('.' + self.config.currentClass).removeClass(self.config.currentClass);
				$parent.addClass(self.config.currentClass);
			},

			bindInterval: function() {
				var self = this;
				var docHeight;

				self.$win.on('scroll.onePageNav', function() {
					self.didScroll = true;
				});

				self.t = setInterval(function() {
					docHeight = self.$doc.height();

					//If it was scrolled
					if(self.didScroll) {
						self.didScroll = false;
						self.scrollChange();
					}

					//If the document height changes
					if(docHeight !== self.docHeight) {
						self.docHeight = docHeight;
						self.getPositions();
					}
				}, 250);
			},

			getHash: function($link) {
				return $link.attr('href').split('#')[1];
			},

			getPositions: function() {
				var self = this;
				var linkHref;
				var topPos;
				var $target;

				self.$nav.each(function() {
					linkHref = self.getHash($(this));
					$target = $('#' + linkHref);

					if($target.length) {
						topPos = $target.offset().top;
						self.sections[linkHref] = Math.round(topPos);
					}
				});
			},

			getSection: function(windowPos) {
				var returnValue = null;
				var windowHeight = Math.round(this.$win.height() * this.config.scrollThreshold);

				for(var section in this.sections) {
					if((this.sections[section] - windowHeight) < windowPos) {
						returnValue = section;
					}
				}

				return returnValue;
			},

			handleClick: function(e) {
				var self = this;
				var $link = $(e.currentTarget);
				var $parent = $link.parent();
				var newLoc = '#' + self.getHash($link);

				if(!$parent.hasClass(self.config.currentClass)) {
					//Start callback
					if(self.config.begin) {
						self.config.begin();
					}

					//Change the highlighted nav item
					self.adjustNav(self, $parent);

					//Removing the auto-adjust on scroll
					self.unbindInterval();

					//Scroll to the correct position
					self.scrollTo(newLoc, function() {
						//Do we need to change the hash?
						if(self.config.changeHash) {
							window.location.hash = newLoc;
						}

						//Add the auto-adjust on scroll back in
						self.bindInterval();

						//End callback
						if(self.config.end) {
							self.config.end();
						}
					});
				}

				e.preventDefault();
			},

			scrollChange: function() {
				var windowTop = this.$win.scrollTop();
				var position = this.getSection(windowTop);
				var $parent;

				//If the position is set
				if(position !== null) {
					$parent = this.$elem.find('a[href$="#' + position + '"]').parent();

					//If it's not already the current section
					if(!$parent.hasClass(this.config.currentClass)) {
						//Change the highlighted nav item
						this.adjustNav(this, $parent);

						//If there is a scrollChange callback
						if(this.config.scrollChange) {
							this.config.scrollChange($parent);
						}
					}
				}
			},

			scrollTo: function(target, callback) {
				var offset = $(target).offset().top;

				$('html, body').animate({
					scrollTop: offset
				}, this.config.scrollSpeed, this.config.easing, callback);
			},

			unbindInterval: function() {
				clearInterval(this.t);
				this.$win.unbind('scroll.onePageNav');
			}
		};

		OnePageNav.defaults = OnePageNav.prototype.defaults;

		$.fn.onePageNav = function(options) {
			return this.each(function() {
				new OnePageNav(this, options).init();
			});
		};
	})( jQuery, window , document );
});
