var Suggest = {
	//Current active type
	activeCategory : 'everything',
	activeCharacteristic : '',
	previousValue :	'',
	toRange : 0,
	fromRange : 0,
	mouseOverSuggest : false,
	/**
	 * Initialization Function
	 */
	init : function(active, characteristic, fromRange, toRange){

		Suggest.activeCharacteristic = characteristic || 'all';
		Suggest.activeCategory = active || 'everything';
		Suggest.toRange = toRange || 0;
		Suggest.fromRange = fromRange || 0;
		//Grab our radio inputs and hide them. Attach events to the labels

		

		//Stop form submission when the suggest box appears
		$('find-migration-agent').addEvent('submit', function(evt){
			if ($('active-suggestion')) {
				Suggest.suggestUpdateLocation($('active-suggestion').name);
				Suggest.suggestTrash();
				$('memberLocation').focus();
				return false;
			}
			return true;
		});

		//Disable autocomplete on the location field
		$('memberLocation').setProperty('autocomplete','off');
		//Add suggestion events
		$('memberLocation').addEvents({
			'keyup': function(e){
				Suggest.suggest(e, this);
				return false;
			},
			'blur' : function(e){
				if ($('suggestions')) {
					//If the user is clicking the mouse in the area of the suggestions box then ignore this
					if (!Suggest.mouseOverSuggest) {
						Suggest.suggestTrash();
					}
				}
			}
		});

		
	},
	messageTween : function() {
		var message = $('search-message');
		message.set('morph',{duration: 3000, transition: 'sine:out'});
		message.morph({'background-color': '#41B4ED'
						//, color: '#000'
						});
	},
	/**
	 * simple suggest stuff
	 */
	suggest : function(event, where) {

		if (event.key == 'enter') {
			$('memberLocation').focus();
			return;
		}

		var whereCoords = where.getCoordinates();
		var bits = where.value.trim().split(',');
		Suggest.whereVal = bits.pop().trim();

		//Handle up, down and enter keystrokes
		if ($('suggestions') && (event.key == 'up' || event.key == 'down'  || event.key == 'esc')) {
			if (event.key == 'esc') {
				Suggest.suggestTrash();
			}
			try {
				if ($('suggestions').getFirst())
				Suggest.suggestActions(event);
			} catch (error){}

		}

		//if value hasnt changed dont bother refreshing
		if (Suggest.whereVal == Suggest.previousVal) return false;

		//set previous value
		Suggest.previousVal = Suggest.whereVal;

		//if empty then dispose of the suggestions box
		if (Suggest.whereVal == '') {
			Suggest.suggestTrash();
			return false;
		}

		if (!$('suggestions')) {
			var suggestBox = new Element('div',{
				'id' : 'suggestions',
				'styles' : {
						'top' : (whereCoords.top + 19)+'px',
						'left': (whereCoords.left )+'px'
						
					},
				'events' : {
						'mouseover' : function(){
							Suggest.mouseOverSuggest = true;
						},
						'mouseout' : function(){
							Suggest.mouseOverSuggest = false;
						}
					}
			});
			suggestBox.inject(document.body);

		} else {
			var suggestBox = $('suggestions');
			suggestBox.inject(document.body);
			//suggestBox.empty();
		}

		var strCheck = Suggest.whereVal;
		if(strCheck.length > 20) {
			return;
		}

		var SuggestMe = new Request.HTML({'url' : '/suggest-location.php', 'update' : 'suggestions'}).get({'key' : Suggest.whereVal});

		SuggestMe.addEvents({
			'onComplete' : function(){

				suggestBox.setStyle('display','block');
				$$('#suggestions a').addEvents({
						'click' : function() {
							try {
								Suggest.suggestUpdateLocation(this.name);
								Suggest.suggestTrash();
								return false;
							} catch (error) {
								Suggest.suggestTrash();
							}
							return false;
						},
						'mouseover' : function() {
							try {
							var activeS = $('active-suggestion');
							if (activeS) {
								activeS.erase('id');
							}
							this.set('id','active-suggestion');
							} catch (error) {

							}
						}
					});

				//suggestBox.set('html',where.value);
				//get suggest box dimension (need to hide select box in ie6)
				if (Browser.Engine.trident4) {
					//suggest box dimensions
					var sboxDim = $('suggestions').getSize();
					var suggestIframe = $('suggestions-iframe');
					if (!suggestIframe) {
						var suggestIframe = new Element('iframe',{
							'id' : 'suggestions-iframe',
							'styles' : {
								'top' : (whereCoords.top + 23)+'px',
								'left': (whereCoords.left + 1)+'px',
								'height' : sboxDim.y+'px'
								}
						});
						suggestIframe.inject(document.body);
					} else {
						suggestIframe.setStyle('height',sboxDim.y+'px')
					}
				}
			}
		});

	},
	//Trash the suggest box
	suggestTrash : function() {
		try {
			if (Browser.Engine.trident4) {
				$('suggestions-iframe').dispose();
			}
			$('suggestions').dispose();

		} catch (error) {

		}
	},
	/**
	 *
	 */
	suggestActions : function(event) {
		var hasSelection = false;
		if ($('active-suggestion')) {
			hasSelection = true;
			var activeS = $('active-suggestion');
		}
		if (event.key == 'down') {
			if (!hasSelection) {
				$('suggestions').getFirst().set('id','active-suggestion');
			} else {
				activeS.erase('id');
				try {
					activeS.getNext().set('id','active-suggestion');
				} catch (error) {
					$('suggestions').getFirst().set('id','active-suggestion');
				}
			}
		} else if (event.key == 'up' && hasSelection) {
			activeS.erase('id');
			try {
				activeS.getPrevious().set('id','active-suggestion');
			} catch (error) {
				$('suggestions').getLast().set('id','active-suggestion');
			}
		} else if ((event.key == 'enter') && hasSelection) {
			Suggest.suggestUpdateLocation(activeS.name);
			Suggest.suggestTrash();

		} else if (event.key == 'esc') {
			Suggest.suggestTrash();
		}
	},
	suggestUpdateLocation : function(value) {
		var loc = $('memberLocation');
		var bits = loc.value.trim().split(',');
		bits.pop();
		var suggestBits = value.trim().split(',');
		var len = bits.length;
		for (var i = 0; i < len;  ++i) {
			bits[i] = bits[i].trim();
		}

		suggestBits.each(function(b){
			if (bits.contains(b.trim()) == false) {
				bits.push(b.trim());
			}
		});
		loc.set('value', bits.join(', '));

		// bring focus back to the location field
		loc.focus();
	},
	
	
	
	/**
	 * Ajax request
	 */
	pagination : function(){
		var module = 'ModuleSearch';
		if (document.location.href.search(/favourites\//) != -1) {
			module = 'ModuleFavourites';
		}
		try {
			$$('.list-panel ul.pagination a').each(function(anc){
				if (anc.href) {
					anc.addEvent('click', function(e){
						Loader.display('list-container');

						var PageRequest = new Request.HTML({'url' : anc.href, 'update' : 'list-container'}).get({'ajaxModule' :module});
						PageRequest.addEvents({
							'onComplete' : function(){
								Suggest.pagination();
								Loader.clear('list-container');
								document.location.href='#property';
							}
						});
						return false;
					});
				}
			});
		} catch (error){

		}
	},
	
}
