class CoursesController < ApplicationController
  include CoursesHelper
  
  before_filter :require_login, :only => [:join, :unjoin]
  before_filter :allow_join, :only => [:join]
  
  def join
    if User.current.logged?
      course = Project.find(params[:object_id])
      course_prefs = Course.find_by_extra(course.identifier)
      if params[:course_password] == course_prefs.password
        members = []
        members << Member.new(:role_ids => [10], :user_id => User.current.id)
        course.members << members
        
        StudentsForCourse.create(:student_id => User.current.id, :course_id => params[:object_id])
        @state = 0
      else
        @state = 1
      end
    end
    respond_to do |format|
      # format.html { redirect_to_referer_or {render :text => (watching ? 'Watcher added.' : 'Watcher removed.'), :layout => true}}
      format.js { render :partial => 'set_join', :locals => {:user => User.current, :course => Project.find(params[:object_id]), :object_id => params[:object_id]} }
    end
  end
  
  def unjoin
    if User.current.logged?
      
      @member = Member.where('project_id = ? and user_id = ?', params[:object_id], User.current.id)
      @member.first.destroy
            
      joined = StudentsForCourse.where('student_id = ? and course_id = ?', User.current.id, params[:object_id])
      joined.each do |join|
        join.delete
      end
    end
    respond_to do |format|
      # format.html { redirect_to_referer_or {render :text => (watching ? 'Watcher added.' : 'Watcher removed.'), :layout => true}}
      format.js { render :partial => 'set_join', :locals => {:user => User.current, :course => Project.find(params[:object_id]), :object_id => params[:object_id]} }
    end
  end

  private

  def allow_join
    if course_endTime_timeout? Project.find(params[:object_id])
      respond_to do |format|
        format.js{
          @state = 2
          render :partial => 'set_join', 
                 :locals => {:user => User.current, 
                            :course => Project.find(params[:object_id]), 
                            :object_id => params[:object_id]
                            } 
        }
      end
    end
  end

end