/*
 * Copyright (C) Jonathan Turkanis and Lincoln Law Center LLC 2006
 * File: coderage/controls/_pub/group.js
 * Date: 2006-12-22
 */
 
 
function repeating_group(name, required_fields)
{
    if (!repeating_group.groups)
        repeating_group.groups = new Object;
    repeating_group.groups[name] = this;
    this.name = name;
    this.required_fields = required_fields;
    this.key = 'group_' + name + '_blocks';
	this.blocks = new Array;
	for (var b in document.forms[0][this.key].value.split(/,/))
		this.blocks.push(parseInt(b));
}

repeating_group.prototype.update = 
    function()
    {
        document.forms[0][this.key].value = this.blocks.join(",");
    }

repeating_group.add =
    function(name) 
    { 
        var grp = repeating_group.groups[name];
        var pos = grp.blocks[grp.blocks.length - 1] + 1;
        var id = 'group_' + grp.name + '_template';
        var template = document.getElementById(id);
        var block = template.cloneNode(true);
        block.style.display = '';
        block.id = 'group_' + grp.name + '_' + pos;
        var stack = new Array(block);
        while (stack.length) {
            node = stack.pop();
            if (node.name) {
                node.name = node.name.replace(/###/, pos);
            }
            if (node.id)
                node.id = node.id.replace(/###/, pos);
            for (var z = 0, n = node.childNodes.length; z < n; ++z)
                stack.push(node.childNodes.item(z));
        }
        template.parentNode.insertBefore(block, template);
		grp.blocks.push(pos);
        grp.update();
        for (var z in grp.required_fields) {
            var req = grp.required_fields[z];
            var id = req[0].replace(/###/, pos);
            register_required_field(id, req[1]);
        }
    };
    
repeating_group.del =
    function(name, elt, non_empty) 
    { 
        var grp = repeating_group.groups[name];
        if (non_empty && grp.blocks.length == 1) {
            alert("You must select at least one item");
            return;
        }
        var node = elt;
        while (!/^tbody$/i.test(node.nodeName))
            node = node.parentNode;
        /_(\d+)$/.test(node.id);
        var pos = parseInt(RegExp.$1);
        var blocks = new Array;
        for (var z = 0, n = grp.blocks.length; z < n; ++z) {
            var b = grp.blocks[z];
            if (b != pos)
                blocks.push(b);
        }
        grp.blocks = blocks;
        grp.update();
        repeating_group.unregister(node);
        node.parentNode.removeChild(node);
    };
    
repeating_group.unregister = 
    function(node)
    {
        var stack = new Array(node);
        while (stack.length) {
            node = stack.pop();
            if (node.name)
                window.unregister_required_field(node.name);
            for (var z = 0, n = node.childNodes.length; z < n; ++z)
                stack.push(node.childNodes.item(z));
        }
    }
    
repeating_group.activate_triggers = 
    function(elt, val, dep, name)
    {
        var grp = repeating_group.groups[name];
        var node = elt;
        while (!/^tbody$/i.test(node.nodeName))
            node = node.parentNode;
        /_(\d+)$/.test(node.id);
        var pos = parseInt(RegExp.$1);
		for (var z = 0, n = dep[0].length; z < n; ++z)
			dep[0][z] = dep[0][z].replace(/###/, pos);
		for (var z = 0, n = dep[1].length; z < n; ++z)
			dep[1][z] = dep[1][z].replace(/###/, pos);
		activate_triggers(elt, val, dep);
    }
