/**
 * @author Marco Alionso Ramirez, marco@onemarco.com
 * @url http://onemarco.com
 * This code is public domain
 */

//load and unload the map
GEvent.addDomListener(window,'load',loadMap);
GEvent.addDomListener(window,'unload',GUnload);

//check for google maps compatibility, if so, load xml
function loadMap(){
	if(!GBrowserIsCompatible()){
		return;
	}else{
		createMap();
	}
}

//create map icon and sidebar
function createMap(){
	
	var map = new GMap2(document.getElementById('map'));
	map.setCenter(new GLatLng(40.991625, -76.066847),8);
	map.addControl(new GMapTypeControl());
	map.addControl(new GLargeMapControl());
	
	var icon = new GIcon();
	icon.image = "http://66.117.3.168/~minutema/wp-content/themes/MinutemanSpill/images/home2.png";
	//icon.shadow = "http://66.117.3.168/~minutema/wp-content/themes/MinutemanSpill/images/transparent.png";
	icon.iconSize = new GSize(35, 36);
	//icon.shadowSize = new GSize(1, 1);
	icon.iconAnchor = new GPoint(10, 25);
	icon.infoWindowAnchor = new GPoint(10, 0);
	//icon.infoShadowAnchor = new GPoint(23, 13);

	//var icon = G_DEFAULT_ICON;
	
	var sidebarList = document.getElementById('markerList');
	
	var location1 = {
		el:'dl',ch:[
			{el:'dt',ch:[{txt:'Mifflinville Headquarters'}]},
			{el:'dd',ch:[{txt:'I-80 Exit 242 - PO Box 10'}]},
			{el:'dd',ch:[{txt:'Mifflinville, PA 18631'}]},
			{el:'dd',ch:[{txt:'Phone (800) 905-7788 - (570) 759-3658'}]},
			{el:'dd',ch:[{txt:'GPS: 41.032654, -76.297131'}]}
		]
	}
	createMarker(map,41.032654, -76.297131,'Mifflinville Headquarters',icon,location1,sidebarList);
	
	var location2 = {
		el:'dl',ch:[
			{el:'dt',ch:[{txt:'White Deer'}]},
			{el:'dd',ch:[{txt:'I-80 Exit 210 - Old Rt. 15'}]},
			{el:'dd',ch:[{txt:'White Deer, PA 17886'}]},
			{el:'dd',ch:[{txt:'Phone (570) 568-1277'}]},
			{el:'dd',ch:[{txt:'GPS: 41.043065, -76.866864'}]}
		]
	}
	createMarker(map,41.043065, -76.866864,'White Deer',icon,location2,sidebarList);
	
	var location3 = {
		el:'dl',ch:[
			{el:'dt',ch:[{txt:'Loganton'}]},
			{el:'dd',ch:[{txt:'I-80 Exit 192 - East Valley Rd.'}]},
			{el:'dd',ch:[{txt:'Loganton, PA 17747'}]},
			{el:'dd',ch:[{txt:'Phone (570) 725-2965'}]},
			{el:'dd',ch:[{txt:'GPS: 41.053466,-77.219124'}]}
		]
	}
	createMarker(map,41.053466,-77.219124,'Loganton',icon,location3,sidebarList);
	
	var location4 = {
		el:'dl',ch:[
			{el:'dt',ch:[{txt:'Scranton'}]},
			{el:'dd',ch:[{txt:'I-81 Exit 190 - 1432 Millet St.'}]},
			{el:'dd',ch:[{txt:'Scranton, PA 18512'}]},
			{el:'dd',ch:[{txt:'Phone (570) 969-1441'}]},
			{el:'dd',ch:[{txt:'GPS: 41.4133,-75.60158'}]}
		]
	}
	createMarker(map,41.4133,-75.60158,'Scranton',icon,location4,sidebarList);
	
	var location5 = {
		el:'dl',ch:[
			{el:'dt',ch:[{txt:'Conyngham'}]},
			{el:'dd',ch:[{txt:'I-80 Exit 256 - Rt. 93 (I-80/I-81 Jct.)'}]},
			{el:'dd',ch:[{txt:'Conyngham, PA 18219'}]},
			{el:'dd',ch:[{txt:'Phone (570) 788-1141'}]},
			{el:'dd',ch:[{txt:'GPS: 40.991625,-76.066847'}]}
		]
	}
	createMarker(map,40.991625,-76.066847,'Conyngham',icon,location5,sidebarList);

	var location6 = {
		el:'dl',ch:[
			{el:'dt',ch:[{txt:'Mt. Pocono'}]},
			{el:'dd',ch:[{txt:'I-380 Exit 3 - Rt. 940 (I-380/I-80 Jct.)'}]},
			{el:'dd',ch:[{txt:'Mt. Pocono, PA 18346'}]},
			{el:'dd',ch:[{txt:'Phone (570) 839-8220'}]},
			{el:'dd',ch:[{txt:'GPS: 41.128633,-75.352993'}]}
		]
	}
	createMarker(map,41.128633,-75.352993,'Mt. Pocono',icon,location6,sidebarList);

	var location7 = {
		el:'dl',ch:[
			{el:'dt',ch:[{txt:'Harrisburg'}]},
			{el:'dd',ch:[{txt:'I-283 Exit 1B - 401 Richardson Road'}]},
			{el:'dd',ch:[{txt:'Middletown, PA 17057'}]},
			{el:'dd',ch:[{txt:'Phone (717) 939-4081'}]},
			{el:'dd',ch:[{txt:'GPS: 40.224844,-76.795549'}]}
		]
	}
	createMarker(map,40.224844,-76.795549,'Harrisburg',icon,location7,sidebarList);

	var location8 = {
		el:'dl',ch:[
			{el:'dt',ch:[{txt:'Hickory Run'}]},
			{el:'dd',ch:[{txt:'I-80 Exit 274 - 602 Route 534 '}]},
			{el:'dd',ch:[{txt:'White Haven, PA 18661'}]},
			{el:'dd',ch:[{txt:'Phone (570) 443-2300'}]},
			{el:'dd',ch:[{txt:'GPS: 41.064622,-75.749391'}]}
		]
	}
	createMarker(map,41.064622,-75.749391,'Hickory Run',icon,location8,sidebarList);
}

//create the marker
function createMarker(map,lat,lng,title,icon,content,list){
	
	var marker = new GMarker(new GLatLng(lat,lng),{icon:icon});
	marker.tooltip = new Tooltip(marker,jsonToDom(content),5);
	createTab(marker,content);
	marker.isInfoWindowOpen = false;
	
	var sidebarLink = jsonToDom({
		el:'li',ch:[
			{txt:title}
		]});
	list.appendChild(sidebarLink);
	
	var ttmover = GEvent.callbackArgs(marker,tooltipMouseover,sidebarLink);
	var ttmout = GEvent.callbackArgs(marker,tooltipMouseout,sidebarLink);
	var mclick = GEvent.callback(marker,markerClick);
	
	GEvent.addDomListener(sidebarLink,'mouseover',ttmover);
	GEvent.addDomListener(sidebarLink,'mouseout',ttmout);
	GEvent.addDomListener(sidebarLink,'click',mclick);	
	GEvent.addListener(marker,'mouseover',ttmover);
	GEvent.addListener(marker,'mouseout',ttmout);
	GEvent.addListener(marker,'click',mclick);
	GEvent.addListener(marker,'infowindowopen',GEvent.callbackArgs(marker,infoWindowOpen,sidebarLink));
	GEvent.addListener(marker,'infowindowclose',GEvent.callbackArgs(marker,infoWindowClose,sidebarLink));
	
	map.addOverlay(marker);	
	map.addOverlay(marker.tooltip);
	map.setCenter(marker.getPoint());
	
	return marker;
}

//create the tab(s) for the GInfoWindow
function createTab(marker,content){
	var element = jsonToDom(
		{el:'div',att:{Class:'googleMarkerTab'},ch:[
			{el:'div',att:{Class:'content'},ch:[
				content
			]}
		]});
	marker.tab = [new GInfoWindowTab('Address',element)];
}

//makrer,sidebar mouseover handler
function tooltipMouseover(sidebarLink){
	if(!(this.isInfoWindowOpen) && !(this.isHidden())){
		this.tooltip.show();
	}
}

//marker,sidebar mouseout handler
function tooltipMouseout(sidebarLink){
	this.tooltip.hide();
}

//marker click handler
function markerClick(){
	this.tooltip.hide();
	this.openInfoWindowTabs(this.tab);
}

//infowindowopen handler
function infoWindowOpen(sidebarLink){
	this.isInfoWindowOpen = true;	
}

//infowindowclose handler
function infoWindowClose(sidebarLink){
	this.isInfoWindowOpen = false;
}