/* 
 * Copyright 2008, Martin Owens.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */


var items;
var user     = null;
var owner    = null;
var editing  = null;

function set_root(prntid) { items = prntid; }
function set_user(userid) { user  = userid; }
function set_owner(ownid) { owner = ownid; }

// additem( parent_id )
// Creates a new task item as a child of the parent_id (default = 0)
function add_item(p) {
	if(p) {
		ajax_request("add", { 'parent' : p }); 
	} else {
		ajax_request("add");
	}
}

function item_added( task ) {
	p = items;
	if(task['parent']) {		
		p = document.getElementById('item' + task['parent']);
	}
	create_item( p, task );
	edit_item( task['id'] );
}

function create_item( pe, task ) {
	var cse = document.createElement('div');
	cse.setAttribute('id', 'item'+task['id']);
	cse.setAttribute('class', 'case');

	var item = createItemElement( task );

	cse.appendChild(item);
	pe.appendChild(cse);
	return cse;
}

function createItemElement( task ) {

	var id = task['id'];
	var item = document.createElement('div');
	item.setAttribute('class', 'item');
	item.setAttribute('owner', task['owner']);
	item.setAttribute('id', 'itemElement'+id);

	if( user == owner || user == task['owner'] ) {
		if( task['done'] ) {
			item_image(item, 'check', 'done-edit', 'Mark as not done', 'item_not_done', id);
			item_image(item, 'add', 'empty', null, null);
			item.setAttribute('class', 'item done');
		} else {
			item_image(item, 'check', 'notdone-edit', 'Mark as done', 'item_done', id);
			item_image(item, 'add', 'add', 'Add Child Item', 'add_item', id);
		}
	} else {
		if( task['done'] ) {
			item_image(item, 'check', 'done', null, null);
			item.setAttribute('class', 'item done');
		} else {
			item_image(item, 'check', 'notdone', null, null);
		}
	}

	if(task['active']) {
		item.setAttribute('class', 'item active');
	}

	var text = document.createElement('div');
	text.setAttribute('class', 'text');
	text.setAttribute('id', 'text'+id);
	if( user == owner ) {
		text.setAttribute('onclick', "edit_item("+id+")");
	}
	text.appendChild(document.createTextNode(task['name']));
	item.appendChild(text);

	item_image(item, 'end', 'end', null, null );

    if( user == owner && ! task['done'] ) {
        item_image(item, 'del', 'del', 'Delete Task', 'delete_item', id);
    }

	if(! task['done'] ) {
		if( task['owner'] ) {
			if( user == task['owner'] ) {
				item_image(item, 'take', 'give', 'Give Away Task', 'give_item', id);
			} else {
				var ot = document.createElement('div');
				ot.setAttribute('class', 'owner');
				ot.setAttribute('id', 'owner'+id);
				ot.appendChild(document.createTextNode( task['oname'] ));
				item.appendChild(ot);
			}
		} else if(user) {
			item_image(item, 'take', 'take', 'Take Task', 'take_item', id);
		}
	} else {
		item_image(item, 'take', 'empty', null, null);
	}

	return item
}

function item_image(p, cls, img, title, click, id) {
	var e = document.createElement('img');
	if(click) {
		cls = cls + " jsbutton";
	}
	e.setAttribute('src', '/media/images/task/'+img+'.png');
	e.setAttribute('id', img+id);
	e.setAttribute('class', cls);
	if(title) {
		e.setAttribute('title', title);
	}
	if(click) {
		e.setAttribute('onclick', click+'('+id+')');
	}
	p.appendChild(e);
}

function replace_item( task ) {
    var cse = document.getElementById('item'+task['id']);
	var item = document.getElementById('itemElement'+task['id']);
	
	cse.replaceChild(createItemElement( task ), item);

    return cse;
}

function delete_item( id ) {
	ajax_request("delete", { 'id' : id });
}

function item_deleted( data ) {
	var id   = data['id']
	var item = document.getElementById('item'+id);
	if(item) {
		item.parentNode.removeChild(item);
	}
}

function take_item( id ) { ajax_request("take", { 'id' : id }); }
function give_item( id ) { ajax_request("give", { 'id' : id }); }
function item_done( id ) { ajax_request("mark", { 'id' : id, 'done' : 1 }); }
function item_not_done( id ) { ajax_request("mark", { 'id' : id, 'done' : 0 }); }

function edit_item( id ) {
	if(editing == id) {
		return;
	}
	var text = document.getElementById('text'+id);
	editing = id;

	// Remove text from block
	str = text.firstChild.nodeValue;
	text.removeChild(text.firstChild);

	// Create input box replacement
	var input = document.createElement('input');
	input.setAttribute('class', 'editor');
	input.setAttribute('value', str);
	input.setAttribute('onkeypress', 'edit_keyed(event)');
	input.setAttribute('onblur', 'finish_edit()');
	text.appendChild(input);
	input.focus();
	input.setSelectionRange(0,str.length);
}

function edit_keyed(event) {
	if(editing != null && event.keyCode==13) { finish_edit() }
}

function finish_edit() {
	if(editing) {
		var str = document.getElementById('text'+editing).firstChild.value;
		if(str) {
			var id  = editing;
			editing = null;
			ajax_request("edit", { 'name' : str, 'id' : id });
		}
	}
}

function item_edited(data) {
	var id   = data['id'];
	var text = document.getElementById('text'+id);
	if(text) {
		text.removeChild(text.firstChild);
		text.appendChild(document.createTextNode(data['name']));
	}
}

