/*

	assign object

*/

	function AssignmentWindowObject()
	{
		var params = {
                   window_id : 'assignment_window',
									 window_title : 'Assignment Window',
									 checkbox_id_prefix : 'assignment_window_checkbox_',
									 saving_id_prefix : 'assignment_window_saving_',
									 form_id : 'assignment_window_form'
		             }
		
		var students     = false;
		var assigned     = {lesson:[],course:[]};
		var assignment_info         = {lesson:[],course:[]};
		
		var show_window = function()
		{
			if ($(params.window_id)) { Element.remove(params.window_id); }
			var win 		= new Window();
					win.id = params.window_id;
					win.title = params.window_title;
					win.loading = true;
					win.create();
		}

    var get_assignments = function(id,type)
		{	
			if (assigned[type][id]) {
				$(params.window_id + '_inner').innerHTML = '';
				build_form(students,id,type);
				mark_assigned(assigned[type][id]);
				return false;
			}

			// var url = jsconfig.site.root+'library/account_actions.php';
			// var query_str = 'action=get_assigned&id='+id+'&type='+type+'&get_assignment_info=true';
			
			var	url = jsconfig.ajax;
			var	query_str = 'action=assign&resource_id='+id+'&resource_type='+type+'&get_assignment_info=true';
			
			if (!students) query_str += '&get_students=true';

			var get_assignments_and_students = new Ajax.Request (
						 url,
						 {
							 method: 'get',
							 parameters: query_str,
							 onComplete: function(response_obj) {
									var response = JSON.parse(response_obj.responseText);
									if (response.students) { 
										students = response.students; 
									}
									if (response.info) {
										assignment_info[response.assigned.type][response.assigned.id] = response.info;
									}
									if (response.assigned) { 
										assigned[response.assigned.type][response.assigned.id] = response.assigned.users; 
										$(params.window_id + '_inner').innerHTML = '';
										build_form(students,response.assigned.id,response.assigned.type);
										mark_assigned(assigned[type][id]);
									}
							 }
						 });
		}
				
		var assign_unassign = function(user_id,id,type)
		{
			$(params.checkbox_id_prefix + user_id).disabled = true;
			$(params.saving_id_prefix   + user_id).innerHTML = 'saving...';
			Element.show(params.saving_id_prefix+user_id);
			
			// var url = jsconfig.site.root+'library/account_actions.php';
			// var query_str = 'action=save_assigned&id='+id+'&type='+type+'&user_id='+user_id;
			
			var url = jsconfig.ajax;
			var query_str = 'action=assign&resource_id='+id+'&resource_type='+type+'&user_id='+user_id;
			
			var save_value = new Ajax.Request (
						 url,
						 {
							 method: 'get', 
							 parameters: query_str,
							 onComplete: function(response_obj) {
									var response = JSON.parse(response_obj.responseText);
									var a        = response.assignment;
									update_assigned_cache(a.user_id,a.id,a.type,a.remove);
									if (isMe(a.user_id)) AddRemoveAssignment(a);
									$(params.saving_id_prefix   + user_id).innerHTML = 'saved';
									new Effect.Fade(params.saving_id_prefix+user_id,{
																			 afterFinish:function(obj) {																				
																				$(params.checkbox_id_prefix + user_id).disabled = false;
																			 }
																			 });
							 }
						 });
		}
		
		var update_assigned_cache = function(user_id,id,type,remove)
		{			
			if (remove) assigned[type][id] = assigned[type][id].without(user_id);
			else assigned[type][id].push(user_id);
		}

		var mark_assigned = function(m_assigned)
		{
			m_assigned.each( function(user_id, index) {
																$(params.checkbox_id_prefix + user_id).checked = true;
																} );
		}
		
		var build_form = function(students,id,type)
		{
			// first build title
			var info  = assignment_info[type][id];
			var image = Builder.node('IMG',{src:info.image});
			$(params.window_id+'_inner').appendChild( Builder.node('DIV',{className:'center bold'},[image,commonjs.br(),info.name]) ); 			
			// then build form
			var container = Builder.node('FORM',{id:params.form_id});
			var user_control = function(user_obj, index) {
															var checkbox      = Builder.node('INPUT',{type:'checkbox',id:params.checkbox_id_prefix + user_obj.id});
															    checkbox.onclick = function() { assign_unassign(user_obj.id,id,type); }
															var saving = Builder.node('SPAN',{id:params.saving_id_prefix + user_obj.id,className:'indent5px greentext bold'});
															var real_name_str  = user_obj.last_name  == '' ? '' : user_obj.last_name;
															    real_name_str += user_obj.first_name == '' ? '' : real_name_str == '' ? user_obj.first_name : ', ' + user_obj.first_name;
																	real_name_str  = real_name_str       == '' ? '' : ' (' + real_name_str + ')';
															var text          = Builder.node('SPAN',{},[' ' + ( user_obj.nickname ? user_obj.nickname : user_obj.id ) + real_name_str]);
															commonjs.append_children(container,[checkbox,text,saving,commonjs.br()]);
													}						
			user_control( {id:jsconfig.me,first_name:'',last_name:'',nickname:'me'}, 0);
			container.appendChild(commonjs.hr());
			students.each( user_control );
			$(params.window_id+'_inner').appendChild(container);
		}
		
		this.get_assignments = function(id,type) {
			show_window();
			get_assignments(id,type);
		}
		
	}

	var AssignmentWindow = new AssignmentWindowObject();