var entity;
var region_url;
var map;
var markers = [];
var slmarkers = [];
var rpp;
var pgno;
var country;
var gmarkerrollover;
var gmappopup;
//var gmappopuptabs = '<div class="tabcontainer"><ul class="tabnav"><li><a id="popuptab1" class="active" href="javascript:popuptabswitch(1);">Infomation</a></li></div>';
var gmappopuptabs = "<table style=\"width:100%; font-size:11px; border-bottom:1px solid #333333\"><tr>" +
					"<td class=\"gmap_close_button\"><a href=\"javascript:tm_popupclose();\">close [x]</a></td></tr></table>";

var selectedmarker = "";
var fxrollover;
var selectedfilters = [];
function tm_st(){}
tm_st.prototype = new GControl();
tm_st.prototype.initialize = function(map){
 	var stcontainer = document.createElement("div");
  var streset = document.createElement("span");
  var stmap = document.createElement("span");
  var stsat = document.createElement("span");
  var sthybrid = document.createElement("span");
  var stphys = document.createElement("span");
	streset.setAttribute("class", "mapbuttons");
	streset.setAttribute("id", "streset");
	streset.appendChild(document.createTextNode("Reset"));  
	stcontainer.appendChild(streset);
	GEvent.addDomListener(streset, "click", function() {map.returnToSavedPosition();} );
	stmap.setAttribute("class", "mapbuttons active");
	stmap.setAttribute("id", "stmap");
	stmap.appendChild(document.createTextNode("Map"));  
	stcontainer.appendChild(stmap);
	GEvent.addDomListener(stmap, "click", function() {map.setMapType(G_NORMAL_MAP); stmap.setAttribute("class", "mapbuttons active");stsat.setAttribute("class", "mapbuttons");sthybrid.setAttribute("class", "mapbuttons");stphys.setAttribute("class", "mapbuttons");});
	stsat.setAttribute("class", "mapbuttons");
	stsat.setAttribute("id", "stsat");
	stsat.appendChild(document.createTextNode("Satellite"));  
	stcontainer.appendChild(stsat);
	GEvent.addDomListener(stsat, "click", function() {map.setMapType(G_SATELLITE_MAP);stmap.setAttribute("class", "mapbuttons");stsat.setAttribute("class", "mapbuttons active");sthybrid.setAttribute("class", "mapbuttons");stphys.setAttribute("class", "mapbuttons");});
	sthybrid.setAttribute("class", "mapbuttons");
	sthybrid.setAttribute("id", "sthybrid");
	sthybrid.appendChild(document.createTextNode("Hybrid"));  
	stcontainer.appendChild(sthybrid);
	GEvent.addDomListener(sthybrid, "click", function() {map.setMapType(G_HYBRID_MAP);stmap.setAttribute("class", "mapbuttons");stsat.setAttribute("class", "mapbuttons");sthybrid.setAttribute("class", "mapbuttons active");stphys.setAttribute("class", "mapbuttons");});
	stphys.setAttribute("class", "mapbuttons");
	stphys.setAttribute("id", "stphys");
	stphys.appendChild(document.createTextNode("Physical"));  
	stcontainer.appendChild(stphys);
	GEvent.addDomListener(stphys, "click", function() {map.setMapType(G_PHYSICAL_MAP);stmap.setAttribute("class", "mapbuttons");stsat.setAttribute("class", "mapbuttons");sthybrid.setAttribute("class", "mapbuttons");stphys.setAttribute("class", "mapbuttons active");});
	map.getContainer().appendChild(stcontainer);
	return stcontainer;
};
tm_st.prototype.getDefaultPosition = function() {  return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(5, 1));};

function tm_initialise(loc, lrpp, lpgno, results,ccountry){
	region_url = loc;
	country = ccountry;
	rpp = lrpp;
	pgno = lpgno;
	process = function(doc){
		map = new GMap2(document.getElementById("googlemap"));
		map.addControl(new tm_st());
		map.addControl(new GScaleControl());
		map.addControl(new GLargeMapControl());
		map.enableContinuousZoom();
		bounds = new GLatLngBounds();
		var jsonData = eval('(' + doc + ')');
		var point = new GLatLng(parseFloat(jsonData.gmapdata.cp.lat), parseFloat(jsonData.gmapdata.cp.lng));
		var zoom = jsonData.gmapdata.cp.zoom;
		map.setCenter(point, zoom);
		map.checkResize();
		gmarkerrollover = document.createElement("div");
		document.getElementById("googlemap").appendChild(gmarkerrollover);
		gmarkerrollover.id = "gmaprollover";
		gmarkerrollover.style.visibility = "hidden";
		gmappopup = document.createElement("div");
		document.getElementById("googlemap").appendChild(gmappopup);
		gmappopup.id = "gmappopup";
		gmappopup.style.visibility = "hidden";
		var bounds = new GLatLngBounds();
		for(var i = 0; i < jsonData.gmapdata.markers.length; i++){
			var point = new GLatLng(parseFloat(jsonData.gmapdata.markers[i].lat), parseFloat(jsonData.gmapdata.markers[i].lng));
			bounds.extend(point);
			var icon = jsonData.gmapdata.markers[i].icon;
			var iconsize = jsonData.gmapdata.markers[i].iconsize;
			var rollover = jsonData.gmapdata.markers[i].rollover;
			var tab1 = jsonData.gmapdata.markers[i].tab1;
			var tab2 = jsonData.gmapdata.markers[i].tab2;
			var marker = tm_create_marker(point, icon, iconsize, rollover, tab1, tab2);
			marker.tab1 = tab1;
			marker.tab2 = tab2;
			markers[i] = marker;
			map.addOverlay(marker);
		}
		map.setZoom(map.getBoundsZoomLevel(bounds));
	  map.setCenter(bounds.getCenter());
		GEvent.addListener(map, "movestart", function() {
			tm_faderollover();
			tm_popupclose()
		});
		GEvent.addListener(map, "mouseout", function() {
			tm_faderollover();
		});
	}
	GDownloadUrl("/templates/global/gateway.php?json=region-locations&searchtype=initial&region_url=" + region_url+"&rpp="+rpp+"&pgno="+pgno+results+"&country="+country, process);
}

function tm_show_results(){
	tm_removemarkers();
	process = function(doc){
		var jsonData = eval('(' + doc + ')');
		//try{
			var bounds = new GLatLngBounds();
			for(var i = 0; i < jsonData.gmapdata.markers.length; i++){
				var point = new GLatLng(parseFloat(jsonData.gmapdata.markers[i].lat), parseFloat(jsonData.gmapdata.markers[i].lng));
				bounds.extend(point);
				var icon = jsonData.gmapdata.markers[i].icon;
				var iconsize = jsonData.gmapdata.markers[i].iconsize;
				var rollover = jsonData.gmapdata.markers[i].rollover;
				var tab1 = jsonData.gmapdata.markers[i].tab1;
				var tab2 = jsonData.gmapdata.markers[i].tab2;
				var marker = tm_create_marker(point, icon, iconsize, rollover, tab1, tab2);
				marker.tab1 = tab1;
				marker.tab2 = tab2;
				markers[i] = marker;
				map.addOverlay(marker);
			}
			var bounds_zoom = map.getBoundsZoomLevel(bounds);
			if(map.getZoom() == bounds_zoom){
				map.panTo(bounds.getCenter());
			}else{
				map.setZoom(bounds_zoom);
				map.panTo(bounds.getCenter());
			}
		//}catch(e){}
		if(jsonData.resultstable){
			$('#results')[0].innerHTML = jsonData.resultstable;
		}else{
			$('#results')[0].innerHTML = "No Results Found";
		}
			
		tm_dulldivs(false);
	}
	GDownloadUrl("/templates/global/gateway.php?json=region-locations&searchtype=dosearch&region_url=" + region_url+"&rpp="+rpp+"&pgno="+pgno+"&country="+country, process);
}

function tm_showmap(mid){
	var marker = markers[mid];
	var point = marker.getPoint();
	map.setCenter(point, 16);
	tm_markerpopup(marker);
}

function tm_setrpp(rppt){
	rpp = rppt;
	pgno = 1;
	tm_show_results();
}

function tm_setpgno(pgnot){
	tm_dulldivs(true);
	pgno = pgnot;
	tm_show_results();
}

function tm_create_marker(point, icon, iconsize, rollover, tab1, tab2){
	var icont = new GIcon();  
	if(iconsize == "big"){
		icont.iconSize = new GSize(56, 41);
	  icont.iconAnchor = new GPoint(28, 41);
	  icont.infoWindowAnchor = new GPoint(28, 0);
		icont.shadowSize = new GSize(84, 41);
	}	else if(iconsize == "long"){ //214x33
		icont.iconSize = new GSize(214, 33);
	  icont.iconAnchor = new GPoint(24, 33);
	  icont.infoWindowAnchor = new GPoint(24, 0);
		icont.shadowSize = new GSize(315, 33);
	}else{
		//icont.iconSize = new GSize(20, 34);
		icont.iconSize = new GSize(26, 32);
	  icont.iconAnchor = new GPoint(12, 35);
	  icont.infoWindowAnchor = new GPoint(12, 0);
		icont.shadowSize = new GSize(42, 32);
	}
	icont.shadow = 'http://s3media.pleasetakemeto.com/images/icon/shadow50.png';
	icont.image = 'http://s3media.pleasetakemeto.com/images/icon/icon-'+icon+'.png?1234';
	try{var marker = new GMarker(point, icont);}catch(e){var marker = new GMarker(point);}
	GEvent.addListener(marker, "mouseover", function() {
		gmarkerrollover.innerHTML = rollover;
		var element = $('#gmaprollover');
		var divcoords = map.fromLatLngToContainerPixel(point);
		var rolloverx=divcoords.x;
		var rollovery=divcoords.y;
		element.css({
			"visibility":"visible",
			"opacity":"1",
			"MozOpacity":"1",
			"filter": "alpha(opacity=100)",
			"position": "absolute",
			"display":"block"
		});
		$(element).animate({
			left:(rolloverx+10)+'px',
			top: rollovery+'px'
			},200);
	});
	GEvent.addListener(marker, "click", function() {
		if(selectedmarker != undefined && selectedmarker != "" && selectedmarker.getPoint() == marker.getPoint()){
			tm_popupclose(marker);
			return;
		}else{
			tm_markerpopup(marker);
			return;
		};
	});
	return marker;
}
function tm_markerpopup(marker){
	tm_faderollover();
	var point = marker.getPoint();
	var tab1 = marker.tab1;
	var popupboxwidth = 250;
	var popupboxheight = 155;
	var divcoords = map.fromLatLngToContainerPixel(point);
	var popupx=divcoords.x;
	var popupy=divcoords.y;
	var element = $("#gmappopup")[0];
	var mapdivsize = {"size":{"x": $('#googlemap').width(), "y":$('#googlemap').height()}};
	element.setAttribute('style','');
	element.removeAttribute('style');
	element.style.visibility="visible";
	element.style.position="absolute";
	element.style.overflow="hidden";
	element.style.width="0px";
	element.style.height="0px";
	element.innerHTML = "<table style=\"height:100%; width:100%\"><tr><td>" + gmappopuptabs + "</td></tr><tr><td style=\"vertical-align:top\">" +
						"<div id='popuptabcontent' style=\"height:100%\">" + tab1 + "</div>" + "</td></tr></table>";
	
	if(popupx > parseInt(mapdivsize.size.x /2)){
		element.style.right=(mapdivsize.size.x - popupx)+"px";
	}else{
		element.style.left=popupx+"px";
	}
	if(popupy > parseInt(mapdivsize.size.y /2)){
		element.style.bottom=(mapdivsize.size.y - popupy)+"px";
	}else{
		element.style.top=popupy+"px";
	}
	
	$(element).animate({
		height:popupboxheight+"px",
		width:popupboxwidth+"px"
	}, 200);
	selectedmarker = marker;
}

function tm_popuptabswitch(tab){
	$$('#gmappopup a').forEach(function(element){
		if($(element).getProperty('id') == 'popuptab'+tab){
			$(element).setProperty('class','active');
		}else{
			$(element).setProperty('class','');
		}
	});
	if(tab == 1){
		$('popuptabcontent').innerHTML= selectedmarker.tab1;
	}
	else if(tab == 2){
		$('popuptabcontent').innerHTML= selectedmarker.tab2;
	}

}

function tm_popupclose(){
	tm_faderollover();
	var element = $('#gmappopup')[0];
	$(element).animate({
			height:"0px",
			width:"0px"
		},200,"linear",function(){var element = $('#gmappopup')[0];$(element).fadeOut(500);});
	selectedmarker = "";
}

function tm_removemarkers(){
	for( var i = 0; i < markers.length;i++ ){
		map.removeOverlay(markers[i]);
	}
	markers = [];
}

function tm_faderollover(){
	$(gmarkerrollover).fadeOut(500);
}

function tm_dulldivs(visible){
	//return 0; 
	var divsheight = 0;
	var elements = $("div[class=yui-g]");
	var el = elements[0], left = 0, top = 0;
	left = elements.position().left;
	top = elements.position().top;
	var dullheight = elements.height() + $("div[class=yui-g]:last").height();
	var dullwidth = elements.width();
	var dulltop = top;
	var dullleft = left;
	var dull = document.getElementById('loadingcoverdiv');
	if(!dull){
		var loadingcoverdiv = document.createElement('div');
		loadingcoverdiv.id = 'loadingcoverdiv';
		loadingcoverdiv.innerHTML = "<img src='http://s3media.pleasetakemeto.com/images/ajax-loader.gif?123'>";
		$("#yui-main")[0].appendChild(loadingcoverdiv);
		var dull = document.getElementById('loadingcoverdiv');
		loadingcoverdiv.style.verticalAlign = "middle";
		loadingcoverdiv.style.textAlign = "center";
		loadingcoverdiv.style.position = 'absolute';
		loadingcoverdiv.style.filter = 'alpha(opacity=50)';
		loadingcoverdiv.style.MozOpacity = ".5";
		loadingcoverdiv.style.opacity = ".5";
		loadingcoverdiv.style.backgroundColor = "#FFFFFF";
		loadingcoverdiv.style.top = dulltop+'px';
		loadingcoverdiv.style.left = dullleft+'px';
		loadingcoverdiv.style.zIndex = "0.5";
		loadingcoverdiv.style.width = dullwidth+"px";
		loadingcoverdiv.style.height = dullheight+"px";
		loadingcoverdiv.style.display = "block";
	}
	if(visible){
		dull.style.top = dulltop+'px';
		dull.style.left = dullleft+'px';
		dull.style.width = dullwidth+'px';
		dull.style.height = dullheight+'px';
		dull.style.display = "block";
	}else{
		dull.style.display = "none";
	}
}

