﻿AdvancedSearch = {
	Category: {
		element: null,
		directory: null,
		OnChange: function() {
			// Disable the dropdownlist and remove all options.
			AdvancedSearch.Subcategory.element.disabled = true;
			AdvancedSearch.Subcategory.element.options.length = 0;
			
			// Get subcategories with AJAX.
			AdvancedSearch.Subcategory.xmlhttp = __getXMLHTTP();
			AdvancedSearch.Subcategory.xmlhttp.onreadystatechange = AdvancedSearch.Subcategory.OnLoad;
			AdvancedSearch.Subcategory.xmlhttp.open("GET", "/data/subcategories.aspx?parent=" + AdvancedSearch.Category.element.options[AdvancedSearch.Category.element.selectedIndex].value, true);
			AdvancedSearch.Subcategory.xmlhttp.setRequestHeader("Content-Type", "charset=UTF-8");
			AdvancedSearch.Subcategory.xmlhttp.send(null);
		},
		OnKeyUp: function(e) {
			if(e.keyCode == 13) {
				AdvancedSearch.Submit();
			}
		}
	},
	Subcategory: {
		element: null,
		directory: null,
		xmlhttp: null,
		OnChange: function() {
			// Disable the dropdownlist and remove all options.
			AdvancedSearch.Genre.element.disabled = true;
			AdvancedSearch.Genre.element.options.length = 0;
			
			// Get subcategories with AJAX.
			AdvancedSearch.Genre.xmlhttp = __getXMLHTTP();
			AdvancedSearch.Genre.xmlhttp.onreadystatechange = AdvancedSearch.Genre.OnLoad;
			AdvancedSearch.Genre.xmlhttp.open("GET", "/data/genres.aspx?category=" + AdvancedSearch.Subcategory.element.options[AdvancedSearch.Subcategory.element.selectedIndex].value, true);
			AdvancedSearch.Genre.xmlhttp.setRequestHeader("Content-Type", "charset=UTF-8");
			AdvancedSearch.Genre.xmlhttp.send(null);
		},
		OnLoad: function() {
			if(AdvancedSearch.Subcategory.xmlhttp.readyState == 4) {
				AdvancedSearch.Subcategory.directory = new Array();
				
				var data = AdvancedSearch.Subcategory.xmlhttp.responseText.split("\n");
				
				for(var i = 0; i < data.length; i += 3) {
					var option = document.createElement("option");
					
					option.value = data[i];
					option.text = data[i + 1];
					AdvancedSearch.Subcategory.directory[i / 3] = data[i + 2] 
					
					try {
						AdvancedSearch.Subcategory.element.add(option, null);
					} catch(ex) {
						AdvancedSearch.Subcategory.element.add(option);
					}
				}
				
				AdvancedSearch.Subcategory.element.disabled = false;
			}
		},
		OnKeyUp: function(e) {
			if(e.keyCode == 13) {
				AdvancedSearch.Submit();
			}
		}
	},
	Genre: {
		element: null,
		xmlhttp: null,
		OnLoad: function() {
			if(AdvancedSearch.Genre.xmlhttp.readyState == 4) {
				var data = AdvancedSearch.Genre.xmlhttp.responseText.split("\n");
				
				for(var i = 0; i < data.length; i += 2) {
					var option = document.createElement("option");
					
					option.value = data[i];
					option.text = data[i + 1];
					
					try {
						AdvancedSearch.Genre.element.add(option, null);
					} catch(ex) {
						AdvancedSearch.Genre.element.add(option);
					}
				}
				
				AdvancedSearch.Genre.element.disabled = false;
			}
		},
		OnKeyUp: function(e) {
			if(e.keyCode == 13) {
				AdvancedSearch.Submit();
			}
		}
	},
	Location: {
		element: null,
		OnKeyUp: function(e) {
			if(e.keyCode == 13) {
				AdvancedSearch.Submit();
			}
		}
	},
	Freetext: {
		element: null,
		OnKeyUp: function(e) {
			if(e.keyCode == 13) {
				AdvancedSearch.Submit();
			}
		}
	},
	Initialize: function() {
		AdvancedSearch.Category.element = document.getElementById("advancedsearch_category");
		__Event_Add(AdvancedSearch.Category.element, "change", AdvancedSearch.Category.OnChange);
		__Event_Add(AdvancedSearch.Category.element, "keyup", AdvancedSearch.Category.OnKeyUp);
		
		AdvancedSearch.Subcategory.element = document.getElementById("advancedsearch_subcategory");
		__Event_Add(AdvancedSearch.Subcategory.element, "change", AdvancedSearch.Subcategory.OnChange);
		__Event_Add(AdvancedSearch.Subcategory.element, "keyup", AdvancedSearch.Subcategory.OnKeyUp);
		
		AdvancedSearch.Location.element = document.getElementById("advancedsearch_location");
		__Event_Add(AdvancedSearch.Location.element, "keyup", AdvancedSearch.Location.OnKeyUp);
		
		AdvancedSearch.Genre.element = document.getElementById("advancedsearch_genre");
		__Event_Add(AdvancedSearch.Genre.element, "keyup", AdvancedSearch.Genre.OnKeyUp);
		
		AdvancedSearch.Freetext.element = document.getElementById("advancedsearch_freetext");
		__Event_Add(AdvancedSearch.Freetext.element, "keyup", AdvancedSearch.Freetext.OnKeyUp);
	},
	Submit: function() {
		if(AdvancedSearch.Subcategory.element.selectedIndex > 0) {
			location.href = AdvancedSearch.Category.directory[AdvancedSearch.Category.element.selectedIndex] + "/" + AdvancedSearch.Subcategory.directory[AdvancedSearch.Subcategory.element.selectedIndex] + "/search.aspx?genre=" + AdvancedSearch.Genre.element.options[AdvancedSearch.Genre.element.selectedIndex].value + "&location=" + AdvancedSearch.Location.element.options[AdvancedSearch.Location.element.selectedIndex].value + "&freetext=" + __Encode_URL(AdvancedSearch.Freetext.element.value);
		} else if(AdvancedSearch.Category.element.selectedIndex > 0) {
			location.href = AdvancedSearch.Category.directory[AdvancedSearch.Category.element.selectedIndex] + "/search.aspx?location=" + AdvancedSearch.Location.element.options[AdvancedSearch.Location.element.selectedIndex].value + "&freetext=" + __Encode_URL(AdvancedSearch.Freetext.element.value);
		} else {
			location.href = "search.aspx?location=" + AdvancedSearch.Location.element.options[AdvancedSearch.Location.element.selectedIndex].value + "&freetext=" + __Encode_URL(AdvancedSearch.Freetext.element.value);
		}
	}
};