var fscMenuShowing = false;
var fscMenuRegistry = [];
var fscStartupMode = true;

function fsc_getOffsetLeft( el )
{
    var t=el.offsetLeft; var p=el.offsetParent;
    while (p!=null){ t= t+p.offsetLeft; p=p.offsetParent; }
    return t;
}
function fsc_getOffsetTop( el )
{
    var t=el.offsetTop+el.offsetHeight; var p=el.offsetParent;
    while (p!=null){ t= t+p.offsetTop; p=p.offsetParent; }
    return t;
}

function fsc_getMenu( id )
{
	for( var i =0; i< fscMenuRegistry.length; i++ )
	{
		if( fscMenuRegistry[i].id == id )
		{
			return fscMenuRegistry[i];
		}
	}
}

function fsc_pushMessage( id, messageId, messageText )
{
	fsc_getMenu( id ).messages.push( {id: messageId, message: messageText } );
	
}

function fsc_message( id, messageId )
{
	var messages = fsc_getMenu(id).messages;
	for( var i = 0; i < messages.length; i++ )
	{

		if( messages[i].id == messageId )
		{
			
			return messages[i].message;
		}
		
	}
	
	return id;
}
function fsc_toogle(id)
{
	d=document.getElementById(id+'_container');
	s=document.getElementById(id+'_scroller');
	fsc_hideAll(d);


	
	w = $(id).offsetWidth;
    x = fsc_getOffsetLeft($(id) );
    y = fsc_getOffsetTop($(id) );
    
    d.style.left	= (x+w-20) + 'px';
    d.style.top		= (y-17) + 'px';
	/*d.style.width	= '180px';*/
    //d.style.width	= 'auto';
	
	if(d.getAttribute('count') > 10 )
		s.style.height = ((10*22))+'px';
	else
		s.style.overflowY = 'hidden';
	
	d.style.display = (d.style.display == 'none')? '':'none';
	fscMenuShowing = (d.style.display == '');
}

function fsc_dualUpdate( id )
{
	var e=document.getElementById(id);
	var s=document.getElementById(id+'_scroller');
	var l=s.getElementsByTagName('INPUT');
	var label = e.getAttribute( 'fieldlabel' );

	var _fromInput = null;
	var _toInput   = null; 
	
	var j=[];
	var c = 0;
	for( var i = 0; i< l.length; i++ )
	{
		var it = document.getElementById('item' + id + '_' + i );
		var side = l[i].getAttribute( 'side' );
		if( it )
		{
			if( l[i].checked )
			{
				if( side == 'left' )
				{
					_fromInput = l[i];
					fsc_dualDisableRightValues(id, _fromInput.value );
				}
				else
					_toInput = l[i];
					
				c++;
				j.push(l[i].getAttribute('label'));
				it.className = 'formSelectCheckboxItem checked';
			}
			else if(  l[i].disabled == false )
			{
				it.className = 'formSelectCheckboxItem unchecked';
			}
		}
	}
	
	
	if( _fromInput != null && ( _toInput != null && _toInput.value != '' ) )
	{
		message = fsc_message(id, 'priceBetween');
		message = message.replace('{from}', _fromInput.value );
		message = message.replace('{to}', _toInput.value );
	}
	else if( _fromInput != null )
	{
		message = fsc_message(id, 'priceFrom');
		message = message.replace('{from}', _fromInput.value );
	}
	else if( _toInput != null )
	{
		message = fsc_message(id, 'priceTo');
		message = message.replace('{to}', _toInput.value );
		
	}
	else
	{
		e.value = fsc_message(id, 'emptyValue' ).replace('{label}', label);
		e.className = 'formSelectCheckboxInput empty';
		return;
	}

	e.className = 'formSelectCheckboxInput';
	e.value = message;
	
}
function fsc_dualDisableRightValues( id, fromValue )
{
	fromValue = Math.round( fromValue );
	var s=document.getElementById(id+'_scroller');
	var l=s.getElementsByTagName('INPUT');

	var c = 0;
	for( var i = 0; i< l.length; i++ )
	{
		var it = document.getElementById('item' + id + '_' + i );
		var side = l[i].getAttribute( 'side' );
		
		if( side == 'right' )
		{
			l[i].disabled = false;
			if( l[i].value != '' && Math.round( l[i].value ) <= fromValue )
			{
				
				l[i].checked = false;
				l[i].disabled = true;
				it.className = 'formSelectCheckboxItem disabled';
			}
			else if( l[i].checked )
			{
				it.className = 'formSelectCheckboxItem checked';
			}
			else
			{
				it.className = 'formSelectCheckboxItem unchecked';
			}
		}
	}
}



function fsc_update(id)
{
	var e=document.getElementById(id);
	var s=document.getElementById(id+'_scroller');
	var l=s.getElementsByTagName('INPUT');

	var label = e.getAttribute( 'fieldlabel' );
	var max = e.getAttribute( 'maxoptionscount' );
	
	
	var j=[];
	var c = 0;
	for( var i = 0; i< l.length; i++ )
	{
		var it = document.getElementById('item' + id + '_' + i );
		if( it )
		{
			if( l[i].checked )
			{
				c++;
				j.push(l[i].getAttribute('label'));
				it.className = 'formSelectCheckboxItem checked';
			}
			else
			{
				it.className = 'formSelectCheckboxItem unchecked';
			}
		}
	}
	
	if( c == 0 )
	{
		e.value = fsc_message(id, 'emptyValue' ).replace('{label}', label);
		e.className = 'formSelectCheckboxInput empty';
	}
	else
	{
		if( max > 1 && c > 1 )
		{
			message = fsc_message(id, (c>1)? 'elementsSelected':'elementSelected');
			message = message.replace('{count}', c );
			message = message.replace('{value}', j.join(', ') );
		}
		else
		{
			message = fsc_message(id, 'elementValue');
			message = message.replace('{value}', j.join(', ') );
		}
		
		if( ! fscStartupMode && max == 1 && c > 0 )
		{
			fsc_toogle(id);
		}
		
		
		e.value = message.replace('{label}', label);
		e.className = 'formSelectCheckboxInput';
	}
}

function fsc_checkAll(id)
{
	s=document.getElementById(id+'_scroller');
	l=s.getElementsByTagName('INPUT');
	
	for( i = 0; i< l.length; i++ )
	{
		l[i].checked = true;
	}
	fsc_update(id);
}

function fsc_checkNone(id)
{
	s=document.getElementById(id+'_scroller');
	l=s.getElementsByTagName('INPUT');
	
	for( i = 0; i< l.length; i++ )
	{
		l[i].checked = false;
	}
	fsc_update(id)
}

function fsc_reset(id){

}

function fsc_hideAll( el )
{
	for( i = 0; i < fscMenuRegistry.length; i++ )
	{
		var d=document.getElementById(fscMenuRegistry[i].id+'_container');
		if( d != el )
		{
			d.style.display = 'none';
		}
	}
}

function fsc_update_all()
{
	for( var z = 0; z < fscMenuRegistry.length; z++ )
	{
		//fsc_update(fscMenuRegistry[z].id);
		fscMenuRegistry[z].callback( fscMenuRegistry[z].id );
	}
}

Event.observe(window, 'load', function() {
	fsc_update_all();
	fscStartupMode = false;
});

Event.observe(document, 'click', function() {
	if( fscMenuShowing )
	{
		fscMenuShowing = false;	
		return;
	}
	fsc_hideAll();
});
