/**
	area_id нужно задействовать, потому чтобы когда пользователь вернулся на ту же ссылку, у него не перегружалось дочернее окно
	!! было бы ещё неплохо отключать таймер скрытия окна, при возвращении в активную зону
		но отключать его только при вхождении в активную область! area_id = active_area_id

	ПРОБЛЕМА: при выходе с окна ставится таймер на закрытие с настоящим ID
		при входе на не нашу область он не уничтожается, потому что область не наша
		при выходе с этой области также ставится таймер на закрытие с неактивным ID
		а при входе на окно уничтожается лишь последний ненастоящий таймер, а ссылка на предыдущий теряется и он не уничтожается
   	РЕШЕНИЕ: при уходе с неактивной области не ставить таймер.
	
*/
//alert("showdynwnd.js");

var is_on_dyn_wnd= false;
var is_on_area= false;

var offsetCursor= Array();

var timer;
var timer_on;

var delay_before_show_wnd= 750;
var timer_delay= 2000;

var areas= Array();
//var areasActive= Array();
var active_area_id;
//var last_area_id;

var is_request_to_open= false;	//есть запрос на открытие окна

function showDynWnd(url, width, height, mouseX, mouseY, area_id)
{
	is_request_to_open= false;
	//alert("showDynWnd");
	//properties(area.style, 'area');
	//properties(area.attributes, 'area');
	//properties(area.currentStyle, 'area');
	//properties(document.window, 'window');

	//if(!is_on_area)	//если пользователь уже покинул область
	//	return;		
	if(!areas[area_id])
		return;

	newHTML= "";
	if(navigator.userAgent.indexOf("MSIE")!=-1 && navigator.userAgent.indexOf("Opera")==-1 )
	{
		newHTML+= '<div class="border_preview"><iframe src="'+url+'" scrolling="auto" frameborder="0" width="'+width+'" height="'+height+'"></iframe></div>';
	}
	getDynWnd().innerHTML= newHTML;
	getDynWnd().style.display= "block";

	//properties(event, 'event');
	//alert("window.event !=");
	//alert("event.screenX="+event.screenX+"; event.screenY="+event.screenY);
	var x_wnd= mouseX + truebody().scrollLeft  /* + truebody().offsetLeft event.clientX + area.offsetWidth - area.offsetLeft*/;
	var y_wnd= mouseY + truebody().scrollTop /* + truebody().offsetTop event.clientY+ area.offsetHeight - area.offsetTop*/;
	//alert('x_wnd='+x_wnd+'; y_wnd='+y_wnd);

	//alert("x_wnd="+x_wnd+"; y_wnd="+y_wnd);
	//alert("truebody().offsetLeft="+truebody().offsetLeft+"; truebody().offsetTop ="+truebody().offsetTop );
	//properties(truebody(), 'truebody()');

	getDynWnd().style.left= x_wnd+"px";
	getDynWnd().style.top= y_wnd+"px";
	//properties(getDynWnd().style, 'style');
	//else alert("window.event == ");

	//areasActive[area_id]= true;
	active_area_id= area_id;
	//last_area_id= area_id;
	//alert("EOF showDynWnd");
	//ЭТО НЕ ЗДЕСЬ - ТОЛЬКО ПРИ ПОКИДАНИИ ОБЛАСТИ timer= setTimeout("timerTask("+area_id+")", timer_delay);	//отключить данную область

	///окно только что показали, а данный таймер может его убить
	//не может! active_area_id не совпадёт! clearTimeout(timer);
}

//// курсор над областью над которой появляется окно
function overArea(url, width, height, area_id){
	//alert("overArea");
	is_on_area= true;
	areas[area_id]= true;

	//if(	areasActive[area_id] )	//если эта область уже активна (бывает такое при возвращении) или над окном (не может, но не влияет) || is_on_dyn_wnd
	if(area_id == active_area_id)
	{
	    clearTimeout(timer);
		//alert("areasActive[area_id]");
		return;
	}

	//// для начала отключим предыдущий таймер на открытие этого окна
	clearTimeout(timer_on);
	is_request_to_open= true;
	if(typeof window.event != "undefined")
	{                                                                 
		timer_on= setTimeout("showDynWnd('"+url+"', "+width+", "+height+", "+event.clientX+", "+event.clientY+", "+area_id+")", delay_before_show_wnd);
	}
	else
	{
		timer_on= setTimeout("showDynWnd('"+url+"', "+width+", "+height+", 0, 0, "+area_id+")", delay_before_show_wnd);
	}
}

//// вызывается при покидании нужной области
function outArea(area_id)
{
	//alert("outArea");
	is_on_area= false;
	areas[area_id]= false;

	if(area_id != active_area_id)	//область не наша - выходим
		return;

	//// для начала отключим предыдущий таймер на закрытие этого окна
	//нельзя! закроет только тот у кого Active_area Совпадёт! clearTimeout(timer);
	/// поставим таймер, если не вернётся, окошко уберётся
	timer= setTimeout("timerTask("+area_id+")", timer_delay);
	///выключает не успевшее появится окно! clearTimeout(timer_on);	//выключаем таймер включающий окно, всё нормально, он включится при наведении на следующую область
}

function hideDynWnd(area_id)
{
	getDynWnd().style.display= "none";
	//areasActive[area_id]= false;
	active_area_id= 0;
	clearTimeout(timer);
}

//** Выполняется по таймеру, 
//**	проверяет, что курсор находится на над окнами
function timerTask(area_id)
{
	//alert("timerTask");
    //если курсора нет на этих областях
	//if(!is_on_area && !is_on_dyn_wnd)
	// не этой областью 

	///// если наше окно
	if(area_id == active_area_id) 	//и! эта область(c которой вышли есесно) является той областью, которая открыла это окно
	{
		if(!areas[area_id] 		// если не над этой областью
			&& !is_on_dyn_wnd	// и не над окном
			//&& !is_on_area		// и вообще, если над какой-то областью отключить нельзя
			)	
		{	
			//alert("!is_on_area && !is_on_dyn_wnd");
			//alert("!areas[area_id] && !is_on_dyn_wnd");
			//	..&& !is_request_to_open	    //и не было запроса на открытие нового окна (которое мы можем грохнуть)
			hideDynWnd(area_id);
			//else	//иначе попробуем в будущем
			//	timer= setTimeout("timerTask("+area_id+")", timer_delay);
		}
	}
	else	//не эта область открыла окно, поэтому при покидании оной закрываться не должно
	{
		//alert("Где-то есть...");
		//timer= setTimeout("timerTask("+area_id+")", timer_delay);
	}
}

function overDynWnd()
{
	//alert("overDynWnd");
	is_on_dyn_wnd= true;
	
	/// МЫ над окном - прибиваем таймер и входа и выход, вот выйдем с окна включим выход
	clearTimeout(timer);
	clearTimeout(timer_on);
}

//** при уходе с динамического окна
function outDynWnd()
{
	//alert("outDynWnd");
	is_on_dyn_wnd= false;

	//// для начала отключим предыдущий таймер на закрытие этого окна
	//тоже нельзя! clearTimeout(timer);
	/// МОЖНО! Это в outArea нельзя, потому что областей много, а окно то всего одной, а оно сгенерит нужный timeout

	/// поставим таймер, если не вернётся, окошко уберётся
	timer= setTimeout("timerTask("+active_area_id+")", timer_delay);
}

//** 
function getDynWnd()
{
	if(document.getElementById)
		return document.getElementById("dynWnd");
}

//alert("EOF showdynwnd.js");
////////////////////////////////////////////////////////
function properties(obj,obj_name)
{
	//al
	//obj_name=obj.tagName
    var result="<HR>";
	result+="<code><font face=arial size=+2 align=center><b>Свойства объекта<br>"+obj_name+"<br><br></b></font></code>";
    for(var i in obj)
    {
       result+=obj_name+"."+i+"="+obj[i]+"<br>\n";
	}
	result+="<HR>";
	//a.WriteLine(result);
	document.write(result);
	return result;
}

function truebody(){
	return (!window.opera && document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
	//return document.body;
	//return document.documentElement;
}

