(function($){

	$(function(){
		$.setupAccountBar();
		$.createFirmin();
console.log($('div#loginbox'));
	});

	$.setupAccountBar = function(){
		var name = $.cookies.get('kdg_stuvo_name');
		
		if(name){
			$('div#aangemeld').find('p strong').text(name.replace(/\+/g, ' '));
		}
		else{
			$('div#aangemeld').find('p').html('<a class="firmin form" href="/kdg_stuvo/accounts/new?login=true">aanmelden</a>');
		}
		$('div#aangemeld p').show()
	}


	$.createFirmin = function(){
		$('<div>', {
			id: 'loginbox'
		}).hide().appendTo('body');

		$('div#loginbox').click(function(e){
			e.stopPropagation();
		});

		$('body').click(function(){
			$.hideFirmin();
		});
		$.teardownFirmin();
		$.setupFirmin();
	}
	
	$.showFirmin = function(){
		$.teardownFirmin();
		$.setupFirmin();
		$('div#loginbox').fadeIn();
	}

	$.hideFirmin = function(){
		$('div#loginbox').fadeOut();
		$.setupFirmin();
		$.teardownFirmin();
	}
	
	$.fillFirmin = function(html){
		$.teardownFirmin();
		$('div#loginbox').html(html);
		$.setupFirmin();
	}
	
	$.setupFirmin = function(){
		$('a.firmin.form,a.firmin.close').unbind('click');
		
		$('div#loginbox form').unbind('submit');
		
		$('a.firmin.form').bind('click', function(e){
			e.preventDefault();
			e.stopImmediatePropagation();
			
			$.ajax({
				url: this.href,
				success: function(data){
					$.fillFirmin(data);
					$.showFirmin();
					$('div#loginbox form input:text:first').focus();
				},
				error: $.handleFirminErrors
			});
		});
		
		$('a.firmin.close').bind('click', function(e){
			e.preventDefault();
			e.stopImmediatePropagation();
			
			$.hideFirmin();
		});
		
		$('div#loginbox form').bind('submit', function(e){
			e.preventDefault();
			$(this).ajaxSubmit({
				success: $.handleFirminSuccesses,
				error: $.handleFirminErrors
			})
		});
		
		$('a#points_keep').click(function(e){
      e.preventDefault();
      $('#toggle,#toggle .krijgen, .toggle.button').show();
      $('#toggle .geven').hide();
      $('input#points_user').val(this.rel);
    });

    $('a#points_give').click(function(e){
      e.preventDefault();
      $('#toggle,#toggle .geven, .toggle.button').show();
      $('#toggle .krijgen').hide();
      $('input#points_user,input#nickname').val('');
      $('div#nicknames a').unbind('click');
      $('div#nicknames').empty();
    });
    
		$('div#nicknames').hide();
    $('input#nickname').attr('autocomplete','off').keyup(function(){
      var $this = $(this);
      
      if(($this.val().length > 2) && ($this.val() != $this.data('value'))){
        $('div#nicknames a').unbind('click');
        $.ajax({
          url: '/kdg_stuvo/users',
          data: {
            search: $this.val()
          },
          success: function(data){
            $('div#nicknames').html(data).show();
            $('div#nicknames a').bind('click', function(e){
              e.preventDefault();
              $('div#nicknames a').removeClass('active');
              $(this).addClass('active');
              $('input#points_user').val(this.rel);
							$('div#nicknames').hide();
							$('input#nickname').val($(this).text());
            });
          }
        })
      }

			if(($this.val().length == 0) && ($this.val() != $this.data('value'))){
				$('div#nicknames').hide();
			}

      $this.data('value', $this.val());
    });    
	}
	
	$.teardownFirmin = function(){
		$('a#points_keep').unbind('click');
		$('a#points_give').unbind('click');
		$('input#nickname').unbind('keyup');
	}
	
	$.handleFirminSuccesses = function(response, state){
		var data = $.parseJSON(response);
		
		switch(data.status){
			case 204:
				$.hideFirmin();
				$.setupAccountBar();
				break;
			case 205:
				top.location.reload();
				break;
			case 300:
				$.ajax({
					url: data.url,
					success: function(data){
						$.fillFirmin(data);
						$.showFirmin();
					},
					error: $.handleFirminErrors
				})
				break;
			default:
				console.log(arguments);
		}
	}
	
	$.handleFirminErrors = function(response, state){
		switch(response.status){
			case 300:
				$.ajax({
					url: response.responseText,
					success: function(data){
						$.fillFirmin(data);
						$.showFirmin();
					},
					error: $.handleFirminErrors
				});
				break;
			case 400:
				$.fillFirmin(response.responseText);
				$.showFirmin();
				break;
			default:
				console.log(arguments);
		}
	}

})(jQuery);

