function regExpEscape( arg )
{
	
	var res = new String();
	var ch = new String();
	
	for( var i = 0; i < arg.length; i++ )
	{
		ch = arg.charAt( i );
		if(( ch == '(' ) || ( ch == ')' ) || ( ch == '$' ) || ( ch == '.' ))
			res = res + '\\' + ch
		else
			res = res + ch;
	}
	
	return( res );
	
}

function fpmFormSubmit( formName )
{
	var loc = window.location.href;
	var newloc = window.location.href;
	var f = document.forms[ formName ];
	for( var i = 0; i < f.elements.length; i++ )
	{
		var el = f.elements[ i ];
		if( el.type == 'checkbox' )
		{
			if( el.checked )
			{
				var pattern = new RegExp( '[\?|&](' + el.name + ')=(.*?)(&|$)', 'i' );
				if( !pattern.test( loc ))
				{
					var qumark = /\?/;
					var delim = ( qumark.test( loc )) ? '&' : '?';
					newloc = newloc + delim + el.name + '=' + el.value;
				}
			}
			else
			{
				var pattern = new RegExp( '([\?|&])(' + el.name + ')=(.*?)(&|$)', 'i' );
				if( pattern.test( loc ))
				{
					var res = pattern.exec( loc );
					newloc = newloc.replace(( res[ 1 ] == '&' ? res[ 1 ] : '' ) + res[ 2 ] + '=' + res[ 3 ], '' );
				}
			}
		}
		else
		{
			var pattern = new RegExp( '[\?|&](' + el.name + ')=(.*?)(&|$)', 'i' );
			if( pattern.test( loc ))
			{
				var res = pattern.exec( loc );
				newloc = newloc.replace( res[ 1 ] + '=' + res[ 2 ], res[ 1 ] + '=' + el.value );
			}
			else
			{
				var qumark = /\?/;
				var delim = ( qumark.test( loc )) ? '&' : '?';
				newloc = newloc + delim + el.name + '=' + el.value;
			}
		}
	}
	window.location.href = newloc;
}

function fpmFloatLegalToggle()
{
	var o = document.getElementById( 'fpmFloatLegalBody' );
	var l1;
	var l2;
	if( o )
	{
		if( o.style.display == 'none' )
		{
			l1 = document.getElementById( 'fpmFloatLegalAccept' );
			l2 = document.getElementById( 'fpmFloatLegalShow' );
			o.style.display = '';
		}
		else
		{
			l2 = document.getElementById( 'fpmFloatLegalAccept' );
			l1 = document.getElementById( 'fpmFloatLegalShow' );
			o.style.display = 'none';
		}
		l1.style.display = '';
		l2.style.display = 'none';
	}
}

var onChangeObservers = new Array();
var fpmInceptionDate;

function fpmDispatchChange(combo) {
  var opts = combo.getElementsByTagName('option');
  for(var i = 0; i < opts.length; i++)
    if(opts[i].value == combo.value) {
      if(!opts[i].onchange)
        opts[i].onchange = new Function('event', opts[i].getAttribute('onchangeTmp'));
      opts[i].onchange();
      break;
    }
}

function fpmHighlightSelector( o, expr )
{
	var s = document.getElementById( o );
	if( expr )
		s.style.backgroundColor = '#F2FAFC'
	else
		s.style.backgroundColor = 'white';
}

/*function fpmHighlightSelector(o, expr) {
  var opt = document.getElementById(o);
  if(expr)
    opt.parentNode.value = o;
}*/

function fpmNotifyObservers( observers, datePattern )
{
	fpmCurrentDatePattern = datePattern;
	for( var i = 0; i < observers.length; i++ )
		observers[i][0]( datePattern, observers[i] );
}

function fpmSelectPeriod( datePattern, returnProc )
{
	var start = document.getElementById( 'fpmf_dt_hp_from' );
	var end = document.getElementById( 'fpmf_dt_hp_to' );
	var r = returnProc( datePattern );
  start.value = r[0];
  end.value = r[1];
	fpmNotifyObservers( onChangeObservers[ 'fpmf_dt_hp_from' ], datePattern );
	fpmNotifyObservers( onChangeObservers[ 'fpmf_dt_hp_to' ], datePattern );
}

function fpmObservePeriod( datePattern, args )
{
	var s = document.getElementById( 'fpmf_dt_hp_from' );
	var e = document.getElementById( 'fpmf_dt_hp_to' );
	var r = args[1]( datePattern );
	fpmHighlightSelector( args[2], ( s.value == r[0] ) && ( e.value == r[1] ))
}

function fpmReturnCurrYear( datePattern )
{
	var origDate = new Date();
	var startDate = fpmLocalizeDate( new Date( origDate.getFullYear(), 0, 1 ), datePattern );
	var endDate = fpmLocalizeDate( new Date( origDate.getFullYear() + 1, 0, 0 ), datePattern );
	return new Array( startDate, endDate );
}

function fpmReturnCustom(datePattern) {
	var start = document.getElementById( 'fpmf_dt_hp_from' );
	var end = document.getElementById( 'fpmf_dt_hp_to' );
	return new Array(start.value, end.value);
}

function fpmReturnComplete( datePattern )
{
/*	var origDate = new Date();
	var startDate = fpmInceptionDate;
	var endDate = fpmLocalizeDate( new Date(), datePattern );
	return new Array( startDate, endDate );*/
	return new Array( fpmInceptionDate, fpmTop20EndDate );
}

function fpmReturnInceptionYear( datePattern )
{
	var startDate = fpmInceptionDate;
	var incDate = fpmUnlocalizeDate( fpmInceptionDate, datePattern );
	var endDate = fpmLocalizeDate( new Date( incDate.getFullYear() + 1, incDate.getMonth(), incDate.getDate() - 1 ), datePattern );
	return new Array( startDate, endDate );
}

function fpmReturnTop20( datePattern )
{
	return new Array( fpmTop20StartDate, fpmTop20EndDate );
}

function fpmReturnPrevYear( datePattern )
{
	var origDate = new Date();
	var startDate = fpmLocalizeDate( new Date( origDate.getFullYear() - 1, 0, 1 ), datePattern );
	var endDate = fpmLocalizeDate( new Date( origDate.getFullYear(), 0, 0 ), datePattern );
	return new Array( startDate, endDate );
}

function fpmReturnCurrentMonth( datePattern )
{
	var origDate = new Date();
	var startDate = fpmLocalizeDate( new Date( origDate.getFullYear(), origDate.getMonth(), 1 ), datePattern );
	var endDate = fpmLocalizeDate( new Date( origDate.getFullYear(), origDate.getMonth() + 1, 0 ), datePattern );
	return new Array( startDate, endDate );
}

function fpmReturnPrevMonth( datePattern )
{
	var origDate = new Date();
	var startDate = fpmLocalizeDate( new Date( origDate.getFullYear(), origDate.getMonth() - 1, 1 ), datePattern );
	var endDate = fpmLocalizeDate( new Date( origDate.getFullYear(), origDate.getMonth(), 0 ), datePattern );
	return new Array( startDate, endDate );
}

function fpmReturnMonthPrevYear( datePattern )
{
	var origDate = new Date();
	var startDate = fpmLocalizeDate( new Date( origDate.getFullYear(), origDate.getMonth() - 12, 1 ), datePattern );
	var endDate = fpmLocalizeDate( new Date( origDate.getFullYear(), origDate.getMonth() - 11, 0 ), datePattern );
	return new Array( startDate, endDate );
}

function fpmReturnPrevMonthPrevYear( datePattern )
{
	var origDate = new Date();
	var startDate = fpmLocalizeDate( new Date( origDate.getFullYear(), origDate.getMonth() - 13, 1 ), datePattern );
	var endDate = fpmLocalizeDate( new Date( origDate.getFullYear(), origDate.getMonth() - 12, 0 ), datePattern );
	return new Array( startDate, endDate );
}

function fpmLocalizeDate( inputDate, datePattern )
{

	var yyyy = String( inputDate.getFullYear());
	var mm = String( inputDate.getMonth() + 1 );
	var dd = String( inputDate.getDate());
	var yy = yyyy.substring( 2, yyyy.length );
	
	if( mm.length < 2 )
		mm = '0' + mm;
		
	if( dd.length < 2 )
		dd = '0' + dd;
	
	var result = datePattern;
	result = result.replace( /YYYY/, yyyy );
	result = result.replace( /YY/, yy );
	result = result.replace( /MM/, mm );
	result = result.replace( /DD/, dd );
	
	return( result );
	
}

function fpmUnlocalizeDate( inputDate, datePattern )
{
	var aDay = 0;
	var aMonth = 0;
	var aYear = 0;
	var ch = '';
	for( var i = 0; i < datePattern.length; i++ )
	{
		ch = datePattern.charAt( i );
		switch( ch )
		{
			case 'D':
				aDay = ( aDay * 10 ) + parseInt( inputDate.charAt( i ));
				break;
			case 'M':
				aMonth = ( aMonth * 10 ) + parseInt( inputDate.charAt( i ));
				break;
			case 'Y':
				aYear = ( aYear * 10 ) + parseInt( inputDate.charAt( i ));
				break;
		}
	}
	return new Date( aYear, aMonth - 1, aDay );
}

function fpmResetForm( formName )
{
	if( fpmCurrentDatePattern != '' )
	{
		document.forms[ formName ].reset();
		fpmNotifyObservers( onChangeObservers[ 'fpmf_dt_hp_from' ], fpmCurrentDatePattern );
		fpmNotifyObservers( onChangeObservers[ 'fpmf_dt_hp_to' ], fpmCurrentDatePattern );
	}
}

var fpmCurrentDatePattern = '';