
function getSelected( obj ) {
var strSelected, strValues;

	if ( obj.options == null ) {
		strSelected = obj.value;
	} else {
		strSelected = obj.options[ obj.selectedIndex ].value;
	}

	if ( strSelected.indexOf( ';' ) > -1 ) {
		strValues = strSelected.split( ';' );
		strSelected = strValues[ 1 ];  // get selected display value
	}

return strSelected;
}

// getElSelected
function getElSelected( strElement, blnAllowHidden ) {
var obj;

	obj = getEl( strElement );
	if ( obj == null ) return obj;
	
	if ( !blnAllowHidden ) {
		if ( obj.style.visibility == 'hidden' ) return null;
	}

return obj;
}

// Sync programs to selected center. 
function sync_programs( strProgramElement, strProgramSelected, blnAllowHiddenPrg, strCenterElement, strCenterSelected, blnAllowHiddenCtr, blnOnLoad ) {

var obj, strValues, strSelected, blnAllSelected, blnSelected, intOption, intCenter, intCenters, intSelected;
var strOrgans, strOrg, strOrgValue, strDisplay;
		
		obj = getElSelected( 'category', false );
		if ( obj == null ) return null;
		
		strSelected = getSelected(obj);
		if (strSelected == 'Transplant') {
			obj = getElSelected( strCenterElement, blnAllowHiddenCtr );
			if ( obj == null ) return null;
			
			if ( blnOnLoad ) {
				strSelected = strCenterSelected;
			} else {
				strSelected = getSelected( obj );
			}
			
			if ( obj.selectedIndex == 0 ) {
				intCenter = 0;
			} else {
				for ( intCenter = 0; intCenter < strCenter.length; intCenter++ ) {
					if ( strSelected == strCenter[ intCenter ] ) {
						break;
					}
				}
			}

			obj = getElSelected( strProgramElement, blnAllowHiddenPrg );
			if ( obj == null ) return null;
			
			if ( blnOnLoad ) {
				strSelected = strProgramSelected;
			} else {
				strSelected = getSelected( obj );
			}
			
			strOrgans = strCenterProgram[ intCenter ].split( ';' );

			blnAllSelected = ( strSelected == '' );
			obj.options.length = 0;
			intSelected = -1;
			
			for ( intOption = 1, intNewOption = 1; intOption < strOrgans.length; intOption++ ) {

				blnSelected = ( strSelected == strOrgans[ intOption ] );
				if ( blnSelected ) intSelected = intNewOption;
				
				strOrg = strOrgans[ intOption ];
				strOrgValue = strOrg + ';' + strOrg + ';8;Organ;Organ';
				obj.options[ intNewOption ] = new Option( strOrg, strOrgValue, blnSelected, blnSelected );

				intNewOption ++ ;
			} // for

			strDisplay = strOrgans[0] + ' (' + ( intNewOption - 1 ).toString() + ')';
			obj.options[ 0 ] = new Option( strDisplay, '', blnAllSelected, blnAllSelected );

			if ( intSelected > 0 )	// should not be necessary
				obj.selectedIndex = intSelected;
		}
}

// Sync centers to selected program. 
function sync_centers( strCenterElement, strCenterSelected, blnAllowHiddenCtr, strProgramElement, strProgramSelected, blnAllowHiddenPrg, blnOnLoad ) {

var obj, strValues, strSelected, strSelectedOrg, blnAllSelected, blnSelected, intSelected;
var intOption, strCtr, strCtrValue, intOrg, intOrgIndex, blnFound, strDisplay;
var strCenterElements, strCenterSelects, intCenter, intMaxCenters;


	strCenterElements = strCenterElement.split( ';' );
	intMaxCenters = strCenterElements.length;
	strCenterSelects = strCenterSelected.split( ';' );
	
	for ( intCenter = 0; intCenter < intMaxCenters; intCenter++ ) {

		strCenterElement = strCenterElements[ intCenter ];
		strCenterSelected = strCenterSelects[ intCenter ];

		intOrgIndex = 0;
		obj = getElSelected( strProgramElement, blnAllowHiddenPrg );
		if ( obj == null ) return null;
		
		if ( blnOnLoad ) {
			strSelectedOrg = strProgramSelected;
		} else {
			strSelectedOrg = getSelected( obj );
		}
		
		if ( obj.options != null ) {
			intOrgIndex = obj.selectedIndex
		} 

		obj = getElSelected( strCenterElement, blnAllowHiddenCtr );
		if ( obj == null ) return null;

		if ( blnOnLoad ) {
			strSelected = strCenterSelected;
		} else {
			strSelected = getSelected( obj );
		}

//		strOrgans = strCenterProgram[ intCenter ].split( ';' );

		blnAllSelected = ( strSelected == '' );
		obj.options.length = 0;
		intSelected = -1;

		for ( intOption = 1, intNewOption = 1; intOption < strCenter.length; intOption++ ) {

			blnFound = false;
			
			if ( intOrgIndex == 0 ) {
				blnFound = true;
			} else {
				strValues = strCenterProgram[ intOption ].split( ';' );
			
				for ( intOrg = 0; intOrg <  strValues.length; intOrg++ ) {
					if ( strValues[ intOrg ] == strSelectedOrg ) {
						blnFound = true;
					}
				}
			}

			if ( !blnFound ) continue;
			
			strCtr = strCenter[ intOption ];
			blnSelected = ( strSelected == strCtr );
			if ( blnSelected ) intSelected = intNewOption;

			strCtrValue = strCtr + ';' + strCtr + ';305;TXC;TXC';
			obj.options[ intNewOption ] = new Option( strCtr, strCtrValue, blnSelected, blnSelected );

			intNewOption ++ ;
		} // for

		strDisplay = strCenter[0] + ' (' + ( intNewOption - 1 ).toString() + ')';
		obj.options[ 0 ] = new Option( strDisplay, '', blnAllSelected, blnAllSelected );

		if ( intSelected > 0 )	// should not be necessary
			obj.selectedIndex = intSelected;
	} // for

}
