/*
 * =======================================================================================
 * AdvancedPopup - простое всплывающее окно
 * ---------------------------------------------------------------------------------------
 * Конструктор new AdvancedPopup(String ParentTagID [, int OffsetTop, int OffsetLeft]);
 * где ParentTagID - обязательный параметр, передается строкой, ID родительского элемента;
 *     OffsetTop   - смещение по вертикали, числовое значение, определяет вертикальное
 *                   смещение относительно родительского элемента в пикселях, может быть
 *                   как отрицательным, так и положительным, по-умолчанию равно нулю;
 *     OffsetLeft  - смещение по горизонтали, числовое значение, оределяет горизонтальное
 *                   смещение относительно родительского элемента в пикселях, может быть
 *                   как отрицательным, так и положительным, по-умолчанию равно нулю.
 * ---------------------------------------------------------------------------------------
 * Метод setBorderColor(String Color) - устанавливает цвет границы всплывающего окна;
 * где Color - обязательный параметр, передается строкой в формате "#XXXXXX", определяет
 *             цвет границы всплывающего окна;
 * ---------------------------------------------------------------------------------------
 * Метод setBorderSize(int Size) - устанавливает размер граница всплывающего окна;
 * где Size - обязательный параметр, передается числовым положительным значением, определяет
 *            размер границы;
 * ---------------------------------------------------------------------------------------
 * Метод setBgColor(String Color) - устанавливает цвет фона всплывающего окна;
 * где Color - обязательный параметр, передается строкой в формате "#XXXXXX", определяет
 *             цвет фона всплывающего окна;
 * ---------------------------------------------------------------------------------------
 * Метод setTextPadding(int Offset) - устанавливает отступ от границы всплывающего окна до 
 * контента окна;
 * где Offset - обязательный параметр, передается числовым положительным значением, определяет
 *              отступ контента всплывающего окна от границы окна;
 * ---------------------------------------------------------------------------------------
 * Метод setText(String Text) - задает контент (содержимое) всплывающего окна, возможен HTML;
 * где Text - обязательный параметр, передается строковым значением, возможно использование HTML кода;
 * ---------------------------------------------------------------------------------------
 * Метод setWidth(String Width) - задает ширину всплывающего окна (по-умолчанию ширина
 * всплывающего окна определяется заданным контентом);
 * где Width - обязательный параметр, передается строковым значением, возможно использование
 *             как абсолютных единиц (px), так и относительных (%);
 * ---------------------------------------------------------------------------------------
 * Метод stretch() - задает ширину всплывающего окна равную ширине родительского элемента.
 * ---------------------------------------------------------------------------------------
 */
AdvancedPopup = function (AParentID, AOffsetTop, AOffsetLeft) {

	this.parent_element = null;
	this.popup_area = null;
	this.inner_area = null;
	this.offset_top = AOffsetTop? (AOffsetTop*1): 0;
	this.offset_left = AOffsetLeft? (AOffsetLeft*1): 0;

	this.getPopupParentElement = function (tagID) {
	
		if (document.all) {
		
			return document.all[tagID];
		}
		else {
		
			return document.getElementById(tagID);
		}
	}
	
	this.getAbsolutePos = function(elm) {
	
		var r = { x: elm.offsetLeft, y: elm.offsetTop };
		
		if (elm.offsetParent) {
	
			var tmp = this.getAbsolutePos(elm.offsetParent);
			r.x += tmp.x;
			r.y += tmp.y;
		}
		
		return r;
	}

	this.createPopup = function (AParentID) {
	
		this.parent_element = this.getPopupParentElement(AParentID);
		
		if (this.parent_element == null) {
		
			return;
		}
		
		var self = this;
		
		this.parent_element.onmouseover = function () {
		
			self.popup_area.style.display = "block";
		}
		this.parent_element.onmouseout = function () {
		
			self.popup_area.style.display = "none";
		}
		
		this.popup_area = this.parent_element.appendChild(document.createElement('div'));
		this.popup_area.style.position = "absolute";
		this.popup_area.style.zIndex = 1;
		
		var pp = this.getAbsolutePos(this.parent_element);
		
		this.popup_area.style.left = pp.x + this.offset_left;
		this.popup_area.style.top = pp.y + this.parent_element.offsetHeight + this.offset_top;
		
		this.popup_area.style.display = "none";
		
		this.popup_inner = this.popup_area.appendChild(document.createElement('div'));
		
	}
	
	this.setBorderColor = function (ABorderColor) {
	
		this.popup_area.style.backgroundColor = ABorderColor;
	}
	
	this.setBorderSize = function (ABorderSize) {
	
		this.popup_area.style.padding = ABorderSize + "px";
	}
	
	this.setBgColor = function (ABgColor) {
	
		this.popup_inner.style.backgroundColor = ABgColor;
	}
	
	this.setTextPadding = function (APadding) {
	
		this.popup_inner.style.padding = APadding + "px";
	}
	
	this.setText = function (AInnerText) {
	
		this.popup_inner.innerHTML = AInnerText;
	}
	
	this.setWidth = function (AWidth) {
	
		this.popup_area.style.width = AWidth;
	}
	
	this.stretch = function () {
	
		this.popup_area.style.width = this.parent_element.offsetWidth + "px";
	}
	
	this.createPopup(AParentID);
}