var multiMap = {
	mapMarkers: [],
	gblMap: {},
	ccLat: -37.694672,
	ccLon: 145.011907,
	ccPlace: "Keon Park",
	ccLevel: 10,
	init: function(){

		if(busObj.business.length>0){

			busObj.business.each(function(bd){
				if(bd.longitude != "" && bd.latitude != ""){
				
					var point = new GLatLng(bd.latitude,bd.longitude);
					var myMsg = '<strong>' + bd.busname + '</strong><br /><p><a href="/business-directory/show-business.asp?busid=' + bd.busid + '">View business details</a></p>';
					var newmarker = multiMap.createMarker(point,myMsg);
						newmarker.busid = bd.busid;
						newmarker.busname = bd.busname;
						newmarker.longitude = bd.longitude;
						newmarker.latitude = bd.latitude;
						
						newmarker.Cat_1 = bd.Cat_1;
						newmarker.Cat_2 = bd.Cat_2;
						newmarker.Cat_3 = bd.Cat_3;
						newmarker.Cat_4 = bd.Cat_4;
						newmarker.Cat_5 = bd.Cat_5;
						newmarker.Cat_6 = bd.Cat_6;
						newmarker.Cat_7 = bd.Cat_7;
						newmarker.Cat_8 = bd.Cat_8;
						newmarker.Cat_9 = bd.Cat_9;
						newmarker.Cat_10 = bd.Cat_10;
						newmarker.Cat_11 = bd.Cat_11;
						newmarker.Cat_12 = bd.Cat_12;
						newmarker.Cat_13 = bd.Cat_13;
						
						newmarker.oInfWin = function(){ newmarker.openInfoWindowHtml(myMsg); };
						newmarker.cInfWin = function(){
							if (!multiMap.gblMap){
								multiMap.gblMap = new GMap2(document.getElementById("map"));
							}
							var iW = multiMap.gblMap.getInfoWindow()
							iW.hide();
						};

					multiMap.mapMarkers.push(newmarker);
				}
			});
			
		} else {
			// array of points does not exist??? pop error message
		}

		if(multiMap.mapMarkers.length>0){

			if (GBrowserIsCompatible()) {
				multiMap.gblMap = new GMap2(document.getElementById("map"));
				//multiMap.gblMap.addControl(new GSmallMapControl());
				multiMap.gblMap.addControl(new GLargeMapControl());
				multiMap.gblMap.addControl(new GMapTypeControl());
				multiMap.gblMap.setCenter(new GLatLng(multiMap.ccLat,multiMap.ccLon), multiMap.ccLevel);

				multiMap.mapMarkers.each(function(mm){
					multiMap.plotMarker(mm);
				});
			
				//make categorisation options... and populate 'businesses shown' sidebar
				var catButts = $('catButts');
				if(catButts){
					if(catObj.categories.length>0){
						var newSel = new Element('select');
							newSel.setProperty('name','catselect');
							newSel.setProperty('class','smallSel');
							newSel.onchange = function(){
								multiMap.filterSel(this.value);
							};
						newSel.injectInside('catButts');

						var newOpt = new Element('option');
							newOpt.setProperty('value','allcats');
							newOpt.setHTML('Show All Categories');
						newOpt.injectInside(newSel);

						catObj.categories.each(function(cts){
							var newOpt = new Element('option');
								newOpt.setProperty('value',cts.catcode);
								newOpt.setHTML(cts.catname);
							newOpt.injectInside(newSel);
						});
						
						var newD = new Element('div');
							newD.setProperty('id','busShown')
						newD.injectInside(catButts);
						
						var newH = new Element('h5');
							newH.setHTML('Businesses Shown');
						newH.injectInside('busShown');
						
						var newU = new Element('ul');
							newU.setProperty('id','bShowL');
							
						for(i=0;i<multiMap.mapMarkers.length;i++){
							//multiMap.gblMap.addOverlay(multiMap.mapMarkers[i]);
		
							if(multiMap.mapMarkers[i].longitude != "" && multiMap.mapMarkers[i].latitude != ""){
								var newL = new Element('li');
									var newA = new Element('a');
										newA.setProperty('href','/business-directory/show-business.asp?busid=' + multiMap.mapMarkers[i].busid + '&arrid=' + i);
										newA.setHTML(multiMap.mapMarkers[i].busname);
									newA.injectInside(newL);
								newL.injectInside(newU);
								handleEvent(newA, "mouseover", multiMap.mOverSidebar);
							}
						}
						newU.injectInside('busShown');
					}
				}
				
			} else {
				// not GBrowserIsCompatible!!
			};

		}
	},
	plotMarker: function(theMarker){
		if (!multiMap.gblMap){
			multiMap.gblMap = new GMap2(document.getElementById("map"));
		}
		multiMap.gblMap.addOverlay(theMarker);
	},
	createMarker: function(point,html){
		var marker = new GMarker(point);
		GEvent.addListener(marker, "click", function() {
			marker.openInfoWindowHtml(html);
		});
		return marker
	},
	filterSel: function(ct){
		if (!multiMap.gblMap){
			multiMap.gblMap = new GMap2(document.getElementById("map"));
		}

		var iW = multiMap.gblMap.getInfoWindow()
		if(iW){ iW.hide(); }; // closes any open info window if it exists

		var bShowL = $('bShowL');
		if(bShowL){ // remove inner LI's on business shown list
			var remLis = bShowL.getElementsByTagName('li');
			if(remLis){
				while(bShowL.firstChild){
					bShowL.firstChild.remove();
				}
			}
		}

		multiMap.mapMarkers.each(function(mm){
			multiMap.gblMap.removeOverlay(mm);
		});
		var cS = ct + ' ';

		if(ct == 'allcats'){

			for(i=0;i<multiMap.mapMarkers.length;i++){
					multiMap.gblMap.addOverlay(multiMap.mapMarkers[i]);
					if(multiMap.mapMarkers[i].longitude != "" && multiMap.mapMarkers[i].latitude != ""){
						var newL = new Element('li');
							
							var newA = new Element('a');
								newA.setProperty('href','/business-directory/show-business.asp?busid=' + multiMap.mapMarkers[i].busid + '&arrid=' + i);
								newA.setHTML(multiMap.mapMarkers[i].busname);
							newA.injectInside(newL);
						newL.injectInside(bShowL);
						
						handleEvent(newA, "mouseover", multiMap.mOverSidebar);
					}
			}

		} else {

			for(i=0;i<multiMap.mapMarkers.length;i++){
				if(eval('multiMap.mapMarkers[i].' + cS + '== 1')){
					multiMap.gblMap.addOverlay(multiMap.mapMarkers[i]);
					if(multiMap.mapMarkers[i].longitude != "" && multiMap.mapMarkers[i].latitude != ""){
						var newL = new Element('li');
							
							var newA = new Element('a');
								newA.setProperty('href','/business-directory/show-business.asp?busid=' + multiMap.mapMarkers[i].busid + '&arrid=' + i);
								newA.setHTML(multiMap.mapMarkers[i].busname);
							newA.injectInside(newL);
						newL.injectInside(bShowL);
						
						handleEvent(newA, "mouseover", multiMap.mOverSidebar);
					}
				};
			}

		}			

	},
	mOverSidebar: function(e){
		var linkClicked; // the target objcet (linkC) of the clicked link
		if(e && e.target){ linkClicked = e.target; }
		if(window.event && window.event.srcElement){ linkClicked = window.event.srcElement }
		if(!linkClicked){
			//return;
		}
		// hijax method to grab array id from url. why, because that how i did it;
		var io = linkClicked.href.indexOf('arrid=');
		var i = linkClicked.href.substr(io+6);
		if (!multiMap.gblMap){
			multiMap.gblMap = new GMap2(document.getElementById("map"));
		}
		var point = new GLatLng(multiMap.mapMarkers[i].latitude,multiMap.mapMarkers[i].longitude);
		var iW = multiMap.gblMap.getInfoWindow()
		if(iW){ multiMap.mapMarkers[i].cInfWin(); }; // closes any open info window if it exists
		multiMap.mapMarkers[i].oInfWin();
		multiMap.gblMap.panTo(point);
		//multiMap.gblMap.setCenter(point);

		return false;
	}
}

handleEvent(window, "load", multiMap.init);

