/*
 * Functionality for the courses module
 */
 
var paramControl = new ParamController('courses');
 
window.addEvent('domready', function()
{
	// Define the course list
	var courses = new CourseList();
	
	// Define the course view
	var view = new CourseView($('courses-box'), {coursesPerPage: [10]});
	
	// Navigation
	var navigation = $('navigation');
	
	// Setup navigation elements
	view.addEvent('onUpdate', function ()
	{
		if (view.getTotalPages() == 1)
			navigation.fade('hide');
		else
		{
			navigation.fade('show');
			navigation.getElement('.label').set('text', 'Page ' + view.getCurrentPage() + ' of ' + view.getTotalPages());
		}
	}.bind(this));
	
	// Previous button
	navigation.getElement('div.left').addEvent('click', function (event)
	{
		event.preventDefault();
		view.prevPage();
	});

	// Next button
	navigation.getElement('div.right').addEvent('click', function (event)
	{
		event.preventDefault();
		view.nextPage();
	});
	
	// Make the JSON call
	var JSONRequest = new Request.JSON(
	{
		'url': 'ajax.courses.php',
		'onSuccess': function (jsonObj)
		{
			if (jsonObj)
			{
				if (jsonObj.length == 0)
					return;
				
				jsonObj.each(function (item)
				{
					// Collect attributes
					var course = new Course({label: item.name});
					course.addAttribute('location', item.location);
					course.addAttribute('id', item.id);
					course.addAttribute('comment', item.comment);
					course.addAttribute('start', item.start);
					course.addAttribute('end', item.end);
					course.addAttribute('entireDay', item.entireDay);
					course.addAttribute('daySpan', item.daySpan);
					
					// Add custom attributes
					if (item.attributes)
						item.attributes.each(function (item)
						{
							course.addAttribute(item.name, item.value);
						}.bind(this));
					
					// Add course to the list
					courses.addCourse(course);
				});
			}
		}.bind(this),
		'onComplete': function ()
		{
			// Update view
			if (courses.getLength() == 0)
				view.element.set('html', 'At this moment no open trainings are scheduled');
			else			
				view.update(courses);
		}.delay(500, this)
	}).get();
	
	// Setup the filter menu
	document.getElements('.filter-box').each(function (item)
	{
		var paramName = item.getElement('.head').get('text');
		
		item.getElements('select').each(function (item)
		{
			item.addEvent('change', function ()
			{
				paramControl.clear(paramName);
				if (item.get('value') == "")
					return;
				else
					paramControl.addValue(paramName, this.get('value'));
			});
		}.bind(this));
	}.bind(this));
	
	// Add update event to the param controller
	paramControl.addEvent('onUpdate', function (obj)
	{
		// Create a new course list
		var newList = courses.filter(obj);
		
		// Update view
		view.update(newList);
		
		// Update course count
		$('course-count').set('text', newList.getLength());
	});

}.bind(this));
