diff src/aci2/bmi/AUIWap.c @ 3:93999a60b835

src/aci2, src/condat2: import of g23m/condat source pieces from TCS211
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 26 Sep 2016 00:29:36 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/aci2/bmi/AUIWap.c	Mon Sep 26 00:29:36 2016 +0000
@@ -0,0 +1,16842 @@
+#ifdef FF_GPF_TCPIP
+
+/*******************************************************************************
+
+					CONDAT (UK)
+
+********************************************************************************                                                                              
+
+ This software product is the property of Condat (UK) Ltd and may not be
+ disclosed to any third party without the express permission of the owner.                                 
+                                                                              
+********************************************************************************
+
+ $Project name:                                                   
+ $Project code:	                                                           
+ $Module:		
+ $File:		    AUIWap.c
+ $Revision:		                                                      
+                                                                              
+ $Author:		Condat(UK)                                                         
+ $Date:		                                                          
+                                                                               
+********************************************************************************
+                                                                              
+ Description:
+ 	The user interface for WAP.  Provides the required menus, lists, dialogs and
+ 	utilises the functionality of the ATB appropriately.
+                        
+********************************************************************************
+
+ $History: AUIWap.c
+
+	xrashmic 13 Feb, 2006 MMI-SPR-58532
+	Exiting wap onreceiving pdp deactivation from the network
+
+     xrashmic 23 Nov, 2005 MMI-SPR-OMAPS00047637
+     Removing unwanted screens in the callback of the "New mms" dialog screen.
+     Sepearted the call back funtion for the sending and receving mms info dialog screns.
+
+    Nov 05, 2005 REF: OMAPS00044867 Sumanth Kumar.C
+    Description:Delete (Softkey) remains, after clearing all the characters in Username field.
+    Solution: AUI_edit_SetAltTextStr is added in the AUI_Standard_editor() with soft key back option.
+
+    xrashmic 17 Aug, 2005 MMI-SPR-31364
+    When it is detected that a very large page is being opened, the wap adapter sends a message.
+    We need to exit wap and display a error dialog as we have memory constraints.
+
+  	xreddymn Aug-03-2005 MMI-SPR-33058:
+    Handling of animated GIF images with transparency
+
+    xreddymn Jun-29-2005 MMI-ENH-32467:
+    Handling of animated GIF images
+
+    July 18 2005  REF:  MMI-SPR-32012  x0012849	
+    To change the functionality of RSK , when there is no page to go back.
+ 
+    xreddymn Jun-21-2005 MMI-SPR-30291: Send one message for the entire profile,
+    instead of sending one parameter at a time, to the WAP adapter
+
+    Jun-08-2005 MMI-SPR-30291 xreddymn: Added patches from FG
+
+      May 11 2005  REF:  MMI-SPR-29887  x0012849
+     To Implement the deferred MMS retrieval.
+     
+     Apr 28 2005  REF:  MMI-SPR-30400  x0012849
+     To display the contents of Drop down menu correctly when a page is browsed through D sample.
+ 
+     Apr 07 2005  REF:  MMI-SPR-27826  x0012849
+     To avoid crash when a user replies to the MMS which is there in Inbox
+ 
+    xreddymn Apr-14-2005 MMI-SPR-30224
+    Modified width setting for Chinese characters
+
+    xreddymn Apr-02-2005 MMI-SPR-29936
+    Added functions to assign and remove GPRS event callback to handle GPRS
+    status events when sending a MMS message
+
+    xreddymn Mar-05-2005 MMI-SPR-26144
+    Added changes for cancel sending MMS
+
+    xrashmic 08 Feb, 2005 MMI-SPR-27853
+    Error handling in sending MMS and also displaying the progress  value
+       
+    x0018858 8 Feb, 2005 MMI-SPR-27872
+    Modified to resolve the memory leak issue. 
+	
+    xreddymn Jan-31-2005 MMI-SPR-28483: Support MIDI objects
+
+    xrashmic 28 Jan, 2005 MMI-SPR-28166
+    Adding support for saving plugin images
+    
+    xrashmic 21 Jan, 2005 MMI-SPR-28223
+    Ignoring the number and scroll key events while displaying the plugin images
+
+    xrashmic 21 Dec, 2004 MMI-SPR-27620
+    The URL buffer needs to be cleared before prompting for the Name
+    
+    xreddymn Jan-27-2005 MMI-SPR-28135
+    Added changes to redraw profile list menu on receiving a new profile
+    through OTA.
+
+    xreddymn Jan-11-2005 MMI-SPR-27618
+    Added changes to hide cursor in case of read-only editor
+
+    xrashmic 4 Jan, 2005 MMI-SPR-27874
+    Description: when images less than 1 kb was downloaded through wap, 
+    phone used to hang.  
+    Solution: The variable used for the display of download complete was 
+    not populated for images less than 1kb. 
+    
+       Dec 22, 2004 REF: CRR MFW-SPR-27847 xnkulkar
+       Description: MFW memory size variable changed from U16 -> U32
+       Solution: The use of variable U16 has been replaced with U32
+
+    xrashmic 23 Dec, 2004 MMI-SPR-27623
+    Setting the back the original profile if user does not select it in the options menu.
+
+    xrashmic 16 Dec, 2004 MMI-SPR-27622
+    To add support for deleting and adding Profiles
+
+        xrashmic 30 Nov, 2004 MMI-SPR-26145
+        Deleting the compose and option window after sending the MMS
+	
+		xrashmic 29 Nov, 2004 MMI-SPR-26161
+        Description: The downloaded object through wap was not visible to the MMI
+        Solution: The downloaded wap object is available in the object manager 
+        and can be used by the MMS
+
+        xrashmic 05 Nov, 2004 MMI-SPR-25252
+        The Bookmark names was not getting stored correctly. The 
+        first chracter was neglected when data->Buffer[2] was sent
+    xrashmic 14 Dec, 2004 MMI-SPR-23921
+    Implementing the forward functionality for MMS
+
+    CRR 25259: xpradipg 28 sep 2004
+    Description: System restarted when deleting WAP bookmark
+    Solution: When we Send the URL, the window handle assignment to 
+    data->edit_win is removed since all windows after selecting send are handled
+    by the sms module
+
+	xrashmic 6 Oct, 2004 MMI-SPR-25552
+	Afetr receiving MMs, information dialogs in wap were not being displayed.
+
+    CRR 25541: 06 Oct 2004 - xpradipg
+    Description: WAP: Profiles names are not displaying properly after renaming
+    Solution : The address from the third character for the name buffer was
+    which was required for the old editor. This has been modified for the new 
+    editor and put under the flag
+
+    CRR 25277: 06 Oct 2004 - xpradipg
+    Description: Recieving an ems when inbox is open
+    Solution: A refresh event is sent to the Inbox list which inturn updates 
+    the list
+
+	xreddymn Sep-13-2004, MMI-SPR-24121
+	Modified string operations to fix the issue
+
+        xrashmic 03 Sep, 2004 MMI-SPR-24395
+        The bookmark and history names names was not getting stored correctly
+
+        xrashmic 26 Aug, 2004 MMI-SPR-23931
+        To display the indication of new EMS in the idle screen
+
+	xrashmic 19 Aug, 2004 Bug: 2, 3, 36 and 42
+	All the status screen, .i.e sending, receiving etc. are displayed separatly for the MMS module.
+	Previously the WAP screens were being used. 
+
+	14/05/2003 - SPR#1983 - SH - Updated to latest from 1.6.3 version.
+	   
+ $End
+
+*******************************************************************************/
+
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+
+#if defined (NEW_FRAME)
+
+#include "typedefs.h"
+#include "vsi.h"
+#include "pei.h"
+#include "custom.h"
+#include "gsm.h"
+
+#else  /* NEW_FRAME */
+
+#include "STDDEFS.H"
+#include "custom.h"
+#include "gsm.h"
+#include "vsi.h"
+
+#endif /* NEW_FRAME */
+
+#include "mfw_sys.h"
+
+#include "mfw_mfw.h"
+#include "mfw_win.h"
+#include "mfw_kbd.h"
+#ifndef NEW_EDITOR
+#include "mfw_edt.h"
+#endif
+#include "mfw_tim.h"
+#include "mfw_phb.h"
+#include "mfw_sms.h"
+#include "mfw_icn.h"
+#include "mfw_mnu.h"
+#include "mfw_lng.h"
+#include "mfw_sat.h"
+#include "mfw_kbd.h"
+#include "mfw_nm.h"
+#include "mfw_cm.h"
+
+#include "dspl.h"
+
+#include "MmiMmi.h"
+#include "MmiMain.h"
+#include "MmiDummy.h"
+#include "MmiDialogs.h"
+#include "MmiLists.h"
+#include "mmiCall.h"
+
+#include "MmiMenu.h"
+#include "MmiSoftKeys.h"
+#include "MmiResources.h"
+
+#include "MmiBlkLangDB.h"
+#include "MmiBookUtils.h"
+#ifdef NEW_EDITOR
+#include "ATBCommon.h"
+#include "ATBDisplay.h"
+#include "ATBEditor.h"
+#include "AUIEditor.h"
+#else
+#include "MmiEditor.h"
+#endif
+#include "MmiBookShared.h"
+#include "ATBData.h"
+
+#include "wapmic_types.h"
+
+#include "ATBWapAUI.h"
+#include "ATBWapACI.h"
+#include "mmiSmsMenu.h"
+//xrashmic 26 Aug, 2004 MMI-SPR-23931
+#include "mmimmsmenu.h"
+#include "MmiIdle.h"
+
+#include "mmismssend.h"
+#include "AUIWapext.h"	/* SPR#1824 - SH */
+#include "AUIWap.h"
+/* SPR#1574 - SH */
+#ifdef MMI_GPRS_ENABLED
+#include "MmiGprs.h"
+#endif
+
+#include "cus_aci.h"
+#include "prim.h"
+#ifndef PCM_2_FFS
+#include "pcm.h"
+#endif
+
+
+#include "mmiColours.h"
+#include "font_bitmaps.h"
+#include "capimic.h"
+//CRR 25277: 06 oct 2004
+#include "mmiwindow.h"
+//xrashmic 29 Nov, 2004 MMI-SPR-26161
+#include "mg4def.h"
+
+// Jun 23 2005  REF:  MMI-SPR-29887  x0012849
+// This values should be same as the ones in MMS_RECEIVE_FAIL in ATBdata.h
+#define MMS_RECEIVE_FAIL -25  
+// Jun 23 2005  REF:  MMI-SPR-29887  x0012849
+extern T_MFW_HND g_MmsBoxWin;  
+// Jun 23 2005  REF:  MMI-SPR-29887  x0012849
+BOOL is_downloadcancelled=FALSE;
+/* Define this to trace memory allocations & freeings */
+#undef TRACE_MEMALLOC
+
+//CRR 25277: 06 oct 2004
+extern MfwHnd mmsboxwinhnd;
+extern UBYTE folder;
+BOOL exitingWap=FALSE;//xrashmic 13 Feb, 2006 MMI-SPR-58532
+
+//xrashmic 21 Jan, 2005 MMI-SPR-28223
+BOOL pluginImageDisplayed;
+
+//xrashmic 29 Nov, 2004 MMI-SPR-26161
+int downloaded_data_size= 0;
+char downloaded_data[MAX_DOWNLOAD];
+extern M4_StoreDownloadedObject(char *objbuffer, int size, M4_E_OBJECT_TYPE obj_Type);
+M4_E_OBJECT_TYPE obj_Type = EMtUnknown;
+//xrashmic 08 Feb, 2005 MMI-SPR-27853
+extern void AUI_mms_error_dialog(SHORT errorCode);
+T_MFW_HND information_dialog(USHORT TxtId1, USHORT TxtId2,char* Txt1, char* Txt2, USHORT SoftKeyTxtId1, USHORT SoftKeyTxtId2, int timer, T_MFW_EVENT keyEvents, T_VOID_FUNC callback);
+extern BOOL saveObjectPlugin;
+extern ObjectType PluginObjectType;
+ESTATUS M4_StorePluginObject(char *objbuffer, int size, M4_E_OBJECT_TYPE obj_Type );
+
+//May 17 2005  REF:  MMI-SPR-29887  x0012849
+// Called when user cancels the retrieving operation
+void cancel_TMrecieve(void);
+//May 17 2005  REF:  MMI-SPR-29887  x0012849
+// Called when user cancels the retrieving operation
+UBYTE get_urlIDget(void);  
+//Jun 28 2005  REF:  MMI-SPR-29887  x0012849  
+void  Delete_Body(void);  
+//xrashmic 26144
+void cancel_TMsend(void);
+UBYTE get_urlID(void);
+void MmsWAPDeactivate(void);
+void mms_gprs_deattach(void);
+
+// xreddymn Mar-05-2005 MMI-SPR-26144
+// progressValue (0 to 100) is the percentage of completion of 
+//    a MMS send operation
+extern int progressValue;
+// This is set to 1 when user has canceled a MMS send operation
+UBYTE mms_cancel_status=0;
+
+/* List menu attributes
+ *
+ * Needed for creating the menu.
+ */
+
+static MfwMnuAttr list_menuAttrib =
+{
+    &menuArea,
+    MNU_LEFT | MNU_LIST | MNU_CUR_LINE,
+    -1,
+    NULL,
+    0,
+	COLOUR_LIST_XX, TxtNull, MNUATTRSPARE
+};
+
+/*
+	SPR#2086 - SH - No need for an invisible window
+	Local data handler
+*/
+
+static T_WAP_DATA *wap_mmi_data = 0;//liuyu add = 0
+static BOOL wap_callActive = FALSE;
+
+/* Set up variables and functions for tracing purposes */
+
+#ifdef TRACE_MEMALLOC
+
+// Dec 22, 2004 REF: CRR MFW-SPR-27847 xnkulkar
+// Description: MFW memory size variable changed from U16 -> U32
+// Solution: The use of variable U16 has been replaced with U32
+U32 memUsed = 0;
+UBYTE memTracker[110] = {0};
+#endif
+
+//xrashmic 19 Aug, 2004 Bug: 2, 3, 36 and 42
+extern int MMSactive;
+
+//xrashmic 3 Nov, 2004 MMI-SPR-26145
+extern T_MFW_HND mms_create_opt_hnd;
+extern T_MFW_HND mms_create_hnd;
+
+//xrashmic 14 Dec, 2004 MMI-SPR-23921
+extern T_MFW_HND mms_Fwdcreate_hnd;
+extern T_MFW_HND g_OptionsWin;
+//xrashmic 23 Nov, 2005 MMI-SPR-OMAPS00047637
+extern T_MFW_HND g_MmsReadWin;
+extern T_MFW_HND g_MmsExtractEdtWin;
+extern T_MFW_HND MMSBox_Extract_exec_win;
+/*******************************************************************************
+
+ $Function:    	AUI_wap_init
+
+ $Description:	Initialise WAP
+ 				SPR#2086 - SH - Added
+ 
+ $Returns:		None.
+
+ $Arguments:	application - Application type required
+ 				callback - Function to be called when WAP is started.
+ 
+*******************************************************************************/
+
+void AUI_wap_init(void)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_wap_init()");
+#endif
+
+	flash_wap_init();
+
+
+	AUI_wap_push_start();
+
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_start
+
+ $Description:	Start WAP
+ 				SPR#2086 - SH - Added
+ 
+ $Returns:		None.
+
+ $Arguments:	application - Application type required
+ 				callback - Function to be called when WAP is started.
+ 
+*******************************************************************************/
+
+void AUI_wap_start(T_WAP_APPLICATION application, T_WAP_CB callback)
+{
+	T_MFW_HND win;
+    T_WAP_DATA *data;
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_wap_start()");
+#endif
+	
+	AUI_create(NULL, application, callback);
+    // xreddymn Feb-18-2005 MMI-SPR-26144: Update status flag for MMS cancel
+    data = AUI_wap_data();
+    data->mms_cancel = 0;
+    //xrashmic 17 Aug, 2005 MMI-SPR-31364
+    // Update the staus flag for exiting wap while trying to open huge page 
+    data->wapOutOfMem=FALSE;
+	return; 
+}
+
+// xreddymn Jun-28-2005 MMI-SPR-32467
+/*******************************************************************************
+
+ $Function:    	AUI_wap_get_win
+
+ $Description:  Returns handle to browser window
+ 
+ $Returns:      Handle to browser window
+
+ $Arguments:    None.
+ 
+*******************************************************************************/
+
+T_MFW_HND AUI_wap_get_win(void)
+{
+    T_WAP_DATA *data;
+	data = AUI_wap_data();
+	if(data)
+	{
+		return data->browser_win;
+	}
+	else
+	{
+		return NULL;
+	}
+}
+
+// xreddymn Aug-03-2005 MMI-SPR-33058
+/*******************************************************************************
+
+ $Function:    	AUI_wap_restore_background
+
+ $Description:  Displays background color of WAP application within the
+                given rectangle
+ 
+ $Returns:      None.
+
+ $Arguments:    (x1, y1) are the co-ordinates of the left-top corner
+                (x2, y2) are the co-ordinates of the right-bottom corner
+ 
+*******************************************************************************/
+
+void AUI_wap_restore_background(S32 x1, S32 y1, S32 x2, S32 y2)
+{
+	U32 fgdColour;
+	resources_setColour( COLOUR_WAP );
+	fgdColour = dspl_GetBgdColour();
+	dspl_SetFgdColour( fgdColour );
+	if(x1 < WAP_LEFT_BORDER) 
+		x1 = WAP_LEFT_BORDER;
+	if(y1 < WAP_TOP_BORDER)
+		y1 = WAP_TOP_BORDER;
+	if(x2 > WAP_SCREEN_RIGHT)
+		x2 = WAP_SCREEN_RIGHT;
+	if(y2 > WAP_SCREEN_BOTTOM)
+		y2 = WAP_SCREEN_BOTTOM;
+	if((y2 >= y1) && (x2 >= x1))
+		dspl_DrawFilledRect(x1, y1, x2, y2);
+}
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_terminate
+
+ $Description:	Terminate a WAP application
+ 				SPR#2086 - SH - Added
+ 
+ $Returns:		None.
+
+ $Arguments:	application - Application type to terminate
+ 				callback - Function to be called when WAP is terminated.
+ 
+*******************************************************************************/
+
+void AUI_wap_terminate(T_WAP_APPLICATION application, T_WAP_CB callback)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_wap_terminate()");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+
+	data->application = application;
+	data->callback = callback;
+
+	switch(data->application)
+	{
+		case WAP_BROWSER:
+			ATB_wap_change_view(WAP_OBJECT_ID);
+			AUI_destroy(ALL_WIN);
+			break;
+
+
+		case WAP_PUSH:
+			ATB_wap_change_view(WAP_PUSH_VIEW);
+			AUI_destroy(WAP_WIN);
+			break;
+
+
+		case WAP_DOWNLOAD:
+			ATB_wap_change_view(WAP_DOWNLOAD_VIEW);
+			AUI_destroy(WAP_WIN);
+			break;
+	}
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_callback
+
+ $Description:	Call WAP callback function
+ 				SPR#2086 - SH - Added
+ 
+ $Returns:		None.
+
+ $Arguments:	result - TRUE or FALSE
+ 
+*******************************************************************************/
+
+void AUI_wap_callback(UBYTE result)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+	USHORT trackIndex;
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_wap_callback()");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	AUI_please_wait_destroy();
+
+#ifdef TRACE_MEMALLOC
+	for (trackIndex = 0; trackIndex<110; trackIndex++)							// Used to track memory allocations
+	{
+		if (memTracker[trackIndex]!=0)
+		{
+			TRACE_EVENT_P2("TRACKINDEX %d is %d", trackIndex, memTracker[trackIndex]);
+		}
+	}
+#endif
+
+	if (data->callback)
+	{
+		data->callback(result);//xmzhou02 should send to MMS here.
+	}
+	data->callback = NULL;	/* Callback only used once */
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_menu
+
+ $Description:	The main WAP menu
+ 
+ $Returns:		MFW_EVENT_CONSUMED
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_menu(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_DISPLAY_DATA   display_info;
+	T_DISPLAY_DATA   display_info2;
+	 T_MFW_HND win = mfw_parent(mfw_header());	
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_menu");
+#endif
+
+	
+
+	/*NM 17.6.04
+	 it allows to enter the WAP connection only when the SIM 
+	 read has been completed. The read access takes 25-20 second
+	 otherwise the behaviour is not stabil
+	*/
+	if (!smsidle_get_ready_state())
+	{
+		TRACE_EVENT("SIM card reading is not ready yet, please wait ");
+	
+		dlg_zeroDisplayData(&display_info);
+		display_info.LeftSoftKey	= (USHORT)TxtNull;
+		display_info.RightSoftKey	= (USHORT)TxtNull;
+		display_info.TextId 		= TxtPleaseWait;
+		display_info.TextId2 		= TxtNull;
+		display_info.displayCol 	= COLOUR_STATUS ;
+		display_info.Time = SIX_SECS;
+	      /*
+	       * Info Screen
+	       */
+//	       info_dialog (win, &display_info);
+
+
+		dlg_zeroDisplayData(&display_info2);
+		display_info2.LeftSoftKey	= (USHORT)TxtNull;
+		display_info2.RightSoftKey	= (USHORT)TxtNull;
+		display_info2.TextId 		= TxtSimNot;
+		display_info2.TextId2 		= TxtReady;
+		display_info2.displayCol 	= COLOUR_STATUS ;
+		display_info2.Time = THREE_SECS;
+		
+	      /*
+	       * Info Screen
+	       */
+	         info_dialog (win, &display_info);	
+		  info_dialog (win, &display_info2);
+		  
+	}
+	else
+	{
+	mfwCheckMemoryLeft();
+	
+	/* SPR#2086 - SH - Create a WAP_BROWSER application */
+	AUI_wap_start(WAP_BROWSER, (T_WAP_CB)AUI_menu_create);
+	}
+
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_menu_create
+
+ $Description:	When WAP is started up, this function is called to create the main menu
+ 				SPR#2086 - SH - Added
+ 
+ $Returns:		None
+
+ $Arguments:	None
+ 
+*******************************************************************************/
+
+void AUI_menu_create(UBYTE result)
+{
+	T_WAP_DATA *data;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_menu_create");
+#endif
+
+	if (!result)
+	{
+		return;
+	}
+
+	data = AUI_wap_data();
+	 
+	if (!data)
+	{
+		return;
+	}
+
+	if (data->menu_win)
+	{
+		AUI_destroy(MENU_WIN);
+	}
+	
+	//xrashmic 6 Oct, 2004 MMI-SPR-25552
+	//Unset MMSactive flag as soon as we enter the Wap menu so that all error 
+	//and notification screens are routed to WAP module.
+	MMSactive=FALSE;
+	/* SPR#2086 - No longer have main WAP window.
+	 * Only create menu if parent window exists. */
+
+	data->parent_win = bookPhonebookStart(data->parent_win, PhbkNone);
+	data->menu_win = bookMenuStart(data->parent_win, WAPMenuAttributes(), 0);
+	SEND_EVENT(data->menu_win, ADD_CALLBACK, NULL, (void *)AUI_menu_cb);
+		
+	mfwCheckMemoryLeft();
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_please_wait
+
+ $Description:	SPR#1569 - SH - Added this function
+ 				Creates a "Please Wait" message that will hang around until WAP has
+ 				been started
+
+ $Returns:		
+
+ $Arguments:	parent_win - the parent window
+ 
+*******************************************************************************/
+
+T_MFW_HND AUI_please_wait(T_MFW_HND parent_win)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+	T_DISPLAY_DATA display_info;
+
+	TRACE_FUNCTION("AUI_please_wait()");
+
+	if (data->temp_win)
+	{
+		AUI_please_wait_destroy();
+	}
+
+	dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtPleaseWait, TxtNull, COLOUR_STATUS);
+	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)AUI_please_wait_cb, 10000, 0 );
+	
+	data->temp_win = info_dialog(parent_win,&display_info); //information screen
+
+	return data->temp_win;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_please_wait_cb
+
+ $Description:	SPR#1569 - SH - Added this function
+ 				Timeout callback for the please wait window
+ 				SPR#1763 - SH - On timeout, exit WAP properly
+
+ $Returns:		None.
+
+ $Arguments:	win - the parent window
+ 
+*******************************************************************************/
+
+void AUI_please_wait_cb(T_MFW_HND win, USHORT identifier, SHORT reason)
+{
+	T_WAP_DATA *data		= AUI_wap_data();		
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_please_wait_cb()");
+#endif
+
+ 	if (!data)
+  	{
+  		return;
+  	}
+  	
+	switch(reason)
+	{
+		case INFO_TIMEOUT:
+			AUI_please_wait_destroy();
+			AUI_destroy(ALL_WIN);/* SPR#2086 */
+			info_screen(NULL, TxtTimedOut, TxtNull, NULL);
+			break;
+	}
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_please_wait_destroy
+
+ $Description:	SPR#2086 - SH - Added this function
+ 				Destroys the please wait window
+
+ $Returns:		None
+
+ $Arguments:	None
+ 
+*******************************************************************************/
+
+void AUI_please_wait_destroy(void)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+
+	if (data->temp_win)
+	{
+		TRACE_FUNCTION("AUI_please_wait_destroy()");
+		SEND_EVENT(data->temp_win, DIALOG_DESTROY, NULL, NULL);
+		data->temp_win = NULL;
+	}
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_start_done
+
+ $Description:	WAP has started - can create new view
+ 				SPR#2086 - SH - Now copes with different types of application
+ 
+ $Returns:		None.
+
+ $Arguments:	None.
+ 
+*******************************************************************************/
+
+void AUI_wap_start_done(void)
+{
+	T_WAP_DATA *data			= AUI_wap_data();	
+	T_MMI_WAP_NEW_VIEW_IND		wap_view;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_wap_start_done");
+#endif
+	
+	if (!data)
+	{
+		return;
+	}
+
+	/* Check what type of application is required */
+
+	switch(data->application)
+	{
+		case WAP_BROWSER:
+			/* Check if browsing view already exists */
+			if (ATB_wap_get_view(WAP_OBJECT_ID))
+			{
+				ATB_wap_change_view(WAP_OBJECT_ID);
+				AUI_wap_new_view_done();
+				return;
+			}
+			
+			wap_view.object_id 		= WAP_OBJECT_ID;
+			wap_view.uaMode			= 1;												// Specifies WML user agent
+			wap_view.view_width		= WAP_SCREEN_WIDTH;									// Width of screen for browser
+			wap_view.view_height	= WAP_SCREEN_HEIGHT;								// Height of screen for browser
+			wap_view.font_height	= WAP_CHAR_HEIGHT;
+			wap_view.unicode_height	= WAP_CHAR_HEIGHT;
+			// xreddymn Apr-14-2005 MMI-SPR-30224: Chinese characters have
+			// a fixed width of 12, whereas WAP_CHAR_WIDTH was defined as 6
+#ifdef CHINESE_MMI
+			wap_view.unicode_width	= 12;
+#else
+			wap_view.unicode_width	= WAP_CHAR_WIDTH;
+#endif
+			
+			/* Get height and widths of all characters in current font */
+
+			wap_view.font_width_length = 256;
+			wap_view.font_width = (UBYTE *)AUI_wap_memory_alloc(256*sizeof(UBYTE));
+			font_getAllAsciiWidths(wap_view.font_width);
+
+			data->view_id = WAP_OBJECT_ID;
+			data->View = ATB_wap_new_view(&wap_view, (void *)data); // Create the view
+
+			AUI_wap_memory_free(wap_view.font_width, 256*sizeof(UBYTE));
+			break;
+
+
+		case WAP_PUSH:
+			if (ATB_wap_get_view(WAP_PUSH_VIEW))
+			{
+				ATB_wap_change_view(WAP_PUSH_VIEW);
+			}
+			else
+			{
+				data->view_id = WAP_PUSH_VIEW;
+				data->View = ATB_wap_new_view_invisible(WAP_PUSH_VIEW);
+			}
+
+			AUI_wap_callback(TRUE);
+			break;
+
+			
+		case WAP_DOWNLOAD:
+			if (ATB_wap_get_view(WAP_DOWNLOAD_VIEW))
+			{
+				ATB_wap_change_view(WAP_DOWNLOAD_VIEW);
+			}
+			else
+			{
+				data->view_id = WAP_DOWNLOAD_VIEW;
+				data->View = ATB_wap_new_view_invisible(WAP_DOWNLOAD_VIEW);
+			}
+			AUI_wap_callback(TRUE);
+			break;
+#ifdef FF_MMI_MMS			
+		case WAP_MMS://xmzhou02 check and create VIEW
+		    TRACE_EVENT("@@@ WAP_MMS case in AUI_wap_start_done() @@@ ");
+			if (ATB_wap_get_view(WAP_DOWNLOAD_VIEW))
+			{
+				ATB_wap_change_view(WAP_DOWNLOAD_VIEW);
+			}
+			else
+			{
+				data->view_id = WAP_DOWNLOAD_VIEW;
+				data->View = ATB_wap_new_view_invisible(WAP_DOWNLOAD_VIEW);
+				//newly allocated view should already been set to active view
+				//ATB_wap_change_view(WAP_DOWNLOAD_VIEW);
+
+				//ATB_mms_config();
+			}
+			AUI_wap_callback(TRUE);
+			break;
+#endif			
+	}
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_new_view_done
+
+ $Description:	View has started
+ 				SPR#2086 - SH - Call application callback
+ 
+ $Returns:		None
+
+ $Arguments:	None.
+ 
+*******************************************************************************/
+
+void AUI_wap_new_view_done(void)
+{
+	T_WAP_DATA *data		= AUI_wap_data();	
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_wap_new_view_done");
+#endif
+	
+	if (!data)
+	{
+		return;
+	}
+	
+	switch (data->application)
+	{
+		case WAP_BROWSER:
+			AUI_wap_callback(TRUE);
+			break;
+	}
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_menu_cb
+
+ $Description:	Callback function for the WAP menu
+ 
+ $Returns:		None.
+
+ $Arguments:	parent_win 	- the WAP data window
+ 				identifier 	- unused
+ 				reason		- unused
+ 
+*******************************************************************************/
+
+static void AUI_menu_cb(T_MFW_HND parent_win, UBYTE identifier, UBYTE reason)
+{
+	T_WAP_DATA *data		= AUI_wap_data();	
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_menu_cb");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	data->menu_win = NULL;
+	if (data->parent_win)
+	{
+		bookPhonebookDestroy(data->parent_win);
+		data->parent_win = NULL;
+	}
+	AUI_destroy(ALL_WIN); /* SPR#2086 */
+	
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_homepage
+
+ $Description:	Enter WAP browser with URL=homepage URL
+ 
+ $Returns:		MFW_EVENT_CONSUMED
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_homepage(MfwMnu* menu, MfwMnuItem* item)
+{	
+	T_WAP_DATA *data		= AUI_wap_data();
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_homepage");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	AUI_wap_connect_URL(data->View->Profile->Homepage);	/* SPR#2086 - modified */
+	
+	return MFW_EVENT_CONSUMED;
+}
+
+/*******************************************************************************
+
+ $Function:    	AUI_download
+
+ $Description:	Create a download editor
+ 				SPR#2086 - TEST
+ 
+ $Returns:		MFW_EVENT_CONSUMED
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_download(MfwMnu* menu, MfwMnuItem* item)
+{	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_download");
+#endif
+
+	AUI_wap_start(WAP_DOWNLOAD, (T_WAP_CB)AUI_download_create);
+		
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_download_create
+
+ $Description:	When WAP is started up for download, this function is called
+ 				SPR#2086 - TEST
+ 
+ $Returns:		None
+
+ $Arguments:	None
+ 
+*******************************************************************************/
+
+void AUI_download_create(UBYTE result)
+{
+	T_WAP_DATA *data;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_download_create");
+#endif
+
+	if (!result)
+	{
+		return;
+	}
+
+	data = AUI_wap_data();
+	 
+	if (!data)
+	{
+		return;
+	}
+
+	AUI_edit("http://www.kongzhong.com/dxwap/2002.jpg", WAP_EDIT_DOWNLOAD, TxtEnterURL, URL_MAX_LEN);
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_create
+
+ $Description:	Creates a window (never shown) to which is attached all the data that
+ 				is used in WAP.  This is distinct from the WAP card browser window,
+ 				which is created dynamically.
+ 				SPR#2086 - SH - New arguments 'application' and 'callback'
+ 
+ $Returns:		Pointer to the new window
+
+ $Arguments:	parent win	- Pointer to the parent window of the data window
+ 				application	- Application type to start up
+ 				callback	- Callback function, called when WAP starts up
+ 
+*******************************************************************************/
+
+void AUI_create (T_MFW_HND parent_win, T_WAP_APPLICATION application, T_WAP_CB callback)
+{
+	T_WAP_DATA				*data;
+//	T_MMI_WAP_START_IND		wap_start;	/* SPR#1842 */
+
+	T_MMI_WAP_START_USER_AGENT_REQ wap_start;
+
+	if (application == WAP_BROWSER)
+	{
+	wap_start.object_id = 1;
+		wap_start.uaType = 1;
+	}
+	else if (application == WAP_DOWNLOAD)
+	{
+		wap_start.object_id = 4;
+		wap_start.uaType = 4;
+	}
+
+	/* SPR#1793 - SH - Only allocate data after we've checked WAP
+	 * doesn't already exist */
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_create");
+#endif
+
+	/* SPR#2086 - SH - If WAP already active, go straight to create view */
+	
+
+	if (AUI_wap_data()) /*One instance of WAP already activated*/
+	{
+              TRACE_EVENT("@@@@ WAP stack has already initiated. @@@@");//xmzhou02
+		data = AUI_wap_data();
+		data->application = application;
+		data->callback = callback;//xmzhou02 should be useless??? because this callback will not be called because wap already started.
+		/* If we haven't yet got a parent window, use the one supplied */
+		if (data->parent_win==NULL && parent_win!=NULL)
+		{
+			data->parent_win = parent_win;
+		}
+		AUI_wap_start_done();
+		return;
+	}
+
+	/* Allocate WAP DATA */
+	
+	data = (T_WAP_DATA *)AUI_wap_memory_alloc (sizeof (T_WAP_DATA));
+
+	if (!data)
+	{
+		TRACE_EVENT("** WAP memory allocation failed **");
+		AUI_wap_callback(FALSE);
+		return;
+	}
+	
+	/* Store data in a static handler */
+	
+	wap_mmi_data = data;
+	
+	/* No longer need window handler */
+
+	data->update_forbid	= FALSE;
+	data->parent_win	= parent_win;
+
+	/* Reset various window pointers */
+	
+	data->edit_win		= NULL;
+	data->options_win	= NULL;
+	data->list_win		= NULL;
+	data->menu_win		= NULL;													// Indicate none of these windows exist yet
+	data->browser_win	= NULL;
+	data->list_data		= NULL;
+	data->connect_win	= NULL;
+	data->error_win		= NULL;		/* SPR#1739 - SH */
+	data->temp_win		= NULL;		/* SPR#2086 - SH */
+	data->call_waiting	= FALSE;	/* SPR#1850 - SH */
+	
+	//xrashmic 19 Aug, 2004 Bug: 2, 3, 36 and 42
+	//These mms_win and mms_win_type would hold the current mma status/error screen information
+	data->mms_win=NULL;
+	data->mms_win_type=0;
+	
+	/* SPR#1684 - SH - Removed customised menu area */
+		
+	/*	Allocate memory for some strings.  SPR#1816 - SH - Unicode */
+	
+	data->Buffer		= (char *)AUI_wap_memory_alloc ((INPUT_MAX_LEN+1)*sizeof(USHORT));	// Input buffer 1
+	data->Buffer2		= (char *)AUI_wap_memory_alloc ((INPUT_MAX_LEN+1)*sizeof(USHORT));	// Input buffer 2
+	data->Message.text	= NULL;
+	data->Message.length = 0;
+	data->LeftSoftKey	= (USHORT *)AUI_wap_memory_alloc ((SOFTKEY_MAX_LEN+2)*sizeof(USHORT));	// Left softkey text
+	data->RightSoftKey	= (USHORT *)AUI_wap_memory_alloc ((SOFTKEY_MAX_LEN+2)*sizeof(USHORT));	// Right softkey text
+
+	/* Create list for options menu
+	 * SPR#1816 - SH - Added unicode parameter */
+	
+	data->OptionsList	= ATB_wap_entry_list_create(WAP_OPTIONS_LIST, MAX_OPTIONS+1, OPTIONS_MAX_LEN, TRUE);	// Options menu list
+
+	data->PushData = NULL;	/* SPR#2086 - SH - Create push data when needed */
+
+
+	/* Generate "Please wait" window while WAP starts up
+	 * SPR#2086 - SH - Don't generate window if there is no parent */
+
+	if (data->parent_win)
+	{
+		AUI_please_wait(data->parent_win); /* SPR#2086 */
+	}
+	
+	data->View = NULL;
+
+	/* SPR#2086 - SH - Store WAP application type and callback */
+	data->application = application;
+	data->callback = callback;
+//xrashmic 13 Feb, 2006 MMI-SPR-58532
+#ifdef MMI_GPRS_ENABLED
+	GPRS_SetCallback(parent_win, (T_GPRS_CB)AUI_wap_gprs_cb);
+#endif /* MMI_GPRS_ENABLED */
+	/* SPR#1842 - SH - Removed timer for WAP startup */
+
+	ATB_wap_start(&wap_start);
+	exitingWap=FALSE;//xrashmic 13 Feb, 2006 MMI-SPR-58532
+	return;
+
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_data
+
+ $Description:	Returns the WAP data pointer
+ 
+ $Returns:		Pointer to WAP data
+
+ $Arguments:	None
+ 
+*******************************************************************************/
+
+T_WAP_DATA *AUI_wap_data (void)
+{
+	if (wap_mmi_data==NULL)
+	{
+		TRACE_EVENT("** WAP not active **");
+	}
+
+	return wap_mmi_data;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_destroy
+
+ $Description:	Destroys the specified WAP windows and their data
+ 				SPR#2086 - No need for "win" parameter
+ 
+ $Returns:		void
+
+ $Arguments:	windows		- determines which windows will be destroyed.
+ 				(e.g. LIST_WIN | EDIT_WIN | OPTIONS_WIN | WAP_WIN)
+ 
+*******************************************************************************/
+void AUI_destroy(USHORT windows)
+{
+	T_WAP_DATA *data		= AUI_wap_data();
+	USHORT				entryIndex;
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_destroy");
+#endif
+    
+	if (data==NULL)
+	{
+		TRACE_EVENT("*** Could not destroy data ***");
+		return;
+	}
+	
+	/* SPR#1850 - SH - If we are closing the browser or exiting WAP, disconnect the call */
+
+	if ((windows & WAP_WIN) || (windows==RETURN_TO_MENU))
+	{		
+		exitingWap=TRUE;//xrashmic 13 Feb, 2006 MMI-SPR-58532
+
+		if (data->View)
+		{
+			/* SPR#2086 - Cancel a pending download */
+			
+			if (data->View->object_id==WAP_OBJECT_ID)
+			{
+				ATB_wap_stop_download(data->View);
+			}
+
+			/* SPR#2086 - Cancel a pending content download */
+			
+			else if (data->View->object_id==WAP_DOWNLOAD_VIEW)
+			{
+				ATB_wap_content_cancel(WAP_DOWNLOAD_ID);
+			}
+
+			/* End the call */
+			
+			AUI_end_call(data->View->cId);
+		}
+		else
+		{
+			AUI_end_call(0);
+		}
+	}
+		
+	/* Check to see if WAP Browser Window should be destroyed */
+	
+	if ((windows & BROWSER_WIN) && (data->browser_win != NULL))
+	{
+#ifdef TRACE_AUIWAP
+		TRACE_FUNCTION("AUI_destroy browser");
+#endif
+
+		/* Destroy the browser window */
+		
+		AUI_win_destroy(data->browser_win);
+		data->browser_win = NULL;
+
+		/* SPR#1824 - SH - No longer destroy error dialog or change
+		 * connection status here */
+		 
+		/* SPR#1794 - SH - Write history list to FFS */
+		
+		ATB_wap_profile_save(data->View);
+	}
+
+	/* SPR#1189 - SH - Can destroy connect window explicitly
+	   Check to see if Connection Dialog should be destroyed */
+    	
+	if ((windows & CONNECT_WIN) && (data->connect_win != NULL))													// Destroy "connecting" window
+	{
+		SEND_EVENT(data->connect_win,DIALOG_DESTROY,0,0);
+		data->connect_win = NULL;
+	}
+
+	/* Check to see if WAP Main Menu should be destroyed */
+		
+	if ((windows & MENU_WIN) && (data->menu_win != NULL))
+	{
+#ifdef TRACE_AUIWAP
+		TRACE_FUNCTION("AUI_destroy menu");
+#endif
+		bookMenuDestroy(data->menu_win);
+		data->menu_win = NULL;
+		if (data->parent_win)
+		{
+			bookPhonebookDestroy(data->parent_win);
+			data->parent_win = NULL;
+		}
+	}
+
+	/* Check to see if Options Menu should be destroyed */
+	
+	if ((windows & OPTIONSMENU_WIN) && (data->optionsmenu_win != NULL))
+	{
+#ifdef TRACE_AUIWAP
+		TRACE_FUNCTION("AUI_destroy optionsmenu");
+#endif
+		/* WAP page can now update */
+
+		data->update_forbid = FALSE;
+		
+		/* Remove all options list entries */
+		
+		for (entryIndex=0; entryIndex<(data->OptionsList->no_of_entries); entryIndex++)
+		{
+			if (data->OptionsList->Entry[entryIndex]!=NULL)
+			{
+				/* SPR#1816 - SH - All entries now the same length */
+				AUI_wap_memory_free((UBYTE *)data->OptionsList->Entry[entryIndex], (SOFTKEY_MAX_LEN+1)*sizeof(USHORT));  // Destroy each entry
+				data->OptionsList->Entry[entryIndex] = NULL;
+			}
+		}
+
+		/* Destroy the list itself */
+		
+		if (data->optionsmenu_data)
+		{
+			AUI_wap_memory_free((UBYTE *)data->optionsmenu_data->List, (data->optionsmenu_data->ListLength)*sizeof(T_MFW_MNU_ITEM)); 
+			AUI_wap_memory_free((UBYTE *)data->optionsmenu_data, sizeof(ListMenuData));
+			data->optionsmenu_data = NULL;
+		}
+		
+		listsDestroy(data->optionsmenu_win);
+		data->optionsmenu_win = NULL;
+	}
+
+	/* Check to see if List Window should be destroyed */
+	
+	if ((windows & LIST_WIN) && (data->list_win != NULL))
+	{
+#ifdef TRACE_AUIWAP
+		TRACE_FUNCTION("AUI_destroy list");
+#endif
+		if (data->list_data)
+	{
+			AUI_wap_memory_free((UBYTE *)data->list_data->List, (data->list_data->ListLength)*sizeof(T_MFW_MNU_ITEM));
+			AUI_wap_memory_free((UBYTE *)data->list_data, sizeof(ListMenuData));
+			data->list_data = NULL;												// Destroy menu items list
+		}
+		listsDestroy(data->list_win);											// Same for list window
+		data->list_win = NULL;
+
+
+		/* SPR#2086 - Destroy the list of pushed messages, if it exists */
+		if (data->PushData)
+		{
+			AUI_wap_push_list_destroy();
+		}
+
+	}
+
+	/* Check to see if Options Window should be destroyed */
+		
+	if ((windows & OPTIONS_WIN) && (data->options_win != NULL))
+	{
+#ifdef TRACE_AUIWAP
+		TRACE_EVENT("AUI_destroy options");
+#endif
+		bookMenuDestroy(data->options_win);
+		data->options_win = NULL;
+              //CRR 25541: 06 oct 2004 - xpradipg
+              //The sub_options window of profiles list needs to be destroyed before
+              //displaying the profile list again.
+              if(data->sub_options_win)
+              {
+                  bookMenuDestroy(data->sub_options_win);
+                  data->sub_options_win = NULL;
+              }
+	}
+
+	/* Check to see if Editor should be destroyed */
+		
+	if ((windows & EDIT_WIN) && (data->edit_win != NULL))
+	{
+#ifdef TRACE_AUIWAP
+		TRACE_EVENT("AUI_destroy editor");
+#endif
+		//editor_destroy(data->edit_win);
+#ifdef NEW_EDITOR
+                    AUI_edit_Destroy(data->edit_win);
+#else /* NEW_EDITOR */
+                    editor_destroy(data->edit_win);
+#endif /* NEW_EDITOR */
+
+		data->edit_win = NULL;
+	}
+
+	/* Check to see if WAP Application should be destroyed */
+		
+	if (windows & WAP_WIN)														// Destroy WAP data win (exiting WAP)
+	{
+#ifdef TRACE_AUIWAP
+		TRACE_EVENT("AUI_destroy WAP");
+#endif
+		
+		/* SPR#1739 - SH - Destroy the error dialog if it exists */
+
+		if (data->error_win)
+		{
+			SEND_EVENT(data->error_win, DIALOG_DESTROY, 0, 0);
+			data->error_win = NULL;
+		}
+		
+		/* SPR#1569 - SH - Destroy now happens in stages
+		 * Display "Please wait" dialog; WAP destroy will complete on callback
+		 * SPR#1824 - SH - Now only create please wait if it doesn't exist
+		 * SPR#2086 - SH - Don't create please wait if there is no parent win */
+
+		if (!data->temp_win && data->parent_win!=NULL)
+		{
+			AUI_please_wait(data->parent_win);
+		}
+		
+		/* SPR#1824 - SH - If there's a view around, prepare the cache to shut down */
+
+		if (data->View)
+		{
+
+			/* SPR#2086 - SH - destroy push data if it exists, and if we're destroying a push view */
+			if (data->View->object_id==WAP_PUSH_VIEW && data->PushData)
+			{
+				AUI_wap_push_destroy();
+			}
+
+
+			/* Set status to shutting down */
+			ATB_wap_status_change(data->View, ATB_WAP_SHUTTING_DOWN);
+
+			if (windows==ALL_WAP)
+			{
+				TRACE_EVENT("SHUTTING DOWN EVERYTHING");
+				/* Here we override the callback function - this is an emergency shutdown,
+				 * instigated by the WAP application rather than by the user */
+
+				 data->callback = (T_WAP_CB) AUI_wap_shutdown;
+			}
+		}
+
+		ATB_wap_destroy();
+	}
+
+	/* SPR#2086 - SH - No longer need to recreate menu */
+	
+#ifdef TRACE_AUIWAP
+	TRACE_EVENT("AUI_destroy end");
+#endif
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_cache_prepare_done
+
+ $Description:	Cache is prepared for WAP_TERMINATE
+ 				SPR#2086 - Simplify
+ 				
+ $Returns:		void
+
+ $Arguments:	None
+ 
+*******************************************************************************/
+
+void AUI_wap_cache_prepare_done(void)
+{
+	TRACE_FUNCTION("AUI_wap_cache_prepare_done()");
+
+	ATB_wap_destroy();
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_close_view_done
+
+ $Description:	SPR#1569 - SH - Added this function
+ 				Called when a view has been closed
+ 				
+ $Returns:		void
+
+ $Arguments:	None
+ 
+*******************************************************************************/
+
+void AUI_wap_close_view_done(void)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_wap_close_view_done");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+
+	/* If we've destroyed all the views, then prepare the cache for shutdown */
+	
+	if (data->view_id==WAP_NO_VIEW)
+	{
+		ATB_wap_cache_prepare();
+	}
+
+	/* Otherwise, we've closed down everything necessary */
+	else
+	{
+		AUI_wap_callback(TRUE);
+	}
+	
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_terminate_done
+
+ $Description:	SPR#1569 - SH - Added this function
+ 				Called when a WAP termination is complete
+ 				
+ $Returns:		void
+
+ $Arguments:	None
+ 
+*******************************************************************************/
+
+void AUI_wap_terminate_done(void)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+	T_WAP_CB callback;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_wap_terminate_done");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+
+	AUI_please_wait_destroy();
+	
+	if (data->Buffer)
+		AUI_wap_memory_free ((UBYTE *)data->Buffer, (INPUT_MAX_LEN+1)*sizeof(USHORT));	// Delete input buffer 1
+
+	if (data->Buffer2)
+		AUI_wap_memory_free ((UBYTE *)data->Buffer2, (INPUT_MAX_LEN+1)*sizeof(USHORT));	// Delete input buffer 2
+
+	AUI_wap_string_free(&data->Message);		/*Delete output buffer */
+
+	if (data->LeftSoftKey)
+		AUI_wap_memory_free ((UBYTE *)data->LeftSoftKey, (SOFTKEY_MAX_LEN+2)*sizeof(USHORT));  // Delete left softkey text
+
+	if (data->RightSoftKey)
+		AUI_wap_memory_free ((UBYTE *)data->RightSoftKey, (SOFTKEY_MAX_LEN+2)*sizeof(USHORT)); // Delete right softkey text
+
+	if (data->OptionsList)
+		ATB_wap_entry_list_destroy(data->OptionsList);							// Destroy options menu list
+	
+	/* Before we destroy data, store callback function */
+
+	callback = data->callback;
+
+	/* Destroy WAP data */
+	
+    wap_mmi_data = 0;
+	AUI_wap_memory_free ((UBYTE *)data, sizeof (T_WAP_DATA));				// Destroy main data structure
+
+	/* Call callback to notify caller that WAP is closed */
+
+	if (callback)
+	{
+		callback(TRUE);
+	}
+	
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_shutdown
+
+ $Description:	Callback function called when a view is shut down.  For this case, all
+ 				views must be destroyed, so continue with shutdown process
+ 				SPR#2086 - Added
+ 
+ $Returns:		None
+
+ $Arguments:	result - The result of the view shutdown
+ 
+*******************************************************************************/
+
+static void AUI_wap_shutdown(UBYTE result)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_wap_shutdown");
+#endif
+
+	if (!result)
+	{
+		return;
+	}
+
+	/* If there are still views to shut down, do so */
+	
+	ATB_wap_destroy();
+
+	return;
+}
+
+
+/* SPR#2086 - Removed functions associated with main WAP window */
+
+/*******************************************************************************
+
+ $Function:    	AUI_connecting_dialog
+
+ $Description:	Show "Connecting..." dialog (displayed while sending configuration
+ 				information to WAP gateway)
+ 				SPR#2086 - Remove window parameter, no longer return window
+ 
+ $Returns:		Window handler
+
+ $Arguments:	status - The status to display
+ 
+*******************************************************************************/
+
+void AUI_connecting_dialog (ULONG status)
+{
+	T_WAP_DATA *data		= AUI_wap_data();
+	T_DISPLAY_DATA		display_info;
+	int					timer;
+	T_MFW_EVENT			keyEvents;
+	
+#ifdef TRACE_AUIWAP		
+	TRACE_FUNCTION("AUI_connecting_dialog");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	
+	/* SPR#1982 - SH - Standard values for events */
+	
+	timer = FOREVER;
+	keyEvents = KEY_CLEAR | KEY_RIGHT;
+
+	switch(status)
+	{
+		case ATB_WAP_ATTACHING:
+			dlg_initDisplayData_TextId( &display_info, TxtNull, TxtCancel, TxtAttaching, TxtGPRS, COLOUR_WAP_POPUP);
+			AUI_wap_string_alloc(&data->Message, PROFILENAME_MAX_LEN+1); /* +1 space for 0x80 */
+			data->Message.text[0] = 0x7F80;
+			ATB_uc_text_copy(&data->Message.text[1], data->View->Profile->Title, PROFILENAME_MAX_LEN);
+			display_info.TextString2 = (char *)data->Message.text;
+			break;
+
+		case ATB_WAP_LOGGING_IN:
+			dlg_initDisplayData_TextId( &display_info, TxtNull, TxtCancel, TxtConnecting, TxtNull, COLOUR_WAP_POPUP);
+			AUI_wap_string_alloc(&data->Message, PROFILENAME_MAX_LEN+1); /* +1 space for 0x80 */
+			data->Message.text[0] = 0x7F80;
+			ATB_uc_text_copy(&data->Message.text[1], data->View->Profile->Title, PROFILENAME_MAX_LEN);
+			display_info.TextString2 = (char *)data->Message.text;
+			break;
+
+		case ATB_WAP_CONNECTING:
+			dlg_initDisplayData_TextId( &display_info, TxtNull, TxtCancel, TxtLoggingIn, TxtNull, COLOUR_WAP_POPUP);
+			AUI_wap_string_alloc(&data->Message, PROFILENAME_MAX_LEN+1); /* +1 space for 0x80 */
+			data->Message.text[0] = 0x7F80;
+			ATB_uc_text_copy(&data->Message.text[1], data->View->Profile->Title, PROFILENAME_MAX_LEN);
+			display_info.TextString2 = (char *)data->Message.text;
+			break;
+
+		case ATB_WAP_CARD_READING:
+			dlg_initDisplayData_TextId( &display_info, TxtNull, TxtCancel, TxtDownloading, TxtNull, COLOUR_WAP_POPUP);
+			AUI_wap_string_alloc(&data->Message, CARD_TITLE_MAX_LEN+1);	/* +1 space for 0x80 */
+			data->Message.text[0] = 0x7F80;
+			ATB_uc_text_copy(&data->Message.text[1], data->View->Title, CARD_TITLE_MAX_LEN);
+			display_info.TextString2 = (char *)data->Message.text;			// Show name of card being read
+			break;
+
+		case ATB_WAP_DOWNLOADING:
+			/* SPR#2086 - Show "loading" message if we're downloading content */
+			dlg_initDisplayData_TextId( &display_info, TxtNull, TxtCancel, TxtDownloading, TxtNull, COLOUR_WAP_POPUP);
+			AUI_wap_string_alloc(&data->Message, CARD_TITLE_MAX_LEN+1);	/* +1 space for 0x80 */
+			if (data->Message.text[0]!=0x7F80)
+			{
+	 			data->Message.text[0] = 0x7F80;
+				ATB_uc_text_copy(&data->Message.text[1], data->View->Title, CARD_TITLE_MAX_LEN);
+			}
+			else
+			{
+				ATB_uc_text_copy(data->Message.text, data->View->Title, CARD_TITLE_MAX_LEN);
+			}
+			display_info.TextString2 = (char *)data->Message.text;			// Show name of card being read
+			break;
+
+		case ATB_WAP_DEACTIVATING:
+			/* SPR#1982 - SH - Waiting for context to deactivate, dialog with no cancel button */
+			dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtPleaseWait, TxtNull, COLOUR_WAP_POPUP);
+			timer = TEN_SECS;
+			keyEvents = 0;
+			break;
+
+		case ATB_WAP_PLEASE_WAIT:
+		default:
+			dlg_initDisplayData_TextId(&display_info, TxtNull, TxtCancel, TxtPleaseWait, TxtNull, COLOUR_WAP_POPUP);
+			break;
+	}
+	
+	/* Destroy any previous dialog */
+		
+	AUI_destroy(CONNECT_WIN); /* SPR#2086 */
+	
+	/* Create new dialog */
+	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)AUI_connecting_dialog_cb, timer, keyEvents );
+
+	/* SPR#2086 - Automatically assign connect_win */
+	
+	data->connect_win = info_dialog(data->parent_win, &display_info);
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_connecting_dialog_cb
+
+ $Description:	Callback function for connecting dialog
+ 
+ $Returns:		void
+
+ $Arguments:	win			- pointer to the WAP data window
+ 				identifier	- identifies function that has called callback
+ 				reason		- reason for callback
+ 
+*******************************************************************************/
+
+void AUI_connecting_dialog_cb (T_MFW_HND win, UBYTE identifier, UBYTE reason)
+{
+   T_WAP_DATA *data		= AUI_wap_data();
+   
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_connecting_dialog_cb");
+#endif
+
+	/* SPR#1739 - SH - This should be set to NULL in all cases */
+	
+	data->connect_win = NULL;
+
+	/* SPR#1816 - SH - Free memory allocated for status message */
+	
+	AUI_wap_string_free(&data->Message);
+				
+	switch(reason)
+		{
+		case INFO_KCD_HUP:
+		case INFO_KCD_RIGHT:													// "Cancel" exits browser
+			/* SPR#1189 - SH - If browser is active, completely exit WAP.
+			 * Otherwise, just return to last menu. */
+			 
+			if (data->browser_win)
+			{
+				AUI_destroy(RETURN_TO_MENU);	/* SPR#2086 */
+			}
+			else
+			{
+				/* SPR#2086 - Cancel download */
+				
+				if (data->View->object_id==WAP_OBJECT_ID)
+				{
+					/* Cancel any pending operation */
+					ATB_wap_stop_download(data->View);
+				}
+				else if (data->View->object_id==WAP_DOWNLOAD_VIEW)
+				{
+					ATB_wap_content_cancel(WAP_DOWNLOAD_ID);
+				}
+				
+				/* End the call.  SPR#1850 - SH - Provide function with the call ID */
+				AUI_end_call(data->View->cId);	
+				/* SPR#1982 - SH - Indicate we're no longer connected */
+				if (!ATB_wap_status_get(data->View, ATB_WAP_DEACTIVATING))
+				{
+					ATB_wap_status_change(data->View, ATB_WAP_ONLINE_CONNECTION_CLOSED);
+				}
+			}
+		break;
+
+		default:
+		break;
+		}
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_connect_URL
+
+ $Description:	Connects to WAP gateway (if required) and starts to download URL
+ 				SPR#2086 - removed 'win' parameter
+ 				- Factored common tasks into following functions
+ 
+ $Returns:		void
+
+ $Arguments:	URL		- URL to connect to
+ 
+*******************************************************************************/
+
+void AUI_wap_connect_URL(char *URL)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+	T_WAP_VIEW *View;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_wap_connect_URL");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	//xrashmic 21 Jan, 2005 MMI-SPR-28223
+	//Unsetting this flag when we lauch a new URL
+	pluginImageDisplayed=FALSE;
+
+	/* Store URL to access later */
+
+	strcpy(data->Buffer, URL);
+	
+	/* Check if browsing view exists.  If it doesn't, start WAP for
+	 * browsing and load URL on callback */
+	 
+	View = ATB_wap_get_view(WAP_OBJECT_ID);
+
+	if (!View)
+	{
+		AUI_wap_start(WAP_BROWSER, AUI_wap_start_load_URL);
+	}
+	else
+	{
+		AUI_wap_start_load_URL(TRUE);
+	}
+	
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_prepare_to_connect
+
+ $Description:	Gets ready to initiate a WAP connection
+ 				SPR#2086 - Added
+ 
+ $Returns:		None
+
+ $Arguments:	None
+ 
+*******************************************************************************/
+
+void AUI_prepare_to_connect()
+{
+	T_WAP_DATA *data = AUI_wap_data();
+
+	if (!data)
+	{
+		return;
+	}
+	
+	/* Ensure that the default browser view is selected */
+
+	ATB_wap_change_view(WAP_OBJECT_ID);
+	
+	/* If the browser is already visible, we can destroy the other windows */
+	
+	if (data->browser_win)
+	{
+		AUI_destroy(LIST_WIN | OPTIONSMENU_WIN | EDIT_WIN | OPTIONS_WIN); /* SPR#2086 */
+	}
+	
+	 /* Display "Please Wait" if browser is not open */
+	   
+	if (!data->browser_win || !data->connected)
+	{
+		ATB_wap_status_change(data->View, ATB_WAP_PLEASE_WAIT);
+	}
+
+	/* If we're not already connected, send config data */
+	
+	if (!data->connected)
+	{
+		ATB_wap_profile_send(data->View);
+	}
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_start_load_URL
+
+ $Description:	Callback function for starting WAP and loading a URL
+ 				SPR#2086 - SH - Added
+ 
+ $Returns:		void
+
+ $Arguments:	result - TRUE if WAP started successfully.
+ 
+*******************************************************************************/
+
+void AUI_wap_start_load_URL(UBYTE result)
+{
+	T_WAP_DATA 		*data	= AUI_wap_data();
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_wap_push_start_load_URL");
+#endif
+
+	if (!data || !result)
+	{
+		return;
+	}
+
+	/* Prepare to connect */
+	
+	AUI_prepare_to_connect();
+
+	/* Copy URL into View storage */
+	
+	strcpy(data->View->URL, data->Buffer);
+
+	/* Send event requesting URL download */
+	
+	ATB_wap_download_url(data->View, data->View->URL, TRUE);
+
+	/* Destroy some windows for now; we want to return to the list win
+	 * if the connection is cancelled */
+	 
+	AUI_destroy(OPTIONS_WIN | EDIT_WIN); /* SPR#2086 */
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_win_create
+
+ $Description:	Create the WAP card browser window
+ 
+ $Returns:		void
+
+ $Arguments:	parent_win			- Pointer to the WAP data window
+
+*******************************************************************************/
+
+T_MFW_HND AUI_win_create (T_MFW_HND parent_win)
+{
+	T_MFW_WIN	*win_data;
+	T_WAP_BROWSER	*browser_data = (T_WAP_BROWSER *)AUI_wap_memory_alloc(sizeof(T_WAP_BROWSER)); 	// WAP browser data
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_win_create");
+#endif
+
+	// xreddymn Jun-28-2005 MMI-SPR-32467
+	browser_data->win = win_create(parent_win, 0, E_WIN_VISIBLE | E_WIN_SUSPEND, (T_MFW_CB)AUI_win_cb);	// Create the browser window
+
+	/* Create keyboard handler */
+	browser_data->kbd		= kbd_create (browser_data->win, KEY_ALL, (T_MFW_CB)AUI_kbd_cb);
+	browser_data->kbd_long	= kbd_create (browser_data->win, KEY_ALL|KEY_LONG, (T_MFW_CB)AUI_kbd_long_cb);
+
+	/* Create window handler */
+	
+	browser_data->mmi_control.dialog	= (T_DIALOG_FUNC)AUI_win_control;
+	browser_data->mmi_control.data		= (void *)browser_data;
+	browser_data->parent_win			= parent_win;
+	win_data					= ((T_MFW_HDR *)browser_data->win)->data;
+	win_data->user				= (void *)browser_data;									// Attach browser data to window
+
+	return browser_data->win;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_win_destroy
+
+ $Description:	Destroy the WAP card browser window
+ 
+ $Returns:		void
+
+ $Arguments:	win				- Pointer to the WAP browser window
+
+*******************************************************************************/
+
+int AUI_win_destroy (T_MFW_HND win)
+{
+	T_MFW_WIN			*win_data 	= ((T_MFW_HDR *)win)->data;
+	T_WAP_BROWSER		*data		= (T_WAP_BROWSER *)win_data->user;			// WAP browser data
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_win_destroy");
+#endif
+
+	kbd_delete(data->kbd);														// Delete keyboard handlers
+	kbd_delete(data->kbd_long);
+	
+	win_delete(win);															// Delete window
+	AUI_wap_memory_free((UBYTE *)data, sizeof(T_WAP_BROWSER));					// Destroy data structure
+
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_win_control
+
+ $Description:	Dialog function for WAP Browser window
+ 
+ $Returns:		void
+
+ $Arguments:	win			- WAP card browser window
+ 				event		- Window handle event
+ 				value		- not used
+ 				parameter	- not used
+
+*******************************************************************************/
+
+void AUI_win_control (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
+{
+	T_MFW_WIN		*win_data			= ((T_MFW_HDR *)win)->data;
+	T_WAP_BROWSER	*data				= (T_WAP_BROWSER *)win_data->user;		// WAP Browser data
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_win_control");
+#endif
+
+	switch (event)
+	{
+		case WAP_INIT:															// Currently does nothing
+			break;
+		
+		case WAP_SHOW_CARD:														// Show the current card
+			win_show(win);
+		break;
+	}
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_win_cb
+
+ $Description:	Callback function for browser window
+ 
+ $Returns:		void
+
+ $Arguments:	event		- window handle event
+ 				win			- WAP browser window
+ 				
+*******************************************************************************/
+
+static int AUI_win_cb (T_MFW_EVENT event, T_MFW_WIN * win)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_win_cb");
+#endif
+
+   	if (!data)
+	{
+		return NULL;
+	}
+	
+    if (data->update_forbid)
+    {
+    	return NULL;
+	}
+	
+    switch (event)
+	{
+		case E_WIN_VISIBLE:
+	    	if (win->flags & E_WIN_VISIBLE)
+			{
+		     	resources_setColour( COLOUR_WAP );
+		    	dspl_ClearAll(); 												// Clear the browser area
+
+				/* SPR#2086 - TEST CODE - If we are downloading,
+				 * display total amount of data downloaded */
+
+			//xrashmic 19 Aug, 2004 Bug: 2, 3, 36 and 42
+			//The following screen should not be displayed for the MMS downloaing or sending scenario.
+		    	if ((data->View->object_id!=WAP_OBJECT_ID) && !MMSactive)
+		    	{
+		    		dspl_TextOut(0,0,DSPL_TXTATTR_SIGNED_COORDS, (char *)data->View->Title);
+		    		resources_setSKColour( COLOUR_WAP );
+		    		displaySoftKeys(TxtExit, TxtEnterURL);
+					return 1;
+		    	}
+		    	
+		    	ATB_wap_buffer_display(data->View);								// Display the buffered page
+		     	resources_setSKColour( COLOUR_WAP );
+
+				/* SPR#1575 - SH - Display "Cancel" when downloading or reading in a card */
+		    	if (ATB_wap_status_get(data->View, ATB_WAP_DOWNLOADING)
+		    		|| ATB_wap_status_get(data->View, ATB_WAP_CARD_READING))
+	    		{
+		    		displaySoftKeys(TxtNull, TxtCancel);
+	    		}
+		    	else
+	    		{
+		    		if (data->View->CustSoftKeys)
+		    		{
+		    			/* SPR#1816 - SH - Unicode */
+		    			displayCustSoftKeys((char *)data->LeftSoftKey, (char *)data->RightSoftKey);
+		    		}
+					else
+					{
+						if (data->View->CanGoBack)
+							displaySoftKeys(TxtSoftOptions, TxtSoftBack);		// Show "options" and "back"
+						else
+							displaySoftKeys(TxtSoftOptions, TxtNull);			// Only show "options" if we can't go back
+					}
+				}
+    		}
+			break;
+
+		// xreddymn Jun-28-2005 MMI-SPR-32467
+		case E_WIN_SUSPEND:
+			TRACE_EVENT("E_WIN_SUSPEND");
+			ATB_animated_GIF_clear();
+			break;
+
+		default:
+	    	return 0;
+	}
+    return 1;
+}
+
+
+// July 13 2005  REF:  MMI-SPR-32012  x0012849
+// To change the functionality of RSK, when there is no page to go back
+/*******************************************************************************
+
+ $Function:    	ExitWAP
+
+ $Description:	 The functionality is same as when we press HANG UP Key. 
+
+ $Returns:      Nothing
+
+ $Arguments:	None
+*******************************************************************************/
+
+void ExitWAP(BOOL value)
+{
+     T_WAP_VIEW *View;
+     T_WAP_DATA 		*data		= AUI_wap_data();
+     View = data->View;         
+     //xrashmic 17 Aug, 2005 MMI-SPR-31364
+     //Exiting due to out of memory
+    if(WAP_OUT_OF_MEM==value)      
+        data->wapOutOfMem=TRUE;
+    else
+        data->wapOutOfMem=FALSE;
+    ATB_wap_stop_download(View);
+    AUI_wap_string_free(&data->Message); 
+    AUI_destroy(RETURN_TO_MENU);	
+    return;     	
+}
+
+/*******************************************************************************
+
+ $Function:    	AUI_kbd_cb
+
+ $Description:	Keyboard event handler for browser window
+
+ $Returns:		status int
+
+ $Arguments:	event			- window handle event
+ 				keyboard		- keyboard control block
+
+*******************************************************************************/
+
+static int AUI_kbd_cb (T_MFW_EVENT event, T_MFW_KBD *keyboard)
+{	
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	T_WAP_VIEW		*View;
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_kbd_cb");
+#endif
+
+	if (!data)
+	{
+		return NULL;
+	}
+
+	View = data->View;
+
+	/* SPR#2086 - TEST CODE - Soft keys to control download
+	 * screen */
+	if (View->object_id!=WAP_OBJECT_ID)
+	{
+		if (keyboard->code==KCD_LEFT || keyboard->code==KCD_HUP)
+		{
+			AUI_destroy(RETURN_TO_MENU); /* SPR#2086 */
+		}
+		else if (keyboard->code==KCD_RIGHT)
+		{
+			AUI_download(NULL,NULL);
+		}
+		return MFW_EVENT_CONSUMED;
+	}
+
+	switch (keyboard->code)
+	{
+		case KCD_LEFT:
+			/* SPR#1575 - SH - Open options menu if not downloading or reading a card */
+			if (!ATB_wap_status_get(View, ATB_WAP_DOWNLOADING)
+			&& !ATB_wap_status_get(View, ATB_WAP_CARD_READING))
+			{
+				AUI_wap_options_menu_open(ATB_wap_buffer_identify_element(View));
+			}
+      		break;
+
+		case KCD_RIGHT:	
+			//xrashmic 21 Jan, 2005 MMI-SPR-28223
+			//Unsetting this flag when we exit the wap page
+			pluginImageDisplayed=FALSE;
+
+			/* SPR#1575 - SH - Open options menu if not downloading or reading a card */
+			if (ATB_wap_status_get(View, ATB_WAP_DOWNLOADING)
+				|| ATB_wap_status_get(View, ATB_WAP_CARD_READING))
+			{
+				ATB_wap_stop_download(View);
+			}
+			else
+			{
+				if (View->CustSoftKeys)
+					ATB_wap_key_selected(View, View->CustSoftKeyId);  	  		// Customised right soft key
+				else
+					ATB_wap_card_go_back(View);									// Otherwise default is "Back"
+			}
+      		break;
+
+      	case KCD_MNUUP:
+			//xrashmic 21 Jan, 2005 MMI-SPR-28223
+			//When a plugin image is being displayed we ignore this key event
+			if(!pluginImageDisplayed)
+      			ATB_wap_card_key_event(View, WAP_KEY_UP);							// Scroll card up
+      		break;
+
+      	case KCD_MNUDOWN:
+			//xrashmic 21 Jan, 2005 MMI-SPR-28223
+			//When a plugin image is being displayed we ignore this key event
+			if(!pluginImageDisplayed)
+      			ATB_wap_card_key_event(View, WAP_KEY_DOWN);							// Scroll card down
+      		break;
+      // Apr 28 2005  REF:  MMI-SPR-30400 x0012849
+      // Handle the MNULEFT event.
+      	case KCD_MNULEFT:
+			//xrashmic 21 Jan, 2005 MMI-SPR-28223
+			//When a plugin image is being displayed we ignore this key event
+			if(!pluginImageDisplayed)
+      			ATB_wap_card_key_event(View, WAP_KEY_LEFT);							// Scroll card up
+      		break;
+      // Apr 28 2005  REF:  MMI-SPR-30400 x0012849
+      // Handle the MNURIGHT event.
+      	case KCD_MNURIGHT:
+			//xrashmic 21 Jan, 2005 MMI-SPR-28223
+			//When a plugin image is being displayed we ignore this key event
+			if(!pluginImageDisplayed)
+      			ATB_wap_card_key_event(View, WAP_KEY_RIGHT);							// Scroll card down
+      		break;
+
+      	case KCD_1:
+			//xrashmic 21 Jan, 2005 MMI-SPR-28223
+			//When a plugin image is being displayed we ignore this key event
+			if(!pluginImageDisplayed)
+      			ATB_wap_card_key_event(View, WAP_KEY_LEFT);							// Scroll card left
+      		break;
+
+      	case KCD_3:
+			//xrashmic 21 Jan, 2005 MMI-SPR-28223
+			//When a plugin image is being displayed we ignore this key event
+			if(!pluginImageDisplayed)
+      			ATB_wap_card_key_event(View, WAP_KEY_RIGHT);						// Scroll card right
+      		break;
+
+		case KCD_2:
+			//xrashmic 21 Jan, 2005 MMI-SPR-28223
+			//When a plugin image is being displayed we ignore this key event
+			if(!pluginImageDisplayed)
+				ATB_wap_card_scroll(View,0);										// Go to top of card
+			break;
+
+		case KCD_5:
+			//xrashmic 21 Jan, 2005 MMI-SPR-28223
+			//When a plugin image is being displayed we ignore this key event
+			if(!pluginImageDisplayed)
+				ATB_wap_card_scroll(View,View->cardYPosition-WAP_PAGE_SCROLL);		// Scroll up a page
+			break;
+
+		case KCD_8:
+			//xrashmic 21 Jan, 2005 MMI-SPR-28223
+			//When a plugin image is being displayed we ignore this key event
+			if(!pluginImageDisplayed)
+				ATB_wap_card_scroll(View,View->cardYPosition+WAP_PAGE_SCROLL);		// Scroll down a page
+			break;
+
+		case KCD_0:
+			//xrashmic 21 Jan, 2005 MMI-SPR-28223
+			//When a plugin image is being displayed we ignore this key event
+			if(!pluginImageDisplayed)
+				ATB_wap_card_scroll(View,View->cardHeight-WAP_SCREEN_HEIGHT);		// Go to bottom of card
+			break;
+
+		/* SH - So that select button can be used to select links etc */
+		
+		case KCD_MNUSELECT:
+      	case KCD_CALL:
+			//xrashmic 21 Jan, 2005 MMI-SPR-28223
+			//When a plugin image is being displayed we ignore this key event
+			if(!pluginImageDisplayed)
+				 ATB_wap_card_key_event(View, WAP_KEY_SELECT);						// Select an option
+      		break;
+      	
+      	case KCD_HUP:
+			//xrashmic 21 Jan, 2005 MMI-SPR-28223
+			//Unsetting this flag when we exit the wap page
+			pluginImageDisplayed=FALSE;
+			ATB_wap_stop_download(View);
+
+			//x0018858 23 Feb, 2005 MMI-SPR-27872
+			//Releasing the text string when exitting the wap page.
+			//begin
+			AUI_wap_string_free(&data->Message); 
+			//end
+
+      		AUI_destroy(RETURN_TO_MENU);	/* SPR#2086 */
+      		break;
+
+      	case KCD_STAR:
+			//xrashmic 21 Jan, 2005 MMI-SPR-28223
+			//When a plugin image is being displayed we ignore this key event
+  			if(!pluginImageDisplayed)
+			{
+      		/* SPR#2086 - Toggle image scaling */
+				ATB_wap_profile_setting_change(
+  				WAP_STATUS_SCALEIMAGES,
+  				ATB_wap_profile_setting(WAP_STATUS_SCALEIMAGES)^1);
+  				ATB_wap_profile_save(data->View);									// Save change to flash
+  				ATB_wap_card_refresh(View);
+			}
+			break;
+      	
+    	default:
+			break;
+	}
+	return MFW_EVENT_CONSUMED;
+}
+
+
+static int AUI_kbd_long_cb(T_MFW_EVENT event, T_MFW_KBD *keyboard)
+{
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_goto_www
+
+ $Description:	Opens up a text edit screen for entering URLs with "www." entered.
+    	     
+ $Returns:		MFW_EVENT_CONSUMED
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item
+ 
+*******************************************************************************/
+
+int AUI_goto_www(MfwMnu* menu, MfwMnuItem* item)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_goto_www");
+#endif
+
+	/* Ensure that the default browser view is selected */
+
+	ATB_wap_change_view(WAP_OBJECT_ID);
+	
+	AUI_edit(GET_TEXT(TxtWWWdot),WAP_GOTO_URL,TxtEnterURL,URL_MAX_LEN);			// Enter editor
+
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_goto_wap
+
+ $Description:	Opens up a text edit screen for entering URLs with "wap." entered.
+    	     
+ $Returns:		MFW_EVENT_CONSUMED
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item
+ 
+*******************************************************************************/
+
+int AUI_goto_wap(MfwMnu* menu, MfwMnuItem* item)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_goto_wap");
+#endif
+
+	/* Ensure that the default browser view is selected */
+
+	ATB_wap_change_view(WAP_OBJECT_ID);
+	
+	AUI_edit(GET_TEXT(TxtWAPdot),WAP_GOTO_URL, TxtEnterURL, URL_MAX_LEN);		// Enter editor
+
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	MMI_AUI_goto_other
+
+ $Description:	Opens up a blank text edit screen for entering URLs
+    	     
+ $Returns:		MFW_EVENT_CONSUMED
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item
+ 
+*******************************************************************************/
+
+int AUI_goto_other(MfwMnu* menu, MfwMnuItem* item)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_goto_other");
+#endif
+
+	/* Ensure that the default browser view is selected */
+
+	ATB_wap_change_view(WAP_OBJECT_ID);
+	
+	AUI_edit("",WAP_GOTO_URL, TxtEnterURL, URL_MAX_LEN);						// Enter editor
+
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_edit
+
+ $Description:	Opens up a text edit screen for editing URLs
+    	     
+ $Returns:		
+
+ $Arguments:	shortcut	- pointer to a string that will appear in the editor
+ 				identifier	- specifies what to do with the URL (connect, store etc).
+ 				prompt		- textId of prompt to display
+ 				maxlen		- maximum length of the edited string
+ 
+*******************************************************************************/
+
+int AUI_edit(char *shortcut, USHORT identifier, USHORT prompt, USHORT maxlen)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_edit");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+
+	/* SPR#1816 - SH - Ensure requested buffer size is not too big */
+	if (maxlen>INPUT_MAX_LEN)
+		maxlen = INPUT_MAX_LEN;
+		
+	if (identifier==WAP_EDIT_HOMEPAGE)											// If we're editing the homepage URL,
+		shortcut = data->View->Profile->Homepage;								// this is the shortcut
+
+	if (identifier==WAP_EDIT_APN)
+		shortcut = data->View->Profile->APN;
+
+	/* SPR#1816 - SH - For unicode editors, set buffer up appropriately */
+	#if 0
+	if (identifier==WAP_EDIT_BOOKMARK || identifier==WAP_EDIT_HISTORY)
+	{
+		/* Clear editor for name (unicode) */
+		data->Buffer[0] = 0x80;
+		data->Buffer[1] = 0x7F;
+		ATB_uc_text_copy((USHORT *)&data->Buffer[2], (USHORT *)shortcut, CARD_TITLE_MAX_LEN);							// Copy name into editing buffer
+		//AUI_edit_create(identifier, prompt, maxlen*2+2);	/* SPR#2086 */
+                AUI_edit_create(identifier, prompt, maxlen*2+2);	/* SPR#2086 */
+	}
+	else
+	{
+		strcpy(data->Buffer, shortcut);												// Copy shortcut into editing buffer
+	   	AUI_edit_create(identifier, prompt, maxlen);	/* SPR#2086 */
+	}
+    #endif
+        if (identifier==WAP_EDIT_BOOKMARK || identifier==WAP_EDIT_HISTORY)
+        {
+            /* Clear editor for name */
+#ifdef NEW_EDITOR
+            ATB_uc_text_copy((USHORT *)data->Buffer, (USHORT *)shortcut, CARD_TITLE_MAX_LEN);
+            AUI_edit_create(identifier, prompt, maxlen, TRUE);
+#else
+            data->Buffer[0] = 0x80;
+            data->Buffer[1] = 0x7F;
+            ATB_uc_text_copy((USHORT *)&data->Buffer[2], (USHORT *)shortcut, CARD_TITLE_MAX_LEN);
+            AUI_edit_create( identifier, prompt, maxlen*2+2, TRUE);
+#endif
+        }
+        else
+        {
+            strcpy(data->Buffer, shortcut);
+            AUI_edit_create(identifier, prompt, maxlen, FALSE);
+        }
+
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_edit_create
+
+ $Description:	Creates the edit screen
+ 				SPR#2086 - Remove window parameter
+    	     
+ $Returns:		none.
+
+ $Arguments:	identifier	- purpose for edit window (e.g. go to URL)
+ 				prompt		- textId of prompt to display
+ 				maxlen		- maximum length of the editor
+ 
+*******************************************************************************/
+#if 0
+static T_MFW_HND AUI_edit_create(USHORT identifier, USHORT prompt, USHORT maxlen)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	T_EDITOR_DATA	editor_data;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_edit_create");
+#endif
+
+	AUI_standard_editor(&editor_data, data->Buffer, maxlen, ALPHA_MODE, (T_EDIT_CB)AUI_edit_cb); // Setup standard editor
+
+	editor_data.TextId				= prompt;									// Prompt to display above editor
+	editor_data.Identifier			= identifier;								// Purpose of edit window (for callback)
+
+	data->edit_win = editor_start(data->parent_win,&editor_data);  /* SPR#2086 */					// Start the editor
+	
+	return data->edit_win;
+}
+#endif
+
+//static T_MFW_HND AUI_edit_create(MfwHnd parent_win, USHORT identifier, USHORT prompt, USHORT maxlen, BOOL unicode)
+static T_MFW_HND AUI_edit_create(USHORT identifier, USHORT prompt, USHORT maxlen, BOOL unicode)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+#ifdef NEW_EDITOR
+	T_AUI_EDITOR_DATA editor_data;
+#else
+	T_EDITOR_DATA	editor_data;
+#endif /* NEW_EDITOR */
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_edit_create");
+#endif
+
+#ifdef NEW_EDITOR
+	AUI_standard_editor(&editor_data, identifier, ED_MODE_ALPHA, prompt, (T_AUI_EDIT_CB)AUI_edit_cb);
+
+	if (unicode)
+	{
+		AUI_edit_SetBuffer(&editor_data, ATB_DCS_UNICODE, (UBYTE *)data->Buffer, maxlen);
+ 	}
+	else
+	{
+		AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)data->Buffer, maxlen);
+	}
+	
+	//data->edit_win = AUI_edit_Start(data->win, &editor_data);
+	data->edit_win = AUI_edit_Start(data->parent_win, &editor_data);
+#else /* NEW_EDITOR */
+	AUI_standard_editor(&editor_data, data->Buffer, maxlen, ALPHA_MODE, (T_EDIT_CB)AUI_edit_cb);
+	editor_data.TextId				= prompt;			/* Prompt to display above editor */
+	editor_data.Identifier			= identifier;		/* Purpose of edit window (for callback) */
+
+	data->edit_win = editor_start(data->parent_win,&editor_data);
+#endif /* NEW_EDITOR */
+
+	return data->edit_win;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_edit_cb
+
+ $Description:	Callback function for edit screen.  This performs the following functions,
+ 				the user having provided a new or updated URL:
+ 				
+ 				- Goto URL
+ 				- Editing of Bookmark and History entries
+ 				- Add new bookmark
+ 				- Edit homepage
+ 
+ $Returns:		void
+
+ $Arguments:	win			- the WAP data window
+ 				identifier	- identifier for the edit type (just 0 so far)
+ 				reason		- reason for callback
+ 
+*******************************************************************************/
+
+static void AUI_edit_cb(T_MFW_HND win, USHORT identifier, USHORT reason)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	T_WAP_VIEW		*View;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_edit_cb");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	View = data->View;
+
+	switch (reason)
+	{
+		case INFO_KCD_LEFT:
+			switch (identifier)
+   			{
+       			/* Go to URL */
+       			
+       			case WAP_GOTO_URL:
+       				AUI_wap_connect_URL(data->Buffer);	/* SPR#2086 - modified */
+		    		break;
+
+				/* Edit Bookmark name */
+		
+				case WAP_EDIT_BOOKMARK:
+					/* SPR#1684 - SH - Changed behaviour here */
+					AUI_destroy(LIST_WIN);				/* SPR#2086 */
+					//xrashmic 03 Sep, 2004 MMI-SPR-24395
+					//The bookmark names was not getting stored correctly. The 
+					//first chracter was neglected when data->Buffer[2] was sent
+                                        #ifdef NEW_EDITOR
+					ATB_wap_entry_change(WAP_BOOKMARKS_LIST, View->Bookmarks, data->Buffer, data->OptionSelect);	/* SPR#1816 - SH */
+					#else
+					ATB_wap_entry_change(WAP_BOOKMARKS_LIST, View->Bookmarks, &data->Buffer[2], data->OptionSelect);	/* SPR#1816 - SH */
+					#endif
+					ATB_wap_profile_save(View);	
+					AUI_list_redraw(WAP_BOOKMARKS_LIST, TxtChanged);
+					break;
+
+				/* Edit Bookmark URL */
+		
+				case WAP_EDIT_BOOKMARK_URL:
+					/* SPR#1684 - SH - Changed behaviour here */
+		    		AUI_destroy(LIST_WIN);			/* SPR#2086 */
+					ATB_wap_entry_change(WAP_URL_LIST, View->BookmarksURL, data->Buffer, data->OptionSelect);		/* SPR#1816 - SH */
+					ATB_wap_profile_save(View);																		// Save change to flash
+					AUI_list_redraw(WAP_BOOKMARKS_LIST, TxtChanged);													// Display "Changed" message
+					break;
+				
+				/* Edit History name */
+		
+				case WAP_EDIT_HISTORY:
+					/* SPR#1684 - SH - Changed behaviour here */
+		    		AUI_destroy(LIST_WIN);				/* SPR#2086 */
+					//xrashmic 03 Sep, 2004 MMI-SPR-24395
+					//The history names was not getting stored correctly. The 
+					//first chracter was neglected when data->Buffer[2] was sent
+                                        #ifdef NEW_EDITOR
+					ATB_wap_entry_change(WAP_HISTORY_LIST, View->History, data->Buffer, data->OptionSelect);	/* SPR#1816 - SH */
+					#else
+					ATB_wap_entry_change(WAP_HISTORY_LIST, View->History, &data->Buffer[2], data->OptionSelect);	/* SPR#1816 - SH */
+					#endif
+					ATB_wap_profile_save(View);																	// Save change to flash
+					AUI_list_redraw(WAP_HISTORY_LIST, TxtChanged);												// Display "Changed" message
+					break;
+
+				/* Edit History URL */
+		
+				case WAP_EDIT_HISTORY_URL:
+					/* SPR#1684 - SH - Changed behaviour here */
+		    		AUI_destroy(LIST_WIN);		/* SPR#2086 */
+		    		ATB_wap_entry_change(WAP_URL_LIST, View->HistoryURL, data->Buffer, data->OptionSelect);		/* SPR#1816 - SH */
+					ATB_wap_profile_save(View);																	// Save change to flash
+					AUI_list_redraw(WAP_HISTORY_LIST, TxtChanged);												// Display "Changed" message
+					break;
+
+				/* Add Bookmark */
+		
+				case WAP_ADD_BOOKMARK:
+					AUI_destroy(EDIT_WIN);		/* SPR#2086 */													// Destroy editor
+					strcpy(data->Buffer2, data->Buffer);	// Store URL in second buffer
+					//CRR 25541: 06 oct 2004 - xpradipg
+					//the buffer is terminated at buffer[0] for NEW EDITOR
+                                        #ifdef NEW_EDITOR
+                                //xrashmic 21 Dec, 2004 MMI-SPR-27620
+                                //The buffer needs to be cleared before prompting for the Name                                
+    					data->Buffer[0] = 0;
+					data->Buffer[1] = 0;
+
+                                        #else
+					/* SPR#1816 - SH - Clear editor for name (unicode) */
+					data->Buffer[0] = 0x80;
+					data->Buffer[1] = 0x7F;
+					data->Buffer[2] = 0;
+					data->Buffer[3] = 0;
+                                        #endif
+					//AUI_edit_create(WAP_ADD_BOOKMARK_NAME, TxtEditName, CARD_TITLE_MAX_LEN);	/* SPR#2086 */
+					AUI_edit_create(WAP_ADD_BOOKMARK_NAME, TxtEditName, CARD_TITLE_MAX_LEN, TRUE);	/* SPR#2086 */
+		    		break;
+
+		    	/* Add Bookmark name */
+		
+				case WAP_ADD_BOOKMARK_NAME:
+					/* SPR#1684 - SH - Changed behaviour here */
+					AUI_destroy(LIST_WIN);		/* SPR#2086 */
+					if (ATB_wap_entry_add(View->BookmarksURL, data->Buffer2)==WAP_FAIL)				// Add URL entry
+					{
+						AUI_info_dialog(TxtBookmarks, TxtFull);		/* SPR#2086 */				// If list is full, say so
+					}
+					else
+					{
+					//xrashmic 05 Nov, 2004 MMI-SPR-25252
+					//The Bookmark names was not getting stored correctly. The 
+					//first chracter was neglected when data->Buffer[2] was sent
+#ifdef NEW_EDITOR
+						ATB_wap_entry_add(View->Bookmarks, data->Buffer);
+#else /* NEW_EDITOR */
+						ATB_wap_entry_add(View->Bookmarks, &data->Buffer[2]);					/* SPR#1816 - SH */
+#endif /* NEW_EDITOR */
+						ATB_wap_profile_save(View);												// Save change to flash
+						AUI_list_redraw(WAP_BOOKMARKS_LIST, TxtStored);						
+					}
+					break;
+
+				/* Edit Homepage URL */
+
+				case WAP_EDIT_HOMEPAGE:
+			 	  	strcpy(View->Profile->Homepage, data->Buffer);					// Change the homepage
+			 	  	ATB_wap_profile_save(View);									// Save change to flash
+					AUI_destroy(EDIT_WIN);		/* SPR#2086 */
+					AUI_info_dialog(TxtChanged, NULL);	/* SPR#2086 */
+					break;
+
+				/* Edit APN */
+
+				case WAP_EDIT_APN:
+			 	  	strcpy(View->Profile->APN, data->Buffer);							// Change the homepage
+			 	  	ATB_wap_profile_save(View);									// Save change to flash
+			 	  	AUI_destroy(EDIT_WIN);	/* SPR#2086 */
+					AUI_info_dialog(TxtChanged, NULL);		/* SPR#2086 */
+					break;
+
+				case WAP_EDIT_DOWNLOAD:
+					/* Display "Please Wait" */
+                                    //xrashmic 29 Nov, 2004 MMI-SPR-26161
+                                    //Reset the size to zero before the download starts
+                                    downloaded_data_size=0;
+					AUI_connecting_dialog(ATB_WAP_PLEASE_WAIT); /* SPR#2086 */
+					AUI_wap_content_get(1, data->Buffer, TRUE, "*/*");
+					break;
+					
+				default:
+					break;
+    		}
+			break;
+
+		/* RSK or HUP key exits menu */
+		
+		case INFO_KCD_HUP:
+		case INFO_KCD_RIGHT:													// (Exit from Editor)
+			AUI_destroy(EDIT_WIN);				/* SPR#2086 */
+			if (identifier == WAP_ADD_BOOKMARK_NAME)							// If we've destroyed the name editor,
+			{
+				strcpy(data->Buffer, data->Buffer2);							// copy the URL back into the editor
+				//AUI_edit_create(WAP_ADD_BOOKMARK, TxtEditURL, CARD_TITLE_MAX_LEN); /* SPR#2086 */
+				AUI_edit_create(WAP_ADD_BOOKMARK, TxtEditURL, CARD_TITLE_MAX_LEN, FALSE); /* SPR#2086 */
+			}
+			break;
+		
+		default:
+			break;
+	}
+
+	return;
+}
+
+/*******************************************************************************
+
+ $Function:    	AUI_list_redraw
+
+ $Description:	SPR#1684 -SH - Added this function
+ 				When changing, adding, or deleting bookmarks or history list items,
+ 				this function is called to display the appropriate dialog.  On callback,
+ 				the AUI_list_redraw_cb() function redraws the appropriate list.
+
+ $Returns:		None.
+
+ $Arguments:	list	- The type of list to be redrawn
+ 				TxtId	- The text string to be displayed in a dialog for 3s
+ 
+*******************************************************************************/
+
+void AUI_list_redraw(USHORT list, USHORT TxtId)
+{
+	T_WAP_DATA *data		= AUI_wap_data();
+	T_DISPLAY_DATA	display_info;
+
+	if (!data)
+	{
+		return;
+	}
+	
+	dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtId, TxtNull, COLOUR_WAP_POPUP);
+	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)AUI_list_redraw_cb, THREE_SECS, 0 );
+	display_info.Identifier = list;
+	
+	info_dialog(data->parent_win, &display_info);
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_list_redraw_cb
+
+ $Description:	SPR#1684 -SH - Added this function
+ 				Called when a 3s info dialog times out: the appropriate list is
+ 				redrawn (history, bookmarks).
+
+ $Returns:		None.
+
+ $Arguments:	win - the parent window
+ 				identifier - stores the type of list
+ 				reson - not used.
+ 
+*******************************************************************************/
+
+static void AUI_list_redraw_cb(T_MFW_HND win, USHORT identifier, SHORT reason)
+{
+	T_WAP_DATA *data		= AUI_wap_data();	
+  
+	TRACE_FUNCTION("AUI_list_redraw_cb()");
+
+	if (!data)
+	{
+		return;
+	}
+	
+	/* Kill any residual editor or options window */
+       //xrashmic 16 Dec, 2004 MMI-SPR-27622
+       // The profile list window should be redrawn. Hence deleting the old list here.
+	AUI_destroy(LIST_WIN|EDIT_WIN | OPTIONS_WIN);	/* SPR#2086 */
+
+	/* Redraw the appropriate list */
+	
+	switch(identifier)
+	{
+		case WAP_BOOKMARKS_LIST:
+			AUI_entry_list(data->View->Bookmarks, (ListCbFunc)AUI_bookmarks_list_cb,0);
+			break;
+
+		case WAP_HISTORY_LIST:
+			AUI_entry_list(data->View->History, (ListCbFunc)AUI_history_list_cb,0);
+			break;
+
+		/* SPR#1921 - SH */
+		case WAP_PROFILES_SETUP:
+			AUI_entry_list(data->View->ProfilesList, (ListCbFunc)AUI_profiles_setup_cb,0);
+			break;
+			
+
+		/* SPR#2086 - SH */
+		case WAP_PUSH_LIST:
+			AUI_wap_push_list(NULL, NULL);
+			break;
+
+	}
+	return;
+}
+
+/*******************************************************************************
+
+ $Function:    	AUI_profile_list_redraw
+
+ $Description:	Re-displays the profile list menu
+
+ $Returns:		None.
+
+ $Arguments:	index: Index of the currently selected profile
+ 				xreddymn Jan-27-2005 MMI-SPR-28135
+ 
+*******************************************************************************/
+
+void AUI_profile_list_redraw(S32 index)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+
+	if ((data==NULL)||(data->View==NULL)||(data->View->ProfilesList==NULL))
+	{
+		return;
+	}
+	if(!((data->list_data==NULL)||(data->list_data->win==NULL)))
+	{
+		AUI_destroy(LIST_WIN);
+		ATB_wap_profile_names_read(data->View);
+		data->View->ProfilesList->type = WAP_PROFILES_LIST;	
+		AUI_entry_list(data->View->ProfilesList, (ListCbFunc)AUI_profiles_setup_cb, index);
+		data->View->ProfileId=index;
+	}
+	else
+	{
+		ATB_wap_profile_names_read(data->View);
+	}
+}
+
+/*******************************************************************************
+
+ $Function:    	AUI_bookmarks_add
+
+ $Description:	SPR#1684 - SH - Added this function.
+ 				New bookmark menu item.  Checks to see if bookmarks are full;
+ 				if so, displays message and exits.  Otherwise, brings up usual
+ 				new bookmark shortcut menu.
+ 
+ $Returns:		MFW_EVENT_CONSUMED
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_bookmarks_add(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA *data		= AUI_wap_data();
+	T_MMI_WAP_NEW_VIEW_IND		wap_view;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_wap_start_done");
+#endif
+	
+	if (!data)
+	{
+		return;
+	}
+
+	/* If there is space in the bookmarks list */
+
+	if (data->View->Bookmarks->no_of_entries < data->View->Bookmarks->max_entries)
+	{
+		/* SPR#1684 - SH - Destroy any previous options menu existing */
+		if (data->options_win)
+		{
+			AUI_destroy(OPTIONS_WIN); /* SPR#2086 */
+		}
+		/* Create Add Bookmark Menu */
+		//#ifdef MMI_WAP_ENABLED //added by ellen
+		data->options_win = bookMenuStart(data->parent_win, WAPNewBookmarkAttributes(), 0); /* SPR#2086 */
+		//#endif
+		SEND_EVENT(data->options_win, ADD_CALLBACK, NULL, (void *)AUI_options_cb);  // Add our own callback
+	}
+	else
+	{
+		AUI_info_dialog(TxtBookmarks, TxtFull); /* SPR#2086 */
+	}
+	
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_bookmarks_add_www
+
+ $Description:	Opens up a text edit screen for entering URLs with "www." entered.
+    	     
+ $Returns:		MFW_EVENT_CONSUMED
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item
+ 
+*******************************************************************************/
+
+int AUI_bookmarks_add_www(MfwMnu* menu, MfwMnuItem* item)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_bookmarks_add_www");
+#endif
+
+	AUI_edit(GET_TEXT(TxtWWWdot),WAP_ADD_BOOKMARK, TxtEnterURL, URL_MAX_LEN);	// Open up the editor
+
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_bookmarks_add_wap
+
+ $Description:	Opens up a text edit screen for entering URLs with "wap." entered.
+    	     
+ $Returns:		MFW_EVENT_CONSUMED
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item
+ 
+*******************************************************************************/
+
+int AUI_bookmarks_add_wap(MfwMnu* menu, MfwMnuItem* item)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_bookmarks_add_wap");
+#endif
+
+	AUI_edit(GET_TEXT(TxtWAPdot),WAP_ADD_BOOKMARK, TxtEnterURL, URL_MAX_LEN);	// Open up the editor
+
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_bookmarks_add_other
+
+ $Description:	Opens up a blank text edit screen for entering URLs
+    	     
+ $Returns:		MFW_EVENT_CONSUMED
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item
+ 
+*******************************************************************************/
+
+int AUI_bookmarks_add_other(MfwMnu* menu, MfwMnuItem* item)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_bookmarks_add_other");
+#endif
+
+	AUI_edit("",WAP_ADD_BOOKMARK, TxtEnterURL, URL_MAX_LEN);					// Open up the editor
+
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_bookmarks_list
+
+ $Description:	List Bookmarks menu option
+ 
+ $Returns:		
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_bookmarks_list(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_bookmarks_list");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	/* SPR#2086 - Ensure that the default browser view is selected */
+
+	ATB_wap_change_view(WAP_OBJECT_ID);
+	
+	/* Create the list menu */
+
+	if (data->View->Bookmarks)
+	{
+		AUI_entry_list(data->View->Bookmarks, (ListCbFunc) AUI_bookmarks_list_cb,0);
+	}
+	
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_bookmarks_list_cb
+
+ $Description:	Callback function for bookmarks list menu
+ 
+ $Returns:		void		
+
+ $Arguments:	win				- WAP data window
+ 				EntryListData	- list menu data of bookmarks list
+ 
+*******************************************************************************/
+
+static void AUI_bookmarks_list_cb(T_MFW_HND win, ListMenuData *EntryListData)
+{
+	T_WAP_DATA	*data = AUI_wap_data();
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_bookmarks_list_cb");
+	TRACE_EVENT_P1("Exit reason: %d", EntryListData->Reason);
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+
+	switch(EntryListData->Reason)
+	{
+		case LISTS_REASON_SELECT:									
+			/* Option is selected... */
+			
+			data->OptionSelect = EntryListData->ListPosition;						// Store selected bookmark no.
+			data->URLSelect = data->View->BookmarksURL->Entry[data->OptionSelect]; 	// Store the URL of the bookmark
+			/* SPR#1684 - SH - Destroy any previous options menu existing */
+			if (data->options_win)
+			{
+				AUI_destroy(OPTIONS_WIN); /* SPR#2086 */
+			}
+			data->options_win = bookMenuStart(win, WAPBookOptMenuAttributes(), 0);	// Create bookmark options menu
+			SEND_EVENT(data->options_win, ADD_CALLBACK, NULL, (void *)AUI_options_cb);  // Add our own callback
+	  		break;
+
+		case LISTS_REASON_SEND:
+			data->OptionSelect = EntryListData->ListPosition;						// Store selected bookmark no.
+			data->URLSelect = data->View->BookmarksURL->Entry[data->OptionSelect]; 	// Store the URL of the bookmark
+
+			AUI_wap_connect_URL(data->URLSelect);	/* SPR#2086 - modified */
+			break;
+			
+		case LISTS_REASON_CLEAR:
+		case LISTS_REASON_HANGUP:												// sbh: added, so hangup key exits
+  		case LISTS_REASON_BACK:													// Exit list menu
+  			AUI_destroy(LIST_WIN);	/* SPR#2086 */
+  			break;
+	}
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_bookmarks_goto
+
+ $Description:	Open up the selected bookmark in the WAP browser
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item	
+ 
+*******************************************************************************/
+
+int AUI_bookmarks_goto(MfwMnu* menu, MfwMnuItem* item)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_bookmarks_goto");
+#endif
+
+	return AUI_entry_goto(WAP_BOOKMARKS_LIST);	
+}	
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_bookmarks_edit
+
+ $Description:	Edit the name of the selected bookmark
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item	
+ 
+*******************************************************************************/
+
+int AUI_bookmarks_edit(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA *data = AUI_wap_data();	
+	
+#ifdef TRACE_AUIWAP
+	UBYTE	entryIndex;
+
+	TRACE_FUNCTION("AUI_bookmarks_edit");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+			
+	AUI_edit(data->View->Bookmarks->Entry[data->OptionSelect],
+		WAP_EDIT_BOOKMARK, TxtEditName, CARD_TITLE_MAX_LEN);
+		
+	return MFW_EVENT_CONSUMED;	
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_bookmarks_edit_url
+
+ $Description:	Edit the URL of the selected bookmark
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item	
+ 
+*******************************************************************************/
+
+int AUI_bookmarks_edit_url(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_bookmarks_edit_url");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	AUI_edit(data->View->BookmarksURL->Entry[data->OptionSelect],
+		WAP_EDIT_BOOKMARK_URL, TxtEditURL, URL_MAX_LEN);
+		
+	return MFW_EVENT_CONSUMED;	
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_bookmarks_delete
+
+ $Description:	Delete the selected bookmark from the bookmarks list
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item	
+ 
+*******************************************************************************/
+
+int AUI_bookmarks_delete(MfwMnu* menu, MfwMnuItem* item)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_bookmarks_delete");
+#endif
+
+	AUI_entry_delete(WAP_DELETE_BOOKMARK);
+	
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_bookmarks_sendSMS
+
+ $Description:	Open up a bookmark in an SMS write editor
+ 
+ $Returns:		
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_bookmarks_sendSMS(MfwMnu* menu, MfwMnuItem* item)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_bookmarks_sendSMS");
+#endif
+
+	AUI_entry_sendSMS();
+	
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_history_list
+
+ $Description:	List History menu option
+ 
+ $Returns:		
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_history_list(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_history_list");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+
+	/* SPR#2086 - Ensure that the default browser view is selected */
+
+	ATB_wap_change_view(WAP_OBJECT_ID);
+	
+	/* Create the history list menu */
+
+	if (data->View->History)
+	{
+		AUI_entry_list(data->View->History, (ListCbFunc) AUI_history_list_cb,0);
+	}
+	
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_history_list_cb
+
+ $Description:	Callback function for history list menu
+ 
+ $Returns:		void		
+
+ $Arguments:	win				- WAP data window
+ 				EntryListData	- list menu data of history lsit
+ 
+*******************************************************************************/
+
+static void AUI_history_list_cb(T_MFW_HND win, ListMenuData *EntryListData)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_history_list_cb");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	switch(EntryListData->Reason)
+	{
+		case LISTS_REASON_SELECT:									
+			/* Option is selected... */
+			
+			data->OptionSelect = EntryListData->ListPosition;					// Store selected history entry no.
+			data->URLSelect = data->View->HistoryURL->Entry[data->OptionSelect];	     // Store the URL of the history entry
+			/* SPR#1684 - SH - Destroy any previous options menu existing */
+			if (data->options_win)
+			{
+				AUI_destroy(OPTIONS_WIN); /* SPR#2086 */
+			}
+			data->options_win = bookMenuStart(win, WAPHistOptMenuAttributes(), 0);     // Create history options menu
+			SEND_EVENT(data->options_win, ADD_CALLBACK, NULL, (void *)AUI_options_cb);  // Add our own callback
+  			break;
+
+		case LISTS_REASON_SEND:									
+			data->OptionSelect = EntryListData->ListPosition;						// Store selected bookmark no.
+			data->URLSelect = data->View->HistoryURL->Entry[data->OptionSelect]; 	// Store the URL of the bookmark
+			
+			AUI_wap_connect_URL(data->URLSelect);	/* SPR#2086 - modified */
+  			break;
+
+  		case LISTS_REASON_BACK:													// Exit menu
+			AUI_destroy(LIST_WIN);		/* SPR#2086 */
+  			break;
+	}
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_history_goto
+
+ $Description:	Open up the selected history entry in the WAP browser
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item	
+ 
+*******************************************************************************/
+
+int AUI_history_goto(MfwMnu* menu, MfwMnuItem* item)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_history_goto");
+#endif
+
+	return AUI_entry_goto(WAP_HISTORY_LIST);	
+}	
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_history_edit
+
+ $Description:	Edit the name of the selected history entry
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item	
+ 
+*******************************************************************************/
+
+int AUI_history_edit(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	USHORT			*EntryUC;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_history_edit");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	EntryUC			= (USHORT *)data->View->History->Entry[data->OptionSelect];
+	
+	AUI_edit((char *)&EntryUC[NUMBER_PADDING], WAP_EDIT_HISTORY, TxtEditName, CARD_TITLE_MAX_LEN);
+		
+	return MFW_EVENT_CONSUMED;	
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_history_edit_url
+
+ $Description:	Edit the URL of the selected history entry
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item	
+ 
+*******************************************************************************/
+
+int AUI_history_edit_url(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_history_edit_url");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	AUI_edit(data->View->HistoryURL->Entry[data->OptionSelect],
+		WAP_EDIT_HISTORY_URL, TxtEditURL, URL_MAX_LEN);
+		
+	return MFW_EVENT_CONSUMED;	
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_history_delete
+
+ $Description:	Delete the selected entry from the history list
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item	
+ 
+*******************************************************************************/
+
+int AUI_history_delete(MfwMnu* menu, MfwMnuItem* item)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_history_delete");
+#endif
+
+	AUI_entry_delete(WAP_DELETE_HISTORY);
+	
+	return MFW_EVENT_CONSUMED;
+}	
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_history_clear
+
+ $Description:	Deletes all entries in history list
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item	
+ 
+*******************************************************************************/
+
+int AUI_history_clear(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	T_DISPLAY_DATA	display_info;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_history_clear");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	dlg_initDisplayData_TextId( &display_info, TxtSoftOK, TxtExit, TxtOkToDelete, TxtNull, COLOUR_WAP_POPUP);
+	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)AUI_entry_delete_cb, FOREVER, KEY_CLEAR | KEY_LEFT | KEY_RIGHT );
+	display_info.Identifier = WAP_CLEAR_HISTORY;
+	info_dialog(data->parent_win, &display_info);
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_history_addbook
+
+ $Description:	Adds a history item to the bookmarks list
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item	
+ 
+*******************************************************************************/
+
+int AUI_history_addbook(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	USHORT			*EntryUC;
+	char			*URL;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_history_addbook()");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	/* SPR#1816 - SH - Add string after NUMBER_PADDING in unicode */
+	
+	EntryUC		= (USHORT *)data->View->History->Entry[data->OptionSelect];						// Text of the history entry
+	URL			= data->View->HistoryURL->Entry[data->OptionSelect];					// URL of the entry
+
+	if (ATB_wap_entry_add(data->View->Bookmarks, (char *)&EntryUC[NUMBER_PADDING])==NULL)  		// Try to add history item to bookmarks
+	{
+		AUI_info_dialog(TxtBookmarks, TxtFull);	/* SPR#2086 */
+	}
+	else
+	{
+		ATB_wap_entry_add(data->View->BookmarksURL, URL);
+		ATB_wap_profile_save(data->View);												// Save change to flash
+		AUI_info_dialog(TxtStored, NULL);		/* SPR#2086 */
+	}
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_history_sendSMS
+
+ $Description:	Open up a history entry in an SMS write editor
+ 
+ $Returns:		
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_history_sendSMS(MfwMnu* menu, MfwMnuItem* item)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_history_sendSMS");
+#endif
+
+	AUI_entry_sendSMS();
+	
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_profiles_list
+
+ $Description:	Lists names of all profiles in flash
+ 
+ $Returns:		
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_profiles_list(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_profiles_list");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	/* SPR#2086 - Ensure that the default browser view is selected */
+
+	ATB_wap_change_view(WAP_OBJECT_ID);
+	
+	/* Create the profile list menu */
+
+	if (data->View->ProfilesList)
+	{
+		data->View->ProfilesList->type = WAP_PROFILES_LIST;								// To differentiate from WAP_PROFILES_SETUP
+		AUI_entry_list(data->View->ProfilesList, (ListCbFunc) AUI_profiles_list_cb, data->View->ProfileId);      // Create the profiles list
+	}
+	
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_profiles_list_cb
+
+ $Description:	Callback function for profiles list menu
+ 
+ $Returns:		void		
+
+ $Arguments:	win				- WAP data window
+ 				EntryListData	- list menu data of profiles list
+ 
+*******************************************************************************/
+
+static void AUI_profiles_list_cb(T_MFW_HND win, ListMenuData *EntryListData)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+	UBYTE temp_storage;
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_profiles_list_cb()");
+#endif
+
+	if (!data)
+	{
+		return;
+	}												// Used to store new profile id
+
+	switch(EntryListData->Reason)
+	{
+		case LISTS_REASON_SEND:
+		case LISTS_REASON_SELECT:
+			/* SPR#1574 - SH - Minor change: "Changed" message appears
+			 * before window is destroyed */
+			AUI_info_dialog(TxtChanged, NULL);				/* SPR#2086 */
+			/* The user has chosen a profile */
+			temp_storage = EntryListData->ListPosition;							// Store selected profile number for a bit...
+			AUI_destroy(LIST_WIN);		/* SPR#2086 */
+			/* Get new profile */
+			ATB_wap_profile_read(data->View, temp_storage);							// Read in new profile data
+			ATB_wap_profile_save(data->View);											// Save the change to flash
+  			break;
+
+  		case LISTS_REASON_BACK:													// Exit menu (back, timeout etc).		
+			AUI_destroy(LIST_WIN);	/* SPR#2086 */
+  			break;
+	}
+	return;
+}
+
+/*******************************************************************************
+
+ $Function:    	AUI_profile_change_cb
+
+ $Description:	Callback function for profile change window
+ 
+ $Returns:		void		
+
+ $Arguments:	Standard menu callback parameters
+ 
+*******************************************************************************/
+
+static void AUI_profile_change_cb(T_MFW_HND parent_win, UBYTE identifier, UBYTE reason)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();	
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_profile_change_cb");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+
+	data->sub_options_win = NULL;
+
+	return;
+}
+
+/*******************************************************************************
+
+ $Function:    	AUI_profile_change
+
+ $Description:	Bring up slightly different menus depending on whether profile is
+ 				GPRS or Dialup.
+ 
+ $Returns:		MFW_EVENT_CONSUMED
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_profile_change(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();	
+
+	/* Only allow modification of the GPRS settings if GPRS is switched on */
+#ifdef GPRS
+	if (data->View->Profile->AccessType==WAP_GPRS_DATA)
+	{
+		data->sub_options_win = bookMenuStart(data->parent_win, WAPGPRSProfileAttributes(), 0);
+	}
+	else
+#endif
+	{
+		data->sub_options_win = bookMenuStart(data->parent_win, WAPDialupProfileAttributes(), 0);
+	}
+	
+	SEND_EVENT(data->sub_options_win, ADD_CALLBACK, NULL, (void *)AUI_profile_change_cb);
+  			
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_profile_delete
+
+ $Description:	Delete the highlighted profile
+                     //xrashmic 16 Dec, 2004 MMI-SPR-27622
+ $Returns:		MFW_EVENT_CONSUMED
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_profile_delete(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+
+	/* Don't let user delete last profile */
+
+	if (data->View->ProfilesList->no_of_entries==1)
+	{
+		AUI_info_dialog(TxtNotAllowed, TxtNull);
+	}
+	else
+	{
+		/* Present option to delete profile */
+		AUI_entry_delete(WAP_DELETE_PROFILE);
+	}
+	
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_profile_new
+
+ $Description:	Add a new profile
+                    //xrashmic 16 Dec, 2004 MMI-SPR-27622
+ $Returns:		MFW_EVENT_CONSUMED
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_profile_new(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	UBYTE newProfileId;
+
+	/* Check if profiles are full */
+
+	if (data->View->ProfilesList->no_of_entries==data->View->ProfilesList->max_entries)
+	{
+		AUI_info_dialog(TxtProfiles, TxtFull);
+	}
+	else
+	{
+		/* Add the profile */
+		newProfileId = data->View->ProfilesList->no_of_entries;
+		ATB_wap_profile_default(MAX_PROFILES-1);
+              //xrashmic 16 Dec, 2004 MMI-SPR-27622
+              // When adding a new profile, use the last record i.e the empty record.
+		ATB_wap_entry_add(data->View->ProfilesList, data->View->ProfilesList->Entry[MAX_PROFILES-1]);
+		ATB_wap_profile_save(data->View);
+		AUI_list_redraw(WAP_PROFILES_LIST, TxtStored);
+	}
+	
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_profile_reset
+
+ $Description:	Reset profiles to default values
+ 
+ $Returns:		MFW_EVENT_CONSUMED
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_profile_reset(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	T_DISPLAY_DATA	display_info;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_profile_reset");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+
+	dlg_initDisplayData_TextId( &display_info, TxtSoftOK, TxtSoftBack, TxtPressOk, TxtResetProfiles, COLOUR_WAP_POPUP);
+	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)AUI_profile_reset_cb, FIVE_SECS, KEY_LEFT | KEY_RIGHT | KEY_CLEAR | KEY_HUP );
+	
+	info_dialog(data->parent_win, &display_info);
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_profile_reset_cb
+
+ $Description:	Callback from reset profiles dialog
+ 
+ $Returns:		None
+
+ $Arguments:	Standard info dialog callback arguments
+ 
+*******************************************************************************/
+
+static void AUI_profile_reset_cb(T_MFW_HND parent_win, USHORT identifier, SHORT reason)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_profile_reset_cb");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	switch(reason)
+	{
+		case INFO_KCD_LEFT:
+			AUI_destroy(LIST_WIN);
+			ATB_wap_profile_default_create(TRUE);
+			ATB_wap_profile_names_read(data->View);
+			ATB_wap_profile_read(data->View, data->View->ProfileId);
+			AUI_list_redraw(WAP_PROFILES_LIST, TxtReset);
+			break;
+			
+		case INFO_KCD_HUP:
+		case INFO_KCD_RIGHT:
+			break;
+	} 
+	
+	return ;
+}
+
+/*******************************************************************************
+
+ $Function:    	AUI_profiles_setup
+
+ $Description:	Lists names of all profiles in flash, in order to change settings
+ 
+ $Returns:		
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_profiles_setup(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_profiles_setup");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+
+	/* SPR#2086 - Ensure that the default browser view is selected */
+
+	ATB_wap_change_view(WAP_OBJECT_ID);
+	
+	/* Store the current profile number - we're going to temporarily change profiles
+	 * to edit the settings, then switch back.*/
+	
+	data->OptionSelect = data->View->ProfileId;
+	
+	/* Create the profile list menu */
+
+	if (data->View->ProfilesList)
+	{
+		data->View->ProfilesList->type = WAP_PROFILES_SETUP;								// To differentiate from WAP_PROFILES_LIST
+		AUI_entry_list(data->View->ProfilesList, (ListCbFunc) AUI_profiles_setup_cb, data->View->ProfileId);   // Create the profiles list menu
+	}
+	
+	return MFW_EVENT_CONSUMED;
+}
+/*******************************************************************************
+
+ $Function:    	AUI_profiles_options_cb
+
+ $Description:	Callback function for profiles options window
+                     //xrashmic 23 Dec, 2004 MMI-SPR-27623
+ $Returns:		void		
+
+ $Arguments:	win				- WAP data window
+ 				identifier, reason  - Not used
+ 
+*******************************************************************************/
+
+static void AUI_profiles_options_cb(T_MFW_HND parent_win, UBYTE identifier, UBYTE reason)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();	
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_profiles_options_cb");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+
+	data->options_win = NULL;
+	
+	/* If the edited profile is different from the selected profile, change back */
+
+	if (data->profile_store!=data->View->ProfileId)
+	{
+		ATB_wap_profile_read(data->View, data->profile_store);
+		/* Recreate list menu so it points to original profile */
+		AUI_destroy( LIST_WIN);
+		AUI_entry_list(data->View->ProfilesList, (ListCbFunc)AUI_profiles_setup_cb,data->profile_store);
+	}
+
+	return;
+}
+
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_profiles_setup_cb
+
+ $Description:	Callback function for profiles list menu
+ 
+ $Returns:		void		
+
+ $Arguments:	win				- WAP data window
+ 				EntryListData	- list menu data of profiles list
+ 
+*******************************************************************************/
+
+static void AUI_profiles_setup_cb(T_MFW_HND win, ListMenuData *EntryListData)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+	UBYTE original_profile;
+	UBYTE new_profile;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_profiles_setup_cb");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+
+	original_profile = data->View->ProfileId;
+        //xrashmic 16 Dec, 2004 MMI-SPR-27622
+        //The highlighted item position to be stored.
+	data->OptionSelect = EntryListData->ListPosition; /* The id of the selected profile */
+
+	switch(EntryListData->Reason)
+	{
+		case LISTS_REASON_SEND:
+		case LISTS_REASON_SELECT:									
+                    //xrashmic 23 Dec, 2004 MMI-SPR-27623
+                    //Storing the original profile before going to the options menu.			
+                    /* The user has chosen a profile.  Store the original profile ID */
+			data->profile_store = data->View->ProfileId;
+
+			/* The user has chosen a profile */
+
+			new_profile = EntryListData->ListPosition;							// Change profile number
+			ATB_wap_profile_read(data->View, new_profile);							// Read in selected profile
+			/* SPR#1684 - SH - Destroy any previous options menu existing */
+			if (data->options_win)
+			{
+				AUI_destroy(OPTIONS_WIN); /* SPR#2086 */
+			}
+			data->options_win = bookMenuStart(data->parent_win, WAPProfOptionsAttributes(), 0);     // Create settings menu
+                    //xrashmic 23 Dec, 2004 MMI-SPR-27623
+                    //Adding the new call back for the options menu.			
+			SEND_EVENT(data->options_win, ADD_CALLBACK, NULL, (void *)AUI_profiles_options_cb);
+  			break;
+
+  		case LISTS_REASON_BACK:													// Exit menu		
+			AUI_destroy(LIST_WIN); /* SPR#2086 */
+
+			if (data->View->ProfileId!=data->OptionSelect)							// We've changed profile...
+			{
+				ATB_wap_profile_read(data->View, original_profile);					// Read in original profile
+			}
+				
+  			break;
+	}
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_entry_list
+
+ $Description:	Create an entry list and store its pointer in list_win/list_data
+ 
+ $Returns:		pointer to list menu data
+ 				SPR#2086 - Remove window parameter
+
+ $Arguments:	EntryList	- pointer to entry list table
+ 				Callback	- the callback function
+ 				pos			- the default highlighted option
+ 
+*******************************************************************************/
+
+int AUI_entry_list (T_WAP_LIST *EntryList, ListCbFunc Callback, UBYTE pos)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();	
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_entry_list");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+	
+	/* Destroy previous list, if it exists */
+	
+	if (data->list_win)
+	{
+		AUI_destroy(LIST_WIN); /* SPR#2086 */
+	}
+
+	/* Create new list */
+	
+	data->list_data = AUI_entry_list_create (data->parent_win, EntryList, Callback, pos);	// Create the entry list
+	if (data->list_data)														// If list has been created...
+		data->list_win = data->list_data->win;									// Attach the resulting window to the data
+	else
+	{
+		data->list_win = NULL;													// No window created
+	}
+	return 1;		
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_entry_list_create
+
+ $Description:	Create an entry list for Bookmarks/History/Profiles, or options menu
+ 
+ $Returns:		pointer to list menu data
+
+ $Arguments:	win			- the WAP data window
+ 				EntryList	- pointer to bookmarks table
+ 				Callback	- the callback function for the entry list
+ 				pos			- the default highlighted option
+ 
+*******************************************************************************/
+
+static ListMenuData * AUI_entry_list_create (T_MFW_HND win, T_WAP_LIST *EntryList, ListCbFunc Callback, UBYTE pos)
+{
+	ListMenuData *EntryListData;
+	USHORT 		entryIndex;
+	USHORT		no_of_entries	= EntryList->no_of_entries;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_entry_list_create");
+#endif
+	
+	if (no_of_entries==0)														// Is the list empty?
+	{
+		AUI_info_dialog(TxtEmpty, NULL);	/* SPR#2086 */
+		return NULL;
+	}
+
+	EntryListData = (ListMenuData *)AUI_wap_memory_alloc (sizeof(ListMenuData));	// Allocate memory for list data
+	
+	if (EntryListData==NULL)
+		return NULL;
+
+	EntryListData->List = (T_MFW_MNU_ITEM *) AUI_wap_memory_alloc (no_of_entries*sizeof (T_MFW_MNU_ITEM));
+
+	if (EntryListData->List==NULL)
+		return NULL;
+	
+	/* Fill Menu List */
+	
+	for (entryIndex=0; entryIndex < no_of_entries; entryIndex++)
+	{
+		mnuInitDataItem(&EntryListData->List[entryIndex]);
+		
+		if (EntryList->Entry[entryIndex]!=NULL)
+			EntryListData->List[entryIndex].str = (char *)EntryList->Entry[entryIndex];   // Copy Entry into list
+		else
+			EntryListData->List[entryIndex].str = GET_TEXT(TxtEmpty);			// ...otherwise "Empty"
+		
+		EntryListData->List[entryIndex].flagFunc = item_flag_none;
+	}
+
+	/* Fill common parameters for list handling */
+
+	EntryListData->ListLength		= no_of_entries;
+	EntryListData->CursorPosition	= 1;										// Starting position
+	EntryListData->ListPosition		= pos+1;
+	if (pos>3)
+		EntryListData->CursorPosition = pos-3;									// Make sure highlighted is on screen
+	EntryListData->SnapshotSize		= 5;										// 5 entries on the screen at once
+	EntryListData->Font				= 0;
+	
+	if (EntryList->type==WAP_PROFILES_LIST || EntryList->type==WAP_OPTIONS_LIST)		// For these lists, left soft key is Select
+		EntryListData->LeftSoftKey	= TxtSoftSelect;
+	else
+		EntryListData->LeftSoftKey	= TxtSoftOptions;
+	
+	EntryListData->RightSoftKey	= TxtSoftBack;
+	EntryListData->KeyEvents	= KEY_ALL;	/* SPR#1921 - SH - Prevents keypresses falling through to window behind */
+	EntryListData->Reason		= 0;
+	EntryListData->Strings		= TRUE;											// Use strings not text ID's
+	EntryListData->Attr			= &list_menuAttrib;
+	EntryListData->autoDestroy	= FALSE; 										// Don't destroy on exit
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("Display list");
+#endif
+	/* SPR#1816 - SH - Use entry list unicode flag to specify whether
+	 * the list is unicode or not */
+	 
+	listDisplayListMenu(win, EntryListData, (ListCbFunc)Callback,(UBYTE)EntryList->unicode);				// Display the list
+
+	return EntryListData;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_entry_goto
+
+ $Description:	Open up the selected bookmark/history entry in the WAP browser
+ 
+ $Returns:		
+
+ $Arguments:	identifier	- specifies whether history or bookmarks list
+ 
+*******************************************************************************/
+
+int AUI_entry_goto(WAP_LIST_TYPE identifier)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_entry_goto");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+	
+	switch(identifier)
+	{
+		case WAP_BOOKMARKS_LIST:
+		case WAP_HISTORY_LIST:
+			AUI_wap_connect_URL(data->URLSelect);	/* SPR#2086 - modified */
+			break;
+	}
+
+	return MFW_EVENT_CONSUMED;	
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_entry_delete
+
+ $Description:	Delete the selected entry from the history/bookmarks list
+ 
+ $Returns:		
+
+ $Arguments:	identifier	- specifies history list or bookmarks list	
+ 
+*******************************************************************************/
+
+int AUI_entry_delete(UBYTE identifier)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();	
+	T_DISPLAY_DATA	display_info;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_entry_delete");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+	
+	dlg_initDisplayData_TextId( &display_info, TxtSoftOK, TxtSoftBack, TxtPressOk, TxtDelete, COLOUR_WAP_POPUP);
+	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)AUI_entry_delete_cb, FOREVER, KEY_CLEAR | KEY_LEFT | KEY_RIGHT );
+	display_info.Identifier		= identifier;									// Type of list
+	
+	info_dialog(data->parent_win, &display_info);
+
+	return MFW_EVENT_CONSUMED;	
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_entry_delete_cb
+
+ $Description:	Callback function for delete confirmation
+ 
+ $Returns:		
+
+ $Arguments:	win			- WAP data window
+ 				identifier	- Type of list
+ 				reason		- reason for callback	
+ 
+*******************************************************************************/
+
+void AUI_entry_delete_cb(T_MFW_HND win, UBYTE identifier, UBYTE reason)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();	
+	T_WAP_VIEW		*View;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_entry_delete_cb");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	View = data->View;
+	
+	switch(identifier)
+	{
+		case WAP_DELETE_BOOKMARK:
+			switch (reason)
+			{
+				case INFO_KCD_LEFT:
+					AUI_destroy(LIST_WIN);		/* SPR#2086 */
+					ATB_wap_entry_remove(View->Bookmarks, data->OptionSelect);     // Delete the selected bookmark name
+					ATB_wap_entry_remove(View->BookmarksURL, data->OptionSelect);  // Delete the selected bookmark URL
+					ATB_wap_profile_save(View);									// Save change to flash
+					AUI_list_redraw(WAP_BOOKMARKS_LIST, TxtEntryDeleted);
+					break;
+				case INFO_KCD_RIGHT:
+		    	case INFO_KCD_CLEAR:
+					break;
+				default:
+					break;
+			}
+			break;
+
+		case WAP_DELETE_HISTORY:
+			switch (reason)
+			{
+				case INFO_KCD_LEFT:
+					AUI_destroy(LIST_WIN);			/* SPR#2086 */
+					ATB_wap_entry_remove(View->History, data->OptionSelect);  	// Delete the selected history entry name
+					ATB_wap_entry_remove(View->HistoryURL, data->OptionSelect);	// Delete the selected history entry URL
+					ATB_wap_renumber_history(View->History);					// Renumber history list
+					ATB_wap_profile_save(View);									// Save change to flash
+					AUI_list_redraw(WAP_HISTORY_LIST, TxtEntryDeleted);
+					break;
+				case INFO_KCD_RIGHT:
+		    	case INFO_KCD_CLEAR:
+					break;
+				default:
+					break;
+			}
+			break;
+            //xrashmic 16 Dec, 2004 MMI-SPR-27622
+            // To handle the delete profile event.
+		case WAP_DELETE_PROFILE:
+			switch (reason)
+			{
+				case INFO_KCD_LEFT:
+					AUI_destroy(LIST_WIN);										/* Destroy the old list */
+					ATB_wap_profile_delete(data->View, data->OptionSelect);	/* Shifts profile data up */
+					/* Read in the new profile */
+					ATB_wap_profile_read(data->View, data->OptionSelect);
+					ATB_wap_profile_save(View);									// Save change to flash
+					AUI_list_redraw(WAP_PROFILES_LIST, TxtEntryDeleted);
+					break;
+				case INFO_KCD_RIGHT:
+		    	case INFO_KCD_CLEAR:
+					break;
+				default:
+					break;
+			}
+			break;
+		case WAP_CLEAR_HISTORY:
+			switch (reason)
+			{
+				case INFO_KCD_LEFT:
+					ATB_wap_entry_remove_all(View->History);					// Delete all history name entries
+					ATB_wap_entry_remove_all(View->HistoryURL);					// Delete all history URL entries
+					ATB_wap_profile_save(View);									// Save change to flash
+					AUI_entry_list(View->History, (ListCbFunc)AUI_history_list_cb,0); /* SPR#2086 */
+					break;
+				case INFO_KCD_RIGHT:
+		    	case INFO_KCD_CLEAR:
+					break;
+				default:
+					break;
+			}
+			break;
+    }
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_entry_sendSMS
+
+ $Description:	Open up an SMS editing screen with the selected URL
+ 
+ $Returns:		
+
+ $Arguments:	none
+ 
+*******************************************************************************/
+
+int AUI_entry_sendSMS(void)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	T_SmsUserData	UserData;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_entry_sendSMS");
+#endif
+
+ 	if (!data)
+ 	{
+ 		return 0;
+ 	}
+ 	
+	strcpy((char *)UserData.TextBuffer, data->URLSelect);						// Copy name into SMS editing buffer
+	UserData.NumberBuffer[0] = 0;											// No number...
+	UserData.CentreBuffer[0] = 0;											// or service centre supplied.
+
+	data->edit_win = SmsSend_SEND_start(data->parent_win, &UserData);						// Start editing SMS
+
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_profile_name_edit
+
+ $Description:	Opens up a text edit screen for editing the name of a profile
+    	     
+ $Returns:		none.
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+#if 0
+int AUI_profile_name_edit(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	T_EDITOR_DATA	editor_data;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_profile_name_edit");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+   
+	/* SPR#1816 - SH - Clear editor for name (unicode) */
+	data->Buffer[0] = 0x80;
+	data->Buffer[1] = 0x7F;
+	ATB_uc_text_copy((USHORT *)&data->Buffer[2], data->View->Profile->Title, CARD_TITLE_MAX_LEN);							// Copy name into editing buffer
+
+	/* Set up editor. SPR#1816 - SH - Extend max size for unicode string */
+	
+	AUI_standard_editor(&editor_data, data->Buffer, (PROFILENAME_MAX_LEN+1)*sizeof(USHORT), ALPHA_MODE, (T_EDIT_CB)AUI_profile_name_edit_cb);
+	
+	editor_data.TextId				= TxtProfileName;							// "Profile Name:"
+	editor_data.min_enter			= 1;										// Avoid returning empty strings
+			
+	data->edit_win = editor_start(data->parent_win, &editor_data);							// Create input window
+	
+	return 1;
+}
+#endif
+
+extern     char* ATB_mms_get_Title(void);
+int AUI_profile_name_edit(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+
+#ifdef NEW_EDITOR
+	T_AUI_EDITOR_DATA	editor_data;
+#else
+	T_EDITOR_DATA	editor_data;
+#endif /* NEW_EDITOR */
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_profile_name_edit");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+   
+
+#ifdef NEW_EDITOR
+    //CRR 25541: 06 Oct 2004 - xpradipg
+    //commented the addition which is not required in the NEW_EDITOR case
+    //and send the address of the buffer instead of &buffer[2]
+	/* Store name in editor buffer */
+	//data->Buffer[0] = 0x80;
+	//data->Buffer[1] = 0x7F;
+	ATB_uc_text_copy((USHORT *)data->Buffer, data->View->Profile->Title, PROFILENAME_MAX_LEN);							// Copy name into editing buffer
+        
+	/* Set up editor. */	
+	AUI_standard_editor(&editor_data, 0, ED_MODE_ALPHA, TxtProfileName, (T_AUI_EDIT_CB)AUI_profile_name_edit_cb);
+
+	AUI_edit_SetBuffer(&editor_data, ATB_DCS_UNICODE, (UBYTE *)data->Buffer, PROFILENAME_MAX_LEN+1);
+	AUI_edit_SetAltTextStr(&editor_data, 1, TxtNull, TRUE, TxtSoftBack);
+
+	data->edit_win = AUI_edit_Start(data->parent_win, &editor_data);
+	
+#else /* NEW_EDITOR */
+	/* Clear editor for name */
+
+	data->Buffer[0] = 0x80;
+	data->Buffer[1] = 0x7F;
+	ATB_uc_text_copy((USHORT *)&data->Buffer[2], data->View->Profile->Title, PROFILENAME_MAX_LEN);
+
+	/* Set up editor.  */
+	
+	AUI_standard_editor(&editor_data, data->Buffer, (PROFILENAME_MAX_LEN+2)*sizeof(USHORT), ALPHA_MODE, (T_EDIT_CB)AUI_profile_name_edit_cb);
+	
+	editor_data.TextId				= TxtProfileName;
+	editor_data.min_enter			= 1;				/* Avoid returning empty strings */
+			
+	data->edit_win = editor_start(data->parent_win, &editor_data);
+#endif /* NEW_EDITOR */
+
+	return 1;
+}
+
+/*******************************************************************************
+
+ $Function:    	AUI_profile_name_edit_cb
+
+ $Description:	Callback function for editing a profile's title
+ 
+ $Returns:		void
+
+ $Arguments:	parent_win	- the WAP data window
+ 				identifier	- identifier for the edit type (just 0 so far)
+ 				reason		- reason for callback
+ 
+*******************************************************************************/
+
+static void AUI_profile_name_edit_cb(T_MFW_HND parent_win, UBYTE identifier, UBYTE reason)
+{
+   	T_WAP_DATA 		*data		= AUI_wap_data();
+   	T_WAP_VIEW	*View;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION(" AUI_profile_name_edit_cb");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+
+	View = data->View;
+	
+	switch (reason)				
+	{
+		case INFO_KCD_HUP:
+		case INFO_KCD_RIGHT:
+			AUI_destroy(EDIT_WIN);		/* SPR#2086 */
+			break;
+		
+		case INFO_KCD_LEFT:
+			/* SPR#1921 - SH - Destroy old list */
+			AUI_destroy(LIST_WIN);
+			/* Change profile name. SPR#1816 - SH */
+                    //CRR 25541: 06 oct 2004 - xpradipg
+                    //Send the complete buffer to update the list for the changed entry 
+			ATB_wap_entry_change(WAP_PROFILES_LIST, View->ProfilesList,  data->Buffer , View->ProfileId);
+			/* Save change to flash */
+			ATB_wap_profile_save(View);
+			/* List profiles again */
+			AUI_list_redraw(WAP_PROFILES_SETUP, TxtChanged);
+		default:
+			break;
+	}
+	
+	return;
+}
+		
+
+/*******************************************************************************
+
+ $Function:    	AUI_dialupNumber
+
+ $Description:	Opens up a numeric edit screen for editing the dialup number
+    	     
+ $Returns:		none.
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_dialupNumber(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_dialup_number");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	strcpy(data->Buffer, data->View->Profile->DialupNumber);					// Copy dialup number into buffer
+	AUI_number_edit(WAP_DIALUP_NUMBER, TxtDialupNumber);					// Open editor
+
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_IPAddress1
+
+ $Description:	Opens up a numeric edit screen for editing the primary IP address
+    	     
+ $Returns:		none.
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+#if 0
+int AUI_IPAddress1(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	T_EDITOR_DATA	editor_data;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_IPAddress1");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+	
+	strcpy(data->Buffer, data->View->Profile->IPAddress1);						// Copy IP address into edit buffer
+
+	/* Set up editor */
+
+	AUI_standard_editor(&editor_data, data->Buffer, IPADDRESS_MAX_LEN, FORMAT_MODE, (T_EDIT_CB)AUI_number_edit_cb);
+	editor_data.Identifier			= WAP_IP_ADDRESS1;             
+	editor_data.TextId				= TxtIPAddress1;
+	editor_data.min_enter			= 1;										// Avoid returning empty strings
+	editor_data.FormatString		= "NNN\\.NNN\\.NNN\\.NNN";		
+	data->edit_win = editor_start(data->parent_win, &editor_data);							// Create input window
+	
+	return 1;
+}
+#endif
+
+int AUI_IPAddress1(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+#ifdef NEW_EDITOR
+	T_AUI_EDITOR_DATA	editor_data;
+#else
+	T_EDITOR_DATA	editor_data;
+#endif /* NEW_EDITOR */
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_IPAddress1");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	/* Copy IP address into edit buffer */
+	
+	strncpy(data->Buffer, data->View->Profile->IPAddress1, IPADDRESS_MAX_LEN+1);
+
+	/* Set up editor */
+
+#ifdef NEW_EDITOR
+	AUI_standard_editor(&editor_data, WAP_IP_ADDRESS1, ED_MODE_FORMATTED, TxtIPAddress, (T_AUI_EDIT_CB)AUI_number_edit_cb);
+	AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)data->Buffer, IPADDRESS_MAX_LEN+1);
+	AUI_edit_SetAltTextStr(&editor_data, 1, TxtNull, TRUE, TxtSoftBack);
+	AUI_edit_SetFormatStr(&editor_data, "NNN\\.NNN\\.NNN\\.NNN", TRUE, '0');
+	
+	data->edit_win = AUI_edit_Start(data->parent_win, &editor_data);
+#else /* NEW_EDITOR */
+	AUI_standard_editor(&editor_data, data->Buffer, IPADDRESS_MAX_LEN, FORMAT_MODE, (T_EDIT_CB)AUI_number_edit_cb);
+	editor_data.Identifier			= WAP_IP_ADDRESS1;             
+	editor_data.TextId				= TxtIPAddress; /* "IP Address" rather than "IP Address 1" (less confusing)*/
+	editor_data.min_enter			= 1;
+	editor_data.FormatString		= "NNN\\.NNN\\.NNN\\.NNN";		
+	data->edit_win = editor_start(data->parent_win, &editor_data);
+#endif /* NEW_EDITOR */
+
+	return 1;
+}
+
+
+#if 0
+/*******************************************************************************
+
+ $Function:    	AUI_IPAddress2
+
+ $Description:	Opens up a numeric edit screen for editing the secondary IP address
+    	     
+ $Returns:		none.
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_IPAddress2(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	T_EDITOR_DATA	editor_data;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_IPAddress2");
+#endif
+
+   	if (!data)
+   	{
+   		return 0;
+   	}
+
+	strcpy(data->Buffer, data->View->Profile->IPAddress2);						// Copy IP address into edit buffer
+
+	/* Set up editor */
+
+	AUI_standard_editor(&editor_data, data->Buffer, IPADDRESS_MAX_LEN, FORMAT_MODE, (T_EDIT_CB)AUI_number_edit_cb);
+	editor_data.Identifier			= WAP_IP_ADDRESS2;             
+	editor_data.TextId				= TxtIPAddress2;
+	editor_data.min_enter			= 1;										// Avoid returning empty strings
+	editor_data.FormatString		= "NNN\\.NNN\\.NNN\\.NNN";		
+	data->edit_win = editor_start(data->parent_win, &editor_data);							// Create input window
+	
+	return 1;
+}
+#endif
+
+int AUI_IPAddress2(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+#ifdef NEW_EDITOR
+	T_AUI_EDITOR_DATA	editor_data;
+#else
+	T_EDITOR_DATA	editor_data;
+#endif /* NEW_EDITOR */
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_IPAddress2");
+#endif
+
+   	if (!data)
+   	{
+   		return 0;
+   	}
+
+	/* Copy IP address into edit buffer */
+
+	strncpy(data->Buffer, data->View->Profile->IPAddress2, IPADDRESS_MAX_LEN+1);
+	
+	/* Set up editor */
+
+#ifdef NEW_EDITOR
+	AUI_standard_editor(&editor_data, WAP_IP_ADDRESS2, ED_MODE_FORMATTED, TxtIPAddress2, (T_AUI_EDIT_CB)AUI_number_edit_cb);
+	AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)data->Buffer, IPADDRESS_MAX_LEN+1);
+	AUI_edit_SetAltTextStr(&editor_data, 1, TxtNull, TRUE, TxtSoftBack);
+	AUI_edit_SetFormatStr(&editor_data, "NNN\\.NNN\\.NNN\\.NNN", TRUE, '0');
+	
+	data->edit_win = AUI_edit_Start(data->parent_win, &editor_data);
+#else /* NEW_EDITOR */
+	AUI_standard_editor(&editor_data, data->Buffer, IPADDRESS_MAX_LEN, FORMAT_MODE, (T_EDIT_CB)AUI_number_edit_cb);
+	editor_data.Identifier			= WAP_IP_ADDRESS2;             
+	editor_data.TextId				= TxtIPAddress2;
+	editor_data.min_enter			= 1;
+	editor_data.FormatString		= "NNN\\.NNN\\.NNN\\.NNN";		
+	data->edit_win = editor_start(data->parent_win, &editor_data);
+#endif /* NEW_EDITOR */
+
+	return 1;
+}
+
+/*******************************************************************************
+
+ $Function:    	AUI_Port1
+
+ $Description:	Opens up a numeric edit screen for editing the primary port
+    	     
+ $Returns:		none.
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_Port1(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_Port1");
+#endif
+
+   	if (!data)
+   	{
+   		return 0;
+	}
+
+	sprintf(data->Buffer, "%d", data->View->Profile->Port1);					// Copy response timer into buffer
+	AUI_number_edit(WAP_PORT1, TxtPort1);							// Open editor
+
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_Port2
+
+ $Description:	Opens up a numeric edit screen for editing the secondary port
+    	     
+ $Returns:		none.
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_Port2(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_Port2");
+#endif
+
+   	if (!data)
+   	{
+   		return 0;
+   	}
+   	
+	sprintf(data->Buffer, "%d", data->View->Profile->Port2);					// Copy response timer into buffer
+	AUI_number_edit(WAP_PORT2, TxtPort2);									// Open editor
+
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_APN
+
+ $Description:	Opens up a numeric edit screen for editing the APN
+    	     
+ $Returns:		none.
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_APN(MfwMnu* menu, MfwMnuItem* item)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_APN");
+#endif
+
+	AUI_edit(NULL,WAP_EDIT_APN, TxtAPN, URL_MAX_LEN);
+
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_username
+
+ $Description:	Opens up a text edit screen for editing the ISP username
+    	     
+ $Returns:		none.
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+#if 0
+int AUI_username(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	T_EDITOR_DATA	editor_data;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_username");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+	
+	strcpy(data->Buffer, data->View->Profile->Username);						// Copy name into editing buffer
+
+	/* Set up editor */
+	
+	AUI_standard_editor(&editor_data, data->Buffer, USERNAME_MAX_LEN, ALPHA_MODE, (T_EDIT_CB)AUI_username_cb);
+	
+	editor_data.TextId				= TxtISPUsername;							// "Username"
+	editor_data.hide				= FALSE;
+			
+	data->edit_win = editor_start(data->parent_win, &editor_data);							// Create input window
+	
+	return 1;
+}
+#endif
+
+int AUI_username(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+#ifdef NEW_EDITOR
+	T_AUI_EDITOR_DATA	editor_data;
+#else
+	T_EDITOR_DATA	editor_data;
+#endif /* NEW_EDITOR */
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_username");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	/* Copy name into editing buffer */
+
+	strncpy(data->Buffer, data->View->Profile->Username, USERNAME_MAX_LEN+1);
+
+	/* Set up editor */
+
+#ifdef NEW_EDITOR
+	AUI_standard_editor(&editor_data, 0, ED_MODE_ALPHA, TxtISPUsername, (T_AUI_EDIT_CB)AUI_username_cb);
+	AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)data->Buffer, USERNAME_MAX_LEN+1);
+			
+	data->edit_win = AUI_edit_Start(data->parent_win, &editor_data);
+	
+#else /* NEW_EDITOR */
+	AUI_standard_editor(&editor_data, data->Buffer, USERNAME_MAX_LEN, ALPHA_MODE, (T_EDIT_CB)AUI_username_cb);
+	
+	editor_data.TextId				= TxtISPUsername;
+	editor_data.hide				= FALSE;
+			
+	data->edit_win = editor_start(data->parent_win, &editor_data);
+#endif /* NEW_EDITOR */
+
+	return 1;
+}
+
+/*******************************************************************************
+
+ $Function:    	AUI_username_cb
+
+ $Description:	Callback function for editing the ISP username
+ 
+ $Returns:		void
+
+ $Arguments:	parent_win	- the WAP data window
+ 				identifier	- identifier for the edit type (just 0 so far)
+ 				reason		- reason for callback
+ 
+*******************************************************************************/
+
+static void AUI_username_cb(T_MFW_HND parent_win, UBYTE identifier, UBYTE reason)
+{
+   	T_WAP_DATA 		*data		= AUI_wap_data();
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION(" AUI_username_cb");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	switch (reason)				
+	{
+		case INFO_KCD_HUP:
+		case INFO_KCD_RIGHT:
+			AUI_destroy( EDIT_WIN);					/* SPR#2086 */
+			break;
+		
+		case INFO_KCD_LEFT:
+			AUI_destroy( EDIT_WIN);						/* SPR#2086 */
+			strcpy(data->View->Profile->Username, data->Buffer);				// Change username
+			ATB_wap_profile_save(data->View);									// Save change to flash
+			AUI_info_dialog(TxtChanged, NULL);			/* SPR#2086 */
+			break;
+		default:
+			break;
+	}
+	
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_password
+
+ $Description:	Opens up a text edit screen for editing the ISP password
+    	     
+ $Returns:		none.
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+#if 0
+int AUI_password(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	T_EDITOR_DATA	editor_data;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_password");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+	
+	strcpy(data->Buffer, data->View->Profile->Password);						// Copy password into editing buffer
+
+	/* Set up editor */
+	
+	AUI_standard_editor(&editor_data, data->Buffer, PASSWORD_MAX_LEN, ALPHA_MODE, (T_EDIT_CB)AUI_password_cb);
+	
+	editor_data.TextId				= TxtISPPassword;							// "Password"
+	editor_data.hide				= TRUE;										// Password is hidden (*****)
+			
+	data->edit_win = editor_start(data->parent_win, &editor_data);							// Create input window
+	
+	return 1;
+}
+#endif
+int AUI_password(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+#ifdef NEW_EDITOR
+	T_AUI_EDITOR_DATA	editor_data;
+#else
+	T_EDITOR_DATA	editor_data;
+#endif /* NEW_EDITOR */
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_password");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	/* Copy password into editing buffer */
+	
+	strncpy(data->Buffer, data->View->Profile->Password, PASSWORD_MAX_LEN+1);
+
+	/* Set up editor */
+
+#ifdef NEW_EDITOR
+	AUI_standard_editor(&editor_data, 0, ED_MODE_ALPHA | ED_MODE_HIDDEN, TxtISPPassword, (T_AUI_EDIT_CB)AUI_password_cb);
+	AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)data->Buffer, PASSWORD_MAX_LEN+1);
+			
+	data->edit_win = AUI_edit_Start(data->parent_win, &editor_data);
+#else /* NEW_EDITOR */
+	AUI_standard_editor(&editor_data, data->Buffer, PASSWORD_MAX_LEN, ALPHA_MODE, (T_EDIT_CB)AUI_password_cb);
+	
+	editor_data.TextId				= TxtISPPassword;
+	editor_data.hide				= TRUE;				/* Password is hidden (*****) */
+			
+	data->edit_win = editor_start(data->parent_win, &editor_data);
+#endif /* NEW_EDITOR */
+
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_password_cb
+
+ $Description:	Callback function for editing the ISP password
+ 
+ $Returns:		void
+
+ $Arguments:	parent_win	- the WAP data window
+ 				identifier	- identifier for the edit type (just 0 so far)
+ 				reason		- reason for callback
+ 
+*******************************************************************************/
+
+static void AUI_password_cb(T_MFW_HND parent_win, UBYTE identifier, UBYTE reason)
+{
+  	T_WAP_DATA 		*data		= AUI_wap_data();
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION(" AUI_password_cb");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	switch (reason)				
+	{
+		case INFO_KCD_HUP:
+		case INFO_KCD_RIGHT:
+			AUI_destroy( EDIT_WIN);							/* SPR#2086 */
+			break;
+		
+		case INFO_KCD_LEFT:
+			AUI_destroy( EDIT_WIN);		/* SPR#2086 */
+			strcpy(data->View->Profile->Password, data->Buffer);				// Change password
+			ATB_wap_profile_save(data->View);									// Save change to flash
+			AUI_info_dialog(TxtChanged, NULL);		/* SPR#2086 */
+			break;
+		default:
+			break;
+	}
+	
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_response_timer
+
+ $Description:	Opens up a numeric edit screen for editing the server number
+    	     
+ $Returns:		none.
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_response_timer(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_response_timer");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	sprintf(data->Buffer, "%d", data->View->Profile->ResponseTimer);			// Copy response timer into buffer
+	AUI_number_edit(WAP_RESPONSE_TIMER, TxtResponseTimer);					// Open editor
+
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_number_edit
+
+ $Description:	Opens up a numeric edit screen.
+ 				The digits to be edited should be in data->Buffer.
+ 				SPR#2086 - Removed window parameter, made static void
+    	     
+ $Returns:		none.
+
+ $Arguments:	identifier	- specifies which edit screen it is (server no. etc)
+ 				prompt		- prompt, e.g "IP Address"
+ 
+*******************************************************************************/
+#if 0
+static void AUI_number_edit(int identifier, USHORT prompt)
+{
+ 	T_WAP_DATA *data = AUI_wap_data();
+ 	T_EDITOR_DATA	editor_data;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_number_edit()");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	/* Set up editor */
+
+	AUI_standard_editor(&editor_data, data->Buffer, NUMBER_MAX_LEN, DIGITS_MODE, (T_EDIT_CB)AUI_number_edit_cb);
+	
+	editor_data.Identifier			= identifier;								// this is the purpose            
+	editor_data.TextId				= prompt;
+	editor_data.min_enter			= 1;										// Avoid returning empty strings
+			
+	data->edit_win = editor_start(data->parent_win, &editor_data);					// Create input window
+	
+	return;
+}
+#endif
+
+//int AUI_number_edit(T_MFW_HND parent_win, int identifier, USHORT prompt)
+static void  AUI_number_edit(int identifier, USHORT prompt)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+#ifdef NEW_EDITOR
+	T_AUI_EDITOR_DATA	editor_data;
+#else
+	T_EDITOR_DATA	editor_data;
+#endif /* NEW_EDITOR */
+
+	if (!data)
+	{
+		return;
+	}
+
+	/* Set up editor */
+
+#ifdef NEW_EDITOR
+	AUI_standard_editor(&editor_data, identifier, 0, prompt, (T_AUI_EDIT_CB)AUI_number_edit_cb);
+	AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)data->Buffer, NUMBER_MAX_LEN+1);
+	AUI_edit_SetAltTextStr(&editor_data, 1, TxtNull, TRUE, TxtSoftBack);
+			
+	data->edit_win = AUI_edit_Start(data->parent_win, &editor_data);
+	
+#else /* NEW_EDITOR */
+	AUI_standard_editor(&editor_data, data->Buffer, NUMBER_MAX_LEN, DIGITS_MODE, (T_EDIT_CB)AUI_number_edit_cb);
+	
+	editor_data.Identifier			= identifier;       
+	editor_data.TextId				= prompt;
+	editor_data.min_enter			= 1;
+			
+	data->edit_win = editor_start(data->parent_win, &editor_data);
+#endif /* NEW_EDITOR */
+
+	return;
+}
+
+/* Marcus: Issue 1686: 07/03/2003: Start */
+/*******************************************************************************
+
+ $Function:    	validate_IP_address
+
+ $Description:	Check the validity of an IP address in the form 255.255.255.255
+ 
+ $Returns:		BOOL, TRUE if valid, else FALSE
+
+ $Arguments:	buffer - the ASCIIZ string containing the IP address to validate
+ 
+*******************************************************************************/
+
+static BOOL validate_IP_address(char *buffer)
+{
+    char temp[16];
+    char *token;
+    int  value;
+    
+    if (strlen(buffer) > sizeof(temp)-1)
+        return FALSE;
+
+    strcpy(temp, buffer);
+    for (token = strtok(temp, ".");
+         token != NULL;
+         token = strtok(NULL, "."))
+    {
+        value = atoi(token);
+
+		/* SPR#1976 - SH - Check for null length IP address too */
+        if (strlen(token)==0 || (value < 0) || (value > 255))
+            return FALSE;
+    }
+         
+    return TRUE;
+}
+/* Marcus: Issue 1686: 07/03/2003: End */
+
+/*******************************************************************************
+
+ $Function:    	AUI_number_edit_cb
+
+ $Description:	Callback function for editing a number
+ 
+ $Returns:		void
+
+ $Arguments:	parent_win	- the WAP data window
+ 				identifier	- identifier for the edit type (server or service no.)
+ 				reason		- reason for callback
+ 
+*******************************************************************************/
+
+static void AUI_number_edit_cb(T_MFW_HND parent_win, UBYTE identifier, UBYTE reason)
+{
+   	T_WAP_DATA *data = AUI_wap_data();
+	T_WAP_PROFILE	*Profile;
+	BOOL			valid;
+	int				value;
+
+	/* SPR#1976 - SH - Added some more checks to ensure values returned are valid */
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_number_edit_cb");
+#endif
+
+	if (!data || !data->View)
+	{
+		return;
+	}
+
+	Profile = data->View->Profile;
+	
+	switch (reason)				
+	{
+		case INFO_KCD_HUP:
+		case INFO_KCD_RIGHT:
+			AUI_destroy( EDIT_WIN);				/* SPR#2086 */
+			break;
+		
+		case INFO_KCD_LEFT:
+		    {
+    			switch(identifier)
+    			{
+    				case WAP_DIALUP_NUMBER:
+    					strcpy(Profile->DialupNumber, data->Buffer);		    // Copy the dialup number to the Profile
+						valid = TRUE;
+    					break;
+
+    				case WAP_IP_ADDRESS1:
+    					valid = validate_IP_address(data->Buffer);
+    					
+    				    if (valid)
+    				    {
+    					    strcpy(Profile->IPAddress1, data->Buffer);			// Copy the IP address to the Profile
+						}
+    					else
+						{
+    					    AUI_info_dialog(TxtOutofRange, TxtNull);  /* SPR#2086 */
+						}
+    					break;
+
+    				case WAP_IP_ADDRESS2:
+    				    valid = validate_IP_address(data->Buffer);
+    					
+    				    if (valid)
+    				    {
+    					    strcpy(Profile->IPAddress2, data->Buffer);			// Copy the IP address to the Profile
+						}
+    					else
+						{
+    					    AUI_info_dialog(TxtOutofRange, TxtNull);  /* SPR#2086 */
+						}
+    					break;
+
+				//xpradipg - Aug 4,2004: changes for wap 2.0 menus
+				case WAP_NAME_SERVER1:
+					valid = validate_IP_address(data->Buffer);
+    					
+    				    if (valid)
+    				    {
+    					    strcpy(Profile->NameServer1, data->Buffer);			// Copy the IP address to the Profile
+					}
+    					else
+					{
+    					    AUI_info_dialog(TxtOutofRange, TxtNull);  /* SPR#2086 */
+					}
+    					break;
+
+				case WAP_NAME_SERVER2:
+					valid = validate_IP_address(data->Buffer);
+    					
+    				    if (valid)
+    				    {
+    					    strcpy(Profile->NameServer2, data->Buffer);			// Copy the IP address to the Profile
+					}
+    					else
+					{
+    					    AUI_info_dialog(TxtOutofRange, TxtNull);  /* SPR#2086 */
+					}
+    					break;
+
+
+    				case WAP_PORT1:
+    					value = atoi(data->Buffer);
+    					if (strlen(data->Buffer)>0 && value>=0 && value<=0xFFFF)
+    					{
+    						valid = TRUE;
+    						Profile->Port1 = value;
+    					}
+    					else
+    					{
+    						valid = FALSE;
+    					    AUI_info_dialog(TxtOutofRange, TxtNull); /* SPR#2086 */
+						}
+    					break;
+
+    				case WAP_PORT2:
+   						value = atoi(data->Buffer);
+    					if (strlen(data->Buffer)>0 && value>=0 && value<=0xFFFF)
+    					{
+    						valid = TRUE;
+    						Profile->Port2 = value;
+    					}
+    					else
+    					{
+    						valid = FALSE;
+    					    AUI_info_dialog(TxtOutofRange, TxtNull); /* SPR#2086 */
+						}
+    					break;
+
+    				case WAP_RESPONSE_TIMER:
+    					value = atoi(data->Buffer);
+    					if (strlen(data->Buffer)>0 && value>=0 && value<=0xFFFF)
+    					{
+    						valid = TRUE;
+    						Profile->ResponseTimer = value;
+    					}
+    					else
+    					{
+    						valid = FALSE;
+    					    AUI_info_dialog(TxtOutofRange, TxtNull); /* SPR#2086 */
+						}
+    					break;
+    			}
+    			
+    			if (valid)
+    			{
+        			AUI_destroy( EDIT_WIN); /* SPR#2086 */
+        			ATB_wap_profile_save(data->View);									// Save change to flash
+        			AUI_info_dialog(TxtChanged, NULL);		/* SPR#2086 */
+    			}
+		    } 
+
+			break;
+		
+		default:
+			break;
+	}
+	
+	return;
+
+}
+
+
+/*******************************************************************************
+
+ $Function:    	MMI_AUI_homepage_edit
+
+ $Description:	Opens up a text edit screen for changing the homepage URL
+    	     
+ $Returns:		MFW_EVENT_CONSUMED
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item
+ 
+*******************************************************************************/
+
+int AUI_homepage_edit(MfwMnu* menu, MfwMnuItem* item)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_homepage_edit");
+#endif
+
+	AUI_edit(NULL,WAP_EDIT_HOMEPAGE, TxtEditURL, URL_MAX_LEN);
+
+	return MFW_EVENT_CONSUMED;
+}
+
+
+//xpradipg - Aug 4,2004: changes for wap 2.0 menus
+int AUI_NameServer1(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+#ifdef NEW_EDITOR
+	T_AUI_EDITOR_DATA	editor_data;
+#else
+	T_EDITOR_DATA	editor_data;
+#endif /* NEW_EDITOR */
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_NameServer1");
+#endif
+
+   	if (!data)
+   	{
+   		return 0;
+   	}
+
+	/* Copy IP address into edit buffer */
+
+	strncpy(data->Buffer, data->View->Profile->NameServer1, IPADDRESS_MAX_LEN+1);
+	
+	/* Set up editor */
+
+#ifdef NEW_EDITOR
+	AUI_standard_editor(&editor_data, WAP_NAME_SERVER1, ED_MODE_FORMATTED, TxtNameServer1, (T_AUI_EDIT_CB)AUI_number_edit_cb);
+	AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)data->Buffer, IPADDRESS_MAX_LEN+1);
+	AUI_edit_SetAltTextStr(&editor_data, 1, TxtNull, TRUE, TxtSoftBack);
+	AUI_edit_SetFormatStr(&editor_data, "NNN\\.NNN\\.NNN\\.NNN", TRUE, '0');
+	
+	data->edit_win = AUI_edit_Start(data->parent_win, &editor_data);
+#else /* NEW_EDITOR */
+	AUI_standard_editor(&editor_data, data->Buffer, IPADDRESS_MAX_LEN, FORMAT_MODE, (T_EDIT_CB)AUI_number_edit_cb);
+	editor_data.Identifier			= WAP_NAME_SERVER1;             
+	editor_data.TextId				= TxtNameServer1;
+	editor_data.min_enter			= 1;
+	editor_data.FormatString		= "NNN\\.NNN\\.NNN\\.NNN";		
+	data->edit_win = editor_start(data->parent_win, &editor_data);
+#endif /* NEW_EDITOR */
+
+	return 1;
+}
+
+
+
+int AUI_NameServer2(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+#ifdef NEW_EDITOR
+	T_AUI_EDITOR_DATA	editor_data;
+#else
+	T_EDITOR_DATA	editor_data;
+#endif /* NEW_EDITOR */
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_NameServer2");
+#endif
+
+   	if (!data)
+   	{
+   		return 0;
+   	}
+
+	/* Copy IP address into edit buffer */
+
+	strncpy(data->Buffer, data->View->Profile->NameServer2, IPADDRESS_MAX_LEN+1);
+	
+	/* Set up editor */
+
+#ifdef NEW_EDITOR
+	AUI_standard_editor(&editor_data, WAP_NAME_SERVER2, ED_MODE_FORMATTED, TxtNameServer2, (T_AUI_EDIT_CB)AUI_number_edit_cb);
+	AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)data->Buffer, IPADDRESS_MAX_LEN+1);
+	AUI_edit_SetAltTextStr(&editor_data, 1, TxtNull, TRUE, TxtSoftBack);
+	AUI_edit_SetFormatStr(&editor_data, "NNN\\.NNN\\.NNN\\.NNN", TRUE, '0');
+	
+	data->edit_win = AUI_edit_Start(data->parent_win, &editor_data);
+#else /* NEW_EDITOR */
+	AUI_standard_editor(&editor_data, data->Buffer, IPADDRESS_MAX_LEN, FORMAT_MODE, (T_EDIT_CB)AUI_number_edit_cb);
+	editor_data.Identifier			= WAP_NAME_SERVER2;             
+	editor_data.TextId				= TxtNameServer2;
+	editor_data.min_enter			= 1;
+	editor_data.FormatString		= "NNN\\.NNN\\.NNN\\.NNN";		
+	data->edit_win = editor_start(data->parent_win, &editor_data);
+#endif /* NEW_EDITOR */
+
+	return 1;
+}
+
+
+int AUI_PPGAuthentication(MfwMnu * menu, MfwMnuItem * item)
+{
+
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	T_MFW_HND		setting_win;
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_PPGAuthentication");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}	
+
+
+/* SPR#2218 - SH - Don't use options_win */
+		
+	setting_win = bookMenuStart(data->parent_win, WAPPPGAuthenticationAttributes(), 0); /* SPR#2086 */
+	SEND_EVENT(setting_win, DEFAULT_OPTION, NULL, &data->View->Profile->PPGAuthentication);
+	
+	return 1;
+
+}
+
+int AUI_PPGAuthentication_set(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_PPGAuthentication_set");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	data->View->Profile->PPGAuthentication= menu->lCursor[menu->level];			// Change connection type
+	ATB_wap_profile_save(data->View);											// Save change to flash
+	AUI_info_dialog(TxtChanged, NULL);			/* SPR#2086 */
+	return 1;
+}
+
+int AUI_WirelessProfiledHTTP(MfwMnu * menu, MfwMnuItem * item)
+{
+
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	T_MFW_HND		setting_win;
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_PPGAuthentication");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}	
+
+
+/* SPR#2218 - SH - Don't use options_win */
+		
+	setting_win = bookMenuStart(data->parent_win, WAPWirelessProfiledHTTPAttributes(), 0); /* SPR#2086 */
+	SEND_EVENT(setting_win, DEFAULT_OPTION, NULL, &data->View->Profile->WirelessProfiledHTTP);
+	
+	return 1;
+
+}
+
+
+int AUI_WirelessProfiledHTTP_set(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_WirelessProfiledHTTP_set");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	data->View->Profile->WirelessProfiledHTTP= menu->lCursor[menu->level];			// Change connection type
+	ATB_wap_profile_save(data->View);											// Save change to flash
+	AUI_info_dialog(TxtChanged, NULL);			/* SPR#2086 */
+	return 1;
+}
+
+BOOL HTTP_Selected()
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	USHORT PortNumber,PortNumber1;
+
+	PortNumber = data->View->Profile->Port1;
+	PortNumber1=data->View->Profile->Port2;
+
+	TRACE_EVENT_P2("The values of Port1 and Port2 are %d  and %d",PortNumber,PortNumber1);
+	
+	if(data->View->Profile->Port1 ==9201)
+		return FALSE;
+	return TRUE;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_connectionType
+
+ $Description:	Sets cursor position for this menu based on the current settings
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item
+ 
+*******************************************************************************/
+
+int AUI_connectionType(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+	T_MFW_HND		setting_win;
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_connectionType");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+
+	/* SPR#2218 - SH - Don't use options_win */
+	
+	setting_win = bookMenuStart(data->parent_win, WAPConnectionTypeAttributes(), 0); /* SPR#2086 */
+	SEND_EVENT(setting_win, DEFAULT_OPTION, NULL, &data->View->Profile->ConnectionType);
+	
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_connectionType_set
+
+ $Description:	Set WAP connection to temporary or permanent
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item
+ 
+*******************************************************************************/
+
+int AUI_connectionType_set(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_connectionType_set");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	data->View->Profile->ConnectionType = menu->lCursor[menu->level];			// Change connection type
+	ATB_wap_profile_save(data->View);											// Save change to flash
+	AUI_info_dialog(TxtChanged, NULL);			/* SPR#2086 */
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_connectionSpeed
+
+ $Description:	SPR#1827 - SH - Added this function
+				Sets cursor position for this menu based on the current settings
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item
+ 
+*******************************************************************************/
+
+int AUI_connectionSpeed(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+	T_MFW_HND		setting_win;
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_connectionSpeed");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	/* SPR#2218 - SH - Don't use options_win */
+		
+	setting_win = bookMenuStart(data->parent_win, WAPConnectionSpeedAttributes(), 0); /* SPR#2086 */
+	SEND_EVENT(setting_win, DEFAULT_OPTION, NULL, &data->View->Profile->ConnectionSpeed);
+	
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_connectionSpeed_set
+
+ $Description:	SPR#1827 - SH - Added this function
+ 				Set WAP connection speed to analogue, digital
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item
+ 
+*******************************************************************************/
+
+int AUI_connectionSpeed_set(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_connectionSpeed_set");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	data->View->Profile->ConnectionSpeed = menu->lCursor[menu->level];			// Change connection type
+	ATB_wap_profile_save(data->View);											// Save change to flash
+	AUI_info_dialog(TxtChanged, NULL);				/* SPR#2086 */
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_security
+
+ $Description:	Sets cursor position for this menu based on the current settings
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item
+ 
+*******************************************************************************/
+
+int AUI_security(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+	T_MFW_HND		setting_win;
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_security_on");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	/* SPR#2218 - SH - Don't use options win */
+	
+	setting_win = bookMenuStart(data->parent_win, WAPSecurityOptionAttributes(), 0); /* SPR#2086 */
+	SEND_EVENT(setting_win, DEFAULT_OPTION, NULL, &data->View->Profile->Security);
+
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_security_set
+
+ $Description:	Switch security on or off
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item
+ 
+*******************************************************************************/
+
+int AUI_security_set(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_security_off");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	data->View->Profile->Security = (BOOL)menu->lCursor[menu->level];
+	ATB_wap_profile_save(data->View);											// Save change to flash	
+	AUI_info_dialog(TxtChanged, NULL);		/* SPR#2086 */
+
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_access
+
+ $Description:	Sets cursor position for this menu based on the current settings
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item
+ 
+*******************************************************************************/
+
+int AUI_access(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+	T_MFW_HND		setting_win;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_access");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	/* SPR#2218 - SH - Don't use options win */
+
+	//setting_win = bookMenuStart(data->parent_win, WAPAccessTypeAttributes(), 0); /* SPR#2086 */
+	
+	setting_win = bookMenuStart(data->parent_win, WAPGPRSDialupAttributes(), 0); /* SPR#2086 */
+	SEND_EVENT(setting_win, DEFAULT_OPTION, NULL, &data->View->Profile->AccessType);
+
+	return 1;
+}
+
+
+
+
+int AUI_profile_select(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();	
+    
+        //xrashmic 23 Dec, 2004 MMI-SPR-27623
+	// Store the current profile 
+	data->profile_store = data->View->ProfileId;
+	
+	ATB_wap_profile_save(data->View);
+	
+	//AUI_info_dialog(data->win, TxtChanged, TxtNull);		
+	AUI_info_dialog(TxtChanged, NULL);//2086
+  			
+	return MFW_EVENT_CONSUMED;
+}
+
+/*******************************************************************************
+
+ $Function:    	AUI_access_set
+
+ $Description:	Set access type
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item
+ 
+*******************************************************************************/
+
+int AUI_access_set(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_access_CSD");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	data->View->Profile->AccessType  = menu->lCursor[menu->level];				// Change access type
+	ATB_wap_profile_save(data->View);											// Save change to flash	
+	AUI_info_dialog(TxtChanged, NULL);		/* SPR#2086 */
+
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_savehist
+
+ $Description:	Sets cursor position for this menu based on the current settings
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item
+ 
+*******************************************************************************/
+
+int AUI_savehist(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA	*data = AUI_wap_data();
+	UBYTE SaveHistory;
+	T_MFW_HND		setting_win;
+	
+#ifdef TRACE_AUIWAP	
+	TRACE_FUNCTION("AUI_savehist");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	/* SPR#2218 - SH - Don't use options win */
+
+	setting_win = bookMenuStart(data->parent_win, WAPSaveHistoryAttributes(), 0); /* SPR#2086 */
+	SaveHistory = ATB_wap_profile_setting(WAP_STATUS_SAVEHISTORY);	/* 1 or 0 depending on flag */
+	SEND_EVENT(setting_win, DEFAULT_OPTION, NULL, &SaveHistory);
+
+	return 1;
+}
+
+/*******************************************************************************
+
+ $Function:    	AUI_savehist_set
+
+ $Description:	Set save history on or off
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item
+ 
+*******************************************************************************/
+
+int AUI_savehist_set(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_savehist_set");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	ATB_wap_profile_setting_change(WAP_STATUS_SAVEHISTORY, menu->lCursor[menu->level]); /* SPR#2086 */
+	
+	ATB_wap_profile_save(data->View);											// Save change to flash
+	AUI_info_dialog(TxtChanged, NULL);  /* SPR#2086 */
+
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_scaleimages
+
+ $Description:	Sets cursor position for this menu based on the current settings
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item
+ 
+*******************************************************************************/
+
+int AUI_scaleimages(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA	*data = AUI_wap_data();
+	UBYTE ScaleImages;
+	T_MFW_HND		setting_win;
+	
+#ifdef TRACE_AUIWAP	
+	TRACE_FUNCTION("AUI_scaleimages");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	/* SPR#2218 - SH - Don't use options win */
+
+	setting_win = bookMenuStart(data->parent_win, WAPScaleImagesAttributes(), 0); /* SPR#2086 */
+	ScaleImages = ATB_wap_profile_setting(WAP_STATUS_SCALEIMAGES);	/* 1 or 0 depending on flag */
+	SEND_EVENT(setting_win, DEFAULT_OPTION, NULL, &ScaleImages);
+
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_scaleimages_set
+
+ $Description:	Set image scaling on or off
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item
+ 
+*******************************************************************************/
+
+int AUI_scaleimages_set(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_scaleimages_set");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	ATB_wap_profile_setting_change(WAP_STATUS_SCALEIMAGES, menu->lCursor[menu->level]); /* SPR#2086 */
+	
+	ATB_wap_profile_save(data->View);			// Save change to flash
+	AUI_info_dialog(TxtChanged, NULL);  /* SPR#2086 */
+
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_info_dialog
+
+ $Description:	Display message for three seconds
+ 				SPR#2086 - Removed window parameter
+ 
+ $Returns:		None
+
+ $Arguments:	TextId1 			- Id of text string to display
+				TextId2 			- Id of text string to display
+ 
+*******************************************************************************/
+
+void AUI_info_dialog(USHORT TxtId1, USHORT TxtId2)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+	T_DISPLAY_DATA	display_info;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_info_dialog");
+#endif
+	dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtId1, TxtId2, COLOUR_WAP_POPUP);
+	dlg_initDisplayData_events( &display_info, NULL, THREE_SECS, 0 );
+	display_info.Identifier		= 0;
+	
+	info_dialog(data->parent_win, &display_info);
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_error_dialog
+
+ $Description:	Display error message for three seconds
+ 				SPR#1574 - SH - Add "GPRS not supported" message
+ 
+ $Returns:		
+
+ $Arguments:	View			- The current view
+ 				errorCode		- Number of the error
+ 
+*******************************************************************************/
+//xrashmic 19 Aug, 2004 Bug: 2, 3, 36 and 42
+//The status information is handled by MMS module separatly.
+// and wap module separatly
+void AUI_error_dialog(T_WAP_VIEW *View, SHORT errorCode)
+{
+        // xreddymn Mar-05-2005 MMI-SPR-26144: disable dialog display when sending MMS
+        if(!MMSactive)
+        {
+              AUI_wap_error_dialog(View, errorCode);
+        }
+}
+
+void AUI_wap_error_dialog(T_WAP_VIEW *View, SHORT errorCode)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	T_DISPLAY_DATA	display_info;
+	static char errorNumber[20];
+	char *err;
+	USHORT errId1, errId2;
+	USHORT lsk, rsk;
+	SHORT newCode;
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_error_dialog");
+	TRACE_EVENT_P1("WAP Error: %d", errorCode);								// Convert the error code to text
+#endif
+
+	/* SPR#2086 - SH - Ensure WAP data exists */
+	
+	data = AUI_wap_data();
+
+	if (!data)
+	{
+		return;
+	}
+	/* SPR#1793 - SH - Intercept fatal error */
+        //xrashmic 29 Nov, 2004 MMI-SPR-26161
+        // When the downloaded data exceeds the limit or the MIME type is not supported, 
+        // the download is cancelled and the error is displayed here.
+        if((obj_Type == EMtUnknown && downloaded_data_size!=0 ) //download has started but the MIME type is not supported
+            ||(downloaded_data_size>MAX_DOWNLOAD)) //download of a supported MIMI type was in progress, but it exceeded the limit
+        {
+            	if (data->error_win)
+		{
+			SEND_EVENT(data->error_win, DIALOG_DESTROY, 0, 0);
+			data->error_win = NULL;
+		}
+		if (data->connect_win)
+		{
+			SEND_EVENT(data->connect_win, DIALOG_DESTROY, 0, 0);
+			data->connect_win = NULL;
+		}
+		if (data->temp_win)
+		{
+			SEND_EVENT(data->temp_win, DIALOG_DESTROY, 0, 0);
+			data->temp_win = NULL;
+		}
+            if(obj_Type == EMtUnknown)
+                //xrashmic 08 Feb, 2005 MMI-SPR-27853
+                //Added few more parameters for this function
+                 information_dialog(TxtNotSupported, TxtType, NULL,NULL,TxtNull, TxtSoftBack, FOREVER,KEY_RIGHT,NULL);
+            else
+                //xrashmic 08 Feb, 2005 MMI-SPR-27853
+                //Added few more parameters for this function                
+                 information_dialog(TxtObject, TxtLarge, NULL,NULL, TxtNull, TxtSoftBack, FOREVER,KEY_RIGHT,NULL);
+
+              downloaded_data_size = 0;
+              obj_Type = EMtUnknown;
+
+            return;
+        }
+	//if (errorCode==8002)
+	//OUT OF MEMORY code 0x903 
+	if (errorCode==2307)
+	{
+		TRACE_EVENT("WAP MEMORY FULL");
+			
+		/* If we're in WAP, error is fatal */
+		
+		if (data->View)
+		{
+			dlg_initDisplayData_TextId( &display_info, TxtNull, TxtSoftOK, TxtFatalError, TxtErrorOutOfMem, COLOUR_WAP_POPUP);
+			dlg_initDisplayData_events( &display_info, NULL, FOREVER, KEY_RIGHT);
+			info_dialog(data->parent_win, &display_info);
+			AUI_destroy(ALL_WAP); /* SPR#2086 - ALL_WAP for emergency shutdown*/
+		}
+
+		return;
+	}
+	
+	/* SPR#1824 - SH - New error message handling */
+	
+	errId1 = TxtNull;
+	errId2 = TxtNull;
+	newCode = errorCode;
+	
+/*	if ((errorCode>=69 && errorCode<=101)
+		|| (errorCode>=64 && errorCode<=67)
+		|| errorCode==1013)
+*/
+  if ((errorCode>=1320 && errorCode<=1323)
+		|| (errorCode>=1325 && errorCode<=1345)
+		|| errorCode==2305 || errorCode==512
+    || errorCode==517 || errorCode==518)
+	{
+		newCode = ERROR_COMMUNICATION_SERVER;
+	}
+
+/*	else if ((errorCode>=0 && errorCode<=9)
+		|| (errorCode>=224 && errorCode<=227)
+		|| (errorCode>=229 && errorCode<=234)
+		|| (errorCode>=5300 && errorCode<=5399)
+		|| errorCode==1010 || errorCode==1018)
+*/
+	else if ((errorCode>=768 && errorCode<=780)
+		|| errorCode==524)
+	{
+		newCode = ERROR_COMMUNICATION_GATEWAY;
+	}
+
+/*  else if ((errorCode>=1301 && errorCode<=3014)
+		|| (errorCode>=4002 && errorCode<=5099)
+		|| (errorCode>=5200 && errorCode<=5299)
+		|| (errorCode>=5400 && errorCode<=5499)
+		|| (errorCode>=6001 && errorCode<=8001)
+		|| errorCode==1003 || errorCode==1004
+		|| errorCode==1012 || errorCode==1015
+		|| errorCode==1016 || errorCode==1019
+		|| errorCode==1104)
+*/
+	else if ((errorCode>=258 && errorCode<=262)
+		|| (errorCode>=519 && errorCode<=523)
+    || (errorCode>=1543 && errorCode<=1546)
+    || (errorCode>=2309 && errorCode<=2313)
+    || (errorCode>=1024 && errorCode<=1033)
+		|| errorCode==516 || errorCode==1538
+    || errorCode==1540 || errorCode==2308
+    || errorCode==2565 || errorCode==2566
+    || errorCode==256 || errorCode==1536
+    || errorCode==1792 || errorCode==2048
+    || errorCode==2304)
+	{
+		newCode = ERROR_UNEXPECTED;
+	}
+
+	else if (errorCode>=2560 && errorCode<=2567)
+	{
+		newCode = ERROR_SECURITY;
+	}
+	
+	switch(newCode)
+	{
+		case ERROR_GPRS_NOT_SUPPORTED:
+			errId1 = TxtGPRS;
+			errId2 = TxtNotSupported;
+			break;
+
+		/* SPR#1656 - SH - New error when call is disconnected */
+		case ERROR_CALL_DISCONNECTED:
+			errId1 = TxtConnection;
+			errId2 = TxtFailed;
+			break;
+
+//		case 8001:
+    case 2306:
+			errId1 = TxtErrorMemLow; break;
+			
+		/* Error type 1 */
+//		case 68:
+    case 1324:
+			errId2 = TxtPageNotFound; break;
+		/* Error type 2 */
+//		case 1008:
+    case 257:
+			errId2 = TxtInvalidURL; break;
+		/* Error type 3 */
+//		case 1009:
+		case 513:
+			errId2 = TxtNoResponse; break;
+		/* Error type 4 */
+//		case 1011: case 1017: case 1207:
+		case 2049: case 2050:
+			errId2 = TxtAccessDenied; break;
+		/* Error type 5 */
+/*		case 1005: case 1006: case 1007:
+		case 1020: case 1101: case 1102:
+		case 1105: case 1108:
+*/    
+    case 1798:
+		case 1539: case 1542:
+			errId2 = TxtErrorInPage; break;
+		/* Error type 6 */	
+/*		case 1202: case 1203: case 1204:
+		case 1205: case 1206: case 1208:
+		case 1209: case 1210: case 1211:
+		case 1212: case 1213:
+*/
+		case 1793: case 1794: case 1795:
+		case 1796: case 1797: case 1799:
+		case 1800:
+			errId2 = TxtScriptError; break;
+		/* Error type 7 */
+		case ERROR_COMMUNICATION_SERVER:
+			errId2 = TxtServerError; break;
+		/* Error type 8 */
+		case ERROR_COMMUNICATION_GATEWAY:
+			errId2 = TxtGatewayError; break;
+		/* Error type 9 */
+		case ERROR_UNEXPECTED:
+			errId2 = TxtUnexpectedErr; break;
+		/* Error type 10 */
+//		case 1103:
+    case 1537:
+			errId2 = TxtCharacterSet; break;
+		/* Error type 11 */
+//		case 1106:
+    case 1541:
+			errId2 = TxtWBXMLError; break;
+		/* Error type 13 */
+//		case 8002:
+    case 2307:
+			/* This error already intercepted above */
+		case 1001:
+			errId2 = TxtErrorOutOfMem; break;
+		/* Error type 14 */
+/*		case 228:
+			errId2 = TxtGatewayBusy; break;
+		/* Error type 15 */
+//		case 1014:
+    case 514:
+			errId2 = TxtNoResponse; break;
+		/* Error type 16 */
+		case ERROR_SECURITY:
+			errId2 = TxtSecurityFail; break;
+			
+//		case 4001:
+    case 515:
+			errId2 = TxtNoResponse;
+			break;
+
+		default:
+			if (errorCode<1320)
+				errId2 = TxtErrorHTTP;
+			break;
+	}
+	
+	/* SPR#1575 - SH - Decide on soft keys.  If browser is not present,
+	 * can only exit. */
+
+	if (data->browser_win)
+	{
+		/* SPR#2086 - SH - Now provide "Exit" option */
+		rsk = TxtExit;
+		lsk = TxtSoftOK;
+	}
+	else
+	{
+		lsk = TxtNull;
+		rsk = TxtExit;
+	}
+	
+	/* Set up dialog display data */
+	
+	dlg_initDisplayData_TextId( &display_info, lsk, rsk, errId1, errId2, COLOUR_WAP_POPUP);
+	dlg_initDisplayData_events( &display_info, NULL, FOREVER, KEY_LEFT | KEY_RIGHT);
+
+	/* If no errId1, use "Error <num>" */
+
+	if (errId1==TxtNull)
+	{
+		sprintf(errorNumber, "%s %d", GET_TEXT(TxtError), errorCode);
+		display_info.TextString = errorNumber;
+	}
+
+	if (errId2==TxtNull)
+	{
+		errId2 = TxtUnknown;
+	}
+
+	display_info.Callback		= (T_VOID_FUNC)AUI_error_cb;
+
+	/* SPR#1739 - SH - Destroy any previous error dialog */
+	if (data->error_win)
+	{
+		SEND_EVENT(data->error_win, DIALOG_DESTROY, 0, 0);
+	}
+	data->error_win = info_dialog(data->parent_win, &display_info);
+	
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_error_cb
+
+ $Description:	Callback function for the WAP error dialog.
+ 
+ $Returns:		void
+
+ $Arguments:	win			- the WAP data window
+ 				identifier	- this is the dialog id
+ 				reason		- reason for callback
+ 
+*******************************************************************************/
+
+static void AUI_error_cb(T_MFW_HND win, USHORT identifier, SHORT reason)
+{
+   	T_WAP_DATA 		*data		= AUI_wap_data();				// WAP data
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_error_cb");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	data->error_win = NULL;				/* SPR#1739 - SH - Coming here, dialog is destroyed */
+	data->update_forbid = FALSE;
+
+	/* Destroy any connecting dialog */
+	/* SPR#1739 - SH - Do this now with AUI_destroy */
+	
+	AUI_destroy(CONNECT_WIN); /* SPR#2086 */
+
+	/* SPR#1497 - SH - Softkeys now give two options */
+	switch(reason)
+	{
+		/* Right soft key: Exit
+		 * SPR#2086 - Exit browser */
+		case INFO_KCD_RIGHT:
+			AUI_destroy(RETURN_TO_MENU); /* SPR#2086 */
+			break;
+
+		/* Left soft key: OK */
+		case INFO_KCD_LEFT:
+			/* Now just destroy dialog */
+			break;
+	}
+	
+	return;
+}
+
+#if 0
+/*******************************************************************************
+
+ $Function:    	AUI_standard_editor
+
+ $Description:	Sets up standard attributes for a WAP editor
+ 
+ $Returns:		
+
+ $Arguments:	editor_data		- pointer to existing editor_data
+ 				size 			- maximum length of editor
+ 				mode			- editor mode
+ 				callback		- callback function
+ 
+*******************************************************************************/
+
+void AUI_standard_editor(T_EDITOR_DATA *editor_data, char *buffer, U16 size, UBYTE mode, T_EDIT_CB callback)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_standard_editor");
+#endif
+	editor_attr_init(&editor_data->editor_attr, ZONE_WAP_EDITOR, edtCurBar1, NULL, buffer, size, COLOUR_EDITOR );
+	editor_data->editor_attr.font		= 0;									// Font
+
+	editor_data_init( editor_data, callback, TxtSoftOK, TxtDelete, NULL, 0, mode, FOREVER);
+	editor_data->destroyEditor			= FALSE;								// Default: don't destroy editor on exit
+	editor_data->hide					= FALSE;								// Default: input not hidden
+	editor_data->Identifier				= NULL;									// Default: not used
+	
+    return;
+}
+#endif
+
+#ifdef NEW_EDITOR
+
+/*******************************************************************************
+
+ $Function:    	AUI_standard_editor
+
+ $Description:	Sets up standard attributes for a WAP editor
+ 
+ $Returns:		None
+
+ $Arguments:	editor_data		- pointer to existing editor_data
+ 				buffer			- Text buffer to edit
+ 				size 			- maximum length of editor
+ 				mode			- editor mode
+ 				callback		- callback function
+ 				unicode			- TRUE if editor is unicode
+ 
+*******************************************************************************/
+
+ void AUI_standard_editor(T_AUI_EDITOR_DATA *editor_data, USHORT identifier, USHORT mode, USHORT titleId, T_AUI_EDIT_CB Callback)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_standard_editor");
+#endif
+
+	AUI_edit_SetDefault(editor_data);
+	AUI_edit_SetEvents(editor_data, identifier, FALSE, FOREVER, Callback);
+	AUI_edit_SetTextStr(editor_data, TxtSoftOK, TxtDelete, titleId, NULL);
+	// xreddymn Jan-11-2005 MMI-SPR-27618: For read-only modes don't display the cursor
+	if(mode & ED_MODE_READONLY)
+	{
+		AUI_edit_SetMode(editor_data, mode, ED_CURSOR_NONE);
+	}
+	else
+	{
+		AUI_edit_SetMode(editor_data, mode, DS_CURSOR_BAR);
+	}
+	AUI_edit_SetDisplay(editor_data, ZONE_WAP_EDITOR, COLOUR_EDITOR, EDITOR_FONT);
+	
+    return;
+}
+
+#else /* NEW_EDITOR */
+
+/*******************************************************************************
+
+ $Function:    	AUI_standard_editor
+
+ $Description:	Sets up standard attributes for a WAP editor
+ 
+ $Returns:		None
+
+ $Arguments:	editor_data		- pointer to existing editor_data
+ 				buffer			- Text buffer to edit
+ 				size 			- maximum length of editor
+ 				mode			- editor mode
+ 				callback		- callback function
+ 
+*******************************************************************************/
+
+ void AUI_standard_editor(T_EDITOR_DATA *editor_data, char *buffer, U16 size, UBYTE mode, T_EDIT_CB callback)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_standard_editor");
+#endif
+	editor_attr_init(&editor_data->editor_attr, ZONE_WAP_EDITOR, edtCurBar1, NULL, buffer, size, COLOUR_EDITOR );
+	editor_data->editor_attr.font		= 0;
+
+	editor_data_init( editor_data, callback, TxtSoftOK, TxtDelete, NULL, 0, mode, FOREVER);
+	editor_data->destroyEditor			= FALSE;		/* Default: don't destroy editor on exit */
+	editor_data->hide					= FALSE;		/* Default: input not hidden */
+	editor_data->Identifier				= 0;
+	
+    return;
+}
+
+#endif /* NEW_EDITOR */
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_input_dialog_open
+
+ $Description:	Prompts the MMI to open an input dialog given a particular format and
+ 				string.
+ 				
+ $Returns:		WAP_OK if successful, WAP_FAIL if otherwise
+
+ $Arguments:	Dialog			- Dialog information
+ 				View			- The current view
+ 
+*******************************************************************************/
+#if 0
+T_WAP_RES AUI_wap_input_dialog_open(T_WAP_MMI_INPUT_DIALOG_REQ *Dialog, T_WAP_VIEW *View)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();												/* WAP data */
+	USHORT			formatIndex;
+	USHORT			bufferIndex;
+	USHORT			bufferLength;											/* Length of original buffer */
+	T_EDITOR_DATA	editor_data;
+	USHORT			titlelen;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_wap_input_dialog_open");
+#endif
+
+	/* SPR#1816 - SH - Number of modifications for unicode.
+	 * Title is converted to Unicode, although input string is still taken as ASCII.
+	 * Buffer2 is used to store format characters, rather than use extra Format buffer
+	 * If no title is supplied, use string "Untitled" */
+	 
+	if (!data)
+	{
+		return 0;
+	}
+	
+	data->gen_pointer = Dialog->dialog_pointer;									// Needed by GLE
+
+	if (Dialog->size > INPUT_MAX_LEN)											// No more than max chars accepted
+		Dialog->size = INPUT_MAX_LEN;
+
+	/* Convert input string to ASCII */
+	ATB_uc_text_convert(Dialog->Input, Dialog->input_length);
+	bufferLength = ATB_uc_to_char(data->Buffer, Dialog->Input, INPUT_MAX_LEN);
+
+	/* Convert title to MMI unicode and crop it to fit screen */
+
+	AUI_wap_string_alloc(&data->Message, CARD_TITLE_MAX_LEN);
+
+	if (Dialog->title_length>0)
+	{
+		titlelen = AUI_text_to_uc(data->Message.text, Dialog->Title, CARD_TITLE_MAX_LEN);       // Convert title to char, store in output buffer
+		ATB_uc_text_crop(&data->Message.text[1], titlelen, WAP_SCREEN_WIDTH);		// Crop message to fit
+	}
+	else
+	{
+		data->Message.text[0] = 0x7F80;
+		AUI_wap_stringID(&data->Message.text[1], CARD_TITLE_MAX_LEN, WAP_STRING_UNTITLED);
+	}
+	
+	/* Convert format characters to ascii */
+
+	ATB_uc_text_convert((USHORT *)Dialog->Format, (USHORT)Dialog->format_length);
+	ATB_uc_to_char(data->Buffer2, Dialog->Format, (USHORT)Dialog->format_length);   // Convert format string to char, store in format buffer
+
+	/* Set up standard editor parameters */
+	
+	AUI_standard_editor(&editor_data, data->Buffer, (Dialog->size+1), ALPHA_MODE, (T_EDIT_CB)AUI_input_cb);
+
+	/* Need to set input mode & put fixed characters into input buffer */
+	
+	if (Dialog->format_length != 0)												// If we're using formatted input
+	{	
+		editor_data.mode			= FORMAT_MODE;                				// Special mode for formatted input
+		formatIndex = 0;
+		bufferIndex = 0;
+		
+		while (bufferIndex<Dialog->size && formatIndex<strlen(data->Buffer2))
+		{
+			if (data->Buffer2[formatIndex] == '\\')							// Backslash character indicates fixed char
+			{
+				formatIndex++;
+				data->Buffer[bufferIndex] = data->Buffer2[formatIndex];		// Put fixed char into buffer
+			}
+			else if (strchr("123456789*", data->Buffer2[formatIndex]))			// In a delimited field...
+			{
+				if (bufferIndex<bufferLength)									// if we're not at the end of the string, 
+					formatIndex--;												// stay where we are in the formatstring
+				else
+					formatIndex++;												// otherwise go to end of string
+			}
+			else if (bufferIndex>=bufferLength)									// If we're past the end of the existing buffer...
+			{
+				data->Buffer[bufferIndex] = ' ';								// Fill it with empty space
+			}
+			bufferIndex++;
+			formatIndex++;
+		}
+	
+		data->Buffer[bufferIndex] = 0;										// Terminate the buffer string
+	}
+
+	editor_data.Identifier			= Dialog->dialog_id;						// this is the dialog identity (to be passed to callback)
+	editor_data.TextString			= (char *)data->Message.text;				// String to be displayed in output buffer
+	editor_data.FormatString		= data->Buffer2;							// Provide the editor with the format string
+	
+	if (Dialog->is_password)
+	{
+		editor_data.hide			= TRUE;	
+	}
+	
+	if (!Dialog->empty_ok)
+		editor_data.min_enter		= 1;										// Won't accept empty input
+			
+	data->edit_win = editor_start(data->parent_win, &editor_data); /* SPR#2086 */						// Create input window
+	
+	return WAP_OK;
+}
+#endif
+
+//T_WAP_RES AUI_wap_input_dialog_open(T_WAP_MMI_INPUT_DIALOG_REQ *Dialog)
+T_WAP_RES AUI_wap_input_dialog_open(T_WAP_MMI_INPUT_DIALOG_REQ *Dialog, T_WAP_VIEW *View)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();												/* WAP data */
+	USHORT			formatIndex;
+	USHORT			bufferIndex;
+	USHORT			bufferLength;
+#ifdef NEW_EDITOR
+	T_AUI_EDITOR_DATA editor_data;
+#else
+	T_EDITOR_DATA	editor_data;
+#endif /* NEW_EDITOR */
+	USHORT			titlelen;
+	USHORT			mode;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_wap_input_dialog_open");
+#endif
+	
+	if (!data)
+	{
+		return 0;
+	}
+
+	/* Set up editor */
+
+#ifdef NEW_EDITOR
+	AUI_standard_editor(&editor_data, Dialog->dialog_id, ED_MODE_ALPHA, TxtNull, (T_AUI_EDIT_CB)AUI_input_cb);
+#endif /* NEW_EDITOR */
+
+	data->gen_pointer = Dialog->dialog_pointer;		/* Needed by GLE */
+
+	if (Dialog->size > INPUT_MAX_LEN)
+	{
+		Dialog->size = INPUT_MAX_LEN;
+	}
+
+	/* SPR#2393 - SH - Ensure input buffer isn't > max size */
+	
+	if (Dialog->input_length > Dialog->size)
+	{
+		Dialog->input_length = Dialog->size;
+	}
+	
+	/* Terminate buffer */
+	
+	Dialog->Input[Dialog->input_length] = 0;
+	
+	/* Convert input string */
+	/* xreddymn Sep-10-2004 MMI-SPR-24121: Dialog->Input is the buffer passed by the browser,
+	 * and should not be directly modified. Changes have been made to convert
+	 * a copy of the buffer instead.
+	 */
+	//ATB_uc_text_convert(Dialog->Input, Dialog->input_length);
+
+#ifdef NEW_EDITOR
+	/* Buffer is unicode */
+	bufferLength = ATB_uc_text_copy((USHORT *)data->Buffer, Dialog->Input, INPUT_MAX_LEN);
+	// xreddymn Sep-10-2004 MMI-SPR-24121
+	ATB_uc_text_convert((USHORT*)data->Buffer, bufferLength);
+#else
+	/* Buffer is ascii */
+	bufferLength = ATB_uc_to_char(data->Buffer, Dialog->Input, INPUT_MAX_LEN);
+#endif /* NEW_EDITOR */
+
+	/* Convert title to MMI unicode and crop it to fit screen */
+
+	AUI_wap_string_alloc(&data->Message, CARD_TITLE_MAX_LEN);
+
+	if (Dialog->title_length>0)
+	{
+		titlelen = AUI_text_to_uc(data->Message.text, Dialog->Title, CARD_TITLE_MAX_LEN); 
+		ATB_uc_text_crop(&data->Message.text[1], titlelen, WAP_SCREEN_WIDTH);
+#ifdef NEW_EDITOR
+		AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtDelete, TxtNull, (UBYTE *)data->Message.text);
+#endif /* NEW_EDITOR */
+	}
+	else
+	{
+#ifdef NEW_EDITOR
+		AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtDelete, TxtUntitled, NULL);
+#else
+		data->Message.text[0] = 0x7F80;
+		AUI_wap_stringID(&data->Message.text[1], CARD_TITLE_MAX_LEN, WAP_STRING_UNTITLED);
+#endif /* NEW_EDITOR */
+	}
+	
+	/* Convert format characters to ascii */
+
+	ATB_uc_text_convert((USHORT *)Dialog->Format, (USHORT)Dialog->format_length);
+	ATB_uc_to_char(data->Buffer2, Dialog->Format, (USHORT)Dialog->format_length);
+
+	/* Set up standard editor parameters */
+
+#ifdef NEW_EDITOR
+	AUI_edit_SetBuffer(&editor_data, ATB_DCS_UNICODE, (UBYTE *)data->Buffer, Dialog->size+1);
+
+	mode = ED_MODE_ALPHA;
+	
+	if (Dialog->format_length != 0)
+	{
+		AUI_edit_SetFormatStr(&editor_data, data->Buffer2, TRUE, ' ');
+		mode |= ED_MODE_FORMATTED;
+	}
+	
+	if (Dialog->is_password)
+	{
+		mode |= ED_MODE_HIDDEN;
+	}
+	
+	if (!Dialog->empty_ok)
+	{
+		AUI_edit_SetAltTextStr(&editor_data, 1, TxtNull, TRUE, TxtSoftBack);
+	}
+
+	AUI_edit_SetMode(&editor_data, mode, DS_CURSOR_BAR);
+	
+	/* Don't update WAP browser window while editor is open */
+	
+	data->update_forbid = TRUE;
+	
+	data->edit_win = AUI_edit_Start(data->parent_win, &editor_data);
+#else
+	AUI_standard_editor(&editor_data, data->Buffer, (Dialog->size+1), ALPHA_MODE, (T_EDIT_CB)AUI_input_cb);
+
+	/* Need to set input mode & put fixed characters into input buffer */
+	
+	if (Dialog->format_length != 0)
+	{	
+		editor_data.mode = FORMAT_MODE;
+		formatIndex = 0;
+		bufferIndex = 0;
+		
+		while (bufferIndex<Dialog->size && formatIndex<strlen(data->Buffer2))
+		{
+			/* Backslash character indicates fixed character */
+
+			if (data->Buffer2[formatIndex] == '\\')
+			{
+				formatIndex++;
+				/* Put fixed char into buffer */
+				data->Buffer[bufferIndex] = data->Buffer2[formatIndex];
+			}
+
+			/* In a delimited field... */
+
+			else if (strchr("123456789*", data->Buffer2[formatIndex]))
+			{
+				if (bufferIndex<bufferLength)	/* if we're not at the end of the string,  */
+					formatIndex--;				/* stay where we are in the formatstring */
+				else
+					formatIndex++;				/* otherwise go to end of string */
+			}
+			
+			/* If we're past the end of the existing buffer... */
+			
+			else if (bufferIndex>=bufferLength)
+			{
+				data->Buffer[bufferIndex] = ' ';	/* Fill it with empty space */
+			}
+			bufferIndex++;
+			formatIndex++;
+		}
+	
+		data->Buffer[bufferIndex] = 0;				/* Terminate the buffer string */
+	}
+
+	editor_data.Identifier = Dialog->dialog_id;		/* this is the dialog identity (to be passed to callback) */
+	editor_data.TextString = (char *)data->Message.text;	/* String to be displayed in output buffer */
+	editor_data.FormatString = data->Buffer2;			/* Provide the editor with the format string */
+
+	/* Check if input needs to be hidden */
+	
+	if (Dialog->is_password)
+	{
+		editor_data.hide = TRUE;	
+	}
+
+	/* Is an empty response OK? */
+	
+	if (!Dialog->empty_ok)
+		editor_data.min_enter = 1;
+
+	/* Don't update WAP browser window while editor is open */
+	
+	data->update_forbid = TRUE;
+	
+	data->edit_win = editor_start(data->parent_win, &editor_data);
+#endif
+
+	return WAP_OK;
+}
+
+/*******************************************************************************
+
+ $Function:    	AUI_input_cb
+
+ $Description:	Callback function for the WAP input dialog.
+ 
+ $Returns:		void
+
+ $Arguments:	win			- the WAP data window
+ 				identifier	- this is the dialog id
+ 				reason		- reason for callback
+ 
+*******************************************************************************/
+
+static void AUI_input_cb(T_MFW_HND win, USHORT identifier, USHORT reason)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	T_MMI_WAP_INPUT_DIALOG_CNF DialogCnf;
+	BOOL 			edited;
+	USHORT		textlen;	/* SPR#1816 - SH*/
+
+	TRACE_FUNCTION("AUI_input_cb()");
+
+	if (!data)
+	{
+		return;
+	}
+
+
+	/* SPR#1816 - SH - Free message string */
+	AUI_wap_string_free(&data->Message);
+	
+	switch (reason)
+	{
+		case INFO_KCD_HUP:
+		case INFO_KCD_RIGHT:
+			edited = FALSE;														// Don't change text
+			break;
+
+		default:
+			edited = TRUE;														// Text is changed
+			break;
+	}
+
+	// xreddymn Sep-09-2004 MMI-SPR-24121: data->Buffer is not expected to be ASCIIZ here
+#ifdef NEW_EDITOR
+	textlen = LEa_strlen(data->Buffer);
+#else // NEW_EDITOR
+	textlen = strlen(data->Buffer);
+#endif // NEW_EDITOR
+	DialogCnf.object_id		= data->View->object_id;
+	DialogCnf.dialog_id		= identifier;										// Dialog id is passed from AUI_input
+	DialogCnf.Text 			= (USHORT *)AUI_wap_memory_alloc((textlen+1)*sizeof(USHORT));
+	/* xreddymn Sep-08-2004 MMI-SPR-24121: Added different implementations for new and old editors.
+	 * In case of the new editor, DialogCnf.Text is already in MMI Unicode and only requiers byte swapping.
+	 */
+#ifdef NEW_EDITOR
+	DialogCnf.text_length = ATB_uc_text_copy((USHORT *)DialogCnf.Text, (USHORT *)data->Buffer, (USHORT)INPUT_MAX_LEN);
+	ATB_uc_text_convert((USHORT *)DialogCnf.Text, (USHORT)DialogCnf.text_length);
+	((USHORT*)DialogCnf.Text)[DialogCnf.text_length]='\0';
+	DialogCnf.text_length++; // To accomodate End of String character '\0'
+#else // NEW_EDITOR
+	/* SPR#1816 - SH - Convert buffer text to MMI unicode, then convert to normal unicode */
+	DialogCnf.text_length	= ATB_char_to_uc(DialogCnf.Text, data->Buffer); 	// ..and now updated input string
+	ATB_uc_text_convert((USHORT *)DialogCnf.Text, (USHORT)DialogCnf.text_length);
+#endif // NEW_EDITOR
+	DialogCnf.edited 		= edited;											// TRUE if text changed
+	DialogCnf.dialog_pointer    = data->gen_pointer;							// Needed by GLE
+
+	ATB_wap_input_dialog_closed(&DialogCnf);							// Send data to ATB
+
+	AUI_wap_memory_free((UBYTE *)DialogCnf.Text, (textlen+1)*sizeof(USHORT));
+
+	AUI_destroy(EDIT_WIN);	/* SPR#2086 */
+
+	// xreddymn Sep-08-2004 MMI-SPR-24121: After editing is complete, the browser may continue to update the screen
+	data->update_forbid=FALSE;
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_password_dialog_open
+
+ $Description:	Prompts the MMI to open a password dialog.
+ 				
+ $Returns:		WAP_OK if successful, WAP_FAIL if otherwise
+
+ $Arguments:	Dialog			- Dialog information
+ 				View			- The current view
+ 
+*******************************************************************************/
+#if 0
+T_WAP_RES AUI_wap_password_dialog_open(T_WAP_MMI_PASSWORD_DIALOG_REQ *Dialog, T_WAP_VIEW *View)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	T_EDITOR_DATA	editor_data;
+	USHORT			titlelen;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_wap_password_dialog_open");
+#endif
+
+	/* SPR#1816 - SH - Title is now unicode */
+	
+	if (Dialog->input_length > USERNAME_MAX_LEN)											// Crop input to max length
+	{
+		Dialog->input_length = USERNAME_MAX_LEN;
+		Dialog->Input[USERNAME_MAX_LEN] = NULL;
+	}
+	
+	strncpy(data->Buffer, Dialog->Input, Dialog->input_length);	/* Input field is char type */
+
+	/* Allocate, convert and crop title */
+
+	AUI_wap_string_alloc(&data->Message, CARD_TITLE_MAX_LEN);
+	titlelen = AUI_text_to_uc(data->Message.text, Dialog->Message, CARD_TITLE_MAX_LEN);       /* Convert title to MMI unicode */
+	ATB_uc_text_crop(&data->Message.text[1], titlelen, WAP_SCREEN_WIDTH);		/* Crop title to fit */
+	
+	/* Need to prompt for two separate things: the username and password! */
+
+	AUI_standard_editor(&editor_data, data->Buffer, USERNAME_MAX_LEN, ALPHA_MODE, (T_EDIT_CB)AUI_password_cb_1);
+
+	editor_data.Identifier			= Dialog->dialog_id;						// this is the dialog identity (to be passed to callback)
+	editor_data.TextString			= (char *)data->Message.text;
+	
+	data->edit_win = editor_start(data->parent_win, &editor_data);	 /* SPR#2086 */					// Create input window
+	
+	return WAP_OK;
+}
+#endif
+
+//T_WAP_RES AUI_wap_password_dialog_open(T_WAP_MMI_PASSWORD_DIALOG_REQ *Dialog)
+T_WAP_RES AUI_wap_password_dialog_open(T_WAP_MMI_PASSWORD_DIALOG_REQ *Dialog, T_WAP_VIEW *View)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+#ifdef NEW_EDITOR
+	T_AUI_EDITOR_DATA editor_data;
+#else
+	T_EDITOR_DATA	editor_data;
+#endif /* NEW_EDITOR */
+	USHORT			titlelen;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_wap_password_dialog_open");
+#endif
+
+	if (!data)
+	{
+		return WAP_FAIL;
+	}
+
+	/* SPR#2393 - Clear buffer */
+	
+	memset(data->Buffer, 0, USERNAME_MAX_LEN+1);	/* Input field is char type */
+	
+	/* Need to prompt for two separate things: the username and password! */
+
+#ifdef NEW_EDITOR
+	AUI_standard_editor(&editor_data, Dialog->dialog_id, ED_MODE_ALPHA, TxtISPUsername, (T_AUI_EDIT_CB)AUI_password_cb_1);
+	AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)data->Buffer, USERNAME_MAX_LEN+1);
+	AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtDelete, TxtISPUsername, NULL);
+
+	/* Don't update WAP browser window while editor is open */
+	
+	data->update_forbid = TRUE;
+	
+	data->edit_win = AUI_edit_Start(data->parent_win, &editor_data);
+#else /* NEW_EDITOR */
+	AUI_standard_editor(&editor_data, data->Buffer, USERNAME_MAX_LEN, ALPHA_MODE, (T_EDIT_CB)AUI_password_cb_1);
+
+	editor_data.Identifier = Dialog->dialog_id; /* this is the dialog identity (to be passed to callback) */
+	editor_data.TextId = TxtISPUsername; /* SPR#2393 */
+	
+	/* Don't update WAP browser window while editor is open */
+	data->update_forbid = TRUE;
+	
+	data->edit_win = editor_start(data->parent_win, &editor_data);
+#endif /* NEW_EDITOR */
+
+	return WAP_OK;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_password_cb_1
+
+ $Description:	Callback function for the WAP password dialog, after username entered.
+ 				Prompts for password.
+ 
+ $Returns:		void
+
+ $Arguments:	win			- the WAP data window
+ 				identifier	- this is the dialog id
+ 				reason		- reason for callback
+ 
+*******************************************************************************/
+#if 0
+static void AUI_password_cb_1(T_MFW_HND win, USHORT identifier, USHORT reason)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();				// WAP data
+	T_EDITOR_DATA	editor_data;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_password_dialog_cb_1");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	switch (reason)
+	{
+		case INFO_KCD_HUP:
+		case INFO_KCD_RIGHT:
+			AUI_destroy(EDIT_WIN);									/* SPR#2086 */
+			break;
+
+		case INFO_KCD_LEFT:
+			data->Buffer2[0] = NULL;											// Empty string for password
+			
+			AUI_standard_editor(&editor_data, data->Buffer2, PASSWORD_MAX_LEN, ALPHA_MODE,
+				(T_EDIT_CB)AUI_password_cb_2);
+
+			editor_data.Identifier	= identifier;								// this is the dialog identity
+			editor_data.TextString	= (char *)data->Message.text;				/* SPR#1816 - SH */
+			editor_data.hide		= TRUE;
+
+			data->temp_win = data->edit_win;									// Store pointer to this edit window
+			data->edit_win = editor_start(data->parent_win, &editor_data); /* SPR#2086 */
+	
+			return;
+   			break;
+	}
+	return;
+}
+#endif
+//static void AUI_password_cb_1(T_MFW_HND win, USHORT identifier, USHORT reason)
+static void AUI_password_cb_1(T_MFW_HND win, USHORT identifier, USHORT reason)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+#ifdef NEW_EDITOR
+	T_AUI_EDITOR_DATA editor_data;
+#else
+	T_EDITOR_DATA	editor_data;
+#endif /* NEW_EDITOR */
+	T_MMI_WAP_PASSWORD_DIALOG_CNF DialogCnf; /* SPR#2393 */
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_password_dialog_cb_1");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	switch (reason)
+	{
+		case INFO_KCD_HUP:
+		case INFO_KCD_RIGHT:
+			//AUI_destroy(data->win,EDIT_WIN);	/* Destroy edit window */
+			AUI_destroy(EDIT_WIN);
+			
+			/* SPR#2393 - SH - WAP browser can update again */
+			data->update_forbid = FALSE;
+
+			/* SPR#2393 - SH - Force an update, otherwise editor screen
+			 * shows forever */
+			win_show(data->browser_win);
+
+			/* SPR#2393 - SH - Send NULL username/password to indicate dialog cancelled */
+			DialogCnf.object_id		= data->View->object_id;
+			DialogCnf.dialog_id		= identifier;
+			DialogCnf.input_length	= 0;
+			DialogCnf.Input 		= NULL;
+			DialogCnf.password_length  = 0;
+			DialogCnf.Password		= NULL;
+			ATB_wap_password_dialog_closed(&DialogCnf);
+			break;
+
+		case INFO_KCD_LEFT:
+			data->Buffer2[0] = NULL;		/* Empty string for password */
+
+#ifdef NEW_EDITOR
+			AUI_standard_editor(&editor_data, identifier, ED_MODE_ALPHA | ED_MODE_HIDDEN, TxtNull, (T_AUI_EDIT_CB)AUI_password_cb_2);
+			AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)data->Buffer2, PASSWORD_MAX_LEN+1);
+			AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtDelete, TxtISPPassword, NULL);
+
+			data->temp_win = data->edit_win;				/* Store pointer to this edit window */
+			data->edit_win = AUI_edit_Start(data->parent_win, &editor_data); /* Create input window */
+
+#else /* NEW_EDITOR */
+			AUI_standard_editor(&editor_data, data->Buffer2, PASSWORD_MAX_LEN, ALPHA_MODE,
+				(T_EDIT_CB)AUI_password_cb_2);
+
+			editor_data.Identifier	= identifier;					/* this is the dialog identity */
+			editor_data.TextString	= (char *)data->Message.text;
+			editor_data.hide		= TRUE;
+
+			data->temp_win = data->edit_win;				/* Store pointer to this edit window */
+			data->edit_win = editor_start(data->parent_win, &editor_data);
+#endif /* NEW_EDITOR */
+
+			return;
+   			break;
+	}
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_password_cb_2
+
+ $Description:	Callback function for the WAP password dialog.
+ 
+ $Returns:		void
+
+ $Arguments:	win			- the WAP data window
+ 				identifier	- this is the dialog id
+ 				reason		- reason for callback
+ 
+*******************************************************************************/
+
+static void AUI_password_cb_2(T_MFW_HND win, USHORT identifier, USHORT reason)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();					// WAP data
+	T_MMI_WAP_PASSWORD_DIALOG_CNF DialogCnf;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_password_cb_2");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	/* SPR#1816 - SH - Free message string */
+	AUI_wap_string_free(&data->Message);
+	
+	switch (reason)
+	{
+		case INFO_KCD_HUP:
+		case INFO_KCD_RIGHT:
+			AUI_destroy(EDIT_WIN);									/* SPR#2086 */
+			data->edit_win = data->temp_win;									// Reinstate previous edit window
+			data->temp_win = NULL;
+			break;
+
+		case INFO_KCD_LEFT:
+			DialogCnf.object_id		= data->View->object_id;
+			DialogCnf.dialog_id		= identifier;
+			DialogCnf.input_length	= strlen(data->Buffer);
+			DialogCnf.Input 		= data->Buffer;
+			DialogCnf.password_length  = strlen(data->Buffer2);
+			DialogCnf.Password		= data->Buffer2;
+			AUI_destroy(EDIT_WIN);					/* SPR#2086 */
+			data->edit_win = data->temp_win;
+			data->temp_win = NULL;
+			AUI_destroy(EDIT_WIN);					/* SPR#2086 */
+			ATB_wap_password_dialog_closed(&DialogCnf);
+   			break;
+	}
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_confirm_dialog_open
+
+ $Description:	Prompts the MMI to open a confirmation dialog.
+ 				
+ $Returns:		WAP_OK if successful, WAP_FAIL if otherwise
+
+ $Arguments:	Dialog			- Dialog information
+ 				View			- The current view
+ 
+*******************************************************************************/
+
+T_WAP_RES AUI_wap_confirm_dialog_open(T_WAP_MMI_CONFIRM_DIALOG_REQ *Dialog, T_WAP_VIEW *View)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	T_DISPLAY_DATA	display_info;
+	USHORT			titlelen;
+
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_wap_confirm_dialog_open");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+	
+	/* SPR#1816 - SH - Title, Left SK, Right SK are now unicode */
+
+	AUI_wap_string_alloc(&data->Message, CARD_TITLE_MAX_LEN);
+	
+	titlelen = AUI_text_to_uc(data->Message.text, Dialog->Message, CARD_TITLE_MAX_LEN);	// Convert current input to char type, store in output buffer
+	ATB_uc_text_crop(data->Message.text, titlelen, WAP_SCREEN_WIDTH);
+	AUI_text_to_uc(data->LeftSoftKey, Dialog->Ok_key, Dialog->ok_key_length);
+	AUI_text_to_uc(data->RightSoftKey, Dialog->Cancel_key, Dialog->cancel_key_length);
+
+	dlg_initDisplayData_TextStr( &display_info, TxtNull, TxtNull, (char *)data->Message.text, NULL, COLOUR_WAP_POPUP);
+	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)AUI_confirm_cb, FOREVER, KEY_CLEAR | KEY_LEFT | KEY_RIGHT );
+	display_info.LSKString		= (char *)data->LeftSoftKey;
+	display_info.RSKString		= (char *)data->RightSoftKey;
+	display_info.Identifier		= Dialog->dialog_id;
+	
+	info_dialog_softkeystrings (data->parent_win, &display_info); /* SPR#2086 */
+	return WAP_OK;
+}
+
+			
+/*******************************************************************************
+
+ $Function:    	AUI_confirm_cb
+
+ $Description:	Callback function for the WAP confirmation dialog.
+ 
+ $Returns:		void
+
+ $Arguments:	win			- the WAP data window 
+ 				identifier	- this is the dialog id
+ 				reason		- reason for callback
+ 
+*******************************************************************************/
+
+static void AUI_confirm_cb(T_MFW_HND win, USHORT identifier, USHORT reason)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();						// WAP data
+	T_MMI_WAP_CONFIRM_DIALOG_CNF DialogCnf;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_confirm_cb");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	/* SPR#1816 - SH - Free message string */
+	AUI_wap_string_free(&data->Message);
+	
+	switch (reason)
+	{
+		case INFO_KCD_HUP:
+			AUI_destroy(EDIT_WIN);	/* SPR#2086 */
+			break;
+		
+		case INFO_KCD_RIGHT:
+			DialogCnf.dialog_id	= identifier;									// Dialog id is passed from AUI_input
+   			DialogCnf.answer	= FALSE;										// Confirmation is false
+   			
+   			AUI_destroy(EDIT_WIN);					/* SPR#2086 */
+  			ATB_wap_confirm_dialog_closed(&DialogCnf);							// Send data to ATB
+			break;
+
+		case INFO_KCD_LEFT:
+			DialogCnf.dialog_id	= identifier;									// Dialog id is passed from AUI_input
+   			DialogCnf.answer	= TRUE;											// Confirmation is true
+   			AUI_destroy(EDIT_WIN);			/* SPR#2086 */
+  			ATB_wap_confirm_dialog_closed(&DialogCnf);							// Send data to ATB
+   			break;
+	}
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_info_dialog_open
+
+ $Description:	Prompts the MMI to open an info dialog.
+ 				
+ $Returns:		WAP_OK if successful, WAP_FAIL if otherwise
+
+ $Arguments:	Dialog			- Dialog information
+ 				View			- The current view
+ 
+*******************************************************************************/
+
+T_WAP_RES AUI_wap_info_dialog_open(T_WAP_MMI_INFO_DIALOG_REQ *Dialog, T_WAP_VIEW *View)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	T_DISPLAY_DATA	display_info;
+	USHORT			titlelen;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_wap_info_dialog_open");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+	
+	/* SPR#1816 - SH - Title is now unicode */
+	
+	AUI_wap_string_alloc(&data->Message, CARD_TITLE_MAX_LEN);
+	
+	titlelen = AUI_text_to_uc(data->Message.text, Dialog->Message, CARD_TITLE_MAX_LEN);	// Store message in output buffer as char
+	ATB_uc_text_crop(data->Message.text, titlelen, WAP_SCREEN_WIDTH);
+	
+	dlg_initDisplayData_TextStr( &display_info, TxtNull, TxtNull, (char *)data->Message.text, NULL, COLOUR_WAP_POPUP);
+	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)AUI_info_cb, THREE_SECS, 0 );
+	info_dialog(data->parent_win, &display_info); /* SPR#2086 */
+
+	return WAP_OK;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_info_cb
+
+ $Description:	Callback function for the WAP confirmation dialog.
+ 
+ $Returns:		void
+
+ $Arguments:	win			- the WAP data window
+ 				identifier	- this is the dialog id
+ 				reason		- reason for callback
+ 
+*******************************************************************************/
+
+static void AUI_info_cb(T_MFW_HND win, USHORT identifier, USHORT reason)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();				// WAP data
+	T_MMI_WAP_CONFIRM_DIALOG_CNF DialogCnf;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_info_cb");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	/* SPR#1816 - SH - Free message string */
+	AUI_wap_string_free(&data->Message);
+	
+	DialogCnf.dialog_id	= identifier;										// Dialog id is passed from AUI_input
+   	DialogCnf.answer	= TRUE;												// Confirmation is true
+   	AUI_destroy(EDIT_WIN);		/* SPR#2086 */
+  	ATB_wap_confirm_dialog_closed(&DialogCnf);								// Send data to ATB
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_options_menu_open
+
+ $Description:	The ATB will send to the AUI the contents of the menu list
+ 
+ $Returns:		WAP_OK if successful, WAP_FAIL if otherwise
+
+ $Arguments:	contextType	- the context, to specify the first item in the menu
+ 
+*******************************************************************************/
+
+T_WAP_RES AUI_wap_options_menu_open(UBYTE contextType)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	UBYTE 			startIndex;
+	UBYTE			optionIndex;
+	const USHORT	optionsItems[]		= {TxtBookmark, TxtBookmarks, TxtGoTo, TxtHomepage, TxtSoftBack, TxtReload, TxtExit };
+	const USHORT	contextItem[]		= {TxtGoToLink, TxtEdit, TxtSelect, TxtSelect, TxtSelect, TxtSelect, TxtSelect, TxtSelect, TxtSave};
+	T_WAP_LIST		*OptionsList;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_wap_options_menu_open");
+#endif
+
+	if (!data)
+	{
+		return WAP_FAIL;
+	}
+	// xreddymn Jun-28-2005 MMI-SPR-32467
+	ATB_animated_GIF_clear();
+
+	OptionsList = (T_WAP_LIST *)data->OptionsList;
+	data->update_forbid = TRUE;
+	startIndex = 0;
+
+	OptionsList->no_of_entries = MAX_OPTIONS;
+
+	if (contextType!=NULL)														// If context key is supplied, put it in
+	{
+		OptionsList->no_of_entries++;
+		/* SPR#1816 - SH - Options are now unicode.  Allocate memory and convert from text tags */
+		OptionsList->Entry[0] = (char *) AUI_wap_memory_alloc((SOFTKEY_MAX_LEN+1)*sizeof(USHORT));
+		AUI_textid_to_uc((USHORT *)OptionsList->Entry[0], contextItem[contextType-1], SOFTKEY_MAX_LEN);
+		startIndex = 1;															// Start filling menu from second entry
+	}
+
+	for (optionIndex=startIndex; optionIndex<OptionsList->no_of_entries; optionIndex++)  // Fill in rest of entries
+	{
+		/* SPR#1816 - SH - Options are now unicode.  Allocate memory and convert from text tags */
+		OptionsList->Entry[optionIndex] = (char *) AUI_wap_memory_alloc((SOFTKEY_MAX_LEN+1)*sizeof(USHORT));
+
+		AUI_textid_to_uc((USHORT *)OptionsList->Entry[optionIndex], optionsItems[optionIndex-startIndex], SOFTKEY_MAX_LEN);
+	}
+
+	data->optionsmenu_data = AUI_entry_list_create (data->parent_win, OptionsList, (ListCbFunc)AUI_options_menu_cb,0);
+	data->optionsmenu_win = data->optionsmenu_data->win;
+
+	return WAP_OK;
+}
+
+/*******************************************************************************
+
+ $Function:    	savePluginImage
+
+ $Description:	Saves the plugin image into the Object Manager
+                       //xrashmic 28 Jan, 2005 MMI-SPR-28166
+ $Returns:		void		
+
+ $Arguments:	win				- parent window
+ 				EntryListData	- list menu data of bookmarks lsit
+ 
+*******************************************************************************/
+
+void savePluginImage()
+{
+    TRACE_FUNCTION("savePluginImage");
+    switch(PluginObjectType)
+    {
+        case IMAGE_JPG:
+            obj_Type=EMtMimeJpeg;
+            break;
+        case IMAGE_GIF:
+            obj_Type=EMtMimeGif;
+            break;
+        case IMAGE_PNG:
+            obj_Type=EMtMimePng;
+            break;
+        case IMAGE_WBMP:
+            obj_Type=EMtMimeWbmp;
+            break;
+        case IMAGE_BMP:
+            obj_Type=EMtMimeBmp;
+            break;
+        case IMAGE_UNKNOWN :
+        default:            
+            obj_Type=EMtUnknown;
+            break;
+    }
+    if(saveObjectPlugin)
+    {
+        if(obj_Type==EMtUnknown)
+            information_dialog(TxtNotSupported, TxtType, NULL, NULL, TxtNull,TxtNull,FOREVER,KEY_RIGHT|KEY_HUP,NULL);    
+        else
+            M4_StorePluginObject(downloaded_data, downloaded_data_size,obj_Type);        
+    }
+    else
+        information_dialog(TxtImage,TxtLarge, NULL, NULL, TxtNull,TxtNull,FOREVER,KEY_RIGHT|KEY_HUP,NULL);
+}
+/*******************************************************************************
+
+ $Function:    	AUI_options_menu_cb
+
+ $Description:	Callback function for options menu
+ 
+ $Returns:		void		
+
+ $Arguments:	win				- parent window
+ 				EntryListData	- list menu data of bookmarks lsit
+ 
+*******************************************************************************/
+static void AUI_options_menu_cb(T_MFW_HND win, ListMenuData *EntryListData)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	T_WAP_VIEW		*View;
+	UBYTE			no_of_entries;	
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_options_menu_cb");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+
+	View = data->View;
+
+	/* SPR#1721 - SH - Update forbid now set to false in AUI_destroy */
+	
+	switch(EntryListData->Reason)
+	{
+		case LISTS_REASON_SELECT:	
+			/* Option is selected... */
+			no_of_entries = EntryListData->ListLength;
+			data->OptionSelect = EntryListData->ListPosition;					// Store selected option no.
+			
+			if (no_of_entries>MAX_OPTIONS)										// i.e. there's a contextual key in menu
+			{
+				if (data->OptionSelect==0)										// if we've selected it...
+				{
+					AUI_destroy(OPTIONSMENU_WIN);	/* SPR#2086 */
+                                    //xrashmic 28 Jan, 2005 MMI-SPR-28166
+                                    // For Plugin images, When Save item is selected  in the option menu,
+                                    // we save the image into the object manager
+                                    if(pluginImageDisplayed)
+                                        savePluginImage();
+                                   else
+					ATB_wap_options_menu_select(View);							// tell ATB to do something
+					return;
+				}
+				else
+					data->OptionSelect--;										// Otherwise, pretend it isn't there
+			}
+
+			switch(data->OptionSelect)
+			{
+  				case WAP_ADDBOOKMARK:	
+  					/* SPR#1816 - SH - Title is unicode, cast to char */
+					if (ATB_wap_entry_add(View->Bookmarks, (char *)View->Title)==WAP_FAIL) // Try to add current title to bookmarks
+						AUI_info_dialog(TxtBookmarks, TxtFull);	/* SPR#2086 */
+					else
+					{
+						ATB_wap_entry_add(View->BookmarksURL, View->URL);		// Store URL
+						ATB_wap_profile_save(View);								// Save change to flash
+						AUI_info_dialog(TxtStored, NULL);		/* SPR#2086 */
+					}
+					break;
+    			
+				case WAP_BOOKMARKS:
+					AUI_entry_list(View->Bookmarks, (ListCbFunc) AUI_bookmarks_list_cb,0); /* SPR#2086 */
+    				break;
+
+    			case WAP_GOTO:
+    			/* SPR#1684 - SH - Destroy any previous options menu existing */
+					if (data->options_win)
+					{
+						AUI_destroy(OPTIONS_WIN); /* SPR#2086 */
+					}
+					data->options_win = bookMenuStart(win, WAPGoToAttributes(), 0);	// Create WAP Menu again
+					SEND_EVENT(data->options_win, ADD_CALLBACK, NULL, (void *)AUI_goto_cb);  // Add our own callback
+  					break;
+  				
+    			case WAP_HOMEPAGE:	
+    				AUI_destroy(OPTIONSMENU_WIN);	/* SPR#2086 */
+    				AUI_wap_connect_URL(View->Profile->Homepage);	/* SPR#2086 - modified */
+    				break;
+    			
+    			case WAP_BACK:
+    				AUI_destroy(OPTIONSMENU_WIN);				/* SPR#2086 */
+    				ATB_wap_card_go_back(View);									// Go to previous card
+    				break;
+
+    			case WAP_RELOAD:
+    				AUI_destroy(OPTIONSMENU_WIN);				/* SPR#2086 */
+    				ATB_wap_card_refresh(View);									// Reload current card
+    				break;
+    			
+    			case WAP_EXIT:
+    				AUI_destroy(RETURN_TO_MENU);	/* SPR#2086 */
+    				break;
+			}
+			break;
+
+  		case LISTS_REASON_BACK:													// Exit menu (back, timeout etc).
+  		case LISTS_REASON_CLEAR:	
+			AUI_destroy(OPTIONSMENU_WIN);		/* SPR#2086 */
+  			break;
+
+  		default:
+  			break;
+	}
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_goto_cb
+
+ $Description:	Callback function for the goto URL menu
+ 
+ $Returns:		
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+static void AUI_goto_cb(T_MFW_HND parent_win, USHORT identifier, USHORT reason)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();			// WAP data
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_goto_cb");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	data->options_win = NULL; /* SPR#2086 */
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_options_cb
+
+ $Description:	Callback function for the options menu
+ 
+ $Returns:		None
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+void AUI_options_cb(T_MFW_HND parent_win, UBYTE identifier, UBYTE reason)
+{
+	T_WAP_DATA	*data = AUI_wap_data();
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_options_cb");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	data->options_win = NULL;
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_memory_alloc
+
+ $Description:	Called by the WAP.ATB to allocate memory.
+ 
+ $Returns:		Address if successful, null if not.
+
+ $Arguments:	size of memory to be allocated.
+ 
+*******************************************************************************/
+// Dec 22, 2004 REF: CRR MFW-SPR-27847 xnkulkar
+// Description: MFW memory size variable changed from U16 -> U32
+// Solution: The use of variable U16 has been replaced with U32
+
+U8* AUI_wap_memory_alloc(U32 size)
+{
+#ifdef TRACE_MEMALLOC
+	memUsed += size;
+	if (size<110)
+	{
+		memTracker[size]++;
+		TRACE_EVENT_P3("ALLOC %d, used = %d, tracking = %d", size, memUsed, memTracker[size]);
+	}
+	else
+	{
+		TRACE_EVENT_P2("ALLOC %d, used = %d", size, memUsed);
+	}
+#endif
+
+	return mfwAlloc(size);
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_memory_free
+
+ $Description:	Called by the WAP.ATB to free memory
+ 
+ $Returns:		
+
+ $Arguments:	address and size of memory to be freed.
+ 
+*******************************************************************************/
+// Dec 22, 2004 REF: CRR MFW-SPR-27847 xnkulkar
+// Description: MFW memory size variable changed from U16 -> U32
+// Solution: The use of variable U16 has been replaced with U32
+
+U8 AUI_wap_memory_free(U8* address,U32 size)
+{
+#ifdef TRACE_MEMALLOC
+	memUsed -= size;
+	if (size<110)
+	{
+		memTracker[size]--;
+		TRACE_EVENT_P3("FREE %d, used = %d, tracking = %d", size, memUsed, memTracker[size]);
+	}
+	else
+	{
+		TRACE_EVENT_P2("FREE %d, used = %d", size, memUsed);
+	}
+#endif
+
+	mfwFree(address,size);
+	return 1;
+}
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_string_alloc
+
+ $Description:	SPR#1816 - SH -Added
+ 				Allocates memory for a string.  Will free any existing
+ 				stored string.
+ 
+ $Returns:		None.
+
+ $Arguments:	Size of string to be allocated, in unicode characters, not including
+ 				null terminator.
+ 
+*******************************************************************************/
+
+void AUI_wap_string_alloc(T_WAP_STRING *string, USHORT size)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_wap_string_alloc()");
+	TRACE_EVENT_P1("Size of string: %d", size);
+#endif
+
+	if (string->length!=0)
+	{
+		/* If the size is correct, no allocation or freeing required */
+		
+		if (string->length==size)
+			return;
+			
+		/* Otherwise, free the current message block */
+
+		AUI_wap_string_free(string);
+	}
+
+	string->text = (USHORT *)AUI_wap_memory_alloc((size+1)*sizeof(USHORT));
+	string->length = size;
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_string_free
+
+ $Description:	SPR#1816 - SH - Added
+ 				Frees an allocated string
+ 
+ $Returns:		None.
+
+ $Arguments:	string - Pointer to the string
+ 
+*******************************************************************************/
+
+void AUI_wap_string_free(T_WAP_STRING *string)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_wap_string_free()");
+	TRACE_EVENT_P1("Size of string: %d", string->length);
+#endif
+
+	if (string->length!=0)
+	{
+		AUI_wap_memory_free((UBYTE *)string->text, (string->length+1)*sizeof(USHORT));
+		string->text = NULL;
+		string->length = 0;
+	}
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	ATB_wap_card_show
+
+ $Description:	Called by the WAP.ATB to show the and/or create the card window.
+ 
+ $Returns:		
+
+ $Arguments:	View	- The current view
+
+ 
+*******************************************************************************/
+
+void AUI_wap_card_show_req(T_WAP_VIEW *View)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_wap_card_show_req");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	/* SPR#1739 - SH - If the connecting window or list window are still extant,
+	 * destroy them */
+
+	AUI_destroy(CONNECT_WIN | LIST_WIN); /* SPR#2086 */
+
+	/* If WAP browser window doesn't exist, create it */
+	
+	if (data->browser_win==NULL)
+	{
+		data->browser_win = AUI_win_create(data->parent_win);							// Create WAP browser
+	}
+	
+	SEND_EVENT(data->browser_win,WAP_SHOW_CARD,0,0);							// Initialise window
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_status_notify
+
+ $Description:	Called by the WAP.ATB when a status flag has changed
+ 				SPR#1574 - SH:
+ 				- Status is now just a value, rather than a bit field.
+ 				- Added two new states: ATB_WAP_ATTACHING, GPRS is trying to
+ 				  attach, and ATB_WAP_ATTACH_FAILED, GPRS attach has
+ 				  failed.
+				- Don't need to destroy connecting window, as this is done
+				  automatically.
+ 
+ $Returns:		
+
+ $Arguments:	View			- The current view
+				status			- parameter which status has changed
+ 
+*******************************************************************************/
+
+void AUI_wap_status_notify(T_WAP_VIEW *View, USHORT status)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_wap_status_notify");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	switch (status)
+	{
+
+		/* If no status, destroy connecting window */
+
+		case ATB_WAP_NO_STATUS:
+			TRACE_EVENT("ATB_WAP_NO_STATUS");
+
+// xreddymn Jun-21-2005 MMI-SPR-30291: 
+// Removed this as it causes WAP sub-menu to appear after the
+// "Loading <URL>" dialog disappears and just before the WAP
+// content is displayed.
+//
+//			AUI_destroy(CONNECT_WIN);		/* SPR#2086 */
+			break;
+			
+		case ATB_WAP_ATTACHING:												// When logging in
+			TRACE_EVENT("ATB_WAP_ATTACHING");	
+			AUI_connecting_dialog(ATB_WAP_ATTACHING); /* SPR#2086 */
+			break;
+
+		case ATB_WAP_ATTACH_FAILED:												// When logging in
+			TRACE_EVENT("ATB_WAP_ATTACH_FAILED");
+			AUI_destroy(BROWSER_WIN | CONNECT_WIN); /* SPR#2086 */
+			AUI_info_dialog(TxtGPRS, TxtNotAvailable);  /* SPR#2086 */
+			break;
+		
+		case ATB_WAP_ERROR:												// When logging in
+			TRACE_EVENT("ATB_WAP_ERROR");
+			if (wap_callActive || data->connected)
+			{
+				AUI_destroy(BROWSER_WIN | CONNECT_WIN);	 /* SPR#2086 */
+				AUI_info_dialog(TxtGPRS, TxtError);  /* SPR#2086 */
+				wap_callActive = FALSE;												// Declare WAP call in progress
+				data->connected = FALSE;
+			}
+			break;
+
+		case ATB_WAP_ACTIVATE_FAILED:												// When logging in
+			TRACE_EVENT("ATB_WAP_ACTIVATE_FAILED");
+			AUI_destroy(CONNECT_WIN);		/* SPR#2086 */
+			AUI_end_call(-1);		/* End GPRS data call */
+			AUI_info_dialog(TxtConnection, TxtFailed);  /* SPR#2086 */
+			wap_callActive = FALSE;												// Declare WAP call in progress
+			data->connected = FALSE;
+			break;
+			
+		case ATB_WAP_CONNECTING:												// When connecting
+			TRACE_EVENT("ATB_WAP_CONNECTING");
+			
+			wap_callActive = TRUE;												// Declare WAP call in progress
+			data->connected = TRUE;
+			AUI_connecting_dialog(ATB_WAP_CONNECTING); /* SPR#2086 */
+			break;
+		
+		case ATB_WAP_LOGGING_IN:												// When logging in
+			TRACE_EVENT("ATB_WAP_LOGGING_IN");
+			/* SPR#1824 - SH - If browser window is present, destroy it,
+			 * so on re-creation it will be the top window */
+
+			AUI_destroy(BROWSER_WIN); /* SPR#2086 */
+			
+			/* Display dialog with "Logging In" */
+			AUI_connecting_dialog(ATB_WAP_LOGGING_IN); /* SPR#2086 */
+			break;
+		
+		case ATB_WAP_DOWNLOADING:
+			TRACE_EVENT("ATB_WAP_DOWNLOADING");
+			data->connected = TRUE;
+			/* SPR#2086 - SH - If downloading content, show progress */
+			if (data->connect_win && View->object_id==WAP_DOWNLOAD_VIEW)
+			{
+				AUI_connecting_dialog(ATB_WAP_DOWNLOADING); /* SPR#2086 */
+			}
+			break;
+
+		/* Status to indicate card is being read
+		 * from cache or from network */
+		 
+		case ATB_WAP_CARD_READING:
+			TRACE_EVENT("ATB_WAP_CARD_READING");
+			if (data->connect_win)
+			{
+				AUI_connecting_dialog(ATB_WAP_CARD_READING); /* SPR#2086 */
+			}
+			break;
+
+		case ATB_WAP_ONLINE_CONNECTION_CLOSED:
+			TRACE_EVENT("ATB_WAP_ONLINE_CONNECTION_CLOSED");
+			AUI_destroy(BROWSER_WIN | CONNECT_WIN | OPTIONS_WIN | OPTIONSMENU_WIN); 	/* SPR#2086 */
+			data->connected = FALSE;
+			wap_callActive = FALSE;												// WAP call no longer in progress
+			// Jun-08-2005 MMI-SPR-30291: Added patches from FG
+			TRACE_EVENT("Connection closed");
+                    //xrashmic 17 Aug, 2005 MMI-SPR-31364
+                    //To indicate to the user that wap ran out of memory and hence disconnected.
+                    if(TRUE == data->wapOutOfMem)
+                    {
+                       information_dialog(TxtFatalError, TxtErrorOutOfMem,NULL,NULL,TxtNull,TxtSoftBack,FOREVER,KEY_RIGHT|KEY_HUP,0);
+                       data->wapOutOfMem= FALSE;
+                    }
+                    else
+			AUI_info_dialog(TxtConnection, TxtDeActivated);  // Just for debbuging
+			exitingWap=FALSE;//xrashmic 13 Feb, 2006 MMI-SPR-58532
+			break;
+
+		case ATB_WAP_PLEASE_WAIT:
+			TRACE_EVENT("ATB_WAP_PLEASE_WAIT");
+			AUI_connecting_dialog(ATB_WAP_PLEASE_WAIT); /* SPR#2086 */
+			break;
+
+		case ATB_WAP_SHUTTING_DOWN:
+			TRACE_EVENT("ATB_WAP_SHUTTING_DOWN");
+			break;
+
+		/* SPR#1982 - SH - New status, waiting for PDP context to deactivate */
+		
+		case ATB_WAP_DEACTIVATING:
+			TRACE_EVENT("ATB_WAP_DEACTIVATING");
+			AUI_connecting_dialog(ATB_WAP_DEACTIVATING); /* SPR#2086 */
+			break;
+			
+		default:
+			TRACE_EVENT("** UNKNOWN STATUS **");
+			return;		
+	}
+
+	if (data->browser_win)						/*The card is prompted to show the status*/
+	{
+		TRACE_EVENT("Updating card view for status.");
+		win_show(data->browser_win);
+	}
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_change_soft_key
+
+ $Description:	Called by the WAP.ATB when the card requests a custom text for a
+ 				soft key
+ 
+ $Returns:		
+
+ $Arguments:	View			- The current view
+ 				Label			- The text of the custom soft key
+ 				length			- Length of the text
+ 				keyId			- The id of the key, to send to the AUS Browser
+ 									when the key is pressed.
+ 
+*******************************************************************************/
+
+
+void AUI_wap_change_soft_key(T_WAP_VIEW *View, USHORT *Label, USHORT length, USHORT keyId)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	SHORT			optionsWidth;
+	USHORT			optionsLength;
+	SHORT			labelWidth;
+	/* SPR#1816 - SH - Some shortcuts */
+	char			*LeftKeyTag	= (char *)data->LeftSoftKey;
+	char			*RightKeyTag = (char *)data->RightSoftKey;
+	USHORT			*LeftKeyText = &data->LeftSoftKey[1];
+	USHORT			*RightKeyText = &data->RightSoftKey[1];
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_wap_change_soft_key");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	/* SPR#1816 - SH - Soft keys are unicode */
+	
+	if (length > 0)
+	{
+		/* Insert unicode tag and convert to MMI unicode */
+		
+		LeftKeyTag[0] = 0x80;
+		LeftKeyTag[1] = 0x7F;
+		optionsLength = AUI_textid_to_uc(LeftKeyText, TxtSoftOptions, SOFTKEY_MAX_LEN);
+		RightKeyTag[0] = 0x80;
+		RightKeyTag[1] = 0x7F;
+		ATB_uc_text_copy(RightKeyText, Label, length);						// Convert RSK text to char type
+		ATB_uc_text_convert(RightKeyText, length);
+		
+		/* Make sure softkeys fit into the space by cropping them if necessary */
+
+		optionsWidth	= ATB_uc_text_width(LeftKeyText, optionsLength);
+		labelWidth		= ATB_uc_text_width(RightKeyText, length);
+
+		if ((labelWidth+optionsWidth) > WAP_TOTAL_WIDTH)						// If they don't fit...
+		{
+			optionsWidth = WAP_TOTAL_WIDTH-labelWidth-WAP_SOFTKEY_SPACING;		// Try shortening "options"
+			if (optionsWidth<ATB_uc_text_width(LeftKeyText, WAP_SOFTKEY_MIN_LENGTH))    // If it's too short....
+			{
+				optionsWidth = ATB_uc_text_width(LeftKeyText, WAP_SOFTKEY_MIN_LENGTH); // Shorten the other key
+				labelWidth = WAP_TOTAL_WIDTH-optionsWidth-WAP_SOFTKEY_SPACING;
+			}
+		}
+		ATB_uc_text_crop(LeftKeyText, optionsLength, optionsWidth);	// Crop the texts
+		ATB_uc_text_crop(RightKeyText, length, labelWidth);
+		View->CustSoftKeys = TRUE;												// We are using cust. soft keys
+		View->CustSoftKeyId = keyId;
+	}
+	else
+		View->CustSoftKeys = FALSE;
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_string
+
+ $Description:	SPR#1816 - SH - Renamed & modified for unicode
+ 				Gives the ATB the text of a required string (specific for now)
+ 
+ $Returns:		Pointer to the string
+
+ $Arguments:	string	- The string to translate.  If NULL, uses stringID
+ 				stringID - The string ID (see ATBData.h for list of strings)
+ 
+*******************************************************************************/
+
+USHORT AUI_wap_stringID(USHORT *dest, USHORT destlen, USHORT stringID)
+{
+	USHORT *temp;
+	USHORT src;
+	USHORT length;
+
+	switch (stringID)
+	{
+		case WAP_STRING_DOWNLOADING:
+			src = TxtDownloading;
+			break;
+
+		case WAP_STRING_UPDATING:
+			src = TxtUpdating;
+			break;
+
+		case WAP_STRING_UNTITLED:
+			src = TxtUntitled;
+			break;
+			
+		default:
+			src = TxtError;
+			break;
+	}
+
+	length = AUI_textid_to_uc(dest, src, destlen);
+	
+	return length;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_textid_to_uc
+
+ $Description:	SPR#1816 - SH - Added
+ 				Converts an string from a text ID to an MMI-converted unicode string.
+ 
+ $Returns:		Length of resulting string
+
+ $Arguments:	dest	- Place to store the result.
+ 				textId	- The string to translate.
+				destlen	- Maximum length of result
+ 
+*******************************************************************************/
+
+static USHORT AUI_textid_to_uc(USHORT *dest, int textId, USHORT destlen)
+{
+	USHORT length;
+	char *srctext = MmiRsrcGetText(textId);
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_string2unicode()");
+#endif
+
+	if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE)
+	{
+		length = ATB_uc_text_copy(dest, (USHORT *)srctext, destlen);
+	}
+	else
+	{
+		length = ATB_char_to_uc(dest, srctext);
+	}
+	
+	return length;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_text_to_uc
+
+ $Description:	SPR#1816 - SH - Added
+ 				Converts an standard unicode string to an MMI-converted unicode string,
+ 				including the 0x80 at the start
+ 
+ $Returns:		N/A
+
+ $Arguments:	dest	- Place to store the result.
+ 				src		- The string to translate.
+ 				destLen	- Size of destination array in unicode characters
+ 
+*******************************************************************************/
+
+static USHORT AUI_text_to_uc(USHORT *dest, USHORT *src, USHORT destlen)
+{
+	USHORT length;
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_text_to_uc()");
+#endif
+
+	length = ATB_uc_text_copy(&dest[1], src, destlen);
+	ATB_uc_text_convert(&dest[1], length);
+
+	dest[0] = 0x7F80;
+		
+	return length;
+}
+
+
+/* SPR#2086 - Removed obsolete function */
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_extDestroy
+
+ $Description:	Allows external files to destroy the WAP application
+ 
+ $Returns:		
+
+ $Arguments:	
+ 
+*******************************************************************************/
+
+void AUI_wap_extDestroy(void)
+{	
+	AUI_destroy(ALL_WIN); /* SPR#2086 */
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_call_connect
+
+ $Description:	SPR#1850 - SH - Called when a CSD call is connected
+ 
+ $Returns:		None.
+
+ $Arguments:	
+ 
+*******************************************************************************/
+
+void AUI_wap_call_connect(SHORT cId)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+
+	if (!data)
+	{
+		return;
+	}
+	
+	if (data->View)
+	{	
+		TRACE_FUNCTION("AUI_wap_call_connect()");
+		data->View->cId = cId;		/* SPR#1850 - SH - Call is connected */
+	}
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_call_disconnect
+
+ $Description:	SPR#1656 - SH - Called when a CSD call is terminated
+ 				Called when a CSD call is terminated - informs WAP of this.
+ 				SPR#1850 - SH - Now parameter is passed indicating ID of call
+ 				
+ $Returns:		None.
+
+ $Arguments:	
+ 
+*******************************************************************************/
+
+void AUI_wap_call_disconnect(SHORT cId)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+
+	TRACE_FUNCTION("AUI_wap_call_disconnect()");
+	
+	if (!data)
+	{
+		return;
+	}
+	
+	if (data->View)
+	{	
+		/* View exists; are we in the connected, or in the connecting screen? */
+
+		if (data->connected || data->connect_win || data->browser_win)
+		{
+			/* SPR#1850 - SH - Check it's the right call */
+			
+			if (cId==data->View->cId)
+			{
+				ATB_wap_disconnect(data->View);  /* SPR#1850 - SH - Disconnect WAP browser */
+				data->View->cId = -1;		/* SPR#1850 - SH - Call is disconnected */
+				ATB_wap_status_change(data->View, ATB_WAP_ONLINE_CONNECTION_CLOSED);
+				AUI_error_dialog(data->View, ERROR_CALL_DISCONNECTED);
+			}
+		}
+	}
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_end_call
+
+ $Description:	SPR#1575 - SH - Determine whether call is CSD or GPRS,
+ 				and attempt to end it.
+ 				NOTE: this function may be called after WAP is destroyed, so it should
+ 				never attempt to access WAP data without first checking that it is
+ 				non-null.
+ 
+ $Returns:		None.
+
+ $Arguments:	SPR#1850 - SH - Now provided with the call ID of the CSD call
+ 				(ignored for GPRS profile).
+ 
+*******************************************************************************/
+
+void AUI_end_call(SHORT cId)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	
+	TRACE_FUNCTION("AUI_end_call()");
+
+	if (!data)
+	{
+		return;
+	}
+	
+	/* If WAP browser is active, inform it of disconnection */
+	
+	if (data)
+	{
+		if (data->View)
+		{
+			/* SPR#1850 - SH - If there is a waiting incoming call, accept it now */
+			
+			if (data->call_waiting)
+			{
+				cm_mt_accept();
+				data->call_waiting = FALSE;
+				return;
+			}
+			
+			ATB_wap_disconnect(data->View);
+			
+			if (data->View->Profile->AccessType == WAP_CS_DATA)
+			{
+				/* SPR#1850 - SH - If call ID is not -1, call is active.
+				 * End it using cm_disconnect */
+				 
+				if (data->View->cId!=-1)
+				{
+					TRACE_EVENT_P1("Disconnecting CSD call: %d", data->View->cId);
+					cm_disconnect(data->View->cId);
+					data->View->cId = -1;	// Call is no longer active
+				}
+				
+				if (call_get_window())
+				{
+					TRACE_EVENT("Destroying calling window.");
+					SEND_EVENT(call_get_window(), CALL_DESTROY_CALLING_WINDOW, 0, 0);
+					data->View->cId = -1;
+				}
+				return;
+			}
+			else
+			{
+				TRACE_EVENT("Disconnect GPRS call.");
+
+				/* SPR#1982 - SH - if GPRS call is not yet terminated, set
+				 * status so "Please Wait" is shown until it is. */
+				 
+#if 0
+
+				if (!disconnect_wap_call(WAP_GPRS_DATA))
+				{
+					TRACE_EVENT("Waiting for disconnection.");
+					ATB_wap_status_change(data->View, ATB_WAP_DEACTIVATING);
+				}
+#endif	
+
+				return;
+			}
+		}
+	}
+
+	/* SPR#1850 - SH - If we've reached here, the the WAP application
+	 * is closed, but the call is still open */
+
+	TRACE_EVENT("WAP is closed; attempting to end call");
+
+	/* SPR#1850 - SH - If call ID is not -1, call is active.
+	 * End it using cm_disconnect */
+	 
+	if (cId!=-1)
+	{
+		TRACE_EVENT("Disconnecting CSD call in progress.");
+		cm_disconnect(cId);
+	}
+				
+	/* Destroy calling window */
+		
+	if (call_get_window())
+	{
+		TRACE_EVENT("Destroying calling window.");
+		SEND_EVENT(call_get_window(), CALL_DESTROY_CALLING_WINDOW, 0, 0);
+	}
+
+#ifdef MMI_GPRS_ENABLED
+	/* Terminate any GPRS call in progress.
+	 * SPR#1982 - SH - if GPRS call is not yet terminated, set
+	 * status so "Please Wait" is shown until it is. */
+#if 0
+	if (!disconnect_wap_call(WAP_GPRS_DATA))
+	{
+		TRACE_EVENT("Waiting for disconnection.");
+		ATB_wap_status_change(data->View, ATB_WAP_DEACTIVATING);
+	}
+#endif
+#endif
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_in_call
+
+ $Description:	SPR#1850 - SH - Returns TRUE if a WAP CSD call is currently active.
+ 
+ $Returns:		TRUE or FALSE
+
+ $Arguments:	None.
+ 
+*******************************************************************************/
+
+UBYTE AUI_wap_in_call(void)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+
+	UBYTE result;
+
+	TRACE_FUNCTION("AUI_wap_in_call()");
+	
+	if (!data)
+	{
+		return FALSE;
+	}
+
+	result = FALSE;
+
+	/* Ensure that view is open */
+		
+	if (data->View)
+	{
+		/* If the call ID is not -1, there is a call in progress */
+		if (data->View->cId!=-1)
+		{
+			result = TRUE;
+		}
+	}
+
+	return result;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_browser_disconnect()
+
+ $Description:	SPR#1850 - SH - Shuts down browser.  Only use in the case where
+ 				there is an incoming call waiting to be accepted.
+ 
+ $Returns:		TRUE or FALSE
+
+ $Arguments:	None.
+ 
+*******************************************************************************/
+
+void AUI_wap_browser_disconnect()
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	
+	TRACE_FUNCTION("AUI_wap_browser_disconnect()");
+	
+	if (!data)
+	{
+		return;
+	}
+	
+	if (data->View)
+	{
+		data->call_waiting = TRUE;				/* There is a waiting call */
+		ATB_wap_stop_download(data->View);		/* Stop any active download */
+		ATB_wap_disconnect(data->View);			/* Disconnect the WAP browser */
+		AUI_destroy(ALL_WIN);		/* SPR#2086 */
+	}
+
+	return;
+}
+
+
+#ifdef MMI_GPRS_ENABLED
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_gprs_cb
+
+ $Description:	Called when GPRS state changes.  
+ 
+ $Returns:		None.
+
+ $Arguments:	
+xrashmic 13 Feb, 2006 MMI-SPR-58532
+*******************************************************************************/
+
+void AUI_wap_gprs_cb(UBYTE status)
+{
+	T_WAP_DATA 		*data	= AUI_wap_data();
+	
+	TRACE_FUNCTION("AUI_wap_gprs_cb");
+
+	if (!data)
+	{
+		return;
+	}
+
+	if (!data->View)
+	{
+		return;
+	}
+	
+	if (data->View->Profile->AccessType==WAP_GPRS_DATA)
+	{
+		switch (status)
+		{
+			case GPRS_CONTEXT_DEACTIVATE:
+				//Only for network initiated deactivation we need to exit wap
+				//i.e pdp deactivation received by the network.
+				if(!exitingWap && !MMSactive)
+				{
+					ATB_wap_stop_download(data->View);
+					AUI_wap_string_free(&data->Message); 
+					AUI_destroy(RETURN_TO_MENU); 
+				}
+				break;
+		}
+	}
+	return;
+}
+/*******************************************************************************
+
+ $Function:    	AUI_wap_GPRS_status
+
+ $Description:	Called when GPRS state changes.  If WAP is active, updates status.
+ 				SPR#1574 - SH - Added this function
+ 
+ $Returns:		None.
+
+ $Arguments:	
+ 
+*******************************************************************************/
+
+void AUI_wap_gprs_status(UBYTE status)
+{
+	T_WAP_DATA 		*data	= AUI_wap_data();
+	
+	TRACE_FUNCTION("AUI_wap_gprs_status");
+
+	if (!data)
+	{
+		return;
+	}
+
+	if (!data->View)
+	{
+		return;
+	}
+	
+	if (data->View->Profile->AccessType==WAP_GPRS_DATA)
+	{
+		switch (status)
+		{
+			case GPRS_ATTACHED:
+				TRACE_EVENT("STATUS: Attached.");
+				
+				/* SPR#1189 - SH - Check that login is still proceeding */
+				if (ATB_wap_status_get(data->View, ATB_WAP_ATTACHING))
+				{
+					TRACE_EVENT("View is attaching!");
+					ATB_wap_status_change(data->View, ATB_WAP_LOGGING_IN);
+					/* SPR#1575 - SH - Are now attached, can connect */
+					connect_gprs(data->View->object_id);
+				}
+				break;
+				
+			case GPRS_OFF:
+				TRACE_EVENT("STATUS: Detached");
+				if (data->connected)
+				{
+#if 0
+					disconnect_wap_call(WAP_GPRS_DATA);
+#endif
+					ATB_wap_status_change(data->View, ATB_WAP_ATTACH_FAILED);
+				}
+				break;
+
+			/* SPR#1824 - SH - Added these status values */
+
+			case GPRS_CONTEXT_ACTIVATE:
+				TRACE_EVENT("STATUS: Context Activated");
+				break;
+
+			case GPRS_CONTEXT_DEACTIVATE:
+				TRACE_EVENT("STATUS: Context Deactivated");
+				/* SPR#1982 - SH - If we're deactivating, this is OK */
+				if (ATB_wap_status_get(data->View, ATB_WAP_DEACTIVATING))
+				{
+					ATB_wap_status_change(data->View, ATB_WAP_ONLINE_CONNECTION_CLOSED);
+				}
+				/* SPR#1982 - SH - Also display message if status is PLEASE WAIT */
+				else if (ATB_wap_status_get(data->View, ATB_WAP_PLEASE_WAIT)
+					|| ATB_wap_status_get(data->View, ATB_WAP_CONNECTING)
+					|| ATB_wap_status_get(data->View, ATB_WAP_DOWNLOADING) /* SPR#2086 */
+					|| ATB_wap_status_get(data->View, ATB_WAP_LOGGING_IN))
+				{
+					ATB_wap_status_change(data->View, ATB_WAP_ACTIVATE_FAILED);
+					if (!data->View->secondaryIP)
+					{
+						ATB_wap_secondary_IP(data->View);	
+					}
+					else
+					{
+                                          //xmzhou_trace_string("ATB_wap_data_call_disconnected 4");
+						ATB_wap_data_call_disconnected(data->View);
+					}
+				}
+				break;
+
+			case GPRS_ERROR:
+				TRACE_EVENT("STATUS: ERROR");
+				AUI_end_call(-1);				/* SPR#1850 - SH - Call ID is -1 for GPRS */
+				ATB_wap_status_change(data->View, ATB_WAP_ERROR);
+				break;
+		}
+	}
+	return;
+}
+#endif /* MMI_GPRS_ENABLED */
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_content_get
+
+ $Description:	Fetches content
+ 				SPR#2086 - SH - Added
+ 
+ $Returns:		None.
+
+ $Arguments:	id - A distinct ID for this request.  Returned in ATB_wap_content().
+ 				Url - The URL of the content to download.
+ 				reload - If TRUE, any version of the requested content in the cache
+ 				will be ignored, and the content will be fetched from the network.
+ 				acceptHeader - Specifies if any Accept-Header fields will be sent with
+ 				the request.  Can be NULL.
+ 				
+*******************************************************************************/
+
+void AUI_wap_content_get(UBYTE id, char *Url, BOOL reload, char *acceptHeader)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+
+	//xmzhou_trace_string_value("data=",data);
+	
+	data->View->Title[0] = 0;
+
+
+	//xmzhou_trace_string_value("AUI_wap_content_get : data->connected", data->connected);
+	
+	if (!data->connected)
+	{
+		//xmzhou_trace_string("calling ATB_wap_status_change");
+		ATB_wap_status_change(data->View, ATB_WAP_PLEASE_WAIT); 
+	}
+	//T_WAP_RES ATB_wap_content_get(UBYTE urlID, char *Url, BOOL reload, char *acceptHeader);
+	ATB_wap_content_get(id, Url, reload, acceptHeader);
+
+	return;
+}
+
+
+/* M4 Begin: A.Mok - 06 OCT 2003 */
+
+//TISHMMS Project
+extern void AUI_wap_content_clone (UCHAR urlID, const CHAR *data, USHORT length, BOOL moreData, const CHAR *contentType, ULONG totalSize, SHORT errorNo);
+/* M4 End: A.Mok - 06 OCT 2003 */
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_content
+
+ $Description:	Content is sent from the browser on request.
+ 				SPR#2086 - SH - Added
+ 
+ $Returns:		None.
+
+ $Arguments:	urlID - Unique identifier for the request.
+ 				Data - the data sent
+ 				data_length - Length of the data in bytes
+ 				moreData - TRUE if there is more data to come
+ 				ContentType - Content type of the data
+ 				totalSize - Zero if data sent all in one block
+ 
+*******************************************************************************/
+
+void AUI_wap_content(UBYTE urlID,
+	char *Data,
+	ULONG data_length,
+	BOOL moreData,
+	char *ContentType,
+	ULONG contentType_length,
+	ULONG totalSize)
+{
+	T_WAP_DATA 		*data	= AUI_wap_data();
+	
+	float data_length_kbytes;
+	char title[20];
+       int offset;
+	TRACE_FUNCTION("AUI_wap_content()");
+
+	if (!data)
+	{
+		return;
+	}
+
+
+
+	data->View->Title[0] = 0x7F80;
+
+	//xmzhou_trace_string("****AUI_wap_content*****");
+	//xmzhou_trace_string_value("urlID",urlID);
+	//xmzhou_trace_string_value("data_length",data_length);
+	//xmzhou_trace_string_value("moreData",moreData);
+	//xmzhou_trace_string(ContentType);
+	//xmzhou_trace_string_value("contentType_length",contentType_length);
+	//xmzhou_trace_string_value("totalSize",totalSize);
+#if 0
+    /* M4 Begin: A.Mok - 06 OCT 2003 */
+    if (!strcmp ("application/vnd.wap.mms-message", ContentType))
+    {
+        //xmzhou_trace_string("****AUI_wap_content_clone*****");
+        AUI_wap_content_clone (urlID, Data, data_length, moreData, ContentType, totalSize, 0);
+    }
+    /* M4 End: A.Mok - 06 OCT 2003 */	
+#endif
+        //xrashmic 29 Nov, 2004 MMI-SPR-26161
+        offset=downloaded_data_size;
+        downloaded_data_size += data_length;
+
+        //If the has download started and the object is not a supported type, abort the download.
+        if(offset>0 && obj_Type==EMtUnknown)
+        {
+                TRACE_EVENT("Unsupported MIME type");
+                ATB_wap_change_view(WAP_DOWNLOAD_VIEW);
+                AUI_destroy(WAP_WIN);
+                return;    
+        }
+
+        // Depending on the Contenttype the Mime type is set here for inserting 
+        // the object into the object manger of MMS
+        if(contentType_length>0)
+	{
+            if(strstr(ContentType,"Content-Type: image/jpeg"))
+            {
+                obj_Type =  EMtMimeJpeg;
+            }
+            else if (strstr(ContentType,"Content-Type: image/gif"))
+            {
+                   obj_Type =  EMtMimeGif;
+            }
+            else if (strstr(ContentType,"Content-Type: image/png"))
+            {
+                obj_Type = EMtMimePng;
+            }
+            else if (strstr(ContentType,"Content-Type: audio/amr"))
+            {
+                   obj_Type =  EMtMimeAmr;
+            }   
+            //xrashmic 4 Jan, 2005 MMI-SPR-27874
+            //Added support for BMP and WBMP
+            else if(strstr(ContentType,"Content-Type: image/wbmp"))
+            {
+                   obj_Type =  EMtMimeWbmp;
+            }
+            else if(strstr(ContentType,"Content-Type: image/bmp"))
+            {
+                   obj_Type =  EMtMimeBmp;
+            }
+            // xreddymn Jan-31-2005 MMI-SPR-28483: Support MIDI objects
+            else if(strstr(ContentType,"Content-Type: audio/midi"))
+            {
+                   obj_Type =  EMtMimeMidi;
+            }
+            else if(strstr(ContentType,"Content-Type: audio/mid"))
+            {
+                   obj_Type =  EMtMimeMidi;
+            }
+            else
+            {
+                obj_Type = EMtUnknown;
+            }
+        }
+        if(downloaded_data_size<MAX_DOWNLOAD)
+        {
+            //xrashmic 29 Nov, 2004 MMI-SPR-26161
+            // If data is within the set limit continue downloading
+            if (downloaded_data_size<1024)
+            {
+                sprintf(title, "D/l: %db", downloaded_data_size);
+		//xmzhou_trace_string(title);
+		ATB_char_to_uc(&data->View->Title[1], title);
+	}
+	else
+	{
+                data_length_kbytes = (float)downloaded_data_size/(float)1024;
+		sprintf(title, "D/l: %.1fKb", data_length_kbytes);
+		//xmzhou_trace_string(title);
+		ATB_char_to_uc(&data->View->Title[1], title);
+	}
+	
+	/* If more data to come, don't display yet */
+            memcpy((void *)(downloaded_data+offset), Data,data_length);
+	
+	if (moreData)
+	{
+		AUI_connecting_dialog(ATB_WAP_DOWNLOADING); /* SPR#2086 */
+		return;
+	}
+            //xrashmic 4 Jan, 2005 MMI-SPR-27874
+            // Adding seperate condition when the data is only few bytes, 
+            // as data_length_kbytes is populated only for the images in kbytes
+            if (downloaded_data_size<1024)
+                sprintf(title, "Downloaded: %db", downloaded_data_size);
+            else
+                sprintf(title, "Downloaded: %.1fKb", data_length_kbytes);
+                //xmzhou_trace_string(title);
+                ATB_char_to_uc(&data->View->Title[1], title);
+            //xrashmic 29 Nov, 2004 MMI-SPR-26161
+            // When the data is downloaded completly, insert it into the object manager.
+            M4_StoreDownloadedObject(downloaded_data, downloaded_data_size,obj_Type);
+        }
+        else
+        {
+             //xrashmic 29 Nov, 2004 MMI-SPR-26161
+             // If data exceeds  the set limit abort the download
+              ATB_wap_change_view(WAP_DOWNLOAD_VIEW);
+              AUI_destroy(WAP_WIN);
+              return;
+        }
+	AUI_destroy(CONNECT_WIN | EDIT_WIN); /* SPR#2086 */
+	
+	/* If WAP browser window doesn't exist, create it */
+	
+	if (data->browser_win==NULL)
+	{
+		data->browser_win = AUI_win_create(data->parent_win); /* SPR#2086 */
+	}
+
+	win_show(data->browser_win);
+
+
+	
+	return;
+}
+
+/*
+T_WAP_RES ATB_wap_content_post(
+	UBYTE urlID,
+	char *Url,
+	BOOL reload,
+	char *acceptHeader,
+	char *Data,
+	ULONG data_length,
+	BOOL moreData,
+	char *ContentType,
+	UBYTE sendMode,
+	char *ContentDisp,
+	ULONG totalSize)
+*/
+//TISHMMS Project
+
+void AUI_wap_content_post_more(
+UBYTE urlID,
+	char *Data,
+	ULONG data_length,
+	BOOL moreData)
+{
+    //xmzhou_trace_string("AUI_wap_content_post_more called");
+    
+    ATB_wap_content_post_more(
+    urlID,
+    Data,
+    data_length,
+    moreData);
+}
+
+void AUI_wap_content_post(UBYTE urlID,
+	                                        char *Url,
+	                                        BOOL reload,
+	                                        char *acceptHeader,
+	                                        char *Data,
+	                                        ULONG data_length,
+	                                        BOOL moreData,
+	                                        char *ContentType,
+	                                        UBYTE sendMode,
+	                                        char *ContentDisp,
+	                                        ULONG totalSize)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+
+	//xmzhou_trace_string("AUI_wap_content_post called");
+	
+	data->View->Title[0] = 0;
+
+
+	//xmzhou_trace_string_value("AUI_wap_content_post : data->connected", data->connected);
+	
+	if (!data->connected)
+	{
+		//xmzhou_trace_string("AUI_wap_content_post: calling ATB_wap_status_change");
+		ATB_wap_status_change(data->View, ATB_WAP_PLEASE_WAIT); 
+	}
+	
+	ATB_wap_content_post(
+	                                 urlID,
+	                                 Url,
+	                                 reload,
+	                                 acceptHeader,
+	                                 Data,
+	                                 data_length,
+	                                 moreData,
+	                                 ContentType,
+	                                 sendMode,
+	                                 ContentDisp,
+	                                 totalSize);
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_view_changed
+
+ $Description:	Notify AUI that view has been changed
+ 				SPR#2086 - SH - Added
+ 
+ $Returns:		None.
+
+ $Arguments:	View - The new view
+ 
+*******************************************************************************/
+
+void AUI_wap_view_changed(T_WAP_VIEW *View)
+{
+	T_WAP_DATA 		*data	= AUI_wap_data();
+	
+	TRACE_FUNCTION("AUI_wap_view_changed()");
+	
+	if (!data)
+	{
+		return;
+	}
+
+	data->View = View;
+	if (View)
+	{
+		data->view_id = View->object_id;
+	}
+	else
+	{
+		data->view_id = WAP_NO_VIEW;
+	}
+
+	TRACE_EVENT_P1("New view is %d", data->view_id);
+	
+	return;
+}
+
+/*******************************************************************************
+
+ $Function:     AUI_mms_gprs_reset_callback
+
+ $Description:  Remove GPRS event callback that was assigned when sending MMS
+ 
+ $Returns:      None
+
+ $Arguments:    None
+
+                xreddymn Apr-02-2005 MMI-SPR-29936
+ 
+*******************************************************************************/
+
+void AUI_mms_gprs_reset_callback(void)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+	if(data != NULL)
+	{
+		GPRS_SetCallback(data->parent_win, NULL);
+	}
+}
+
+/*******************************************************************************
+
+ $Function:     AUI_mms_gprs_status
+
+ $Description:  GPRS event callback function when sending MMS
+ 
+ $Returns:      None
+
+ $Arguments:    status: GPRS status codes posted through this argument
+
+                xreddymn Apr-02-2005 MMI-SPR-29936
+ 
+*******************************************************************************/
+
+void AUI_mms_gprs_status(UBYTE status)
+{
+	if(GPRS_ERROR == status)
+	{
+		T_WAP_DATA 	*data = AUI_wap_data();
+
+		AUI_mms_status_notify(ATB_WAP_ATTACH_FAILED);
+		AUI_mms_gprs_reset_callback();
+		AUI_mms_cancel_send();
+		ATB_wap_disconnect(data->View);
+	}
+}
+
+/*******************************************************************************
+
+ $Function:     AUI_mms_gprs_set_callback
+
+ $Description:  Assign GPRS event callback when sending MMS
+ 
+ $Returns:      None
+
+ $Arguments:    None
+
+                xreddymn Apr-02-2005 MMI-SPR-29936
+ 
+*******************************************************************************/
+
+void AUI_mms_gprs_set_callback(void)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+	if(data != NULL)
+	{
+		GPRS_SetCallback(data->parent_win, (T_GPRS_CB)AUI_mms_gprs_status);
+	}
+}
+
+// May 19 2005  REF:  MMI-SPR-29887  xrashmic
+// To display an Error Message when user tries to retrieve the MMS with  GPRS disabled SIM.
+void AUI_retrivemms_gprs_status(UBYTE status)
+{
+   if(GPRS_ERROR == status)
+   {
+       T_WAP_DATA *data = AUI_wap_data();
+       AUI_mms_status_notify(ATB_WAP_ATTACH_FAILED);
+       AUI_mms_gprs_reset_callback();
+       AUI_mms_cancel_recieve();
+       ATB_wap_disconnect(data->View);
+   }
+}
+ // May 19 2005  REF:  MMI-SPR-29887  xrashmi
+ // Call back function for GPRS connection.
+void AUI_retrievemms_gprs_set_callback(void)
+{
+   T_WAP_DATA *data = AUI_wap_data();
+   if(data != NULL)
+   {
+      GPRS_SetCallback(data->parent_win, (T_GPRS_CB)AUI_retrivemms_gprs_status);
+   }
+}
+
+//xrashmic 08 Feb, 2005 MMI-SPR-27853
+/*******************************************************************************
+
+ $Function:    	AUI_mmssend_cb
+
+ $Description:	Call back function for all send mms info dialog screens
+ 
+ $Returns:		None.
+
+ $Arguments:	
+//xrashmic 23 Nov, 2005 MMI-SPR-OMAPS00047637
+//Sepearted the call back funtion for the sending and receving mms dialog screns.
+*******************************************************************************/
+void AUI_mmssend_cb(T_MFW_HND win, USHORT identifier, USHORT reason)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+	
+        TRACE_EVENT("AUI_mmssend_cb");
+	data->mms_win=NULL;
+	data->mms_win_type=0; 
+    // xrashmic 30 Nov, 2004 MMI-SPR-26145
+    // Deleting the compose and option window after sending the MMS
+    if(mms_create_opt_hnd)
+    {
+         MMI_DestoryWindow(mms_create_opt_hnd);
+         mms_create_opt_hnd=NULL;
+        if(mms_create_hnd)
+        {
+             MMI_DestoryWindow(mms_create_hnd);
+             mms_create_hnd=NULL;
+        }
+        //xrashmic 14 Dec, 2004 MMI-SPR-23921
+        // Deleting the forward window if it was created.
+        else if(mms_Fwdcreate_hnd)
+        {
+             MMI_DestoryWindow(mms_Fwdcreate_hnd);
+             mms_Fwdcreate_hnd=NULL;
+            //The options window containing "forward" options.
+        }
+       // Apr 07 2005  REF:  MMI-SPR-27826  x0012849
+       // To avoid crash when a user replies to the MMS which is there in Inbox
+       // Delete the options window  not only while forwarding but also while replying
+       // May 11 2005  REF:  MMI-SPR-29887  x0012849
+       // The code is Moved to get the list of MMS refreshed each time we go out and come back to the list.
+    }
+       if(g_OptionsWin)   
+       {
+                MMI_DestoryWindow(g_OptionsWin);
+                g_OptionsWin=NULL;
+		 // Jun 23 2005  REF:  MMI-SPR-29887  x0012849
+               // To refresh the list of MMS, after this the first item in the list is highlighted
+		 if(g_MmsBoxWin)                      
+ 	              SEND_EVENT (g_MmsBoxWin, MWM_REDRAW, 0,(void *)folder);  
+    				
+       }
+     //CRR 25577: 06 oct 2004 - xpradipg
+    //we check if the current window is the MMS Inbox list window and then post
+    //the redraw event which will refresh the list
+       if(mmsboxwinhnd)
+       {
+             SEND_EVENT(mmsboxwinhnd, MWM_REDRAW, 0,(void *)folder);
+       } 
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_mmsrcv_cb
+
+ $Description:	Call back function for all receive mms info dialog screens
+ 
+ $Returns:		None.
+
+ $Arguments:	
+ //xrashmic 23 Nov, 2005 MMI-SPR-OMAPS00047637
+//Sepearted the call back funtion for the sending and receving mms dialog screns.
+*******************************************************************************/
+void AUI_mmsrcv_cb(T_MFW_HND win, USHORT identifier, USHORT reason)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+	
+        TRACE_EVENT("AUI_mmsrcv_cb");
+	data->mms_win=NULL;
+	data->mms_win_type=0;
+
+       if(g_OptionsWin)   
+       {
+		  //Removing the Inbox option screen
+                MMI_DestoryWindow(g_OptionsWin);
+                g_OptionsWin=NULL;
+		 if(g_MmsReadWin)
+		 {
+			//Removing the Inbox->option->Read screen
+			MMI_DestoryWindow(g_MmsReadWin);
+			g_MmsReadWin=NULL;
+		 }
+		else if(mms_Fwdcreate_hnd)
+        	{
+        		//Removing the Inbox->option->Forward screen
+             		MMI_DestoryWindow(mms_Fwdcreate_hnd);
+	             mms_Fwdcreate_hnd=NULL;
+       	
+        	}
+		else if(mms_create_hnd)
+		{
+			//Removing the Inbox->option->Reply screen
+			MMI_DestoryWindow(mms_create_hnd);
+			mms_create_hnd=NULL;
+		}
+		else if(MMSBox_Extract_exec_win)
+		{
+			if(g_MmsExtractEdtWin)
+			{
+				//Removing the Inbox->option->extract->list->rename screen
+				AUI_edit_Destroy(g_MmsExtractEdtWin);
+				g_MmsExtractEdtWin=NULL;
+			}
+			//Removing the Inbox->option->extract->list screen
+			MMI_DestoryWindow(MMSBox_Extract_exec_win);
+			MMSBox_Extract_exec_win=NULL;
+		}
+        }
+	if(g_MmsBoxWin)                      
+	              SEND_EVENT (g_MmsBoxWin, MWM_REDRAW, 0,(void *)folder);    
+}
+
+// xreddymn Mar-25-2005 MMI-SPR-26144
+/*******************************************************************************
+
+ $Function:    	AUI_mms_cancel_status
+
+ $Description:	Used to check if MMS send was cancelled
+ 
+ $Returns:		Returns 1 if user has canceled sending MMS
+
+ $Arguments:	None
+ 
+*******************************************************************************/
+
+UBYTE AUI_mms_cancel_status(void)
+{
+	if(mms_cancel_status)
+	{
+		mms_cancel_status=0;
+		return(1);
+	}
+	else return(0);
+}
+
+/*******************************************************************************
+
+ $Function:    	AUI_mms_cancel_send
+
+ $Description:	This function is called to cancel sending MMS
+                Posts cancel events to MMS and WAP clients
+ 
+ $Returns:		None.
+
+ $Arguments:	None
+ 
+*******************************************************************************/
+
+void AUI_mms_cancel_send(void)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+    cancel_TMsend();
+    ATB_wap_content_cancel(get_urlID());
+}
+
+//May 17 2005  REF:  MMI-SPR-29887  x0012849
+// Called when user cancels the retrieving MMS operation.
+void AUI_mms_cancel_recieve(void)
+{
+    cancel_TMrecieve();
+   //Jun 28 2005  REF:  MMI-SPR-29887  x0012849
+   // Here delete the body file if created any earlier.
+    Delete_Body();
+    ATB_wap_content_cancel(get_urlIDget());
+}
+/*******************************************************************************
+
+ $Function:    	AUI_mms_cancel_cb
+
+ $Description:	Call back function for AUI_mms_dialog
+ 
+ $Returns:		None.
+
+ $Arguments:	
+ 
+*******************************************************************************/
+
+void dialog_info_destroy   (T_MFW_HND  own_window);
+
+void AUI_mms_cancel_cb(T_MFW_HND win, USHORT identifier, USHORT reason)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+	TRACE_FUNCTION("AUI_mms_cancel_cb");
+    data->mms_win=NULL;
+	data->mms_win_type=MMS_TYPE_NONE;
+	progressValue=0;
+	data->mms_cancel=1;
+	mms_cancel_status=1;
+    AUI_mms_cancel_send();
+    AUI_mms_cancel_exit();
+    dspl_Enable(1);
+}
+//May 17 2005  REF:  MMI-SPR-29887  x0012849
+// Call back for canceling Retrieving  MMS
+
+void AUI_mms_recieve_cancel_cb(T_MFW_HND win, USHORT identifier, USHORT reason)
+{
+    T_WAP_DATA *data = AUI_wap_data();
+    TRACE_FUNCTION("   AUI_mms_recieve_cancel_cb");
+   // Jun 23 2005  REF:  MMI-SPR-29887  x0012849
+    is_downloadcancelled = TRUE; 
+    data->mms_win=NULL;
+    data->mms_win_type=MMS_TYPE_NONE;
+    // Jun 23 2005  REF:  MMI-SPR-29887  x0012849
+    AUI_mms_status_notify(MMS_RECEIVE_FAIL); 
+    AUI_mms_cancel_recieve();
+    dspl_Enable(1);
+}
+
+/*******************************************************************************
+
+ $Function:    	AUI_mms_cancel_exit
+
+ $Description:  This function exits the MMS composer when user has canceled
+                sending MMS. Currently this is not used. But will be required
+                when MMI-SPR-26144 is solved 
+ 
+ $Returns:		None.
+
+ $Arguments:	None
+ 
+*******************************************************************************/
+
+void AUI_mms_cancel_exit(void)
+{
+    // xrashmic 30 Nov, 2004 MMI-SPR-26145
+    // Deleting the compose and option window after sending the MMS
+    if(mms_create_opt_hnd)
+    {
+         MMI_DestoryWindow(mms_create_opt_hnd);
+         mms_create_opt_hnd=NULL;
+        if(mms_create_hnd)
+        {
+             MMI_DestoryWindow(mms_create_hnd);
+             mms_create_hnd=NULL;
+        }
+        //xrashmic 14 Dec, 2004 MMI-SPR-23921
+        // Deleting the forward window if it was created.
+        else if(mms_Fwdcreate_hnd)
+        {
+             MMI_DestoryWindow(mms_Fwdcreate_hnd);
+             mms_Fwdcreate_hnd=NULL;
+            //The options window containing "forward" options.
+            if(g_OptionsWin)
+            {
+                MMI_DestoryWindow(g_OptionsWin);
+                g_OptionsWin=NULL;
+            }
+        }
+    }
+     //xrashmic 26144
+}
+
+/*******************************************************************************
+
+ $Function:    	AUI_ems_dialog
+
+ $Description:	To display the indication of new ems in the idle screen
+ 		       xrashmic 26 Aug, 2004 MMI-SPR-23931
+ 
+ $Returns:		None.
+
+ $Arguments:	 
+*******************************************************************************/
+void AUI_ems_dialog()
+{
+  //CRR 25577: 06 oct 2004 - xpradipg
+  //we check if the current window is the MMS Inbox list window and then post
+  //the redraw event which will refresh the list
+  if(mmsboxwinhnd)
+  {
+      SEND_EVENT(mmsboxwinhnd, MWM_REDRAW, 0,(void *)folder);
+  }
+    addNewEMS();
+		return;
+}
+
+/*******************************************************************************
+
+ $Function:    	information_dialog
+
+ $Description:	To display info dialog screens.
+ 		       xrashmic 29 Nov, 2004 MMI-SPR-26161
+ 
+ $Returns:		None.
+
+ $Arguments:	 
+*******************************************************************************/
+T_MFW_HND information_dialog(USHORT TxtId1, USHORT TxtId2,char* Txt1, char* Txt2, USHORT SoftKeyTxtId1, USHORT SoftKeyTxtId2, int timer, T_MFW_EVENT keyEvents, T_VOID_FUNC callback)
+{
+    T_DISPLAY_DATA  display_info;
+    T_MFW_HND       parent_win  = mfwParent(mfw_header());
+    T_MFW_HND       win;
+    TRACE_FUNCTION("information_dialog");
+    dlg_initDisplayData_TextId( &display_info, SoftKeyTxtId1, SoftKeyTxtId2, TxtId1, TxtId2, COLOUR_WAP_POPUP);
+    display_info.TextString=Txt1;
+    display_info.TextString2=Txt2;
+    dlg_initDisplayData_events( &display_info,callback, timer, keyEvents);
+    display_info.Identifier  = 0; 
+    win=info_dialog(parent_win, &display_info);
+    dspl_Enable(0);
+    win_show(win);
+    dspl_Enable(1);
+    return win;
+} 
+
+#else /* #ifdef FF_GPF_TCPIP */
+
+/*******************************************************************************
+
+					CONDAT (UK)
+
+********************************************************************************                                                                              
+
+ This software product is the property of Condat (UK) Ltd and may not be
+ disclosed to any third party without the express permission of the owner.                                 
+                                                                              
+********************************************************************************
+
+ $Project name:                                                   
+ $Project code:	                                                           
+ $Module:		
+ $File:		    AUIWap.c
+ $Revision:		                                                      
+                                                                              
+ $Author:		Condat(UK)                                                         
+ $Date:		                                                          
+                                                                               
+********************************************************************************
+                                                                              
+ Description:
+ 	The user interface for WAP.  Provides the required menus, lists, dialogs and
+ 	utilises the functionality of the ATB appropriately.
+                        
+********************************************************************************
+
+ $History: AUIWap.c
+
+	14/05/2003 - SPR#1983 - SH - Updated to latest from 1.6.3 version.
+	   
+ $End
+
+*******************************************************************************/
+
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+
+#if defined (NEW_FRAME)
+
+#include "typedefs.h"
+#include "vsi.h"
+#include "pei.h"
+#include "custom.h"
+#include "gsm.h"
+
+#else  /* NEW_FRAME */
+
+#include "STDDEFS.H"
+#include "custom.h"
+#include "gsm.h"
+#include "vsi.h"
+
+#endif /* NEW_FRAME */
+
+#include "mfw_sys.h"
+
+#include "mfw_mfw.h"
+#include "mfw_win.h"
+#include "mfw_kbd.h"
+#ifndef NEW_EDITOR
+#include "mfw_edt.h"
+#endif
+#include "mfw_tim.h"
+#include "mfw_phb.h"
+#include "mfw_sms.h"
+#include "mfw_icn.h"
+#include "mfw_mnu.h"
+#include "mfw_lng.h"
+#include "mfw_sat.h"
+#include "mfw_kbd.h"
+#include "mfw_nm.h"
+#include "mfw_cm.h"
+
+#include "dspl.h"
+
+#include "MmiMmi.h"
+#include "MmiMain.h"
+#include "MmiDummy.h"
+#include "MmiDialogs.h"
+#include "MmiLists.h"
+#include "mmiCall.h"
+
+#include "MmiMenu.h"
+#include "MmiSoftKeys.h"
+#include "MmiResources.h"
+
+#include "MmiBlkLangDB.h"
+#include "MmiBookUtils.h"
+#ifdef NEW_EDITOR
+#include "ATBCommon.h"
+#include "ATBDisplay.h"
+#include "ATBEditor.h"
+#include "AUIEditor.h"
+#else
+#include "MmiEditor.h"
+#endif
+#include "MmiBookShared.h"
+#include "ATBData.h"
+#include "wap_types.h"
+#include "ATBWapAUI.h"
+#include "ATBWapACI.h"
+#include "mmiSmsMenu.h"
+#include "mmismssend.h"
+#include "AUIWap.h"
+#include "AUIWapext.h"
+#ifdef MMI_GPRS_ENABLED
+#include "MmiGprs.h"
+#endif
+
+#include "cus_aci.h"
+#include "p_sim.h"
+#ifndef PCM_2_FFS
+#include "pcm.h"
+#endif
+
+#include "mmiColours.h"
+#include "font_bitmaps.h"
+
+/* Define this to trace memory allocations & freeings */
+#undef TRACE_MEMALLOC
+
+
+/* List menu attributes
+ *
+ * Needed for creating the menu.
+ */
+ 
+static MfwMnuAttr list_menuAttrib =
+{
+    &menuArea,
+    MNU_LEFT | MNU_LIST | MNU_CUR_LINE,
+    -1,
+    NULL,
+    0,
+	COLOUR_LIST_XX, TxtNull, MNUATTRSPARE
+};
+
+/*
+	Local Handler: the WAP window (At the moment only one instance possible in BMI)
+*/
+
+MfwHnd wap_main_window = 0;
+static BOOL wap_callActive = FALSE;
+
+/* Set up variables and functions for tracing purposes */
+
+#ifdef TRACE_MEMALLOC
+U16 memUsed = 0;
+UBYTE memTracker[110] = {0};
+#endif
+
+int check_memory(void)
+{
+	TRACE_EVENT_P1("Memory left: %d", mfwCheckMemoryLeft());
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_menu
+
+ $Description:	The main WAP menu
+ 
+ $Returns:		MFW_EVENT_CONSUMED
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_menu(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_MFW_HND	win;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_menu");
+#endif
+	
+	win = AUI_create(mfwParent( mfw_header()));
+
+	if (!win)
+	{
+		TRACE_EVENT("ERROR - Wap Already Open");
+	}
+	
+	check_memory();
+
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_please_wait
+
+ $Description:	Creates a "Please Wait" message that will hang around until WAP has
+ 				been started
+
+ $Returns:		Window handle of the created window
+
+ $Arguments:	parent_win - the parent window
+ 
+*******************************************************************************/
+
+T_MFW_HND AUI_please_wait(T_MFW_HND parent_win)
+{
+	T_DISPLAY_DATA display_info;
+
+	TRACE_FUNCTION("AUI_please_wait()");
+
+	dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtPleaseWait, TxtNull, COLOUR_STATUS);
+	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)AUI_please_wait_cb, 10000, 0 );
+	
+	return info_dialog(parent_win,&display_info);
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_please_wait_cb
+
+ $Description:	Timeout callback for the please wait window
+
+ $Returns:		None.
+
+ $Arguments:	win - the parent window
+ 
+*******************************************************************************/
+
+void AUI_please_wait_cb(T_MFW_HND win, USHORT identifier, SHORT reason)
+{
+	T_WAP_DATA *data		= AUI_wap_data();		
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_please_wait_cb()");
+#endif
+
+ 	if (!data)
+  	{
+  		return;
+  	}
+  	
+	switch(reason)
+	{
+		case INFO_TIMEOUT:
+			SEND_EVENT(win, DIALOG_DESTROY, NULL, NULL);
+			AUI_destroy(data->win, ALL_WIN);
+			AUI_info_dialog(NULL, TxtTimedOut, TxtNull);
+			break;
+	}
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_start_done
+
+ $Description:	WAP has started - can create new view
+ 
+ $Returns:		None.
+
+ $Arguments:	None.
+ 
+*******************************************************************************/
+
+void AUI_wap_start_done(void)
+{
+	T_WAP_DATA *data			= AUI_wap_data();	
+	T_MMI_WAP_NEW_VIEW_IND		wap_view;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_wap_start_done");
+#endif
+	
+	if (!data)
+	{
+		return;
+	}
+
+	/* Start view */
+	
+	wap_view.object_id 		= 1;
+	wap_view.uaMode			= 1;								/* Specifies WML user agent */
+	wap_view.view_width		= WAP_SCREEN_WIDTH;					/* Width of screen for browser */
+	wap_view.view_height	= WAP_SCREEN_HEIGHT;				/* Height of screen for browser */
+	wap_view.font_height	= WAP_CHAR_HEIGHT;					/* Height of latin font */
+	wap_view.unicode_height	= WAP_CHAR_HEIGHT;					/* Height of unicode font */
+	wap_view.unicode_width	= WAP_CHAR_WIDTH;					/* Width of characters in unicode font */
+	
+	/* Get height and widths of all latin characters in current font */
+
+	wap_view.font_width_length = 256;
+	wap_view.font_width = (UBYTE *)AUI_wap_memory_alloc(256*sizeof(UBYTE));
+	font_getAllAsciiWidths(wap_view.font_width);
+
+	/* Create the view */
+	
+	data->View = ATB_wap_new_view(&wap_view, (void *)data);
+
+	AUI_wap_memory_free(wap_view.font_width, 256*sizeof(UBYTE));
+
+	/* We're not connected as yet */
+	
+	data->connected = FALSE;
+	
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_new_view_done
+
+ $Description:	View has started - can create menu
+ 
+ $Returns:		None
+
+ $Arguments:	None.
+ 
+*******************************************************************************/
+
+void AUI_wap_new_view_done(void)
+{
+	T_WAP_DATA *data		= AUI_wap_data();	
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_wap_new_view_done");
+#endif
+	
+	if (!data)
+	{
+		return;
+	}
+
+	/* Initialise window */
+	
+	SEND_EVENT(data->win,WAP_INIT,0,0);
+
+	/* Destroy temp_win, if it exists */
+	
+	if (data->temp_win)
+	{
+		SEND_EVENT(data->temp_win, DIALOG_DESTROY, NULL, NULL);
+		data->temp_win = NULL;
+	}
+
+	/* Create WAP main menu */
+	
+	data->menu_win = bookMenuStart(data->win, WAPMenuAttributes(), 0);
+	SEND_EVENT(data->menu_win, ADD_CALLBACK, NULL, (void *)AUI_menu_cb);
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_menu_cb
+
+ $Description:	Callback function for the WAP menu
+ 
+ $Returns:		None.
+
+ $Arguments:	parent_win 	- the WAP data window
+ 				identifier 	- unused
+ 				reason		- unused
+ 
+*******************************************************************************/
+
+static void AUI_menu_cb(T_MFW_HND parent_win, UBYTE identifier, UBYTE reason)
+{
+	T_WAP_DATA *data		= AUI_wap_data();	
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_menu_cb");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+
+	/* SPR#2413 - SH - If still disconnecting, don't allow WAP application to be
+	 * destroyed. */
+	 
+	if (data->View != NULL)
+	{
+		if (ATB_wap_status_get(data->View, ATB_WAP_DEACTIVATING))
+		{
+			/* Recreate menu */
+
+			data->menu_win = bookMenuStart(data->win, WAPMenuAttributes(), 0);
+			SEND_EVENT(data->menu_win, ADD_CALLBACK, NULL, (void *)AUI_menu_cb);
+			return;
+		}
+	}
+	
+	AUI_destroy(data->win, WAP_WIN);
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_homepage
+
+ $Description:	Enter WAP browser with URL=homepage URL
+ 
+ $Returns:		MFW_EVENT_CONSUMED
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_homepage(MfwMnu* menu, MfwMnuItem* item)
+{	
+	T_WAP_DATA *data		= AUI_wap_data();
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_homepage");
+#endif
+
+	if (!data)
+	{
+		return NULL;
+	}
+
+	/* Connect & attempt to download homepage */
+	
+	AUI_connect_URL(data->win, data->View->Profile->Homepage);
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_create
+
+ $Description:	Creates a window (never shown) to which is attached all the data that
+ 				is used in WAP.  This is distinct from the WAP card browser window,
+ 				which is created dynamically.
+ 
+ $Returns:		Pointer to the new window
+
+ $Arguments:	parent win	- pointer to the parent window of the data window
+ 
+*******************************************************************************/
+
+T_MFW_HND AUI_create (T_MFW_HND parent_win)
+{
+	T_MFW_WIN  				*win_data;
+	T_WAP_DATA				*data;
+	T_MMI_WAP_START_IND		wap_start;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_create");
+#endif
+
+	/* Check if one instance of WAP already activated */
+	
+	if (wap_main_window)
+	{
+		TRACE_EVENT("*** WAP window already open ***");
+		return NULL;
+	}
+
+	data = (T_WAP_DATA *)AUI_wap_memory_alloc (sizeof (T_WAP_DATA));
+	
+	/* Create the WAP data window */
+	
+	data->update_forbid	= FALSE;
+	
+	data->win = win_create (parent_win, 0, E_WIN_VISIBLE, (T_MFW_CB)AUI_cb);
+	if (data->win==NULL)
+	{
+		TRACE_EVENT("*** Failed to create main WAP window ***");
+    	AUI_wap_memory_free((UBYTE *)data, sizeof (T_WAP_DATA));
+		return NULL;
+	}
+	
+	/* Create window handler */
+	
+	wap_main_window				= data->win;
+	data->main_kbd				= kbd_create (data->win, KEY_ALL, (T_MFW_CB)AUI_main_kbd_cb);
+	
+	data->mmi_control.dialog	= (T_DIALOG_FUNC)AUI_control;
+	data->mmi_control.data		= (void *)data;
+	data->parent_win			= parent_win;
+	win_data					= ((T_MFW_HDR *)data->win)->data;
+	win_data->user				= (void *)data;		/* Attach data to window */
+
+	/* Reset various window pointers */
+	
+	data->edit_win		= NULL;
+	data->options_win	= NULL;
+	data->sub_options_win = NULL; /* SPR#2324 */
+	data->sub_sub_options_win = NULL; /* SPR#2324 */
+	data->list_win		= NULL;
+	data->menu_win		= NULL;
+	data->browser_win	= NULL;
+	data->list_data		= NULL;
+	data->connect_win	= NULL;
+	data->error_win		= NULL;
+	data->call_waiting	= FALSE;
+		
+	/*	Allocate memory for some strings. */
+	
+	data->Buffer		= (char *)AUI_wap_memory_alloc ((INPUT_MAX_LEN+1)*sizeof(USHORT));	/* Input buffer 1 */
+	data->Buffer2		= (char *)AUI_wap_memory_alloc ((INPUT_MAX_LEN+1)*sizeof(USHORT));	/* Input buffer 2 */
+	data->Message.text	= NULL;
+	data->Message.length = 0;
+	data->LeftSoftKey	= (USHORT *)AUI_wap_memory_alloc ((SOFTKEY_MAX_LEN+2)*sizeof(USHORT));	/* Left softkey text */
+	data->RightSoftKey	= (USHORT *)AUI_wap_memory_alloc ((SOFTKEY_MAX_LEN+2)*sizeof(USHORT));	/* Right softkey text */
+
+	/* Create list for options menu */
+	
+	data->OptionsList	= ATB_wap_entry_list_create(WAP_OPTIONS_LIST, MAX_OPTIONS+1, OPTIONS_MAX_LEN, TRUE);
+
+	/* Generate "Please wait" window while WAP starts up */
+
+	data->temp_win = AUI_please_wait(data->win);
+	data->View = NULL;			/* View has not yet been created */
+
+	/* SPR#2346 - SH - Set up GPRS notification callback */
+
+#ifdef MMI_GPRS_ENABLED
+	GPRS_SetCallback(data->win, (T_GPRS_CB)AUI_wap_gprs_status);
+#endif /* MMI_GPRS_ENABLED */
+
+	/* Start the WAP Browser */
+
+	ATB_wap_start(&wap_start);
+	return data->win;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_data
+
+ $Description:	Returns the WAP data pointer
+ 
+ $Returns:		Pointer to WAP data
+
+ $Arguments:	None
+ 
+*******************************************************************************/
+
+T_WAP_DATA *AUI_wap_data (void)
+{
+	T_MFW_WIN *win_data;
+	T_WAP_DATA *data;
+
+	if (wap_main_window==NULL)
+	{
+		TRACE_EVENT("** WAP not active **");
+		return NULL;
+	}
+
+	win_data	= ((T_MFW_HDR *)wap_main_window)->data;
+	data		= (T_WAP_DATA *)win_data->user;	
+
+	return data;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_destroy
+
+ $Description:	Destroys the specified WAP windows and their data
+ 
+ $Returns:		void
+
+ $Arguments:	win			- pointer to the browser window
+ 				windows		- determines which windows will be destroyed.
+ 				(e.g. LIST_WIN | EDIT_WIN | OPTIONS_WIN | WAP_WIN)
+ 
+*******************************************************************************/
+
+void AUI_destroy (T_MFW_HND win, USHORT windows)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+	USHORT entryIndex;
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_destroy");
+#endif
+    
+	if (data==NULL)
+	{
+		TRACE_EVENT("*** Could not destroy data ***");
+		return;
+	}
+	
+	/* If we are closing the browser or exiting WAP, disconnect the call */
+
+	if ((windows & WAP_WIN) || (windows==RETURN_TO_MENU))
+	{
+		if (data->View)
+		{
+			AUI_wap_end_call(data->View->cId);
+		}
+		else
+		{
+			AUI_wap_end_call(0);
+		}
+	}
+		
+	/* Check to see if WAP Browser Window should be destroyed */
+	
+	if ((windows & BROWSER_WIN) && (data->browser_win != NULL))
+	{
+#ifdef TRACE_AUIWAP
+		TRACE_FUNCTION("AUI_destroy browser");
+#endif
+
+		/* Destroy the browser window */
+		
+		AUI_win_destroy(data->browser_win);
+		data->browser_win = NULL;
+		 
+		/* Write history list to FFS */
+		
+		ATB_wap_profile_save(data->View);
+	}
+
+	/* Check to see if Connection Dialog should be destroyed */
+    	
+	if ((windows & CONNECT_WIN) && (data->connect_win != NULL))
+	{
+		SEND_EVENT(data->connect_win,DIALOG_DESTROY,0,0);
+		data->connect_win = NULL;
+	}
+
+	/* Check to see if WAP Main Menu should be destroyed */
+		
+	if ((windows & MENU_WIN) && (data->menu_win != NULL))
+	{
+#ifdef TRACE_AUIWAP
+		TRACE_FUNCTION("AUI_destroy menu");
+#endif
+		bookMenuDestroy(data->menu_win);
+		data->menu_win = NULL;
+	}
+
+	/* Check to see if Options Menu should be destroyed */
+	
+	if ((windows & OPTIONSMENU_WIN) && (data->optionsmenu_win != NULL))
+	{
+#ifdef TRACE_AUIWAP
+		TRACE_FUNCTION("AUI_destroy optionsmenu");
+#endif
+		/* WAP page can now update */
+
+		data->update_forbid = FALSE;
+		
+		/* Remove all options list entries */
+		
+		for (entryIndex=0; entryIndex<(data->OptionsList->no_of_entries); entryIndex++)
+		{
+			if (data->OptionsList->Entry[entryIndex]!=NULL)
+			{
+				AUI_wap_memory_free((UBYTE *)data->OptionsList->Entry[entryIndex], (SOFTKEY_MAX_LEN+1)*sizeof(USHORT));
+				data->OptionsList->Entry[entryIndex] = NULL;
+			}
+		}
+
+		/* Destroy the list itself */
+		
+		if (data->optionsmenu_data)
+		{
+			AUI_wap_memory_free((UBYTE *)data->optionsmenu_data->List, (data->optionsmenu_data->ListLength)*sizeof(T_MFW_MNU_ITEM)); 
+			AUI_wap_memory_free((UBYTE *)data->optionsmenu_data, sizeof(ListMenuData));
+			data->optionsmenu_data = NULL;
+		}
+		
+		listsDestroy(data->optionsmenu_win);
+		data->optionsmenu_win = NULL;
+	}
+
+	/* Check to see if List Window should be destroyed */
+	
+	if ((windows & LIST_WIN) && (data->list_win != NULL))
+	{
+#ifdef TRACE_AUIWAP
+		TRACE_FUNCTION("AUI_destroy list");
+#endif
+		if (data->list_data)
+	{
+			AUI_wap_memory_free((UBYTE *)data->list_data->List, (data->list_data->ListLength)*sizeof(T_MFW_MNU_ITEM));
+			AUI_wap_memory_free((UBYTE *)data->list_data, sizeof(ListMenuData));
+			data->list_data = NULL;
+		}
+		listsDestroy(data->list_win);
+		data->list_win = NULL;
+	}
+
+	/* Check to see if Options Window should be destroyed */
+		
+	if ((windows & OPTIONS_WIN) && (data->options_win != NULL))
+	{
+#ifdef TRACE_AUIWAP
+		TRACE_EVENT("AUI_destroy options");
+#endif
+		bookMenuDestroy(data->options_win);
+		data->options_win = NULL;
+	}
+
+	/* Check to see if Editor should be destroyed */
+		
+	if ((windows & EDIT_WIN) && (data->edit_win != NULL))
+	{
+#ifdef TRACE_AUIWAP
+		TRACE_EVENT("AUI_destroy editor");
+#endif
+
+#ifdef NEW_EDITOR
+		AUI_edit_Destroy(data->edit_win);
+#else
+		editor_destroy(data->edit_win);
+#endif /* NEW_EDITOR */
+		data->edit_win = NULL;
+	}
+
+	/* Check to see if WAP Application should be destroyed */
+		
+	if (windows & WAP_WIN)
+	{
+#ifdef TRACE_AUIWAP
+		TRACE_EVENT("AUI_destroy WAP");
+#endif
+		/* Turn off GPRS notificaton */
+#ifdef MMI_GPRS_ENABLED
+		GPRS_SetCallback(NULL, NULL);
+#endif /* MMI_GPRS_ENABLED */
+
+		/* Destroy the error dialog if it exists */
+
+		if (data->error_win)
+		{
+			SEND_EVENT(data->error_win, DIALOG_DESTROY, 0, 0);
+			data->error_win = NULL;
+		}
+		
+		/* Display "Please wait" dialog; WAP destroy will complete on callback */
+
+		if (!data->temp_win)
+		{
+			data->temp_win = AUI_please_wait(data->win);
+		}
+		
+		/* If there's a view around, prepare the cache to shut down */
+
+		if (data->View)
+		{
+			/* Set status to shutting down */
+			ATB_wap_status_change(data->View, ATB_WAP_SHUTTING_DOWN);
+			ATB_wap_cache_prepare();
+		}
+		else /* No view exists, destroy WAP straight away */
+		{
+			ATB_wap_destroy();
+		}
+	}
+
+	/* If all windows have been destroyed except main window,
+	 * recreate menu */
+	 
+	if (windows==RETURN_TO_MENU)
+	{
+		AUI_wap_new_view_done();
+	}
+	
+#ifdef TRACE_AUIWAP
+	TRACE_EVENT("AUI_destroy end");
+#endif
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_cache_prepare_done
+
+ $Description:	Cache is prepared for WAP_TERMINATE
+ 				
+ $Returns:		void
+
+ $Arguments:	None
+ 
+*******************************************************************************/
+
+void AUI_wap_cache_prepare_done(void)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+
+	TRACE_FUNCTION("AUI_wap_cache_prepare_done()");
+
+	if (!data)
+	{
+		return;
+	}
+	
+	/* If we're shutting down, continue the process */
+
+	if (ATB_wap_status_get(data->View, ATB_WAP_SHUTTING_DOWN))
+	{
+		TRACE_EVENT("We are shutting down");
+		ATB_wap_destroy();
+	}
+	else
+	{
+		/* Otherwise, the cache is being resized */
+		TRACE_EVENT("*** CACHE RESIZE ***");
+	}
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_close_view_done
+
+ $Description:	Called when a view has been closed
+ 				
+ $Returns:		void
+
+ $Arguments:	None
+ 
+*******************************************************************************/
+
+void AUI_wap_close_view_done(void)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_wap_close_view_done");
+#endif
+
+	ATB_wap_destroy();
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_terminate_done
+
+ $Description:	Called when a WAP termination is complete
+ 				
+ $Returns:		void
+
+ $Arguments:	None
+ 
+*******************************************************************************/
+
+void AUI_wap_terminate_done(void)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_wap_terminate_done()");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+
+	if (data!=NULL)
+	{
+		if (data->temp_win)
+		{
+			SEND_EVENT(data->temp_win, DIALOG_DESTROY, NULL, NULL);
+			data->temp_win = NULL;
+		}
+
+		/* Free memory for some message strings */
+		
+		AUI_wap_memory_free ((UBYTE *)data->Buffer, (INPUT_MAX_LEN+1)*sizeof(USHORT));	/* Delete input buffer 1 */
+		AUI_wap_memory_free ((UBYTE *)data->Buffer2, (INPUT_MAX_LEN+1)*sizeof(USHORT));	/* Delete input buffer 2 */
+		AUI_wap_string_free(&data->Message);		/* Delete output buffer */
+		AUI_wap_memory_free ((UBYTE *)data->LeftSoftKey, (SOFTKEY_MAX_LEN+2)*sizeof(USHORT));  /* Delete left softkey text */
+		AUI_wap_memory_free ((UBYTE *)data->RightSoftKey, (SOFTKEY_MAX_LEN+2)*sizeof(USHORT)); /* Delete right softkey text */
+
+		/* Destroy options menu list */
+		
+		ATB_wap_entry_list_destroy(data->OptionsList);
+
+		/* Destroy the WAP data window */
+
+		win_delete(data->win);
+        wap_main_window = 0;
+		AUI_wap_memory_free ((UBYTE *)data, sizeof (T_WAP_DATA));
+	}
+
+#ifdef TRACE_MEMALLOC
+{
+UBYTE	trackIndex;
+	for (trackIndex = 0; trackIndex<110; trackIndex++)
+	{
+		TRACE_EVENT_P2("TRACKINDEX %d is %d", trackIndex, memTracker[trackIndex]);
+	}
+}
+#endif
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_cb
+
+ $Description:	Callback function for WAP data window.  This window displays "not
+ 				connected", since its appearance means a connection failure has
+ 				occurred.  Apart from this, all information to be displayed should be
+ 				in the other WAP windows (browser window, options window etc).
+ 
+ $Returns:		void
+
+ $Arguments:	event		- window handle event
+ 				win			- WAP browser window
+ 				
+*******************************************************************************/
+
+static int AUI_cb (T_MFW_EVENT event, T_MFW_WIN * win)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_cb");
+#endif
+
+    switch (event)
+	{
+		case E_WIN_VISIBLE:
+		   	if (win->flags & E_WIN_VISIBLE)
+			{
+		    	dspl_ClearAll();
+				/* If this screen is displayed, the connection has been
+				 * terminated, so display 'Not Connected' */
+		    	PROMPT(4,12,0, TxtNotConnected);
+				displaySoftKeys(TxtReload,TxtExit);
+   			}
+		break;
+	}
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_main_kbd_cb
+
+ $Description:	Cope with a keypress from the "Not Connected" screen.
+ 
+ $Returns:		MFW_EVENT_CONSUMED
+
+ $Arguments:	event, keyboard - standard keyboard callback arguments
+ 				
+*******************************************************************************/
+
+static int AUI_main_kbd_cb(T_MFW_EVENT event, T_MFW_KBD *keyboard)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_main_kbd_cb()");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+
+	switch (keyboard->code)
+	{
+		case KCD_HUP:															
+		case KCD_RIGHT:															
+			AUI_destroy(data->win, RETURN_TO_MENU);
+      		break;
+
+      	case KCD_LEFT:
+      		AUI_connect_URL(data->win, data->View->URL);
+      		break;
+      		
+		default:
+			break;
+	}
+	
+	return MFW_EVENT_CONSUMED;
+}
+
+
+		    	
+/*******************************************************************************
+
+ $Function:    	AUI_control
+
+ $Description:	Dialog function for WAP data window.  Since this window only
+ 				displays the "not connected" message, currently this function can
+ 				only show the window.
+ 
+ $Returns:		void
+
+ $Arguments:	win			- WAP data window
+ 				event		- Window handle event
+ 				value		- not used
+ 				parameter	- not used
+
+*******************************************************************************/
+
+void AUI_control (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_control");
+#endif
+
+	switch (event)
+	{
+		case WAP_INIT:
+			win_show(win);
+			break;
+	}
+	
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_connecting_dialog
+
+ $Description:	Show "Connecting..." dialog (displayed while sending configuration
+ 				information to WAP gateway)
+ 
+ $Returns:		Window handler
+
+ $Arguments:	win		- pointer to the WAP data window
+ 
+*******************************************************************************/
+
+T_MFW_HND AUI_connecting_dialog (T_MFW_HND win, ULONG status)
+{
+	T_WAP_DATA *data	= AUI_wap_data();
+	T_DISPLAY_DATA		display_info;
+	int					timer;
+	T_MFW_EVENT			keyEvents;
+	
+#ifdef TRACE_AUIWAP		
+	TRACE_FUNCTION("AUI_connecting_dialog");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	/* Standard values for events */
+	
+	timer = FOREVER;
+	keyEvents = KEY_CLEAR | KEY_RIGHT;
+
+	/* Decide on message to display depending on status */
+
+	switch(status)
+	{
+		case ATB_WAP_ATTACHING:
+			dlg_initDisplayData_TextId( &display_info, TxtNull, TxtCancel, TxtAttaching, TxtGPRS, COLOUR_WAP_POPUP);
+			AUI_wap_string_alloc(&data->Message, PROFILENAME_MAX_LEN+1); /* +1 space for 0x80 */
+			data->Message.text[0] = 0x7F80;
+			ATB_uc_text_copy(&data->Message.text[1], data->View->Profile->Title, PROFILENAME_MAX_LEN);
+			display_info.TextString2 = (char *)data->Message.text;
+			break;
+
+		case ATB_WAP_LOGGING_IN:
+			dlg_initDisplayData_TextId( &display_info, TxtNull, TxtCancel, TxtConnecting, TxtNull, COLOUR_WAP_POPUP);
+			AUI_wap_string_alloc(&data->Message, PROFILENAME_MAX_LEN+1); /* +1 space for 0x80 */
+			data->Message.text[0] = 0x7F80;
+			ATB_uc_text_copy(&data->Message.text[1], data->View->Profile->Title, PROFILENAME_MAX_LEN);
+			display_info.TextString2 = (char *)data->Message.text;
+			break;
+
+		case ATB_WAP_CONNECTING:
+			dlg_initDisplayData_TextId( &display_info, TxtNull, TxtCancel, TxtLoggingIn, TxtNull, COLOUR_WAP_POPUP);
+			AUI_wap_string_alloc(&data->Message, PROFILENAME_MAX_LEN+1); /* +1 space for 0x80 */
+			data->Message.text[0] = 0x7F80;
+			ATB_uc_text_copy(&data->Message.text[1], data->View->Profile->Title, PROFILENAME_MAX_LEN);
+			display_info.TextString2 = (char *)data->Message.text;
+			break;
+
+		case ATB_WAP_CARD_READING:
+			dlg_initDisplayData_TextId( &display_info, TxtNull, TxtCancel, TxtDownloading, TxtNull, COLOUR_WAP_POPUP);
+			AUI_wap_string_alloc(&data->Message, CARD_TITLE_MAX_LEN+1);	/* +1 space for 0x80 */
+			data->Message.text[0] = 0x7F80;
+			ATB_uc_text_copy(&data->Message.text[1], data->View->Title, CARD_TITLE_MAX_LEN);
+			/* Show name of card being read */
+			display_info.TextString2 = (char *)data->Message.text;
+			break;
+
+		case ATB_WAP_DEACTIVATING:
+			/* Waiting for context to deactivate, dialog with no cancel button */
+			dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtPleaseWait, TxtNull, COLOUR_WAP_POPUP);
+			timer = TEN_SECS;
+			keyEvents = 0;
+			break;
+
+		case ATB_WAP_PLEASE_WAIT:
+		default:
+			dlg_initDisplayData_TextId(&display_info, TxtNull, TxtCancel, TxtPleaseWait, TxtNull, COLOUR_WAP_POPUP);
+			break;
+	}
+	
+	/* Destroy any previous dialog */
+		
+	AUI_destroy(data->win, CONNECT_WIN);
+	
+	/* Create new dialog */
+	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)AUI_connecting_dialog_cb, timer, keyEvents );
+	
+	return info_dialog(data->win, &display_info);
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_connecting_dialog_cb
+
+ $Description:	Callback function for connecting dialog
+ 
+ $Returns:		void
+
+ $Arguments:	win			- pointer to the WAP data window
+ 				identifier	- identifies function that has called callback
+ 				reason		- reason for callback
+ 
+*******************************************************************************/
+
+void AUI_connecting_dialog_cb (T_MFW_HND win, UBYTE identifier, UBYTE reason)
+{
+   T_WAP_DATA *data		= AUI_wap_data();
+   
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_connecting_dialog_cb");
+#endif
+
+	/* Dialog has been destroyed, set handle to NULL */
+	
+	data->connect_win = NULL;
+
+	/* Free memory allocated for status message */
+	
+	AUI_wap_string_free(&data->Message);
+				
+	switch(reason)
+		{
+		case INFO_KCD_HUP:
+		case INFO_KCD_RIGHT:
+			/* If browser is active, completely exit WAP.
+			 * Otherwise, just return to last menu. */
+			 
+			if (data->browser_win)
+			{
+				AUI_destroy(data->win, RETURN_TO_MENU);
+			}
+			else
+			{
+				/* Cancel any pending operation */
+				ATB_wap_stop_download(data->View);
+				/* End the call. */
+				AUI_wap_end_call(data->View->cId);	
+				/* Indicate we're no longer connected */
+				if (!ATB_wap_status_get(data->View, ATB_WAP_DEACTIVATING))
+				{
+					ATB_wap_status_change(data->View, ATB_WAP_ONLINE_CONNECTION_CLOSED);
+				}
+			}
+		break;
+
+		default:
+		break;
+		}
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_connect_URL
+
+ $Description:	Connects to WAP gateway (if required) and starts to download URL
+ 
+ $Returns:		None.
+
+ $Arguments:	win		- pointer to the WAP data window
+ 				URL		- URL to connect to
+ 
+*******************************************************************************/
+
+void AUI_connect_URL (T_MFW_HND win, char *URL)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+	T_WAP_VIEW *View;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_connect_URL");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+
+	View = data->View;
+	
+	/* If the browser is already visible, we can destroy the other windows */
+	
+	if (data->browser_win)
+	{
+		AUI_destroy(data->win, LIST_WIN | MENU_WIN | OPTIONSMENU_WIN | EDIT_WIN | OPTIONS_WIN);
+	}
+	
+	 /* Display "Please Wait" to cover delay until call dialog is displayed.
+	  * Only display "Please Wait" if browser window is not open. */
+	   
+	if (!data->browser_win || !data->connected)
+	{
+		ATB_wap_status_change(data->View, ATB_WAP_PLEASE_WAIT);
+	}
+
+	/* If we're not connected, send configuration data to WAP Browser */
+	
+	if (!data->connected)
+	{
+		ATB_wap_profile_send(View);
+	}
+
+	/* This is now the current URL */
+	
+	strcpy(View->URL, URL);
+
+	/* Send event requesting URL download */
+
+	ATB_wap_download_url(View, URL, TRUE);
+
+	/* Destroy some windows for now; we want to return to the list win
+	 * if the connection is cancelled */
+	 
+	AUI_destroy(data->win, OPTIONS_WIN | EDIT_WIN);
+	
+	return;
+}
+
+	
+/*******************************************************************************
+
+ $Function:    	AUI_win_create
+
+ $Description:	Create the WAP card browser window
+ 
+ $Returns:		void
+
+ $Arguments:	parent_win			- Pointer to the WAP data window
+
+*******************************************************************************/
+
+T_MFW_HND AUI_win_create (T_MFW_HND parent_win)
+{
+	T_MFW_WIN			*win_data;
+	T_WAP_BROWSER		*data = (T_WAP_BROWSER *)AUI_wap_memory_alloc(sizeof(T_WAP_BROWSER));
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_win_create");
+#endif
+
+	/* Create the browser window */
+
+	data->win = win_create(parent_win,0,E_WIN_VISIBLE, (T_MFW_CB)AUI_win_cb);
+
+	/* Create keyboard handler */
+	
+	data->kbd		= kbd_create (data->win, KEY_ALL, (T_MFW_CB)AUI_kbd_cb);
+	data->kbd_long	= kbd_create (data->win, KEY_ALL|KEY_LONG, (T_MFW_CB)AUI_kbd_long_cb);
+
+	/* Create window handler */
+	
+	data->mmi_control.dialog	= (T_DIALOG_FUNC)AUI_win_control;
+	data->mmi_control.data		= (void *)data;
+	data->parent_win			= parent_win;
+	win_data					= ((T_MFW_HDR *)data->win)->data;
+	win_data->user				= (void *)data;	/* Attach browser data to window */
+
+	return data->win;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_win_destroy
+
+ $Description:	Destroy the WAP card browser window
+ 
+ $Returns:		void
+
+ $Arguments:	win				- Pointer to the WAP browser window
+
+*******************************************************************************/
+
+int AUI_win_destroy (T_MFW_HND win)
+{
+	T_MFW_WIN			*win_data 	= ((T_MFW_HDR *)win)->data;
+	T_WAP_BROWSER		*data		= (T_WAP_BROWSER *)win_data->user;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_win_destroy");
+#endif
+
+	/* Delete keyboard handlers */
+	
+	kbd_delete(data->kbd);
+	kbd_delete(data->kbd_long);
+
+	/* Delete window */
+	
+	win_delete(win);
+	AUI_wap_memory_free((UBYTE *)data, sizeof(T_WAP_BROWSER));
+
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_win_control
+
+ $Description:	Dialog function for WAP Browser window
+ 
+ $Returns:		None.
+
+ $Arguments:	win			- WAP card browser window
+ 				event		- Window handle event
+ 				value		- not used
+ 				parameter	- not used
+
+*******************************************************************************/
+
+void AUI_win_control (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
+{
+	T_MFW_WIN		*win_data	= ((T_MFW_HDR *)win)->data;
+	T_WAP_BROWSER	*data		= (T_WAP_BROWSER *)win_data->user;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_win_control");
+#endif
+
+	switch (event)
+	{
+		case WAP_INIT:
+			break;
+		
+		case WAP_SHOW_CARD:
+			win_show(win);
+		break;
+	}
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_win_cb
+
+ $Description:	Callback function for browser window
+ 
+ $Returns:		None.
+
+ $Arguments:	event		- window handle event
+ 				win			- WAP browser window
+ 				
+*******************************************************************************/
+
+static int AUI_win_cb (T_MFW_EVENT event, T_MFW_WIN * win)
+{
+	T_WAP_DATA 		*data = AUI_wap_data();
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_win_cb");
+#endif
+
+   	if (!data)
+	{
+		return NULL;
+	}
+	
+    if (data->update_forbid)
+    {
+    	return NULL;
+	}
+	
+    switch (event)
+		{
+		case E_WIN_VISIBLE:
+	    	if (win->flags & E_WIN_VISIBLE)
+			{
+				/* Clear the browser area */
+				
+		     	resources_setColour( COLOUR_WAP );
+		    	dspl_ClearAll();
+		    	
+		    	/* Display the buffered page */
+
+		    	ATB_wap_buffer_display(data->View);
+
+		    	/* Display softkeys */
+		    	
+		     	resources_setSKColour( COLOUR_WAP );
+
+				/* Display "Cancel" when downloading or reading in a card */
+		    	if (ATB_wap_status_get(data->View, ATB_WAP_DOWNLOADING)
+		    		|| ATB_wap_status_get(data->View, ATB_WAP_CARD_READING))
+	    		{
+		    		displaySoftKeys(TxtNull, TxtCancel);
+	    		}
+		    	else
+	    		{
+		    		if (data->View->CustSoftKeys)
+		    		{
+		    			displayCustSoftKeys((char *)data->LeftSoftKey, (char *)data->RightSoftKey);
+		    		}
+					else
+					{
+						if (data->View->CanGoBack)
+							displaySoftKeys(TxtSoftOptions, TxtSoftBack);  /* Show "options" and "back" */
+						else
+							displaySoftKeys(TxtSoftOptions, TxtNull);  /* Only show "options" if we can't go back */
+					}
+				}
+    		}
+			break;
+
+		default:
+	    	return 0;
+	}
+    return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_kbd_cb
+
+ $Description:	Keyboard event handler for browser window
+
+ $Returns:		status int
+
+ $Arguments:	event			- window handle event
+ 				keyboard		- keyboard control block
+
+*******************************************************************************/
+
+static int AUI_kbd_cb (T_MFW_EVENT event, T_MFW_KBD *keyboard)
+{	
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	T_WAP_VIEW		*View;
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_kbd_cb");
+#endif
+
+	if (!data)
+	{
+		return NULL;
+	}
+
+	View = data->View;
+
+	switch (keyboard->code)
+	{
+		case KCD_LEFT:
+			/* Open options menu if not downloading or reading a card */
+			if (!ATB_wap_status_get(View, ATB_WAP_DOWNLOADING)
+				&& !ATB_wap_status_get(View, ATB_WAP_CARD_READING))
+			{
+				AUI_wap_options_menu_open(ATB_wap_buffer_identify_element(View));
+			}
+      		break;
+
+		case KCD_RIGHT:	
+			/* Open options menu if not downloading or reading a card */
+			if (ATB_wap_status_get(View, ATB_WAP_DOWNLOADING)
+				|| ATB_wap_status_get(View, ATB_WAP_CARD_READING))
+			{
+				ATB_wap_stop_download(View);
+			}
+			else
+			{
+				if (View->CustSoftKeys)
+					ATB_wap_key_selected(View, View->CustSoftKeyId);  /* Customised right soft key */
+				else
+					ATB_wap_card_go_back(View);						/* Otherwise default is "Back" */
+			}
+      		break;
+
+		/* Scroll card up */
+		
+      	case KCD_MNUUP:
+      		ATB_wap_card_key_event(View, WAP_KEY_UP);
+      		break;
+
+		/* Scroll card down */
+		
+      	case KCD_MNUDOWN:
+      		ATB_wap_card_key_event(View, WAP_KEY_DOWN);
+      		break;
+
+		/* Scroll card left */
+
+		case KCD_MNULEFT:
+      	case KCD_1:
+      		ATB_wap_card_key_event(View, WAP_KEY_LEFT);
+      		break;
+
+		/* Scroll card right */
+		
+		case KCD_MNURIGHT:
+      	case KCD_3:
+      		ATB_wap_card_key_event(View, WAP_KEY_RIGHT);
+      		break;
+
+		/* Top of card */
+		
+		case KCD_2:
+			ATB_wap_card_scroll(View,0);
+			break;
+
+		/* Scroll up a page */
+		
+		case KCD_5:
+			ATB_wap_card_scroll(View,View->cardYPosition-WAP_PAGE_SCROLL);
+			/* SPR#2266 - SH - Sending 'key up' has the effect of selecting the bottom available
+			 * link on the scrolled page */
+			ATB_wap_card_key_event(View, WAP_KEY_UP);
+			break;
+
+		/* Scroll down a page */
+		
+		case KCD_8:
+			ATB_wap_card_scroll(View,View->cardYPosition+WAP_PAGE_SCROLL);
+			/* SPR#2266 - SH - Sending 'key down' has the effect of selecting the top available
+			 * link on the scrolled page */
+			ATB_wap_card_key_event(View, WAP_KEY_DOWN);
+			break;
+
+		/* Bottom of card */
+		
+		case KCD_0:
+			ATB_wap_card_scroll(View,View->cardHeight-WAP_SCREEN_HEIGHT);
+			break;
+
+		/* Select*/
+		
+		case KCD_MNUSELECT:
+      	case KCD_CALL:
+      		ATB_wap_card_key_event(View, WAP_KEY_SELECT);
+      		break;
+
+      	/* Exit WAP */
+      	
+      	case KCD_HUP:
+      		ATB_wap_stop_download(View);
+      		AUI_destroy(data->win,RETURN_TO_MENU);
+      		break;
+
+		/* Toggle image scaling */
+		
+      	case KCD_STAR:
+      		View->Status ^= WAP_STATUS_SCALEIMAGES;
+      		ATB_wap_profile_save(data->View);
+      		ATB_wap_card_refresh(View);
+      		break;
+      	
+    	default:
+			break;
+	}
+	return MFW_EVENT_CONSUMED;
+}
+
+
+static int AUI_kbd_long_cb(T_MFW_EVENT event, T_MFW_KBD *keyboard)
+{
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_goto_www
+
+ $Description:	Opens up a text edit screen for entering URLs with "www." entered.
+    	     
+ $Returns:		MFW_EVENT_CONSUMED
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item
+ 
+*******************************************************************************/
+
+int AUI_goto_www(MfwMnu* menu, MfwMnuItem* item)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_goto_www");
+#endif
+
+	AUI_edit(GET_TEXT(TxtWWWdot),WAP_GOTO_URL,TxtEnterURL,URL_MAX_LEN);	
+
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_goto_wap
+
+ $Description:	Opens up a text edit screen for entering URLs with "wap." entered.
+    	     
+ $Returns:		MFW_EVENT_CONSUMED
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item
+ 
+*******************************************************************************/
+
+int AUI_goto_wap(MfwMnu* menu, MfwMnuItem* item)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_goto_wap");
+#endif
+
+	AUI_edit(GET_TEXT(TxtWAPdot),WAP_GOTO_URL, TxtEnterURL, URL_MAX_LEN);
+
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	MMI_AUI_goto_other
+
+ $Description:	Opens up a blank text edit screen for entering URLs
+    	     
+ $Returns:		MFW_EVENT_CONSUMED
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item
+ 
+*******************************************************************************/
+
+int AUI_goto_other(MfwMnu* menu, MfwMnuItem* item)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_goto_other");
+#endif
+
+	AUI_edit("",WAP_GOTO_URL, TxtEnterURL, URL_MAX_LEN);
+
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_edit
+
+ $Description:	Opens up a text edit screen for editing URLs
+    	     
+ $Returns:		
+
+ $Arguments:	shortcut	- pointer to a string that will appear in the editor
+ 				identifier	- specifies what to do with the URL (connect, store etc).
+ 				prompt		- textId of prompt to display
+ 				maxlen		- maximum length of the edited string
+ 
+*******************************************************************************/
+
+int AUI_edit(char *shortcut, USHORT identifier, USHORT prompt, USHORT maxlen)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_edit");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+
+	/* Ensure requested buffer size is not too big */
+	
+	if (maxlen>INPUT_MAX_LEN)
+		maxlen = INPUT_MAX_LEN;
+
+	/* 'shortcut' is what is placed into the buffer before editing */
+
+	if (identifier==WAP_EDIT_HOMEPAGE)
+		shortcut = data->View->Profile->Homepage;
+
+	if (identifier==WAP_EDIT_APN)
+		shortcut = data->View->Profile->APN;
+
+	
+	if (identifier==WAP_EDIT_BOOKMARK || identifier==WAP_EDIT_HISTORY)
+	{
+		/* Clear editor for name */
+#ifdef NEW_EDITOR
+		ATB_uc_text_copy((USHORT *)data->Buffer, (USHORT *)shortcut, CARD_TITLE_MAX_LEN);
+		AUI_edit_create(data->win, identifier, prompt, maxlen, TRUE);
+#else
+		data->Buffer[0] = 0x80;
+		data->Buffer[1] = 0x7F;
+		ATB_uc_text_copy((USHORT *)&data->Buffer[2], (USHORT *)shortcut, CARD_TITLE_MAX_LEN);
+		AUI_edit_create(data->win, identifier, prompt, maxlen*2+2, TRUE);
+#endif
+	}
+	else
+	{
+		strcpy(data->Buffer, shortcut);
+	   	AUI_edit_create(data->win, identifier, prompt, maxlen, FALSE);
+	}
+
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_edit_create
+
+ $Description:	Creates the edit screen
+    	     
+ $Returns:		none.
+
+ $Arguments:	parent_win	- the originating window
+ 				identifier	- purpose for edit window (e.g. go to URL)
+ 				prompt		- textId of prompt to display
+ 				maxlen		- maximum length of the editor
+ 				unicode		- TRUE if editor is unicode
+ 
+*******************************************************************************/
+
+static T_MFW_HND AUI_edit_create(MfwHnd parent_win, USHORT identifier, USHORT prompt, USHORT maxlen, BOOL unicode)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+#ifdef NEW_EDITOR
+	T_AUI_EDITOR_DATA editor_data;
+#else
+	T_EDITOR_DATA	editor_data;
+#endif /* NEW_EDITOR */
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_edit_create");
+#endif
+
+#ifdef NEW_EDITOR
+	AUI_standard_editor(&editor_data, identifier, ED_MODE_ALPHA, prompt, (T_AUI_EDIT_CB)AUI_edit_cb);
+
+	if (unicode)
+	{
+		AUI_edit_SetBuffer(&editor_data, ATB_DCS_UNICODE, (UBYTE *)data->Buffer, maxlen);
+ 	}
+	else
+	{
+		AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)data->Buffer, maxlen);
+	}
+	
+	data->edit_win = AUI_edit_Start(data->win, &editor_data);
+#else /* NEW_EDITOR */
+	AUI_standard_editor(&editor_data, data->Buffer, maxlen, ALPHA_MODE, (T_EDIT_CB)AUI_edit_cb);
+	editor_data.TextId				= prompt;			/* Prompt to display above editor */
+	editor_data.Identifier			= identifier;		/* Purpose of edit window (for callback) */
+
+	data->edit_win = editor_start(data->win,&editor_data);
+#endif /* NEW_EDITOR */
+
+	return data->edit_win;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_edit_cb
+
+ $Description:	Callback function for edit screen.  This performs the following functions,
+ 				the user having provided a new or updated URL:
+ 				
+ 				- Goto URL
+ 				- Editing of Bookmark and History entries
+ 				- Add new bookmark
+ 				- Edit homepage
+ 
+ $Returns:		void
+
+ $Arguments:	win			- the WAP data window
+ 				identifier	- identifier for the edit type (just 0 so far)
+ 				reason		- reason for callback
+ 
+*******************************************************************************/
+
+static void AUI_edit_cb(T_MFW_HND win, USHORT identifier, SHORT reason)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	T_WAP_VIEW		*View;
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_edit_cb");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	View = data->View;
+
+	switch (reason)
+	{
+		case INFO_KCD_LEFT:
+			switch (identifier)
+   			{
+       			/* Go to URL */
+       			
+       			case WAP_GOTO_URL:
+       				AUI_connect_URL(data->win, data->Buffer);
+		    		break;
+
+				/* Edit Bookmark name */
+		
+				case WAP_EDIT_BOOKMARK:
+					AUI_destroy(data->win, LIST_WIN);		/* Destroy the old list */
+#ifdef NEW_EDITOR
+					ATB_wap_entry_change(View->Bookmarks, data->Buffer, data->OptionSelect);
+#else /* NEW_EDITOR */
+					ATB_wap_entry_change(View->Bookmarks, &data->Buffer[2], data->OptionSelect);
+#endif /* NEW_EDITOR */
+					ATB_wap_profile_save(View);	
+					AUI_list_redraw(WAP_BOOKMARKS_LIST, TxtChanged);
+					break;
+
+				/* Edit Bookmark URL */
+		
+				case WAP_EDIT_BOOKMARK_URL:
+		    		AUI_destroy(data->win, LIST_WIN);										/* Destroy the old list */
+					ATB_wap_entry_change(View->BookmarksURL, data->Buffer, data->OptionSelect);
+					ATB_wap_profile_save(View);			/* Save change to flash */
+					AUI_list_redraw(WAP_BOOKMARKS_LIST, TxtChanged);	/* Display "Changed" message */
+					break;
+				
+				/* Edit History name */
+		
+				case WAP_EDIT_HISTORY:
+		    		AUI_destroy(data->win, LIST_WIN);		/* Destroy the old list */
+#ifdef NEW_EDITOR
+					ATB_wap_entry_change(View->History, data->Buffer, data->OptionSelect);
+#else /* NEW_EDITOR */
+					ATB_wap_entry_change(View->History, &data->Buffer[2], data->OptionSelect);
+#endif /* NEW_EDITOR */
+					ATB_wap_profile_save(View);		/* Save change to flash */
+					AUI_list_redraw(WAP_HISTORY_LIST, TxtChanged);		/* Display "Changed" message */
+					break;
+
+				/* Edit History URL */
+		
+				case WAP_EDIT_HISTORY_URL:
+		    		AUI_destroy(data->win, LIST_WIN);										/* Destroy the old list */
+		    		ATB_wap_entry_change(View->HistoryURL, data->Buffer, data->OptionSelect);
+					ATB_wap_profile_save(View);		/* Save change to flash */
+					AUI_list_redraw(WAP_HISTORY_LIST, TxtChanged);		/* Display "Changed" message */
+					break;
+
+				/* Add Bookmark */
+		
+				case WAP_ADD_BOOKMARK:
+					AUI_destroy(data->win, EDIT_WIN);		/* Destroy editor */
+					strcpy(data->Buffer2, data->Buffer);	/* Store URL in second buffer */
+					/* Clear editor for name */
+#ifdef NEW_EDITOR
+					data->Buffer[0] = 0;
+					data->Buffer[1] = 0;
+#else	/* NEW_EDITOR */
+					data->Buffer[0] = 0x80;
+					data->Buffer[1] = 0x7F;
+					data->Buffer[2] = 0;
+					data->Buffer[3] = 0;
+#endif /* NEW_EDITOR */
+					AUI_edit_create(data->win, WAP_ADD_BOOKMARK_NAME, TxtEditName, CARD_TITLE_MAX_LEN, TRUE);
+		    		break;
+
+		    	/* Add Bookmark name */
+		
+				case WAP_ADD_BOOKMARK_NAME:
+					AUI_destroy(data->win, LIST_WIN);	/* Destroy the old list */
+					if (ATB_wap_entry_add(View->BookmarksURL, data->Buffer2)==WAP_FAIL)		/* Add URL entry */
+					{
+						AUI_info_dialog(data->win, TxtBookmarks, TxtFull);  /* If list is full, say so */
+					}
+					else
+					{
+#ifdef NEW_EDITOR
+						ATB_wap_entry_add(View->Bookmarks, data->Buffer);
+#else /* NEW_EDITOR */
+						ATB_wap_entry_add(View->Bookmarks, &data->Buffer[2]);
+#endif /* NEW_EDITOR */
+						ATB_wap_profile_save(View);		/* Save change to flash */
+						AUI_list_redraw(WAP_BOOKMARKS_LIST, TxtStored);						
+					}
+					break;
+
+				/* Edit Homepage URL */
+
+				case WAP_EDIT_HOMEPAGE:
+			 	  	strcpy(View->Profile->Homepage, data->Buffer);				/* Change the homepage */
+			 	  	ATB_wap_profile_save(View);									/* Save change to flash */
+					AUI_destroy(data->win, EDIT_WIN);							/* Kill the editor */
+					AUI_info_dialog(data->win, TxtChanged, NULL);				/* "Changed" */
+					break;
+
+				/* Edit APN */
+
+				case WAP_EDIT_APN:
+			 	  	strcpy(View->Profile->APN, data->Buffer);					/* Change the homepage */
+			 	  	ATB_wap_profile_save(View);									/* Save change to flash */
+			 	  	AUI_destroy(data->win, EDIT_WIN);
+					AUI_info_dialog(data->win, TxtChanged, NULL);				/* "Changed" */
+					break;
+
+				default:
+					break;
+    		}
+			break;
+
+		/* RSK or HUP key exits menu */
+		
+		case INFO_KCD_HUP:
+		case INFO_KCD_RIGHT:													/* (Exit from Editor) */
+			AUI_destroy(data->win,EDIT_WIN);									/* Destroy edit window */
+			if (identifier == WAP_ADD_BOOKMARK_NAME)							/* If we've destroyed the name editor, */
+			{
+				strcpy(data->Buffer, data->Buffer2);							/* copy the URL back into the editor */
+				AUI_edit_create(data->win, WAP_ADD_BOOKMARK, TxtEditURL, CARD_TITLE_MAX_LEN, FALSE);
+			}
+			break;
+		
+		default:
+			break;
+	}
+
+	return;
+}
+
+/*******************************************************************************
+
+ $Function:    	AUI_list_redraw
+
+ $Description:	When changing, adding, or deleting bookmarks or history list items,
+ 				this function is called to display the appropriate dialog.  On callback,
+ 				the AUI_list_redraw_cb() function redraws the appropriate list.
+
+ $Returns:		None.
+
+ $Arguments:	list	- The type of list to be redrawn
+ 				TxtId	- The text string to be displayed in a dialog for 3s
+ 
+*******************************************************************************/
+
+static void AUI_list_redraw(USHORT list, USHORT TxtId)
+{
+	T_WAP_DATA *data		= AUI_wap_data();
+	T_DISPLAY_DATA	display_info;
+
+	if (!data)
+	{
+		return;
+	}
+	
+	dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtId, TxtNull, COLOUR_WAP_POPUP);
+	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)AUI_list_redraw_cb, THREE_SECS, 0 );
+	display_info.Identifier		= list;
+	
+	info_dialog(data->win, &display_info);
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_list_redraw_cb
+
+ $Description:	Called when a 3s info dialog times out: the appropriate list is
+ 				redrawn (history, bookmarks).
+
+ $Returns:		None.
+
+ $Arguments:	win - the parent window
+ 				identifier - stores the type of list
+ 				reson - not used.
+ 
+*******************************************************************************/
+
+static void AUI_list_redraw_cb(T_MFW_HND win, USHORT identifier, SHORT reason)
+{
+	T_WAP_DATA *data		= AUI_wap_data();	
+  
+	TRACE_FUNCTION("AUI_list_redraw_cb()");
+
+	if (!data)
+	{
+		return;
+	}
+	
+	/* SPR#2324 - SH - Kill any residual list, editor or options window */
+
+	AUI_destroy(data->win, LIST_WIN | EDIT_WIN | OPTIONS_WIN);	
+
+	/* Redraw the appropriate list */
+	
+	switch(identifier)
+	{
+		case WAP_BOOKMARKS_LIST:
+			AUI_entry_list(data->win, data->View->Bookmarks, (ListCbFunc)AUI_bookmarks_list_cb,0);
+			break;
+
+		case WAP_HISTORY_LIST:
+			AUI_entry_list(data->win, data->View->History, (ListCbFunc)AUI_history_list_cb,0);
+			break;
+
+		/* SPR#2324 - SH - Cursor now indicates current profile */
+		case WAP_PROFILES_LIST:
+			AUI_entry_list(data->win, data->View->ProfilesList, (ListCbFunc)AUI_profiles_setup_cb, data->View->ProfileId);
+			break;
+	}
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_bookmarks_add
+
+ $Description:	New bookmark menu item.  Checks to see if bookmarks are full;
+ 				if so, displays message and exits.  Otherwise, brings up usual
+ 				new bookmark shortcut menu.
+ 
+ $Returns:		MFW_EVENT_CONSUMED
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_bookmarks_add(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA *data		= AUI_wap_data();
+	T_MMI_WAP_NEW_VIEW_IND		wap_view;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_wap_start_done");
+#endif
+	
+	if (!data)
+	{
+		return;
+	}
+
+	/* If there is space in the bookmarks list */
+
+	if (data->View->Bookmarks->no_of_entries < data->View->Bookmarks->max_entries)
+	{
+		/* Destroy any previous options menu existing */
+		if (data->options_win)
+		{
+			AUI_destroy(data->win, OPTIONS_WIN);
+		}
+		/* Create Add Bookmark Menu */
+		data->options_win = bookMenuStart(data->win, WAPNewBookmarkAttributes(), 0);
+	}
+	else
+	{
+		AUI_info_dialog(data->win, TxtBookmarks, TxtFull);
+	}
+	
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_bookmarks_add_www
+
+ $Description:	Opens up a text edit screen for entering URLs with "www." entered.
+    	     
+ $Returns:		MFW_EVENT_CONSUMED
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item
+ 
+*******************************************************************************/
+
+int AUI_bookmarks_add_www(MfwMnu* menu, MfwMnuItem* item)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_bookmarks_add_www");
+#endif
+
+	AUI_edit(GET_TEXT(TxtWWWdot),WAP_ADD_BOOKMARK, TxtEnterURL, URL_MAX_LEN);
+
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_bookmarks_add_wap
+
+ $Description:	Opens up a text edit screen for entering URLs with "wap." entered.
+    	     
+ $Returns:		MFW_EVENT_CONSUMED
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item
+ 
+*******************************************************************************/
+
+int AUI_bookmarks_add_wap(MfwMnu* menu, MfwMnuItem* item)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_bookmarks_add_wap");
+#endif
+
+	AUI_edit(GET_TEXT(TxtWAPdot),WAP_ADD_BOOKMARK, TxtEnterURL, URL_MAX_LEN);
+
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_bookmarks_add_other
+
+ $Description:	Opens up a blank text edit screen for entering URLs
+    	     
+ $Returns:		MFW_EVENT_CONSUMED
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item
+ 
+*******************************************************************************/
+
+int AUI_bookmarks_add_other(MfwMnu* menu, MfwMnuItem* item)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_bookmarks_add_other");
+#endif
+
+	AUI_edit("",WAP_ADD_BOOKMARK, TxtEnterURL, URL_MAX_LEN);
+
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_bookmarks_list
+
+ $Description:	List Bookmarks menu option
+ 
+ $Returns:		
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_bookmarks_list(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_bookmarks_list");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+	
+	/* Create the list menu */
+	
+	AUI_entry_list(data->win, data->View->Bookmarks, (ListCbFunc) AUI_bookmarks_list_cb,0);
+
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_bookmarks_list_cb
+
+ $Description:	Callback function for bookmarks list menu
+ 
+ $Returns:		void		
+
+ $Arguments:	win				- WAP data window
+ 				EntryListData	- list menu data of bookmarks list
+ 
+*******************************************************************************/
+
+static void AUI_bookmarks_list_cb(T_MFW_HND win, ListMenuData *EntryListData)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	T_WAP_VIEW		*View;
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_bookmarks_list_cb");
+	TRACE_EVENT_P1("Exit reason: %d", EntryListData->Reason);
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+
+	View = data->View;
+
+	switch(EntryListData->Reason)
+	{
+		case LISTS_REASON_SELECT:									
+			/* Option is selected... */
+			
+			data->OptionSelect = EntryListData->ListPosition;					/* Store selected bookmark no. */
+			data->URLSelect = View->BookmarksURL->Entry[data->OptionSelect]; 	/* Store the URL of the bookmark */
+
+			/* Destroy any previous options menu existing */
+			if (data->options_win)
+			{
+				AUI_destroy(data->win, OPTIONS_WIN);
+			}
+			data->options_win = bookMenuStart(win, WAPBookOptMenuAttributes(), 0);	/* Create bookmark options menu */
+	  		break;
+
+		case LISTS_REASON_SEND:
+			data->OptionSelect = EntryListData->ListPosition;					/* Store selected bookmark no. */
+			data->URLSelect = View->BookmarksURL->Entry[data->OptionSelect]; 	/* Store the URL of the bookmark */
+
+			AUI_connect_URL(data->win, data->URLSelect);						/* The selected menu item is the new URL */
+			break;
+			
+		case LISTS_REASON_CLEAR:
+		case LISTS_REASON_HANGUP:
+  		case LISTS_REASON_BACK:													/* Exit list menu */
+  			AUI_destroy(data->win,LIST_WIN);									/* Kill the list window */
+  			break;
+	}
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_bookmarks_goto
+
+ $Description:	Open up the selected bookmark in the WAP browser
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item	
+ 
+*******************************************************************************/
+
+int AUI_bookmarks_goto(MfwMnu* menu, MfwMnuItem* item)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_bookmarks_goto");
+#endif
+
+	return AUI_entry_goto(WAP_BOOKMARKS_LIST);	
+}	
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_bookmarks_edit
+
+ $Description:	Edit the name of the selected bookmark
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item	
+ 
+*******************************************************************************/
+
+int AUI_bookmarks_edit(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	char			*Entry;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_bookmarks_edit()");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	Entry = data->View->Bookmarks->Entry[data->OptionSelect];			/* The bookmark name to be edited */
+			
+	AUI_edit(Entry, WAP_EDIT_BOOKMARK, TxtEditName, CARD_TITLE_MAX_LEN);
+
+	return MFW_EVENT_CONSUMED;	
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_bookmarks_edit_url
+
+ $Description:	Edit the URL of the selected bookmark
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item	
+ 
+*******************************************************************************/
+
+int AUI_bookmarks_edit_url(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	char			*Entry;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_bookmarks_edit_url()");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+	
+	Entry = data->View->BookmarksURL->Entry[data->OptionSelect];	/* The bookmark URL to be edited */
+
+	AUI_edit(Entry, WAP_EDIT_BOOKMARK_URL, TxtEditURL, URL_MAX_LEN);
+
+	return MFW_EVENT_CONSUMED;	
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_bookmarks_delete
+
+ $Description:	Delete the selected bookmark from the bookmarks list
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item	
+ 
+*******************************************************************************/
+
+int AUI_bookmarks_delete(MfwMnu* menu, MfwMnuItem* item)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_bookmarks_delete");
+#endif
+
+	AUI_entry_delete(WAP_DELETE_BOOKMARK);
+	
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_bookmarks_sendSMS
+
+ $Description:	Open up a bookmark in an SMS write editor
+ 
+ $Returns:		
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_bookmarks_sendSMS(MfwMnu* menu, MfwMnuItem* item)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_bookmarks_sendSMS");
+#endif
+
+	AUI_entry_sendSMS();
+	
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_history_list
+
+ $Description:	List History menu option
+ 
+ $Returns:		
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_history_list(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	char			*Entry;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_history_list()");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	/* Create the history list menu */
+	
+	AUI_entry_list(data->win, data->View->History, (ListCbFunc) AUI_history_list_cb,0);
+	
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_history_list_cb
+
+ $Description:	Callback function for history list menu
+ 
+ $Returns:		void		
+
+ $Arguments:	win				- WAP data window
+ 				EntryListData	- list menu data of history lsit
+ 
+*******************************************************************************/
+
+static void AUI_history_list_cb(T_MFW_HND win, ListMenuData *EntryListData)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	T_WAP_VIEW		*View;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_history_list_cb()");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+
+	View = data->View;
+
+	switch(EntryListData->Reason)
+	{
+		case LISTS_REASON_SELECT:									
+			/* Option is selected... */
+			
+			data->OptionSelect = EntryListData->ListPosition;			/* Store selected history entry no.*/
+			data->URLSelect = View->HistoryURL->Entry[data->OptionSelect];    /* Store the URL of the history entry*/
+
+			/* Destroy any previous options menu existing */
+
+			if (data->options_win)
+			{
+				AUI_destroy(data->win, OPTIONS_WIN);
+			}
+			
+			/* Create history options menu */
+
+			data->options_win = bookMenuStart(data->win, WAPHistOptMenuAttributes(), 0);
+  			break;
+
+		case LISTS_REASON_SEND:									
+			data->OptionSelect = EntryListData->ListPosition;		/* Store selected bookmark no..*/
+			data->URLSelect = View->HistoryURL->Entry[data->OptionSelect]; /* Store the URL of the bookmark.*/
+
+			/* Download the selected page */
+			
+			AUI_connect_URL(data->win, data->URLSelect);
+  			break;
+
+  		case LISTS_REASON_BACK:			/* Exit menu */
+			AUI_destroy(data->win,LIST_WIN);			/* Destroy list window */
+  			break;
+	}
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_history_goto
+
+ $Description:	Open up the selected history entry in the WAP browser
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item	
+ 
+*******************************************************************************/
+
+int AUI_history_goto(MfwMnu* menu, MfwMnuItem* item)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_history_goto");
+#endif
+
+	return AUI_entry_goto(WAP_HISTORY_LIST);	
+}	
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_history_edit
+
+ $Description:	Edit the name of the selected history entry
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item	
+ 
+*******************************************************************************/
+
+int AUI_history_edit(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	USHORT			*EntryUC;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_history_edit");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	/* Edit string after NUMBER_PADDING */
+
+	EntryUC			= (USHORT *)data->View->History->Entry[data->OptionSelect];
+	
+	AUI_edit((char *)&EntryUC[NUMBER_PADDING], WAP_EDIT_HISTORY, TxtEditName, CARD_TITLE_MAX_LEN);
+	return MFW_EVENT_CONSUMED;	
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_history_edit_url
+
+ $Description:	Edit the URL of the selected history entry
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item	
+ 
+*******************************************************************************/
+
+int AUI_history_edit_url(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	char			*Entry;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_bookmarks_edit()");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	Entry = data->View->HistoryURL->Entry[data->OptionSelect];
+	
+	AUI_edit(Entry, WAP_EDIT_HISTORY_URL, TxtEditURL, URL_MAX_LEN);
+
+	return MFW_EVENT_CONSUMED;	
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_history_delete
+
+ $Description:	Delete the selected entry from the history list
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item	
+ 
+*******************************************************************************/
+
+int AUI_history_delete(MfwMnu* menu, MfwMnuItem* item)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_history_delete");
+#endif
+
+	AUI_entry_delete(WAP_DELETE_HISTORY);
+	
+	return MFW_EVENT_CONSUMED;
+}	
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_history_clear
+
+ $Description:	Deletes all entries in history list
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item	
+ 
+*******************************************************************************/
+
+int AUI_history_clear(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	T_DISPLAY_DATA	display_info;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_history_clear");
+#endif
+
+	dlg_initDisplayData_TextId( &display_info, TxtSoftOK, TxtExit, TxtOkToDelete, TxtNull, COLOUR_WAP_POPUP);
+	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)AUI_entry_delete_cb, FOREVER, KEY_CLEAR | KEY_LEFT | KEY_RIGHT );
+	display_info.Identifier = WAP_CLEAR_HISTORY;
+	info_dialog(data->win, &display_info);
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_history_addbook
+
+ $Description:	Adds a history item to the bookmarks list
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item	
+ 
+*******************************************************************************/
+
+int AUI_history_addbook(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	T_WAP_VIEW		*View;
+	USHORT			*EntryUC;
+	char			*URL;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_history_addbook()");
+#endif
+	
+	if (!data)
+	{
+		return 0;
+	}
+	
+	View		= data->View;
+
+	/* Add string after NUMBER_PADDING in unicode */
+
+	EntryUC		= (USHORT *)View->History->Entry[data->OptionSelect];		/* Text of the history entry */
+	URL			= View->HistoryURL->Entry[data->OptionSelect];				/* URL of the entry */
+ 
+	/* Try to add history item to bookmarks */
+	
+	if (ATB_wap_entry_add(View->Bookmarks, (char *)&EntryUC[NUMBER_PADDING])==NULL)
+	{
+		AUI_info_dialog(data->win, TxtBookmarks, TxtFull);		/* if it's full, say "Bookmarks Full" */
+	}
+	else
+	{
+		ATB_wap_entry_add(View->BookmarksURL, URL);
+		ATB_wap_profile_save(View);								/* Save change to flash */
+		AUI_info_dialog(data->win, TxtStored, NULL);			/* Display "Stored" message */
+	}
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_history_sendSMS
+
+ $Description:	Open up a history entry in an SMS write editor
+ 
+ $Returns:		
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_history_sendSMS(MfwMnu* menu, MfwMnuItem* item)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_history_sendSMS");
+#endif
+
+	AUI_entry_sendSMS();
+	
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/* SPR#2324 - SH - Removed AUI_profiles_list */
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_profiles_setup
+
+ $Description:	Lists names of all profiles in flash, in order to change settings
+ 
+ $Returns:		
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_profiles_setup(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();	
+	T_WAP_VIEW		*View;
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_profiles_setup");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	View = data->View;
+	
+	/* Create the profile list menu
+	 * SPR#2324 - SH - Don't store current profile yet */
+
+	AUI_entry_list(data->win, View->ProfilesList, (ListCbFunc) AUI_profiles_setup_cb, View->ProfileId);
+	
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_profiles_setup_cb
+
+ $Description:	Callback function for profiles list menu
+ 				SPR#2324 - SH - Changed menu behaviour
+ 
+ $Returns:		void		
+
+ $Arguments:	win				- WAP data window
+ 				EntryListData	- list menu data of profiles list
+ 
+*******************************************************************************/
+
+static void AUI_profiles_setup_cb(T_MFW_HND win, ListMenuData *EntryListData)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();	
+	T_WAP_VIEW		*View;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_profiles_setup_cb");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+
+	View = data->View;
+	data->OptionSelect = EntryListData->ListPosition; /* The id of the selected profile */
+
+	switch(EntryListData->Reason)
+	{
+		case LISTS_REASON_SEND:
+		case LISTS_REASON_SELECT:									
+			/* The user has chosen a profile.  Store the original profile ID */
+			data->profile_store = data->View->ProfileId;
+
+			/* If it's different from the original, read in the new profile. */
+			
+			if (data->OptionSelect!=data->View->ProfileId)
+			{
+				ATB_wap_profile_read(View, data->OptionSelect);
+			}
+			
+			/* Destroy any previous options menu existing */
+			
+			if (data->options_win)
+			{
+				AUI_destroy(data->win, OPTIONS_WIN);
+			}
+			data->options_win = bookMenuStart(data->win, WAPProfOptionsAttributes(), 0);
+			SEND_EVENT(data->options_win, ADD_CALLBACK, NULL, (void *)AUI_profiles_options_cb);
+  			break;
+
+  		case LISTS_REASON_BACK:		
+			AUI_destroy(data->win,LIST_WIN);	
+  			break;
+	}
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_profiles_options_cb
+
+ $Description:	Callback function for profiles options window
+ 
+ $Returns:		void		
+
+ $Arguments:	win				- WAP data window
+ 				identifier, reason  - Not used
+ 
+*******************************************************************************/
+
+static void AUI_profiles_options_cb(T_MFW_HND parent_win, UBYTE identifier, UBYTE reason)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();	
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_profiles_options_cb");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+
+	data->options_win = NULL;
+	
+	/* If the edited profile is different from the selected profile, change back */
+
+	if (data->profile_store!=data->View->ProfileId)
+	{
+		ATB_wap_profile_read(data->View, data->profile_store);
+		/* Recreate list menu so it points to original profile */
+		AUI_destroy(data->win, LIST_WIN);
+		AUI_entry_list(data->win, data->View->ProfilesList, (ListCbFunc)AUI_profiles_setup_cb,data->profile_store);
+	}
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_profile_select
+
+ $Description:	Profile is selected, return to main menu
+ 
+ $Returns:		MFW_EVENT_CONSUMED
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_profile_select(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();	
+
+	/* Store the current profile */
+	data->profile_store = data->View->ProfileId;
+	ATB_wap_profile_save(data->View);
+	
+	AUI_info_dialog(data->win, TxtChanged, TxtNull);			
+  			
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_profile_change
+
+ $Description:	Bring up slightly different menus depending on whether profile is
+ 				GPRS or Dialup.
+ 
+ $Returns:		MFW_EVENT_CONSUMED
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_profile_change(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();	
+
+	/* Only allow modification of the GPRS settings if GPRS is switched on */
+#ifdef GPRS
+	if (data->View->Profile->AccessType==WAP_GPRS_DATA)
+	{
+		data->sub_options_win = bookMenuStart(data->win, WAPGPRSProfileAttributes(), 0);
+	}
+	else
+#endif
+	{
+		data->sub_options_win = bookMenuStart(data->win, WAPDialupProfileAttributes(), 0);
+	}
+	
+	SEND_EVENT(data->sub_options_win, ADD_CALLBACK, NULL, (void *)AUI_profile_change_cb);
+  			
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_profile_change_cb
+
+ $Description:	Callback function for profile change window
+ 
+ $Returns:		void		
+
+ $Arguments:	Standard menu callback parameters
+ 
+*******************************************************************************/
+
+static void AUI_profile_change_cb(T_MFW_HND parent_win, UBYTE identifier, UBYTE reason)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();	
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_profiles_options_cb");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+
+	data->sub_options_win = NULL;
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_profile_delete
+
+ $Description:	Delete the highlighted profile
+ 
+ $Returns:		MFW_EVENT_CONSUMED
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_profile_delete(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+
+	/* Don't let user delete last profile */
+
+	if (data->View->ProfilesList->no_of_entries==1)
+	{
+		AUI_info_dialog(data->win, TxtNotAllowed, TxtNull);
+	}
+	else
+	{
+		/* Present option to delete profile */
+		AUI_entry_delete(WAP_DELETE_PROFILE);
+	}
+	
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_profile_new
+
+ $Description:	Add a new profile
+ 
+ $Returns:		MFW_EVENT_CONSUMED
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_profile_new(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	UBYTE newProfileId;
+
+	/* Check if profiles are full */
+
+	if (data->View->ProfilesList->no_of_entries==data->View->ProfilesList->max_entries)
+	{
+		AUI_info_dialog(data->win, TxtProfiles, TxtFull);
+	}
+	else
+	{
+		/* Add the profile */
+		newProfileId = data->View->ProfilesList->no_of_entries;
+		ATB_wap_profile_default(newProfileId);
+		ATB_wap_entry_add(data->View->ProfilesList, data->View->ProfilesList->Entry[newProfileId]);
+		ATB_wap_profile_save(data->View);
+		AUI_list_redraw(WAP_PROFILES_LIST, TxtStored);
+	}
+	
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_profile_reset
+
+ $Description:	Reset profiles to default values
+ 
+ $Returns:		MFW_EVENT_CONSUMED
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_profile_reset(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	T_DISPLAY_DATA	display_info;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_profile_reset");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+
+	dlg_initDisplayData_TextId( &display_info, TxtSoftOK, TxtSoftBack, TxtPressOk, TxtResetProfiles, COLOUR_WAP_POPUP);
+	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)AUI_profile_reset_cb, FIVE_SECS, KEY_LEFT | KEY_RIGHT | KEY_CLEAR | KEY_HUP );
+	
+	info_dialog(data->parent_win, &display_info);
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_profile_reset_cb
+
+ $Description:	Callback from reset profiles dialog
+ 
+ $Returns:		None
+
+ $Arguments:	Standard info dialog callback arguments
+ 
+*******************************************************************************/
+
+static void AUI_profile_reset_cb(T_MFW_HND parent_win, USHORT identifier, SHORT reason)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_profile_reset_cb");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	switch(reason)
+	{
+		case INFO_KCD_LEFT:
+			AUI_destroy(data->win, LIST_WIN);
+			ATB_wap_profile_default_create(TRUE);
+			ATB_wap_profile_names_read(data->View);
+			ATB_wap_profile_read(data->View, data->View->ProfileId);
+			AUI_list_redraw(WAP_PROFILES_LIST, TxtReset);
+			break;
+			
+		case INFO_KCD_HUP:
+		case INFO_KCD_RIGHT:
+			break;
+	} 
+	
+	return ;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_entry_list
+
+ $Description:	Create an entry list and store its pointer in list_win/list_data
+ 
+ $Returns:		pointer to list menu data
+
+ $Arguments:	win			- the WAP data window
+ 				EntryList	- pointer to entry list table
+ 				Callback	- the callback function
+ 				pos			- the default highlighted option
+ 
+*******************************************************************************/
+
+static int AUI_entry_list (T_MFW_HND win, T_WAP_LIST *EntryList, ListCbFunc Callback, UBYTE pos)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();	
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_entry_list");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+	
+	/* Destroy previous list, if it exists */
+	
+	if (data->list_win)
+	{
+		AUI_destroy(data->win, LIST_WIN);
+	}
+
+	/* Create new list */
+	
+	data->list_data = AUI_entry_list_create (data->win, EntryList, Callback, pos);
+	if (data->list_data)
+		data->list_win = data->list_data->win;		/* Attach the resulting window to the data */
+	else
+	{
+		data->list_win = NULL;	/* No window created */
+	}
+	return 1;		
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_entry_list_create
+
+ $Description:	Create an entry list for Bookmarks/History/Profiles, or options menu
+ 
+ $Returns:		pointer to list menu data
+
+ $Arguments:	win			- the WAP data window
+ 				EntryList	- pointer to bookmarks table
+ 				Callback	- the callback function for the entry list
+ 				pos			- the default highlighted option
+ 
+*******************************************************************************/
+
+static ListMenuData * AUI_entry_list_create (T_MFW_HND win, T_WAP_LIST *EntryList, ListCbFunc Callback, UBYTE pos)
+{
+	ListMenuData *EntryListData;
+	USHORT 		entryIndex;
+	USHORT		no_of_entries	= EntryList->no_of_entries;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_entry_list_create");
+#endif
+
+	/* If list is empty, display "Empty List */
+	
+	if (no_of_entries==0)
+	{
+		AUI_info_dialog(win, TxtEmpty, NULL);
+		return NULL;
+	}
+	
+	/* Allocate memory for list data */
+
+	EntryListData = (ListMenuData *)AUI_wap_memory_alloc (sizeof(ListMenuData));
+	
+	if (EntryListData==NULL)
+		return NULL;
+
+	EntryListData->List = (T_MFW_MNU_ITEM *) AUI_wap_memory_alloc (no_of_entries*sizeof (T_MFW_MNU_ITEM));
+
+	if (EntryListData->List==NULL)
+		return NULL;
+	
+	/* Fill Menu List */
+	
+	for (entryIndex=0; entryIndex < no_of_entries; entryIndex++)
+	{
+		mnuInitDataItem(&EntryListData->List[entryIndex]);
+		
+		if (EntryList->Entry[entryIndex]!=NULL)
+			EntryListData->List[entryIndex].str = (char *)EntryList->Entry[entryIndex];   /* Copy Entry into list */
+		else
+			EntryListData->List[entryIndex].str = GET_TEXT(TxtEmpty);			/* ...otherwise "Empty" */
+		
+		EntryListData->List[entryIndex].flagFunc = item_flag_none;
+	}
+
+	/* Fill common parameters for list handling */
+
+	EntryListData->ListLength		= no_of_entries;
+	EntryListData->CursorPosition	= 1;				/* Starting position */
+	EntryListData->ListPosition		= pos+1;
+	if (pos>3)
+		EntryListData->CursorPosition = pos-3;			/* Make sure highlight is on screen */
+	EntryListData->SnapshotSize		= 5;				/* 5 entries on the screen at once */
+	EntryListData->Font				= 0;
+
+	/* SPR#2324 - SH - Now only options list uses 'Select' */
+	
+	if (EntryList->type==WAP_OPTIONS_LIST)		// For these lists, left soft key is Select
+		EntryListData->LeftSoftKey	= TxtSoftSelect;
+	else
+		EntryListData->LeftSoftKey	= TxtSoftOptions;
+	
+	EntryListData->RightSoftKey	= TxtSoftBack;
+	EntryListData->KeyEvents	= KEY_ALL;
+	EntryListData->Reason		= 0;
+	EntryListData->Strings		= TRUE;		/* Use strings not text ID's */
+	EntryListData->Attr			= &list_menuAttrib;
+	EntryListData->autoDestroy	= FALSE;	/* Don't destroy on exit */
+
+	/* Display the list */
+	 
+	listDisplayListMenu(win, EntryListData, (ListCbFunc)Callback,(UBYTE)EntryList->unicode);
+
+	return EntryListData;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_entry_goto
+
+ $Description:	Open up the selected bookmark/history entry in the WAP browser
+ 
+ $Returns:		
+
+ $Arguments:	identifier	- specifies whether history or bookmarks list
+ 
+*******************************************************************************/
+
+int AUI_entry_goto(WAP_LIST_TYPE identifier)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_entry_goto");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+	
+	switch(identifier)
+	{
+		case WAP_BOOKMARKS_LIST:
+		case WAP_HISTORY_LIST:
+			AUI_connect_URL(data->win, data->URLSelect);
+			break;
+	}
+
+	return MFW_EVENT_CONSUMED;	
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_entry_delete
+
+ $Description:	Delete the selected entry from the history/bookmarks list
+ 
+ $Returns:		
+
+ $Arguments:	identifier	- specifies history list or bookmarks list	
+ 
+*******************************************************************************/
+
+int AUI_entry_delete(UBYTE identifier)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();	
+	T_DISPLAY_DATA	display_info;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_entry_delete");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+	
+	dlg_initDisplayData_TextId( &display_info, TxtSoftOK, TxtSoftBack, TxtPressOk, TxtDelete, COLOUR_WAP_POPUP);
+	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)AUI_entry_delete_cb, FOREVER, KEY_CLEAR | KEY_LEFT | KEY_RIGHT );
+	display_info.Identifier= identifier;  /* Type of list */
+	
+	info_dialog(data->win, &display_info);
+
+	return MFW_EVENT_CONSUMED;	
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_entry_delete_cb
+
+ $Description:	Callback function for delete confirmation
+ 
+ $Returns:		
+
+ $Arguments:	win			- WAP data window
+ 				identifier	- Type of list
+ 				reason		- reason for callback	
+ 
+*******************************************************************************/
+
+void AUI_entry_delete_cb(T_MFW_HND win, UBYTE identifier, UBYTE reason)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();	
+	T_WAP_VIEW		*View;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_entry_delete_cb");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	View = data->View;
+	
+	switch(identifier)
+	{
+		case WAP_DELETE_BOOKMARK:
+			switch (reason)
+			{
+				case INFO_KCD_LEFT:
+					/* Destroy the old list */
+				
+					AUI_destroy(data->win, LIST_WIN);
+
+					/* Delete the selected bookmark name and URL */
+					
+					ATB_wap_entry_remove(View->Bookmarks, data->OptionSelect);     
+					ATB_wap_entry_remove(View->BookmarksURL, data->OptionSelect);
+					ATB_wap_profile_save(View);	/* Save change to flash */
+
+					/* Redraw list */
+					
+					AUI_list_redraw(WAP_BOOKMARKS_LIST, TxtEntryDeleted);
+					break;
+				case INFO_KCD_RIGHT:
+		    	case INFO_KCD_CLEAR:
+					break;
+				default:
+					break;
+			}
+			break;
+
+		case WAP_DELETE_HISTORY:
+			switch (reason)
+			{
+				case INFO_KCD_LEFT:
+					/* Destroy the old list */
+				
+					AUI_destroy(data->win, LIST_WIN);
+
+					/* Delete the selected bookmark name and URL */
+					
+					ATB_wap_entry_remove(View->History, data->OptionSelect);
+					ATB_wap_entry_remove(View->HistoryURL, data->OptionSelect);
+					ATB_wap_renumber_history(View->History);	/* Renumber history list */
+					ATB_wap_profile_save(View);					/* Save change to flash */
+
+					/* Redraw list */
+					
+					AUI_list_redraw(WAP_HISTORY_LIST, TxtEntryDeleted);
+					break;
+				case INFO_KCD_RIGHT:
+		    	case INFO_KCD_CLEAR:
+					break;
+				default:
+					break;
+			}
+			break;
+
+		/* SPR#2324 - SH - For deleting connection profile */
+		
+		case WAP_DELETE_PROFILE:
+			switch (reason)
+			{
+				case INFO_KCD_LEFT:
+					AUI_destroy(data->win, LIST_WIN);										/* Destroy the old list */
+					ATB_wap_profile_delete(data->View, data->OptionSelect);	/* Shifts profile data up */
+					if (data->OptionSelect==(data->View->ProfilesList->no_of_entries-1))
+					{
+						/* It's the last entry in the list: read in the previous entry */
+						data->OptionSelect--;
+					}
+					/* Read in the new profile */
+					ATB_wap_profile_read(data->View, data->OptionSelect);
+					ATB_wap_profile_save(View);									// Save change to flash
+					AUI_list_redraw(WAP_PROFILES_LIST, TxtEntryDeleted);
+					break;
+				case INFO_KCD_RIGHT:
+		    	case INFO_KCD_CLEAR:
+					break;
+				default:
+					break;
+			}
+			break;
+
+		case WAP_CLEAR_HISTORY:
+			switch (reason)
+			{
+				case INFO_KCD_LEFT:
+					/* Delete all history names and URLs */
+					
+					ATB_wap_entry_remove_all(View->History);
+					ATB_wap_entry_remove_all(View->HistoryURL);
+					ATB_wap_profile_save(View);		/* Save change to flash */
+
+					/* Redraw list */
+					
+					AUI_entry_list(data->win, View->History, (ListCbFunc)AUI_history_list_cb,0);
+					break;
+				case INFO_KCD_RIGHT:
+		    	case INFO_KCD_CLEAR:
+					break;
+				default:
+					break;
+			}
+			break;
+    }
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_entry_sendSMS
+
+ $Description:	Open up an SMS editing screen with the selected URL
+ 
+ $Returns:		
+
+ $Arguments:	none
+ 
+*******************************************************************************/
+
+int AUI_entry_sendSMS(void)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	T_SmsUserData	UserData;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_entry_sendSMS");
+#endif
+
+ 	if (!data)
+ 	{
+ 		return 0;
+ 	}
+
+ 	/* Copy name into SMS editing buffer with a blank number */
+ 	
+	strcpy((char *)UserData.TextBuffer, data->URLSelect);
+	UserData.NumberBuffer[0] = 0;
+	UserData.CentreBuffer[0] = 0;
+
+
+    //CRR 25259: xpradipg 28 sep 2004
+    //the window handler assignment to data->edit_win is removed
+	SmsSend_SEND_start(data->parent_win, &UserData); // Start editing SMS
+
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_profile_name_edit
+
+ $Description:	Opens up a text edit screen for editing the name of a profile
+    	     
+ $Returns:		none.
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_profile_name_edit(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+
+#ifdef NEW_EDITOR
+	T_AUI_EDITOR_DATA	editor_data;
+#else
+	T_EDITOR_DATA	editor_data;
+#endif /* NEW_EDITOR */
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_profile_name_edit");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+   
+
+#ifdef NEW_EDITOR
+	/* Store name in editor buffer */
+	
+	ATB_uc_text_copy((USHORT *)data->Buffer, data->View->Profile->Title, PROFILENAME_MAX_LEN);
+
+	/* Set up editor. */
+	
+	AUI_standard_editor(&editor_data, 0, ED_MODE_ALPHA, TxtProfileName, (T_AUI_EDIT_CB)AUI_profile_name_edit_cb);
+	AUI_edit_SetBuffer(&editor_data, ATB_DCS_UNICODE, (UBYTE *)data->Buffer, PROFILENAME_MAX_LEN+1);
+	AUI_edit_SetAltTextStr(&editor_data, 1, TxtNull, TRUE, TxtSoftBack);
+			
+	data->edit_win = AUI_edit_Start(data->win, &editor_data);
+	
+#else /* NEW_EDITOR */
+	/* Clear editor for name */
+
+	data->Buffer[0] = 0x80;
+	data->Buffer[1] = 0x7F;
+	ATB_uc_text_copy((USHORT *)&data->Buffer[2], data->View->Profile->Title, PROFILENAME_MAX_LEN);
+
+	/* Set up editor.  */
+	
+	AUI_standard_editor(&editor_data, data->Buffer, (PROFILENAME_MAX_LEN+2)*sizeof(USHORT), ALPHA_MODE, (T_EDIT_CB)AUI_profile_name_edit_cb);
+	
+	editor_data.TextId				= TxtProfileName;
+	editor_data.min_enter			= 1;				/* Avoid returning empty strings */
+			
+	data->edit_win = editor_start(data->win, &editor_data);
+#endif /* NEW_EDITOR */
+
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_profile_name_edit_cb
+
+ $Description:	Callback function for editing a profile's title
+ 
+ $Returns:		void
+
+ $Arguments:	parent_win	- the WAP data window
+ 				identifier	- identifier for the edit type (just 0 so far)
+ 				reason		- reason for callback
+ 
+*******************************************************************************/
+
+static void AUI_profile_name_edit_cb(T_MFW_HND parent_win, UBYTE identifier, UBYTE reason)
+{
+   	T_WAP_DATA 		*data		= AUI_wap_data();
+   	T_WAP_VIEW	*View;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION(" AUI_profile_name_edit_cb");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	View = data->View;
+	
+	switch (reason)				
+	{
+		case INFO_KCD_HUP:
+		case INFO_KCD_RIGHT:
+			AUI_destroy(data->win, EDIT_WIN);	/* Right soft key kills editor */
+			break;
+		
+		case INFO_KCD_LEFT:
+
+			/* cq12466 MZ Destroy the editor related window */
+			AUI_destroy(data->win, EDIT_WIN  );
+
+			/* Change profile name */
+#ifdef NEW_EDITOR
+			ATB_wap_entry_change(View->ProfilesList, data->Buffer, View->ProfileId);
+#else /* NEW_EDITOR */
+			ATB_wap_entry_change(View->ProfilesList, &data->Buffer[2], View->ProfileId);
+#endif /* NEW_EDITOR */			
+			ATB_wap_profile_save(View); /* Save change to flash */
+			
+			/* cq12466 MZ Display the confirmation screen only and return to the WAP profile 
+			     settings list. */
+			AUI_info_dialog(data->win, TxtChanged, NULL);	
+			
+			break;
+			
+		default:
+			break;
+	}
+	
+	return;
+}
+		
+
+/*******************************************************************************
+
+ $Function:    	AUI_dialupNumber
+
+ $Description:	Opens up a numeric edit screen for editing the dialup number
+    	     
+ $Returns:		none.
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_dialupNumber(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_dialup_number");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	strcpy(data->Buffer, data->View->Profile->DialupNumber);
+	AUI_number_edit(data->win, WAP_DIALUP_NUMBER, TxtDialupNumber);
+
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_IPAddress1
+
+ $Description:	Opens up a numeric edit screen for editing the primary IP address
+    	     
+ $Returns:		none.
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_IPAddress1(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+#ifdef NEW_EDITOR
+	T_AUI_EDITOR_DATA	editor_data;
+#else
+	T_EDITOR_DATA	editor_data;
+#endif /* NEW_EDITOR */
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_IPAddress1");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	/* Copy IP address into edit buffer */
+	
+	strncpy(data->Buffer, data->View->Profile->IPAddress1, IPADDRESS_MAX_LEN+1);
+
+	/* Set up editor */
+
+#ifdef NEW_EDITOR
+	AUI_standard_editor(&editor_data, WAP_IP_ADDRESS1, ED_MODE_FORMATTED, TxtIPAddress, (T_AUI_EDIT_CB)AUI_number_edit_cb);
+	AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)data->Buffer, IPADDRESS_MAX_LEN+1);
+	AUI_edit_SetAltTextStr(&editor_data, 1, TxtNull, TRUE, TxtSoftBack);
+	AUI_edit_SetFormatStr(&editor_data, "NNN\\.NNN\\.NNN\\.NNN", TRUE, '0');
+	
+	data->edit_win = AUI_edit_Start(data->win, &editor_data);
+#else /* NEW_EDITOR */
+	AUI_standard_editor(&editor_data, data->Buffer, IPADDRESS_MAX_LEN, FORMAT_MODE, (T_EDIT_CB)AUI_number_edit_cb);
+	editor_data.Identifier			= WAP_IP_ADDRESS1;             
+	editor_data.TextId				= TxtIPAddress; /* "IP Address" rather than "IP Address 1" (less confusing)*/
+	editor_data.min_enter			= 1;
+	editor_data.FormatString		= "NNN\\.NNN\\.NNN\\.NNN";		
+	data->edit_win = editor_start(data->win, &editor_data);
+#endif /* NEW_EDITOR */
+
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_IPAddress2
+
+ $Description:	Opens up a numeric edit screen for editing the secondary IP address
+    	     
+ $Returns:		none.
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_IPAddress2(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+#ifdef NEW_EDITOR
+	T_AUI_EDITOR_DATA	editor_data;
+#else
+	T_EDITOR_DATA	editor_data;
+#endif /* NEW_EDITOR */
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_IPAddress2");
+#endif
+
+   	if (!data)
+   	{
+   		return 0;
+   	}
+
+	/* Copy IP address into edit buffer */
+
+	strncpy(data->Buffer, data->View->Profile->IPAddress2, IPADDRESS_MAX_LEN+1);
+	
+	/* Set up editor */
+
+#ifdef NEW_EDITOR
+	AUI_standard_editor(&editor_data, WAP_IP_ADDRESS2, ED_MODE_FORMATTED, TxtIPAddress2, (T_AUI_EDIT_CB)AUI_number_edit_cb);
+	AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)data->Buffer, IPADDRESS_MAX_LEN+1);
+	AUI_edit_SetAltTextStr(&editor_data, 1, TxtNull, TRUE, TxtSoftBack);
+	AUI_edit_SetFormatStr(&editor_data, "NNN\\.NNN\\.NNN\\.NNN", TRUE, '0');
+	
+	data->edit_win = AUI_edit_Start(data->win, &editor_data);
+#else /* NEW_EDITOR */
+	AUI_standard_editor(&editor_data, data->Buffer, IPADDRESS_MAX_LEN, FORMAT_MODE, (T_EDIT_CB)AUI_number_edit_cb);
+	editor_data.Identifier			= WAP_IP_ADDRESS2;             
+	editor_data.TextId				= TxtIPAddress2;
+	editor_data.min_enter			= 1;
+	editor_data.FormatString		= "NNN\\.NNN\\.NNN\\.NNN";		
+	data->edit_win = editor_start(data->win, &editor_data);
+#endif /* NEW_EDITOR */
+
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_Port1
+
+ $Description:	Opens up a numeric edit screen for editing the primary port
+    	     
+ $Returns:		none.
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_Port1(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_Port1");
+#endif
+
+   	if (!data)
+   	{
+   		return 0;
+	}
+
+	sprintf(data->Buffer, "%d", data->View->Profile->Port1);
+	AUI_number_edit(data->win, WAP_PORT1, TxtPort1);
+
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_Port2
+
+ $Description:	Opens up a numeric edit screen for editing the secondary port
+    	     
+ $Returns:		none.
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_Port2(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_Port2");
+#endif
+
+   	if (!data)
+   	{
+   		return 0;
+   	}
+   	
+	sprintf(data->Buffer, "%d", data->View->Profile->Port2);
+	AUI_number_edit(data->win, WAP_PORT2, TxtPort2);
+
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_APN
+
+ $Description:	Opens up a numeric edit screen for editing the APN
+    	     
+ $Returns:		none.
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_APN(MfwMnu* menu, MfwMnuItem* item)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_APN");
+#endif
+
+	AUI_edit(NULL,WAP_EDIT_APN, TxtAPN, URL_MAX_LEN);
+
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_username
+
+ $Description:	Opens up a text edit screen for editing the ISP username
+    	     
+ $Returns:		none.
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_username(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+#ifdef NEW_EDITOR
+	T_AUI_EDITOR_DATA	editor_data;
+#else
+	T_EDITOR_DATA	editor_data;
+#endif /* NEW_EDITOR */
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_username");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	/* Copy name into editing buffer */
+
+	strncpy(data->Buffer, data->View->Profile->Username, USERNAME_MAX_LEN+1);
+
+	/* Set up editor */
+
+#ifdef NEW_EDITOR
+	AUI_standard_editor(&editor_data, 0, ED_MODE_ALPHA, TxtISPUsername, (T_AUI_EDIT_CB)AUI_username_cb);
+	AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)data->Buffer, USERNAME_MAX_LEN+1);
+			
+	data->edit_win = AUI_edit_Start(data->win, &editor_data);
+	
+#else /* NEW_EDITOR */
+	AUI_standard_editor(&editor_data, data->Buffer, USERNAME_MAX_LEN, ALPHA_MODE, (T_EDIT_CB)AUI_username_cb);
+	
+	editor_data.TextId				= TxtISPUsername;
+	editor_data.hide				= FALSE;
+			
+	data->edit_win = editor_start(data->win, &editor_data);
+#endif /* NEW_EDITOR */
+
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_username_cb
+
+ $Description:	Callback function for editing the ISP username
+ 
+ $Returns:		void
+
+ $Arguments:	parent_win	- the WAP data window
+ 				identifier	- identifier for the edit type (just 0 so far)
+ 				reason		- reason for callback
+ 
+*******************************************************************************/
+
+static void AUI_username_cb(T_MFW_HND parent_win, USHORT identifier, SHORT reason)
+{
+   	T_WAP_DATA 		*data		= AUI_wap_data();
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION(" AUI_username_cb");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	switch (reason)				
+	{
+		case INFO_KCD_HUP:
+		case INFO_KCD_RIGHT:
+			AUI_destroy(data->win, EDIT_WIN);	/* Right soft key kills editor */
+			break;
+		
+		case INFO_KCD_LEFT:
+			AUI_destroy(data->win, EDIT_WIN);						/* Kill editor */
+			strcpy(data->View->Profile->Username, data->Buffer);	/* Change username */
+			ATB_wap_profile_save(data->View);						/* Save change to flash */
+			AUI_info_dialog(data->win, TxtChanged, NULL);			/* Display "Changed" message */
+			break;
+		default:
+			break;
+	}
+	
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_password
+
+ $Description:	Opens up a text edit screen for editing the ISP password
+    	     
+ $Returns:		none.
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_password(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+#ifdef NEW_EDITOR
+	T_AUI_EDITOR_DATA	editor_data;
+#else
+	T_EDITOR_DATA	editor_data;
+#endif /* NEW_EDITOR */
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_password");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	/* Copy password into editing buffer */
+	
+	strncpy(data->Buffer, data->View->Profile->Password, PASSWORD_MAX_LEN+1);
+
+	/* Set up editor */
+
+#ifdef NEW_EDITOR
+	AUI_standard_editor(&editor_data, 0, ED_MODE_ALPHA | ED_MODE_HIDDEN, TxtISPPassword, (T_AUI_EDIT_CB)AUI_password_cb);
+	AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)data->Buffer, PASSWORD_MAX_LEN+1);
+			
+	data->edit_win = AUI_edit_Start(data->win, &editor_data);
+#else /* NEW_EDITOR */
+	AUI_standard_editor(&editor_data, data->Buffer, PASSWORD_MAX_LEN, ALPHA_MODE, (T_EDIT_CB)AUI_password_cb);
+	
+	editor_data.TextId				= TxtISPPassword;
+	editor_data.hide				= TRUE;				/* Password is hidden (*****) */
+			
+	data->edit_win = editor_start(data->win, &editor_data);
+#endif /* NEW_EDITOR */
+
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_password_cb
+
+ $Description:	Callback function for editing the ISP password
+ 
+ $Returns:		void
+
+ $Arguments:	parent_win	- the WAP data window
+ 				identifier	- identifier for the edit type (just 0 so far)
+ 				reason		- reason for callback
+ 
+*******************************************************************************/
+
+static void AUI_password_cb(T_MFW_HND parent_win, USHORT identifier, SHORT reason)
+{
+  	T_WAP_DATA 		*data		= AUI_wap_data();
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION(" AUI_password_cb");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	switch (reason)				
+	{
+		case INFO_KCD_HUP:
+		case INFO_KCD_RIGHT:
+			AUI_destroy(data->win, EDIT_WIN);					/* Right soft key kills editor */
+			break;
+		
+		case INFO_KCD_LEFT:
+			AUI_destroy(data->win, EDIT_WIN);					/* Kill editor */
+			strcpy(data->View->Profile->Password, data->Buffer);	/* Change password */
+			ATB_wap_profile_save(data->View);					/* Save change to flash */
+			AUI_info_dialog(data->win, TxtChanged, NULL);		/* Display "Changed" message */
+			break;
+		default:
+			break;
+	}
+	
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_response_timer
+
+ $Description:	Opens up a numeric edit screen for editing the server number
+    	     
+ $Returns:		none.
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+int AUI_response_timer(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_response_timer");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	sprintf(data->Buffer, "%d", data->View->Profile->ResponseTimer);
+	AUI_number_edit(data->win, WAP_RESPONSE_TIMER, TxtResponseTimer);
+
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_number_edit
+
+ $Description:	Opens up a numeric edit screen.
+ 				The digits to be edited should be in data->Buffer.
+    	     
+ $Returns:		none.
+
+ $Arguments:	parent_win	- the WAP data window
+ 				identifier	- specifies which edit screen it is (server no. etc)
+ 				prompt		- prompt, e.g "IP Address"
+ 
+*******************************************************************************/
+
+int AUI_number_edit(T_MFW_HND parent_win, int identifier, USHORT prompt)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+#ifdef NEW_EDITOR
+	T_AUI_EDITOR_DATA	editor_data;
+#else
+	T_EDITOR_DATA	editor_data;
+#endif /* NEW_EDITOR */
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	/* Set up editor */
+
+#ifdef NEW_EDITOR
+	AUI_standard_editor(&editor_data, identifier, 0, prompt, (T_AUI_EDIT_CB)AUI_number_edit_cb);
+	AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)data->Buffer, NUMBER_MAX_LEN+1);
+	AUI_edit_SetAltTextStr(&editor_data, 1, TxtNull, TRUE, TxtSoftBack);
+			
+	data->edit_win = AUI_edit_Start(parent_win, &editor_data);
+	
+#else /* NEW_EDITOR */
+	AUI_standard_editor(&editor_data, data->Buffer, NUMBER_MAX_LEN, DIGITS_MODE, (T_EDIT_CB)AUI_number_edit_cb);
+	
+	editor_data.Identifier			= identifier;       
+	editor_data.TextId				= prompt;
+	editor_data.min_enter			= 1;
+			
+	data->edit_win = editor_start(parent_win, &editor_data);
+#endif /* NEW_EDITOR */
+
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	validate_IP_address
+
+ $Description:	Check the validity of an IP address in the form 255.255.255.255
+ 
+ $Returns:		BOOL, TRUE if valid, else FALSE
+
+ $Arguments:	buffer - the ASCIIZ string containing the IP address to validate
+ 
+*******************************************************************************/
+
+static BOOL validate_IP_address(char *buffer)
+{
+    char temp[16];
+    char *token;
+    int  value;
+    
+    if (strlen(buffer) > sizeof(temp)-1)
+        return FALSE;
+
+    strcpy(temp, buffer);
+    for (token = strtok(temp, ".");
+         token != NULL;
+         token = strtok(NULL, "."))
+    {
+        value = atoi(token);
+
+		if ((value < 0) || (value > 255))
+            return FALSE;
+    }
+         
+    return TRUE;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_number_edit_cb
+
+ $Description:	Callback function for editing a number
+ 
+ $Returns:		void
+
+ $Arguments:	parent_win	- the WAP data window
+ 				identifier	- identifier for the edit type (server or service no.)
+ 				reason		- reason for callback
+ 
+*******************************************************************************/
+
+static void AUI_number_edit_cb(T_MFW_HND parent_win, USHORT identifier, SHORT reason)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	T_WAP_VIEW		*View;
+	T_WAP_PROFILE	*Profile;
+	int				value;
+    BOOL valid;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_number_edit_cb");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+
+	View	= data->View;
+	Profile	= View->Profile;
+
+	switch (reason)				
+	{
+		case INFO_KCD_HUP:
+		case INFO_KCD_RIGHT:
+			AUI_destroy(data->win, EDIT_WIN);		/* Just kill window if back pressed */
+			break;
+		
+		case INFO_KCD_LEFT:
+		    {		        
+    			switch(identifier)
+    			{
+    				case WAP_DIALUP_NUMBER:
+    					/* Copy the dialup number to the Profile */
+    					strcpy(Profile->DialupNumber, data->Buffer);
+						valid = TRUE;
+    					break;
+
+    				case WAP_IP_ADDRESS1:
+    					valid = validate_IP_address(data->Buffer);
+    					
+    				    if (valid)
+    				    {
+    				    	/* Copy the IP address to the Profile */
+    					    strcpy(Profile->IPAddress1, data->Buffer);
+						}
+    					else
+						{
+    					    bookShowInformation(data->win, TxtOutofRange, NULL, NULL);
+						}
+    					break;
+
+    				case WAP_IP_ADDRESS2:
+    				    valid = validate_IP_address(data->Buffer);
+    					
+    				    if (valid)
+    				    {
+    				    	/* Copy the IP address to the Profile */
+    					    strcpy(Profile->IPAddress2, data->Buffer);
+						}
+    					else
+						{
+    					    bookShowInformation(data->win, TxtOutofRange, NULL, NULL);
+						}
+    					break;
+
+    				case WAP_PORT1:
+    					value = atoi(data->Buffer);
+    					if (value>=0 && value<=0xFFFF)
+    					{
+    						/* Store the port number in the Profile */
+    						valid = TRUE;
+    						Profile->Port1 = value;
+    					}
+    					else
+    					{
+    						valid = FALSE;
+    					    bookShowInformation(data->win, TxtOutofRange, NULL, NULL);
+						}
+    					break;
+
+    				case WAP_PORT2:
+   						value = atoi(data->Buffer);
+    					if (value>=0 && value<=0xFFFF)
+    					{
+    						/* Store the port number in the Profile */
+    						valid = TRUE;
+    						Profile->Port2 = value;
+    					}
+    					else
+    					{
+    						valid = FALSE;
+    					    bookShowInformation(data->win, TxtOutofRange, NULL, NULL);
+						}
+    					break;
+
+    				case WAP_RESPONSE_TIMER:
+    					value = atoi(data->Buffer);
+    					if (value>=0 && value<=0xFFFF)
+    					{
+    						/* Store the response timer in the Profile */
+    						valid = TRUE;
+    						Profile->ResponseTimer = value;
+    					}
+    					else
+    					{
+    						valid = FALSE;
+    					    bookShowInformation(data->win, TxtOutofRange, NULL, NULL);
+						}
+    					break;
+    			}
+    			
+    			if (valid)
+    			{
+        			AUI_destroy(data->win, EDIT_WIN);
+        			ATB_wap_profile_save(View);						/* Save change to flash */
+        			AUI_info_dialog(data->win, TxtChanged, NULL);	/* Display "Changed" message */
+    			}
+		    } 
+			break;
+		
+		default:
+			break;
+	}
+	
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	MMI_AUI_homepage_edit
+
+ $Description:	Opens up a text edit screen for changing the homepage URL
+    	     
+ $Returns:		MFW_EVENT_CONSUMED
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item
+ 
+*******************************************************************************/
+
+int AUI_homepage_edit(MfwMnu* menu, MfwMnuItem* item)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_homepage_edit");
+#endif
+
+	AUI_edit(NULL,WAP_EDIT_HOMEPAGE, TxtEditURL, URL_MAX_LEN);
+
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_connectionType
+
+ $Description:	Sets cursor position for this menu based on the current settings
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item
+ 
+*******************************************************************************/
+
+int AUI_connectionType(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 	*data = AUI_wap_data();
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_connectionType");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	/* Open the menu */
+	/* cq12466 MZ store sub options info for later use. */
+	data->sub_sub_options_win  = bookMenuStart(data->win, WAPConnectionTypeAttributes(), 0);
+	SEND_EVENT(data->sub_sub_options_win, DEFAULT_OPTION, NULL, &data->View->Profile->ConnectionType);
+	
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_connectionType_set
+
+ $Description:	Set WAP connection to temporary or permanent
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item
+ 
+*******************************************************************************/
+
+int AUI_connectionType_set(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 	*data	= AUI_wap_data();
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_connectionType_set");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	/* Change connection type */
+	
+	data->View->Profile->ConnectionType = menu->lCursor[menu->level];
+	ATB_wap_profile_save(data->View);		/* Save change to flash */
+	AUI_info_dialog(data->win, TxtChanged, NULL);    /* "Changed" */
+	
+       /* cq 12466 MZ return to sub menu options dialog.*/
+	bookMenuDestroy(data->sub_sub_options_win);
+	data->sub_sub_options_win = NULL;
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_connectionSpeed
+
+ $Description:	Sets cursor position for this menu based on the current settings
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item
+ 
+*******************************************************************************/
+
+int AUI_connectionSpeed(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 	*data	= AUI_wap_data();
+	T_MFW_HND setting_win;
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_connectionSpeed");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+	
+	/* Open the menu */
+	
+	setting_win = bookMenuStart(data->win, WAPConnectionSpeedAttributes(), 0);
+	SEND_EVENT(setting_win, DEFAULT_OPTION, NULL, &data->View->Profile->ConnectionSpeed);
+	
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_connectionSpeed_set
+
+ $Description:	Set WAP connection speed to analogue, digital
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item
+ 
+*******************************************************************************/
+
+int AUI_connectionSpeed_set(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_connectionSpeed_set");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	/* Change connection speed */
+
+	data->View->Profile->ConnectionSpeed = menu->lCursor[menu->level];
+	ATB_wap_profile_save(data->View);	/* Save change to flash */
+	AUI_info_dialog(data->win, TxtChanged, NULL);
+
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_security
+
+ $Description:	Sets cursor position for this menu based on the current settings
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item
+ 
+*******************************************************************************/
+
+int AUI_security(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 	*data	= AUI_wap_data();
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_security_on");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	/* Open up the menu */
+	/* cq12466 MZ store submenu window info .*/	
+	data->sub_sub_options_win  = bookMenuStart(data->win, WAPSecurityOptionAttributes(), 0);
+	SEND_EVENT(data->sub_sub_options_win , DEFAULT_OPTION, NULL, &data->View->Profile->Security);
+
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_security_set
+
+ $Description:	Switch security on or off
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item
+ 
+*******************************************************************************/
+
+int AUI_security_set(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_security_off");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	/* Change security value */
+	
+	data->View->Profile->Security = (BOOL)menu->lCursor[menu->level];
+	ATB_wap_profile_save(data->View);	/* Save change to flash */	
+	AUI_info_dialog(data->win, TxtChanged, NULL);
+
+	/* cq12466 MZ destroy sub menu option return to previous menu. */
+	bookMenuDestroy(data->sub_sub_options_win);
+	data->sub_sub_options_win = NULL;
+	
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_access
+
+ $Description:	Sets cursor position for this menu based on the current settings
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item
+ 
+*******************************************************************************/
+
+int AUI_access(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_access");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	/* SPR#2324 - SH - Need to keep a handle of this menu,
+	 * as we'll explicitly destroy it when GPRS or Dialup is chosen */
+		
+	data->sub_sub_options_win = bookMenuStart(data->win, WAPGPRSDialupAttributes(), 0);
+	SEND_EVENT(data->sub_sub_options_win, DEFAULT_OPTION, NULL, &data->View->Profile->AccessType); // Add our own callback
+
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_access_set
+
+ $Description:	Set access type
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item
+ 
+*******************************************************************************/
+
+int AUI_access_set(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	T_DISPLAY_DATA	display_info;
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_access_set");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	/* Change access type */
+
+	data->View->Profile->AccessType  = menu->lCursor[menu->level];
+	ATB_wap_profile_save(data->View);	
+	AUI_info_dialog(data->win, TxtChanged, NULL);
+
+	/* SPR#2324 - SH - Display "Changed" dialogue.  On callback, will redisplay the
+	 * appropriate settings menu - GPRS or Dialup */
+	 
+	dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtChanged, TxtNull, COLOUR_WAP_POPUP);
+	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)AUI_access_menu, THREE_SECS, 0 );
+		
+	info_dialog(data->win, &display_info);
+
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_access_menu
+
+ $Description:	Display the appropriate menu for the access type.
+ 				SPR#2324 - SH - Added
+
+ $Returns:		None.
+
+ $Arguments:	win - the parent window
+ 				identifier - stores the access type
+ 				reson - not used.
+ 
+*******************************************************************************/
+
+static void AUI_access_menu(T_MFW_HND win, USHORT identifier, SHORT reason)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_access_menu");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+
+	/* Destroy the GPRS/Dialup menu */
+	
+	bookMenuDestroy(data->sub_sub_options_win);
+	data->sub_sub_options_win = NULL;
+
+	/* Destroy the old settings menu */
+	
+	bookMenuDestroy(data->sub_options_win);
+	data->sub_options_win = NULL;
+
+	/* Create a new settings menu of the appropriate type */
+	
+	switch(data->View->Profile->AccessType)
+	{
+		case WAP_GPRS_DATA:
+			data->sub_options_win = bookMenuStart(win, WAPGPRSProfileAttributes(), 0);
+			break;
+		case WAP_CS_DATA:
+			data->sub_options_win = bookMenuStart(win, WAPDialupProfileAttributes(), 0);
+			break;
+	}
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_savehist
+
+ $Description:	Sets cursor position for this menu based on the current settings
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item
+ 
+*******************************************************************************/
+
+int AUI_savehist(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	UBYTE			SaveHistory;
+	T_MFW_HND setting_win;
+	
+#ifdef TRACE_AUIWAP	
+	TRACE_FUNCTION("AUI_savehist");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	/* Open the menu */
+
+	setting_win = bookMenuStart(data->win, WAPSaveHistoryAttributes(), 0);
+	
+	/* SaveHistory = 1 or 0 depending on flag */
+
+	SaveHistory = (data->View->Status & WAP_STATUS_SAVEHISTORY)/WAP_STATUS_SAVEHISTORY;
+	SEND_EVENT(setting_win, DEFAULT_OPTION, NULL, &SaveHistory);
+
+	return 1;
+}
+
+/*******************************************************************************
+
+ $Function:    	AUI_savehist_set
+
+ $Description:	Set save history on or off
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item
+ 
+*******************************************************************************/
+
+int AUI_savehist_set(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_savehist_set");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	if (menu->lCursor[menu->level])
+		data->View->Status |= WAP_STATUS_SAVEHISTORY;
+	else
+		data->View->Status &= ~WAP_STATUS_SAVEHISTORY;
+	
+	ATB_wap_profile_save(data->View);	/* Save change to flash */
+	AUI_info_dialog(data->win, TxtChanged, NULL);
+
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_scaleimages
+
+ $Description:	Sets cursor position for this menu based on the current settings
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item
+ 
+*******************************************************************************/
+
+int AUI_scaleimages(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	UBYTE			ScaleImages;
+	T_MFW_HND setting_win;
+	
+#ifdef TRACE_AUIWAP	
+	TRACE_FUNCTION("AUI_scaleimages");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	/* Open the menu */
+	
+	setting_win = bookMenuStart(data->win, WAPScaleImagesAttributes(), 0);
+
+	/* ScaleImages =  1 or 0 depending on flag */
+	
+	ScaleImages = (data->View->Status & WAP_STATUS_SCALEIMAGES)/WAP_STATUS_SCALEIMAGES;
+	SEND_EVENT(setting_win, DEFAULT_OPTION, NULL, &ScaleImages);
+
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_scaleimages_set
+
+ $Description:	Set image scaling on or off
+ 
+ $Returns:		
+
+ $Arguments:	menu		- pointer to the current menu
+ 				item		- pointer to the current menu item
+ 
+*******************************************************************************/
+
+int AUI_scaleimages_set(MfwMnu* menu, MfwMnuItem* item)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_scaleimages_set");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	if (menu->lCursor[menu->level])
+		data->View->Status |= WAP_STATUS_SCALEIMAGES;
+	else
+		data->View->Status &= ~WAP_STATUS_SCALEIMAGES;
+	
+	ATB_wap_profile_save(data->View);	/* Save change to flash */
+	AUI_info_dialog(data->win, TxtChanged, NULL);
+
+	return 1;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_info_dialog
+
+ $Description:	Display message for three seconds
+ 
+ $Returns:		None.
+
+ $Arguments:	parent_win		- Parent window
+ 				TextId 			- Id of text string to display
+ 
+*******************************************************************************/
+
+static void AUI_info_dialog(T_MFW_HND parent_win, USHORT TxtId1, USHORT TxtId2)
+{
+	T_DISPLAY_DATA	display_info;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_info_dialog");
+#endif
+	dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtId1, TxtId2, COLOUR_WAP_POPUP);
+	dlg_initDisplayData_events( &display_info, NULL, THREE_SECS, 0 );
+	display_info.Identifier		= 0;
+	
+	info_dialog(parent_win, &display_info);
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_error_dialog
+
+ $Description:	Display error message for three seconds
+ 
+ $Returns:		None.
+
+ $Arguments:	View			- The current view
+ 				errorCode		- Number of the error
+ 
+*******************************************************************************/
+
+void AUI_error_dialog(T_WAP_VIEW *View, SHORT errorCode)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+	T_DISPLAY_DATA	display_info;
+	static char errorNumber[20];
+	USHORT errId1, errId2;
+	USHORT lsk, rsk;
+	SHORT newCode;
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_error_dialog");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	/* Intercept fatal error */
+
+	if (errorCode==8002)
+	{
+		TRACE_EVENT("WAP MEMORY FULL");
+			
+		dlg_initDisplayData_TextId( &display_info, TxtNull, TxtSoftOK, TxtFatalError, TxtErrorOutOfMem, COLOUR_WAP_POPUP);
+		dlg_initDisplayData_events( &display_info, NULL, FOREVER, KEY_RIGHT);
+		info_dialog(data->parent_win, &display_info);
+		AUI_destroy(data->win, ALL_WIN);
+
+		return;
+	}
+
+	/* Convert the error code to text */
+	TRACE_EVENT_P1("WAP Error: %d", errorCode);
+
+	/* Handle standard error */
+	
+	errId1 = TxtNull;
+	errId2 = TxtNull;
+	newCode = errorCode;
+	
+	if ((errorCode>=69 && errorCode<=101)
+		|| (errorCode>=64 && errorCode<=67)
+		|| errorCode==1013)
+	{
+		newCode = ERROR_COMMUNICATION_SERVER;
+	}
+
+	else if ((errorCode>=0 && errorCode<=9)
+		|| (errorCode>=224 && errorCode<=227)
+		|| (errorCode>=229 && errorCode<=234)
+		|| (errorCode>=5300 && errorCode<=5399)
+		|| errorCode==1010 || errorCode==1018)
+	{
+		newCode = ERROR_COMMUNICATION_GATEWAY;
+	}
+
+	else if ((errorCode>=1301 && errorCode<=3014)
+		|| (errorCode>=4002 && errorCode<=5099)
+		|| (errorCode>=5200 && errorCode<=5299)
+		|| (errorCode>=5400 && errorCode<=5499)
+		|| (errorCode>=6001 && errorCode<=8001)
+		|| errorCode==1003 || errorCode==1004
+		|| errorCode==1012 || errorCode==1015
+		|| errorCode==1016 || errorCode==1019
+		|| errorCode==1104)
+	{
+		newCode = ERROR_UNEXPECTED;
+	}
+
+	else if (errorCode>=5100 && errorCode<=5199)
+	{
+		newCode = ERROR_SECURITY;
+	}
+	
+	switch(newCode)
+	{	
+		case ERROR_GPRS_NOT_SUPPORTED:
+			errId1 = TxtGPRS;
+			errId2 = TxtNotSupported;
+			break;
+
+		case ERROR_CALL_DISCONNECTED:
+			errId1 = TxtConnection;
+			errId2 = TxtFailed;
+			break;
+
+		case 8001:
+			errId1 = TxtErrorMemLow; break;
+			
+		/* Error type 1 */
+		case 68:
+			errId2 = TxtPageNotFound; break;
+		/* Error type 2 */
+		case 1008:
+			errId2 = TxtInvalidURL; break;
+		/* Error type 3 */
+		case 1009:
+			errId2 = TxtNoResponse; break;
+		/* Error type 4 */
+		case 1011: case 1017: case 1207:
+			errId2 = TxtAccessDenied; break;
+		/* Error type 5 */
+		case 1005: case 1006: case 1007:
+		case 1020: case 1101: case 1102:
+		case 1105: case 1108:
+			errId2 = TxtErrorInPage; break;
+		/* Error type 6 */	
+		case 1202: case 1203: case 1204:
+		case 1205: case 1206: case 1208:
+		case 1209: case 1210: case 1211:
+		case 1212: case 1213:
+			errId2 = TxtScriptError; break;
+		/* Error type 7 */
+		case ERROR_COMMUNICATION_SERVER:
+			errId2 = TxtServerError; break;
+		/* Error type 8 */
+		case ERROR_COMMUNICATION_GATEWAY:
+			errId2 = TxtGatewayError; break;
+		/* Error type 9 */
+		case ERROR_UNEXPECTED:
+			errId2 = TxtUnexpectedErr; break;
+		/* Error type 10 */
+		case 1103:
+			errId2 = TxtCharacterSet; break;
+		/* Error type 11 */
+		case 1106:
+			errId2 = TxtWBXMLError; break;
+		/* Error type 13 */
+		case 8002:
+			/* This error already intercepted above */
+		case 1001:
+			errId2 = TxtErrorOutOfMem; break;
+		/* Error type 14 */
+		case 228:
+			errId2 = TxtGatewayBusy; break;
+		/* Error type 15 */
+		case 1014:
+			errId2 = TxtNoResponse; break;
+		/* Error type 16 */
+		case ERROR_SECURITY:
+			errId2 = TxtSecurityFail; break;
+			
+		case 4001:
+			errId2 = TxtNoResponse;
+			break;
+
+		default:
+			if (errorCode<10)
+				errId2 = TxtErrorWTP;
+			else if (errorCode<100)
+				errId2 = TxtErrorHTTP;
+			else if (errorCode<1000)
+				errId2 = TxtErrorWSP;
+			else if (errorCode<2000)
+				errId2 = TxtErrorWAE;
+			else if (errorCode<3000)
+				errId2 = TxtErrorWSPCL;
+			else if (errorCode<4000)
+				errId2 = TxtErrorWSPCM;
+			else if (errorCode<5000)
+				errId2 = TxtErrorWTP;
+			else if (errorCode<6000)
+				errId2 = TxtErrorWTLS;
+			else if (errorCode<7000)
+				errId2 = TxtErrorWDP;
+			else if (errorCode<8000)
+				errId2 = TxtErrorUDCP;
+			break;
+	}
+	
+	/* Decide on soft keys.  If browser is not present, can only exit. */
+
+	if (data->browser_win)
+	{
+		lsk = TxtReload;
+		rsk = TxtSoftBack;
+	}
+	else
+	{
+		lsk = TxtNull;
+		rsk = TxtExit;
+	}
+	
+	/* Set up dialog display data */
+	
+	dlg_initDisplayData_TextId( &display_info, lsk, rsk, errId1, errId2, COLOUR_WAP_POPUP);
+	dlg_initDisplayData_events( &display_info, NULL, FOREVER, KEY_LEFT | KEY_RIGHT);
+
+	/* If no errId1, use "Error <num>" */
+
+	if (errId1==TxtNull)
+	{
+		sprintf(errorNumber, "%s %d", GET_TEXT(TxtError), errorCode);
+		display_info.TextString = errorNumber;
+	}
+
+	if (errId2==TxtNull)
+	{
+		errId2 = TxtUnknown;
+	}
+
+	display_info.Callback		= (T_VOID_FUNC)AUI_error_cb;
+
+	/* Destroy any previous error dialog */
+	
+	if (data->error_win)
+	{
+		SEND_EVENT(data->error_win, DIALOG_DESTROY, 0, 0);
+	}
+	data->error_win = info_dialog(data->win, &display_info);
+	
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_error_cb
+
+ $Description:	Callback function for the WAP error dialog.
+ 
+ $Returns:		void
+
+ $Arguments:	win			- the WAP data window
+ 				identifier	- this is the dialog id
+ 				reason		- reason for callback
+ 
+*******************************************************************************/
+
+static void AUI_error_cb(T_MFW_HND win, USHORT identifier, SHORT reason)
+{
+   	T_WAP_DATA *data = AUI_wap_data();
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_error_cb");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+
+	/* Error window has been destroyed */
+	
+	data->error_win = NULL;
+	data->update_forbid = FALSE;
+
+	/* Destroy any connecting dialog */
+	
+	AUI_destroy(data->win, CONNECT_WIN);
+
+	switch(reason)
+	{
+		/* Right soft key: Back*/
+		
+		case INFO_KCD_RIGHT:
+			if (data->browser_win && data->View)
+			{
+				ATB_wap_card_go_back(data->View);
+			}
+			else	/* Connecting failed, exit */
+			{
+				AUI_destroy(data->win, RETURN_TO_MENU);
+			}
+			break;
+
+		/* Left soft key: Reload */
+		
+		case INFO_KCD_LEFT:
+			/* If browser window is not present, try
+			 * to connect again */
+			if (data->browser_win)
+			{
+				ATB_wap_card_refresh(data->View);
+			}
+			else
+			{
+				AUI_connect_URL(data->win, data->View->URL);
+			}
+			break;
+	}
+	
+	return;
+}
+
+
+#ifdef NEW_EDITOR
+//    Nov 05, 2005 REF: OMAPS00044867 Sumanth Kumar.C
+//    Fix: Define an alternate positon for the standard editor.
+#define EDT_ALT_POS 1
+
+/*******************************************************************************
+
+ $Function:    	AUI_standard_editor
+
+ $Description:	Sets up standard attributes for a WAP editor
+ 
+ $Returns:		None
+
+ $Arguments:	editor_data		- pointer to existing editor_data
+ 				buffer			- Text buffer to edit
+ 				size 			- maximum length of editor
+ 				mode			- editor mode
+ 				callback		- callback function
+ 				unicode			- TRUE if editor is unicode
+ 
+*******************************************************************************/
+
+static void AUI_standard_editor(T_AUI_EDITOR_DATA *editor_data, USHORT identifier, USHORT mode, USHORT titleId, T_AUI_EDIT_CB Callback)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_standard_editor");
+#endif
+
+	AUI_edit_SetDefault(editor_data);
+	AUI_edit_SetEvents(editor_data, identifier, FALSE, FOREVER, Callback);
+	AUI_edit_SetTextStr(editor_data, TxtSoftOK, TxtDelete, titleId, NULL);
+
+//    Nov 05, 2005 REF: OMAPS00044867 Sumanth Kumar.C
+//    Fix: AUI_edit_SetAltTextStr is added in the AUI_Standard_editor() with soft key back option.
+
+	AUI_edit_SetAltTextStr(editor_data, EDT_ALT_POS, TxtSoftOK, TRUE, TxtSoftBack);
+	AUI_edit_SetMode(editor_data, mode, DS_CURSOR_BAR);
+	AUI_edit_SetDisplay(editor_data, ZONE_WAP_EDITOR, COLOUR_EDITOR, EDITOR_FONT);
+	
+    return;
+}
+
+#else /* NEW_EDITOR */
+
+/*******************************************************************************
+
+ $Function:    	AUI_standard_editor
+
+ $Description:	Sets up standard attributes for a WAP editor
+ 
+ $Returns:		None
+
+ $Arguments:	editor_data		- pointer to existing editor_data
+ 				buffer			- Text buffer to edit
+ 				size 			- maximum length of editor
+ 				mode			- editor mode
+ 				callback		- callback function
+ 
+*******************************************************************************/
+
+static void AUI_standard_editor(T_EDITOR_DATA *editor_data, char *buffer, U16 size, UBYTE mode, T_EDIT_CB callback)
+{
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_standard_editor");
+#endif
+	editor_attr_init(&editor_data->editor_attr, ZONE_WAP_EDITOR, edtCurBar1, NULL, buffer, size, COLOUR_EDITOR );
+	editor_data->editor_attr.font		= 0;
+
+	editor_data_init( editor_data, callback, TxtSoftOK, TxtDelete, NULL, 0, mode, FOREVER);
+	editor_data->destroyEditor			= FALSE;		/* Default: don't destroy editor on exit */
+	editor_data->hide					= FALSE;		/* Default: input not hidden */
+	editor_data->Identifier				= 0;
+	
+    return;
+}
+
+#endif /* NEW_EDITOR */
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_input_dialog_open
+
+ $Description:	Prompts the MMI to open an input dialog given a particular format and
+ 				string.
+ 				
+ $Returns:		WAP_OK if successful, WAP_FAIL if otherwise
+
+ $Arguments:	Dialog			- Dialog information
+ 
+*******************************************************************************/
+
+T_WAP_RES AUI_wap_input_dialog_open(T_WAP_MMI_INPUT_DIALOG_REQ *Dialog)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();												/* WAP data */
+	USHORT			formatIndex;
+	USHORT			bufferIndex;
+	USHORT			bufferLength;
+#ifdef NEW_EDITOR
+	T_AUI_EDITOR_DATA editor_data;
+#else
+	T_EDITOR_DATA	editor_data;
+#endif /* NEW_EDITOR */
+	USHORT			titlelen;
+	USHORT			mode;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_wap_input_dialog_open");
+#endif
+	
+	if (!data)
+	{
+		return 0;
+	}
+
+	/* Set up editor */
+
+#ifdef NEW_EDITOR
+	AUI_standard_editor(&editor_data, Dialog->dialog_id, ED_MODE_ALPHA, TxtNull, (T_AUI_EDIT_CB)AUI_input_cb);
+#endif /* NEW_EDITOR */
+
+	data->gen_pointer = Dialog->dialog_pointer;		/* Needed by GLE */
+
+	if (Dialog->size > INPUT_MAX_LEN)
+	{
+		Dialog->size = INPUT_MAX_LEN;
+	}
+
+	/* SPR#2393 - SH - Ensure input buffer isn't > max size */
+	
+	if (Dialog->input_length > Dialog->size)
+	{
+		Dialog->input_length = Dialog->size;
+	}
+	
+	/* Terminate buffer */
+	
+	Dialog->Input[Dialog->input_length] = 0;
+	
+	/* Convert input string */
+	ATB_uc_text_convert(Dialog->Input, Dialog->input_length);
+
+#ifdef NEW_EDITOR
+	/* Buffer is unicode */
+	bufferLength = ATB_uc_text_copy((USHORT *)data->Buffer, Dialog->Input, INPUT_MAX_LEN);
+#else
+	/* Buffer is ascii */
+	bufferLength = ATB_uc_to_char(data->Buffer, Dialog->Input, INPUT_MAX_LEN);
+#endif /* NEW_EDITOR */
+
+	/* Convert title to MMI unicode and crop it to fit screen */
+
+	AUI_wap_string_alloc(&data->Message, CARD_TITLE_MAX_LEN);
+
+	if (Dialog->title_length>0)
+	{
+		titlelen = AUI_text_to_uc(data->Message.text, Dialog->Title, CARD_TITLE_MAX_LEN); 
+		ATB_uc_text_crop(&data->Message.text[1], titlelen, WAP_SCREEN_WIDTH);
+#ifdef NEW_EDITOR
+		AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtDelete, TxtNull, (UBYTE *)data->Message.text);
+#endif /* NEW_EDITOR */
+	}
+	else
+	{
+#ifdef NEW_EDITOR
+		AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtDelete, TxtUntitled, NULL);
+#else
+		data->Message.text[0] = 0x7F80;
+		AUI_wap_stringID(&data->Message.text[1], CARD_TITLE_MAX_LEN, WAP_STRING_UNTITLED);
+#endif /* NEW_EDITOR */
+	}
+	
+	/* Convert format characters to ascii */
+
+	ATB_uc_text_convert((USHORT *)Dialog->Format, (USHORT)Dialog->format_length);
+	ATB_uc_to_char(data->Buffer2, Dialog->Format, (USHORT)Dialog->format_length);
+
+	/* Set up standard editor parameters */
+
+#ifdef NEW_EDITOR
+	AUI_edit_SetBuffer(&editor_data, ATB_DCS_UNICODE, (UBYTE *)data->Buffer, Dialog->size+1);
+
+	mode = ED_MODE_ALPHA;
+	
+	if (Dialog->format_length != 0)
+	{
+		AUI_edit_SetFormatStr(&editor_data, data->Buffer2, TRUE, ' ');
+		mode |= ED_MODE_FORMATTED;
+	}
+	
+	if (Dialog->is_password)
+	{
+		mode |= ED_MODE_HIDDEN;
+	}
+	
+	if (!Dialog->empty_ok)
+	{
+		AUI_edit_SetAltTextStr(&editor_data, 1, TxtNull, TRUE, TxtSoftBack);
+	}
+
+	AUI_edit_SetMode(&editor_data, mode, DS_CURSOR_BAR);
+	
+	/* Don't update WAP browser window while editor is open */
+	
+	data->update_forbid = TRUE;
+	
+	data->edit_win = AUI_edit_Start(data->win, &editor_data);
+#else
+	AUI_standard_editor(&editor_data, data->Buffer, (Dialog->size+1), ALPHA_MODE, (T_EDIT_CB)AUI_input_cb);
+
+	/* Need to set input mode & put fixed characters into input buffer */
+	
+	if (Dialog->format_length != 0)
+	{	
+		editor_data.mode = FORMAT_MODE;
+		formatIndex = 0;
+		bufferIndex = 0;
+		
+		while (bufferIndex<Dialog->size && formatIndex<strlen(data->Buffer2))
+		{
+			/* Backslash character indicates fixed character */
+
+			if (data->Buffer2[formatIndex] == '\\')
+			{
+				formatIndex++;
+				/* Put fixed char into buffer */
+				data->Buffer[bufferIndex] = data->Buffer2[formatIndex];
+			}
+
+			/* In a delimited field... */
+
+			else if (strchr("123456789*", data->Buffer2[formatIndex]))
+			{
+				if (bufferIndex<bufferLength)	/* if we're not at the end of the string,  */
+					formatIndex--;				/* stay where we are in the formatstring */
+				else
+					formatIndex++;				/* otherwise go to end of string */
+			}
+			
+			/* If we're past the end of the existing buffer... */
+			
+			else if (bufferIndex>=bufferLength)
+			{
+				data->Buffer[bufferIndex] = ' ';	/* Fill it with empty space */
+			}
+			bufferIndex++;
+			formatIndex++;
+		}
+	
+		data->Buffer[bufferIndex] = 0;				/* Terminate the buffer string */
+	}
+
+	editor_data.Identifier = Dialog->dialog_id;		/* this is the dialog identity (to be passed to callback) */
+	editor_data.TextString = (char *)data->Message.text;	/* String to be displayed in output buffer */
+	editor_data.FormatString = data->Buffer2;			/* Provide the editor with the format string */
+
+	/* Check if input needs to be hidden */
+	
+	if (Dialog->is_password)
+	{
+		editor_data.hide = TRUE;	
+	}
+
+	/* Is an empty response OK? */
+	
+	if (!Dialog->empty_ok)
+		editor_data.min_enter = 1;
+
+	/* Don't update WAP browser window while editor is open */
+	
+	data->update_forbid = TRUE;
+	
+	data->edit_win = editor_start(data->win, &editor_data);
+#endif
+
+	return WAP_OK;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_input_cb
+
+ $Description:	Callback function for the WAP input dialog.
+ 
+ $Returns:		void
+
+ $Arguments:	win			- the WAP data window
+ 				identifier	- this is the dialog id
+ 				reason		- reason for callback
+ 
+*******************************************************************************/
+
+static void AUI_input_cb(T_MFW_HND win, USHORT identifier, SHORT reason)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+	T_MMI_WAP_INPUT_DIALOG_CNF DialogCnf;
+	BOOL edited;
+	USHORT textlen;
+
+	TRACE_FUNCTION("AUI_input_cb()");
+
+	if (!data)
+	{
+		return;
+	}
+	
+	/* Allow WAP browser window updates */
+	
+	data->update_forbid = FALSE;
+	
+	/* Destroy editor */
+	
+	AUI_destroy(data->win,EDIT_WIN);
+
+	/* Free message string */
+	AUI_wap_string_free(&data->Message);
+	
+	switch (reason)
+	{
+		case INFO_KCD_HUP:
+		case INFO_KCD_RIGHT:
+			edited = FALSE;		/* Don't change text */
+			break;
+
+		default:
+			edited = TRUE;		/* Text is changed */
+			break;
+	}
+
+	DialogCnf.object_id		= data->View->object_id;
+	DialogCnf.dialog_id		= identifier;				/* Dialog id is passed from AUI_input */
+	DialogCnf.edited 		= edited;					/* TRUE if text changed */
+	DialogCnf.dialog_pointer    = data->gen_pointer;	/* Needed by GLE */
+
+#ifdef NEW_EDITOR
+	textlen = ATB_string_UCLength((USHORT *)data->Buffer);
+#else /* NEW_EDITOR */
+	textlen = strlen(data->Buffer);
+#endif /* NEW_EDITOR */
+	
+	DialogCnf.Text = (USHORT *)AUI_wap_memory_alloc((textlen+1)*sizeof(USHORT));
+
+#ifdef NEW_EDITOR
+	/* Copy buffer text */
+	DialogCnf.text_length	= ATB_uc_text_copy(DialogCnf.Text, (USHORT *)data->Buffer, textlen);
+#else /* NEW_EDITOR */
+	/* Convert buffer text to MMI unicode */
+	DialogCnf.text_length	= ATB_char_to_uc(DialogCnf.Text, data->Buffer);
+#endif /* NEW_EDITOR */
+	
+	/* Convert to standard unicode */
+	ATB_uc_text_convert((USHORT *)DialogCnf.Text, (USHORT)DialogCnf.text_length);
+
+	ATB_trace_ushort_string(DialogCnf.Text, (USHORT)DialogCnf.text_length);
+
+	/* Send data to ATB */
+	
+	ATB_wap_input_dialog_closed(&DialogCnf);
+
+	AUI_wap_memory_free((UBYTE *)DialogCnf.Text, (textlen+1)*sizeof(USHORT));
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_password_dialog_open
+
+ $Description:	Prompts the MMI to open a password dialog.
+ 				
+ $Returns:		WAP_OK if successful, WAP_FAIL if otherwise
+
+ $Arguments:	Dialog			- Dialog information
+ 
+*******************************************************************************/
+
+T_WAP_RES AUI_wap_password_dialog_open(T_WAP_MMI_PASSWORD_DIALOG_REQ *Dialog)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+#ifdef NEW_EDITOR
+	T_AUI_EDITOR_DATA editor_data;
+#else
+	T_EDITOR_DATA	editor_data;
+#endif /* NEW_EDITOR */
+	USHORT			titlelen;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_wap_password_dialog_open");
+#endif
+
+	if (!data)
+	{
+		return WAP_FAIL;
+	}
+
+	/* SPR#2393 - Clear buffer */
+	
+	memset(data->Buffer, 0, USERNAME_MAX_LEN+1);	/* Input field is char type */
+	
+	/* Need to prompt for two separate things: the username and password! */
+
+#ifdef NEW_EDITOR
+	AUI_standard_editor(&editor_data, Dialog->dialog_id, ED_MODE_ALPHA, TxtISPUsername, (T_AUI_EDIT_CB)AUI_password_cb_1);
+	AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)data->Buffer, USERNAME_MAX_LEN+1);
+	AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtDelete, TxtISPUsername, NULL);
+
+	/* Don't update WAP browser window while editor is open */
+	
+	data->update_forbid = TRUE;
+	
+	data->edit_win = AUI_edit_Start(data->win, &editor_data);
+#else /* NEW_EDITOR */
+	AUI_standard_editor(&editor_data, data->Buffer, USERNAME_MAX_LEN, ALPHA_MODE, (T_EDIT_CB)AUI_password_cb_1);
+
+	editor_data.Identifier = Dialog->dialog_id; /* this is the dialog identity (to be passed to callback) */
+	editor_data.TextId = TxtISPUsername; /* SPR#2393 */
+	
+	/* Don't update WAP browser window while editor is open */
+	data->update_forbid = TRUE;
+	
+	data->edit_win = editor_start(data->win, &editor_data);
+#endif /* NEW_EDITOR */
+
+	return WAP_OK;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_password_cb_1
+
+ $Description:	Callback function for the WAP password dialog, after username entered.
+ 				Prompts for password.
+ 
+ $Returns:		void
+
+ $Arguments:	win			- the WAP data window
+ 				identifier	- this is the dialog id
+ 				reason		- reason for callback
+ 
+*******************************************************************************/
+
+static void AUI_password_cb_1(T_MFW_HND win, USHORT identifier, SHORT reason)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+#ifdef NEW_EDITOR
+	T_AUI_EDITOR_DATA editor_data;
+#else
+	T_EDITOR_DATA	editor_data;
+#endif /* NEW_EDITOR */
+	T_MMI_WAP_PASSWORD_DIALOG_CNF DialogCnf; /* SPR#2393 */
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_password_dialog_cb_1");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	switch (reason)
+	{
+		case INFO_KCD_HUP:
+		case INFO_KCD_RIGHT:
+			AUI_destroy(data->win,EDIT_WIN);	/* Destroy edit window */
+			
+			/* SPR#2393 - SH - WAP browser can update again */
+			data->update_forbid = FALSE;
+
+			/* SPR#2393 - SH - Force an update, otherwise editor screen
+			 * shows forever */
+			win_show(data->browser_win);
+
+			/* SPR#2393 - SH - Send NULL username/password to indicate dialog cancelled */
+			DialogCnf.object_id		= data->View->object_id;
+			DialogCnf.dialog_id		= identifier;
+			DialogCnf.input_length	= 0;
+			DialogCnf.Input 		= NULL;
+			DialogCnf.password_length  = 0;
+			DialogCnf.Password		= NULL;
+			ATB_wap_password_dialog_closed(&DialogCnf);
+			break;
+
+		case INFO_KCD_LEFT:
+			data->Buffer2[0] = NULL;		/* Empty string for password */
+
+#ifdef NEW_EDITOR
+			AUI_standard_editor(&editor_data, identifier, ED_MODE_ALPHA | ED_MODE_HIDDEN, TxtNull, (T_AUI_EDIT_CB)AUI_password_cb_2);
+			AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)data->Buffer2, PASSWORD_MAX_LEN+1);
+			AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtDelete, TxtISPPassword, NULL);
+
+			data->temp_win = data->edit_win;				/* Store pointer to this edit window */
+			data->edit_win = AUI_edit_Start(data->win, &editor_data); /* Create input window */
+
+#else /* NEW_EDITOR */
+			AUI_standard_editor(&editor_data, data->Buffer2, PASSWORD_MAX_LEN, ALPHA_MODE,
+				(T_EDIT_CB)AUI_password_cb_2);
+
+			editor_data.Identifier	= identifier;					/* this is the dialog identity */
+			editor_data.TextString	= (char *)data->Message.text;
+			editor_data.hide		= TRUE;
+
+			data->temp_win = data->edit_win;				/* Store pointer to this edit window */
+			data->edit_win = editor_start(data->win, &editor_data);
+#endif /* NEW_EDITOR */
+
+			return;
+   			break;
+	}
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_password_cb_2
+
+ $Description:	Callback function for the WAP password dialog.
+ 
+ $Returns:		void
+
+ $Arguments:	win			- the WAP data window
+ 				identifier	- this is the dialog id
+ 				reason		- reason for callback
+ 
+*******************************************************************************/
+
+static void AUI_password_cb_2(T_MFW_HND win, USHORT identifier, SHORT reason)
+{
+	T_WAP_DATA *data = AUI_wap_data();	
+	T_MMI_WAP_PASSWORD_DIALOG_CNF DialogCnf;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_password_cb_2");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+
+	/* SPR#2393 - SH - Only allow browser updates if editor is accepted */
+	
+	switch (reason)
+	{
+		case INFO_KCD_HUP:
+		case INFO_KCD_RIGHT:
+			AUI_destroy(data->win,EDIT_WIN);		/* Destroy this edit window */
+			data->edit_win = data->temp_win;		/* Reinstate previous edit window */
+			data->temp_win = NULL; /* SPR#2393 */
+			break;
+
+		case INFO_KCD_LEFT:
+			/* SPR#2393 - Allow WAP browser window updates */
+			data->update_forbid = FALSE;
+	
+			/* Destroy password dialog first so that
+			 * password is stored in original buffer */
+			AUI_destroy(data->win,EDIT_WIN);		/* Destroy 2nd edit window */
+			data->edit_win = data->temp_win;
+			AUI_destroy(data->win,EDIT_WIN);		/* Destroy 1st edit window */
+			data->temp_win = NULL;  /* SPR#2393 */
+			
+			DialogCnf.object_id		= data->View->object_id;
+			DialogCnf.dialog_id		= identifier;
+			DialogCnf.input_length	= strlen(data->Buffer);
+			DialogCnf.Input 		= data->Buffer;
+			DialogCnf.password_length  = strlen(data->Buffer2);
+			DialogCnf.Password		= data->Buffer2;
+			ATB_wap_password_dialog_closed(&DialogCnf);
+   			break;
+	}
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_confirm_dialog_open
+
+ $Description:	Prompts the MMI to open a confirmation dialog.
+ 				
+ $Returns:		WAP_OK if successful, WAP_FAIL if otherwise
+
+ $Arguments:	Dialog			- Dialog information
+ 
+*******************************************************************************/
+
+T_WAP_RES AUI_wap_confirm_dialog_open(T_WAP_MMI_CONFIRM_DIALOG_REQ *Dialog)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	T_DISPLAY_DATA	display_info;
+	USHORT			titlelen;
+
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_wap_confirm_dialog_open");
+#endif
+	
+	if (!data)
+	{
+		return 0;
+	}
+
+	/* Title, Left SK, Right SK */
+
+	AUI_wap_string_alloc(&data->Message, CARD_TITLE_MAX_LEN);
+	
+	titlelen = AUI_text_to_uc(data->Message.text, Dialog->Message, CARD_TITLE_MAX_LEN);
+	ATB_uc_text_crop(data->Message.text, titlelen, WAP_SCREEN_WIDTH);
+	AUI_text_to_uc(data->LeftSoftKey, Dialog->Ok_key, Dialog->ok_key_length);
+	AUI_text_to_uc(data->RightSoftKey, Dialog->Cancel_key, Dialog->cancel_key_length);
+
+	dlg_initDisplayData_TextStr( &display_info, TxtNull, TxtNull, (char *)data->Message.text, NULL, COLOUR_WAP_POPUP);
+	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)AUI_confirm_cb, FOREVER, KEY_LEFT | KEY_RIGHT );
+	display_info.LSKString		= (char *)data->LeftSoftKey;
+	display_info.RSKString		= (char *)data->RightSoftKey;
+	display_info.Identifier		= Dialog->dialog_id;
+
+	/* Don't update WAP browser window while editor is open */
+	
+	data->update_forbid = TRUE;
+	
+	info_dialog_softkeystrings (data->win, &display_info);
+	return WAP_OK;
+}
+
+			
+/*******************************************************************************
+
+ $Function:    	AUI_confirm_cb
+
+ $Description:	Callback function for the WAP confirmation dialog.
+ 
+ $Returns:		void
+
+ $Arguments:	win			- the WAP data window 
+ 				identifier	- this is the dialog id
+ 				reason		- reason for callback
+ 
+*******************************************************************************/
+
+static void AUI_confirm_cb(T_MFW_HND win, USHORT identifier, SHORT reason)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+	T_MMI_WAP_CONFIRM_DIALOG_CNF DialogCnf;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_confirm_cb");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+
+	/* Allow WAP browser window updates */
+	
+	data->update_forbid = FALSE;
+
+	/* SPR#2393 - SH - Set up DialogCnf structure */
+	
+	DialogCnf.object_id = data->View->object_id;
+	DialogCnf.dialog_id = identifier;	/* Dialog id is passed from AUI_input */
+   	
+	/* Free message string */
+	
+	AUI_wap_string_free(&data->Message);
+	
+	switch (reason)
+	{
+		case INFO_KCD_LEFT:
+		   	DialogCnf.answer = TRUE;		/* Confirmation is false */
+   			break;
+
+   		default:
+		case INFO_KCD_RIGHT:
+		   	DialogCnf.answer = FALSE;		/* Confirmation is false */
+			break;
+	}
+
+	ATB_wap_confirm_dialog_closed(&DialogCnf);		/* Send data to ATB */
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_info_dialog_open
+
+ $Description:	Prompts the MMI to open an info dialog.
+ 				
+ $Returns:		WAP_OK if successful, WAP_FAIL if otherwise
+
+ $Arguments:	Dialog			- Dialog information
+ 
+*******************************************************************************/
+
+T_WAP_RES AUI_wap_info_dialog_open(T_WAP_MMI_INFO_DIALOG_REQ *Dialog)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	T_DISPLAY_DATA	display_info;
+	USHORT			titlelen;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_wap_info_dialog_open");
+#endif
+
+	if (!data)
+	{
+		return 0;
+	}
+
+	/* Message */
+	
+	AUI_wap_string_alloc(&data->Message, CARD_TITLE_MAX_LEN);
+	
+	titlelen = AUI_text_to_uc(data->Message.text, Dialog->Message, CARD_TITLE_MAX_LEN);
+	ATB_uc_text_crop(data->Message.text, titlelen, WAP_SCREEN_WIDTH);
+	
+	dlg_initDisplayData_TextStr( &display_info, TxtNull, TxtNull, (char *)data->Message.text, NULL, COLOUR_WAP_POPUP);
+	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)AUI_info_cb, THREE_SECS, 0 );
+
+	/* Set identifier to dialog id */
+	display_info.Identifier = Dialog->dialog_id;
+	
+	/* Don't update WAP browser window while editor is open */
+	
+	data->update_forbid = TRUE;
+	
+	info_dialog(data->win, &display_info);
+
+	return WAP_OK;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_info_cb
+
+ $Description:	Callback function for the WAP confirmation dialog.
+ 
+ $Returns:		void
+
+ $Arguments:	win			- the WAP data window
+ 				identifier	- this is the dialog id
+ 				reason		- reason for callback
+ 
+*******************************************************************************/
+
+static void AUI_info_cb(T_MFW_HND win, USHORT identifier, SHORT reason)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+	T_MMI_WAP_INFO_DIALOG_CNF DialogCnf;  /* SPR#2393 */
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_info_cb");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+
+	/* Allow WAP browser window updates */
+	
+	data->update_forbid = FALSE;
+
+	/* Free message string */
+	
+	AUI_wap_string_free(&data->Message);
+
+	DialogCnf.object_id = data->View->object_id;  /* SPR#2393 */
+	DialogCnf.dialog_id = identifier;			/* Dialog id is passed from AUI_input */
+
+   	/* Send data to ATB */
+   	
+  	ATB_wap_info_dialog_closed(&DialogCnf);  /* SPR#2393 */
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_options_menu_open
+
+ $Description:	The ATB will send to the AUI the contents of the menu list
+ 
+ $Returns:		WAP_OK if successful, WAP_FAIL if otherwise
+
+ $Arguments:	contextType	- the context, to specify the first item in the menu
+ 
+*******************************************************************************/
+
+static T_WAP_RES AUI_wap_options_menu_open(UBYTE contextType)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	UBYTE 			startIndex;
+	UBYTE			optionIndex;
+	const USHORT	optionsItems[]		= {TxtBookmark, TxtBookmarks, TxtGoTo, TxtHomepage, TxtSoftBack, TxtReload, TxtExit };
+	const USHORT	contextItem[]		= {TxtGoToLink, TxtEdit, TxtSelect, TxtSelect, TxtSelect, TxtSelect, TxtSelect, TxtSelect};
+	T_WAP_LIST		*OptionsList;
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_wap_options_menu_open");
+#endif
+
+	if (!data)
+	{
+		return WAP_FAIL;
+	}
+
+	OptionsList = (T_WAP_LIST *)data->OptionsList;
+	data->update_forbid = TRUE;
+	startIndex = 0;
+
+	OptionsList->no_of_entries = MAX_OPTIONS;
+
+	/* If context key is supplied, insert it as first item in menu */
+
+	if (contextType!=NULL)
+	{
+		OptionsList->no_of_entries++;
+		/* Allocate memory and convert first entries from text tag */
+		OptionsList->Entry[0] = (char *) AUI_wap_memory_alloc((SOFTKEY_MAX_LEN+1)*sizeof(USHORT));
+		AUI_textid_to_uc((USHORT *)OptionsList->Entry[0], contextItem[contextType-1], SOFTKEY_MAX_LEN);
+		
+		startIndex = 1;		/* Start filling menu from second entry */
+	}
+
+	/* Fill in rest of entries */
+
+	for (optionIndex=startIndex; optionIndex<OptionsList->no_of_entries; optionIndex++)
+	{
+		/* Allocate memory and convert options entries from text tags */
+		OptionsList->Entry[optionIndex] = (char *) AUI_wap_memory_alloc((SOFTKEY_MAX_LEN+1)*sizeof(USHORT));
+
+		AUI_textid_to_uc((USHORT *)OptionsList->Entry[optionIndex], optionsItems[optionIndex-startIndex], SOFTKEY_MAX_LEN);
+	}
+
+	/* Create the options list */
+	
+	data->optionsmenu_data = AUI_entry_list_create (data->win, OptionsList, (ListCbFunc)AUI_options_menu_cb,0);
+	data->optionsmenu_win = data->optionsmenu_data->win;
+
+	return WAP_OK;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_options_menu_cb
+
+ $Description:	Callback function for options menu
+ 
+ $Returns:		void		
+
+ $Arguments:	win				- parent window
+ 				EntryListData	- list menu data of bookmarks lsit
+ 
+*******************************************************************************/
+
+static void AUI_options_menu_cb(T_MFW_HND win, ListMenuData *EntryListData)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	T_WAP_VIEW		*View;
+	UBYTE			no_of_entries;	
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_options_menu_cb");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+
+	View = data->View;
+	
+	switch(EntryListData->Reason)
+	{
+		case LISTS_REASON_SELECT:	
+			/* Option is selected... */
+			no_of_entries = EntryListData->ListLength;
+			data->OptionSelect = EntryListData->ListPosition;	/* Store selected option no. */
+
+			/* Check if there's a contextual key in menu */
+			
+			if (no_of_entries>MAX_OPTIONS)
+			{
+				if (data->OptionSelect==0)					/* if we've selected it... */
+				{
+					AUI_destroy(win, OPTIONSMENU_WIN);		/* Destroy options menu */
+					ATB_wap_options_menu_select(View);		/* Inform ATB */
+					return;
+				}
+				else
+					data->OptionSelect--;					/* Otherwise, pretend it isn't there */
+			}
+
+			switch(data->OptionSelect)
+			{
+  				case WAP_ADDBOOKMARK:	
+  					/* Try to add current title to bookmarks */
+  				
+					if (ATB_wap_entry_add(View->Bookmarks, (char *)View->Title)==WAP_FAIL)
+						AUI_info_dialog(data->win, TxtBookmarks, TxtFull);		/* if it's full, say "Bookmarks Full" */
+					else
+					{
+						ATB_wap_entry_add(View->BookmarksURL, View->URL);		/* Store URL */
+						ATB_wap_profile_save(View);								/* Save change to flash */
+						AUI_info_dialog(data->win, TxtStored, NULL);			/* Display "Stored" message */
+					}
+					break;
+    			
+				case WAP_BOOKMARKS:
+					/* Open up bookmarks list */
+					AUI_entry_list(win, View->Bookmarks, (ListCbFunc) AUI_bookmarks_list_cb,0);
+    				break;
+
+    			case WAP_GOTO:
+    				/* Destroy any previous options menu existing */
+					if (data->options_win)
+					{
+						AUI_destroy(data->win, OPTIONS_WIN);
+					}
+					
+					/* Create "Go To" options menu */
+
+					data->options_win = bookMenuStart(win, WAPGoToAttributes(), 0);
+					SEND_EVENT(data->options_win, ADD_CALLBACK, NULL, (void *)AUI_goto_cb);
+  					break;
+  				
+    			case WAP_HOMEPAGE:	
+    				/* Connect to homepage */
+    				AUI_destroy(win, OPTIONSMENU_WIN);
+    				AUI_connect_URL(win, View->Profile->Homepage);
+    				break;
+    			
+    			case WAP_BACK:
+    				/* Go back */
+    				AUI_destroy(win, OPTIONSMENU_WIN);
+    				ATB_wap_card_go_back(View);
+    				break;
+
+    			case WAP_RELOAD:
+    				/* Reload current card */
+    				AUI_destroy(win, OPTIONSMENU_WIN);
+    				ATB_wap_card_refresh(View);
+    				break;
+    			
+    			case WAP_EXIT:
+    				/* Exit WAP, return to menu */
+    				AUI_destroy(win, RETURN_TO_MENU);
+    				break;
+			}
+			break;
+
+		/* Exit menu  */
+		
+  		case LISTS_REASON_BACK:
+  		case LISTS_REASON_CLEAR:	
+			AUI_destroy(win,OPTIONSMENU_WIN);	/* Return to browser */
+  			break;
+
+  		default:
+  			break;
+	}
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_goto_cb
+
+ $Description:	Callback function for the goto URL menu
+ 
+ $Returns:		
+
+ $Arguments:	menu 	- pointer to current menu
+ 				item 	- pointer to current menu item
+ 
+*******************************************************************************/
+
+static void AUI_goto_cb(T_MFW_HND parent_win, USHORT identifier, SHORT reason)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_goto_cb");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	data->menu_win = NULL;
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_memory_alloc
+
+ $Description:	Allocate a block of memory
+ 
+ $Returns:		Address if successful, null if not.
+
+ $Arguments:	size of memory to be allocated.
+ 
+*******************************************************************************/
+// Dec 22, 2004 REF: CRR MFW-SPR-27847 xnkulkar
+// Description: MFW memory size variable changed from U16 -> U32
+// Solution: The use of variable U16 has been replaced with U32
+
+UBYTE* AUI_wap_memory_alloc(U32 size)
+{
+#ifdef TRACE_MEMALLOC
+	memUsed += size;
+	if (size<110)
+	{
+		memTracker[size]++;
+		TRACE_EVENT_P2("ALLOC %d, tracking = %d", size, memTracker[size]);
+	}
+	else
+	{
+		TRACE_EVENT_P2("ALLOC %d, used = %d", size, memUsed);
+	}
+#endif
+
+	return mfwAlloc(size);
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_memory_free
+
+ $Description:	Called by the WAP.ATB to free memory
+ 
+ $Returns:		
+
+ $Arguments:	address and size of memory to be freed.
+ 
+*******************************************************************************/
+// Dec 22, 2004 REF: CRR MFW-SPR-27847 xnkulkar
+// Description: MFW memory size variable changed from U16 -> U32
+// Solution: The use of variable U16 has been replaced with U32
+
+void AUI_wap_memory_free(UBYTE* address,U32 size)
+{
+#ifdef TRACE_MEMALLOC
+	memUsed -= size;
+	if (size<110)
+	{
+		memTracker[size]--;
+		TRACE_EVENT_P2("FREE %d, tracking = %d", size, memTracker[size]);
+	}
+	else
+	{
+		TRACE_EVENT_P2("FREE %d, used = %d", size, memUsed);
+	}
+#endif
+
+	mfwFree(address,size);
+	return;
+}
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_string_alloc
+
+ $Description:	Allocates memory for a string.  Will free any existing
+ 				stored string.
+ 
+ $Returns:		None.
+
+ $Arguments:	Size of string to be allocated, in unicode characters, not including
+ 				null terminator.
+ 
+*******************************************************************************/
+
+static void AUI_wap_string_alloc(T_WAP_STRING *string, USHORT size)
+{
+	if (string->length!=0)
+	{
+		/* If the size is correct, no allocation or freeing required */
+		
+		if (string->length==size)
+			return;
+			
+		/* Otherwise, free the current message block */
+
+		AUI_wap_string_free(string);
+	}
+
+	string->text = (USHORT *)AUI_wap_memory_alloc((size+1)*sizeof(USHORT));
+	string->length = size;
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_string_free
+
+ $Description:	Frees an allocated string
+ 
+ $Returns:		None.
+
+ $Arguments:	string - Pointer to the string
+ 
+*******************************************************************************/
+
+static void AUI_wap_string_free(T_WAP_STRING *string)
+{		
+	if (string->length!=0)
+	{
+		AUI_wap_memory_free((UBYTE *)string->text, (string->length+1)*sizeof(USHORT));
+		string->text = NULL;
+		string->length = 0;
+	}
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	ATB_wap_card_show
+
+ $Description:	Called by the WAP ATB to show the and/or create the card window.
+ 
+ $Returns:		None.
+
+ $Arguments:	View	- The current view
+
+ 
+*******************************************************************************/
+
+void AUI_wap_card_show_req(T_WAP_VIEW *View)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_wap_card_show_req");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	/* If the connecting window or list window are still extant,
+	 * destroy them */
+
+	AUI_destroy(data->win, CONNECT_WIN | LIST_WIN);
+						
+	/* If WAP browser window doesn't exist, create it */
+	
+	if (data->browser_win==NULL)
+	{
+		data->browser_win = AUI_win_create(data->win);
+	}
+
+	/* Initialise browser window */
+	
+	SEND_EVENT(data->browser_win,WAP_SHOW_CARD,0,0);
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_status_notify
+
+ $Description:	Called by the WAP ATB when a status flag has changed
+ 
+ $Returns:		None.
+
+ $Arguments:	View			- The current view
+				status			- parameter which status has changed
+ 
+*******************************************************************************/
+
+void AUI_wap_status_notify(T_WAP_VIEW *View, USHORT status)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_wap_status_notify");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	switch (status)
+	{
+
+		/* If no status, destroy connecting window */
+
+		case ATB_WAP_NO_STATUS:
+			TRACE_EVENT("ATB_WAP_NO_STATUS");
+			AUI_destroy(data->win, CONNECT_WIN);
+			break;
+
+		/* GPRS attach in progress */
+		
+		case ATB_WAP_ATTACHING:
+			TRACE_EVENT("ATB_WAP_ATTACHING");	
+			data->connect_win =  AUI_connecting_dialog(data->win, ATB_WAP_ATTACHING);
+			break;
+
+		/* GPRS failed to attach */
+		
+		case ATB_WAP_ATTACH_FAILED:
+			TRACE_EVENT("ATB_WAP_ATTACH_FAILED");
+			AUI_destroy(data->win, BROWSER_WIN | CONNECT_WIN);
+			AUI_info_dialog(data->win, TxtGPRS, TxtNotAvailable);
+			break;
+
+		/* GPRS error occurred */
+		
+		case ATB_WAP_ERROR:
+			TRACE_EVENT("ATB_WAP_ERROR");
+			if (wap_callActive || data->connected)
+			{
+				AUI_destroy(data->win, BROWSER_WIN | CONNECT_WIN);	
+				AUI_info_dialog(data->win, TxtGPRS, TxtError);
+				wap_callActive = FALSE;
+				data->connected = FALSE;
+			}
+			break;
+
+		/* PDP context activation failed */
+		
+		case ATB_WAP_ACTIVATE_FAILED:
+			TRACE_EVENT("ATB_WAP_ACTIVATE_FAILED");
+			AUI_destroy(data->win, CONNECT_WIN);
+			AUI_wap_end_call(-1);		/* End GPRS data call */
+			AUI_info_dialog(data->win, TxtConnection, TxtFailed);
+			wap_callActive = FALSE;
+			data->connected = FALSE;
+			break;
+
+		/* Connection to WAP gateway is proceeding */
+		
+		case ATB_WAP_CONNECTING:
+			TRACE_EVENT("ATB_WAP_CONNECTING");
+			
+			wap_callActive = TRUE;
+			data->connected = TRUE;
+			data->connect_win =  AUI_connecting_dialog(data->win, ATB_WAP_CONNECTING);
+			break;
+
+		/* Connection has been established */
+		
+		case ATB_WAP_LOGGING_IN:
+			TRACE_EVENT("ATB_WAP_LOGGING_IN");
+			/* If browser window is present, destroy it,
+			 * so on re-creation it will be the top window */
+
+			AUI_destroy(data->win, BROWSER_WIN);
+			
+			/* Display dialog with "Logging In" */
+			data->connect_win =  AUI_connecting_dialog(data->win, ATB_WAP_LOGGING_IN);
+			break;
+
+		/* Card is being downloaded from network */
+		
+		case ATB_WAP_DOWNLOADING:
+			TRACE_EVENT("ATB_WAP_DOWNLOADING");
+			data->connected = TRUE;
+			break;
+
+		/* Status to indicate card is being read
+		 * from cache or from network */
+		 
+		case ATB_WAP_CARD_READING:
+			TRACE_EVENT("ATB_WAP_CARD_READING");
+			if (data->connect_win)
+			{
+				data->connect_win =  AUI_connecting_dialog(data->win, ATB_WAP_CARD_READING);
+			}
+			break;
+
+		/* The connection has been closed */
+		
+		case ATB_WAP_ONLINE_CONNECTION_CLOSED:
+			TRACE_EVENT("ATB_WAP_ONLINE_CONNECTION_CLOSED");
+			AUI_destroy(data->win, BROWSER_WIN | CONNECT_WIN | OPTIONS_WIN | OPTIONSMENU_WIN);
+			data->connected = FALSE;
+			wap_callActive = FALSE;
+			break;
+
+		/* WAP is waiting for a signal from the network */
+		
+		case ATB_WAP_PLEASE_WAIT:
+			TRACE_EVENT("ATB_WAP_PLEASE_WAIT");
+			data->connect_win =  AUI_connecting_dialog(data->win, ATB_WAP_PLEASE_WAIT);
+			break;
+
+		/* WAP is shutting down */
+		
+		case ATB_WAP_SHUTTING_DOWN:
+			TRACE_EVENT("ATB_WAP_SHUTTING_DOWN");
+			break;
+
+		/* Waiting for PDP context to deactivate */
+		
+		case ATB_WAP_DEACTIVATING:
+			TRACE_EVENT("ATB_WAP_DEACTIVATING");
+			data->connect_win =  AUI_connecting_dialog(data->win, ATB_WAP_DEACTIVATING);
+			break;
+			
+		default:
+			TRACE_EVENT("** UNKNOWN STATUS **");
+			return;		
+	}
+
+	if (data->browser_win)	/*The card is prompted to show the status*/
+	{
+		TRACE_EVENT("Updating card view for status.");
+		win_show(data->browser_win);
+	}
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_change_soft_key
+
+ $Description:	Called by the WAP.ATB when the card requests a custom text for a
+ 				soft key
+ 
+ $Returns:		None
+
+ $Arguments:	View			- The current view
+ 				Label			- The text of the custom soft key
+ 				length			- Length of the text
+ 				keyId			- The id of the key, to send to the AUS Browser
+ 									when the key is pressed.
+ 
+*******************************************************************************/
+
+void AUI_wap_change_soft_key(T_WAP_VIEW *View, USHORT *Label, USHORT length, USHORT keyId)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	SHORT			optionsWidth;
+	USHORT			optionsLength;
+	SHORT			labelWidth;
+	char			*LeftKeyTag	= (char *)data->LeftSoftKey;
+	char			*RightKeyTag = (char *)data->RightSoftKey;
+	USHORT			*LeftKeyText = &data->LeftSoftKey[1];
+	USHORT			*RightKeyText = &data->RightSoftKey[1];
+
+#ifdef TRACE_AUIWAP
+	TRACE_FUNCTION("AUI_wap_change_soft_key");
+#endif
+
+	if (!data)
+	{
+		return;
+	}
+	
+	if (length > 0)
+	{
+		/* Insert unicode tag and convert to MMI unicode */
+		
+		LeftKeyTag[0] = 0x80;
+		LeftKeyTag[1] = 0x7F;
+		optionsLength = AUI_textid_to_uc(LeftKeyText, TxtSoftOptions, SOFTKEY_MAX_LEN);
+		RightKeyTag[0] = 0x80;
+		RightKeyTag[1] = 0x7F;
+		ATB_uc_text_copy(RightKeyText, Label, length);
+		ATB_uc_text_convert(RightKeyText, length);
+		
+		/* Make sure softkeys fit into the space by cropping them if necessary */
+
+		optionsWidth	= ATB_uc_text_width(LeftKeyText, optionsLength);
+		labelWidth		= ATB_uc_text_width(RightKeyText, length);
+
+		if ((labelWidth+optionsWidth) > WAP_TOTAL_WIDTH)						/* If they don't fit... */
+		{
+			optionsWidth = WAP_TOTAL_WIDTH-labelWidth-WAP_SOFTKEY_SPACING;		/* Try shortening "options" */
+			if (optionsWidth<ATB_uc_text_width(LeftKeyText, WAP_SOFTKEY_MIN_LENGTH))    /* If it's too short.... */
+			{
+				optionsWidth = ATB_uc_text_width(LeftKeyText, WAP_SOFTKEY_MIN_LENGTH); /* Shorten the other key */
+				labelWidth = WAP_TOTAL_WIDTH-optionsWidth-WAP_SOFTKEY_SPACING;
+			}
+		}
+		ATB_uc_text_crop(LeftKeyText, optionsLength, optionsWidth);	/* Crop the texts */
+		ATB_uc_text_crop(RightKeyText, length, labelWidth);
+		View->CustSoftKeys = TRUE;									/* We are using cust. soft keys */
+		View->CustSoftKeyId = keyId;
+	}
+	else
+		View->CustSoftKeys = FALSE;
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_stringID
+
+ $Description:	Gives the ATB the text of a required string (specific for now)
+ 
+ $Returns:		The length of the destination string.
+
+ $Arguments:	dest - The destination string (MMI Unicode)
+				destlen - Maximum length the destination string can be in Unicode characters.
+				stringID - The string required.
+ 
+*******************************************************************************/
+
+USHORT AUI_wap_stringID(USHORT *dest, USHORT destlen, USHORT stringID)
+{
+	USHORT *temp;
+	USHORT src;
+	USHORT length;
+
+	switch (stringID)
+	{
+		case WAP_STRING_DOWNLOADING:
+			src = TxtDownloading;
+			break;
+
+		case WAP_STRING_UPDATING:
+			src = TxtUpdating;
+			break;
+
+		case WAP_STRING_UNTITLED:
+			src = TxtUntitled;
+			break;
+			
+		default:
+			src = TxtError;
+			break;
+	}
+
+	length = AUI_textid_to_uc(dest, src, destlen);
+	
+	return length;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_textid_to_uc
+
+ $Description:	Converts a string from a text ID to an MMI-converted unicode string.
+ 
+ $Returns:		Length of resulting string
+
+ $Arguments:	dest	- Place to store the result.
+ 				textId	- The string to translate.
+				destlen	- Maximum length of result
+ 
+*******************************************************************************/
+
+static USHORT AUI_textid_to_uc(USHORT *dest, int textId, USHORT destlen)
+{
+	USHORT length;
+	char *srctext = MmiRsrcGetText(textId);
+
+	if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE)
+	{
+		length = ATB_uc_text_copy(dest, (USHORT *)srctext, destlen);
+	}
+	else
+	{
+		length = ATB_char_to_uc(dest, srctext);
+	}
+	
+	return length;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_text_to_uc
+
+ $Description:	Converts a standard unicode string to an MMI-converted unicode string,
+ 				including the 0x80 at the start
+ 
+ $Returns:		N/A
+
+ $Arguments:	dest	- Place to store the result.
+ 				src		- The string to translate.
+ 				destLen	- Size of destination array in unicode characters
+ 
+*******************************************************************************/
+
+static USHORT AUI_text_to_uc(USHORT *dest, USHORT *src, USHORT destlen)
+{
+	USHORT length;
+
+	length = ATB_uc_text_copy(&dest[1], src, destlen);
+	ATB_uc_text_convert(&dest[1], length);
+
+	dest[0] = 0x7F80;
+		
+	return length;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_launch_browser
+
+ $Description:	Launches the browser to a given URL and a bearer list arranged by priority. 
+ 
+ $Returns:		TRUE-> succesfully launched, FALSE -> error
+
+ $Arguments:	The URL and the bearer list.
+ 
+*******************************************************************************/
+
+T_MFW_HND AUI_wap_launch_browser(char *URL,UBYTE* bearer_list,UBYTE bearer_list_len)
+{
+    T_MFW_HND wap_window;
+
+	if (!(wap_window = AUI_create(idle_get_window())))
+		return NULL; /*Error */
+
+	AUI_connect_URL(wap_window,URL);
+
+    return wap_window;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_extDestroy
+
+ $Description:	Allows external files to destroy the WAP application
+ 
+ $Returns:		None.
+
+ $Arguments:	None.
+ 
+*******************************************************************************/
+
+void AUI_wap_extDestroy(void)
+{	
+	T_WAP_DATA 		*data		= AUI_wap_data();
+
+	if (!data)
+	{
+		return;
+	}
+	
+	AUI_destroy(data->win, ALL_WIN);
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_call_connect
+
+ $Description:	Called when a CSD call is connected
+ 
+ $Returns:		None.
+
+ $Arguments:	
+ 
+*******************************************************************************/
+
+void AUI_wap_call_connect(SHORT cId)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+
+	if (!data)
+	{
+		return;
+	}
+	
+	if (data->View)
+	{	
+		TRACE_FUNCTION("AUI_wap_call_connect()");
+		data->View->cId = cId;
+	}
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_call_disconnect
+
+ $Description:	Called when a CSD call is terminated - informs WAP of this.
+ 				
+ $Returns:		None.
+
+ $Arguments:	The ID of the call.
+ 
+*******************************************************************************/
+
+void AUI_wap_call_disconnect(SHORT cId)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+
+	TRACE_FUNCTION("AUI_wap_call_disconnect()");
+	
+	if (!data)
+	{
+		return;
+	}
+	
+	if (data->View)
+	{	
+		/* View exists; are we in the connected, or in the connecting screen? */
+
+		if (data->connected || data->connect_win || data->browser_win)
+		{
+			/* Check it's the right call */
+			
+			if (cId==data->View->cId)
+			{
+				ATB_wap_disconnect(data->View);  /* Disconnect WAP browser */
+				data->View->cId = -1;
+				ATB_wap_status_change(data->View, ATB_WAP_ONLINE_CONNECTION_CLOSED);
+				AUI_error_dialog(data->View, ERROR_CALL_DISCONNECTED);
+			}
+		}
+	}
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_end_call
+
+ $Description:	Determine whether call is CSD or GPRS, and attempt to end it.
+ 
+ $Returns:		None.
+
+ $Arguments:	cId - call ID of the CSD call (ignored for GPRS profile).
+ 
+*******************************************************************************/
+
+void AUI_wap_end_call(SHORT cId)
+{
+	T_WAP_DATA *data = AUI_wap_data();
+	
+	TRACE_FUNCTION("AUI_wap_end_call()");
+
+	if (!data)
+	{
+		return;
+	}
+	
+	/* If WAP browser is active, inform it of disconnection */
+	
+	if (data->View)
+	{
+		/* If there is a waiting incoming call, accept it now */
+		
+		if (data->call_waiting)
+		{
+			cm_mt_accept();
+			data->call_waiting = FALSE;
+			return;
+		}
+		
+		ATB_wap_disconnect(data->View);
+		
+		if (data->View->Profile->AccessType == WAP_CS_DATA)
+		{
+			/* If call ID is not -1, call is active.
+			 * End it using cm_disconnect */
+			 
+			if (data->View->cId!=-1)
+			{
+				TRACE_EVENT_P1("Disconnecting CSD call: %d", data->View->cId);
+				cm_disconnect(data->View->cId);
+				data->View->cId = -1;
+			}
+			
+			if (call_get_window())
+			{
+				TRACE_EVENT("Destroying calling window.");
+				SEND_EVENT(call_get_window(), CALL_DESTROY_CALLING_WINDOW, 0, 0);
+				data->View->cId = -1;
+			}
+			return;
+		}
+		else
+		{
+			TRACE_EVENT("Disconnect GPRS call.");
+
+			/* If GPRS call is not yet terminated, set
+			 * status so "Please Wait" is shown until it is. */
+			 
+			if (!disconnect_wap_call(WAP_GPRS_DATA))
+			{
+				TRACE_EVENT("Waiting for disconnection.");
+				ATB_wap_status_change(data->View, ATB_WAP_DEACTIVATING);
+			}
+			return;
+		}
+	}
+
+	/* If we've reached here, the the WAP application
+	 * is closed, but the call is still open */
+
+	TRACE_EVENT("WAP is closed; attempting to end call");
+
+	/* If call ID is not -1, call is active.
+	 * End it using cm_disconnect */
+	 
+	if (cId!=-1)
+	{
+		TRACE_EVENT("Disconnecting CSD call in progress.");
+		cm_disconnect(cId);
+	}
+				
+	/* Destroy calling window */
+		
+	if (call_get_window())
+	{
+		TRACE_EVENT("Destroying calling window.");
+		SEND_EVENT(call_get_window(), CALL_DESTROY_CALLING_WINDOW, 0, 0);
+	}
+
+#ifdef MMI_GPRS_ENABLED
+	/* Terminate any GPRS call in progress.
+	 * If GPRS call is not yet terminated, set
+	 * status so "Please Wait" is shown until it is. */
+	if (!disconnect_wap_call(WAP_GPRS_DATA))
+	{
+		TRACE_EVENT("Waiting for disconnection.");
+		ATB_wap_status_change(data->View, ATB_WAP_DEACTIVATING);
+	}
+#endif
+
+	return;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_in_call
+
+ $Description:	Returns TRUE if a WAP CSD call is currently active.
+ 
+ $Returns:		TRUE or FALSE
+
+ $Arguments:	None.
+ 
+*******************************************************************************/
+
+UBYTE AUI_wap_in_call(void)
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+
+	UBYTE result;
+
+	TRACE_FUNCTION("AUI_wap_in_call()");
+	
+	if (!data)
+	{
+		return FALSE;
+	}
+
+	result = FALSE;
+
+	/* Ensure that view is open */
+		
+	if (data->View)
+	{
+		/* If the call ID is not -1, there is a call in progress */
+		if (data->View->cId!=-1)
+		{
+			result = TRUE;
+		}
+	}
+
+	return result;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_browser_disconnect()
+
+ $Description:	Shuts down browser.  Only use in the case where
+ 				there is an incoming call waiting to be accepted.
+ 
+ $Returns:		TRUE or FALSE
+
+ $Arguments:	None.
+ 
+*******************************************************************************/
+
+void AUI_wap_browser_disconnect()
+{
+	T_WAP_DATA 		*data		= AUI_wap_data();
+	
+	TRACE_FUNCTION("AUI_wap_browser_disconnect()");
+	
+	if (!data)
+	{
+		return;
+	}
+	
+	if (data->View)
+	{
+		data->call_waiting = TRUE;				/* There is a waiting call */
+		ATB_wap_stop_download(data->View);		/* Stop any active download */
+		ATB_wap_disconnect(data->View);			/* Disconnect the WAP browser */
+		AUI_destroy(data->win, ALL_WIN);		/* Shut down WAP */
+	}
+
+	return;
+}
+
+
+#ifdef MMI_GPRS_ENABLED
+
+/*******************************************************************************
+
+ $Function:    	AUI_wap_GPRS_status
+
+ $Description:	Called when GPRS state changes.  If WAP is active, updates status.
+ 
+ $Returns:		None.
+
+ $Arguments:	status - The GPRS status
+ 
+*******************************************************************************/
+
+void AUI_wap_gprs_status(UBYTE status)
+{
+	T_WAP_DATA 		*data	= AUI_wap_data();
+	
+	TRACE_FUNCTION("AUI_wap_gprs_status()");
+
+	if (!data)
+	{
+		return;
+	}
+	
+	if (data->View->Profile->AccessType==WAP_GPRS_DATA)
+	{
+		switch (status)
+		{
+			case GPRS_ATTACHED:
+				TRACE_EVENT("STATUS: Attached.");
+				
+				/* Check that login is still proceeding */
+
+				if (ATB_wap_status_get(data->View, ATB_WAP_ATTACHING))
+				{
+					ATB_wap_status_change(data->View, ATB_WAP_LOGGING_IN);
+					/* Are now attached, can connect */
+					connect_gprs(data->View->object_id);
+				}
+				break;
+				
+			case GPRS_OFF:
+				TRACE_EVENT("STATUS: Detached");
+				disconnect_wap_call(WAP_GPRS_DATA);
+				ATB_wap_status_change(data->View, ATB_WAP_ATTACH_FAILED);
+				break;
+
+			case GPRS_CONTEXT_ACTIVATE:
+				TRACE_EVENT("STATUS: Context Activated");
+				break;
+
+			case GPRS_CONTEXT_DEACTIVATE:
+					TRACE_EVENT("STATUS: Context Deactivated");
+					
+					/* If we're deactivating, this is OK, finish closing */
+					
+					if (ATB_wap_status_get(data->View, ATB_WAP_DEACTIVATING))
+					{
+						ATB_wap_status_change(data->View, ATB_WAP_ONLINE_CONNECTION_CLOSED);
+					}
+					
+					/* Otherwise, PDP context activation has failed */
+					
+					else if (ATB_wap_status_get(data->View, ATB_WAP_PLEASE_WAIT)
+						|| ATB_wap_status_get(data->View, ATB_WAP_CONNECTING)
+						|| ATB_wap_status_get(data->View, ATB_WAP_LOGGING_IN))
+					{
+						ATB_wap_status_change(data->View, ATB_WAP_ACTIVATE_FAILED);
+					}
+					break;
+
+
+			case GPRS_ERROR:
+				TRACE_EVENT("STATUS: ERROR");
+				AUI_wap_end_call(-1);				/* Call ID is -1 for GPRS */
+				ATB_wap_status_change(data->View, ATB_WAP_ERROR);
+				break;
+		}
+	}
+	return;
+}
+#endif /* MMI_GPRS_ENABLED */
+#endif /* !#ifdef FF_GPF_TCPIP */