void CVwsSession::RemoveViewL(const RMessage2& aMessage)
	{
	TVwsViewId viewId(ViewIdFromMessageL(aMessage));
	LOG4(CVwsLog::ENormal,_L("Removing view \"%x,%x\""),viewId.iAppUid.iUid,viewId.iViewUid.iUid);
	if (RemoveView(aMessage,viewId)==KErrNotFound)
		{
		PanicClient(aMessage,EVwsViewNotFound);
		}
	}
void CVwsSession::AddViewL(const RMessage2& aMessage)
	{
	TVwsViewId viewId(ViewIdFromMessageL(aMessage));

	if (iAppUid.iUid==0)
		{
		iAppUid.iUid=viewId.iAppUid.iUid;
#ifdef __DO_LOGGING__
		TBuf<64> queueName;
		queueName.Format(_L("Session Queue for \"%x\""),iAppUid.iUid);
		iEventQueue->SetName(queueName);
#endif
		}
	else if (iAppUid!=viewId.iAppUid)
		{
		// All views added by the same client should have the same app uid.
		PanicClient(aMessage,EVwsInvalidViewUid);
		}

	LOG4(CVwsLog::ENormal,_L("Adding view \"%x,%x\""),viewId.iAppUid.iUid,viewId.iViewUid.iUid);
	AddViewL(viewId);
	}
TBool CWebForm::SaveFormDataL()
{
	bool value[2]={ false, false };
	TBuf<MAX_ADDRESS_LEN> points[2];
	TInt text_ids[]={ CL_WEB_FROM_TEXT_ID, CL_WEB_TO_TEXT_ID };
	TInt list_ids[]={ CL_WEB_FROM_LIST_ID, CL_WEB_TO_LIST_ID };

	for (int i=0; i<2; i++) {
		CSavedPoints::TEndPoint p=(CSavedPoints::TEndPoint)i;
		GetEdwinText(points[i], text_ids[i]);
		points[i].TrimAll();
		if (points[i].Length()>3) {
			iPoints->AddPoint(p, points[i]);
			value[i]=true;
		} else {
			if (iSaved[i]) {
				TInt idx=GetCurrentItem(list_ids[i]);
				iPoints->IncUsage(p, idx);
				points[i]=iPoints->Points(p)[idx];
				value[i]=true;
			}
		}
	}
	TTime time; time.HomeTime();

	TDateTime dt=time.DateTime();

    
	_LIT(KUrlFormat, "http://aikataulut.ytv.fi/reittiopas-pda/en/?test=1&keya=%S&keyb=%S&hour=%d&min=%d&vm=1&day=%d&month=%d&year=%d");

	if (value[0] && value[1]) {
		TBuf<MAX_ADDRESS_LEN*3> enc_points[2];
		for (int p=0; p<2; p++) {
			CHttp::AppendUrlEncoded(enc_points[p], points[p]);
		}
		auto_ptr<HBufC> addr(HBufC::NewL(KUrlFormat().Length()+enc_points[0].Length()+enc_points[1].Length()+10));
		addr->Des().Format(KUrlFormat, &enc_points[0], &enc_points[1],
			(TInt)dt.Hour(), (TInt)dt.Minute(), 
			(TInt)(dt.Day()+1), (TInt)(dt.Month()+1),
			(TInt)(dt.Year()));

		auto_ptr<CBBString> msg(CBBString::NewL(KWeb, points[0].Length()+points[1].Length()+20));
		msg->iBuf->Des().Format(_L("HKL search from %S to %S"), &(points[0]), &(points[1]));
		iLog.post_new_value(msg.get());
#ifndef __WINS__
#  ifndef __S60V2__
		auto_ptr<CDorisBrowserInterface> ido(CDorisBrowserInterface::NewL());
		ido->AppendL(CDorisBrowserInterface::EOpenURL_STRING, *addr);
		ido->ExecuteL();
#  else
		auto_ptr<HBufC8> addr8(HBufC8::NewL(addr->Length()));
		TPtr8 addrp=addr8->Des();
		CC()->ConvertFromUnicode(addrp, *addr);
		TUid KUidOperaBrowserUid = {0x101F4DED};
		TUid KUidOperaRenderViewUid = {0};
		TVwsViewId viewId(KUidOperaBrowserUid, KUidOperaRenderViewUid);
		auto_ptr<CVwsSessionWrapper> vws(CVwsSessionWrapper::NewL());
		vws->ActivateView(viewId, TUid::Uid(0), *addr8);
#  endif
#endif
	} else {
#ifndef __WINS__
		//iLog.post_new_value(_L("form closed"));
		iOpener.CloseConnection();
#endif
	}

	return true;
}
void CContextContactsDetailView::HandleCommandL(TInt aCommand)
{   
	CALLSTACKITEM_N(_CL("CContextContactsDetailView"), _CL("HandleCommandL"));


	switch ( aCommand )
        {
		case EAknSoftkeyBack:
		{
			ActivateParentViewL();
			break;
		}
		case EContextContactsCmdCreateSms:
		{
			if ( iContainer->IsCurrentPhoneNumber() )
			{
				TPtrC no( iItem->PbkFieldAt(iContainer->get_current_item_idx()).PbkFieldText() );
				CDesCArrayFlat* recip=new CDesCArrayFlat(1);
				CleanupStack::PushL(recip);
				CDesCArrayFlat* alias=new CDesCArrayFlat(1);
				CleanupStack::PushL(alias);
				recip->AppendL(no);
				alias->AppendL( *(iItem->GetContactTitleL()) );
				aPhoneHelper.send_sms(recip, alias);
				CleanupStack::PopAndDestroy(2); // recip, alias
			}
			else
			{
                                CPbkSmsAddressSelect* sel=new (ELeave) CPbkSmsAddressSelect();
#ifndef __S60V3__
				TPtrC no(sel->ExecuteLD(*iItem, NULL, EFalse));
#else
				TPtrC no(0, 0);
				CPbkSmsAddressSelect::TParams p(*iItem);
				TBool selected=sel->ExecuteLD(p);
				if (selected) {
					const TPbkContactItemField* f=p.SelectedField();
					if (f && f->StorageType()==KStorageTypeText) {
						no.Set(f->Text());
					}
				}
#endif

				if (no.Length()>0)
				{
					CDesCArrayFlat* recip=new CDesCArrayFlat(1);
					CleanupStack::PushL(recip);
					CDesCArrayFlat* alias=new CDesCArrayFlat(1);
					CleanupStack::PushL(alias);
					recip->AppendL(no);
					alias->AppendL( *(iItem->GetContactTitleL()) );
					aPhoneHelper.send_sms(recip, alias);
					CleanupStack::PopAndDestroy(2); // recip, alias
				}
			}			
			break;
		}
		case EContextContactsCmdCreateMms:
		{
			if ( (iContainer->IsCurrentMMS()) || (iContainer->IsCurrentPhoneNumber()) ) 
			{
				TPtrC no( iItem->PbkFieldAt(iContainer->get_current_item_idx()).PbkFieldText() );
				CDesCArrayFlat* recip=new CDesCArrayFlat(1);
				CleanupStack::PushL(recip);
				CDesCArrayFlat* alias=new CDesCArrayFlat(1);
				CleanupStack::PushL(alias);
				recip->AppendL(no);
				alias->AppendL(*(iItem->GetContactTitleL()));
				aPhoneHelper.send_mms(recip,alias);
				CleanupStack::PopAndDestroy(2); // recip, alias
			}
			else
			{
				CPbkMmsAddressSelect* sel=new (ELeave) CPbkMmsAddressSelect();
#ifndef __S60V3__
				TPtrC no(sel->ExecuteLD(*iItem, NULL, EFalse));
#else
				TPtrC no(0, 0);
				CPbkMmsAddressSelect::TParams p(*iItem);
				TBool selected=sel->ExecuteLD(p);
				if (selected) {
					const TPbkContactItemField* f=p.SelectedField();
					if (f && f->StorageType()==KStorageTypeText) {
						no.Set(f->Text());
					}
				}
#endif
				if ((no!=KNullDesC))
				{
					CDesCArrayFlat* recip=new CDesCArrayFlat(1);
					CleanupStack::PushL(recip);
					CDesCArrayFlat* alias=new CDesCArrayFlat(1);
					CleanupStack::PushL(alias);
					recip->AppendL(no);
					alias->AppendL(*(iItem->GetContactTitleL()));
					aPhoneHelper.send_mms(recip,alias);
					CleanupStack::PopAndDestroy(2); // recip,alias
				}
			}
			break;
		}
		case EContextContactsCmdCreateEmail:
		{
			if ( iContainer->IsCurrentMMS())
			{
				TPtrC no( iItem->PbkFieldAt(iContainer->get_current_item_idx()).PbkFieldText() );
				CDesCArrayFlat* recip=new CDesCArrayFlat(1);
				CleanupStack::PushL(recip);
				CDesCArrayFlat* alias=new CDesCArrayFlat(1);
				CleanupStack::PushL(alias);
				recip->AppendL(no);
				alias->AppendL(*(iItem->GetContactTitleL()));
				aPhoneHelper.send_email(recip,alias);
				CleanupStack::PopAndDestroy(2); // recip,alias
			}
			else
			{
				CPbkEmailAddressSelect* sel=new (ELeave) CPbkEmailAddressSelect();
#ifndef __S60V3__
				TPtrC no(sel->ExecuteLD(*iItem, NULL, EFalse));
#else
				TPtrC no(0, 0);
				CPbkEmailAddressSelect::TParams p(*iItem);
				TBool selected=sel->ExecuteLD(p);
				if (selected) {
					const TPbkContactItemField* f=p.SelectedField();
					if (f && f->StorageType()==KStorageTypeText) {
						no.Set(f->Text());
					}
				}
#endif
				if (no!=KNullDesC)
				{
					CDesCArrayFlat* recip=new CDesCArrayFlat(1);
					CleanupStack::PushL(recip);
					CDesCArrayFlat* alias=new CDesCArrayFlat(1);
					CleanupStack::PushL(alias);
					recip->AppendL(no);
					alias->AppendL(*(iItem->GetContactTitleL()));
					aPhoneHelper.send_email(recip, alias);
					CleanupStack::PopAndDestroy(2); // recip
				}
			}
			break;
		}
		case EContextContactsCmdCall:
		{
			if ( iContainer->IsCurrentPhoneNumber() )
			{
				TPtrC no( iItem->PbkFieldAt(iContainer->get_current_item_idx()).PbkFieldText() );
				aPhoneHelper.make_callL(no);
			}
			else
			{
				CPbkPhoneNumberSelect* sel=new (ELeave) CPbkPhoneNumberSelect();
#ifndef __S60V3__
				TPtrC no(sel->ExecuteLD(*iItem, NULL, EFalse));
#else
				TPtrC no(0, 0);
				CPbkPhoneNumberSelect::TParams p(*iItem);
				TBool selected=sel->ExecuteLD(p);
				if (selected) {
					const TPbkContactItemField* f=p.SelectedField();
					if (f && f->StorageType()==KStorageTypeText) {
						no.Set(f->Text());
					}
				}
#endif
				aPhoneHelper.make_callL(no);
			}
			break;
		}
		case EContextContactsCmdEdit:
		{
			aPhoneHelper.show_editor(iViewState->FocusedContactId(), false, iContainer->get_current_item_idx());
			Refresh();
			break;
		}
		case EContextContactsCmdDefaults:
		{
			CPbkContactItem * temp_item = pbkengine->OpenContactLCX(iViewState->FocusedContactId());
			CDefaultNumbersPopupList * popup = CDefaultNumbersPopupList::NewL(temp_item);
			CleanupStack::PushL(popup);
			popup->ExecuteLD();
			CleanupStack::Pop();//popup
			pbkengine->CommitContactL(*temp_item);
			CleanupStack::PopAndDestroy(2); // lock, temp_item

			Refresh();
			break;
		}
		case EContextContactsCmdGoToWeb:
		{
			TBuf<255> url;
			url.Copy(iContainer->GetWebAddress());
			if (url.Length() == 0) return;

			#ifndef __S60V3__
			// FIXME3RD
			#ifndef __WINS__
		
			#  ifndef __S60V2__

			auto_ptr<CDorisBrowserInterface> ido(CDorisBrowserInterface::NewL());
			ido->AppendL(CDorisBrowserInterface::EOpenURL_STRING, url);
			ido->ExecuteL();
		
			#  else
			HBufC8* addr8=HBufC8::NewLC(url.Length());
			TPtr8 addrp=addr8->Des();
			CC()->ConvertFromUnicode(addrp, url);
		
			TUid KUidOperaBrowserUid = {0x101F4DED};
			TUid KUidOperaRenderViewUid = {0};

			TVwsViewId viewId(KUidOperaBrowserUid, KUidOperaRenderViewUid);
		
			CVwsSessionWrapper* vws;
			vws=CVwsSessionWrapper::NewLC();
			vws->ActivateView(viewId, KUidOperaRenderViewUid, *addr8);
			CleanupStack::PopAndDestroy(2);
			#  endif

			#endif
			#endif
			break;
		}
		case EContextContactsCmdDelete:
		{
			//note: this isn't the behaviour of original contact app
			TInt idx = iContainer->get_current_item_idx();
			TInt id = iItem->PbkFieldAt(idx).PbkFieldId();
			TPbkContactItemField * field = iItem->FindField(id, idx);
			TInt length = field->Label().Length() + field->Text().Length() + 10;

			HBufC * header = CEikonEnv::Static()->AllocReadResourceL(R_DELETE);
			CleanupStack::PushL(header);
			HBufC * message= HBufC::NewL(length);
			CleanupStack::PushL(message);

			message->Des().Append(field->Label());
			message->Des().Append(_L(" ("));
			message->Des().Append(field->Text());
			message->Des().Append(_L(") ?"));

			CAknMessageQueryDialog * dlg = CAknMessageQueryDialog::NewL(*message);
			CleanupStack::PushL(dlg);
			dlg->PrepareLC(R_CONFIRMATION_QUERY);
			dlg->QueryHeading()->SetTextL(*header);
			CleanupStack::Pop(dlg);
			
			if ( dlg->RunLD() )
			{
				CPbkContactItem * temp_item = pbkengine->OpenContactLCX(iViewState->FocusedContactId());
				temp_item->RemoveField(iContainer->get_current_item_idx());
				pbkengine->CommitContactL(*temp_item);
				CleanupStack::PopAndDestroy(2);
			}
			CleanupStack::PopAndDestroy(2); //header, message
						
			Refresh();
			break;
		}
#ifdef __S60V3__
		case EContextContactsMenuMsgCurrent:
		case EContextContactsMenuMsg:
		{
			HandleCreateMessageL();
		}
			break;
#endif

		default:
		{
#ifndef __S60V3__
//FIXME3RD
			if (!iSendAppUi->CommandIsValidL(aCommand, TSendingCapabilities(0, 0, TSendingCapabilities::EAllMTMs)))
#endif
			{
				AppUi()->HandleCommandL( aCommand );
			}
#ifndef __S60V3__
			else
			{
				TUid mtm = iSendAppUi->MtmForCommand(aCommand);
				CArrayFixFlat<TInt> * c = new CArrayFixFlat<TInt>(1);
				CleanupStack::PushL(c);
				c->AppendL(iViewState->FocusedContactId());
				aPhoneHelper.send_as( mtm, c);
				CleanupStack::PopAndDestroy(1); // c
			}
#endif
			break;
		}
	}
}