/**
 * @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()){
		alert('Sorry, the Google Maps API is not compatible with this browser.');
		return;
	}else{
		createMap();
	}
}


//create the marker
function createMarker(map,lat,lng,title,icon,content,list,title_one, accredited_src){
	
	var marker = new GMarker(new GLatLng(lat,lng),{icon:icon});
	marker.tooltip = new Tooltip(marker,jsonToDom(title_one),5);
	createTab(marker,content);
	marker.isInfoWindowOpen = false;
	
	var sidebarLink = jsonToDom({
		el:'div',ch:[
			{txt:title}
		]});
	
	accredited_src = typeof(accredited_src) != 'undefined' ? accredited_src : '';
	var li = document.createElement('li');
	li.appendChild(sidebarLink);
	var div = document.createElement('div');
	if (accredited_src != '') {
		var img = document.createElement('img');
		img.setAttribute('src',accredited_src);
		img.setAttribute('alt','');
		div.appendChild(img);
	}
	li.appendChild(div);
	list.appendChild(li);
	
	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;
}