
// This function toggles the expanded arrow open/closed when clicked on
// It also maintains the toggle state with a hidden input (hiddenOpenField)
// so it can maintain it on a submit
function toggleArrow( elementName, show ) {
    var elementHTML = $(elementName).innerHTML;
    var hiddenOpenField = $( elementName+'_ACTIVE' );
    if( show || hiddenOpenField.value=='' || hiddenOpenField.value=='false'){ 
        setArrowDown( elementName );
        hiddenOpenField.value='1';
    } else {
	    setArrowRight( elementName )
        hiddenOpenField.value='';
    }

	// Show the "expand all" and "collapse all" buttons if they exist.
	if (document.getElementById("EXPANDALL") != null) {
		Element.show(EXPANDALL);
	}
	if (document.getElementById("COLLAPSEALL") != null) {
		Element.show(COLLAPSEALL);
	}
}

function setArrowRight( elementName ) {
   	var hiddenOpenField = $( elementName+'_ACTIVE' );
  	hiddenOpenField.value='';
    Element.update( elementName, rightArrow );
}

function setArrowDown( elementName ) {
   	var hiddenOpenField = $( elementName+'_ACTIVE' );
    hiddenOpenField.value='1';
    Element.update( elementName, downArrow );
}

function expandAll() {
	// Expand all menus. Hide the "expand all" button and show the "collapse all" button if they exist.
	var spanArray = document.getElementsByTagName('span'); 
	for(var i = 0; i < spanArray.length; i++) { 
		if (spanArray[i].getAttribute('class') == 'arrow' ||
				spanArray[i].getAttribute('className') == 'arrow') { 
			Element.show(spanArray[i].id.replace(/_TOGGLE/, '')); 
			setArrowDown(spanArray[i].id); 
		} 
	}
	if (document.getElementById("EXPANDALL") != null) {
		Element.hide(EXPANDALL);
	}
	if (document.getElementById("COLLAPSEALL") != null) {
		Element.show(COLLAPSEALL);
	}
}

function collapseAll() {
	// Collapse all menus. Hide the "collapse all" button and show the "expand all" button if they exist.
	var spanArray = document.getElementsByTagName('span'); 
	for(var i = 0; i < spanArray.length; i++) { 
		if (spanArray[i].getAttribute('class') == 'arrow' ||
				spanArray[i].getAttribute('className') == 'arrow') { 
			Element.hide(spanArray[i].id.replace(/_TOGGLE/, '')); 
			setArrowRight(spanArray[i].id); 
		} 
	}
	if (document.getElementById("EXPANDALL") != null) {
		Element.show(EXPANDALL);
	}
	if (document.getElementById("COLLAPSEALL") != null) {
		Element.hide(COLLAPSEALL);
	}
}

function showMenu( menuId, tabArray, tabName ) {
    // Hide all menus
    try{
        for ( var cnt = 0; cnt < tabArray.length; cnt++ ) {
            Element.hide( tabArray[cnt] );
            setClassName( tabArray[cnt] + 'TAB', '' );
        }
        setClassName( tabName + 'TAB', 'active' );
        Element.show( tabName );// Expand the special options section and arrow if hidden
        var hiddenTabField = $( menuId+'_ACTIVE_TAB' );
        hiddenTabField.value=tabName;
    } catch ( e ) {
        alert( e + ' ' + e.stack ) ;
    }
}

function setClassName( elementName, newClassName ) {
    var tmp = $( elementName );
    if( tmp != null ) {
        tmp.className = newClassName;
    }
}

function handleDelete( buttonName, hiddenIdName, deleteValue ) {
    var inputElement = $(hiddenIdName);
    if( inputElement.value != null && ( inputElement.value == deleteValue ) ) {
        // Button was already marked for deletion, need to 'undelete'
        inputElement.value='';
        setClassName( buttonName, 'trashcan' );
    } else {
        // Button was not marked for deletion, need to 'delete'
        inputElement.value=deleteValue;
        setClassName( buttonName, 'trashcanDeleted' );
    }

}


function Select_Value_Set(SelectName, Value) {
  eval('SelectObject = document.' + 
    SelectName + ';');
  for(index = 0; 
    index < SelectObject.length; 
    index++) {
   if(SelectObject[index].value == Value)
     SelectObject.selectedIndex = index;
   }
} 

function Radio_Value_Set(RadioName, Value) {
  eval('RadioObject = document.' + RadioName + ';');
  for(index = 0; index < RadioObject.length; index++) {
   if(RadioObject[index].value == Value) {
     RadioObject[index].checked = true;
    // Call the radio's onclick method to force processing in list view when changed in icon view
    if( RadioObject[index].onclick != null ) {
     RadioObject[index].onclick();
    }
   }
  }
}

function IconHoverOver( HoverName ){
	var HoverObject = document.getElementById( HoverName );
	if( HoverObject.className != 'pictogramSelect' ){
		HoverObject.className = 'pictogramHover';
	}
}

function IconHoverOut( HoverName ){
	var HoverObject = document.getElementById( HoverName );
	if( HoverObject.className != 'pictogramSelect' ){
		HoverObject.className = '';
	}
}

function IconSelect( OldSelectedName, NewSelected ){

	if ( OldSelectedName != '' ){
		eval( 'OldSelected = ' + OldSelectedName );
	} else {
			eval( 'OldSelected = \'\'');
	}
	var NewObject = document.getElementById( NewSelected );
	NewObject.className = 'pictogramSelect';
	if ( OldSelected != ''){
		if ( OldSelected != NewSelected){
			var OldObject = document.getElementById( OldSelected );	
			OldObject.className = '';
		}
	}

	eval ( OldSelectedName + ' =  \'' + NewSelected + '\'' );
	
}

function IconViewReset( iconType, rowID ){
	var currentMenu = '';
	var currentOption = '';
	eval ( 'RadioObject = document.rsaForm.' + iconType + 'MenuID' + rowID );
	for(index = 0; index < RadioObject.length;   index++) {
	  if( RadioObject[index].checked == true ){
	    currentMenu = RadioObject[index].value;
	  }
	}
	if ( currentMenu != '' ){
		eval ( 'SelectObject = document.rsaForm.' + iconType + 'OptionID' + rowID + '_' + currentMenu );
		currentOption = SelectObject.value;
		var currentItem = 'Icon' + iconType + rowID + '_' + currentOption;
	} else {
		var currentItem = 'Icon' + iconType + rowID + '_None';
	}
	IconSelect( 'Icon'+ iconType + rowID , currentItem ); 
}

function getSelectedRadioIndex( radioName ) {
	var menuIndex = 0;
	var undefined;
	var localTmp = eval( "document.rsaForm."+radioName );
	if ( localTmp != undefined ) {
		for(var i=0; i<localTmp.length; i++) {
			if (localTmp[i].checked) {
				menuIndex=i;
				break;
			}
		}
	}
	return menuIndex;
}

function getSelectedRadioValue( radioName ) {
	var menuIndex = 0;
	var returnValue = 0;
	var undefined;
	var localTmp = eval( "document.rsaForm."+radioName );
	if ( localTmp != undefined ) {
		for(var i=0; i<localTmp.length; i++) {
			if (localTmp[i].checked) {
				menuIndex=i;
				break;
			}
		}
		if ( localTmp[menuIndex] != undefined ) {
		    returnValue = localTmp[menuIndex].value;
		} else {
		    returnValue = undefined;
		}
	}
	return returnValue;
}

function stepwiseCheckEnter( event, buttonId ) {
	if( event.keyCode == 13 ){
		document.getElementById( buttonId ).click();
		return false;
	} else {
		return true;
	}
}

function getElementsByNameBadDom( tag, name ) {
 var elemsByTag = document.getElementsByTagName( tag );
 var elemsByName = new Array();
 for(var index = 0; index < elemsByTag.length; index++) {
  if( elemsByTag[index].getAttribute("name") == name ) {
   elemsByName[elemsByName.length] = elemsByTag[index];
  }
 }
 return elemsByName;
}

function onEnterPressButton( event, buttonName ) {
	if( event.keyCode == 13 ){
		var buttons = document.getElementsByName( buttonName );
		if( buttons.length == 0 ) {
			buttons = getElementsByNameBadDom( "input", buttonName )
		}
		if( buttons.length == 0 ) {
			buttons = getElementsByNameBadDom( "button", buttonName )
		}
		if( buttons.length > 0 ) {
			buttons[0].click();
		}
		return false;
	} else {
		return true;
	}
}

function blurOnEnter(event, element) {
	var keycode = 0;
	if( event != null && event.keyCode != null ) {
		keycode = event.keyCode;
	} else {
		keycode = window.event.keyCode;
	}
	if( keycode == 13 ){
                element.blur();
		return false;
	} else {
		return true;
	}
}

function MultiSelector( list_target ){
	this.list_target = list_target;
	this.count = 0;
	this.id = 0;
}

MultiSelector.prototype.addElement = function( element, prefix ) {
	// Make sure it's a file input element
	if( element.tagName == 'INPUT' && element.type == 'file' ){
		element.id = prefix + this.id;
		element.name = prefix + this.id++;
		element.size = 30;
		element.tabIndex = 0;
		element.value = '';
		element.multi_selector = this;
        element.onkeypress = function(event) {
                return blurOnEnter( event, this );
        };
		element.onchange = function(){
			var new_element = document.createElement( 'input' );
			new_element.type = 'file';
			this.parentNode.insertBefore( new_element, this );
			this.multi_selector.addElement( new_element, prefix );
			this.multi_selector.addListRow( this );
			// is there a better way to hide this thing?
			this.style.position = 'absolute';
			this.style.left = '-1000px';
		};
		this.count++;
		this.current_element = element;
	} else {
		alert( 'Error: not a file input element' );
	};
}

MultiSelector.prototype.addListRow = function( element ){
	// Row div
	var new_row = document.createElement( 'div' );
	new_row.element = element;

	// Delete button
	var new_row_button = document.createElement( 'input' );
	new_row_button.type = 'button';
	new_row_button.value = 'Delete';

	// Delete function
	new_row_button.onclick= function(){
		this.parentNode.element.parentNode.removeChild( this.parentNode.element );
		this.parentNode.parentNode.removeChild( this.parentNode );
		this.parentNode.element.multi_selector.count--;
		this.parentNode.element.multi_selector.current_element.disabled = false;
		return false;
	};
	new_row.innerHTML = element.value + "&nbsp;";
	new_row.appendChild( new_row_button );
	this.list_target.appendChild( new_row );
}

function hideItem( id ) {
    var elem = document.getElementById( id );
    var elemArrow = document.getElementById( id + "_arrow" );
    if( elem.style.display == 'none' ) {
        elem.style.display = 'inline';
        elemArrow.src = "/images/arrow_collapse.gif";
    } else {
        elem.style.display = 'none';
        elemArrow.src = "/images/arrow_expand.gif";
    }
}

/**
 * This function is used for enabling and disabling elements on the user details page when an entitlement
 * is selected or deselected
 * @param elementNames an array of names of the elements to be toggled
 */
function userDetailsEntitlementToggle(elementNames,manualOverrideName,entitlementSelectName,calendarButtonDivID){
	return function(){
		var elements = elementNames;
		var disabled = false;
		var manualOverride = document.getElementsByName(manualOverrideName)[0];
		var entitlementSelect = document.getElementsByName(entitlementSelectName)[0];
		if( entitlementSelect.value != "" && (!manualOverride || (manualOverride && !manualOverride.checked)) ){
			disabled = true;
		} 
		elements.each(function(elementName){
			$A(document.getElementsByName(elementName)).each(function(element){
				element.disabled = disabled;
			});
		});
		var calendarButtonDiv = document.getElementById(calendarButtonDivID);
		if( disabled ){
			calendarButtonDiv.style.visibility = 'hidden';
		} else {
			calendarButtonDiv.style.visibility = 'visible';
		}
	}
}

/*
 * This function enables/disables elements in elementNames based on the value
 * of the "Pay By Credit Card" checkbox.
 */
function externalAcctCodesToggle(elementNames, payByCreditCard) {
	return function () {
		var elements = elementNames;
		var disabled = false;
		
        //If the Pay By Credit Card box is checked, disable fields in elementNames 		
		if (document.getElementsByName(payByCreditCard)[0].checked){
		    disabled = true;
		}		
		
		elements.each(function(elementName){
			$A(document.getElementsByName(elementName)).each(function(element){
				if (disabled == true){
 			        element.value = "";
 			    }
				element.disabled = disabled;
			});
		});		
	}	
}

/**
 * These functions are used to prevent double submissions when a user clicks a button more than once
 */
var g_iSubmitAttempts = 0;

/**
 * getCmdSubmitAttempts
 *
 * Params:  none
 *
 */
function getCmdSubmitAttempts()
{
    try {
        return g_iSubmitAttempts
    } catch(err) {}
}

/**
 * initCmdSubmitAttempts
 *
 * Params:  none
 *
 */
function initCmdSubmitAttempts()
{
    try {
        g_iSubmitAttempts = 1
    } catch(err) {}
}

/**
 * incrementCmdSubmitAttempts
 *
 * Params:  none
 *
 */
function incrementCmdSubmitAttempts()
{
    try {
        g_iSubmitAttempts++
    } catch(err) {}
}

/**
 * clearCmdSubmitAttempts
 *
 * Params:  none
 *
 */
function clearCmdSubmitAttempts()
{
    g_iSubmitAttempts = 0
}

/**
 * setActionAndSubmit
 *
 * Performs pre-submit actions, then submits the form.
 *
 * Params: sAction - the name of the name/value pair sent to the server to command it to perform a specific action.
 *          If this is blank, the view will perform a "default" action (usually "persist data and show data").
 *
 * Returns: true if submit occurred, false if not.  Callers may optionally use this value to determine if the
 *          submit actually happened.
 *
 */
function setActionAndSubmit(alertText)
{
    var ok2Submit = false;

    if ( !cmdSubmitInProgress(alertText) ) {
        // DON'T ADD CODE ABOVE THIS POINT IN THE FUNCTION...  ADD IT BELOW THE initCmdSubmitAttempts() LINE

		if (typeof customOnSubmitAction == 'function')
		{ 
	        // Run the custom submit checker first (used in XSL template at a minimum)
			ok2Submit = eval('customOnSubmitAction();');
		} else {
	        // Let the submit take place
			ok2Submit = true;
		}

		if ( ok2Submit ) {
	        initCmdSubmitAttempts();

	        // Set hourglass cursor
	        document.body.style.cursor = 'wait';
	    }
    }

    return ok2Submit;
}


/**
 * cmdSubmitInProgress
 *
 * Params:  none
 *
 */
function cmdSubmitInProgress(alertText)
{
    var bInProgress = false

    if ( getCmdSubmitAttempts() > 0 &&
         getCmdSubmitAttempts() < 4 )
    {
        // Let them submit after 2 clicks, even if another submit in progress
        alert (alertText)

        // Reset only if it still remains > 0 even after JS popup has displayed (page has not yet reloaded)
        if (getCmdSubmitAttempts() > 0)
        {
            incrementCmdSubmitAttempts()
        }

        bInProgress = true
    }

    return bInProgress
}

function addressDelete( doubleClickText, deleteWarningText ) 
{
    if( getCmdSubmitAttempts() > 0 )
    {
	alert( doubleClickText );
	return false;
    }

    if( confirm( deleteWarningText ) )
    {
	incrementCmdSubmitAttempts()
	return true;
    }

    return false;
}


function openNewWindow( link, index ) {
  newwin = window.open( link, index, 
		'height=600,width=700,scrollbars,resizable')
  if (window.focus) { newwin.focus() }
}

function checkMaxLength( elem, maxLength ) {
  if( elem.value.length > maxLength ) {
    elem.value = elem.value.substring( 0, maxLength );
    return false;
  }
  return true;
}

function niftyCall() {
  var hidden = null;
  var doNifty = true;
  var niftySelector = "div.smallButton,div.normalButton,div.bigButton,div.psmButton,div.proxyOrderButton";
  if( isSafari() ) {
    // The max button count of 60 was chosen to minimize potential slowdown due to rounding corners.
    // It took approximately 10 seconds to round the corners of 60 buttons using 192.9.200.24 
    // on Safari on the Place an Order page; tests showed the time to corner buttons increasing
    // very quickly beyond 60, taking approximately 125 seconds for 200 buttons
    if( $$(niftySelector).size() < 60 ) {
      hidden = $$("div[style*='display: none']:not([name^=topMenu])");
      hidden.each(function(elem){elem.show();});
    } else {
      doNifty = false;
    }
  }
  if( doNifty ) {
    Nifty(niftySelector, "transparent small");
  }
  if( hidden != null ) {
    hidden.each(function(elem){elem.hide();});
  }
}

function roundCorners( el ) {
  if( el.addEventListener ){
    el.addEventListener('load', niftyCall, false);
  } else {
    el.attachEvent('onload', niftyCall);
  }
}
        
//Bug fix 2204 - PSM: Need to convert uploaded documents using CentralPDF
function uncheck(field) {
	field.checked = false
}

function showConflictingOptionsWarning(bindingItem, foldingItem, alreadyAlerted, alertMessage) {
	var alreadyAlertedReturnValue = alreadyAlerted;

	for (i=0; i < bindingItem.length; i++)
		if ( bindingItem[i].checked)
			bindingItemValue = bindingItem[i].value;

	for (i=0; i < foldingItem.length; i++)
		if (foldingItem[i].checked)
			foldingItemValue = foldingItem[i].value;
	
	if ( (bindingItemValue != '') && (foldingItemValue != '') && (alreadyAlerted == false) ) {
		alert(alertMessage);
		alreadyAlertedReturnValue = true;
	}

	return alreadyAlertedReturnValue;
}

function toggleInlineVisibility( el ) {
 toggleVisibility( el, "inline" );
}

function toggleBlockVisibility( el ) {
 toggleVisibility( el, "block" );
}

function toggleVisibility( el, visible ) {
 if( el.style.display == "none" ) {
  el.style.display = visible;
 } else {
  el.style.display = "none";
 }
}

function isSafari() {
 if( navigator.vendor != null ) {
   return ( navigator.vendor.indexOf("Apple") != -1 );
 }
 return false;
}