# Задание по модулю 2: Базовые операции, функции и операции с DOM (jq или vanilla)

## reverse

Напишите функцию `reverse`, которая будет менять местами все ключи и значения в объекте:

```javascript
var obj = {
    foo: 'bar',
    for: 'in',
}

reverse(obj) // возвращает {bar: 'foo', 'in': 'for' }
```

## unique

Напишите функцию `unique`, которая будет удалять все повторы в массиве, включая совпадающие числа и числа в строках ("45" и 45 в примере ниже)

```javascript
unique(["lorem", null, 5, "15", 45, null, "45", "lorem", {}, {}, 5, 15]) // должно вернуть ["lorem", null, 5, "15", 45, {}, {}]
```

## chekboxlist

Написать функцию checkboxList, которая будет создавать несколько `checkbox`-ов с `label` с текстом. Каждый новый блок (`checkbox` и `label`) должен начинаться с новой строки в контейнере 


```javascript
var checkboxes = ['Пол', 'Высшее образование', 'Трудоустроен']

checkboxList("checksContainer",checkboxes); //создает три чекбокса с текстами из массива (пол, наличие высшего образование и трудоустроен или нет человек на текущий момент) один под другим в контейнере с id = checksContainer
```

## modal

Сделать функцию, которая показывает модальное окно с контейнером, `id` которого передано в качестве параметра:

Примерное содержимое модального окна. Вы можете использовать любое другое (например картинку, если ваша модалка - это просморт картинок)
```html
<div id='modal' style='display: none'> <!-- изначально окно спрятано, и показывается только в модалке -->
    ВВедите логин: <input type='text'><br/>
    ВВедите пароль: <input type='password'><br/>
    <input type='submit'>
</div>
```

```javascript
modal('modal') //параметр - id div-а, который покажется в качестве содержимого модального окна
```

При запуске функции она должна:
- создать полупрозрачный фоновый `div` размером с всю страницу. Используйте z-index
- отцентровать и показать `div` с контентом модалки;
- по клику на фоновый `div` удалять фоновый `div` и прятать `div` с контентом

## recursiveTree

Напишите функцию, которая отрисовывает древовидное меню, используя `li`, `ul` или `ol`.

```javascript
var tree = [1,[21,22],3,[41,[421,422]],5]

recursiveTree('treeContainer',tree)
```

код выше должен создавать следующее (или схожее) дерево в **DOM** (в элементе treeContainer):

```html
<ul>
    <li>1</li>
    <li>
        <ul>
            <li>21</li>
            <li>22</li>
        </ul>
    </li>
    <li>3</li>
    <li>
        <ul>
            <li>41</li>
            <li>
                <ul>
                    <li>421</li>
                    <li>422</li>
                </ul>
            </li>
        </ul>
    </li>
    <li>5</li>
</ul>
```
https://repl.it/I4EL

При движении мыши над элементами списка должны подсвечиваться все предки элемента и он сам.
Так же можете усложнить структуру `tree` и сделать дерево ссылок (URL и текст меню в объекте качестве узла дерева, 
а не текст, как сейчас в `tree`)