var entity, country;
var dist;
var locationvar;
var map;
var subtype;
var markers = [];
var slmarkers = [];
var rpp;
var pgno;
var gmarkerrollover;
var heropin;
var gmappopup;
var just_panned = false;
//var gmappopuptabs = '<div class="tabcontainer"><ul class="tabnav"><li><a id="popuptab1" class="active" href="javascript:popuptabswitch(1);">Infomation</a></li></ul></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, lentity, ldist, lrpp, lpgno, results, pfilters, psubtype,pcountry){
	if(pfilters != ""){
		selectedfilters = pfilters.split(",");
	}
	locationvar = loc;
	entity = lentity;
	subtype = psubtype;
	pgno = lpgno;
	rpp = lrpp;
	dist = ldist;
	country = pcountry;
	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();
		if(jsonData.gmapdata.cpmarker != undefined){
			var point = new GLatLng(parseFloat(jsonData.gmapdata.cpmarker.lat), parseFloat(jsonData.gmapdata.cpmarker.lng));
			bounds.extend(point);
			var icon = jsonData.gmapdata.cpmarker.icon;
			var iconsize = jsonData.gmapdata.cpmarker.iconsize;
			var rollover = jsonData.gmapdata.cpmarker.rollover;
			var tab1 = jsonData.gmapdata.cpmarker.tab1;
			var tab2 = jsonData.gmapdata.cpmarker.tab2;
			var marker = tm_create_marker(point, icon, iconsize, rollover, tab1, tab2);
			marker.tab1 = tab1;
			marker.tab2 = tab2;
			heropin = marker;
			map.addOverlay(marker);
		}
		
		try{
			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);
				be = true;
			}
		}catch(e){}
		if(map.getBoundsZoomLevel(bounds) != 1){
			map.setZoom(map.getBoundsZoomLevel(bounds));
			map.setCenter(bounds.getCenter());
			map.savePosition();
		}
		
		GEvent.addListener(map, "movestart", function() {
			tm_faderollover();
			tm_popupclose()
		});
		GEvent.addListener(map, "mouseout", function() {
			tm_faderollover();
		});
		
		GEvent.addListener(map, "moveend", function() {
			if(just_panned){
				map.savePosition();
				just_panned = false;
			}
		});
	}
	GDownloadUrl("/templates/global/gateway.php?json=location-listings&searchtype=initial&loc=" + locationvar+"&entity="+entity+"&rpp="+rpp+"&pgno="+pgno+"&country="+country+"&subtype="+subtype+results, process);
}

function tm_show_results(){
	tm_removemarkers();
	var filters = tm_getfilters();
	process = function(doc){
		var jsonData = eval('(' + doc + ')');
		try{
			var bounds = new GLatLngBounds();
			var hb = false;
			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); hb = true;
				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);
			}
			bounds.extend(heropin.getLatLng());
			var bounds_zoom = map.getBoundsZoomLevel(bounds);
			if(map.getZoom() == bounds_zoom){
				just_panned = true;
				map.panTo(bounds.getCenter());
				just_panned = true;
				
			}else{
				if(hb){
					just_panned = true;
					map.setZoom(bounds_zoom);
					map.panTo(bounds.getCenter());
					just_panned = true;
				}
			}
		}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=location-listings&searchtype=dosearch&loc="+locationvar+"&entity="+entity+"&rpp="+rpp+"&pgno="+pgno+"&dist="+dist+"&country="+country+"&subtype="+subtype+filters, process);
}


function tm_getfilters(){
	if(selectedfilters.length > 0){
		return "&filters=" +selectedfilters;
	}else{
		return "";
	}
}

function tm_toggle_map(){
	var element = $("#googlemapcoverdiv");
	if(element.height() == 1){ 
		element.animate({
			height:element[0].scrollHeight+'px'
		},500);
		$('#toggle_map_button')[0].innerHTML='[Hide Map]';
	}
	else{
		element.animate({
			height:'1px'
		},500);
		$('#toggle_map_button')[0].innerHTML='[Show Map]';
	}
}

function tm_toggle_options(){
	var element = $("#filteroptions");
	if(element.height() == 0){
		element.animate({
			height:element[0].scrollHeight+'px',
			'padding-top':'11px',
			'padding-bottom':'11px'
		},200);
		element[0].style.borderStyle = 'none solid solid' ;
		$('#toggle_options_button')[0].innerHTML='&raquo; Less Options';
	}
	else{
		element.animate({
			height:'0px',
			'padding-top':'0px',
			'padding-bottom':'0px'
		},200);
		$('#toggle_options_button')[0].innerHTML='&raquo; More Options';
		element[0].style.borderStyle = 'none solid' ;
	}
}

function tm_filterlink(fid){
	var element = $('#f_'+fid)[0];
	if(element.checked){
		element.checked = false;
	}
	else{
		element.checked = true;
	}
	tm_filterchange(fid);
}

function tm_filterchange(fid){
	tm_dulldivs(true);
	pgno = 1;
	// if all selected then clear top filters and remove from seleceted filters array
	if(fid == "all" && $('#f_'+fid)[0].checked){
		if(entity == "attraction"){
			var top_filters = $('#listingfilters input');
		}
		else{
			var top_filters = $('#filtertop input');
		}
		for(var i = 0; i < top_filters.length; i++){
			if(top_filters[i].checked && top_filters[i].id != "f_all"){
				// remove filter from array
				for(var o = 0; o < selectedfilters.length ;o++){
					if(selectedfilters[o] == top_filters[i].value){
						selectedfilters.splice(o,1);
					}
				}
				//uncheck the box
				top_filters[i].checked = false;
			}
		}
	}
	//check here for all filter selected off while no other filters are selected
	if(fid == "all" && $('#f_all')[0].checked == false){
		if(entity == "attraction"){
			var top_filters = $('#listingfilters input');
		}
		else{
			var top_filters = $('#filtertop input');
		}
		var select_all = true;
		for(var i = 0; i < top_filters.length; i++){
			if(top_filters[i].checked && top_filters[i].id != "f_all"){
				select_all = false;
			}
		}
		if(select_all){
			$('#f_all')[0].checked = true;
			// remove form array so can be reinsrted
			for(var o = 0; o < selectedfilters.length ;o++){
				if(selectedfilters[o] == "all"){
					selectedfilters.splice(o,1);
				}
			}
		}
	}
	// check here if other filter is selected while all is on
	if(fid != "all"){
		var select_all = true;
		if(entity == "attraction"){
			var top_filters = $('#listingfilters input');
		}
		else{
			var top_filters = $('#filtertop input');
		}
		
		for(var i = 0; i < top_filters.length; i++){
			if(top_filters[i].checked && top_filters[i].id != "f_all"){
				select_all = false;
				// remove form array so can be reinsrted
				for(var o = 0; o < selectedfilters.length ;o++){
					if(selectedfilters[o] == "all"){
						selectedfilters.splice(o,1);
					}
				}
			}
		}
		if(select_all){
			$('#f_all')[0].checked = true;
		}
		else{
			$('#f_all')[0].checked = false;
		}
	}
	
	var element = $('#f_'+fid)[0];
	var exp = element.value;
	if(element.checked){
		selectedfilters.push(exp);
	}else{
		for(var i = 0; i < selectedfilters.length ;i++){
			if(selectedfilters[i] == exp){
				selectedfilters.splice(i,1);
			}
		}
	}
	tm_show_results();
}

function tm_remove_all_filters(){
	tm_dulldivs(true);
	var check_boxes = $('#filtercontainer input');
	for(var cb = 0; cb < check_boxes.length; cb++){
		var element = check_boxes[cb];
		var exp = element.value;
		if(element.checked){
			for(var i = 0; i < selectedfilters.length ;i++){
				if(selectedfilters[i] == exp){
					selectedfilters.splice(i,1);
					element.checked = false;
				}
			}
		}
	}
	pgno = 1;
	tm_show_results();
}

function tm_select_all_filters(){
	tm_dulldivs(true);
	var check_boxes = $('#filtercontainer input');
	for(var cb = 0; cb < check_boxes.length; cb++){
		var element = check_boxes[cb];
		if(element.checked == false){
			var exp = element.value;
			element.checked = true;
			selectedfilters.push(exp);
		}
	}
	pgno = 1;
	tm_show_results();
}

function tm_clear_selected(){
	tm_dulldivs(true);
	var check_boxes = $('#filtercontainer input');
	for(var cb = 0; cb < check_boxes.length; cb++){
		var element = check_boxes[cb];
		var exp = element.value;
		if(element.checked){
			for(var i = 0; i < selectedfilters.length ;i++){
				if(selectedfilters[i] == exp){
					selectedfilters.splice(i,1);
					element.checked = false;
				}
			}
		}
	}
	//selectedfilters = [];
	pgno = 1;
	tm_show_results();
}

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

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

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

function show_small_enq() {
	var element = document.getElementById('ge_form_small');
	if (element.style.height == '810px') {
		new Effect.Morph(element,{
			"style" : {
			height:'1px'},
			"duration":.8
		});
	}
	else {
		new Effect.Morph(element,{
			"style" : {
			height:'810px'},
			"duration":.8
		});
	}
}

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){
	var point = marker.getPoint();
	tm_faderollover();
	var divcoords = map.fromLatLngToContainerPixel(point);
	var popupx=divcoords.x;
	var popupy=divcoords.y;
	var popupboxwidth = 250;
	var popupboxheight = 145;
	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%\">" + marker.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() + $('div[class=yui-gf]').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";
	}

}

function tracksubtype(entity, subtype) {
	pageTracker._trackPageview('/subtype/' + entity + '/' + subtype);
}

