// absolute X of the element (from top of the page)
function getX(element)
{
	if (element === undefined) return 0;
	var x = element.offsetLeft;
	var el = element;
	
	while (el = el.offsetParent) x += el.offsetLeft;
	
	return x;
}

// absolute Y of the element (from top of the page)
function getY(element)
{
	if (element === undefined) return 0;
	var y = element.offsetTop;
	var el = element;
	
	while (el = el.offsetParent) y += el.offsetTop;
	
	return y;
}

// set redirect
function redirect(url, timeout)
{
	setTimeout("location = '" + url + "';", timeout * 1000);
}

// set cookie
function setCookie(name, value, expires, path, domain, secure)
{
	var c_value = escape(value);
	var c_expires = expires ? "; expires=" + expires.toGMTString() : '';
	var c_path = path ? "; path=" + path : '';
	var c_domain = domain ? "; domain=" + domain : '';
	var c_secure = secure ? "; secure" : '';
	var cur_cookie = name + "=" + c_value + c_expires + c_path + c_domain + c_secure;
	
	document.cookie = cur_cookie;
}


// main menu
// fold / unfold sections
function fold_section(section_id)
{
	var section_head = document.getElementById('h_' + section_id);
	var section_div = document.getElementById('i_' + section_id);
	
	// folding
	if (section_div && section_head)
	{
		// cookie expires date
		var expires = new Date();
		expires.setFullYear(expires.getFullYear() + 1);
		
		if (section_div.style.display == 'none')
		{
			section_head.className = 'left_anchor';
			section_div.style.display = 'block';
			setCookie(section_id, '1', expires, '/');
		}
		else
		{
			section_head.className = 'left_anchor';
			section_div.style.display = 'none';
			setCookie(section_id, '0', expires, '/');
		}
	}
}

// isset timeout?
var timeoutIDs = new Array();
var shownMenus = new Array();

// hide all highlights on menu
var menu_timeout = 500;

function check_menu(event, sfx_id)
{
	//alert('check_menu');
	var menu = document.getElementById('m_' + sfx_id);
	var m_left = getX(menu);
	var m_right = m_left + menu.offsetWidth;
	var m_top = getY(menu);
	var m_bottom = m_top + menu.offsetHeight;
	
	var x = event.pageX ? event.pageX : (event.offsetX + getX(event.srcElement));
	var y = event.pageY ? event.pageY : (event.offsetY + getY(event.srcElement));
	
	var hide = (x <= m_left) || (x >= m_right) || (y <= m_top) || (y >= m_bottom);
	
	if (hide)
	{
		timeoutIDs[sfx_id] = setTimeout("hide_menu('" + sfx_id + "')", menu_timeout);
	}
}

// show menu
function show_menu(sfx_id)
{
	//alert('show_menu');
	shownMenus[sfx_id] = true;
	var smenu = document.getElementById('sm_' + sfx_id);
	
	// checking whether menu is shown
	if (smenu.style.display != 'block')
	{
		smenu.style.display = 'block';
		
		for (var idx in shownMenus)
		{
			if ((idx != sfx_id) && shownMenus[idx])
			{
				hide_menu(idx);
			}
		}
	}
	else
	{
		cancel_timeout(sfx_id);
	}
}

// set menu to initial state
function hide_menu(sfx_id)
{
	//alert('hide_menu');
	if (shownMenus[sfx_id]) delete(shownMenus[sfx_id]);
	var smenu = document.getElementById('sm_' + sfx_id);
	smenu.style.display = 'none';
	
	if (timeoutIDs[sfx_id]) cancel_timeout(timeoutIDs[sfx_id]);
}

// if set timeout - cancel it
function cancel_timeout(idx)
{
	//alert('cancel_timeout');
	if (timeoutIDs[idx])
	{
		clearTimeout(timeoutIDs[idx]);
		delete(timeoutIDs[idx]);
	}
}


// paging
var pgArrowLeft, pgArrowRight, pgStart, pgEnd;
var pgElPages = new Array();
var pgListPages, pgTotal, pgPage, pgPaging, pgPages;

// setup paging element
function pgSetup(list_pages, total, page, paging)
{
	// set constants
	pgListPages = list_pages;
	pgTotal = total;
	pgPage = page;
	pgPaging = paging;
	pgPages = Math.ceil(total / paging);
	
	// find elements
	pgStart = document.getElementById('pg_start');
	pgEnd = document.getElementById('pg_end');
	pgArrowLeft = document.getElementById('pg_left');
	pgArrowRight = document.getElementById('pg_right');
	
	for (var i = 1; i <= list_pages; i++)
	{
		pgElPages[i] = document.getElementById('pg_' + i);
	}
}

// scroll
function pgScroll(dir, step)
{
	if (typeof(step) == 'undefined') step = 1;
	
	// getting current values
	var re = /^\[(\d+)\]$/;
	var values = new Array();
	for (var i = 1; i <= pgListPages; i++)
	{
		var tmp = pgElPages[i].firstChild.nodeValue;
		values[i] = parseInt(tmp.match(re)[1]);
	}
	
	// modyfying values
	if ((dir == 0) || (dir == 'left'))
	{
		// scroll left
		if (values[1] != 1)
		{
			for (var i = 1; i <= pgListPages; i++) values[i]--;
		}
	}
	else if ((dir == 1) || (dir == 'right'))
	{
		// scroll right
		if (values[pgListPages] != pgPages)
		{
			for (var i = 1; i <= pgListPages; i++) values[i]++;
		}
	}
	
	// arrow left // arrow start
	if (values[1] == 1)
	{
		// arrow left
		pgArrowLeft.className = 'page_invisible';
		pgArrowLeft.setAttribute('title', '');
		pgArrowLeft.onclick = function(){};
		// arrow start
		pgStart.className = 'page_invisible';
		pgStart.setAttribute('title', '');
	}
	else
	{
		// arrow left
		pgArrowLeft.className = 'page_link';
		pgArrowLeft.setAttribute('title', '�����');
		pgArrowLeft.onclick = function(){ pgScroll('left', step); };
		// arrow start
		pgStart.className = 'page_link';
		pgStart.setAttribute('title', '�������� 1');
	}
	
	// arrow right // arrow end
	if (values[pgListPages] == pgPages)
	{
		// arrow right
		pgArrowRight.className = 'page_invisible';
		pgArrowRight.setAttribute('title', '');
		pgArrowRight.onclick = function(){};
		// arrow end
		pgEnd.className = 'page_invisible';
		pgEnd.setAttribute('title', '');
	}
	else
	{
		// arrow right
		pgArrowRight.className = 'page_link';
		pgArrowRight.setAttribute('title', '������');
		pgArrowRight.onclick = function(){ pgScroll('right', step); };
		// arrow start
		pgEnd.className = 'page_link';
		pgEnd.setAttribute('title', '�������� ' + pgPages);
	}
	
	// page elements
	for (var i = 1; i <= pgListPages; i++)
	{
		// calculating [from - to]
		var from = (values[i] - 1) * pgPaging + 1;
		var	recs = i == pgPages ? ((pgTotal % pgPaging) != 0 ? pgTotal % pgPaging : pgPaging) : pgPaging;
		var to = pgPages != 0 ? from + recs - 1 : 0;
		
		// updating element
		pgElPages[i].firstChild.nodeValue = '[' + values[i] + ']';
		pgElPages[i].setAttribute('title', '[' + from + '-' + to + ']');
		if (values[i] == pgPage)
		{
			pgElPages[i].className = 'page_selected';
			pgElPages[i].onclick = function(){};
		}
		else
		{
			pgElPages[i].className = 'page_link';
			pgElPages[i].onclick = new Function("location = '" + pgBaseURI + "page_" + values[i] + "';");
		}
	}
}

// show image in popup window
function ShowImage(img, width, height)
{
	var width = parseInt(width, 10) + 20;
	var height = parseInt(height, 10) + 20;
	window.open(img, '', 'menubar=no,resizable=no,width=' + width + ',height=' + height + ',toolbar=no,top=100,left=100');
}