var AJdeca = {
	facetURL: null,

	initialize: function(facetURL){
		AJdeca.facetURL = facetURL;	
		this.stripTags();
		AJdeca.initializeUnderMapControls();
	},

	initializeUnderMapControls: function() {
		var t = $("toggleMap");
		if (t) {
			$("toggleMap").observe('change', GeoCode.showHideMap);
			$("toggleMap").observe('change', AJdeca.showHideControls);
		}
	},

	ajaxListener: function(listenObject,url,event,replace,query){
		Event.observe(listenObject,event,function(){
			var  resultContainer = $('search-results-container');
			var urlWithParams = url + "&" + AJdeca.getQuery();

			resultContainer.innerHTML = 'Loading';
			AJdeca.hotelResults(query,resultContainer);
			new Ajax.Updater(replace, urlWithParams,{
				onComplete: function(){
					AJdeca.stripTags();
					GeoCode.showHideMap();
					GeoCode.clearMap();
					GeoCode.getMapCoordinates();
					AJdeca.initializeUnderMapControls();
					
					
				}
			});
		});
	},

	ajaxListenerNoRedraw: function(listenObject,url,event,replace,query){
		Event.observe(listenObject,event,function(){
			var  resultContainer = $('search-results-container');
			var urlWithParams = url + "&" + AJdeca.getQuery();

			
			new Ajax.Updater(replace, urlWithParams,{				
				
				onComplete: function(){
				 
			
				
				}
			});
		});
	},
	
	 gup: function(name)	{
		// gets url paramters
	  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
	  var regexS = "[\\?&]"+name+"=([^&#]*)";
	  var regex = new RegExp( regexS );
	  var results = regex.exec( window.location.href );
	  if( results == null )
	    return "";
	  else
	    return results[1];
	},
	
	
	stripTags: function(){		
				 
		 var ne_param = AJdeca.gup("Ne");
		 var ntt_param = AJdeca.gup("Ntt");		 
		 
		// if there is a Ne number and no Ntt value, leave
		if (ne_param && !ntt_param) 		
			return;			
		
		var facets = $$("#endeca .dim a");
		var facetURL = '/hyatt/features/i_ajax-search-box.jsp';		
			
		facets.each(function(tag){
			var fullURL = tag.href;
			var params = fullURL.substr(fullURL.lastIndexOf('?'));			
			var link = facetURL+params+'&request=ajax&resultsPage='+AJdeca.getThisUrl();
	
			tag.href='#';
			var container = $('endeca');
			// if no "[" then go, otherwise we do nothing because it is an endeca bucket (contains other Endeca facets) 
			// that does not change the hotel results.
			//console.log(tag.innerHTML.indexOf('[') < 0)
			if (tag.innerHTML.indexOf('[') < 0 ) {
				 AJdeca.ajaxListener(tag,link,'click',container,params);
			}
			else // there is a "["
				 AJdeca.ajaxListenerNoRedraw(tag,link,'click',container,params);
		});
	},

	/**
	 * Returns the url for this search page, so we can pass it to our Ajax queries
	 * URL Encodes it and knocks off the context path, so it is suitable for the JSPs
	 */
	getThisUrl: function()
	{
		return escape(window.location.pathname.substring('/hyatt'.length));
	},

	hotelResults: function(queryString,resultContainer){
		var hotelURL = '/hyatt/features/i_hotel-results.jsp';
		var link = hotelURL + queryString + '&request=ajax&resultsPage='+ AJdeca.getThisUrl();
		new Ajax.Updater(resultContainer,link, {onComplete: AJdeca.initializeUnderMapControls} );
	},

	showHideControls: function()
	{		
		switch ($("toggleMap").selectedIndex)
		{
		case GeoCode.VIEW_MAP_ONLY:
			$("sort-control").style.display = "none";
			break;
		case GeoCode.VIEW_LISTINGS_ONLY:
		case GeoCode.VIEW_MAP_AND_LISTINGS:
			$("sort-control").style.display = "block";
			break;
		default:
			alert("Unreachable state in AJdeca.showHideControls, state was:"+$("toggleMap").selectedIndex);
		}
	},

	getQuery: function(url)
	{
		var fVal, mVal, dVal;
		var unitVal = "m";
		var xAction = "";
		var ntt = "";

		var filter = $("brandPrice");
		var distance = $("searchDistance");
		var radioButtons = Form.getInputs('frmSort','radio');
		var mapview = $("toggleMap");

		if (distance) {
			dVal = distance.options[distance.selectedIndex].value;
		}
		if (filter) {
			fVal = filter.options[filter.selectedIndex].value;
		}
		if (mapview) {
			mVal = mapview.options[mapview.selectedIndex].value;
		}

		if (radioButtons.length > 0)
		{
			var radioSelected = radioButtons.find(function(radio) { return radio.checked; });
			unitVal = (radioSelected.value);
		}

		if (AJdeca.getXActionId())
			xAction = "&xactionid="+AJdeca.getXActionId();
		
		if (AJdeca.getNtt())
			ntt = "&Ntt="+AJdeca.getNtt();
		

		return "sorting=" + fVal + "&mapview=" + mVal + "&currentRadius=" + dVal + "&unit=" + unitVal + xAction + ntt;
	},

	/**
	 * Special code to handle passing along the reservation xactionid if applicable
	 */
	getXActionId: function()
	{
		return $("x-action-id-storage").value;
	},
	
	// Endeca Ntt Value 	
	getNtt: function()
	{
		return $("ntt-storage").value;
	},
	
	search: function(action, url, refreshMap)
	{
		var resultContainer = $("search-results-wrapper");

		url = url + "?" + AJdeca.getQuery(url) + "&type=" + action;

		var failed = function() { 
			if ($('loading-results'))			
				$('loading-results').style.display = 'none';
			if ($('results-error'))
				$('results-error').style.display = 'block';
			if (isDefined(console)) {
				console.log(failed.arguments);
			}
		}

		if ($('loading-results')) 
			$('loading-results').style.display =  'block';
		else
			alert("Cannot find Loading div!");

		new Ajax.Updater(resultContainer, url, {method: 'get',
			onFailure: failed,
			onException: failed,
			onComplete: function(){
				AJdeca.initializeUnderMapControls();

				if ($('loading-results')) 
					setTimeout(function() {$('loading-results').style.display =  'none';}, 500);
				else
					geoCodeError("Ajax.Updater.onComplete", "Cannot find Loading div!");

				if (refreshMap) {
					GeoCode.clearMap();
					GeoCode.getMapCoordinates();
				}

				GeoCode.showHideMap();
			}
		});
		
	
//      Call to dynamically update the facets
//		if (action == "distance") {
//			var resultContainer2 = $("endeca-search-facets-results");
//			var url2 = "/hyatt/features/i_ajax-search-box.jsp"+ "?sorting=" + fVal + "&currentRadius=" + dVal + "&unit=" + unitvalue+ "&type=" + action;
//			var url2 = "/hyatt/features/i_ajax-search-box.jsp"+ "?type=facet";
//			new Ajax.Updater(resultContainer2,url2, {method: 'get'});
//		}
	}
}
