
window.onload=function()
{
	HTMLArea.init();
	// Solution of re-posting problem: add a hidden 'timestamp' to all forms with method 'post', and update all values* on submit
    //		*so it will work even if some forms' onsubmit is overloaded later
	var formCollection = document.getElementsByTagName("form");
    for( var i = 0; i < formCollection.length; i++ )
    {
        if( formCollection[i].method == 'post' )
		{
			if( formCollection[i].innerHTML.search('timestamp') )
				formCollection[i].innerHTML += '<input type="hidden" name="timestamp" value="" />';

			formCollection[i].onsubmit = function ()
			{
				inputs = document.getElementsByName('timestamp');
				for( var j = 0; j < inputs.length; ++j )
				{
					inputs[j].setAttribute( 'value', fetch_unix_timestamp() );
				}
			}
        }
    }
	dhtmlgoodies_initMenu();
}

function fetch_unix_timestamp()
{
    return parseInt( new Date().getTime().toString().substring(0, 10) );
}

function getWindowWidth()
{
	if( parseInt( navigator.appVersion ) > 3 )
	{
		if( navigator.appName == "Netscape" )
		{
			return window.innerWidth;
		}
		if( navigator.appName.indexOf( "Microsoft" ) != -1 )
		{
			return document.body.clientWidth;
		}
	}
	return document.body.offsetWidth;
}

function getWindowHeight()
{
	if( parseInt( navigator.appVersion ) > 3 )
	{
		if( navigator.appName == "Netscape" )
		{
			return window.innerHeight;
		}
		if( navigator.appName.indexOf( "Microsoft" ) != -1 )
		{
			return document.body.clientHeight;
		}
	}
	return document.body.offsetHeight;
}

function hideByID( ID )
{
	var item = document.getElementById(ID);
	if( item )
		item.style.visibility = 'hidden';
}

function showByID( ID )
{
	var item = document.getElementById(ID);
	if( item )
		item.style.visibility = 'visible';
}

function invertVisibilityByID( ID )
{
	var item = document.getElementById(ID);
	if( item.style.visibility == 'visible' )
		item.style.visibility = 'hidden';
	else
		item.style.visibility = 'visible';
}

function invertDisplayByID( ID )
{
	var item = document.getElementById(ID);
	if(item)
	{
		if( item.style.display == 'none' )
			item.style.display = '';
		else
			item.style.display = 'none';
	}
}

function displayByID( ID )
{
	var item = document.getElementById(ID);
	item.style.display = '';
}

function displayNoneByID( ID )
{
	var item = document.getElementById(ID);
	item.style.display = 'none';
}

function setValueByID( ID, value )
{
	var item = document.getElementById(ID);
	item.value = value;
}

function isChild( form, input )
{
	var node = input.parentNode;
	do
	{ 
		if( node == form ) return true;
	} while ( node = node.parentNode )
	return false;
}

function hideTableRows( tableID, rowStart, rowMask, img )
{
	if( rowMask == '' )
		return;
	tbl = document.getElementById( tableID );
	var style = tbl.rows[rowStart + 1].style.display;
	if( style == '' )
	{
		img.src = '/graphics/standard/plus.gif';
		style = 'none';
	}
	else
	{
		img.src = '/graphics/standard/minus.gif';
		style = '';
	}
	var len = tbl.rows.length;
	for( i = 1 ; i <= rowMask.length; i++ )
	{
		if( rowStart + i == len )
			return;
		if( style == 'none' )
		{
			tbl.rows[rowStart + i].style.display = style;
		}
		else
		{
			if( rowMask.charAt( i - 1 ) == '1' )
				tbl.rows[rowStart + i].style.display = style;
		}
	}
}

function submitformSelect( formID, selectID, sIndex )
{
	var form = getForm(formID);

	var inputs = document.getElementsByName( selectID );
	var input;

	for( var i = 0; i < inputs.length; ++i ) 
	{
		if( isChild( form, inputs[i] ) ) 
		{
			input = inputs[i];
		}
	}
	
	form.reset();
	input.selectedIndex = sIndex;
	if( form.onsubmit != null )
		form.onsubmit();
	form.submit();
}

function submitform( formID, inputID, val )
{
	var form = getForm(formID);

	var inputs = document.getElementsByName( inputID );
	var input;

	for( var i = 0; i < inputs.length; ++i ) 
	{
		if( isChild( form, inputs[i] ) ) 
		{
			input = inputs[i];
		}
	}
	
	form.reset();
	input.value = val;
	if( form.onsubmit != null )
		form.onsubmit();
	form.submit();
}

function submitform2( formID, inputID, val, inputID2, val2 )
{
	var form = getForm(formID);

	var inputs = document.getElementsByName( inputID );
	var input;

	var inputs2 = document.getElementsByName( inputID2 );
	var input2;

	for( var i = 0; i < inputs.length; ++i ) 
	{
		if( isChild( form, inputs[i] ) ) 
		{
			input = inputs[i];
		}
	}

	for( var i = 0; i < inputs2.length; ++i ) 
	{
		if( isChild( form, inputs2[i] ) ) 
		{
			input2 = inputs2[i];
		}
	}
	
	form.reset();
	input.value = val;
	input2.value = val2;
	if( form.onsubmit != null )
		form.onsubmit();
	form.submit();
}


function submitbyid( formID )
{
	var form = getForm(formID);
	if( form.onsubmit != null )
		form.onsubmit();
	form.submit();
}

function disableEnableForm( formID, bDisabled )
{
	var form = getForm(formID);
	objElems = form.elements;
	for(i=0;i<objElems.length;i++)
	{
		objElems[i].disabled = bDisabled;
	}
}


function getForm( formID )
{
	var form = document.getElementById(formID);
	if( form == null )
	{
		var forms = document.getElementsByName(formID);
		if( forms.length > 1 )
		{
			alert('Design error! More than one forms exist with the name '+formID+'!');
			return null;
		}
		
		if( forms.length == 1 )
			form = forms[0];
		else
		{
			alert('Design error! No form found with name '+formID+'!');
			return null;
		}
	}
	return form;
}

function resetbyid( ID )
{
	var elem = document.getElementById(ID);
	elem.value = '';
}

function resetform( ID )
{
	var elem = document.getElementById(ID);
	elem.reset();
}

function getConfirm( message )
{
	var bResult = confirm( message );
	return bResult;
}

function waitFor(millis) 
{
	var date = new Date();
	var curDate = null;

	do { curDate = new Date(); } 
	while( curDate - date < millis );
}

function findPos(obj) 
{
	var curleft = 0;
	var curtop = 0;
	if (obj.offsetParent) 
	{
		do 
		{
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
	}
	return [curleft,curtop];
}

function setComboIndex( selID, value, comboHead )
{
	var item = document.getElementById(selID);
	item.selectedIndex = value;
	var headID = document.getElementById(comboHead);
	headID.innerHTML = '&nbsp;' + item.options[value].innerHTML;
}

function setComboIndexMulti( selID, index, minSelNum, maxSelNum, comboItem )
{
	var item = document.getElementById(selID);
	var selNum = 0;
	
	for( var i = 0; i < item.options.length; ++i )
	{
		if( item.options[i].selected == true )
			++selNum;
	}

	if( item.options[index].selected == true && minSelNum < selNum )
	{
		item.options[index].selected = false;
		comboItem.setAttribute("class","comboItem");
		comboItem.className = "comboItem";
	}
	else 
	{
		if( selNum < maxSelNum )
		{
			item.options[index].selected = true;
			comboItem.setAttribute("class","comboItemSelected");
			comboItem.className = "comboItemSelected";
		}
	}
}

function getComboValue( selID )
{
	var item = document.getElementById(selID);
	return item.options[item.selectedIndex].innerHTML;
}

var droppedDown = "";
var justHandled = false;
var dropDown = false;

function hideDropdown( ID )
{
	var item = document.getElementById(ID);
	item.style.visibility = 'hidden';
	droppedDown = "";
}

function showDropdown( ID )
{
	var item = document.getElementById(ID);
	if( droppedDown=='' )
	{
		item.style.visibility = 'visible';
		droppedDown=ID;
		justHandled=true;
	}
	else
		hideDropdown(droppedDown)
}

window.onclick=function()
{
	if( justHandled == true )
	{
		justHandled=false;
	}
	else
	{
		if(droppedDown!="")
			hideDropdown(droppedDown);
	}
	return true;
}

if( navigator.appName.indexOf( "Microsoft" ) != -1 )
{
	document.body.onclick=window.onclick;
}

function htmlareainit(editors)
{
	for( var i = 0; i < editors.length; ++i )
	{
		var editor = new HTMLArea(editors[i]);
		editor.config.toolbar = [
		[	"bold", "italic", "underline", "strikethrough", "subscript", "superscript", "separator",
			"space", "undo", "redo", "separator",
			"justifyleft", "justifycenter", "justifyright", "justifyfull", "separator",
			"inserthorizontalrule", "createlink", "insertimage", "inserttable", "htmlmode", "separator",
			"popupeditor", "separator", "showhelp", "about" ],
		[ 	"formatblock", "space", "fontsize", "space",
			"orderedlist", "unorderedlist", "outdent", "indent", "separator", "forecolor", "hilitecolor" ]
		];
		/*{php}getCSSForHtmlArea();{/php}*/
		editor.generate();
	}
}

function copyContent(IDFrom,IDTo)
{
	var itemFrom = document.getElementById(IDFrom);
	var itemTo = document.getElementById(IDTo);
	itemTo.value = itemFrom.value;
}

function resizeIframe(iframeID)
{
	parent.document.getElementById(iframeID).style.display="inline";
	
	var FramePageHeight;
	if( navigator.appName.indexOf( "Microsoft" ) != -1 )
	{
		FramePageHeight = document.body.clientHeight;
	}
	else
		FramePageHeight = document.body.offsetHeight;

	FramePageHeight += 30;
	parent.document.getElementById(iframeID).style.height=FramePageHeight+"px";
}

function changePicbyID(picID,pic)
{
	var picElement = document.getElementById(picID);
	if(picElement)
	{
		changePic(picElement,pic)
	}
}

function changePic(element,pic)
{
	element.setAttribute( "src", pic );
}

function trim(str)
{
	return str.replace(/^\s+|\s+$/g, '');
}

// Remember the current position. From SMF
function storeCaret(text)
{
	// Only bother if it will be useful.
	if (typeof(text.createTextRange) != "undefined")
		text.caretPos = document.selection.createRange().duplicate();
}

// Replaces the currently selected text with the passed text. From SMF
function replaceText(text, textareaID)
{
	var textarea = document.getElementById(textareaID);

	// Attempt to create a text range (IE).
	if (typeof(textarea.caretPos) != "undefined" && textarea.createTextRange)
	{
		var caretPos = textarea.caretPos;

		caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text + ' ' : text;
		caretPos.select();
	}
	// Mozilla text range replace.
	else if (typeof(textarea.selectionStart) != "undefined")
	{
		var begin = textarea.value.substr(0, textarea.selectionStart);
		var end = textarea.value.substr(textarea.selectionEnd);
		var scrollPos = textarea.scrollTop;

		textarea.value = begin + text + end;

		if (textarea.setSelectionRange)
		{
			textarea.focus();
			textarea.setSelectionRange(begin.length + text.length, begin.length + text.length);
		}
		textarea.scrollTop = scrollPos;
	}
	// Just put it on the end.
	else
	{
		textarea.value += text;
		textarea.focus(textarea.value.length - 1);
	}
}

// Surrounds the selected text with text1 and text2. From SMF
function surroundText(text1, text2, textareaID)
{
	var textarea = document.getElementById(textareaID);
	
	// Can a text range be created?
	if (typeof(textarea.caretPos) != "undefined" && textarea.createTextRange)
	{
		var caretPos = textarea.caretPos, temp_length = caretPos.text.length;

		caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text1 + caretPos.text + text2 + ' ' : text1 + caretPos.text + text2;

		if (temp_length == 0)
		{
			caretPos.moveStart("character", -text2.length);
			caretPos.moveEnd("character", -text2.length);
			caretPos.select();
		}
		else
			textarea.focus(caretPos);
	}
	// Mozilla text range wrap.
	else if (typeof(textarea.selectionStart) != "undefined")
	{
		var begin = textarea.value.substr(0, textarea.selectionStart);
		var selection = textarea.value.substr(textarea.selectionStart, textarea.selectionEnd - textarea.selectionStart);
		var end = textarea.value.substr(textarea.selectionEnd);
		var newCursorPos = textarea.selectionStart;
		var scrollPos = textarea.scrollTop;

		textarea.value = begin + text1 + selection + text2 + end;

		if (textarea.setSelectionRange)
		{
			if (selection.length == 0)
				textarea.setSelectionRange(newCursorPos + text1.length, newCursorPos + text1.length);
			else
				textarea.setSelectionRange(newCursorPos, newCursorPos + text1.length + selection.length + text2.length);
			textarea.focus();
		}
		textarea.scrollTop = scrollPos;
	}
	// Just put them on the end, then.
	else
	{
		textarea.value += text1 + text2;
		textarea.focus(textarea.value.length - 1);
	}
}

// Highlights img. From SMF
function highlightbutton(image, mode)
{
	image.style.backgroundImage = "url( /graphics/standard" + (mode ? "/buttonbghover.gif)" : "/buttonbg.gif)");
}

function uncodeMail( theLink, key )
{
	var before = theLink.getAttribute('href');
	if( before.indexOf( key ) == -1 )
		return false;
	var uncodedHREF = before.split(key)[0] + before.split(key)[1];
	theLink.href = uncodedHREF;
}