// Change hardcoded lesson to currentlesson.*

function ContentList(container)
{
	/*
		array of objects with the following properties
			name, id, type
	*/
	var clipboard = new Clipboard(this);
	var sequence_timeout = false;
	var make_sortable_timeout; // this is so when we are adding more than one it doesn't freak out.
	
	var number_of_readings_node 	= $('number_of_readings');
	var number_of_questions_node 	= $('number_of_questions');	
	
	var get_selected_content = function()
	{
		var inputs = document.getElementsByClassName("contentlist_checkbox",tbody);
		var selected_content = new Array();
		for (var i=0;i<inputs.length;i++)
		{
			if (inputs[i].checked) selected_content[selected_content.length] = inputs[i].content;
		}
		return selected_content;
	}

	var build_bottom_row = function()
	{
		var select_all_image		= commonjs.new_element({element:"IMG",src:jsconfig.site.root+"images/site/arrow_ltr.png"});
		var select_all_checkbox = commonjs.new_element({element:"INPUT",type:"checkbox"});
				select_all_checkbox.onclick  = function() {
					var inputs = document.getElementsByClassName("contentlist_checkbox",tbody);
					for (var i=0;i<inputs.length;i++)
					{						
						inputs[i].checked = this.checked;
						inputs[i].onclick();
					}
				}
		
		var delete_selected			= commonjs.jslink('delete');
				delete_selected.onclick = function() {
					var selected_content = get_selected_content();
					if (selected_content.length == 0) return false;
					delete_selected_content(selected_content);
				}
		var copy_selected = commonjs.jslink('copy');
				copy_selected.onclick = function() {
					var selected_content = get_selected_content();
					if (selected_content.length == 0) return false;					
					clipboard.add_to_clipboard(selected_content);
				}
		var show_clipboard = commonjs.jslink('show clipboard');
				show_clipboard.onclick = function() {
					clipboard.show();
				}
		
		var tfoot								= commonjs.new_element({element:"TFOOT",className:'contentlist'});
		var bottom_row					= commonjs.new_element({element:"TR"});
		
		var br_name							= commonjs.new_element({element:"TD"});
				br_name.appendChild(show_clipboard);
		

		var br_controls					= commonjs.new_element({element:"TD",colSpan:3});
				commonjs.append_children(br_controls,[select_all_image,select_all_checkbox,delete_selected,commonjs.text_seperator(),copy_selected]);


		commonjs.append_children(bottom_row,[br_name,br_controls]);
		tfoot.appendChild(bottom_row);
		return tfoot;
	}

	var selected						= false;
	var table								= commonjs.new_element({element:"TABLE",className:"contentlist",cellSpacing:0});
	var tbody								= commonjs.new_element({element:"TBODY",className:"contentlist",id:"contentlist"});	
	var no_content_para = Builder.node('DIV',{className:'padding center'});
		  no_content_para.innerHTML = 'For an easy way to start adding questions to your lesson use the <a href="javascript:void(0)" onclick="AddQuestionWizardWindow();">Add A Question Wizard</a><br /> or paste content from the ';
	var show_clipboard = commonjs.jslink('clipboard');
	show_clipboard.onclick = function() {
		clipboard.show();
	}			
	no_content_para.appendChild(show_clipboard);
	var no_content_p = Builder.node('TD',{colSpan:'4'},[no_content_para]);	
	var nocontenttbody      = Builder.node('TBODY',{},[no_content_p]);
	var bottom_row			 		= build_bottom_row();
	commonjs.append_children(table,[nocontenttbody,tbody,bottom_row]);
	container.appendChild(table);
	
	var make_sortable = function()
	{
		Sortable.create("contentlist",{tag:'TR',containment:["contentlist","clipboard"],constraint:"vertical",handle:'handle',
										onUpdate: function() {
											clearTimeout(sequence_timeout);
											sequence_timeout = setTimeout(save_sequence,3000);
										},
										starteffect: function(element) {
											element._background_color = element.style.backgroundColor;
											element.style.backgroundColor = '#91FF91';
											element._className = element.className;
											element.className  = element.className + ' drag';
											table._className   = table.className;
											table.className    = table._className + ' vertical_move';
										},
										endeffect: function(element) {
											element.style.backgroundColor = element._background_color;
											element.className  			 			= element._className;											
											table.className 				 			= table._className;
											row_coloring();
											new Effect.Highlight(element);											
										}										
									});
		row_coloring();
	}

	var start_sortable_countdown = function()
	{
		clearTimeout(make_sortable_timeout);
		make_sortable_timeout = setTimeout(make_sortable,2000);
	}

	var add_content = function(content,parameters)
	{
		if (!parameters) var parameters = new Object();		
		
		if (xGetElementById("contentlist_"+content.id))
		{
			var thecontent = xGetElementById("contentlist_"+content.id);
			new Effect.Highlight(thecontent);
			if (parameters.update) thecontent.set_name(content.name);
			return false;
		}
		
		var row						 			= commonjs.new_element({element:"TR",id:"contentlist_"+content.id,className:"contentlist_row",color:''});
				row.is_highlighted	= false;
				row.content_type		= content.type;
		var num_comments	= content.comments > 0 ? content.comments : 'no';
		var comments_text = content.comments == 1 ? ' comment' : ' comments';
		if (content.comments > 0)
		{
			var comments_link = Builder.node('A',{href:'?topic='+content.topic_id},[num_comments+comments_text]);
		}
		else var comments_link = document.createTextNode(num_comments+comments_text);

		var comments_td					= Builder.node('TD',{className:'right'},[comments_link]);

		var controls_td					= commonjs.new_element({element:"TD",className:"right"});
		var name_td							= commonjs.new_element({element:"TD",className:"handle vertical_move"});
				name_td.style.paddingRight = '10px';
				name_td.title = "Reorder content by clicking on an item and dragging it up or down the list";
				/*
				name_td.onclick = function() {
					checkbox.checked = checkbox.checked ? false : true;
					checkbox.onclick();
				}
				*/
		row.set_name = function(new_name)
		{
			name_td.removeChild(name_td.childNodes[1]);
			name_td.appendChild(document.createTextNode(new_name));
			content.name = new_name;
			clipboard.rename(content.id,content.name);
		}
		
		var checkbox_td					= commonjs.new_element({element:"TD",className:""});				
		
		var checkbox						= commonjs.new_element({element:"INPUT",type:"checkbox",className:"contentlist_checkbox",content:content});
				checkbox.onclick = function() {
					row.style.backgroundColor 	= this.checked ? 'yellow' : row.color;
					row.is_highlighted = this.checked;
				}
		
		var linked_image = content.linked > 1 ? '_linked' : '';
				
		var image								= commonjs.new_element({
																									 element:"IMG",
																									 className:"contentlist_image",
																									 src:jsconfig.site.root + 'images/site/content_icon_' + content.type + linked_image + '.gif'
																									 }); // hardcoding !!
		
		var edit								= commonjs.jslink('edit');
		var copy								= commonjs.jslink('copy');
		var del									= commonjs.jslink('delete');
		
		edit.onclick = function() {
			ShowContentEditorWindow(content.type,content.id,content.linked);
		}
		copy.onclick = function() {
			clipboard.add_to_clipboard(content);
		}
		del.onclick = function() {
			delete_content(content);
		}

		commonjs.append_children(name_td,[image,document.createTextNode(content.name)]);
		checkbox_td.appendChild(checkbox);
		commonjs.append_children(controls_td,[edit,commonjs.text_seperator(),copy,commonjs.text_seperator(),del]);
		commonjs.append_children(row,[name_td,checkbox_td,controls_td,comments_td]);
		
		tbody.appendChild(row);	
		
		start_sortable_countdown();
		
		if (parameters.highlight) new Effect.Highlight(row);
		if (parameters.delete_from_clipboard) {
			if (parameters.remove_after_paste) {
			  clipboard.remove_from_clipboard(parameters.delete_from_clipboard);
			}
		}
		
	}
	
	this.make_droppable = function()
	{
		Droppables.remove(table);
		Droppables.add(table, { 
														accept: 'clipboard', 
														hoverclass: 'target',
														onDrop: function(element) {
														paste_content(element.content_id);
													}								
												} );
	}
	
	this.add_content = add_content; // just make this public?
	
	this.paste_content = function(content)
	{
		paste_content(content);
	}

	var delete_selected_content = function(selected_content)
	{
		var temp = new Array();
		for (var i=0;i<selected_content.length;i++) temp[temp.length] = selected_content[i].id; // no point in sending anything beside IDs
		selected_content = temp;
		if (!commonjs.word_confirm('You want to delete the '+selected_content.length+' content selected?\nPlease type the word DELETE to continue','delete')) return false;
		xmlhttp.open("GET", jsconfig.site.root+"library/content_actions.php?action=deletecontent&content="+JSON.stringify(selected_content)+"&lesson="+current_lesson.id,true);
		xmlhttp.onreadystatechange=function() {
			if (xmlhttp.readyState==4) {
				var response = JSON.parse(xmlhttp.responseText);
				if (response == false) alert(xmlhttp.responseText);
				else if (response.deleted)
				{
					for (var i=0;i<selected_content.length;i++)
					{
						commonjs.delete_node("contentlist_"+selected_content[i]);
					}
					make_sortable();					
					row_coloring();
				}
				else xmlhttp.responseText(alert(xmlhttp.responseText));
			}
		}
		xmlhttp.send(null)	
	}

	var save_sequence = function()
	{
		var sequence = Sortable.serialize("contentlist",{name:'content'});	
		var xmlhttp = new XMLHttpRequest();		
		xmlhttp.open("GET", jsconfig.site.root+"library/content_actions.php?action=savesequence&"+sequence+"&lesson="+current_lesson.id,true);
		xmlhttp.onreadystatechange=function() {
			if (xmlhttp.readyState==4) {
				// do something?
			}
		}
		xmlhttp.send(null)
	}

	var delete_content = function(content)
	{
		if (!commonjs.word_confirm('You want to delete '+content.name+'?\nPlease type the word DELETE to continue','delete')) return false;
		var xmlhttp = new XMLHttpRequest();		
		xmlhttp.open("GET", jsconfig.site.root+"library/content_actions.php?action=deletecontent&content="+content.id+"&lesson="+current_lesson.id,true);
		xmlhttp.onreadystatechange=function() {
			if (xmlhttp.readyState==4) {
				var response = JSON.parse(xmlhttp.responseText);
				if (response == false) alert(xmlhttp.responseText);
				else if (response.deleted)
				{
					commonjs.delete_node("contentlist_"+content.id);
					make_sortable();
					row_coloring();
				}
				else xmlhttp.responseText(alert(xmlhttp.responseText));
			}
		}
		xmlhttp.send(null)	
	}

	var paste_content = function(content)
	{
		if (!content.length) return false;
		var xmlhttp = new XMLHttpRequest();
		var paste_type = clipboard.get_paste_type();
		xmlhttp.open("POST", jsconfig.site.root+"library/content_actions.php",true);	
		xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		var poststr = "action=pastecontent&content="+JSON.stringify(content)+"&pastetype="+paste_type+"&lesson="+current_lesson.id;
		xmlhttp.send(poststr);
		xmlhttp.onreadystatechange=function() {		
			if (xmlhttp.readyState==4 && xmlhttp.status == 200) {				
				var response = JSON.parse(xmlhttp.responseText);
				if (response == false) alert(xmlhttp.responseText);
				else
				{
					var remove_after_paste = clipboard.get_remove_after_paste();
					for (var i=0;i<response.length;i++)
					{
						add_content({id:response[i].id,name:response[i].title,type:response[i].type,linked:response[i].linked},{highlight:true,delete_from_clipboard:content[i],remove_after_paste:remove_after_paste});
					}
					row_coloring();										
				}
			}
		}
	}	
	
	// also update counts
	var row_coloring = function()
	{
		var length = tbody.childNodes.length;
		nocontenttbody.style.display = (length == 0) ? '' : 'none';
		bottom_row.style.display = (length == 0) ? 'none' : '';		
		var number_of_questions = 0;
		var number_of_readings	= 0;
		for (var i=0;i<length;i++)
		{
			var therow = tbody.childNodes[i];
			if (therow.content_type == 'question') number_of_questions++;
			else if (therow.content_type == 'reading') number_of_readings++;
			therow.color = i & 1 ? '#E7E7E7' : '#ccc';
			if (!therow.is_highlighted) therow.style.backgroundColor = therow.color;
		}
		number_of_questions_node.innerHTML = number_of_questions;
		number_of_readings_node.innerHTML	 = number_of_readings;
	}
	
	this.load_data = function(data)
	{
		data = JSON.parse(data);
		for (var i=0;i<data.length;i++) add_content(data[i]);
		row_coloring();
	}
}
