var entity;
var locationvar;
var subtype;
var map;
var country;
var markers = [];
var slmarkers = [];
var rpp;
var pgno;
var gmarkerrollover;
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></li></ul></div>';
// this type of link removed until more tabs come online - <a id=\"popuptab1\" href=\"javascript:popuptabswitch(1);\">Information</a>
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 = [];
var suburb_id;

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, lrpp, lpgno, results, pfilters, psuburb_id, psubtype,ccountry){
	
	if(pfilters != ""){
		selectedfilters = pfilters.split(",");
	}
	suburb_id = psuburb_id;
	country = ccountry;
	locationvar = loc;
	entity = lentity;
	subtype = psubtype;
	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";
		
		if(jsonData.gmapdata.markers.length > 0){
			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();
		});
		GEvent.addListener(map, "click", function() {
		});
		GEvent.addListener(map, "moveend", function() {
			if(just_panned){
				map.savePosition();
				just_panned = false;
			}
		});
		
	}
	GDownloadUrl("/templates/global/gateway.php?json=region-listings&searchtype=initial&loc=" + locationvar+"&entity="+entity+"&rpp="+rpp+"&pgno="+pgno+"&suburb_id="+suburb_id+"&subtype="+subtype+results+"&country="+country, process);
}

function tm_show_results(){
	tm_removemarkers();
	var filters = tm_getfilters();
	process = function(doc){
		var jsonData = eval('(' + doc + ')');
		try{
			if(jsonData.gmapdata.markers.length > 0){
				
				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){
					just_panned = true;
					map.panTo(bounds.getCenter());
					just_panned = true;
				}else{
					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=region-listings&searchtype=dosearch&loc="+locationvar+"&entity="+entity+"&rpp="+rpp+"&pgno="+pgno+"&suburb_id="+suburb_id+"&subtype="+subtype+filters+"&country="+country, process);
}


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_getfilters(){
	if(selectedfilters.length > 0){
		return "&filters=" +selectedfilters;
	}else{
		return "";
	}
}

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')[0].getElementsByTagName('input');
			var top_filters = $('#listingfilters input');
		}
		else{
			//var top_filters = $('#filtertop')[0].getElementsByTagName('input');
			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_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 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_drop_filter(filter_var){
	tm_dulldivs(true);
	for(var i = 0; i < selectedfilters.length ;i++){
		if(selectedfilters[i] == filter_var){
			selectedfilters.splice(i,1);
		}
	}
	$('#filtercontainer input').forEach(function(element){
		if(element.value == filter_var && element.checked == true){
			element.checked = false;
		}
	});
	pgno = 1;
	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){
	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 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);
}














