
/* Tagging */

var tag_references = {};

function handler(value, tagged_thing_id) {};

function highlight_completions(value, tagged_thing_id) {
	var tags = tag_references[tagged_thing_id].tags;
	if (value == '') {
		clear_tags(tags, tagged_thing_id, "tag_high");
		clear_people(tag_references[tagged_thing_id].contributors, tagged_thing_id, "tagger_high");
		return;
	}
	var tag_contributors = tag_references[tagged_thing_id].tag_contributors;
	var re = new RegExp(("^"+value), "i");
	var matching_tags = {}, matching_peeps = {};

	var tag_completions = new Array();
	var person_completions = new Array();	

	for(var i = 0; i < tags.length; i++) {
		m = tags[i].match(re);
		if(m) {
			highlight_one_tag(tags[i], tagged_thing_id, "tag_high");
			tag_completions.push(tags[i]);
			var taggers = tag_contributors[tags[i]];
			for(var j = 0; j < taggers.length; j++) {
				matching_peeps[taggers[j]] = 1;
			}
		}else{
			unhighlight_one_tag(tags[i], tagged_thing_id, "tag_high");
		}
	}

	for(var i = 0; i < taggers.length; i++) {
		if(matching_peeps[taggers[i]]) {			
			highlight_one_person(taggers[i], tagged_thing_id, "tagger_high");
			person_completions.push(taggers[i]);
		}else{
			unhighlight_one_person(taggers[i], tagged_thing_id, "tagger_high");	
		}
	}
	tag_references[tagged_thing_id]["tag_completions"] = tag_completions;
	tag_references[tagged_thing_id]["person_completions"] = person_completions;
		
}

/* Todo: unhighlight gracefully */
function undo_highlight_tags() {
	clear_all_tags();
}

function undo_highlight_people() {
	clear_all_people();	
}

/** Highlight and unhighlight Tags **/

function highlight_one_tag(tag, tagged_thing_id, c) {
	e = $id(tagged_thing_id + "_" + tag); 
	if(e) addClass(e, c);	
}

function unhighlight_one_tag(tag, tagged_thing_id, c) {
	e = $id(tagged_thing_id + "_" + tag); 
	if(e) rmClass(e, c);	
}	

function highlight_tags(tags, thing_id, c) {
	for(i = 0; i < tags.length; i++) {
		e = $id(thing_id + "_" + tags[i]); 
		if(e) addClass(e, c);
	}
}

function highlight_tags_all(tags, exclude, c) {
	if(tag_references.all_things != null) {
		for(var i = 0; i < tag_references.all_things.length; i++) {
			if(tag_references.all_things[i] != exclude) {				
				highlight_tags(tags, tag_references.all_things[i], c);
			}
		}
	}
}

function clear_tags(tags, thing_id, c) {		
	for(i = 0; i < tags.length; i++) {
		e = $id(thing_id + "_" + tags[i]); 
		if(e) rmClass(e, c);
	}
}

function clear_tags_all(tags, exclude, c) {
	if(tag_references.all_things != null) {
		for(var i = 0; i < tag_references.all_things.length; i++) {
			if(tag_references.all_things[i] != exclude)
				clear_tags(tags, tag_references.all_things[i], c);
		}
	}
}

/** Highlight and unhighlight people **/

function highlight_one_person(person_id, tagged_thing_id, c) {
	e = $id(tagged_thing_id + "_" + person_id);
	if(e) addClass(e, c);
}

function unhighlight_one_person(person_id, tagged_thing_id, c) {
	e = $id(tagged_thing_id + "_" + person_id);
	if(e) rmClass(e, c);
}

function highlight_people(peeps, thing_id, c) {
	for(var i = 0; i < peeps.length; i++) {
		e = $id(thing_id + "_" + peeps[i]);
		if(e) addClass(e, c);
	}
}

function highlight_people_all(people, exclude, c) {
	if(tag_references.all_things != null) {
		for(var i = 0; i < tag_references.all_things.length; i++) {
			if(tag_references.all_things[i] != exclude) {				
				highlight_people(people, tag_references.all_things[i], c);
			}
		}
	}
}

function clear_people(peeps, thing_id, c) {
	for(i = 0; i < peeps.length; i++) {
		e = $id(thing_id + "_" + peeps[i]);
		if(e) rmClass(e, c);
	}
}

function clear_people_all(people, exclude, c) {
	if(tag_references.all_things != null) {
		for(var i = 0; i < tag_references.all_things.length; i++) {
			if(tag_references.all_things[i] != exclude) {				
				clear_people(people, tag_references.all_things[i], c);
			}
		}
	}
}