/*********************************************
	MAIN VARS
*********************************************/
	
	var main_div = null;
	var map;
	var manager;
	var geocoder;

	var mapsize;

	var markerArray = [];
	var activeMarkerArray = [];
	
/*********************************************
	MARKERS
*********************************************/
	
	var usersMarkerOptions;
	var blogMarkerOptions;
	var imagesMarkerOptions;
	
	var userMarker;
	var blogMarker;
	var imageMarker;

/*********************************************
	INIT LOAD FUNCTION
*********************************************/

	//init
	function OnLoad(targetDiv, type){
		
		mapsize = type;
		
		//create map
	
		main_div 	= targetDiv;			
		map			= new GMap2 (main_div);
		map.setCenter(new GLatLng(37.4419, -128.1419), 13);
		map.setMapType(G_HYBRID_MAP);

		//add controls
		map.addControl (new GSmallMapControl());

		//manage markers
		manager = new MarkerManager (map);

		//set options
		setMarkerOptions();

		//get geo coder
		geocoder = new GClientGeocoder();
	
		//loop through obj arrays + create markers
		
		//users
		for (var i=0; i<zip_obj.users.length; i++){
			addMarkerAtZip(zip_obj.users[i], zip_obj.users[i].zip, 'user', usersMarkerOptions);
		}
		
		//blogs
		for (var i=0; i<zip_obj.posts.length; i++){
			addMarkerAtZip(zip_obj.posts[i], zip_obj.posts[i].zip, 'blog', blogMarkerOptions);
		}
		
		//images
		for (var i=0; i<zip_obj.images.length; i++){
			addMarkerAtLatLong(zip_obj.images[i], 'image', imagesMarkerOptions);
		}
		
		map.setCenter(new GLatLng(44.024421519659334, -83.52978515625), 13);
		if (mapsize == 'large'){
			map.setZoom(6);
		} else {
			map.setZoom(5);
		}
	}

/*********************************************
	CREATE MARKER OPTIONS
*********************************************/

	function setMarkerOptions (){
	
		//set markers
		userMarker				= new GIcon(G_DEFAULT_ICON);
		userMarker.image 		= 'http://'+document.domain+'/image/map/user.png';
		userMarker.shadow 		= 'http://'+document.domain+'/image/map/shadow.png';
		userMarker.iconSize 	= new GSize(12,15);
		userMarker.shadowSize 	= new GSize(22, 16);		
		
		blogMarker				= new GIcon(G_DEFAULT_ICON);
		blogMarker.image 		= 'http://'+document.domain+'/image/map/blog.png';
		blogMarker.shadow 		= 'http://'+document.domain+'/image/map/shadow.png';
		blogMarker.iconSize 	= new GSize(12,15);
		blogMarker.shadowSize 	= new GSize(22, 16);
		
		imageMarker				= new GIcon(G_DEFAULT_ICON);
		imageMarker.image		= 'http://'+document.domain+'/image/map/images.png';
		imageMarker.shadow 		= 'http://'+document.domain+'/image/map/shadow.png';
		imageMarker.iconSize 	= new GSize(12,15);
		imageMarker.shadowSize 	= new GSize(22, 16);
		
		usersMarkerOptions		= { icon:userMarker, clickable:true };
		blogMarkerOptions		= { icon:blogMarker, clickable:true };
		imagesMarkerOptions		= { icon:imageMarker, clickable:true };
	
	}


/*********************************************
	ADD MARKER
*********************************************/

	function addMarker (marker_obj){
		var point	= new GLatLng(Number(marker_obj.lat), Number(marker_obj.long));
		var marker	= new GMarker (point, markerOptions);
		var text	= marker_obj.text;
		map.setCenter(point, 13);
		map.addOverlay(marker);
		marker.openInfoWindowHtml(text);

		marker_obj.marker = marker;
	}

/*********************************************
	SET MARKER IN PLACE
*********************************************/

	function addMarkerAtZip(obj, address, type, markerOptions){
		
	 	geocoder.getLatLng(
	    	address,
	    	function(point) {
	      		if (!point) {
	        		//alert(address + " not found");
	      		} else {
		
					for (var i in markerArray){
						if (markerArray[i].point.lat() == point.lat() && markerArray[i].point.lng() == point.lng()){
							var lat = point.lat();
							var lng = point.lng();
							lat += .005;
							lng += .005;
							point = new GLatLng(lat, lng);
						}
					}
		
					var marker = new GMarker(point, markerOptions);
					//map.addOverlay(marker);
	       			manager.addMarker(marker, 0);
					manager.refresh();
					marker.type	= type;
					marker.obj	= obj;
					GEvent.addListener(marker, "click", function(){
						openWindow(marker, type);});
					
					var marker_obj		= new Object();
					marker_obj.address	= address;
					marker_obj.object	= obj;
					marker_obj.point	= point;
					marker_obj.marker	= marker;
					marker_obj.type		= type;
					
					markerArray.push (marker_obj);
	        		//marker.openInfoWindowHtml(address);
	      		}
	    	}
	  	);
	}
	
	var dumCurImage;
	
	function checkImage (marker, div, image){
		if (image.height != 0){
			marker.openInfoWindow(div, {maxWidth:220});
		} else {
			window.setTimeout(checkImage, 0, marker, div, image);
		}
	}
	
	function openWindow(marker, type){
		var html_string = '';
		switch (type){
			case 'user':
			html_string += '<div userid="'+marker.obj.id+'" class="indivuser" id="indivuser">';
			html_string +=	'<div class="mapuserimage" id="userimage">';
			html_string +=	'	<img src="../'+marker.obj.photo_sm+'" /><br /></div>';
			html_string +=	'<div class="mapuserinfo" id="userinfo"><a href="http://'+document.domain+'/directory/index.php?user='+marker.obj.id+'">';
			html_string +=	'		<div style="position: relative; float: left;" id="user">';
			html_string += '<h3>'+marker.obj.first_name+" "+marker.obj.last_name+'</h3></div></a><br /><small>'+marker.obj.location_city+", "+marker.obj.location_state+'<br/><br /></small>';
			html_string += '</div></div>';
			marker.openInfoWindowHtml(html_string);
			break;
			
			case 'blog':
			html_string += '<div id="blog"><a class="bloglink" href="'+marker.obj.url+'"><h1>'+marker.obj.title+"</h1></a>";
			html_string += '<small>Posted on '+marker.obj.date+' by <a class="userlink" href="http://'+document.domain+'/blog/?author='+marker.obj.author_id+'">'+marker.obj.author+'</a></small><br /><br />';
			html_string += marker.obj.excerpt+"...";
			html_string += '<br />';
			html_string += '<a href="'+marker.obj.url+'">click here for complete post</a><br /><br />';
			html_string += "</div>";
			marker.openInfoWindowHtml(html_string);
			break;
			
			case 'image':
			if (mapsize == 'large'){
				var div = document.createElement('div');
				div.innerHTML = '<h1><span class="imagelink">'+marker.obj.title+'</span></h1><br />by <a class="userlink" href="http://www.flickr.com/photos/'+marker.obj.id+'" target="_blank">'+marker.obj.user+'</a><br /><br />';
				var img = document.createElement('img');
				img.src = marker.obj.med;
				div.appendChild(img);
			
				window.setTimeout(checkImage, 0, marker, div, img);
			} else {
				var div = document.createElement('div');
				div.innerHTML = '<h1><span class="imagelink">'+marker.obj.title+'</span></h1><br />by <a class="userlink" href="http://www.flickr.com/photos/'+marker.obj.id+'" target="_blank">'+marker.obj.user+'</a><br /><br />';
				var img = document.createElement('img');
				img.src = marker.obj.sm;
				div.appendChild(img);
			
				window.setTimeout(checkImage, 0, marker, div, img);
			}
			break;
		}
	}
	
	function addMarkerAtLatLong (obj, type, markerOptions){
		
		var lat 	= obj.lat;
		var lng		= obj.lng;
		var point 	= new GLatLng(lat, lng);
		
		for (var i in markerArray){
			if (markerArray[i].point.lat() == point.lat() && markerArray[i].point.lng() == point.lng()){
				var lat = point.lat();
				var lng = point.lng();
				lat += .005;
				lng += .005;
				point = new GLatLng(lat, lng);
			}
		}

		var marker = new GMarker(point, markerOptions);
		//map.addOverlay(marker);
     	manager.addMarker(marker, 0);
		manager.refresh();
		marker.type	= type;
		marker.obj	= obj;
		GEvent.addListener(marker, "click", function(){
			openWindow(marker, marker.type);});
		
		var marker_obj		= new Object();
		marker_obj.object	= obj;
		marker_obj.point	= point;
		marker_obj.marker	= marker;

		markerArray.push (marker_obj);
	}

/*********************************************
	PAN TO ADDRESS
*********************************************/

	function panAddress(address, type) {
		
		var markerOptions;
		
		//set type
		switch (type){
			case 'user':
			markerOptions = usersMarkerOptions;
			break;
			
			case 'blog':
			markerOptions = blogMarkerOptions;
			break;
			
			case 'image':
			markerOptions = imagesMarkerOptions;
			break;
		}
		
		geocoder.getLatLng(
			address,
	    	function(point) {
	      		if (!point) {
	        		//alert(address + " not found");
	      		} else {
					map.panTo(point);
					var marker = new GMarker(point, markerOptions);
					map.addOverlay(marker);
	        		marker.openInfoWindowHtml(address);
	      		}
	    	}
	  );
	}
	
/*********************************************
	SORT MAP
*********************************************/

	function sortMap (index){
		var xmlHttp = getXMLObject();

		if (xmlHttp==null)
		{
			alert ("Your browser does not support AJAX!");
			return;
		}
		
		activeMarkerArray = zip_obj[index];
		
		manager.clearMarkers();
		
		for (var i=0; i<markerArray.length; i++){
			if (markerArray[i].marker && markerArray[i].marker.type != index){
				markerArray[i].marker.hide();
			} else if (markerArray[i].marker.type == index){
				markerArray[i].marker.show();
				manager.addMarker(markerArray[i].marker, 0);
				manager.refresh();
			}
		}
	}
