// performes an ajax search on attributes
oo.attributeSearch = function() { 
	// create "loading" div
	if (!oo.loadingSpinner) {
		oo.loadingSpinner = new Element('div', {'id': 'loading', 'html': '<!-- loading -->'}).fade('hide').inject(document.body, 'bottom');
	}
	var searchRequest = new Request.HTML({ 
		url: 'index.php?type=124356', 
		method: 'get', 
		link: 'cancel',
		update: $('view-list').getParent(),
		onRequest: function() {			
			oo.loadingSpinner.fade('in');
		}, 
		onSuccess: function() {
			oo.loadingSpinner.fade('out');
			oo.addRingtonePlayerEvents(); // add events to the ringtone player
			oo.ringtonePlayer.embed('ringtonePlayerSWF');
		} 
	}).send($('view-search').toQueryString());	
	// get total result count for the search
	var countRequest = new Request.JSON({
		url: 'index.php?eID=tx_ringtones_json&action=getPivarsSearchCount&' + $('view-search').toQueryString(),
		method: 'get',
		onSuccess: function() {
			if (this.response.json.count == oo.collectionViewRowCount) {
				$('view-search-result-count-container').slide('out');
			} else {
				$('view-search-result-count').set('text', this.response.json.count);
				$('view-search-result-count-container').slide('in');
			}
		}
	}).get();
	window.location.hash = $('view-search').toQueryString();
};

// reload page with search parameters if hash exists
if (window.location.hash) { 
	window.location.href = oo.listViewURL + '?' + window.location.hash.substring(1);
}

window.addEvent('domready', function() {
	
	// autocompleter
	var autocompleter = new Autocompleter.Request.JSON(
		'view-search-title', 
		'index.php?eID=tx_ringtones_json&action=getSetsByTitle&pid=2&', 
		{ 
			postVar: 'currentInput', 
			autoSubmit: true, 
			width: 123,
			onSelection: function(input, selection, currentValue, selectedSuggestion) {
				//
			}
		}
	);
	
	// attribute type change
	$$('#view-search-modes input').addEvent('change', function() { 
		if (this.get('checked')) {
			// uncheck other checkboxes in group on check
			$$('#view-search-modes input').set('checked', false);
		 	this.set('checked', true);
		} 
	});
	
	// attribute mode change
	$$('#view-search-types input').addEvent('change', function() {
		if (this.get('checked')) {
			$$('#view-search-types input').set('checked', false);
		 	this.set('checked', true);
		}
	});
	
	// set up Fx.Slide for instruments fieldset (the visibility stuff needed for ie)
	var instrumentsFieldset = new Fx.Slide($('view-search-instruments'));
	$('view-search-instruments').setStyle('visibility', 'hidden');
	$('view-search-instruments').setStyle('display', 'block'); // initially hidden by css
	instrumentsFieldset.hide();
	$('view-search-instruments').setStyle('visibility', 'visible');
			
	// set up Fx.Slide for bpm fieldset
	var bpmFieldset = new Fx.Slide($('view-search-bpm'));
	$('view-search-bpm').setStyle('visibility', 'hidden');
	$('view-search-bpm').setStyle('display', 'block'); // the element is initially hidden by css
	bpmFieldset.hide();
	$('view-search-bpm').setStyle('visibility', 'visible');
	
	// classes for the toggle link
	var status = {
		'true': 'view-search-toggle-off',
		'false': 'view-search-toggle-on'
	};
	
	// toggle instruments fieldset on click
	$('view-search-toggle-instruments').addEvent('click', function() {
		$('view-search-toggle-instruments').set('class', status[instrumentsFieldset.open]);
		instrumentsFieldset.toggle();
	});
	
	// toggle bpm fieldset on click
	$('view-search-toggle-bpm').addEvent('click', function() {
		$('view-search-toggle-bpm').set('class', status[bpmFieldset.open]);
		bpmFieldset.toggle();
	});
	
	// open instrument and bpm fieldsets if contained checkboxes are checked on page reload
	$$('#view-search-instruments input').each(function(checkbox, index) {
		if (checkbox.get('checked')) {
			$('view-search-instruments').setStyle('display', 'block');
			$('view-search-toggle-instruments').set('class', status[instrumentsFieldset.open]);
			instrumentsFieldset.slideIn();
		} 
	});
	$$('#view-search-bpm input').each(function(radiobutton, index) {
		if (radiobutton.get('checked') && radiobutton.get('value') != '') { // check if something else than the default is checked
			$('view-search-bpm').setStyle('display', 'block');
			$('view-search-toggle-bpm').set('class', status[bpmFieldset.open]);
			bpmFieldset.slideIn();
		} 
	});
	
	// remove "..." from title search field on focus
	$('view-search-title').addEvent('focus', function() {
		if (this.get('value') == 'oo...') {
			this.set('value', 'oo');
			// without this, IE sets the cursor at the beginning of the text field
			if (Browser.Engine.trident) {
				var r = this.createTextRange();
				r.collapse(false);
				r.select();
			}
		}
	});
	
	// set "oo..." on blur if value is 'oo' or ''
	$('view-search-title').addEvent('blur', function() {
		if (this.get('value') == 'oo' || this.get('value') == '') {
			this.set('value', 'oo...');
		}
	});
	
	// remove 'oo...' from title field on submit
	$('view-search').addEvent('submit', function() {
		if ($('view-search-title').get('value') == 'oo...' || $('view-search-title').get('value') == 'oo') {
			$('view-search-title').set('value', '');
		}
	});
	
	// add event listeners to search form elements to refresh list view via ajax
	if (Browser.Engine.trident) { // IE doesn't handle onchange very well so we'll use onclick instead
		$$('#view-search-types input', '#view-search-modes input', '#view-search-instruments input', '#view-search-bpm input', '#view-search-types label', '#view-search-modes label', '#view-search-instruments label', '#view-search-bpm label').addEvent('click', oo.attributeSearch);
	} else {
		$$('#view-search-types input', '#view-search-modes input', '#view-search-instruments input', '#view-search-bpm input').addEvent('change', oo.attributeSearch);
	}
	
	// add functionality to clear filter button
	$('view-search-clear-filter').addEvent('click', function(e) {
		e.stop();
		$$('#view-search input').each(function(element) {
			if (element.get('type') == 'checkbox') {
				element.set('checked', '');
			}
		});
		$('bpm-').set('checked', 'checked');
		oo.attributeSearch();
	});
	
	// make result count div into a slide
	$('view-search-result-count-container').slide('hide').removeClass('hidden');
	
	// show result count if result is filtered
	if (oo.rowCount != oo.collectionViewRowCount) {
		$('view-search-result-count').set('text', oo.rowCount);
		$('view-search-result-count-container').slide('in');
	}
	
});