LRESULT CServiceRequirementDlg::OnMsgComboChange(WPARAM wParam, LPARAM lParam)
{
	int nComboxSel = (int)wParam;
	if (nComboxSel == LB_ERR)
		return 0;

	if (NULL == m_pServicingRequirement)
	{
		return 0;
	}


	LV_DISPINFO* pDispInfo = (LV_DISPINFO*)lParam;
	LV_ITEM* plvItem = &pDispInfo->item;

	int nItem = plvItem->iItem;
	int nSubItem = plvItem->iSubItem;
	if (nItem < 0)
		return 0;

	switch(nSubItem)
	{
	case 2:
		{
			ProbabilityDistribution* pProbDist = NULL;
			CProbDistManager* pProbDistMan = m_pInputAirside->m_pAirportDB->getProbDistMan();

			//if select the first item
			if( nComboxSel == 0 )
			{
				CProbDistEntry* pPDEntry = NULL;
				pPDEntry = (*m_pSelectProbDistEntry)(NULL, m_pInputAirside);
				if(pPDEntry == NULL)
					return 0;
				pProbDist = pPDEntry->m_pProbDist;
				assert( pProbDist );

				CString strDistName = pPDEntry->m_csName;
				//if(strDistName == m_strDistName)
				//	return;

				//m_strDistName = strDistName;
				char szBuffer[1024] = {0};
				pProbDist->screenPrint(szBuffer);
				m_pServicingRequirement->SetDistScreenPrint(szBuffer);
				m_pServicingRequirement->SetProbTypes((ProbTypes)pProbDist->getProbabilityType());
				pProbDist->printDistribution(szBuffer);
				m_pServicingRequirement->SetPrintDist(szBuffer);

				//m_strDistScreenPrint = szBuffer;
				//----------------
				//int nIndex = 0;
				//if ((nIndex=m_ComBoDistribution.FindString(nIndex, m_strDistName)) != CB_ERR)
				//	m_ComBoDistribution.SetCurSel( nIndex );	
				//else
				//{
				//	nIndex = m_ComBoDistribution.AddString(m_strDistName);
				//	m_ComBoDistribution.SetCurSel(nIndex);
				//}
				InitServiceTimeList();

				m_ListFltTypeServiceRequirement.SetItemText(plvItem->iItem, plvItem->iSubItem, strDistName);
				m_pServicingRequirement->SetServiceTime(strDistName);

			}
			else
			{
				map<int, CString>::const_iterator iter = m_ServiceTimeMap.find(nComboxSel);
				CString strServiceTime = iter->second;
				m_pServicingRequirement->SetServiceTime(strServiceTime);

				CProbDistEntry* pPDEntry = NULL;
				int nCount = pProbDistMan->getCount();
				for( int i=0; i<nCount; i++ )
				{
					pPDEntry = pProbDistMan->getItem( i );
					if( strcmp( pPDEntry->m_csName, strServiceTime ) == 0 )
						break;
				}
				//assert( i < nCount );
				pProbDist = pPDEntry->m_pProbDist;
				assert( pProbDist );
				char szBuffer[1024] = {0};
				pProbDist->screenPrint(szBuffer);
				m_pServicingRequirement->SetDistScreenPrint(szBuffer);
				m_pServicingRequirement->SetProbTypes((ProbTypes)pProbDist->getProbabilityType());
				pProbDist->printDistribution(szBuffer);
				m_pServicingRequirement->SetPrintDist(szBuffer);
			}
		}
		break;

	case 3:
		{
			ProbabilityDistribution* pProbDist = NULL;
			CProbDistManager* pProbDistMan = m_pInputAirside->m_pAirportDB->getProbDistMan();

			//if select the first item
			if( nComboxSel == 0 )
			{
				CProbDistEntry* pPDEntry = NULL;
				pPDEntry = (*m_pSelectProbDistEntry)(NULL, m_pInputAirside);
				if(pPDEntry == NULL)
					return 0;
				pProbDist = pPDEntry->m_pProbDist;
				assert( pProbDist );

				CString strDistName = pPDEntry->m_csName;
				//if(strDistName == m_strDistName)
				//	return;

				//m_strDistName = strDistName;
				char szBuffer[1024] = {0};
				pProbDist->screenPrint(szBuffer);
				m_pServicingRequirement->SetSubDistScreenPrint(szBuffer);
				m_pServicingRequirement->SetSubProbTypes((ProbTypes)pProbDist->getProbabilityType());
				pProbDist->printDistribution(szBuffer);
				m_pServicingRequirement->SetSubPrintDist(szBuffer);

				//m_strDistScreenPrint = szBuffer;
				//----------------
				//int nIndex = 0;
				//if ((nIndex=m_ComBoDistribution.FindString(nIndex, m_strDistName)) != CB_ERR)
				//	m_ComBoDistribution.SetCurSel( nIndex );	
				//else
				//{
				//	nIndex = m_ComBoDistribution.AddString(m_strDistName);
				//	m_ComBoDistribution.SetCurSel(nIndex);
				//}
				InitServiceTimeList();

				m_ListFltTypeServiceRequirement.SetItemText(plvItem->iItem, plvItem->iSubItem, strDistName);
				m_pServicingRequirement->SetSubServiceTime(strDistName);

			}
			else
			{
				map<int, CString>::const_iterator iter = m_ServiceTimeMap.find(nComboxSel);
				CString strServiceTime = iter->second;
				m_pServicingRequirement->SetSubServiceTime(strServiceTime);

				CProbDistEntry* pPDEntry = NULL;
				int nCount = pProbDistMan->getCount();
				for( int i=0; i<nCount; i++ )
				{
					pPDEntry = pProbDistMan->getItem( i );
					if( strcmp( pPDEntry->m_csName, strServiceTime ) == 0 )
						break;
				}
				//assert( i < nCount );
				pProbDist = pPDEntry->m_pProbDist;
				assert( pProbDist );
				char szBuffer[1024] = {0};
				pProbDist->screenPrint(szBuffer);
				m_pServicingRequirement->SetSubDistScreenPrint(szBuffer);
				m_pServicingRequirement->SetSubProbTypes((ProbTypes)pProbDist->getProbabilityType());
				pProbDist->printDistribution(szBuffer);
				m_pServicingRequirement->SetSubPrintDist(szBuffer);
			}
		}
		break;
	//condition
	case 4:
		{
			enumVehicleTypeCondition nConditionType = enumVehicleTypeCondition_Per100Liters;
			if (nComboxSel >= enumVehicleTypeCondition_Per100Liters && nComboxSel < enumVehicleTypeCondition_Count)
			{
				nConditionType = (enumVehicleTypeCondition)nComboxSel;
			}

			m_pServicingRequirement->SetConditionType(nConditionType);
		}
	    break;

	default:
	    break;
	}

	//InitListCtrl();
	SetListContent(false);

	GetDlgItem(IDC_BUTTON_SAVE)->EnableWindow(TRUE);

	return 0;
}
void   CDlgDepartureSlotSpec::OnSelComboBox(NMHDR*   pNMHDR,   LRESULT*   pResult)     
{     	
	
	LV_DISPINFO* dispinfo = (LV_DISPINFO * )pNMHDR;
	if(m_nColumnSel == 1)
		return;
	*pResult = 0;
	if(!dispinfo)
		return;

	if(!m_pDepSlotSpec)return;	
	DepartureSlotItem* pItem = m_pDepSlotSpec->GetItem(m_nRowSel);
	if(!pItem)return;
	// TODO: Add your control notification handler code here	 
	CString strSel;
	strSel = dispinfo->item.pszText;

	char szBuffer[1024] = {0};
	ProbabilityDistribution* pProbDist = NULL;
	CProbDistManager* pProbDistMan = m_pInputAirside->m_pAirportDB->getProbDistMan();
	if(strSel == _T("New Probability Distribution..." ) )
	{
		CProbDistEntry* pPDEntry = NULL;
		pPDEntry = (*m_pSelectProbDistEntry)(NULL, m_pInputAirside);
		if(pPDEntry == NULL)
		{
			if(m_nColumnSel == 3)
				m_wndListCtrl.SetItemText(m_nRowSel,m_nColumnSel,pItem->GetFirstSlotDelayProDisName());
			else if(m_nColumnSel == 4)
				m_wndListCtrl.SetItemText(m_nRowSel,m_nColumnSel,pItem->GetInterSlotDelayProDisName());
			return;
		}
		pProbDist = pPDEntry->m_pProbDist;
		assert( pProbDist );
		CString strDistName = pPDEntry->m_csName;

		pProbDist->printDistribution(szBuffer);
		if(m_nColumnSel == 3)//First Slot Delay
		{
			pItem->SetFirstSlotDelayProDisName(strDistName);
			pItem->SetFirstSlotDelayProDisType((ProbTypes)pProbDist->getProbabilityType());
			pItem->SetFirstSlotDelayPrintDis(szBuffer);
			m_wndListCtrl.SetItemText(m_nRowSel,m_nColumnSel,strDistName);
		}
		else if(m_nColumnSel == 4)//Inter Slot Delay
		{
			pItem->SetInterSlotDelayProDisName(strDistName); 
			pItem->SetInterSlotDelayProDisType((ProbTypes)pProbDist->getProbabilityType());
			pItem->SetInterSlotDelayPrintDis(szBuffer);
			m_wndListCtrl.SetItemText(m_nRowSel,m_nColumnSel,strDistName);
		}  	
	}
	else
	{
		//if(m_strDistName == strSel)
		//	return;
		CProbDistEntry* pPDEntry = NULL;

		int nCount = pProbDistMan->getCount();
		for( int i=0; i<nCount; i++ )
		{
			pPDEntry = pProbDistMan->getItem( i );
			if(pPDEntry->m_csName == strSel)
				break;
		}
		//assert( i < nCount );
		pProbDist = pPDEntry->m_pProbDist;
		assert( pProbDist );

		CString strDistName = pPDEntry->m_csName;	
		pProbDist->printDistribution(szBuffer);
		if(m_nColumnSel == 3)//First Slot Delay
		{
			pItem->SetFirstSlotDelayProDisName(strDistName);
			pItem->SetFirstSlotDelayProDisType((ProbTypes)pProbDist->getProbabilityType());
			pItem->SetFirstSlotDelayPrintDis(szBuffer);
			m_wndListCtrl.SetItemText(m_nRowSel,m_nColumnSel,strDistName);
		}
		else if(m_nColumnSel == 4)//Inter Slot Delay
		{
			pItem->SetInterSlotDelayProDisName(strDistName); 
			pItem->SetInterSlotDelayProDisType((ProbTypes)pProbDist->getProbabilityType());
			pItem->SetInterSlotDelayPrintDis(szBuffer);
			m_wndListCtrl.SetItemText(m_nRowSel,m_nColumnSel,strDistName);
		}  			 
	} 
}