CombatGroup*
CombatGroup::Clone(bool deep)
{
	CombatGroup* clone = new(__FILE__,__LINE__)
	CombatGroup(type, id, name, iff, enemy_intel);

	clone->combatant  = combatant;
	clone->region     = region;
	clone->location   = location;
	clone->value      = value;
	clone->expanded   = expanded;

	for (int i = 0; i < units.size(); i++) {
		CombatUnit* u = new(__FILE__,__LINE__) CombatUnit(*units[i]);
		u->SetCombatGroup(clone);
		clone->units.append(u);
	}

	if (deep) {
		for (int i = 0; i < components.size(); i++) {
			CombatGroup* g = components[i]->Clone(deep);
			clone->AddComponent(g);

			if (g->Type() == FIGHTER_SQUADRON   ||
					g->Type() == INTERCEPT_SQUADRON ||
					g->Type() == ATTACK_SQUADRON    ||
					g->Type() == LCA_SQUADRON) {

				if (units.size() > 0) {
					CombatUnit* carrier = units[0];

					for (int u = 0; u < g->GetUnits().size(); u++) {
						CombatUnit* unit = g->GetUnits()[u];

						if (unit->Type() >= Ship::FIGHTER ||
								unit->Type() <= Ship::LCA) {
							unit->SetCarrier(carrier);
							unit->SetRegion(carrier->GetRegion());
						}
					}
				}
			}
		}
	}

	return clone;
}
CombatGroup*
CombatGroup::FindCarrier()
{
	CombatGroup* p = GetParent();

	while (p         != 0                           && 
	p->Type() != CombatGroup::CARRIER_GROUP  &&
	p->Type() != CombatGroup::STATION        &&
	p->Type() != CombatGroup::STARBASE)
	p = p->GetParent();

	if (p && p->GetUnits().size())
	return p;

	return 0;
}