// JavaScript Document

function Clipboard(list,params)
{
	/*
			Send data in form:
			JSON array of objects with the following properties
				name,id,type
				
			how to deal with list instance name?
	*/
	if (!params) params = {};
	var id 							= 'clipboardcontent';
	var the_paste_type	= params.paste_type ? 
													params.paste_type : 
													(jsconfig.paste_type ? jsconfig.paste_type : 'normal');
	var container				= null;
	var save_paste_type_timeout = null;
	var all_ids = []; // array of all content ids in clipboard
  var clipboard_type = params.clipboard_type ? '&clipboard_type='+urlencode(params.clipboard_type) : '';											 
	var normal_only    = params.normal_only ? true : false;
	var remove_after_paste = true;

	this.get_remove_after_paste = function() {
		return remove_after_paste;
	}

	this.get_paste_type = function()
	{
		return the_paste_type;
	}

	var save_paste_type_setTimeout = function()
	{
		clearTimeout(save_paste_type_timeout);
		save_paste_type_timeout = setTimeout(save_paste_type,3000);
	}

	var format_for_paste_type = function()
	{
		var clipboard_window_title = $('clipboard_window_title');
		var clipboard_window_padding = $('clipboard_window_padding');		
		clipboard_window_padding.style.borderColor = 	clipboard_window_title.style.backgroundColor = (the_paste_type == 'normal') ? '#336699' : '#CC0000';
		var wording = document.getElementsByClassName('paste_type');
		var images = document.getElementsByClassName('paste_type_image');
		var new_wording = the_paste_type == 'normal' ? 'paste' : 'link paste';
		paste_all.innerHTML = the_paste_type == 'normal' ? 'paste all' : 'link paste all';

		for (var i in wording) wording[i].innerHTML = new_wording;
		for (var i in images)  images[i].src = the_paste_type == 'normal' ? images[i].normal : images[i].linked;		
	}

	var paste_type   = commonjs.jslink(the_paste_type);
			paste_type.onclick = function() {
				the_paste_type = (the_paste_type == 'link') ? 'normal' : 'link';
				paste_type.innerHTML = the_paste_type;
				format_for_paste_type();
				save_paste_type_setTimeout();
			}

	var clipboard_container = Builder.node('DIV');

	var reset_paste_type = function()
	{
		if (the_paste_type != 'normal')
		{
			the_paste_type = 'normal';
			paste_type.innerHTML = 'normal';
			paste_all.innerHTML = 'paste all';			
			format_for_paste_type();
			save_paste_type_setTimeout();				
		}		
	}

	var remove_all = commonjs.jslink('remove all');
			remove_all.onclick = function() {
				remove_from_clipboard('remove_all');
				clipboard_container.innerHTML = '';				
				reset_paste_type();
			}

	var paste_all = commonjs.jslink('paste all');
			paste_all.onclick = function() {
				list.paste_content(all_ids);
				if (remove_after_paste) all_ids = [];
			}

	var	paste_type_note = Builder.node('TD',{className:'bold'});
			paste_type_note.appendChild(document.createTextNode('Paste type: '));
			paste_type_note.appendChild(paste_type);
			
	if (normal_only) {
		paste_type_note.innerHTML = '';
	}

	var remove_after_checkbox = Builder.node('INPUT',{type:'checkbox',checked:remove_after_paste});
	    remove_after_checkbox.onclick = function() {
				remove_after_paste = this.checked;
			}
	var remove_after_text     = 'remove after?';
  var remove_after_span = Builder.node('SPAN',{className:'indent5px'},[remove_after_checkbox,remove_after_text]);
	paste_type_note.appendChild(remove_after_span);

	var remove_all_paste_all_links = Builder.node('TD',{className:'bold'},[remove_all,' | ',paste_all]);
			remove_all_paste_all_links.style.textAlign = 'right';

	var top_row 	= Builder.node('TR',{},[paste_type_note,remove_all_paste_all_links]);
	var top_tbody = Builder.node('TBODY',{},[top_row]);
	var top_bar 	= Builder.node('TABLE',{width:'95%'},[top_tbody]);

	var popupwindow = function()
	{
		var win_id = 'clipboard_window';
		var create = true;
		if ($(win_id)) 
		{ 
			var win = $(win_id);
			if (win.style.display == 'none') win.parentNode.removeChild(win);
			else create = false;
		}
		if (create)
		{
			var clipboard_window 					= new Window();
					clipboard_window.id 			= win_id;
					clipboard_window.title 		= 'Clipboard';
					clipboard_window.loading 	= false;
					clipboard_window.overflow = true;
					clipboard_window.create();
			container = $(win_id+'_inner');
			container.appendChild(top_bar);
			container.appendChild(Builder.node('HR',{className:'hr1'}));
			container.appendChild(clipboard_container);
			load_clipboard();
			Droppables.add($(win_id),{accept: 'clipboard'});
			list.make_droppable(); // have to add this after the clipboard window or it will do hit test on table FIRST!
			format_for_paste_type();
		}		

	}

	this.show = function() 
	{
		popupwindow();	
	}

	var build_clipboard_content = function(content,parameters)
	{	
		all_ids.push(content.id);
		var row 	 = document.createElement('DIV');
				row.id = id+content.id;
				row.className = 'clipboard';
				//row.content = content;
				row.content_id = [content.id];
		var image = document.createElement('IMG');
				image.align = 'top';
				image.normal = jsconfig.site.root + 'images/site/content_icon_' + content.type + '.gif'; // hardcoding!
				image.linked = jsconfig.site.root + 'images/site/content_icon_' + content.type + '_linked.gif'; // hardcoding!				
				image.src 	 = the_paste_type == 'normal' ? image.normal : image.linked;
				image.className = 'paste_type_image';
		var paste_link_text = the_paste_type == 'link' ? 'link paste' : 'paste';
		var paste = commonjs.jslink(paste_link_text);
				paste.className = 'paste_type';
				paste.onclick = function() {
					list.paste_content([content.id]);
				}
		var remove = commonjs.jslink('remove');
				remove.onclick = function() {
					remove_from_clipboard(content.id);
					adjust_all_ids(content.id);
					row.parentNode.removeChild(row);
				}		
		var name = commonjs.new_element({element:'SPAN',className:'handle',id:content.id+'_name'});
				name.appendChild(document.createTextNode('  '+content.name+'  ')); // poor man's padding
		
		commonjs.append_children(row,[image,name,paste,commonjs.text_seperator(),remove]);
		
		//if (clipboard_container.childNodes.length >= 1 && !parameters.force_append) clipboard_container.insertBefore(row,clipboard_container.childNodes[0]);
		//else clipboard_container.appendChild(row);
		
		clipboard_container.appendChild(row);
		
		new Draggable(row,{revert:true,ghosting:true,handle:'handle',
										starteffect: function(element) {
											element._className = element.className;
											element.className = element._className+' drag anywhere_move';
										},
										endeffect: function(element) {
											element.className = element._className;
										}											
									});
	}

	this.add_to_clipboard = function(content,parameters)
	{
		if (!parameters) parameters = {};		
		popupwindow();
		var selected_content = new Array();
		var save_content = new Array();		
		if (content.length == null) selected_content[0] = content; // if one element
		else (selected_content = content);												 // else if array
		for (var i=0;i<selected_content.length;i++) {
			if (xGetElementById(id+selected_content[i].id))	new Effect.Highlight(xGetElementById(id+selected_content[i].id));
			else {
				build_clipboard_content(selected_content[i],parameters); // add via DOM to clipboard
				save_content[save_content.length] = selected_content[i];
			}
		}
		if (!parameters.nosave) save_clipboard(save_content);	// save to server
	}

	var add_to_clipboard = this.add_to_clipboard; 		// to deal with scope in AJAX calls

	this.remove_from_clipboard = function(content_id)
	{
		adjust_all_ids(content_id);
		if (!$(id+content_id)) { return false; }
		var remove_me = $(id+content_id);
		remove_me.parentNode.removeChild(remove_me);
	}

	var adjust_all_ids = function(content_id)
	{
		var new_all_ids = [];
		for (var i=0;i<all_ids.length;i++) { if (all_ids[i] != content_id) new_all_ids[new_all_ids.length] = all_ids[i]; }
		all_ids = new_all_ids;
	}
	
	var remove_from_clipboard = function(content_id)
	{
		if (all_ids.length < 1) return false;
		if (content_id == 'remove_all') all_ids = [];
		var xmlhttp = new XMLHttpRequest();
		xmlhttp.open("GET", jsconfig.site.root+"library/content_actions.php?action=removefromclipboard&content="+content_id+clipboard_type,true);
		xmlhttp.onreadystatechange=function() {
			if (xmlhttp.readyState==4) {
				// do something?
			}
		}
		xmlhttp.send(null)		
	}

	var save_clipboard = function(selected_content)
	{
		if (selected_content.length == 0) return false;
		var xmlhttp = new XMLHttpRequest();
		xmlhttp.open("POST", jsconfig.site.root+"library/content_actions.php",true);
		xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		var poststr = "action=savetoclipboard&content="+urlencode(JSON.stringify(selected_content))+clipboard_type;
		xmlhttp.send(poststr);
		xmlhttp.onreadystatechange=function() {
			if (xmlhttp.readyState==4) {
				if (xmlhttp.status == 200) {
				// do something?
				}
			}
		}
	}

	this.rename = function(content_id,new_name)
	{
		if (!xGetElementById(content_id+'_name')) return false;
		var name_span = xGetElementById(content_id+'_name');
		
	}

	var save_paste_type = function()
	{
		var xmlhttp = new XMLHttpRequest();
		xmlhttp.open("GET", jsconfig.site.root+"library/content_actions.php?action=pastetype&type="+the_paste_type,true);
		xmlhttp.onreadystatechange=function() {
			if (xmlhttp.readyState==4) {}				
		}
		xmlhttp.send(null)		
	}


	var load_clipboard = function()
	{
		var xmlhttp = new XMLHttpRequest();
		xmlhttp.open("GET", jsconfig.site.root+"library/content_actions.php?action=loadclipboard"+clipboard_type,true);
		xmlhttp.onreadystatechange=function() {
			if (xmlhttp.readyState==4) {
				var response = JSON.parse(xmlhttp.responseText);				
				if (response != false && response.content)
				{
					var content = response.content;
					for (var i=0;i<content.length;i++)
					{
						add_to_clipboard({id:content[i].id,name:content[i].name,type:content[i].type,linked:content[i].linked},{nosave:true,force_append:true});
					}
					if (!content.length) reset_paste_type();
				}				
			}
		}
		xmlhttp.send(null)		
	}

}