var url = 'onlinedegree';

var params;

var skipDegrees = false;
var skipAreas = false;
var skipSubAreas = false;

var only;

Event.observe 
(
 	window,
	'load',
	function ()
	{
		attachEvents ();
	}
);

function attachEvents ()
{
	if ($ ('selector-reset'))
	{
		$ ('selector-reset').onclick = function ()
		{
			skipDegrees = true;
			skipAreas = true;
			skipSubAreas = true;
			
			params = new Hash ();
			
			updatePage ();
			
			return false;
		}
	}
	
	if ($ ('degree-reset'))
	{
		$ ('degree-reset').onclick = function ()
		{
			skipDegrees = true;
			skipAreas = false;
			skipSubAreas = true;
			
			params = new Hash ();
			
			params.set ('selectAll', 'true');
			
			updatePage ();
			
			return false;
		}
	}
	
	if ($ ('areastudy-reset'))
	{
		$ ('areastudy-reset').onclick = function ()
		{
			skipDegrees = false;
			skipAreas = true;
			skipSubAreas = true;
			
			params = new Hash ();
			
			updatePage ();
			
			return false;
		}
	}
	
	var degrees = $$ ('.selector-degree');
	
	degrees.each 
	(
		function (degree)
		{
			degree.onclick = function ()
			{
				skipDegrees = false;
				skipAreas = false;
				skipSubAreas = true;

				params = new Hash ();
				
				params.set ('selectAll', 'true');
				
				updatePage ();
				
				return false;
			}
		}
	);
	
	var areas = $$ ('.selector-areastudy');
	
	areas.each 
	(
		function (area)
		{
			area.onclick = function ()
			{
				skipDegrees = false;
				skipAreas = false;
				skipSubAreas = true;
				
				params = new Hash ();
				
				params.set ('selectAll', 'true');
				
				updatePage ();
				
				return false;
			}
		}
	);
	
	if ($ ('select-all-subareas'))
	{
		$ ('select-all-subareas').onclick = function ()
		{
			skipDegrees = false;
			skipAreas = false;
			skipSubAreas = true;
			
			params = new Hash ();
			
			params.set ('selectAll', 'true');
			
			updatePage ();
			
			return false;
		}
	}
	
	if ($ ('clear-subareas'))
	{
		$ ('clear-subareas').onclick = function ()
		{
			skipDegrees = false;
			skipAreas = false;
			skipSubAreas = true;
			
			params = new Hash ();
			
			params.set ('selectAll', 'false');
			
			updatePage ();
			
			return false;
		}
	}
	
	var subAreas = $$ ('.selector-sub-areastudy');
	
	subAreas.each 
	(
		function (subArea)
		{
			Event.observe 
			(
				subArea,
				'click',
				function ()
				{
					skipDegrees = false;
					skipAreas = false;
					skipSubAreas = false;
					
					params = new Hash ();
					
 					updatePage ();
				}
			);
		}
	);
	
	var subAreasOnly = $$ ('.selector-sub-areastudy-only');
	
	subAreasOnly.each 
	(
		function (subAreaOnly)
		{
			subAreaOnly.onclick = function ()
			{
				skipDegrees = false;
				skipAreas = false;
				skipSubAreas = true;
				
				params = new Hash ();
				
				only = parseInt (subAreaOnly.id.substring (5, subAreaOnly.id.length));
				
				var key = 'subAreastudyID[0]';
					
				params.set (key, only);
				
				updatePage ();
				
				return false;
			}
		}
	)
}

function updatePage ()
{
	var i = 0;
	
	if (! skipDegrees)
	{
		var degrees = $$ ('.selector-degree');
	
		degrees.each 
		(
			function (degree)
			{
				degree.disabled = true;
				
				if (degree.checked)
				{
					var key = 'degreeID[' + i + ']';
					
					params.set (key, degree.value);
					
					i++;
				}
			}
		);
	}

	i = 0;

	if (! skipAreas)
	{
		var areas = $$ ('.selector-areastudy');
	
		areas.each 
		(
			function (area)
			{
				area.disabled = true;
				
				if (area.checked)
				{
					var key = 'areastudyID[' + i + ']';
					
					params.set (key, area.value);
					
					i++;
				}
			}
		);
	}
	
	i = 0;

	if (! skipSubAreas)
	{
		var subAreas = $$ ('.selector-sub-areastudy');
	
		var noneSelected = true;
	
		subAreas.each 
		(
			function (subArea)
			{
				subArea.disabled = true;
				
				if (subArea.checked)
				{
					var key = 'subAreastudyID[' + i + ']';
					
					params.set (key, subArea.value);
					
					i++;
					
					noneSelected = false;
				}
			}
		);
		
		if (noneSelected)
		{
			params.set ('selectAll', 'false');
		}
	}

	var opacityChangeable = $$ ('.opacity-changeable');

	params.set ('ajax', 'true');

	new Ajax.Request
	(
		url, 
		{
			method: 'get',
			parameters: params.toQueryString (),
			onCreate: function ()
			{
				opacityChangeable.each 
				(
					function (element)
					{
						Element.addClassName (element, 'off');
					}
				);
				
				Element.setStyle 
				(
				 	$ ('loader'),
					{
						visibility: 'visible'
					}
				);
			},
			onFailure: function ()
			{
				alert ('Error reading data...');
			},
			onSuccess: function (transport)
			{
				opacityChangeable.each 
				(
					function (element)
					{
						Element.removeClassName (element, 'off');
					}
				);
				
				Element.setStyle 
				(
				 	$ ('loader'),
					{
						visibility: 'hidden'
					}
				);

				try
				{
					var response = transport.responseText.evalJSON ();
					
					$ ('content').innerHTML = response.content;
					$ ('programs_selector').innerHTML = response.programSelector;
					
					attachEvents ();
				}
				catch (e)
				{
				}
			}
		}
	);
}