function getUrl( url )
{
	if( undefined == this.redirecting )
		this.redirecting = true ;
	else
		return ;
	document.location = url ;
}
function confirmAndGetUrl( message, url )
{
	if( confirm( message ) )
		getUrl( url ) ;
}
function confirmAndSubmit( message, form )
{
	if( confirm( message ) )
		form.submit() ;
}
function typeOf( value )
{
    var s = typeof value ;
    if( s === 'object' )
        if( value )
            if( value instanceof Array )
                s = 'array' ;
		else
            s = 'null';
    return s ;
}
function toggleDisplay( el )
{
	el.style.display = ( 'block' == el.style.display ) ? 'none' : 'block' ;
}
function elementsSetDisabled( els, state )
{
	var t ;
	if( ( t = typeOf(els) ) != 'array' )
		if( 'object' == t )
			els.disabled = state ;
		else
			return false ;
	else
		for( var k = 0 ; k < els.length ; ++k )
			els[k].disabled = state ;
	return true ;
}
function elementsMoveSelected( listFrom, listTo )
{
	var k = 0 ;
	while( k<listFrom.options.length )
	{
		if( listFrom.options[k].selected )
		{
			listTo.add( listFrom.options[k], null ) ;
		}
		else
			++k ;
	}
}
function formPrepare( event )
{
	var form = event.target ;
	if( 'FORM' != form.nodeName )
	{
		alert('Wrong nodeName: ' + form.nodeName + '@' +form);
		return false ;
	}
	// Select all options in multiselect objects of the form
	var els = form.elements;
	for( var k = 0 ; k < els.length ; ++ k )
	{
		var el = els[k] ;
		if( 'select-multiple' == el.type )
		{
			var options = el.options ;
			for( var kk = 0 ; kk < options.length ; ++ kk )
				options[kk].selected = true ;
		}
	}
	return true ;
}
function disableSubmit( event )
{
	var form = event.target ;
	if( 'FORM' != form.nodeName )
		return false ;

	var result = true ;
/*
	for( var kk = 0 ; kk < form.elements.length ; ++kk )
	{
		var element = form.elements[kk] ;
		if( 'submit' == element.type )
			element.disabled = true ;
	}
*/
	var flag = 0 ;
	for( var kk = 0 ; kk < form.elements.length ; ++kk )
	{
		var element = form.elements[kk] ;
		element.disabled = false ;
		if( ( 'select-multiple' == element.type ) && ( 0 == flag ) )
			flag = 4 ;
		if( ( 2 == flag ) || ( 3 == flag ) )
			element.disabled = true ;
		if( flag ) --flag ;
	}
	result &= ( flag == 0 ) ;
	return result ;
}
function disableMultiselectControlButtons( event )
{
	var form = event.target ;
	if( 'FORM' != form.nodeName )
		return false ;
	return true ;
}
function setListeners()
{
	var forms = document.forms ;
	for( var k = 0 ; k < forms.length ; ++k )
	{
		var form = forms[k] ;
		if( 'form_prepare' == form.className )
			form.addEventListener( 'submit', formPrepare, false ) ;
		form.addEventListener( 'submit', disableSubmit, false ) ;
	}
}
window.addEventListener( 'load', setListeners, false ) ;
/*
// Better use:
// document.location = id
function scrollToId( id )
{
	var pos = getPosition( document.getElementById( id ) ) ;
	scrollTo( 0, pos.top ) ;
}
*/

function getPosition( obj )
{
	var curleft = curtop = 0 ;
	if( obj.offsetParent )
	{
		curleft = obj.offsetLeft ;
		curtop = obj.offsetTop ;
		while( obj = obj.offsetParent )
		{
			curleft += obj.offsetLeft ;
			curtop += obj.offsetTop ;
		}
	}
	var pos = new Object() ;
	pos.left = curleft ;
	pos.top = curtop ;
	return pos ;
}

function moveTo( obj, pos )
{
	obj.style.left = pos.left + 'px';
	obj.style.top = pos.top + 'px';
}
////////////////////////////////////////////////////////////////////////////////////////////////
// Get element's width and height
function sniffBrowsers() {
	ns4 = document.layers ;
	op5 = (navigator.userAgent.indexOf("Opera 5")!=-1) 
		||(navigator.userAgent.indexOf("Opera/5")!=-1) ;
	op6 = (navigator.userAgent.indexOf("Opera 6")!=-1) 
		||(navigator.userAgent.indexOf("Opera/6")!=-1) ;
	agt = navigator.userAgent.toLowerCase() ;
	mac = (agt.indexOf("mac")!=-1) ;
	ie = (agt.indexOf("msie") != -1) ;
	mac_ie = mac && ie ;
}
sniffBrowsers() ;

function getObjNN4(obj,name)
{
	var x = obj.layers;
	var foundLayer;
	for (var i=0;i<x.length;i++)
	{
		if (x[i].id == name)
		 	foundLayer = x[i];
		else if (x[i].layers.length)
			var tmp = getObjNN4(x[i],name);
		if (tmp) foundLayer = tmp;
	}
	return foundLayer;
}
function getElementHeight(Elem){
	if (ns4) {
		var elem = getObjNN4(document, Elem);
		return elem.clip.height;
	} else {
		if(document.getElementById) {
			var elem = document.getElementById(Elem);
		} else if (document.all){
			var elem = document.all[Elem];
		}
		if (op5) { 
			xPos = elem.style.pixelHeight;
		} else {
			xPos = elem.offsetHeight;
		}
		return xPos;
	} 
}
function getElementWidth(Elem) {
	if (ns4) {
		var elem = getObjNN4(document, Elem);
		return elem.clip.width;
	} else {
		if(document.getElementById) {
			var elem = document.getElementById(Elem);
		} else if (document.all){
			var elem = document.all[Elem];
		}
		if (op5) {
			xPos = elem.style.pixelWidth;
		} else {
			xPos = elem.offsetWidth;
		}
		return xPos;
	}
}