var aycUrl;

Event.observe 
(
 	window,
	'load',
	function ()
	{
 		Event.observe 
		(
			$ ('degree-selector'),
			'change',
			function ()
			{
				getCategories ();
			}
		);
 		
 		Event.observe 
		(
			$ ('category-selector'),
			'change',
			function ()
			{
				getSubCategories ();
			}
		);
 		
 		$ ('school-finder-form').onsubmit = function ()
 		{
 			findSchools ();
			
			return false;
 		}
	}
);

function getCategories ()
{
	degree = $ ('degree-selector').value;

	if (degree != '')
	{
		var requestUrl = '?ajax=getAreaStudies&degreeUrl=' + degree;
		
		new Ajax.Request (requestUrl,
		{
			method:'get',
			
			onCreate: function ()
			{
				clearCategoryList ();
				clearSubCategoryList ()
				
				addCategoryOption ('- loading program list -', '');
				addSubCategoryOption ('- loading program list -', '');
				
				$ ('category-selector').disabled = true;
				$ ('subcategory-selector').disabled = true;
				//$ ('button-find-schools').disabled = true;
			},
			onComplete: function ()
			{
				clearSubCategoryList ();
				addSubCategoryOption ('- Pick a Subject -', '');
				
				$ ('category-selector').disabled = false;
				//$ ('button-find-schools').disabled = false;
			},
			onFailure: function ()
			{
				alert ('Error reading data...');
			},
			onSuccess: populateCategoryList 
		});
	}
	else
	{
		resetCategoryList ();
		resetSubCategoryList ();
	}
}

function getSubCategories ()
{
	degree = $ ('degree-selector').value;
	category = $ ('category-selector').value;

	if (category != '')
	{
		var requestUrl = '?ajax=getAreaStudies&degreeUrl=' + degree + '&parentUrl=' + category;
		
		new Ajax.Request (requestUrl,
		{
			method:'get',
			onCreate: function ()
			{
				clearSubCategoryList ();
				
				addSubCategoryOption ('- loading subject list -', '');
				
				$ ('category-selector').disabled = true;
				$ ('subcategory-selector').disabled = true;
				//$ ('button-find-schools').disabled = true;
			},
			onComplete: function ()
			{
				$ ('category-selector').disabled = false;
				$ ('subcategory-selector').disabled = false;
				//$ ('button-find-schools').disabled = false;
			},
			onFailure: function ()
			{
				alert ('Error reading data...');
			},
			onSuccess: populateSubCategoryList 
		});
	}
	else
	{
		resetSubCategoryList ();
	}
}

function populateCategoryList (transport)
{
	try
	{
		var response = transport.responseText.evalJSON ();
	}
	catch (e)
	{
		alert (e.toString ());
	}
	
	aycUrl = response.aycUrl;
	
	if (response.data)
	{
		clearCategoryList ();
		
		addCategoryOption ('- Choose a Program -', '');
		
		response.data.each
		(
			function (areaStudy)
			{
				addCategoryOption (areaStudy.name, areaStudy.url);
			}
		);
	}
}

function populateSubCategoryList (transport)
{
	try
	{
		var response = transport.responseText.evalJSON ();
	}
	catch (e)
	{
		alert (e.toString ());
	}
	
	aycUrl = response.aycUrl;
	
	if (response.data)
	{
		clearSubCategoryList ();
		
		addSubCategoryOption ('- Pick a Subject -', '');
		
		response.data.each
		(
			function (areaStudy)
			{
				addSubCategoryOption (areaStudy.name, areaStudy.url);
			}
		);
	}
}

function clearCategoryList ()
{
	var object = $ ('category-selector');
	
	Try.these
	(
		function ()
		{
			while (object.options.length > 0)
			{
				object.options[0].remove ();
			}
		},
		function ()
		{
			while (object.options.length > 0)
			{
				object.options.remove (0);
			}
		}
	);
}

function clearSubCategoryList ()
{
	var object = $ ('subcategory-selector');
	
	Try.these
	(
		function ()
		{
			while (object.options.length > 0)
			{
				object.options[0].remove ();
			}
		},
		function ()
		{
			while (object.options.length > 0)
			{
				object.options.remove (0);
			}
		}
	);
}

function resetCategoryList ()
{
	clearCategoryList ();
	addCategoryOption ('- Choose a Program -', '');
	$ ('category-selector').disabled = true;
}

function resetSubCategoryList ()
{
	clearSubCategoryList ();
	addSubCategoryOption ('- Pick a Subject -', '');
	$ ('subcategory-selector').disabled = true;
}

function addCategoryOption (text, value)
{
	addOption ($ ('category-selector'), text, value)	
}

function addSubCategoryOption (text, value)
{
	addOption ($ ('subcategory-selector'), text, value)	
}

function addOption (dropDownObject, text, value)
{
	var optionObject = document.createElement ('option');
	
	optionObject.text = text;
	optionObject.value = value;
	
	Try.these
	(
		function ()
		{
			dropDownObject.options.add (optionObject);
		},
		function ()
		{
			return dropDownObject.appendChild (optionObject);
		}
	);
}

function findSchools ()
{
	var degree = $ ('degree-selector').value;
	var areaStudy = $ ('category-selector').value;
	var subject = $ ('subcategory-selector').value;
	
	if (degree != '' && areaStudy != '' && subject != '')
	{
        var url = aycUrl + '/' + degree + '/' + areaStudy + '/' + subject;
		
        document.location.href = url;
	}
	else
	{
		alert ('Please choose a Degree, Program and Subject');
	}
	
	return false;
}