<!--
/*
	Name: 		CAnimateDivArea.js
	Ver: 		1.0a
	Author: 	Andrey Korolkov
*/
function CAnimateDivArea () {
// private: {
	var pTagDiv = null; // Указатель на слой
	var createParams = null;
// }
// public: {
	this.SOURCE_TYPE = {
		'TEXT': 	1,
		'PARENT': 	2,
		'AJAX': 	3
	};
// }
// public: {
	/*
		Создаёт слой. Параметр params имеет ключи в качестве входящих параметром функции:
			parent - "родитель", указатель на тег-контейнер, где будет размещаться слой,
						в противном случае, если этот параметр не указан, то слой будет добавдяться в конце всего содержимого HTML документа.
			width - ширина слоя.
			height - высота слоя.
			x - расположенение по оси x
			y - расположение по оси y
			class - название стиля для слоя
			sourceType - тип исходного кодя для слоя, т.е. откуда будет браться HTML содержимое для отображения в слое. Всего существует три типа:
							TEXT - переменная "source" будет иметь содержимое для слоя в виде тестовой строки,
							PARENT - переменная "source" будет иметь указатель на тег-контейнер, чьё содержимое можно будет использовать для слоя,
							AJAX - переменная "source" будет содержать URL к странице, где можно будет получить содержимое для слоя.
			source - дання переменная имеет содержимое в зависимости от её типа (см. выше)
			show - true - если слой надо показать, false - в противном случае
	*/
	this.Create = function (params) {
		createParams = params;

		// Создаём слой
		pTagDiv = document.createElement('DIV');

		// Задаём имя стиля
		if (params['class']) {
			pTagDiv.className = params['class'];
		}

		// Настраиваем стиль
		pTagDiv.style.position = 	'absolute';
		pTagDiv.style.overflow = 	'scroll';//'auto';//'hidden';

		if (params['y'] != -1)
			pTagDiv.style.top = (params['y'] ? params['y'] : '0') + 'px';
		
		if (params['x'] != -1)
			pTagDiv.style.left = (params['x'] ? params['x'] : '0') + 'px';

		pTagDiv.style.width = 		(params['width'] ? params['width'] : '0') + 'px';
		pTagDiv.style.height = 		(params['height'] ? params['height'] : '0') + 'px';
		pTagDiv.style.display = 	(params['show'] ? 'block' : 'none');

		// Опртеделюем родителя
		if (params['parent']) {
			params['parent'].appendChild(pTagDiv);
		} else {
			document.body.appendChild(pTagDiv);
		}

		// В зависимости от типа источника, определяем содержимое слоя
		if (params['sourceType'] && params['source']) {
			if (params['sourceType'] == this.SOURCE_TYPE.TEXT) {
				pTagDiv.innerHTML = params['source'];
			} else if (params['sourceType'] == this.SOURCE_TYPE.PARENT) {
				pTagDiv.innerHTML = params['source'].innerHTML;
			} else if (params['sourceType'] == this.SOURCE_TYPE.AJAX) {
				// Делаем запрос
			} else {
				alert('CAnimateDivArea.Create.params[\'sourceType\']: не верно задан тип источника.');
				return;
			}
		} else {
			if (!params['sourceType']) {
				alert('CAnimateDivArea.Create.params[\'sourceType\']: не задан тип источника.');
				return;
			}
			if (!params['source']) {
				alert('CAnimateDivArea.Create.params[\'source\']: не задан источник.');
				return;
			}
		}
//		alert('Create');
	}

	// Показывает слой
	this.Show = function () {
		if (!pTagDiv) {
			return;
		}

		// Показываем слой
		pTagDiv.style.display = 'block';

		// Запуск процесс анимации для открытия меню
		_AnimateShow(0, 0, 0, 0);
	}

	// Прячет слой
	this.Hide = function () {
		if (pTagDiv) {
			pTagDiv.style.display = 'none';
		}
	}

	// Переключатель. Прячет или показывает слой.
	this.ShowHide = function () {
		if (pTagDiv) {
			if (pTagDiv.style.display == 'none') {
				this.Show();
			} else {
				this.Hide();
			}
		}
	}

	// Уничтожает слой
	this.Destroy = function () {
		if (pTagDiv) {
			document.body.removeChild(pTagDiv);
		}
	}
// }
// private: {
	var _AnimateShow = function (x, y, w, h) {
		if (!pTagDiv) {
			return;
		}

		h += (pTagDiv.offsetHeight / 100) * 10; // Инкремент
		w += (pTagDiv.offsetWidth / 100) * 10; // Инкремент

		pTagDiv.style.clip = 'rect(0px, ' + w + 'px, ' + h + 'px, 0px)'; // Изменяем размер

		// Если инкремент достиг размера слоя, то на выход
		if (h >= pTagDiv.offsetHeight && w >= pTagDiv.offsetWidth) {
			// Прячет меню с задержкеой
//			setTimeout(function() {_AnimateHide();}, 2000); 
			return;
		}

		// Следующий вызов для анимации
		setTimeout(function() {_AnimateShow(x, y, w, h);}, 10); 
	}

	var _AnimateHide = function () {
		if (!pTagDiv) {
			return;
		}

		pTagDiv.style.display = 'none';
	}
// }
}
//-->