// lock the animation
// otherwise, if you double-click it will mess up the toggle
var show_select_lock = false;

function show_select (sb_id) {
	if (show_select_lock == true) {
	   return;
	}

	show_select_lock = true;
	if ($(sb_id).style.display == 'none') {
	   // Effect.BlindDown(sb_id, { afterFinish: function () { show_select_lock = false; } });
		$(sb_id).style.display = 'block';
        show_select_lock = false;
	} else {
	   // Effect.BlindUp(sb_id, { afterFinish: function () { show_select_lock = false; } });
		$(sb_id).style.display = 'none';
        show_select_lock = false;
	}
}

function handle_change (check,included_list) {
    /* 
    Updates the visual "currently selected" list by going through all of
    the keywords/checkboxes that are children of the specified checkbox.
    In other words, makes sure if a parent is selected, all children are also
    selected.
    */
    var subchecks = check.parentNode.getElementsByTagName('INPUT');
    for (var x = 0; x < subchecks.length; x++) {
        var subcheck = subchecks[x];
        subcheck.checked = check.checked;
        handle_single_change(subcheck, included_list);
    }
}

function handle_single_change (check,included_list) {
    /*
    Updates the visual "currently selected" list by either adding or removing
    the specified checkbox.
    */

    var newid = check.id + '_text';
    var labelid = check.id + '_label';

    if (check.checked) {
		if (document.getElementById(newid) == null) {
			var new_text = document.createElement('span');
			new_text.id = newid;
			new_text.className = "included_topic_text";
			var fake_check = '<input type="checkbox" checked="checked" disabled="false" />';
			new_text.innerHTML = fake_check + ' ' + $(labelid).innerHTML;
			new_text.style.display = 'none';
			
			$(included_list).appendChild(new_text);
			
			// try to encourage it not to break across lines
			// by appending a space
			$(included_list).appendChild(document.createTextNode(' '));
			// Effect.Appear(newid, { duration: .35 });
			new_text.style.display = 'inline';
		}
    } else if (document.getElementById(newid) != null) {
		var del_func = function (e) {
			document.getElementById(included_list).removeChild(e.element);
		}
		
		// Effect.Fade(newid, { duration: .35, afterFinish: del_func });
		document.getElementById(included_list).removeChild($(newid));
    }
}

// used to sync the labels on first load or if page reloaded
function sync_labels (sb_id,included_list) {
    var checkboxes = $(sb_id).getElementsByTagName('input');
    
    for (var i = 0; i < checkboxes.length; i++) {
        var check = checkboxes[i];
        if (check.checked) {
            handle_single_change(checkboxes[i],included_list);
        }
    }
}

function handle_create (field, tabindex, folksonomy, addtextid) {
    if ($(addtextid).value == '') {
		return;
    }
    
    var new_item = document.createElement('li');
    var old_id = field + '_' + String(tabindex-1);
    var new_checkbox = $(old_id).cloneNode(false);
    var new_label = $(old_id + "_label").cloneNode(false);
    var new_value = $(addtextid).value.escapeHTML();
    var new_value_tn = document.createTextNode(new_value)

    var new_id = field + '_' + ++tabindex;
    new_checkbox.id=new_id;
    new_label.id=new_id + "_label";
    new_label.htmlFor=new_id; 
    new_label.appendChild(new_value_tn);
    new_checkbox.value=new_value;

    new_item.appendChild(new_checkbox);
    new_item.appendChild(new_label);

    // new_item.style.display = 'none';

    //alert(folksonomy);

    $(folksonomy).appendChild(new_item);

    // disabled -- may be having problems with IE
    // Effect.Appear(new_item);
    new_checkbox.checked = true;
    handle_change(new_checkbox)
    $(addtextid).value = '';
}



