
	if ( !qFlux )
		var qFlux = {};
	qFlux.select = {};
	
	//####################################################################################################

	qFlux.select.updateResult = function(type)
		{
			qFlux.select.type = type;
			qFlux.xmlHttpRequest('guide.php', 'type=' + type, 'qFlux.select.receiveResult');
		}
	
	//####################################################################################################

	qFlux.select.receiveResult = function()
		{
			if ( xmlHttp.readyState != 4 && xmlHttp.readyState != 'complete' )
				{ return; }
			if ( xmlHttp.responseText == 'database' )
				{ qFlux.select.showError('database'); }
			else if ( xmlHttp.responseText != '' )
				{
					eval(xmlHttp.responseText);
					if ( qFlux.select.type == 'author' )
						{
							qFlux.select.sortResult();
							qFlux.select.showResult();
							qFlux.xmlHttpSend();
							return;
						}
					qFlux.select.updateInput('language');
					qFlux.select.showFaction();
					qFlux.select.updateInput('faction');
					qFlux.select.showMap();
					qFlux.select.updateInput('map');
					qFlux.select.sortResult();
					qFlux.select.showResult();
				}
			qFlux.xmlHttpSend();
		}
	
	//####################################################################################################
	
	qFlux.select.setLanguage = function(language)
		{
			qFlux.select.setFilter('language', language);
			qFlux.select.setFilter('faction');
			qFlux.select.showFaction();
			qFlux.select.setFilter('map');
			qFlux.select.showMap();
			qFlux.select.showResult();
		}
	
	//####################################################################################################
	
	qFlux.select.showFaction = function()
		{
			var language = qFlux.select.getFilter('language');
			if ( !language )
				{
					document.getElementById("filter_faction").style.display = 'none';
					return;
				}
			else
				{ document.getElementById("filter_faction").style.display = 'block'; }
			var faction = {};
			faction.alliance = false;
			faction.horde = false;
			for ( index in qFlux.select.result.name[language] )
				{
					if ( qFlux.select.result.name[language][index][1] )
						{ faction.alliance = true; }
					if ( qFlux.select.result.name[language][index][2] )
						{ faction.horde = true; }
					if ( faction.alliance && faction.horde )
						{ break; }
				}
			var list = document.getElementById('list_faction');
			for ( i in faction )
				{
					var input = document.getElementById('faction_' + i);
					if ( faction[i] )
						{ input.style.display = 'block'; }
					else
						{ input.style.display = 'none'; }
				}
			qFlux.select.updateInput('faction');
		}
	
	//####################################################################################################
	
	qFlux.select.setFaction = function(faction)
		{
			qFlux.select.setFilter('faction', faction);
			qFlux.select.setFilter('map');
			qFlux.select.showMap();
			qFlux.select.showResult();
		}
	
	//####################################################################################################
	
	qFlux.select.showMap = function()
		{
			var language = qFlux.select.getFilter('language');
			if ( !language )
				{
					document.getElementById('filter_map').style.display = 'none';
					return;
				}
			else
				{ document.getElementById('filter_map').style.display = 'block'; }
			var faction = qFlux.select.getFilter('faction');
			var map = {};
			for ( i in qFlux.select.result.name[language] )
				{
					if ( qFlux.select.result.map[i][0] == 0 )
						{ continue; }
					if ( !faction || ( qFlux.select.result.name[language][i][1] && faction == 'A' ) || ( qFlux.select.result.name[language][i][2] && faction == 'H' ) )
						{
							if ( !map[qFlux.select.result.map[i][0]] )
								{ map[qFlux.select.result.map[i][0]] = {}; }
							if ( !map[qFlux.select.result.map[i][0]][i] )
								{
									var level;
									qFlux.select.result.map[i][1] == qFlux.select.result.map[i][2] ? level = qFlux.select.result.map[i][1] : level = qFlux.select.result.map[i][1] + ' - ' + qFlux.select.result.map[i][2];
									map[qFlux.select.result.map[i][0]][i] = qFlux.select.result.name[language][i][0] + '  (' + level + ')';
								}
						}
				}
			var list = document.getElementById('list_map');
			while ( list.firstChild )
				{ list.removeChild(list.firstChild) }
			for ( i in map )
				{
					var container = document.createElement('div');
					list.appendChild(container);
					var continent = document.createElement('b');
					continent.className = 'continent';
					container.appendChild(continent);
					continent.appendChild(document.createTextNode(qFlux.select.result.name[language][i][0]));
					for ( n in map[i] )
						{
							var node = document.createElement('div');
							var checkbox = document.createElement("input");
							checkbox.type = 'Checkbox';
							checkbox.name = 'map';
							checkbox.value = n;
							checkbox.onclick = qFlux.select.setLocation;
							checkbox.style.marginRight = '6px';
							node.appendChild(checkbox);
							node.appendChild(document.createTextNode(map[i][n]));
							container.appendChild(node);
						}
				}
		}
	
	//####################################################################################################
	
	qFlux.select.setLocation = function()
		{
			qFlux.select.setFilter('map', this.value, true);
			qFlux.select.showResult();
		}
	
	//####################################################################################################
	
	qFlux.select.updateInput = function(type)
		{
			var focus = qFlux.getCookie(type);
			var container = document.getElementById('list_' + type).childNodes;
			for ( i in container )
				{
					if ( container[i].tagName != 'DIV' )
						{ continue; }
					if ( type == 'map' )
						{
							var elements = container[i].childNodes;
							for ( n in elements )
								{
									if ( elements[n].tagName != 'DIV' )
										{ continue; }
									qFlux.select.updateSubInput(elements[n], focus);
								}
						}
					else
						{ qFlux.select.updateSubInput(container[i], focus); }
				}
		}
	
	//####################################################################################################
	
	qFlux.select.updateSubInput = function(container, focus)
		{
			var elements = container.childNodes;
			for ( n in elements )
				{
					if ( elements[n].tagName != 'INPUT' )
						{ continue; }
					elements[n].checked = false;
					if ( focus )
						{
							var options = focus.split('+');
							for ( u in options )
								{
									if ( elements[n].value == options[u] )
										{ elements[n].checked = true; }
								}
						}
				}
		}
	
	//####################################################################################################
	
	qFlux.select.setFilter = function(name, value, isSubValue)
		{
			if ( isSubValue )
				{
					if ( qFlux.select[name] )
						{
							var string = "";
							var isUnset = true;
							var options = qFlux.select[name].split('+');
							for ( i in options )
								{
									if ( options[i] != value )
										{ string == "" ? string = options[i] : string = string + '+' + options[i]; }
									else
										{ isUnset = false; }
								}
							if ( isUnset )
								{ string == "" ? string = value : string = string + '+' + value; }
							string == "" ? qFlux.select[name] = false : qFlux.select[name] = string;
						}
					else
						{ qFlux.select[name] = value; }
				}
			else
				{ qFlux.select[name] = value; }
			qFlux.setCookie(name, value, isSubValue);
		}
	
	//####################################################################################################
	
	qFlux.select.getFilter = function(name)
		{
			var value = qFlux.getCookie(name);
			if ( !qFlux.checkCookie() )
				{ value = qFlux.select[name]; }
			return value;
		}
	
	//####################################################################################################

	qFlux.select.showResult = function() 
		{
			var container = document.getElementById('result_list');
			while ( container.firstChild )
				{ container.removeChild(container.firstChild); }
			var language = qFlux.select.getFilter('language');
			var faction = qFlux.select.getFilter('faction');
			var map = qFlux.select.getFilter('map');
			var count = 0;
			for ( x in qFlux.select.result.guide )
				{
					if ( qFlux.select.type != 'author' )
						{
							if ( ( language && qFlux.select.result.guide[x][1] != language ) || ( faction && ( qFlux.select.result.guide[x][4] != faction && qFlux.select.result.guide[x][4] != 'N' ) ) )
								{ continue; }
							if ( map && !qFlux.select.isCoveringLocation(map, qFlux.select.result.guide[x][7]) )
								{ continue; }
						}
					count++;
					var guide = document.createElement('a');
					guide.className = 'guide';
					guide.href = 'guide/' + qFlux.select.result.guide[x][0];
					container.appendChild(guide);
					var element = document.createElement('img');
					element.src = 'transparent.gif';
					element.className = 'cover';
					guide.appendChild(element);
					element = document.createElement('img');
					element.src = 'transparent.gif';
					element.className = 'language_' + qFlux.select.result.guide[x][1].substring(0,2);
					guide.appendChild(element);
					element = document.createElement('b');
					element.appendChild(document.createTextNode(qFlux.select.result.guide[x][2]));
					guide.appendChild(element);
					//element = document.createElement('span');
					//element.appendChild(document.createTextNode(qFlux.select.result.guide[x][3]));
					//element.className = 'author';
					//guide.appendChild(element);
					element = document.createElement('img');
					element.src = 'transparent.gif';
					element.className = 'faction_' + qFlux.select.result.guide[x][4];
					guide.appendChild(element);
					element = document.createElement('span');
					element.appendChild(document.createTextNode(qFlux.select.result.guide[x][5]));
					element.className = 'downloads';
					guide.appendChild(element);
					element = document.createElement('img');
					element.src = 'transparent.gif';
					element.className = 'rating';
					if ( qFlux.select.result.guide[x][6] > 0 )
						{ element.className = 'rating_' + qFlux.select.result.guide[x][6]; }
					guide.appendChild(element);
				}
			document.getElementById('result_title').innerHTML = ( qFlux.select.type == 'author' ? 'Account Guides - ' : 'Guide List - ' ) + count + ' Guides';
		}
	
	//####################################################################################################
	
	qFlux.select.isCoveringLocation = function(map, guide) 
		{
			var maps = map.split('+');
			for ( i in maps )
				{
					for ( n in guide )
						{
							if ( guide[n] == maps[i] )
								{ return true; }
						}
				}
		}
	
	//####################################################################################################
	
	qFlux.select.sortResult = function(value) 
		{
			var descending = qFlux.select.getFilter('descending');
			if ( !value )
				{
					value = qFlux.select.getFilter('sort');
					descending = !descending;
				}
			else
				{
					qFlux.select.setFilter('sort', value);
					qFlux.select.setFilter('descending', !descending);
				}
			if ( !value )
				{ return; }
			if ( typeof(qFlux.select.result.guide[0][value]) == 'string' )
				{ qFlux.select.result.guide.sort(qFlux.select.sortByChar); }
			else
				{ qFlux.select.result.guide.sort(qFlux.select.sortByNumber); }
			if ( !descending )
				{ qFlux.select.result.guide.reverse(); }
			var filter = document.getElementById('result_sort').childNodes;
			for ( i in filter )
				{
					if ( filter[i].nodeName != 'SPAN' )
						{ continue; }
					if ( filter[i].id == value )
						{ filter[i].style.textDecoration = 'underline'; }
					else
						{ filter[i].style.textDecoration = 'none'; }
				}
		}
	
	//####################################################################################################
	
	qFlux.select.sortByNumber = function(a, b)
		{
			var value = qFlux.select.getFilter('sort');
			return a[value] - b[value];
		}
	
	//####################################################################################################

	qFlux.select.sortByChar = function(a, b)
		{
			var value = qFlux.select.getFilter('sort');
			return ( a[value] == b[value] ) ? 0 : ( a[value] > b[value]) ? 1 : -1;
		}
	
	//####################################################################################################
	
	qFlux.select.showError = function(status) 
		{
			var text;
			if ( status == 'message' )
				{ text = 'Your entered message is not valid as it has to be 2 - 265 characters long!'; }
			else if ( status == 'database' )
				{ text = 'No database connection or no guides to display - please try again later!'; }
			else
				{ text = 'Uhmm ... something went terribly wrong ...'; }
			document.getElementById('select_error').innerHTML = text;
			document.getElementById('select_error').style.display = 'block';
		}
	
	//####################################################################################################

	qFlux.select.sendCreate = function(event)
		{
			if ( event == null )
				{ event = window.event; }
			var target = ( event.target == null ? event.srcElement : event.target );
			if ( target.id == 'template_language' || target.className == 'language_option' )
				{ return false; }
			var language = { enUS:'english', deDE:'german', frFR:'french', esES:'spanish (Spain)', esMX:'spanish (Mexico)', koKR:'korean', zhCN:'chinese (simplified)', zhTW:'chinese (traditional)', ruRU:'russian' };
			var locale = document.getElementById('template_language').value;
			var confirm_box = confirm('Do you want to create an empty Guide Template for the ' + language[locale]+ ' game client?');
			if ( confirm_box == true )
				{ qFlux.xmlHttpRequest('guide.php', 'type=author&action=create&language=' + locale, 'qFlux.select.receiveCreate'); }
		}
	
	//####################################################################################################

	qFlux.select.receiveCreate = function()
		{
			if ( xmlHttp.readyState != 4 && xmlHttp.readyState != 'complete' )
				{ return; }
			if ( xmlHttp.responseText == 'success' )
				{ location.reload(); }
		}


