var save_rec_id;

function loadWindowData()
{
		
	displayViewTabs();
	displayAllForCurrentView();
	displayUserAccounts();
	
	displayFiledTasksForCurrentUser();
	displayAccountDetail();
	
	//var element=$('delete_task_container_id');
	//prepareViewDrop(element);
	
	var element=$('file_task_container_id');
	prepareFileDrop(element);
	
	//var element=$('done_task_container_id');
	//prepareDoneDrop(element);
	
	var element=$('tab_container');
	prepareTabDrop(element);

	updateLogout();

	
	
}


function changeAccount(account_id)
{
	var options={evalScripts:true, onComplete: function (transport){window.location.reload();}};
	var updated=new Ajax.Updater('console', 'tasks/useraccount/cuseraccountinterface.php?mode=change_account&account_id='+account_id, options);
}
function performOnSelected(mode)
{
	if(mode=='delete')
		deleteTasks();
	else if(mode=='toggle_completed')
		toggleDoneTasks();


}
function loadWindowData_print()
{
		
	displayAllForCurrentView();
			
			
}
function updateLogout()
{
	var options={evalScripts:true};
	var updated=new Ajax.Updater('logout_div','tasks/user/cuserinterface.php?mode=update_logout', options);
	
}


function changeViewtype(task_id, display_id)
{
	var options={evalScripts:true, onComplete: function (transport){displayAllForCurrentView();}};
	var updated=new Ajax.Updater('console','tasks/task/ctaskinterface.php?mode=set_display&rec_id='+task_id+'&display_id='+display_id,options);
	
}
function displayFiledTasksForCurrentUser()
{
	var options={evalScripts: true};
	var updated=new Ajax.Updater('file_task_container_id', 'tasks/tasklist/ctasklistinterface.php?mode=current_files',options);
	
}
function sublistForTask(rec_id)
{
	// sometimes this is called before the task whose content defines this method
	// is fully loaded, causing an exception
	var functionName='sub_task_list_'+rec_id;
	var command=functionName+'();';
	var array=new Array();
	var isDefined = eval('(typeof ' + functionName + '==\'function\');');
    if (isDefined)
    {
		array=eval(command);
    } else {
        alert('Function ' + functionName + ' does not exist');
    }


	return array;
}
function toggleMasterExpansion(current_position, task_id, taskrelation_id)
{

	// update the current setting on the master task
	var newValue=0
	if(current_position==0)
		newValue=1;
	
	var url='tasks/taskrelation/ctaskrelationinterface.php?mode=set_expanded_state&rec_id='+taskrelation_id+'&position='+newValue;
	var options={evalScripts:true};
	var updated=new Ajax.Updater('task_leaf_content_'+task_id, url,options);
	

	displaySubtasksForMaster(task_id, newValue);
								
}

function displaySubtasksForMaster(rec_id, state)
{

	var list=sublistForTask(rec_id);

	list.each(
				function(value) 
				{
					if(value>0)
					{
						if(state==1)
						{
							// 1 is expanded, load all the tasks
							var array=$('sub_task_container').select('[id='+value+']').toArray();
							if(array.size()==0)
								loadOneTask(value);
						} else {
							// 0 is collapsed, remove all the currently visible tasks
							var array=$('sub_task_container').select('[id='+value+']').toArray();
							array.each( 
										function(element)
										{
											displaySubtasksForMaster(element.id,0);
											element.remove();
										}
										);
						}
					}
				}
	);
}	
	

function displayAccountDetail()
{
	var options={evalScripts: true};
	var updated=new Ajax.Updater('account_detail_div', 'tasks/account/caccountinterface.php?mode=display_detail',options);


}
function displayViewTabs()
{
	var options={evalScripts: true};
	var updated=new Ajax.Updater('tab_container', 'tasks/tasklist/ctasklistinterface.php?mode=current_tabs',options);

}

function displayUserAccounts()
{
	var options={evalScripts: true};
	var updated=new Ajax.Updater('accounts_div', 'tasks/useraccount/cuseraccountinterface.php?mode=current_accounts',options);

}

function setCurrentView(rec_id)
{
	var options={evalScripts:true, onComplete: function (transport){displayAllForCurrentView();}};
	
	var updated=new Ajax.Updater('console','tasks/useraccount/cuseraccountinterface.php?mode=set_current_view&task_id='+rec_id,options);

}
function displaySubs(rec_id)
{
	var options={evalScripts: true};
	var updated=new Ajax.Updater('sub_task_container', 'tasks/tasklist/ctasklistinterface.php?mode=subs&rec_id='+rec_id, options);


}

function displayAllForCurrentView()
{
	var options={evalScripts: true};
	var updated=new Ajax.Updater('sub_task_container', 'tasks/useraccount/cuseraccountinterface.php?mode=display_current_view', options);


}

function prepareDrag(element, taskrelation_id)
{
	if(!element)
		return;
		
	var options={onEnd: function(){dragEnded(element, taskrelation_id);}};
	var drag=new Draggable( element, options );
	
	var options={handle: 'resize_handle', onEnd: function(){resizeEnded(element, taskrelation_id);}};
	var drag=new Resizable( element, options );
	
	var drag_element=element.select('div.drag_handle').toArray().first();
	var options={revert: true, onStart: function(){selectDragStarted(element, drag_element);}, onEnd:function(){selectDragEnded(element, drag_element);}};
	var drag=new Draggable( drag_element, options );
	
	var href_element=element.select('a.lbOn').toArray().first();	
	valid = new lightbox(href_element);
	
	return valid;
}

function prepareViewDrop(element)
{
	var options={accept:'drag_handle', hoverclass:'drag_hover', onDrop: 
																	function(drag_element, drop_element, event)
																	{

																		var options={evalScripts:true};
																		var url='tasks/task/ctaskinterface.php?rec_id='+drag_element.id+'&mode=change_view&view_id='+drop_element.id;
																		var updated=new Ajax.Updater('console',url,options);
																		var task_element=$('sub_task_container').select('[id='+drag_element.id+']').toArray().first();
																		task_element.remove();
																	}
																};
	Droppables.add(element,options) ;

}

function prepareDeleteDrop(element)
{
	var options={accept:'drag_handle', hoverclass:'drag_hover', onDrop: 
																	function(drag_element, drop_element, event)
																	{
																		var task_element=$('sub_task_container').select('[id='+drag_element.id+']').toArray().first();
																		deleteTask(task_element.id, drag_element.id);
																	}
																};
	Droppables.add(element,options) ;

}

function prepareTaskDrop(element)
{
	if(!element)
		return;
		
	var options={zindex:1200, accept:'drag_handle', hoverclass:'drag_hover', onDrop: 
																	function(drag_element, drop_element, event)
																	{
																		createTaskRelation(drop_element.id, drag_element.id);
																	}
																};
	Droppables.add(element,options) ;

}



function prepareFileDrop(element)
{
	var options={accept:'drag_handle', hoverclass:'drag_hover', onDrop: 
																	function(drag_element, drop_element, event)
																	{
																		createFiledTask(drag_element, drop_element);

																	}
																};
	Droppables.add(element,options) ;

}

function prepareTabDrop(element)
{
	var options={accept:'drag_handle', hoverclass:'drag_hover', onDrop: 
																	function(drag_element, drop_element, event)
																	{
																		createdTabbedTask(drag_element, drop_element);

																	}
																};
	Droppables.add(element,options) ;

}


function prepareDoneDrop(element)
{
	var options={accept:'drag_handle', hoverclass:'drag_hover', onDrop: 
																	function(drag_element, drop_element, event)
																	{
																		toggleDoneTask(drag_element.id);

																	}
																};
	Droppables.add(element,options) ;

}

function createdTabbedTask(drag_element, drop_element)
{
	var options={evalScripts:true, onComplete: function (transport){displayViewTabs();}};
	var updated=new Ajax.Updater('console', 'tasks/task/ctaskinterface.php?mode=change_to_tab&rec_id='+drag_element.id, options);
	
	var main_element=$('sub_task_container').select('[id='+drag_element.id+']').toArray().first();
	main_element.remove();
}


function createFiledTask(drag_element, drop_element)
{
	createFiledTaskWithID(drag_element.id);
}

function createFiledTaskWithID(rec_id)
{	
	
	var options={evalScripts:true, onComplete: function (transport){displayFiledTasksForCurrentUser();}};
	var updated=new Ajax.Updater('console', 'tasks/task/ctaskinterface.php?mode=file_task&rec_id='+rec_id, options);
	
	
	var array=sublistForTask(rec_id);
	array.each( 
				function(value)
				{
					if(value>0)
					{
						var sub_array=$('sub_task_container').select('[id='+value+']').toArray();
						if(sub_array.size()>0)
							sub_array.each( 
										function(element)
										{
											element.remove();
										}
										);
					}
				}
			);
	var main_element=$('sub_task_container').select('[id='+rec_id+']').toArray().first();
	main_element.remove();
}
        
function removeFiledTask(rec_id)
{
	var options={evalScripts: true, insertion: Insertion.Bottom, onComplete: function(){displayFiledTasksForCurrentUser();}};
	var updated=new Ajax.Updater('sub_task_container', 'tasks/task/ctaskinterface.php?mode=remove_file&rec_id='+rec_id, options);
}

function selectDragEnded(element, drag_element)
{
//	element.style.overflow="hidden";
drag_element.remove();
drag_element.style.width="100%";
drag_element.style.height="100%";
var parent_element=element.select('div.drag_handle_outline').toArray().first();
parent_element.insert(drag_element);

}

function selectDragStarted(element, drag_element)
{
//	element.style.overflow="visible";
drag_element.remove();
drag_element.style.width='20px';
drag_element.style.height='20px';
$('body_id').insert(drag_element);

}
function dragEnded(element, taskrelation_id)
{
	
	var position=element.positionedOffset();
	var options={evalScripts:true};
	var x=position[0];
	var y=position[1];
	var url='tasks/taskrelation/ctaskrelationinterface.php?rec_id='+taskrelation_id+'&mode=update_position&x='+x+'&y='+y;
	var updated=new Ajax.Updater('console',url,options);
	
	
}

function resizeEnded(element, taskrelation_id)
{
	var width=element.getWidth();
	var height=element.getHeight();
	var options={evalScripts:true};
	var url='tasks/taskrelation/ctaskrelationinterface.php?rec_id='+taskrelation_id+'&mode=update_size&width='+width+'&height='+height;
	var updated=new Ajax.Updater('console', url,options);
}

function addTask()
{
	var options={evalScripts: true, insertion: Insertion.Bottom};
	
	var updated=new Ajax.Updater('sub_task_container', 'tasks/task/ctaskinterface.php?mode=new', options);
}

function addAccount()
{
	var options={evalScripts: true, insertion: Insertion.Top};
	var updated=new Ajax.Updater('accounts_div', 'tasks/useraccount/cuseraccountinterface.php?mode=new', options);
}

function addTab()
{
	var options={onComplete: function (transport){displayViewTabs();}};
	var updated=new Ajax.Updater('console','tasks/view/cviewinterface.php?mode=new', options);
}

function loadOneTask(rec_id)
{

	var url='tasks/task/ctaskinterface.php?mode=load_task&rec_id='+rec_id;
	var options={evalScripts: true, insertion: Insertion.Bottom};
	var updated=new Ajax.Updater('sub_task_container', url,options);
	
}


function reloadTaskContent(rec_id)
{

	var url='tasks/task/ctaskinterface.php?mode=reload_content&rec_id='+rec_id;
	var options={evalScripts:true};
	var updated=new Ajax.Updater('task_leaf_content_'+rec_id, url,options);
	
}



var selectedTasks=new Hash();

function deleteTasks()
{
	selectedTasks.each(
		function(pair) 
		{
	  		deleteTask(pair.key, pair.value);
		}
		);
		
}

function deleteTask(div_id, rec_id)
{
	var options={evalScripts:true};
	var url='tasks/task/ctaskinterface.php?mode=delete&rec_id='+rec_id;
	var updated=new Ajax.Updater('console', url,options);
	$(div_id).remove();
	
	selectedTasks.unset(div_id);

}

function toggleDoneTasks()
{
	selectedTasks.each(
		function(pair) 
		{
	  		toggleDoneTask(pair.value);
			//selectedTasks.unset(pair.key);we also need to toggle the checkboxes themselves, and no point in unsetting this until we do
		}
		);
		
}


function toggleDoneTask(rec_id)
{
	var options={evalScripts:true};
	var url='tasks/task/ctaskinterface.php?mode=toggle_done&rec_id='+rec_id;
	var updated=new Ajax.Updater('task_leaf_content_'+rec_id, url,options);
}

function createTaskRelation(rec_id, sub_task_id)
{
	var options={evalScripts:true};
	var url='tasks/task/ctaskinterface.php?mode=create_relation_to&rec_id='+rec_id+"&sub_id="+sub_task_id;
	var updated=new Ajax.Updater('task_leaf_content_'+rec_id, url,options);

	reloadTaskContent(sub_task_id);	
}


function selectTask(addToArray,div_id, rec_id)
{
	if(addToArray==true)
	{
		selectedTasks.set(div_id,rec_id);
	} else {
		selectedTasks.unset(div_id);
	}	
}

function addUser()
{
	var options={evalScripts:true,insertion: Insertion.Bottom};
	var url='tasks/user/cuserinterface.php?mode=add_user&rec_id=0';
	var updated=new Ajax.Updater('manage_user_list_div', url,options);	
}
