

Event.observe(window, 'load', function(){
    
    $$('.course-list tbody tr').each(function(element){
   		element.course = new Course(element);
    })
    
	
	
	if (window.location.hash)
		try {
			$(window.location.hash.substring(1)).course.open();
		} catch (e) { }

	
	$$('a.signup-button').invoke('pngHack');
	
});

var Course = Class.create({
	
	initialize: function(element){
		
		this.element = element;
		this.element.observe('click', this.open.bind(this));
		this.state = false;
		document.observe('course:close', this.close.bind(this));
	},
	
	open: function() {
			
		if(!this.state) {
			
			var t = this;
			new Ajax.Request('/applicationform/' + t.id(), {
			    onCreate: function(){
			    },
			    onSuccess: function(transport){
			    	t.element.addClassName('selected');
			    	t.element.insert({ after: transport.responseText });
			    	Effect.BlindDown(t.element.next().down().down(), { duration: 0.5 });
			    	document.fire('course:close', t.element.id);
			    	t.state = true;
					t.element.next().select('form').each(function(i) {
						i.observe('submit', t.submit.bind(t))
					});
			    },
			    parameters: { },
				method : 'get'
			});		
		}
	},
	
	submit : function(e) {
		$$('.validation-errors').invoke('remove');
		$$('.validation-error').invoke('removeClassName', 'validation-error');
		
		e.stop();
		var form = e.element();
		var t = this;
		form.request({
			onSuccess : function(transport) {
				
				
				var response = transport.responseJSON;
				if (response.status) {
					window.location.href = '/kurskalender/kvittering';
				} else {
					
					var errorMessage = new Element('ul').addClassName('validation-errors');
					$H(response.errors).each(function (error) {
						var label = $$('label[for= ' + error.key + ']');
						label = label ? label[0] : null;
				    
						if (error.value) {
							$A(error.value).each(
								function (message) {

									errorMessage.insert({bottom:
										new Element('li').update(message)
									});	
								}
							);
						}
						if (label) label.addClassName('validation-error');
						
					});
					t.element.next().select('form fieldset < legend')[0].insert({ after : errorMessage });
				}
			}
		})
		return false;
	},
	
	close: function(event){
		
		this.state = false;
		if(this.element.id != event.memo){
			var t = this;
			if(t.element.next() && t.element.next().down().down()){
				t.element.removeClassName('selected');
				Effect.BlindUp(t.element.next().down().down(), { duration: 0.5,
					afterFinish: function(){
						t.element.next().remove();
					}
				});
			}
		}
	
	},
	
	id : function() {
		return this.element.id.substring('course-'.length);
	}
	
});
