/**

* phpBB3 forum functions

*/



/**

* Window popup

*/

function popup(url, width, height, name)

{

	if (!name)

	{

		name = '_popup';

	}



	window.open(url.replace(/&amp;/g, '&'), name, 'height=' + height + ',resizable=yes,scrollbars=yes, width=' + width);

	return false;

}



/**

* Jump to page

*/

// www.phpBB-SEO.com SEO TOOLKIT BEGIN
function jumpto() {
	var page = prompt(jump_page, on_page);

	if (page !== null && !isNaN(page) && page == Math.floor(page) && page > 0) {
		var seo_page = (page - 1) * per_page;
		var anchor = '';
		var anchor_parts = base_url.split('#');
		if ( anchor_parts[1] ) {
			base_url = anchor_parts[0];
			anchor = '#' + anchor_parts[1];
		}
		if ( base_url.indexOf('?') >= 0 ) {
			document.location.href = base_url.replace(/&amp;/g, '&') + '&start=' + seo_page + anchor;
		} else if ( seo_page > 0 ) {
			var seo_type1 = base_url.match(/\.[a-z0-9]+$/i);
			if (seo_type1 !== null) {
				document.location.href = base_url.replace(/\.[a-z0-9]+$/i, '') + seo_delim_start + seo_page + seo_type1 + anchor;
			}
			var seo_type2 = base_url.match(/\/$/);
			if (seo_type2 !== null) {
				document.location.href = base_url + seo_static_pagination + seo_page + seo_ext_pagination + anchor;
			}
		} else {
			document.location.href = base_url + anchor;
		}
	}
}
// Open external links in new window in a XHTML 1.x compliant way.
/**
*  phpbb_seo_href()
*  Fixes href="#something" links with virtual directories
*  Optionally open external or marked with a css class links in a new window
*  in a XHTML 1.x compliant way.
*/
function phpbb_seo_href() {
	var current_domain = document.domain.toLowerCase();
	if (!current_domain || !document.getElementsByTagName) return;
	if (seo_external_sub && current_domain.indexOf('.') >= 0) {
		current_domain = current_domain.replace(new RegExp(/^[a-z0-9_-]+\.([a-z0-9_-]+\.([a-z]{2,6}|[a-z]{2,3}\.[a-z]{2,3}))$/i), '$1');
	}
	if (seo_ext_classes) {
		var extclass = new RegExp("(^|\s)(" + seo_ext_classes + ")(\s|$)");
	}
	if (seo_hashfix) {
		var basehref = document.getElementsByTagName('base')[0];
		if (basehref) {
			basehref = basehref.href;
			var hashtest = new RegExp("^(" + basehref + "|)#[a-z0-9_-]+$");
			var current_href = document.location.href.replace(/#[a-z0-9_-]+$/i, "");
		} else {
			seo_hashfix = false;
		}
	}
	var hrefels = document.getElementsByTagName("a");
	var hrefelslen = hrefels.length;
	for (var i = 0; i < hrefelslen; i++) {
		var el = hrefels[i];
		var hrefinner = el.innerHTML.toLowerCase();
		if (el.onclick || (el.href == '') || (el.href.indexOf('javascript') >=0 ) || (el.href.indexOf('mailto') >=0 ) || (hrefinner.indexOf('<a') >= 0) ) {
			continue;
		}
		if (seo_hashfix && el.hash && hashtest.test(el.href)) {
			el.href = current_href + el.hash;
		}
		if (seo_external) {
			if ((el.href.indexOf(current_domain) >= 0) && !(seo_ext_classes && extclass.test(el.className))) {
				continue;
			}
			el.onclick = function () { window.open(this.href); return false; };
		}
	}
}
if (seo_external || seo_hashfix) {
	onload_functions.push('phpbb_seo_href()');
}
// www.phpBB-SEO.com SEO TOOLKIT END



/**

* Mark/unmark checklist

* id = ID of parent container, name = name prefix, state = state [true/false]

*/

function marklist(id, name, state)

{

	var parent = document.getElementById(id);

	if (!parent)

	{

		eval('parent = document.' + id);

	}



	if (!parent)

	{

		return;

	}



	var rb = parent.getElementsByTagName('input');

	

	for (var r = 0; r < rb.length; r++)

	{	

		if (rb[r].name.substr(0, name.length) == name)

		{

			rb[r].checked = state;

		}

	}

}



/**

* Resize viewable area for attached image or topic review panel (possibly others to come)

* e = element

*/

function viewableArea(e, itself)

{

	if (!e) return;

	if (!itself)

	{

		e = e.parentNode;

	}

	

	if (!e.vaHeight)

	{

		// Store viewable area height before changing style to auto

		e.vaHeight = e.offsetHeight;

		e.vaMaxHeight = e.style.maxHeight;

		e.style.height = 'auto';

		e.style.maxHeight = 'none';

		e.style.overflow = 'visible';

	}

	else

	{

		// Restore viewable area height to the default

		e.style.height = e.vaHeight + 'px';

		e.style.overflow = 'auto';

		e.style.maxHeight = e.vaMaxHeight;

		e.vaHeight = false;

	}

}



/**

* Set display of page element

* s[-1,0,1] = hide,toggle display,show

* type = string: inline, block, inline-block or other CSS "display" type
*/
function dE(n, s, type)
{
	if (!type)
	{
		type = 'block';
	}

	var e = document.getElementById(n);
	if (!s)
	{
		s = (e.style.display == '' || e.style.display == type) ? -1 : 1;
	}
	e.style.display = (s == 1) ? type : 'none';

}



/**

* Alternate display of subPanels

*/

function subPanels(p)

{

	var i, e, t;



	if (typeof(p) == 'string')

	{

		show_panel = p;

	}



	for (i = 0; i < panels.length; i++)

	{

		e = document.getElementById(panels[i]);

		t = document.getElementById(panels[i] + '-tab');



		if (e)

		{

			if (panels[i] == show_panel)

			{

				e.style.display = 'block';

				if (t)

				{

					t.className = 'activetab';

				}

			}

			else

			{

				e.style.display = 'none';

				if (t)

				{

					t.className = '';

				}

			}

		}

	}

}



/**

* Call print preview

*/

function printPage()

{

	if (is_ie)

	{

		printPreview();

	}

	else

	{

		window.print();

	}

}



/**

* Show/hide groups of blocks

* c = CSS style name

* e = checkbox element

* t = toggle dispay state (used to show 'grip-show' image in the profile block when hiding the profiles) 

*/

function displayBlocks(c, e, t)

{

	var s = (e.checked == true) ?  1 : -1;



	if (t)

	{

		s *= -1;

	}



	var divs = document.getElementsByTagName("DIV");



	for (var d = 0; d < divs.length; d++)

	{

		if (divs[d].className.indexOf(c) == 0)

		{

			divs[d].style.display = (s == 1) ? 'none' : 'block';

		}

	}

}



function selectCode(a)

{

	// Get ID of code block

	var e = a.parentNode.parentNode.getElementsByTagName('CODE')[0];



	// Not IE

	if (window.getSelection)

	{

		var s = window.getSelection();

		// Safari

		if (s.setBaseAndExtent)

		{

			s.setBaseAndExtent(e, 0, e, e.innerText.length - 1);

		}

		// Firefox and Opera

		else

		{

			// workaround for bug # 42885

			if (window.opera && e.innerHTML.substring(e.innerHTML.length - 4) == '<BR>')

			{

				e.innerHTML = e.innerHTML + '&nbsp;';

			}



			var r = document.createRange();

			r.selectNodeContents(e);

			s.removeAllRanges();

			s.addRange(r);

		}

	}

	// Some older browsers

	else if (document.getSelection)

	{

		var s = document.getSelection();

		var r = document.createRange();

		r.selectNodeContents(e);

		s.removeAllRanges();

		s.addRange(r);

	}

	// IE

	else if (document.selection)

	{

		var r = document.body.createTextRange();

		r.moveToElementText(e);

		r.select();

	}

}



/**

* Play quicktime file by determining it's width/height

* from the displayed rectangle area

*/

function play_qt_file(obj)

{

	var rectangle = obj.GetRectangle();



	if (rectangle)

	{

		rectangle = rectangle.split(',');

		var x1 = parseInt(rectangle[0]);

		var x2 = parseInt(rectangle[2]);

		var y1 = parseInt(rectangle[1]);

		var y2 = parseInt(rectangle[3]);



		var width = (x1 < 0) ? (x1 * -1) + x2 : x2 - x1;

		var height = (y1 < 0) ? (y1 * -1) + y2 : y2 - y1;

	}

	else

	{

		var width = 200;

		var height = 0;

	}



	obj.width = width;

	obj.height = height + 16;



	obj.SetControllerVisible(true);

	obj.Play();

}



/**

* Check if the nodeName of elem is name

* @author jQuery

*/

function is_node_name(elem, name)

{

	return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase();

}



/**

* Check if elem is in array, return position

* @author jQuery

*/

function is_in_array(elem, array)

{

	for (var i = 0, length = array.length; i < length; i++)

		// === is correct (IE)

		if (array[i] === elem)

			return i;



	return -1;

}



/**

* Find Element, type and class in tree

* Not used, but may come in handy for those not using JQuery

* @author jQuery.find, Meik Sievertsen

*/

function find_in_tree(node, tag, type, class_name)

{

	var result, element, i = 0, length = node.childNodes.length;



	for (element = node.childNodes[0]; i < length; element = node.childNodes[++i])

	{

		if (!element || element.nodeType != 1) continue;



		if ((!tag || is_node_name(element, tag)) && (!type || element.type == type) && (!class_name || is_in_array(class_name, (element.className || element).toString().split(/\s+/)) > -1))

		{

			return element;

		}



		if (element.childNodes.length)

			result = find_in_tree(element, tag, type, class_name);



		if (result) return result;

	}

}



var in_autocomplete = false;

var last_key_entered = '';



/**

* Check event key

*/

function phpbb_check_key(event)

{

	// Keycode is array down or up?

	if (event.keyCode && (event.keyCode == 40 || event.keyCode == 38))

		in_autocomplete = true;



	// Make sure we are not within an "autocompletion" field

	if (in_autocomplete)

	{

		// If return pressed and key changed we reset the autocompletion

		if (!last_key_entered || last_key_entered == event.which)

		{

			in_autocompletion = false;

			return true;

		}

	}



	// Keycode is not return, then return. ;)

	if (event.which != 13)

	{

		last_key_entered = event.which;

		return true;

	}



	return false;

}



/**

* Usually used for onkeypress event, to submit a form on enter

*/

function submit_default_button(event, selector, class_name)

{

	// Add which for key events

	if (!event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode))

		event.which = event.charCode || event.keyCode;



	if (phpbb_check_key(event))

		return true;



	var current = selector['parentNode'];



	// Search parent form element

	while (current && (!current.nodeName || current.nodeType != 1 || !is_node_name(current, 'form')) && current != document)

		current = current['parentNode'];



	// Find the input submit button with the class name

	//current = find_in_tree(current, 'input', 'submit', class_name);

	var input_tags = current.getElementsByTagName('input');

	current = false;



	for (var i = 0, element = input_tags[0]; i < input_tags.length; element = input_tags[++i])

	{

		if (element.type == 'submit' && is_in_array(class_name, (element.className || element).toString().split(/\s+/)) > -1)

			current = element;

	}



	if (!current)

		return true;



	// Submit form

	current.focus();

	current.click();

	return false;

}



/**

* Apply onkeypress event for forcing default submit button on ENTER key press

* The jQuery snippet used is based on http://greatwebguy.com/programming/dom/default-html-button-submit-on-enter-with-jquery/

* The non-jQuery code is a mimick of the jQuery code ;)

*/

function apply_onkeypress_event()

{

	// jQuery code in case jQuery is used

	if (jquery_present)

	{

		jQuery('form input[type=text], form input[type=password]').live('keypress', function (e)
		{
			var default_button = jQuery(this).parents('form').find('input[type=submit].default-submit-action');

			

			if (!default_button || default_button.length <= 0)

				return true;



			if (phpbb_check_key(e))

				return true;



			if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13))

			{

				default_button.click();

				return false;

			}



			return true;

		});

	

		return;

	}



	var input_tags = document.getElementsByTagName('input');



	for (var i = 0, element = input_tags[0]; i < input_tags.length ; element = input_tags[++i])

	{

		if (element.type == 'text' || element.type == 'password')
		{
			// onkeydown is possible too
			element.onkeypress = function (evt) { submit_default_button((evt || window.event), this, 'default-submit-action'); };
		}

	}

}



/**

* Detect JQuery existance. We currently do not deliver it, but some styles do, so why not benefit from it. ;)

*/

var jquery_present = typeof jQuery == 'function';


