<!--
/*****************************************************************************
 * Copyright (c) 2001 Multex.com, Inc. All Rights Reserved.
 *
 * File:        formLib
 * Author:		Jacob Metcalf ( jacob.metcalf@multex.com )
 * Description: 
 *	
 ****************************************************************************/

/*****************************************************************************
 * Function:		postEvent
 * Description:		Posts an event to the server setting the event type in the 
 *					process. Relies on your form having a hidden field 
 *					called 'eventID'.
 *					
 *					arg<N> and value<N> are optional args that allow further
 *					arguments to be set. 
*					If value equals the magic value "*selectAll*"
 ****************************************************************************/
function mxPostEvent( eventType, formName, arg1, value1, arg2, value2, arg3, value3, arg4, value4, arg5, value5 )
{
	//alert( "DEBUG: postEvent( "+eventType+","+ formName+","+arg1+ ","+value1+","+arg2+ ","+value2+")" )
	var form = eval( "document." + formName );
	
	if ( form != null ) 
	{
		var typeField = eval( "document." + formName + ".eventID" );
		if ( typeField != null )
		{ 
			typeField.value = eventType;
			if (( arg1 != null ) && ( arg1.length > 0 ))
			{
				var extraField = eval( "document." + formName + "." + arg1 );
				if ( extraField != null )
				{
					if (( value1 != "*selectAll*" ))
						extraField.value = value1;
					else
					{
						for ( i=0; i < extraField.options.length; i++ )
						{
							extraField.options[i].selected = true
						}
					}						
				}
				else
				{
					alert( "Error: postEvent() Could not find '" + arg1 + "' field in form: '" + formName +"'."  ); 
					return;
				}
			}
			if (( arg2 != null ) && ( arg2.length > 0 ))
			{
				var extraField = eval( "document." + formName + "." + arg2 );
				if ( extraField != null )
				{
					if (( value2 != "*selectAll*" ))
						extraField.value = value2;
					else
					{
						for ( i=0; i < extraField.options.length; i++ )
						{
							extraField.options[i].selected = true
						}
					}						
				}
				else
				{
					alert( "Error: postEvent() Could not find '" + arg2 + "' field in form: '" + formName +"'."  ); 
					return;
				}
			}
			if (( arg3 != null ) && ( arg3.length > 0 ))
			{
				var extraField = eval( "document." + formName + "." + arg3 );
				if ( extraField != null )
				{
					if (( value3 != "*selectAll*" ))
						extraField.value = value3;
					else
					{
						for ( i=0; i < extraField.options.length; i++ )
						{
							extraField.options[i].selected = true
						}
					}						
				}
				else
				{
					alert( "Error: postEvent() Could not find '" + arg3 + "' field in form: '" + formName +"'."  ); 
					return;
				}
			}
			if (( arg4 != null ) && ( arg4.length > 0 ))
			{
				var extraField = eval( "document." + formName + "." + arg4 );
				if ( extraField != null )
				{
					if (( value4 != "*selectAll*" ))
						extraField.value = value4;
					else
					{
						for ( i=0; i < extraField.options.length; i++ )
						{
							extraField.options[i].selected = true
						}
					}						
				}
				else
				{
					alert( "Error: postEvent() Could not find '" + arg4 + "' field in form: '" + formName +"'."  ); 
					return;
				}
			}
			if (( arg5 != null ) && ( arg5.length > 0 ))
			{
				var extraField = eval( "document." + formName + "." + arg5 );
				if ( extraField != null )
				{
					if (( value5 != "*selectAll*" ))
						extraField.value = value5;
					else
					{
						for ( i=0; i < extraField.options.length; i++ )
						{
							extraField.options[i].selected = true
						}
					}						
				}
				else
				{
					alert( "Error: postEvent() Could not find '" + arg5 + "' field in form: '" + formName +"'."  ); 
					return;
				}
			}
			//alert( "DEBUG: posting form, event type=" + typeField.value );
			form.submit();
			return false;
		}
		else
		{
			alert( "Error: postEvent() Could not find 'eventID' field in form: '" + formName +"'."  ); 
		}
	}
	else
	{
		alert( "Error: postEvent() Could not find form '" + formName +"'."  ); 
	}
}

/*****************************************************************************
 * Function:		mxConfirm
 * Description:		
 *
 ****************************************************************************/
function mxConfirm( message, eventType, formName, arg1, value1, arg2, value2, arg3, value3, arg4, value4, arg5, value5 )
{
	if (confirm(message))
	{
		mxPostEvent( eventType, formName, arg1, value1, arg2, value2, arg3, value3, arg4, value4, arg5, value5 );
	}
}


/*****************************************************************************
 * Function:		mxGoto
 * Description:		
 *
 ****************************************************************************/
function mxGoto( eventType, args )
{
	
}

 /*****************************************************************************
 * Function:		pop
 * Description:		Populates an option list dynamically from an array.
 *
 ****************************************************************************/
function mxPop( arrayName, vSelected, noValueText )
{
	//alert( "DEBUG: mxPop( "+arrayName+","+ vSelected+","+noValueText+ ")" )
	var array = eval( arrayName );
	if ( array == null )
	{
		alert( "Error: pop() Could not find array '" + arrayName + "'."  ); return;
	}
	
	if ( vSelected == null ) { vSelected=""; }
	var selected = vSelected.split(',');
	
	if (( noValueText != null ) && ( noValueText.length > 0 ))
	{
	  document.write('<option class="formSelect" value=""');
	  if ( vSelected.length == 0 ) { document.write( " selected" );} 
	  document.write('>' + noValueText + '</option>')
	}
	
	var text = "" 
	for (var i = 0; i < array.length; i=i+2)
	{
	  document.write('<option class="formSelect" value="' + array[i] + '"')
	  for (var j = 0 ; j < selected.length ; j++)
	  {
		var listItem = array[i].replace(/^\s*/g,"")
		var profileItem = selected[j].replace(/^\s*/g,"")
		if( listItem == profileItem )
			document.write(' selected')
	  }
	  document.write('>' + array[i + 1] + '</option>')
	}
	document.write( text );
}


/*****************************************************************************
 * Function:		mxWriteItemName & mxGetItemName & mxWriteItemNameSubStr
 * Description:		Looks up the code in the array and writes out the 
 *					textual description.
 *					mxWriteItemNameSubStr does a simple replace or string 
 *					substitution using regular expression syntax.
 *
 ****************************************************************************/
function mxWriteItemNameSubStr( arrayName, code, fStr, rStr )
{
	var itemText = mxGetItemName( arrayName, code );
	var itemText2 = itemText.replace( fStr, rStr );
	document.write( itemText2 );
}

function mxWriteItemName( arrayName, code )
{
	document.write( mxGetItemName( arrayName, code ));
}

function mxGetItemName( arrayName, code )
{
	//alert( "DEBUG: mxGetItemName( " + arrayName + "," + code + ")" )

	var array = eval( arrayName );

	if ( array == null )
	{
		alert( "Error: mxGetItemName() Could not find array '" + arrayName + "'."  ); return;
	}
	
	var result = ""
	code = code.replace( /^\s*/g,"" )
	
	for ( var i = 0; i < array.length; i+=2 )
	{
		if( array[i] == code )
		{
			result = array[i + 1].replace( /(^(\s|&nbsp;)+)|((\s|&nbsp;)+$)/g, '');
		}
	}
	
	if ( result.length == 0 )
	{
		alert( "Error: mxGetItemName() Could not find item '" + code + "'."  );
	}	
	
	return result;
}

/*****************************************************************************
 * Function:		addOption
 * Description:		Adds selected options from one select box to another
 *
 ****************************************************************************/
function mxAddOption( formName, leftSelectName, rightSelectName, arrayName )
 {
	//alert( "DEBUG: addOption( '"+formName+"','"+ leftSelectName+"','"+rightSelectName+"')" )
 	var form = eval( "document." + formName );
	if ( form == null )
		{ alert( "Error: addOption() Could not find form '" + formName +"'."  ); return; }
 
	var leftSelect = eval( "document." + formName + "." + leftSelectName )
	if ( leftSelect == null )
		{ alert( "Error: addOption() Could not find select '" + leftSelectName +"' for form '" + formName +"'."  ); return; }
	
	var rightSelect = eval( "document." + formName + "." + rightSelectName )
	if ( rightSelect == null )
		{ alert( "Error: addOption() Could not find select '" + rightSelectName +"' for form '" + formName +"'."  ); return; }

	var array = eval( "document." + formName + "." + arrayName )
	
	var item, text, i, j, alreadyHas;
	//return if the user has not selected anything
	if (leftSelect.selectedIndex == -1) return;
	
	for (i=0; i<leftSelect.options.length; i++){
		if (leftSelect.options[i].selected){
		
			item = leftSelect.options[i].value;
			text = leftSelect.options[i].text;

			if(item != '')
			{
				//alert( "DEBUG: addOption(): " + text + "(" + item + ") selected." )
			
				alreadyHas = false;
				// Check the option does not already exist in the destination select box
				for (j=0; j<rightSelect.options.length; j++)
				{
					if ( item == rightSelect.options[j].value )
					{
						//alert( "DEBUG: addOption(): option already selected." )
						alreadyHas = true;
						break;
					}
				}
				if ( alreadyHas == false )
				{
					rightSelect.options[rightSelect.options.length] = new Option(text, item);
					if ( array != null )
					{
						var arrayValue = array.value;
						if ( arrayValue.length > 0 ) { arrayValue += ","; }
						arrayValue += '"' +item+ '","' + text + '"';
						array.value = arrayValue;
					}
				}
			}
		}
	}
}


/*****************************************************************************
 * Function:		removeOption
 * Description:		Removes selected options from a select box
 *
 ****************************************************************************/
function mxRemoveOption( formName, rightSelectName, arrayName )
{
	//alert( "DEBUG: removeOption( '"+formName+"','"+rightSelectName+"')" )
 	var form = eval( "document." + formName );
	if ( form == null )
		{ alert( "Error: removeOption() Could not find form '" + formName +"'."  ); return; }
 	
	var rightSelect = eval( "document." + formName + "." + rightSelectName )
	if ( rightSelect == null )
		{ alert( "Error: removeOption() Could not find select '" + rightSelectName +"' for form '" + formName +"'."  ); return; }

	var array = eval( "document." + formName + "." + arrayName )

	var item, text, i;
	var arrayValue = "";
	
	if (rightSelect.selectedIndex == -1) return;
	
	for (i=rightSelect.options.length; i>0; i--)
	{
		if (rightSelect.options[i-1].selected)
		{
			rightSelect.options[i-1] = null;
		}
		else
		{
			if ( arrayValue.length > 0 ) { arrayValue += ","; }
			arrayValue += '"' +rightSelect.options[i-1].value+ '","' + rightSelect.options[i-1].text + '"';
		}
	}
	if ( array != null ) { array.value = arrayValue; }
}


/*****************************************************************************
 * Function:		clearAllOptions
 * Description:		Removes all options from a select box
 *
 ****************************************************************************/
function mxClearAllOptions( formName, rightSelectName, arrayName )
{
	//alert( "DEBUG: clearAllOptions( '"+formName+"','"+rightSelectName+"')" )
 	var form = eval( "document." + formName );
	if ( form == null )
		{ alert( "Error: clearAllOptions() Could not find form '" + formName +"'."  ); return; }
 	
	var rightSelect = eval( "document." + formName + "." + rightSelectName )
	if ( rightSelect == null )
		{ alert( "Error: clearAllOptions() Could not find select '" + rightSelectName +"' for form '" + formName +"'."  ); return; }

	var array = eval( "document." + formName + "." + arrayName )
	if ( array != null ) { array.value = ""; }

	var item, text, i;
		
	for (i=rightSelect.options.length; i>0; i--)
	{
		rightSelect.options[i-1] = null;
	}
}


/*****************************************************************************
 * Function:		mxCount
 * Description:		Counts the number of items in a list - used by advanced 
 *					search form to count number of analysts.
 *
 ****************************************************************************/
function mxCount( formName, fieldName, value, oneText, moreText )
{
	//alert( "DEBUG: mxCount( '"+formName+"','"+fieldName+"','"+value+"','"+zeroText+"','"+anyText+"')" )
 	var form = eval( "document." + formName );
	if ( form == null )
		{ alert( "Error: mxCount() Could not find form '" + formName +"'."  ); return; }

	var field = eval( "document." + formName + "." + fieldName )
	if ( fieldName == null )
		{ alert( "Error: mxCount() Could not find input '" + fieldName +"' for form '" + formName +"'."  ); return; }

	if ( value.length > 0 )
	{
		var items = value.split( ',' );
		//alert( "DEBUG: mxCount() Found " + items.length + " items." );
		field.value = ( items.length == 1 ) ? ( items.length + oneText ) : ( items.length + moreText );
	}
}



/*****************************************************************************
 * Function:		mxSetInfo
 * Description:		Puts some initial information into a field.
 *
 ****************************************************************************/
function mxSetInfo( formName, fieldName, info )
{
	//alert( "DEBUG: mxSetInfo( '"+formName+"','"+fieldName+"','"+info+"')" )
 	var form = eval( "document." + formName );
	if ( form == null )
		{ alert( "Error: mxSetInfo() Could not find form '" + formName +"'."  ); return; }

	var field = eval( "document." + formName + "." + fieldName )
	if ( fieldName == null )
		{ alert( "Error: mxSetInfo() Could not find input '" + fieldName +"' for form '" + formName +"'."  ); return; }

	field.value = info;
	field.defaultValue = info;
	field.onfocus = mxAutoClearInfo;	// Set to auto-clear on focus
}

/*****************************************************************************
 * Function:		mxAutoClearInfo
 * Description:		Auto clears initial information
 *
 ****************************************************************************/
function mxAutoClearInfo()
{
	if ( this.value == this.defaultValue ) { this.value=""; }
}

//-->
