function refineState(name) {
	this.ready    = false;
	this.loading  = false;
	this.showing  = false;
	this.name     = name;
	this.tab      = null;
	this.body     = null;
	this.scroll   = null;
}

var refineKeywords	= new refineState('refineKeywords');
var refineTaxonomy	= new refineState('refineTaxonomy');
var refineLocation	= new refineState('refineLocation');
var refineMap		= new refineState('refineMap');
var refineSystems	= new refineState('refineSystems');
var refineHabitats	= new refineState('refineHabitats');
var refineThreats	= new refineState('refineThreats');
var refineAssessment	= new refineState('refineAssessment');
var refineHistory	= new refineState('refineHistory');

function toggleRefineTab(tab, state) {
	if (state.showing) {
		hideRefineTab(state);
	} else if (state.ready) {
		showRefineTab(state);
	} else if (state.loading) {
		return;
	} else {
		state.loading = true;
		state.tab = tab;
		state.body = document.getElementById(state.name);

		showRefineSpinner(state);
		initRefineTab(state);
	}
}

function getScrollContainer(elem) {
	divs = elem.getElementsByTagName('div')
	for (var i = 0; i < divs.length; i++) {
		if (divs[i].className == 'scrollContainer') {
			return divs[i];
		}
	}
	return null;
}

function showRefineTab(state) {
	if (state.autosize != null) {
		state.scroll.style.width = state.autosize + 'px';
		state.tab.style.width = state.autosize + 'px';
	}

	state.tab.className = 'active';
	state.body.className = '';
	state.showing = true;
}

function hideRefineTab(state) {
	if (state.autosize != null) {
		state.tab.style.width = 'auto';
		state.scroll.style.width = 'auto';
	}

	state.tab.className = '';
	state.body.className = 'hidden';
	state.showing = false;
}

function showRefineTabReady(state) {
	state.loading = false;
	state.ready   = true;

	showRefineTab(state);
}

function adjustRefineTabWidth(state) {
	var scroll = getScrollContainer(state.body);
	var sizer  = document.getElementById(state.name + 'Autosize')
	if (sizer == null) {
		return;
	}

	var max = sizer.scrollWidth;

	if (max > 165 && max < 378) {
		state.autosize = max;
		state.scroll = scroll;
		showRefineTab(state);
	}
}

function showRefineSpinner(state) {
	var spinner = document.getElementById(state.name + 'Spinner');
	spinner.className = 'spinner';
}

var rightDelete = new Hash;

function rightToggleRefine(id) {
	found = rightDelete.unset(id);
	div  = $('rightRefineId' + id);
	link = $('rightRefineToggle' + id);

	added = false;

	if (found == true) {
		div.removeClassName('delete');
		div.fade({from: 0.2, to: 1, duration: 0.5});
		link.innerHTML = '[X]';
	} else {
		added = true;
		rightDelete.set(id, true);
		div.addClassName('delete');
		div.fade({from: 1, to: 0.2, duration: 0.5});
		link.innerHTML = '[+]';
	}

	deleted = rightDelete.keys().length;
	if (deleted == 0) {
		new Effect.BlindUp('rightRefineCommit', {duration: 0.5});
	} else if (deleted == 1 && added) {
		new Effect.BlindDown('rightRefineCommit', {duration: 0.5});
	}
}

// introduced from dynamic part

function initRefineTab(state) {
	id = state.name;

	if (id == 'refineKeywords') {
		new Ajax.Request('/apps/redlist/search/keywords/refine_form', {asynchronous:true, evalScripts:true, method:'get', parameters:'authenticity_token=' + encodeURIComponent('FrEnDSH9DKuONu905TtHC3GTZ1Rl2g+8ZvDvzjsr3Hk=')})
	} else if (id == 'refineThreats') {
		new Ajax.Request('/apps/redlist/search/threats/refine_form', {asynchronous:true, evalScripts:true, method:'get', parameters:'authenticity_token=' + encodeURIComponent('FrEnDSH9DKuONu905TtHC3GTZ1Rl2g+8ZvDvzjsr3Hk=')})
	} else if (id == 'refineSystems') {
		new Ajax.Request('/apps/redlist/search/systems/refine_form', {asynchronous:true, evalScripts:true, method:'get', parameters:'authenticity_token=' + encodeURIComponent('FrEnDSH9DKuONu905TtHC3GTZ1Rl2g+8ZvDvzjsr3Hk=')})
	} else if (id == 'refineHabitats') {
		new Ajax.Request('/apps/redlist/search/habitats/refine_form', {asynchronous:true, evalScripts:true, method:'get', parameters:'authenticity_token=' + encodeURIComponent('FrEnDSH9DKuONu905TtHC3GTZ1Rl2g+8ZvDvzjsr3Hk=')})
	} else if (id == 'refineAssessment') {
		new Ajax.Request('/apps/redlist/search/assessment/refine_form', {asynchronous:true, evalScripts:true, method:'get', parameters:'authenticity_token=' + encodeURIComponent('FrEnDSH9DKuONu905TtHC3GTZ1Rl2g+8ZvDvzjsr3Hk=')})
	} else if (id == 'refineLocation') {
		new Ajax.Request('/apps/redlist/search/location/refine_form', {asynchronous:true, evalScripts:true, method:'get', parameters:'authenticity_token=' + encodeURIComponent('FrEnDSH9DKuONu905TtHC3GTZ1Rl2g+8ZvDvzjsr3Hk=')})
	} else if (id == 'refineTaxonomy') {
		new Ajax.Request('/apps/redlist/search/taxonomy/refine_form', {asynchronous:true, evalScripts:true, method:'get', parameters:'authenticity_token=' + encodeURIComponent('FrEnDSH9DKuONu905TtHC3GTZ1Rl2g+8ZvDvzjsr3Hk=')})
	} else if (id == 'refineHistory') {
		new Ajax.Request('/apps/redlist/search/history/refine_form', {asynchronous:true, evalScripts:true, method:'get', parameters:'authenticity_token=' + encodeURIComponent('FrEnDSH9DKuONu905TtHC3GTZ1Rl2g+8ZvDvzjsr3Hk=')})
	}
}
