function popup_show_hide(popup_element, evt, xy_source, x_plus, y_plus) {
	var evt = evt || window.event;
	var source_element = evt.target || evt.srcElement;
	if(popup_element.popup_shown) {
		if(evt.type == "mouseover" && popup_element.popup_shown == true) {return;}
	} else {
		if(window.getComputedStyle(popup_element, null).display == "none") {popup_element.popup_shown = false;}
		else {popup_element.popup_shown = true;}
	}
	var popup_over_timeout = null;
	source_element.popup_over = false;
	popup_element.popup_over = false;
	if(window.getComputedStyle(popup_element, null).position == "absolute" && popup_element.parentNode != document.body) {document.body.appendChild(popup_element);}
	switch(xy_source) {
		case "left_top" : case "right_top" : case "right_bottom" : case "left_bottom" : break;
		default :
			xy_source = "right_bottom";
			break;
	}
	switch(typeof x_plus) {
		case "number" : break;
		case "undefined" : default :
			x_plus = 0 - source_element.offsetWidth;
			break;
	}
	switch(typeof y_plus) {
		case "number" : break;
		case "undefined" : default :
			y_plus = 0;
			break;
	}
	switch(evt.type) {
		case "click" :
			if(popup_element.popup_shown == false) {
				popup_element.popup_shown = true;
				popup_show();
			} else {
				popup_element.popup_shown = false;
				popup_hide();
			}
			break;
		case "mouseover" :
			source_element.popup_over = true;
			popup_element.popup_shown = true;
			popup_show();
			educateIE(popup_element); educateIE(source_element);
			source_element.addEventListener("mouseover", source_element_mouseover, false);
			popup_element.addEventListener("mouseover", popup_element_mouseover, false);
			source_element.addEventListener("mouseout", source_element_mouseout, false);
			popup_element.addEventListener("mouseout", popup_element_mouseout, false);
			break;
	}
	function source_element_mouseover() {
		source_element.popup_over = true;
		if(popup_over_timeout != null) {clearTimeout(popup_over_timeout); popup_over_timeout = null;}
	}
	function popup_element_mouseover() {
		popup_element.popup_over = true;
		if(popup_over_timeout != null) {clearTimeout(popup_over_timeout); popup_over_timeout = null;}
	}
	function source_element_mouseout() {
		var target = evt.relatedTarget || window.event.toElement;
		if(!isParent(target, source_element)) {
			source_element.popup_over = false;
			popup_over_timeout = window.setTimeout(function() {
				if(source_element.popup_over == false && popup_element.popup_over == false) {
					popup_element.popup_shown = false;
					popup_hide();
				}
			}, 200);
		}
	}
	function popup_element_mouseout() {
		var target = evt.relatedTarget || window.event.toElement;
		if(!isParent(target, popup_element)) {
			popup_element.popup_over = false;
			popup_over_timeout = window.setTimeout(function() {
				if(source_element.popup_over == false && popup_element.popup_over == false) {
					popup_element.popup_shown = false;
					popup_hide();
				}
			}, 200);
		}
	}
	function popup_hide() {
		popup_element.style.display = "none";
		if(window.getComputedStyle(popup_element, null).position == "absolute") {
			window_resize();
		}
		try {
			source_element.removeEventListener("mouseover", source_element_mouseover, false);
			popup_element.removeEventListener("mouseover", popup_element_mouseover, false);
			source_element.removeEventListener("mouseout", source_element_mouseout, false);
			popup_element.removeEventListener("mouseout", popup_element_mouseout, false);
		} catch (e) {}
	}
	function popup_show() {
		popup_element.style.display = "";
		if(window.getComputedStyle(popup_element, null).display == "none") {popup_element.style.display = "block";}
		if(window.getComputedStyle(popup_element, null).position == "absolute") {
			var x_popup, y_popup;
			var pos_source = getElementPosition(source_element);
			var pos_popupparent = getElementPosition(popup_element.parentNode);
			switch(xy_source) {
				case "mouse" :
					x_popup = evt.clientX + document.body.parentNode.scrollLeft;
					y_popup = evt.clientY + document.body.parentNode.scrollTop;
					break;
				case "left_top" :
					x_popup = pos_source.left - popup_element.offsetWidth;
					y_popup = pos_source.top - popup_element.offsetHeight;
					break;
				case "right_top" :
					x_popup = pos_source.left + source_element.offsetWidth;
					y_popup = pos_source.top - popup_element.offsetHeight;
					break;
				case "right_bottom" :
					x_popup = pos_source.left + source_element.offsetWidth;
					y_popup = pos_source.top + source_element.offsetHeight;
					break;
				case "left_bottom" :
					x_popup = pos_source.left - popup_element.offsetWidth;
					y_popup = pos_source.top + source_element.offsetHeight;
					break;
			}
			popup_element.style.left = x_popup + x_plus - pos_popupparent.left + "px";
			popup_element.style.top = y_popup + y_plus - pos_popupparent.top + "px";
			window_resize();
		}
	}
	function window_resize() {
		if(typeof document.createEvent != "undefined") {
			var window_onresize = document.createEvent("HTMLEvents");
			window_onresize.initEvent("resize", true, true);
			window.dispatchEvent(window_onresize);
		} else {
			if(typeof document.createEventObject != "undefined") {
				var window_onresize = document.createEventObject();
				document.documentElement.fireEvent("onresize", window_onresize);
			}
		}
	}
}
function make_popup(rolling_element, rolling_sample, rolling_event, rolling_xy_source, rolling_x_plus, rolling_y_plus) {
	var rolling_shower;
	switch(typeof rolling_sample) {
		case "object" :
			rolling_shower = rolling_sample;
			break;
		case "string" :
			rolling_shower = document.createElement("a");
			rolling_shower.href = "javascript:;";
			typeof rolling_shower.innerText == "undefined" ? rolling_shower.textContent = rolling_sample : rolling_shower.innerText = rolling_sample;
			rolling_element.parentNode.insertBefore(rolling_shower, rolling_element);
			break;
		case "undefined" : default :
			rolling_shower = document.createElement("a");
			rolling_shower.href = "javascript:;";
			typeof rolling_shower.innerText == "undefined" ? rolling_shower.textContent = "Подробнее" : rolling_shower.innerText = "Подробнее";
			rolling_element.parentNode.insertBefore(rolling_shower, rolling_element);
			break;
	}
	switch(rolling_xy_source) {
		case "left_top" : case "right_top" : case "right_bottom" : case "left_bottom" : break;
		default :
			rolling_xy_source = "right_bottom";
			break;
	}
	switch(typeof rolling_x_plus) {
		case "number" : break;
		case "undefined" : default :
			rolling_x_plus = 0 - rolling_shower.offsetWidth;
			break;
	}
	switch(typeof rolling_y_plus) {
		case "number" : break;
		case "undefined" : default :
			rolling_y_plus = 0;
			break;
	}
	switch(rolling_event) {
		case "click" :
			educateIE(rolling_shower);
			rolling_shower.addEventListener("click", function(event_this) {popup_show_hide(rolling_element, event_this, rolling_xy_source, rolling_x_plus, rolling_y_plus);}, false);
			break;
		case "mouseover" : case "undefined" : default :
			educateIE(rolling_shower);
			rolling_shower.addEventListener("mouseover", function(event_this) {popup_show_hide(rolling_element, event_this, rolling_xy_source, rolling_x_plus, rolling_y_plus);}, false);
			break;
	}
}

