Merge with the team repository
authorEugene Ostroukhov <eugeneo@symbian.org>
Thu, 21 Jan 2010 11:52:32 -0800
changeset 40 9bebb93c6833
parent 39 eb7d9e33e288 (diff)
parent 36 de01951652dc (current diff)
child 41 fc4a1d68260a
Merge with the team repository
--- a/org.symbian.tools.wrttools.debug.core/launch/WRT Debugger.launch	Thu Jan 21 09:00:50 2010 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<launchConfiguration type="org.eclipse.pde.ui.RuntimeWorkbench">
-<booleanAttribute key="append.args" value="true"/>
-<booleanAttribute key="askclear" value="true"/>
-<booleanAttribute key="automaticAdd" value="true"/>
-<booleanAttribute key="automaticValidate" value="false"/>
-<stringAttribute key="bad_container_name" value="\org.symbian.tools.wrttools.debug.core\launch"/>
-<stringAttribute key="bootstrap" value=""/>
-<stringAttribute key="checked" value="[NONE]"/>
-<booleanAttribute key="clearConfig" value="true"/>
-<booleanAttribute key="clearws" value="false"/>
-<booleanAttribute key="clearwslog" value="false"/>
-<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/WRT Debugger"/>
-<booleanAttribute key="default" value="true"/>
-<booleanAttribute key="includeOptional" value="true"/>
-<stringAttribute key="location" value="${workspace_loc}/../runtime-WRT-Debugger"/>
-<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
-<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
-</listAttribute>
-<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl}"/>
-<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms128m -Xmx768m -XX:MaxPermSize=192m"/>
-<stringAttribute key="pde.version" value="3.3"/>
-<stringAttribute key="product" value="org.eclipse.platform.ide"/>
-<booleanAttribute key="restart" value="false"/>
-<booleanAttribute key="show_selected_only" value="false"/>
-<stringAttribute key="templateConfig" value="${target_home}\configuration\config.ini"/>
-<booleanAttribute key="tracing" value="false"/>
-<booleanAttribute key="useDefaultConfig" value="true"/>
-<booleanAttribute key="useDefaultConfigArea" value="true"/>
-<booleanAttribute key="useProduct" value="true"/>
-<booleanAttribute key="usefeatures" value="false"/>
-</launchConfiguration>
--- a/org.symbian.tools.wrttools.debug.core/plugin.xml	Thu Jan 21 09:00:50 2010 -0800
+++ b/org.symbian.tools.wrttools.debug.core/plugin.xml	Thu Jan 21 11:52:32 2010 -0800
@@ -10,6 +10,7 @@
    <extension
          point="org.eclipse.ui.preferencePages">
       <page
+            category="org.symbian.tools.wrttools.editing.preferences.WrtEditingPreferencePage"
             class="org.symbian.tools.wrttools.debug.ui.DebugPreferencePage"
             id="org.symbian.tools.wrttools.debug"
             name="WRT Debugger">
--- a/org.symbian.tools.wrttools.debug.core/src/org/symbian/tools/wrttools/debug/internal/IConstants.java	Thu Jan 21 09:00:50 2010 -0800
+++ b/org.symbian.tools.wrttools.debug.core/src/org/symbian/tools/wrttools/debug/internal/IConstants.java	Thu Jan 21 11:52:32 2010 -0800
@@ -20,7 +20,6 @@
 
 public interface IConstants {
 	String PREF_NAME_CHROME_LOCATION="chrome.location";
-	String PREF_NAME_CHROME_PORT="chrome.port";
 
 	String PROP_PROJECT_NAME = "projectName";
 	public static final String WRT_PREVIEW_HTML = "wrt_preview_frame.html";
--- a/org.symbian.tools.wrttools.debug.core/src/org/symbian/tools/wrttools/debug/internal/PreferenceInitializer.java	Thu Jan 21 09:00:50 2010 -0800
+++ b/org.symbian.tools.wrttools.debug.core/src/org/symbian/tools/wrttools/debug/internal/PreferenceInitializer.java	Thu Jan 21 11:52:32 2010 -0800
@@ -34,7 +34,6 @@
 			store.setDefault(IConstants.PREF_NAME_CHROME_LOCATION, folder
 					.getAbsolutePath());
 		}
-		store.setDefault(IConstants.PREF_NAME_CHROME_PORT, 19222);
 	}
 
 	private File getDefaultFolder() {
--- a/org.symbian.tools.wrttools.debug.core/src/org/symbian/tools/wrttools/debug/internal/launch/WidgetLaunchDelegate.java	Thu Jan 21 09:00:50 2010 -0800
+++ b/org.symbian.tools.wrttools.debug.core/src/org/symbian/tools/wrttools/debug/internal/launch/WidgetLaunchDelegate.java	Thu Jan 21 11:52:32 2010 -0800
@@ -20,6 +20,7 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.net.ServerSocket;
 import java.net.URI;
 import java.text.MessageFormat;
 
@@ -71,9 +72,8 @@
 			launchManager.removeLaunch(launch);
 			throw createCoreException(MessageFormat.format("Project {0} is already running.", project.getName()), null);
 		}
-		
-		final int port = Activator.getDefault().getPreferenceStore().getInt(
-				IConstants.PREF_NAME_CHROME_PORT);
+
+		int port = findFreePort();
 		boolean debug = mode.equals(ILaunchManager.DEBUG_MODE);
 		final URI uri = prepareDebugger(project, debug, launch, port);
 		final String browserExecutable = ChromeDebugUtils.getChromeExecutible();
@@ -109,6 +109,19 @@
 	}
 
 
+	private int findFreePort() {
+		try {
+			final ServerSocket socket = new ServerSocket(0);
+			int port = socket.getLocalPort();
+			socket.close();
+			return port;
+		} catch (IOException e) {
+			Activator.log(e);
+			return 7222;
+		}
+	}
+
+
 	private void showProjectIsDebugged() {
 	}
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/.classpath	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/.project	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.symbian.tools.wrttools.previewer</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/.settings/org.eclipse.jdt.core.prefs	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,8 @@
+#Wed Jan 13 17:40:14 PST 2010
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/META-INF/MANIFEST.MF	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Previewer
+Bundle-SymbolicName: org.symbian.tools.wrttools.previewer;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: org.symbian.tools.wrttools.previewer.Activator
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.core.resources;bundle-version="3.5.0",
+ org.eclipse.core.net;bundle-version="1.2.0",
+ org.mozilla.xpcom;bundle-version="1.9.1"
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/build.properties	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,9 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               preview/,\
+               preferences.ini,\
+               icons/,\
+               wrt.xml
Binary file org.symbian.tools.wrttools.previewer/icons/Thumbs.db has changed
Binary file org.symbian.tools.wrttools.previewer/icons/deploy_settings.gif has changed
Binary file org.symbian.tools.wrttools.previewer/icons/deploy_widget.gif has changed
Binary file org.symbian.tools.wrttools.previewer/icons/error_over.gif has changed
Binary file org.symbian.tools.wrttools.previewer/icons/error_ovr.gif has changed
Binary file org.symbian.tools.wrttools.previewer/icons/exclude_archive.gif has changed
Binary file org.symbian.tools.wrttools.previewer/icons/icon.gif has changed
Binary file org.symbian.tools.wrttools.previewer/icons/icon32.gif has changed
Binary file org.symbian.tools.wrttools.previewer/icons/include_archive.gif has changed
Binary file org.symbian.tools.wrttools.previewer/icons/main16.gif has changed
Binary file org.symbian.tools.wrttools.previewer/icons/obj16/html-editor.gif has changed
Binary file org.symbian.tools.wrttools.previewer/icons/obj16/refresh.gif has changed
Binary file org.symbian.tools.wrttools.previewer/icons/obj16/refresh_green.gif has changed
Binary file org.symbian.tools.wrttools.previewer/icons/obj16/refresh_red.gif has changed
Binary file org.symbian.tools.wrttools.previewer/icons/package_widget.gif has changed
Binary file org.symbian.tools.wrttools.previewer/icons/upgrade-project-over.gif has changed
Binary file org.symbian.tools.wrttools.previewer/icons/upgrade_project.gif has changed
Binary file org.symbian.tools.wrttools.previewer/icons/upgrade_red.gif has changed
Binary file org.symbian.tools.wrttools.previewer/icons/validate_widget.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/plugin.xml	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+ 
+ <extension
+       point="org.eclipse.ui.preferencePages">
+    <page
+          class="org.symbian.tools.wrttools.previewer.preview.WidgetPreviewPreferencePage"
+          id="org.symbian.tools.wrttools.previewer.preview.WidgetPreviewPreferencePage"
+          name="Preview"/>
+
+ </extension>
+    <extension
+         point="org.eclipse.ui.views">
+      <view
+            allowMultiple="false"
+            class="org.symbian.tools.wrttools.previewer.preview.PreviewView"
+            icon="icons/obj16/html-editor.gif"
+            id="org.symbian.tools.wrttools.editing.wrtpreview"
+            name="WRT Preview"
+            restorable="true">
+      </view>
+   </extension>
+   <extension
+         point="org.eclipse.ui.preferencePages">
+      <page
+            class="org.symbian.tools.wrttools.previewer.preferences.WrtEditingPreferencePage"
+            id="org.symbian.tools.wrttools.editing.preferences.WrtEditingPreferencePage"
+            name="WRT">
+      </page>
+   </extension>
+   <extension
+         point="org.eclipse.ui.perspectiveExtensions">
+      <perspectiveExtension
+            targetID="org.symbian.tools.wrttools.mainPerspective">
+         <viewShortcut
+               id="org.symbian.tools.wrttools.editing.wrtpreview">
+         </viewShortcut>
+         <view
+               id="org.symbian.tools.wrttools.editing.wrtpreview"
+               minimized="false"
+               relationship="stack"
+               relative="org.eclipse.ui.views.ContentOutline">
+         </view>
+      </perspectiveExtension>
+   </extension>
+  </plugin>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/preferences.ini	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,1 @@
+preview.autorefresh=prompt
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/preview/css/style.css	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,633 @@
+@charset "utf-8";
+body {
+	background-image: url(../images/Gradient0Background.png);
+	background-repeat: repeat-x;
+	margin: 0px;
+	font-family: "Nokia Sans", "Nokia Sans SemiBold", "Arial Narrow";
+	padding: 0px;
+	overflow: hidden;
+}
+.hide{
+	display:none;
+}
+.show{
+	display:block;
+}
+
+code{
+	background-color: #ffffa6;
+	color: #000000;
+	padding: 3px;
+	display: block;
+	font-size: 110%;
+	margin: 3px 0px;
+}
+
+#DisplaySFKWrapper{
+	overflow: hidden;
+}
+#DisplayArea {
+	margin-right: auto;
+	margin-left: auto;
+	overflow: hidden;
+
+}
+
+#WidgetArea{
+	position: relative;
+	z-index: 99;
+}
+#WidgetArea iframe{
+	width: 100%;
+	height: 100%;
+	border: 0px;
+	margin-left: auto;
+	margin-top: auto;
+}
+
+#WidgetArea.hs_portrait{
+	background-image: url(../images/device/360x640/hs-portrait.png);
+	background-repeat: no-repeat;
+}
+
+#WidgetArea.hs_landscape{
+	background-image: url(../images/device/360x640/hs-landscape.png);
+	background-repeat: no-repeat;
+}
+#WidgetArea.hs_portrait iframe{
+	width: 306px;
+	height: 76px;
+	margin-left: 26px;
+	margin-top: 321px;
+	overflow: hidden !important;
+}
+
+#WidgetArea.hs_landscape iframe{
+	width: 306px;
+	height: 76px;
+	margin-left: 322px !important;
+	margin-top: 151px !important;
+	overflow: hidden !important;
+}
+
+#iframeMask
+{
+	width: 328px;
+	height: 100px;
+	position: absolute;
+	z-index: 900;
+	background-image: url(../images/hs-iframeMask.png);
+	background-repeat: no-repeat;
+	background-position: top left;
+}
+
+#iframeMask:hover
+{
+	background-repeat: no-repeat;
+	background-position: bottom left;
+}
+
+
+#WidgetArea.hs_portrait #iframeMask{
+	margin-left: 16px !important;
+	margin-top: 310px !important;
+}
+#WidgetArea.hs_landscape #iframeMask{
+	margin-left: 312px !important;
+	margin-top: 140px !important;
+}
+
+
+#SoftKeys{
+	height: 50px;
+	width: 240px;
+	margin-right: auto;
+	margin-left: auto;
+	margin-top: 10px;
+}
+
+div.clear{
+	clear: both;
+}
+#DeviceDisplayLayout {
+	background-repeat: no-repeat;
+	background-position: center center;
+	margin-right: auto;
+	margin-left: auto;
+	margin-top: 0px;
+	overflow: hidden;
+}
+
+#DeviceDisplayLayout.portrait_240x320 {
+	background-image: url(../images/device/240x320/Portrait.png);
+	width: 600px;
+	height: 536px;
+}
+
+#DeviceDisplayLayout.landscape_240x320 {
+	background-image: url(../images/device/240x320/Landscape.png);
+	width: 848px;
+	height: 408px;
+}
+
+#SoftKeysArea{
+	z-index: 101;
+	position: relative;
+/*	background-image: url(../images/device/menuKeys-bg.png);
+	background-repeat: no-repeat;
+	background-position: center top;
+*/
+	background-color: #666666;
+}
+
+#SoftKeysArea ul{
+	list-style: none;
+	margin: 0px;
+	padding: 0px;
+	
+}
+
+#SoftKeysArea ul li{
+	margin: 0px;
+	font-weight: bold;
+	font-size: 15px;
+	float: left;
+	padding: 5px;
+}
+
+
+#SoftKeysArea ul li a{
+	color: #FFFFFF;
+	text-decoration: none;
+	display: block;
+}
+
+li#RskLabel{
+	text-align: right;
+}
+
+#MenuItemsArea{
+	z-index: 100;
+	display: none;
+}	
+
+#MenuItemsArea ul{
+	margin: 0px;
+	padding: 5px;
+	list-style-position: inside;
+	list-style-image: none;
+	list-style-type: none;
+	background-color: #CCCCCC;
+}
+
+#MenuItemsArea ul li{
+	font-size: 13px;
+	font-weight: bold;
+}
+
+#MenuItemsArea li.active{
+	background-color: #75ea00;
+}
+
+#MenuItemsArea a{
+	color: #000;
+	text-decoration: none;
+	display: block;
+	padding: 5px;
+	height: 14px;
+}
+#MenuItemsArea a:hover{
+	background-color: #75ea00;
+}
+
+#MenuItemsArea a.subMenuItem{
+	background-image: url(../images/sub-menu-arrow.png);
+	background-repeat: no-repeat;
+	background-position: right 0px;
+}
+
+#MenuItemsArea a.subMenuItem:hover{
+	background-position: right -20px;
+}
+#MenuItemsArea a.subMenuItem:active{
+	background-position: right -40px;
+}
+
+#MenuItemsArea li.active a.subMenuItem{
+	background-position: right -20px;
+}
+div#IconArea{
+	display: none;
+	font-size: 0.9em;
+	font-weight: bold;
+	background-repeat: no-repeat;
+}
+
+div#IconArea.portrait240x320{
+	background-image: url(../images/statusBar_240x320.png);
+}
+div#IconArea.landscape240x320{
+	background-image: url(../images/statusBar_320x240.png);
+}
+
+div#IconArea.portrait320x240{
+	background-image: url(../images/statusBar_320x240.png);
+}
+div#IconArea.landscape320x240{
+	background-image: url(../images/statusBar_240x320.png);
+}
+
+div#IconArea.portrait360x640{
+	background-image: url(../images/statusBar_360x640.png);
+}
+div#IconArea.landscape360x640{
+	background-image: url(../images/statusBar_640x360.png);
+}
+
+div#IconArea.landscape800x352{
+	background-image: url(../images/statusBar_800x352.png);
+}
+
+
+div.IconFile{
+	margin-left: auto;
+	margin-right: auto;
+	text-align: center;
+	padding: 20px;
+}
+
+div.IconFile:hover{
+	background-image: url(../images/IconArea-hover.png);
+	background-position: center center;
+	background-repeat: no-repeat;
+}
+
+div.IconFile p{
+	margin: 0px;
+}
+
+
+
+p.highlight span{
+	background-color: #fbf7a2;
+	font-weight: normal;
+	font-size: 0.8em;
+	padding: 3px;
+}
+
+/*
+	preferences CSS
+*/
+
+div#PreferencesBtn{
+	width: 75px;
+	height: 85px;
+	background-image: url(../images/settings-icon.png);
+	position: absolute;
+	top: 10px;
+	left: 10px;
+	background-position: left bottom;
+	z-index: 200;
+}
+
+div#PreferencesBtn:hover{
+	background-position: left top;
+}
+
+div#loaderDiv{
+	padding: 10px;
+	font-size: 1.1em;
+	position: absolute;
+	top: 0px;
+	right: 0px;
+	display: none;
+	z-index: 202;
+}
+
+div#loaderDiv.green{
+	background-color: #5abd2b;
+	color: #FFFFFF;
+}
+
+div#loaderDiv.yellow{
+	background-color: #ffff00;
+	color: #000000;
+}
+
+div#orientationIcon{
+	background-image: url(../images/normal-orientation-icon.png);
+	background-repeat: no-repeat;
+	width: 191px;
+	height: 72px;
+	float: left;
+	position: absolute;
+	left: 10px;
+	top: 0px;
+	display: none;
+}
+div#orientationIcon:hover{
+	background-image: url(../images/active-orientation-icon.png);
+}
+
+table{
+	border-top: 1px solid #808080;
+	border-left: 1px solid #808080;
+}
+
+table a.link{
+	background-color: #20c41c;
+	color: #ffffff;
+	font-weight: bold;
+	border: 1px solid #4e872c;
+	padding: 3px 2px;
+	text-decoration: none;
+	font-size: 80%;
+}
+
+table th, table td{
+	padding: 6px 5px;
+	border-bottom: 1px solid #808080;
+	border-right: 1px solid #808080;
+	font-size: 0.9em;
+}
+table th{
+	width: 150px;
+	text-align: left;
+	background-image: url(../images/th-bg-gradient.png);
+	background-repeat: repeat-x;
+	background-position: left bottom;
+}
+
+#NotificationDiv p{
+	color: #ffffff;
+	font-size: 95%;
+	padding: 5px;
+}
+
+strong{
+	color: #eee46c;
+}
+
+#BrowserNotificationBar{
+	z-index: 2000;
+	background-color: #f2eb8e;
+	border-bottom: 2px solid #f0d25e;
+	display: none;
+	position: absolute;
+	left: 0;
+	top: 0;
+	width: 100%;
+	font-size: 80%;
+	font-weight: bolder;
+	text-align: right;
+	margin: 0px;
+	opacity: 0.9;
+}
+#BrowserNotificationBar a{
+	height: 10px;
+	width: 10px;
+	float: right;
+	background-image: url(../images/BrowserNotificationBar-Toogle.gif);
+	background-position: 0px -10px;
+	margin : 4px 15px 0px 10px;
+	cursor: hand;
+	overflow: hidden;
+}
+/*
+	Event Triggering CSS
+*/
+
+h2{
+	font-size: 120%;
+	margin: 3px 0px;
+	padding: 0px;
+}
+
+#tabs-1, #tabs-2{
+	height: 223px;
+	overflow: auto;
+}
+
+#connect-charger-icon, #dis-connect-charger-icon{
+	background-repeat: no-repeat;
+	background-position: left top;
+	width: 165px;
+	height: 36px;
+	margin: 5px auto;
+}
+
+#connect-charger-icon{
+	background-image: url(../images/connect-charger-icon.png);
+}
+
+#dis-connect-charger-icon{
+	background-image: url(../images/dis-connect-charger-icon.png);
+}
+
+#connect-charger-icon:hover, #dis-connect-charger-icon:hover{
+	background-position: left bottom;
+}
+
+div#event-battery, div#event-messaging, div#event-memory{
+	float: left;
+	width: 150px;
+	height: 50px;
+	background-position: left top;
+	margin: 10px;
+	background-repeat: no-repeat;
+	border: 1px solid #6f6f6f;
+}
+
+div#event-battery.active:hover, div#event-messaging.active:hover, div#event-memory.active:hover{
+	background-position: 0px -50px;
+	border: 1px solid #75ea4f;
+}
+
+div#event-messaging.inactive, div#event-memory.inactive{
+	background-position: 0px -100px;
+	border: 1px solid #676767;
+}
+
+
+div#event-battery{
+	background-image: url(../images/battery-icon.png);
+}
+
+div#event-messaging{
+	background-image: url(../images/messaging-icon.png);
+}
+
+div#event-memory{
+	background-image: url(../images/memory-icon.png);
+}
+
+div.ui-panel{
+	height:30px;	
+}
+
+a.ui-button, a.ui-button-fixed {
+	background:#555555 url(../script/jquery-ui/css/ui-darkness/images/555555_40x100_textures_02_glass_20.png) repeat-x scroll 0 50%;
+	border:1px solid #666666;
+	color:#EEEEEE;
+	cursor:pointer;
+	font-size:0.9em;
+	font-weight:bolder;
+	line-height:1.4em;
+	margin:0.5em 8px 0.5em 0;
+	padding:0.2em 0.6em 0.3em;
+	text-decoration: none;
+}
+a.ui-button:hover, a.ui-button-fixed:hover {
+	background:#0078A3 url(../script/jquery-ui/css/ui-darkness/images/0078a3_40x100_textures_02_glass_40.png) repeat-x scroll 0 50%;
+	border:1px solid #4bd94b;
+	color:#FFFFFF;
+}
+
+a.ui-button-fixed{
+	float: left;
+	padding: 0.4em 0.6em 0.8em;
+	text-align: center;
+	width: 145px !important;
+}
+
+div#slider-value-panel{
+	text-align: center;
+	margin-top: 10px;
+}
+
+div#slider-value-panel span{
+	padding: 3px;
+	background:#0078A3 url(../script/jquery-ui/css/ui-darkness/images/0078a3_40x100_textures_02_glass_40.png) repeat-x scroll 0 50%;
+	border:1px solid #4bd94b;
+	color:#FFFFFF;
+	font-weight: bolder;
+}
+
+
+/*
+	Console UI
+*/
+#preview-ui-top{
+	overflow:auto;
+}
+
+#preview-ui-bottom{
+	overflow:hidden;
+	display: none;
+}
+#preview-ui-bottom-header{
+	background-color: #aeaeae;
+	background-image: url(../images/console-icon.gif);
+	background-repeat: repeat-x;
+	background-position: 0px -28px;
+}
+span#Console-Toggle-Button{
+	height: 9px;
+	width: 15px;
+	float: right;
+	background-repeat: no-repeat;
+	margin : 12px 8px 0px 0px;
+	cursor: hand;
+}
+
+span#Console-Toggle-Button.open{
+	background-position: 0px 0px;
+	background-image: url(../images/console-close-icon.png);
+}
+
+span#Console-Toggle-Button.open:hover{
+	background-position: 0px -9px;
+}
+
+span#Console-Toggle-Button.open:active{
+	background-position: 0px -18px;
+}
+
+
+span#Console-Toggle-Button.close{
+	background-position: 0px 0px;
+	background-image: url(../images/console-open-icon.png);
+}
+
+span#Console-Toggle-Button.close:hover{
+	background-position: 0px -9px;
+}
+
+span#Console-Toggle-Button.close:active{
+	background-position: 0px -18px;
+}
+
+
+span#Console-Clear-Button{
+	height: 16px;
+	width: 39px;
+	float: right;
+	background-image: url(../images/console-clear-button.png);
+	background-repeat: no-repeat;
+	margin : 10px 10px 0px 0px;
+	cursor: hand;
+}
+span#Console-Clear-Button:hover{
+	background-position: -0px -16px;
+}
+
+#preview-ui-bottom-body{
+	overflow:auto;
+	background-color: #ffffff;
+	display: none;
+}
+
+#preview-ui-bottom-body p{
+	font-family: "Courier New", Courier, monospace;
+	font-size: 11px;
+	padding: 2px 5px;
+	border-bottom: 1px solid silver;
+	margin: 0px;
+}
+
+#preview-ui-bottom-body p.log{
+
+}
+
+#preview-ui-bottom-body p.info{
+	background-image: url(../images/infoIcon.png);
+	background-repeat: no-repeat;
+	background-position: 5px center;
+	padding-left: 26px;
+}
+#preview-ui-bottom-body p.warn{
+	background: #00ffff url(../images/warningIcon.png);
+	background-repeat: no-repeat;
+	background-position: 5px center;
+	padding-left: 26px;
+}
+#preview-ui-bottom-body p.error{
+	background: #ffffe0 url(../images/errorIcon.png);
+	background-repeat: no-repeat;
+	background-position: 5px center;
+	padding-left: 26px;
+	color: #ff0000;
+}
+
+
+#preview-ui-bottom-header div{
+	float: left;
+	margin: 9px;
+	color: #ffffff;
+	font-size: 11px;
+	font-weight: bolder;
+	font-family: "Arial";
+}
+
+
+span#wrt-help{
+	height: 28px;
+	width: 28px;
+	float: right;
+	background-repeat: no-repeat;
+	background-image: url(../images/wrt-help-icon.png);
+}
+
+span#wrt-help:hover{
+	background-position: -28px 0px;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/preview/data/appManager_data.js	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,99 @@
+/**
+ * SAPI Sample Data - AppManager
+ */
+
+
+(function(){  
+	
+    var data_apps = [
+    {
+        "Path": "C:\\private\\10282822\\com.nokia.forum.widget.accuwidget\\AccuWidget\\accuwidget.xhtml",
+        "Uid": "0x2000dad2",
+        "Caption": "AccuWidget",
+        "ShortCaption": "AccuWidget"
+    }, {
+        "Path": "C:\\private\\10282822\\com.nokia.wrt.tools.sapi.CreatorWidget\\CreatorWidget\\index.html",
+        "Uid": "0x2000dadb",
+        "Caption": "Creator Widget",
+        "ShortCaption": "Creator Widget"
+	},{
+        "Path": "Z:\\sys\\bin\\lcapp.exe",
+        "Uid": "0x10283139",
+        "Caption": "Location",
+        "ShortCaption": "Location"
+    }, {
+        "Path": "Z:\\sys\\bin\\javadrmmanager.exe",
+        "Uid": "0x1028246e",
+        "Caption": "javadrmmanager",
+        "ShortCaption": "javadrmmanager"
+    }, {
+        "Path": "Z:\\sys\\bin\\iaupdater.exe",
+        "Uid": "0x2000f85d",
+        "Caption": "iaupdater",
+        "ShortCaption": "iaupdater"
+    }, {
+        "Path": "Z:\\sys\\bin\\iaupdate.exe",
+        "Uid": "0x2000f85a",
+        "Caption": "App. update",
+        "ShortCaption": "App. update"
+    }, {
+        "Path": "Z:\\sys\\bin\\SAFlash.exe",
+        "Uid": "0x101fd693",
+        "Caption": "Flash Lite",
+        "ShortCaption": "Flash Lite"
+    }, {
+        "Path": "Z:\\sys\\bin\\eswt.exe",
+        "Uid": "0x101f9516",
+        "Caption": "eswt",
+        "ShortCaption": "eswt"
+    }, {
+        "Path": "Z:\\sys\\bin\\DRMRightsManager.exe",
+        "Uid": "0x101f85c7",
+        "Caption": "Licences",
+        "ShortCaption": "Licences"
+    }, {
+        "Path": "Z:\\sys\\bin\\RoapApp.exe",
+        "Uid": "0x10008d64",
+        "Caption": "Licence download",
+        "ShortCaption": "Licence download"
+    }, {
+        "Path": "Z:\\sys\\bin\\DdViewer.exe",
+        "Uid": "0x10008d3f",
+        "Caption": "Download",
+        "ShortCaption": "Download"
+	}, {
+		"Path": "Z:\\sys\\bin\\MediaGallery2.exe",
+		"Uid": "0x101f8599",
+		"Caption": "Gallery",
+		"ShortCaption": "Gallery"
+    }, {
+        "Path": "Z:\\sys\\bin\\CodViewer.exe",
+        "Uid": "0x10008d4a",
+        "Caption": "Download",
+        "ShortCaption": "Download"
+    }];
+		
+		
+		
+    var data_packages = [{
+        "PackageName": "Mobiola Screen Capture",
+        "Uid": "0x2000be16",
+        "Version": "3:0",
+        "Vendor": "Warelex LLC",
+        "Drive": "E"
+    }, {
+        "PackageName": "Facebook",
+        "Uid": "0x20011184",
+        "Version": "1:0",
+        "Vendor": "Nokia Corporation",
+        "Drive": "C"
+    }];
+	
+	
+	/**
+	 * register data!
+	 */
+	device.implementation.loadData('Service.AppManager', 'Application', data_apps);
+	device.implementation.loadData('Service.AppManager', 'UserInstalledPackage', data_packages);
+
+})()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/preview/data/calendar_data.js	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,136 @@
+/**
+ * SAPI Sample Data - Calendar
+ */
+
+
+(function(){  
+
+
+    var data_entries = [{
+        "Type": "ToDo",
+        "Summary": "Face head on my problems",
+        "Description": "Face head on my problems",
+        "EndTime": "Wednesday, 15 April, 2009 12:00:00 am",
+        "id": "ihiwykmkjzcowqEnnEbeDnJpzWhPWrgNpNgudjdwgPfisvvQscuibwwSmgkdhdiBzIfyqvfIBmiYavfklygBssoKmWpJuxftbkdLsfmuwudczlJikohlFbQecaMlbaPnwyddzqXcjrhldXignjYtWyfqfzbpcxlH",
+        "LocalId": "34",
+        "Priority": 1,
+        "Replication": "Open"
+    }, {
+        "Type": "ToDo",
+        "Summary": "Believe myself first",
+        "Description": "Believe myself first",
+        "EndTime": "Sunday, 22 March, 2009 12:00:00 am",
+        "AlarmTime": "Saturday, 21 March, 2009 11:30:00 pm",
+        "id": "rjutskelXlDdoaebCyPzjopwgxMxluuLesqqsrykvIxrFLbxvuhBImBbhqwlSRfFtvWktkrvqpjfvxCoBxpsDlbgugvqjudregvyoebgtihRiSarcnryZovfwyHTcmXqZdjdrVPvSGnqroYgXdtpafqxTzrnkMKpzLihcxfaxwmdrkuGifsgbglhyfwqmtiPyzpeuxvKFfnrmhaqnrUarustDySMgKakjpFpkhtbonmTyBvhlzv",
+        "LocalId": "35",
+        "Priority": 1,
+        "Replication": "Open"
+    }, {
+        "Type": "Meeting",
+        "Summary": "Meeting with the professor",
+        "Description": "Meeting with the professor",
+        "StartTime": "Monday, 23 March, 2009 11:56:00 am",
+        "EndTime": "Monday, 23 March, 2009 2:31:00 pm",
+        "AlarmTime": "Monday, 23 March, 2009 11:01:00 am",
+        "InstanceStartTime": "Monday, 23 March, 2009 11:56:00 am",
+        "InstanceEndTime": "Monday, 23 March, 2009 2:31:00 pm",
+        "id": "hifXqeBiUOlelbioirmeoniClarsiybNhNxdlQbqBzcngmhxtzlRoebdeYxupjaxnapugxrKnmhGjzdwtChVydzwOdwrHPokjqjvyaPwbqCjdtpukjcoyjdkjkkrndZzwjCYQPxgvereyuktnOtIndpoyimtjzPzEnkxCfzhxaDTvUgclfpsfbtgtvwk",
+        "LocalId": "31",
+        "Priority": 0,
+        "Organizer": {
+            "CommonName": "Frideswide Farprington",
+            "Address": "Christian.Wilbar@Melleva.com"
+        },
+        "Replication": "Open"
+    }, {
+        "Type": "Meeting",
+        "Summary": "Work issues",
+        "Description": "Work issues",
+        "StartTime": "Saturday, 28 March, 2009 1:22:00 am",
+        "EndTime": "Saturday, 28 March, 2009 7:56:00 am",
+        "AlarmTime": "Saturday, 28 March, 2009 12:49:00 am",
+        "InstanceStartTime": "Saturday, 28 March, 2009 1:22:00 am",
+        "InstanceEndTime": "Saturday, 28 March, 2009 7:56:00 am",
+        "id": "symstNdkqdznkcettruqqyefdjkzikeBXmcamanzrygnusjyFYheprwaxksxzrqsdbnkTqemtsqqZbqnbbircyqtohmymWvqEc",
+        "LocalId": "30",
+        "Priority": 0,
+        "Organizer": {
+            "CommonName": "Margery Worthley",
+            "Address": "Grace.Wilbar@Peger.com"
+        },
+        "Replication": "Open"
+    }, {
+        "Type": "Reminder",
+        "Summary": "Remeber to harvest corn field",
+        "Description": "Remeber to harvest corn field",
+        "StartTime": "Thursday, 02 April, 2009 12:00:00 am",
+        "AlarmTime": "Wednesday, 01 April, 2009 11:52:00 pm",
+        "id": "uwtxgvTsowwGbnsgboEprwxvmihUkkDczxeohsnsXpUzUaHgjBJmjhpfOjaoyvRrjwIkgafrcszvbCSooutemfhejtyfonHviomgouimvPtexgdWmzDgGP",
+        "LocalId": "36",
+        "Priority": 0,
+        "Replication": "Open"
+    }, {
+        "Type": "Reminder",
+        "Summary": "Remeber to wax cross country skiis",
+        "Description": "Remeber to wax cross country skiis",
+        "StartTime": "Monday, 06 April, 2009 12:00:00 am",
+        "AlarmTime": "Sunday, 05 April, 2009 11:44:00 pm",
+        "id": "ivunsxcjmrsdaKkdtbqpskSIGIFOftMLwTuvCbiHmrkJnxdZgsapbqhoxNrhsbheyztgyOfvdqGrIlawVrvEwnYjnzoSlyimcxlKcSqetcruzf",
+        "LocalId": "37",
+        "Priority": 0,
+        "Replication": "Open"
+    }, {
+        "Type": "DayEvent",
+        "Summary": "Go the bank",
+        "Description": "Go the bank",
+        "StartTime": "Monday, 06 April, 2009 6:16:00 pm",
+        "EndTime": "Monday, 06 April, 2009 7:19:00 pm",
+        "AlarmTime": "Monday, 06 April, 2009 6:07:00 pm",
+        "id": "QvcvlpXpflemwqjtniukLPsjkSengqBEfajerjclkrwysdy",
+        "LocalId": "33",
+        "Priority": 0,
+        "Replication": "Open"
+    }, {
+        "Type": "DayEvent",
+        "Summary": "School day",
+        "Description": "School day",
+        "StartTime": "Thursday, 16 April, 2009 5:27:00 pm",
+        "EndTime": "Thursday, 16 April, 2009 9:39:00 pm",
+        "AlarmTime": "Thursday, 16 April, 2009 4:35:00 pm",
+        "id": "zmHupjqghnkEepdfghSCcsmFnrrducaqEyqyetauTcmxscSptpchgimxeEnOzxdiyEldyrikjmxvgzibauvjQfdbzgoumlVyAjqfhqlgpTtbiffqdzgpzWrquiyAdidvccvffzZxmpgjjbjUCqyeuBiikiedtclqabbsdazAbb",
+        "LocalId": "32",
+        "Priority": 0,
+        "Replication": "Open"
+    }];
+	
+	
+
+	name = "C:MyCalendar";
+	id = 200;
+	localId = 20;
+		
+/** start data block **/	
+var data2 = [];
+	
+	for (var i = 1; i <= 10; i++) {
+		data2.push({
+			Type		: 'Meeting',
+			id			: id++,
+			LocalId		: localId++,
+			CalendarName: name,
+			StartTime	: new Date('3/'+i+'/2009'),
+			Endtime		: new Date('3/'+(1+i)+'/2009'),
+			Description	: 'sample meeting ' + i
+		});
+	}
+/** end data block **/	
+
+
+
+	/**
+	 * register data!
+	 */
+	device.implementation.loadData('Service.Calendar', 'C:Calendar', data_entries);
+	device.implementation.loadData('Service.Calendar', 'C:MyCalendar', data2);
+
+})()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/preview/data/contact_data.js	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,158 @@
+/**
+ * SAPI Sample Data - Contacts
+ */
+
+(function(){
+
+
+	var data_contacts = [{
+	    "id": "î€î€€î€–î£î€€î®î€€î´î€€î¤î€€î¢î€€î€ºî€€î€¯î€€î€¯î€€î£î€€î€ºî€€î£î€€î¯î€€î®î€€î´î€€î¡î€€î£î€€î´î€€î³î€€î€®î€€î£î€€î¤î€€î¢î€€î€î€€î€€î€€î€€î€€î€‰î€€î€€î€€î€î€†î€€î€€î€€îƒ¿îƒ¿îƒ¿îƒ¿",
+	    "FirstName": {
+	        "Label": "First name",
+	        "Value": "Alice"
+	    },
+	    "LastName": {
+	        "Label": "Last name",
+	        "Value": "Moller"
+	    },
+	    "LandPhoneGen": {
+	        "Label": "Telephone",
+	        "Value": "0230328732"
+	    },
+	    "SyncClass": {
+	        "Label": "Synchronisation",
+	        "Value": "private"
+	    }
+	}, {
+	    "id": "î€î€€î€–î£î€€î®î€€î´î€€î¤î€€î¢î€€î€ºî€€î€¯î€€î€¯î€€î£î€€î€ºî€€î£î€€î¯î€€î®î€€î´î€€î¡î€€î£î€€î´î€€î³î€€î€®î€€î£î€€î¤î€€î¢î€€î€î€€î€€î€€î€€î€€î€‰î€€î€€î€€î€î€ˆî€€î€€î€€îƒ¿îƒ¿îƒ¿îƒ¿",
+	    "FirstName": {
+	        "Label": "First name",
+	        "Value": "Amy"
+	    },
+	    "LastName": {
+	        "Label": "Last name",
+	        "Value": "Kammer"
+	    },
+	    "LandPhoneGen": {
+	        "Label": "Telephone",
+	        "Value": "0492303652"
+	    },
+	    "SyncClass": {
+	        "Label": "Synchronisation",
+	        "Value": "private"
+	    }
+	}, {
+	    "id": "î€î€€î€–î£î€€î®î€€î´î€€î¤î€€î¢î€€î€ºî€€î€¯î€€î€¯î€€î£î€€î€ºî€€î£î€€î¯î€€î®î€€î´î€€î¡î€€î£î€€î´î€€î³î€€î€®î€€î£î€€î¤î€€î¢î€€î€î€€î€€î€€î€€î€€î€‰î€€î€€î€€î€î€‚",
+	    "SyncClass": {
+	        "Label": "Synchronisation",
+	        "Value": "private"
+	    },
+	    "LastName": {
+	        "Label": "Last name",
+	        "Value": "Bierman"
+	    },
+	    "FirstName": {
+	        "Label": "First name",
+	        "Value": "Michael"
+	    },
+	    "MobilePhoneGen": {
+	        "Label": "Mobile",
+	        "Value": "4084256071"
+	    }
+	}, {
+	    "id": "î€î€€î€–î£î€€î®î€€î´î€€î¤î€€î¢î€€î€ºî€€î€¯î€€î€¯î€€î£î€€î€ºî€€î£î€€î¯î€€î®î€€î´î€€î¡î€€î£î€€î´î€€î³î€€î€®î€€î£î€€î¤î€€î¢î€€î€î€€î€€î€€î€€î€€î€‰î€€î€€î€€î€î€‡î€€î€€î€€îƒ¿îƒ¿îƒ¿îƒ¿",
+	    "FirstName": {
+	        "Label": "First name",
+	        "Value": "Ralph"
+	    },
+	    "LastName": {
+	        "Label": "Last name",
+	        "Value": "Jacmor"
+	    },
+	    "LandPhoneGen": {
+	        "Label": "Telephone",
+	        "Value": "0432443343"
+	    },
+	    "SyncClass": {
+	        "Label": "Synchronisation",
+	        "Value": "private"
+	    }
+	}, {
+	    "id": "î€î€€î€–î£î€€î®î€€î´î€€î¤î€€î¢î€€î€ºî€€î€¯î€€î€¯î€€î£î€€î€ºî€€î£î€€î¯î€€î®î€€î´î€€î¡î€€î£î€€î´î€€î³î€€î€®î€€î£î€€î¤î€€î¢î€€î€î€€î€€î€€î€€î€€î€‰î€€î€€î€€î€î€…",
+	    "FirstName": {
+	        "Label": "First name",
+	        "Value": "Robert"
+	    },
+	    "LastName": {
+	        "Label": "Last name",
+	        "Value": "Richards"
+	    },
+	    "LandPhoneGen": {
+	        "Label": "Telephone",
+	        "Value": "+4443433434"
+	    },
+	    "SyncClass": {
+	        "Label": "Synchronisation",
+	        "Value": "private"
+	    }
+	}, {
+	    "id": "î€î€€î€–î£î€€î®î€€î´î€€î¤î€€î¢î€€î€ºî€€î€¯î€€î€¯î€€î£î€€î€ºî€€î£î€€î¯î€€î®î€€î´î€€î¡î€€î£î€€î´î€€î³î€€î€®î€€î£î€€î¤î€€î¢î€€î€î€€î€€î€€î€€î€€î€‰î€€î€€î€€î€î€„",
+	    "FirstName": {
+	        "Label": "First name",
+	        "Value": "Ursula"
+	    },
+	    "LastName": {
+	        "Label": "Last name",
+	        "Value": "West"
+	    },
+	    "LandPhoneGen": {
+	        "Label": "Telephone",
+	        "Value": "0213443434"
+	    },
+	    "SyncClass": {
+	        "Label": "Synchronisation",
+	        "Value": "private"
+	    }
+	}];  
+	
+
+    var data_groups = [{
+        "id": "î€î€€î€–î£î€€î®î€€î´î€€î¤î€€î¢î€€î€ºî€€î€¯î€€î€¯î€€î£î€€î€ºî€€î£î€€î¯î€€î®î€€î´î€€î¡î€€î£î€€î´î€€î³î€€î€®î€€î£î€€î¤î€€î¢î€€î€î€€î€€î€€î€€î€€î€‰î€€î€€î€€î€î€ƒî€€î€€î€€îƒ¿îƒ¿îƒ¿îƒ¿",
+        "GroupLabel": "TestGroupName"
+    }, {
+        "id": "î€î€€î€–î£î€€î®î€€î´î€€î¤î€€î¢î€€î€ºî€€î€¯î€€î€¯î€€î£î€€î€ºî€€î£î€€î¯î€€î®î€€î´î€€î¡î€€î£î€€î´î€€î³î€€î€®î€€î£î€€î¤î€€î¢î€€î€î€€î€€î€€î€€î€€î€‰î€€î€€î€€î€î€‰î€€î€€î€€îƒ¿îƒ¿îƒ¿îƒ¿",
+        "GroupLabel": "Silver club #5488",
+        "Contents": ["î€î€€î€–î£î€€î®î€€î´î€€î¤î€€î¢î€€î€ºî€€î€¯î€€î€¯î€€î£î€€î€ºî€€î£î€€î¯î€€î®î€€î´î€€î¡î€€î£î€€î´î€€î³î€€î€®î€€î£î€€î¤î€€î¢î€€î€î€€î€€î€€î€€î€€î€‰î€€î€€î€€î€î€‚", "î€î€€î€–î£î€€î®î€€î´î€€î¤î€€î¢î€€î€ºî€€î€¯î€€î€¯î€€î£î€€î€ºî€€î£î€€î¯î€€î®î€€î´î€€î¡î€€î£î€€î´î€€î³î€€î€®î€€î£î€€î¤î€€î¢î€€î€î€€î€€î€€î€€î€€î€‰î€€î€€î€€î€î€„", "î€î€€î€–î£î€€î®î€€î´î€€î¤î€€î¢î€€î€ºî€€î€¯î€€î€¯î€€î£î€€î€ºî€€î£î€€î¯î€€î®î€€î´î€€î¡î€€î£î€€î´î€€î³î€€î€®î€€î£î€€î¤î€€î¢î€€î€î€€î€€î€€î€€î€€î€‰î€€î€€î€€î€î€…", "î€î€€î€–î£î€€î®î€€î´î€€î¤î€€î¢î€€î€ºî€€î€¯î€€î€¯î€€î£î€€î€ºî€€î£î€€î¯î€€î®î€€î´î€€î¡î€€î£î€€î´î€€î³î€€î€®î€€î£î€€î¤î€€î¢î€€î€î€€î€€î€€î€€î€€î€‰î€€î€€î€€î€î€†î€€î€€î€€îƒ¿îƒ¿îƒ¿îƒ¿", "î€î€€î€–î£î€€î®î€€î´î€€î¤î€€î¢î€€î€ºî€€î€¯î€€î€¯î€€î£î€€î€ºî€€î£î€€î¯î€€î®î€€î´î€€î¡î€€î£î€€î´î€€î³î€€î€®î€€î£î€€î¤î€€î¢î€€î€î€€î€€î€€î€€î€€î€‰î€€î€€î€€î€î€‡î€€î€€î€€îƒ¿îƒ¿îƒ¿îƒ¿", "î€î€€î€–î£î€€î®î€€î´î€€î¤î€€î¢î€€î€ºî€€î€¯î€€î€¯î€€î£î€€î€ºî€€î£î€€î¯î€€î®î€€î´î€€î¡î€€î£î€€î´î€€î³î€€î€®î€€î£î€€î¤î€€î¢î€€î€î€€î€€î€€î€€î€€î€‰î€€î€€î€€î€î€ˆî€€î€€î€€îƒ¿îƒ¿îƒ¿îƒ¿"]
+    }, {
+        "id": "î€î€€î€–î£î€€î®î€€î´î€€î¤î€€î¢î€€î€ºî€€î€¯î€€î€¯î€€î£î€€î€ºî€€î£î€€î¯î€€î®î€€î´î€€î¡î€€î£î€€î´î€€î³î€€î€®î€€î£î€€î¤î€€î¢î€€î€î€€î€€î€€î€€î€€î€‰î€€î€€î€€î€î€Šî€€î€€î€€îƒ¿îƒ¿îƒ¿îƒ¿",
+        "GroupLabel": "The buddies #9926"
+    }, {
+        "id": "î€î€€î€–î£î€€î®î€€î´î€€î¤î€€î¢î€€î€ºî€€î€¯î€€î€¯î€€î£î€€î€ºî€€î£î€€î¯î€€î®î€€î´î€€î¡î€€î£î€€î´î€€î³î€€î€®î€€î£î€€î¤î€€î¢î€€î€î€€î€€î€€î€€î€€î€‰î€€î€€î€€î€î€‹î€€î€€î€€îƒ¿îƒ¿îƒ¿îƒ¿",
+        "GroupLabel": "Football team #5940",
+        "Contents": ["î€î€€î€–î£î€€î®î€€î´î€€î¤î€€î¢î€€î€ºî€€î€¯î€€î€¯î€€î£î€€î€ºî€€î£î€€î¯î€€î®î€€î´î€€î¡î€€î£î€€î´î€€î³î€€î€®î€€î£î€€î¤î€€î¢î€€î€î€€î€€î€€î€€î€€î€‰î€€î€€î€€î€î€‚", "î€î€€î€–î£î€€î®î€€î´î€€î¤î€€î¢î€€î€ºî€€î€¯î€€î€¯î€€î£î€€î€ºî€€î£î€€î¯î€€î®î€€î´î€€î¡î€€î£î€€î´î€€î³î€€î€®î€€î£î€€î¤î€€î¢î€€î€î€€î€€î€€î€€î€€î€‰î€€î€€î€€î€î€„"]
+    }, {
+        "id": "î€î€€î€–î£î€€î®î€€î´î€€î¤î€€î¢î€€î€ºî€€î€¯î€€î€¯î€€î£î€€î€ºî€€î£î€€î¯î€€î®î€€î´î€€î¡î€€î£î€€î´î€€î³î€€î€®î€€î£î€€î¤î€€î¢î€€î€î€€î€€î€€î€€î€€î€‰î€€î€€î€€î€î€Œî€€î€€î€€îƒ¿îƒ¿îƒ¿îƒ¿",
+        "GroupLabel": "Science group #2742",
+        "Contents": ["î€î€€î€–î£î€€î®î€€î´î€€î¤î€€î¢î€€î€ºî€€î€¯î€€î€¯î€€î£î€€î€ºî€€î£î€€î¯î€€î®î€€î´î€€î¡î€€î£î€€î´î€€î³î€€î€®î€€î£î€€î¤î€€î¢î€€î€î€€î€€î€€î€€î€€î€‰î€€î€€î€€î€î€‚", "î€î€€î€–î£î€€î®î€€î´î€€î¤î€€î¢î€€î€ºî€€î€¯î€€î€¯î€€î£î€€î€ºî€€î£î€€î¯î€€î®î€€î´î€€î¡î€€î£î€€î´î€€î³î€€î€®î€€î£î€€î¤î€€î¢î€€î€î€€î€€î€€î€€î€€î€‰î€€î€€î€€î€î€„", "î€î€€î€–î£î€€î®î€€î´î€€î¤î€€î¢î€€î€ºî€€î€¯î€€î€¯î€€î£î€€î€ºî€€î£î€€î¯î€€î®î€€î´î€€î¡î€€î£î€€î´î€€î³î€€î€®î€€î£î€€î¤î€€î¢î€€î€î€€î€€î€€î€€î€€î€‰î€€î€€î€€î€î€…", "î€î€€î€–î£î€€î®î€€î´î€€î¤î€€î¢î€€î€ºî€€î€¯î€€î€¯î€€î£î€€î€ºî€€î£î€€î¯î€€î®î€€î´î€€î¡î€€î£î€€î´î€€î³î€€î€®î€€î£î€€î¤î€€î¢î€€î€î€€î€€î€€î€€î€€î€‰î€€î€€î€€î€î€†î€€î€€î€€îƒ¿îƒ¿îƒ¿îƒ¿", "î€î€€î€–î£î€€î®î€€î´î€€î¤î€€î¢î€€î€ºî€€î€¯î€€î€¯î€€î£î€€î€ºî€€î£î€€î¯î€€î®î€€î´î€€î¡î€€î£î€€î´î€€î³î€€î€®î€€î£î€€î¤î€€î¢î€€î€î€€î€€î€€î€€î€€î€‰î€€î€€î€€î€î€‡î€€î€€î€€îƒ¿îƒ¿îƒ¿îƒ¿", "î€î€€î€–î£î€€î®î€€î´î€€î¤î€€î¢î€€î€ºî€€î€¯î€€î€¯î€€î£î€€î€ºî€€î£î€€î¯î€€î®î€€î´î€€î¡î€€î£î€€î´î€€î³î€€î€®î€€î£î€€î¤î€€î¢î€€î€î€€î€€î€€î€€î€€î€‰î€€î€€î€€î€î€ˆî€€î€€î€€îƒ¿îƒ¿îƒ¿îƒ¿"]
+    }, {
+        "id": "î€î€€î€–î£î€€î®î€€î´î€€î¤î€€î¢î€€î€ºî€€î€¯î€€î€¯î€€î£î€€î€ºî€€î£î€€î¯î€€î®î€€î´î€€î¡î€€î£î€€î´î€€î³î€€î€®î€€î£î€€î¤î€€î¢î€€î€î€€î€€î€€î€€î€€î€‰î€€î€€î€€î€î€î€€î€€î€€îƒ¿îƒ¿îƒ¿îƒ¿",
+        "GroupLabel": "Rockers #3062",
+        "Contents": ["î€î€€î€–î£î€€î®î€€î´î€€î¤î€€î¢î€€î€ºî€€î€¯î€€î€¯î€€î£î€€î€ºî€€î£î€€î¯î€€î®î€€î´î€€î¡î€€î£î€€î´î€€î³î€€î€®î€€î£î€€î¤î€€î¢î€€î€î€€î€€î€€î€€î€€î€‰î€€î€€î€€î€î€‚", "î€î€€î€–î£î€€î®î€€î´î€€î¤î€€î¢î€€î€ºî€€î€¯î€€î€¯î€€î£î€€î€ºî€€î£î€€î¯î€€î®î€€î´î€€î¡î€€î£î€€î´î€€î³î€€î€®î€€î£î€€î¤î€€î¢î€€î€î€€î€€î€€î€€î€€î€‰î€€î€€î€€î€î€„", "î€î€€î€–î£î€€î®î€€î´î€€î¤î€€î¢î€€î€ºî€€î€¯î€€î€¯î€€î£î€€î€ºî€€î£î€€î¯î€€î®î€€î´î€€î¡î€€î£î€€î´î€€î³î€€î€®î€€î£î€€î¤î€€î¢î€€î€î€€î€€î€€î€€î€€î€‰î€€î€€î€€î€î€…", "î€î€€î€–î£î€€î®î€€î´î€€î¤î€€î¢î€€î€ºî€€î€¯î€€î€¯î€€î£î€€î€ºî€€î£î€€î¯î€€î®î€€î´î€€î¡î€€î£î€€î´î€€î³î€€î€®î€€î£î€€î¤î€€î¢î€€î€î€€î€€î€€î€€î€€î€‰î€€î€€î€€î€î€†î€€î€€î€€îƒ¿îƒ¿îƒ¿îƒ¿", "î€î€€î€–î£î€€î®î€€î´î€€î¤î€€î¢î€€î€ºî€€î€¯î€€î€¯î€€î£î€€î€ºî€€î£î€€î¯î€€î®î€€î´î€€î¡î€€î£î€€î´î€€î³î€€î€®î€€î£î€€î¤î€€î¢î€€î€î€€î€€î€€î€€î€€î€‰î€€î€€î€€î€î€‡î€€î€€î€€îƒ¿îƒ¿îƒ¿îƒ¿", "î€î€€î€–î£î€€î®î€€î´î€€î¤î€€î¢î€€î€ºî€€î€¯î€€î€¯î€€î£î€€î€ºî€€î£î€€î¯î€€î®î€€î´î€€î¡î€€î£î€€î´î€€î³î€€î€®î€€î£î€€î¤î€€î¢î€€î€î€€î€€î€€î€€î€€î€‰î€€î€€î€€î€î€ˆî€€î€€î€€îƒ¿îƒ¿îƒ¿îƒ¿"]
+    }];
+		
+		
+    var data_database = [{
+        "DBUri": "cntdb://c:contacts.cdb"
+    },{
+        "DBUri": "sim://global_adn"
+	}];
+    
+    
+    /**
+     * register data!
+     */
+    device.implementation.loadData('Service.Contact', 'Contact', data_contacts);
+    device.implementation.loadData('Service.Contact', 'Group', data_groups);
+    device.implementation.loadData('Service.Contact', 'Database', data_database);
+    
+})()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/preview/data/landmarks_data.js	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,339 @@
+/**
+ * SAPI Sample Data - Landmark
+ */
+
+(function(){
+
+	var data_landmark =	[{
+		"id":"47",
+		"LandmarkName":"Best food ever!",
+		"LandmarkPosition":{
+			"Latitude":-17.5423,
+			"Longitude":-54.8163,
+			"Altitude":82,
+			"HAccuracy":2,
+			"VAccuracy":4
+		},
+		"CategoryInfo":["1"],
+		"LandmarkDesc":"Place looks really nice.",
+		"LandmarkFields":{
+			"Country":"Finland",
+			"City":"Tokyo",
+			"AreaCode":"FI-70100",
+			"Street":"Plains Road",
+			"Telephone":"+4443433434"
+		}
+	},{
+		"id":"44",
+		"LandmarkName":"Food store",
+		"LandmarkPosition":{
+			"Latitude":65.4233,
+			"Longitude":-93.4225,
+			"Altitude":54,
+			"HAccuracy":1,
+			"VAccuracy":1
+		},
+		"CategoryInfo":["10"],
+		"LandmarkDesc":"Words are not enough to describe this landmark",
+		"LandmarkFields":{
+			"Country":"Finland",
+			"City":"St. Michel",
+			"AreaCode":"11233",
+			"Street":"McKenzie Avenue",
+			"Telephone":"0432443343"
+		}
+	},{
+		"id":"40",
+		"LandmarkName":"Hospital",
+		"LandmarkPosition":{
+			"Latitude":-2.4616,
+			"Longitude":51.4958,
+			"Altitude":43,
+			"HAccuracy":3,
+			"VAccuracy":3
+		},
+		"CategoryInfo":["13"],
+		"LandmarkDesc":"Place looks really nice.",
+		"LandmarkFields":{
+			"Country":"United States of America",
+			"City":"London",
+			"AreaCode":"11233",
+			"Street":"Pukershire Avenue",
+			"Telephone":"0565645455"
+		}
+	},{
+		"id":"45",
+		"LandmarkName":"John’s home",
+		"LandmarkPosition":{
+			"Latitude":36.9077,
+			"Longitude":134.4066,
+			"Altitude":42,
+			"HAccuracy":3,
+			"VAccuracy":5
+		},
+		"CategoryInfo":["14"],
+		"LandmarkDesc":"This is my favorite place",
+		"LandmarkFields":{
+			"City":"Los Angeles",
+			"AreaCode":"00310",
+			"Street":"McKenzie Lane",
+			"Telephone":"+35854553456",
+			"Country":"Japan"
+		}
+	},{
+		"id":"48",
+		"LandmarkName":"John’s home",
+		"LandmarkPosition":{
+			"Latitude":17.1817,
+			"Longitude":113.4183,
+			"Altitude":29,
+			"HAccuracy":3,
+			"VAccuracy":2
+		},
+		"CategoryInfo":["3"],
+		"LandmarkDesc":"Words are not enough to describe this landmark",
+		"LandmarkFields":{
+			"Country":"Norway",
+			"City":"St. Petersburg",
+			"AreaCode":"FI-70100",
+			"Street":"Windsor Road",
+			"Telephone":"+4465665456"
+		}
+	},{
+		"id":"49",
+		"LandmarkName":"Nice beach",
+		"LandmarkPosition":{
+			"Latitude":-22.0327,
+			"Longitude":-33.0193,
+			"Altitude":57,
+			"HAccuracy":1,
+			"VAccuracy":0
+		},
+		"CategoryInfo":["7"],
+		"LandmarkDesc":"This is my favorite place",
+		"LandmarkFields":{
+			"Telephone":"+35854553456",
+			"Country":"Finland",
+			"City":"Bangkok",
+			"AreaCode":"00310",
+			"Street":"Highland Avenue Extension"
+		}
+	},{
+		"id":"42",
+		"LandmarkName":"Nice view",
+		"LandmarkPosition":{
+			"Latitude":-1.5979999999999999,
+			"Longitude":177.5871,
+			"Altitude":23,
+			"HAccuracy":1,
+			"VAccuracy":4
+		},
+		"CategoryInfo":["5"],
+		"LandmarkDesc":"Words are not enough to describe this landmark",
+		"LandmarkFields":{
+			"Country":"Thailand",
+			"City":"St. Petersburg",
+			"AreaCode":"00310",
+			"Street":"Pukershire Avenue",
+			"Telephone":"0435445454"
+		}
+	},{
+		"id":"41",
+		"LandmarkName":"Summer cottage",
+		"LandmarkPosition":{
+			"Latitude":-80.6438,
+			"Longitude":78.5627,
+			"Altitude":60,
+			"HAccuracy":1,
+			"VAccuracy":4
+		},
+		"CategoryInfo":["11"],
+		"LandmarkDesc":"Place looks really nice.",
+		"LandmarkFields":{
+			"Country":"Thailand",
+			"City":"Havana",
+			"AreaCode":"99002",
+			"Street":"Eastman Street",
+			"Telephone":"+4465665456"
+		}
+	},{
+		"id":"43",
+		"LandmarkName":"Summer cottage",
+		"LandmarkPosition":{
+			"Latitude":23.6319,
+			"Longitude":-141.5323,
+			"Altitude":60,
+			"HAccuracy":2,
+			"VAccuracy":2
+		},
+		"CategoryInfo":["1"],
+		"LandmarkDesc":"This is my favorite place",
+		"LandmarkFields":{
+			"Country":"Norway",
+			"City":"Nairobi",
+			"AreaCode":"FI-70100",
+			"Street":"Windsor Avenue",
+			"Telephone":"0785434444"
+		}
+	},{
+		"id":"46",
+		"LandmarkName":"Work place",
+		"LandmarkPosition":{
+			"Latitude":1.7755,
+			"Longitude":66.132,
+			"Altitude":36,
+			"HAccuracy":5,
+			"VAccuracy":5
+		},
+		"CategoryInfo":["3"],
+		"LandmarkDesc":"Delicious strawberries sold here. Must visit again sometime!",
+		"LandmarkFields":{
+			"Country":"Kenya",
+			"City":"Havana",
+			"AreaCode":"99002",
+			"Street":"Barnes Street",
+			"Telephone":"0342303777"
+		}
+	}];
+	
+	
+	var data_category =	[{
+		"id":"1",
+		"CategoryName":"Accommodation",
+		"GlobalId":"3000",
+		"IconFile":"\resource\apps\eposlmglcategories.mif",
+		"IconIndex":16384,
+		"IconMaskIndex":16385
+	},{
+
+		"id":"2",
+		"CategoryName":"Businesses",
+		"GlobalId":"6000",
+		"IconFile":"\resource\apps\eposlmglcategories.mif",
+		"IconIndex":16386,
+		"IconMaskIndex":16387
+	},{
+		"id":"3",
+		"CategoryName":"Telecommunications",
+		"GlobalId":"9000",
+		"IconFile":"\resource\apps\eposlmglcategories.mif",
+		"IconIndex":16388,
+		"IconMaskIndex":16389
+	},{
+		"id":"4",
+		"CategoryName":"Education",
+		"GlobalId":"12000",
+		"IconFile":"\resource\apps\eposlmglcategories.mif",
+		"IconIndex":16390,
+		"IconMaskIndex":16391
+	},{
+		"id":"5",
+		"CategoryName":"Entertainment",
+		"GlobalId":"15000",
+		"IconFile":"\resource\apps\eposlmglcategories.mif",
+		"IconIndex":16392,
+		"IconMaskIndex":16393
+	},{
+		"id":"6",
+		"CategoryName":"Food and drink",
+		"GlobalId":"18000",
+		"IconFile":"\resource\apps\eposlmglcategories.mif",
+		"IconIndex":16394,
+		"IconMaskIndex":16395
+	},{
+		"id":"7",
+		"CategoryName":"Geographical locations",
+		"GlobalId":"21000",
+		"IconFile":"\resource\apps\eposlmglcategories.mif",
+		"IconIndex":16396,
+		"IconMaskIndex":16397
+	},{
+		"id":"8",
+		"CategoryName":"Outdoor activities",
+		"GlobalId":"24000",
+		"IconFile":"\resource\apps\eposlmglcategories.mif",
+		"IconIndex":16398,
+		"IconMaskIndex":16399
+	},{
+		"id":"9",
+		"CategoryName":"People",
+		"GlobalId":"27000",
+		"IconFile":"\resource\apps\eposlmglcategories.mif",
+		"IconIndex":16400,
+		"IconMaskIndex":16401
+	},{
+		"id":"10",
+		"CategoryName":"Public services",
+		"GlobalId":"30000",
+		"IconFile":"\resource\apps\eposlmglcategories.mif",
+		"IconIndex":16402,
+		"IconMaskIndex":16403
+	},{
+		"id":"11",
+		"CategoryName":"Places of worship",
+		"GlobalId":"33000",
+		"IconFile":"\resource\apps\eposlmglcategories.mif",
+		"IconIndex":16404,
+		"IconMaskIndex":16405
+	},{
+		"id":"12",
+		"CategoryName":"Shopping",
+		"GlobalId":"36000",
+		"IconFile":"\resource\apps\eposlmglcategories.mif",
+		"IconIndex":16406,
+		"IconMaskIndex":16407
+	},{
+		"id":"13",
+		"CategoryName":"Sightseeing",
+		"GlobalId":"39000",
+		"IconFile":"\resource\apps\eposlmglcategories.mif",
+		"IconIndex":16408,
+		"IconMaskIndex":16409
+	},{
+		"id":"14",
+		"CategoryName":"Sports",
+		"GlobalId":"42000",
+		"IconFile":"\resource\apps\eposlmglcategories.mif",
+		"IconIndex":16410,
+		"IconMaskIndex":16411
+	},{
+		"id":"15",
+		"CategoryName":"Transport",
+		"GlobalId":"45000",
+		"IconFile":"\resource\apps\eposlmglcategories.mif",
+		"IconIndex":16412,
+		"IconMaskIndex":16413
+	},{
+		"id":"24",
+		"CategoryName":"All places",
+		"IconFile":"Z:\resource\apps\smart2go.mif",
+		"IconIndex":16384,
+		"IconMaskIndex":16385
+	},{
+		"id":"25",
+		"CategoryName":"Nokia maps",
+		"IconFile":"Z:\resource\apps\LmkUi.mif",
+		"IconIndex":16402,
+		"IconMaskIndex":16403
+	}];
+	
+	var data_database =	[{
+		"DatabaseURI":"file://C:eposlm.ldb",
+		"DatabaseName":"",
+		"DbProtocol":"file",
+		"DbActive":false,
+		"DbSize":226,
+		"DbDrive":"C",
+		"DbMedia":9
+	}]; 
+
+
+    /**
+     * register data!
+     */
+    device.implementation.loadData('Service.Landmarks', 'Landmark', data_landmark);
+    device.implementation.loadData('Service.Landmarks', 'Category', data_category);
+    device.implementation.loadData('Service.Landmarks', 'Database', data_database);
+
+})()
+	
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/preview/data/location_data.js	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,39 @@
+/**
+ * SAPI Sample Data - Location
+ */
+
+(function(){
+
+		
+var data_basicLocationInformation = {
+			"Longitude":77.694589331833,
+			"Latitude":12.942209068513,
+			"Altitude":836.5
+		}
+		
+var data_genericLocationInfo = {
+			"Longitude":77.694546416505,
+			"Latitude":12.942233711299,
+			"Altitude":836,
+			"HorizontalSpeed":0.05999999865889549,
+			"HorizontalSpeedError":1.0199999809265137,
+			"SatelliteNumView":11,
+			"SatelliteNumViewUsed":7,
+			"Heading":203.89999389648438,
+			"HeadingError":2.89898989898232,
+			"MagneticCourse":205.89999389600000,
+			"MagneticCourseError":1.09090389600000,
+			"TrueCourse":203.89999389648438,
+			"TrueCourseError":2.89898989898232,
+			"MagneticHeading":205.89999389600000,
+			"MagneticHeadingError":1.09090389600000
+		}; 
+
+    /**
+     * register data!
+     */
+    device.implementation.loadData('Service.Location', 'BasicLocationInformation', data_basicLocationInformation);
+    device.implementation.loadData('Service.Location', 'GenericLocationInfo', data_genericLocationInfo);
+
+})()
+	
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/preview/data/logging_data.js	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,377 @@
+/**
+ * SAPI Sample Data - Logging
+ */
+
+(function(){
+
+
+	var logging_data = [{
+		"EventType":0,
+		"RemoteParty":"",
+		"EventDuration":5518,
+		"EventTime":"Wednesday, 08 April, 2009 11:17:42 am",
+		"Subject":"A",
+		"PhoneNumber":"5270443",
+		"Description":"Voice call",
+		"Link":0,
+		"id":"30",
+		"Direction":1,
+		"EventData":""
+	},{
+		"EventType":0,
+		"RemoteParty":"",
+		"EventDuration":472,
+		"EventTime":"Wednesday, 08 April, 2009 11:17:42 am",
+		"Subject":"A",
+		"PhoneNumber":"1247463",
+		"Description":"Voice call",
+		"Link":0,
+		"id":"29",
+		"Direction":1,
+		"EventData":""
+	},{
+		"EventType":0,
+		"RemoteParty":"",
+		"EventDuration":1914,
+		"EventTime":"Wednesday, 08 April, 2009 11:17:42 am",
+		"Subject":"A",
+		"PhoneNumber":"8759891",
+		"Description":"Voice call",
+		"Link":0,
+		"id":"28",
+		"Direction":1,
+		"EventData":""
+	},{
+		"EventType":0,
+		"RemoteParty":"",
+		"EventDuration":3130,
+		"EventTime":"Wednesday, 08 April, 2009 11:17:32 am",
+		"Subject":"A",
+		"PhoneNumber":"3200343",
+		"Description":"Voice call",
+		"Link":0,
+		"id":"27",
+		"Direction":0,
+		"EventData":""
+	},{
+		"EventType":0,
+		"RemoteParty":"",
+		"EventDuration":4128,
+		"EventTime":"Wednesday, 08 April, 2009 11:17:32 am",
+		"Subject":"A",
+		"PhoneNumber":"2101692",
+		"Description":"Voice call",
+		"Link":0,
+		"id":"26",
+		"Direction":0,
+		"EventData":""
+	},{
+		"EventType":0,
+		"RemoteParty":"",
+		"EventDuration":2012,
+		"EventTime":"Wednesday, 08 April, 2009 11:17:32 am",
+		"Subject":"A",
+		"PhoneNumber":"8813355",
+		"Description":"Voice call",
+		"Link":0,
+		"id":"25",
+		"Direction":0,
+		"EventData":""
+	},{
+		"EventType":0,
+		"RemoteParty":"",
+		"EventDuration":0,
+		"EventTime":"Wednesday, 08 April, 2009 11:17:24 am",
+		"Subject":"A",
+		"PhoneNumber":"8092875",
+		"Description":"Voice call",
+		"Link":0,
+		"id":"24",
+		"Direction":5,
+		"EventData":""
+	},{
+		"EventType":0,
+		"RemoteParty":"",
+		"EventDuration":0,
+		"EventTime":"Wednesday, 08 April, 2009 11:17:24 am",
+		"Subject":"A",
+		"PhoneNumber":"3702771",
+		"Description":"Voice call",
+		"Link":0,
+		"id":"23",
+		"Direction":5,
+		"EventData":""
+	},{
+		"EventType":0,
+		"RemoteParty":"",
+		"EventDuration":0,
+		"EventTime":"Wednesday, 08 April, 2009 11:17:24 am",
+		"Subject":"A",
+		"PhoneNumber":"2680939",
+		"Description":"Voice call",
+		"Link":0,
+		"id":"22",
+		"Direction":5,
+		"EventData":""
+	},{
+		"EventType":0,
+		"RemoteParty":"",
+		"EventDuration":0,
+		"EventTime":"Wednesday, 08 April, 2009 11:17:11 am",
+		"Subject":"A",
+		"PhoneNumber":"1075503",
+		"Description":"Voice call",
+		"Link":0,
+		"id":"21",
+		"Direction":5,
+		"EventData":""
+	},{
+		"EventType":0,
+		"RemoteParty":"",
+		"EventDuration":0,
+		"EventTime":"Wednesday, 08 April, 2009 11:17:11 am",
+		"Subject":"A",
+		"PhoneNumber":"9781533",
+		"Description":"Voice call",
+		"Link":0,
+		"id":"20",
+		"Direction":5,
+		"EventData":""
+	},{
+		"EventType":0,
+		"RemoteParty":"",
+		"EventDuration":0,
+		"EventTime":"Wednesday, 08 April, 2009 11:17:11 am",
+		"Subject":"A",
+		"PhoneNumber":"4185107",
+		"Description":"Voice call",
+		"Link":0,
+		"id":"19",
+		"Direction":5,
+		"EventData":""
+	},{
+		"EventType":4,
+		"RemoteParty":"Mobile Office",
+		"EventDuration":90,
+		"EventTime":"Wednesday, 08 April, 2009 11:18:37 am",
+		"Subject":"",
+		"PhoneNumber":"",
+		"Description":"Packet Data",
+		"Link":0,
+		"id":"18",
+		"Direction":1,
+		"EventData":""
+	},{
+		"EventType":4,
+		"RemoteParty":"Mobile Office",
+		"EventDuration":80,
+		"EventTime":"Wednesday, 08 April, 2009 11:15:30 am",
+		"Subject":"",
+		"PhoneNumber":"",
+		"Description":"Packet Data",
+		"Link":0,
+		"id":"18",
+		"Direction":1,
+		"EventData":""
+	},{
+		"EventType":4,
+		"RemoteParty":"Mobile Office",
+		"EventDuration":16,
+		"EventTime":"Wednesday, 08 April, 2009 11:12:33 am",
+		"Subject":"",
+		"PhoneNumber":"",
+		"Description":"Packet Data",
+		"Link":0,
+		"id":"17",
+		"Direction":1,
+		"EventData":"8303,17570"
+	},{
+		"EventType":0,
+		"RemoteParty":"",
+		"EventDuration":2998,
+		"EventTime":"Wednesday, 08 April, 2009 11:09:20 am",
+		"Subject":"A",
+		"PhoneNumber":"1716582",
+		"Description":"Voice call",
+		"Link":0,
+		"id":"16",
+		"Direction":1,
+		"EventData":""
+	},{
+		"EventType":0,
+		"RemoteParty":"",
+		"EventDuration":681,
+		"EventTime":"Wednesday, 08 April, 2009 11:09:20 am",
+		"Subject":"A",
+		"PhoneNumber":"9888150",
+		"Description":"Voice call",
+		"Link":0,
+		"id":"15",
+		"Direction":1,
+		"EventData":""
+	},{
+		"EventType":0,
+		"RemoteParty":"",
+		"EventDuration":2294,
+		"EventTime":"Wednesday, 08 April, 2009 11:09:20 am",
+		"Subject":"A",
+		"PhoneNumber":"8378283",
+		"Description":"Voice call",
+		"Link":0,
+		"id":"14",
+		"Direction":1,
+		"EventData":""
+	},{
+		"EventType":0,
+		"RemoteParty":"",
+		"EventDuration":4232,
+		"EventTime":"Wednesday, 08 April, 2009 11:09:19 am",
+		"Subject":"A",
+		"PhoneNumber":"6818380",
+		"Description":"Voice call",
+		"Link":0,
+		"id":"13",
+		"Direction":1,
+		"EventData":""
+	},{
+		"EventType":0,
+		"RemoteParty":"",
+		"EventDuration":599,
+		"EventTime":"Wednesday, 08 April, 2009 11:09:19 am",
+		"Subject":"A",
+		"PhoneNumber":"5933409",
+		"Description":"Voice call",
+		"Link":0,
+		"id":"12",
+		"Direction":1,
+		"EventData":""
+	},{
+		"EventType":0,
+		"RemoteParty":"",
+		"EventDuration":6376,
+		"EventTime":"Wednesday, 08 April, 2009 11:09:12 am",
+		"Subject":"A",
+		"PhoneNumber":"5487982",
+		"Description":"Voice call",
+		"Link":0,
+		"id":"11",
+		"Direction":0,
+		"EventData":""
+	},{
+		"EventType":0,
+		"RemoteParty":"",
+		"EventDuration":6325,
+		"EventTime":"Wednesday, 08 April, 2009 11:09:12 am",
+		"Subject":"A",
+		"PhoneNumber":"2859596",
+		"Description":"Voice call",
+		"Link":0,
+		"id":"10",
+		"Direction":0,
+		"EventData":""
+	},{
+		"EventType":0,
+		"RemoteParty":"",
+		"EventDuration":6571,
+		"EventTime":"Wednesday, 08 April, 2009 11:09:12 am",
+		"Subject":"A",
+		"PhoneNumber":"2820138",
+		"Description":"Voice call",
+		"Link":0,
+		"id":"9",
+		"Direction":0,
+		"EventData":""
+	},{
+		"EventType":0,
+		"RemoteParty":"",
+		"EventDuration":4929,
+		"EventTime":"Wednesday, 08 April, 2009 11:09:12 am",
+		"Subject":"A",
+		"PhoneNumber":"6356454",
+		"Description":"Voice call",
+		"Link":0,
+		"id":"8",
+		"Direction":0,
+		"EventData":""
+	},{
+		"EventType":0,
+		"RemoteParty":"",
+		"EventDuration":2620,
+		"EventTime":"Wednesday, 08 April, 2009 11:09:12 am",
+		"Subject":"A",
+		"PhoneNumber":"4461166",
+		"Description":"Voice call",
+		"Link":0,
+		"id":"7",
+		"Direction":0,
+		"EventData":""
+	},{
+		"EventType":0,
+		"RemoteParty":"",
+		"EventDuration":0,
+		"EventTime":"Wednesday, 08 April, 2009 11:09:02 am",
+		"Subject":"A",
+		"PhoneNumber":"8811808",
+		"Description":"Voice call",
+		"Link":0,
+		"id":"6",
+		"Direction":5,
+		"EventData":""
+	},{
+		"EventType":0,
+		"RemoteParty":"",
+		"EventDuration":0,
+		"EventTime":"Wednesday, 08 April, 2009 11:09:02 am",
+		"Subject":"A",
+		"PhoneNumber":"2985843",
+		"Description":"Voice call",
+		"Link":0,
+		"id":"5",
+		"Direction":5,
+		"EventData":""
+	},{
+		"EventType":0,
+		"RemoteParty":"",
+		"EventDuration":0,
+		"EventTime":"Wednesday, 08 April, 2009 11:09:02 am",
+		"Subject":"A",
+		"PhoneNumber":"9714278",
+		"Description":"Voice call",
+		"Link":0,
+		"id":"4",
+		"Direction":5,
+		"EventData":""
+	},{
+		"EventType":0,
+		"RemoteParty":"",
+		"EventDuration":0,
+		"EventTime":"Wednesday, 08 April, 2009 11:09:02 am",
+		"Subject":"A",
+		"PhoneNumber":"5044910",
+		"Description":"Voice call",
+		"Link":0,
+		"id":"3",
+		"Direction":5,
+		"EventData":""
+	},{
+		"EventType":0,
+		"RemoteParty":"",
+		"EventDuration":0,
+		"EventTime":"Wednesday, 08 April, 2009 11:09:02 am",
+		"Subject":"A",
+		"PhoneNumber":"6519793",
+		"Description":"Voice call",
+		"Link":0,
+		"id":"2",
+		"Direction":5,
+		"EventData":""
+	}];
+
+
+    /**
+     * register data!
+     */
+    device.implementation.loadData('Service.Logging', 'Log', logging_data);
+
+})()
+	
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/preview/data/mediaManagement_data.js	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,233 @@
+/**
+ * SAPI Sample Data - MediaManagement
+ */
+
+(function(){
+
+	var music_data = [{
+		"FileNameAndPath":"E:\\Sounds\\Digital\\Album1\\Breathless.mp3",
+		"Type":"Media",
+		"FileName":"Breathless",
+		"FileExtension":".mp3",
+		"Drive":"E:",
+		"MimeType":"audio/mpeg",
+		"MediaType":1,
+		"FileDate":"Friday, 13 February, 2009 12:01:24 am",
+		"FileSize":4552794,
+		"Artist":"ABC",
+		"SongName":"Breathless",
+		"TrackNumber":"1",
+		"Album":"Album1",
+		"Genre":"Pop",
+		"Composer":"XYZ"
+	},{
+		"FileNameAndPath":"E:\\Sounds\\Digital\\Album1\\New song.mp3",
+		"Type":"Media",
+		"FileName":"New song",
+		"FileExtension":".mp3",
+		"Drive":"E:",
+		"MimeType":"audio/mpeg",
+		"MediaType":1,
+		"FileDate":"Friday, 13 February, 2009 12:01:24 am",
+		"FileSize":1232794,
+		"Artist":"ABC",
+		"SongName":"New song",
+		"TrackNumber":"2",
+		"Album":"Album1",
+		"Genre":"Pop",
+		"Composer":"XYZ"
+	},{		
+		"FileNameAndPath":"E:\\Sounds\\Digital\\Album1\\Classic song.mp3",
+		"Type":"Media",
+		"FileName":"Classic song",
+		"FileExtension":".mp3",
+		"Drive":"E:",
+		"MimeType":"audio/mpeg",
+		"MediaType":1,
+		"FileDate":"Friday, 13 February, 2009 12:01:24 am",
+		"FileSize":3212794,
+		"Artist":"ABC",
+		"SongName":"Classic song",
+		"TrackNumber":"3",
+		"Album":"Album1",
+		"Genre":"Pop",
+		"Composer":"XYZ"
+	},{		
+		"FileNameAndPath":"E:\\Sounds\\Digital\\Album1\\Folk sonk.mp3",
+		"Type":"Media",
+		"FileName":"Folk sonk",
+		"FileExtension":".mp3",
+		"Drive":"E:",
+		"MimeType":"audio/mpeg",
+		"MediaType":1,
+		"FileDate":"Friday, 13 February, 2009 12:01:24 am",
+		"FileSize":3412794,
+		"Artist":"ABC",
+		"SongName":"Folk sonk",
+		"TrackNumber":"4",
+		"Album":"Album1",
+		"Genre":"Pop",
+		"Composer":"XYZ"
+	},{		
+		"FileNameAndPath":"E:\\Sounds\\Digital\\Album1\\National anthem.mp3",
+		"Type":"Media",
+		"FileName":"National anthem",
+		"FileExtension":".mp3",
+		"Drive":"E:",
+		"MimeType":"audio/mpeg",
+		"MediaType":1,
+		"FileDate":"Friday, 13 February, 2009 12:01:24 am",
+		"FileSize":4512794,
+		"Artist":"ABC",
+		"SongName":"National anthem",
+		"TrackNumber":"5",
+		"Album":"Album1",
+		"Genre":"Pop",
+		"Composer":"XYZ"
+	},{
+		"FileNameAndPath":"E:\\Sounds\\Digital\\Album1\\Dance sequence.mp3",
+		"Type":"Media",
+		"FileName":"Dance sequence",
+		"FileExtension":".mp3",
+		"Drive":"E:",
+		"MimeType":"audio/mpeg",
+		"MediaType":1,
+		"FileDate":"Friday, 13 February, 2009 12:01:24 am",
+		"FileSize":9110000,
+		"Artist":"ABC",
+		"SongName":"Dance sequence",
+		"TrackNumber":"6",
+		"Album":"Album1",
+		"Genre":"Pop",
+		"Composer":"XYZ"
+	}];
+	
+	var sound_data = [{
+		"FileNameAndPath":"E:\\Sounds\\Simple\\Dance sequence-old.mp3",
+		"Type":"Media",
+		"FileName":"Dance sequence-old",
+		"FileExtension":".mp3",
+		"Drive":"E:",
+		"MimeType":"audio/mpeg",
+		"MediaType":1,
+		"FileDate":"Friday, 13 February, 2009 12:01:24 am",
+		"FileSize":1002794,
+	},{
+		"FileNameAndPath": "E:\\Sounds\\Simple\\Rooster.mp3",
+		"Type": "Media",
+		"FileName": "Rooster",
+		"FileExtension": ".mp3",
+		"Drive": "E:",
+		"MimeType": "audio/mpeg",
+		"MediaType": 1,
+		"FileDate": "Friday, 13 February, 2009 12:01:24 am",
+		"FileSize": 911000,
+	
+	}];
+	var image_data = [{
+		"FileNameAndPath":"E:\\IMAGES\\Water.JPG",
+		"Type":"Media",
+		"FileName":"Water",
+		"FileExtension":".JPG",
+		"Drive":"E:",
+		"MimeType":"image/jpeg",
+		"MediaType":3,
+		"FileDate":"Monday, 04 August, 2008 8:31:46 pm",
+		"FileSize":25275
+	},{
+		"FileNameAndPath":"E:\\IMAGES\\Beach.JPG",
+		"Type":"Media",
+		"FileName":"Beach",
+		"FileExtension":".JPG",
+		"Drive":"E:",
+		"MimeType":"image/jpeg",
+		"MediaType":3,
+		"FileDate":"Wednesday, 28 May, 2008 8:52:16 am",
+		"FileSize":35151
+	},{
+		"FileNameAndPath":"E:\\IMAGES\\CountrySide.jpg",
+		"Type":"Media",
+		"FileName":"CountrySide",
+		"FileExtension":".jpg",
+		"Drive":"E:",
+		"MimeType":"image/jpeg",
+		"MediaType":3,
+		"FileDate":"Monday, 24 March, 2008 12:27:32 am",
+		"FileSize":44318
+	},{
+		"FileNameAndPath":"E:\\IMAGES\\CoolBlue.JPG",
+		"Type":"Media",
+		"FileName":"CoolBlue",
+		"FileExtension":".JPG",
+		"Drive":"E:",
+		"MimeType":"image/jpeg",
+		"MediaType":3,
+		"FileDate":"Monday, 04 August, 2008 8:31:46 pm",
+		"FileSize":25275
+	},{
+		"FileNameAndPath":"E:\\IMAGES\\Swimming.JPG",
+		"Type":"Media",
+		"FileName":"Swimming",
+		"FileExtension":".JPG",
+		"Drive":"E:",
+		"MimeType":"image/jpeg",
+		"MediaType":3,
+		"FileDate":"Wednesday, 28 May, 2008 8:52:16 am",
+		"FileSize":35151
+	},{
+		"FileNameAndPath":"E:\\IMAGES\\Sky.jpg",
+		"Type":"Media",
+		"FileName":"Sky",
+		"FileExtension":".jpg",
+		"Drive":"E:",
+		"MimeType":"image/jpeg",
+		"MediaType":3,
+		"FileDate":"Monday, 24 March, 2008 12:27:32 am",
+		"FileSize":44318
+	}];
+
+	var video_data = [{
+		"FileNameAndPath":"C:\\Data\\Videos\\Inside water.3gp",
+		"Type":"Media",
+		"FileName":"Inside water",
+		"FileExtension":".3gp",
+		"Drive":"C:",
+		"MimeType":"video/3gpp",
+		"MediaType":4,
+		"FileDate":"Wednesday, 08 April, 2009 5:04:18 pm",
+		"FileSize":1103067
+	},{
+		"FileNameAndPath":"C:\\Data\\Videos\\Daring.mp4",
+		"Type":"Media",
+		"FileName":"Daring",
+		"FileExtension":".mp4",
+		"Drive":"C:",
+		"MimeType":"video/mp4",
+		"MediaType":4,
+		"FileDate":"Wednesday, 08 April, 2009 5:04:18 pm",
+		"FileSize":1020200
+	},{
+		"FileNameAndPath":"C:\\Data\\Videos\\On the train.mp4",
+		"Type":"Media",
+		"FileName":"On the train",
+		"FileExtension":".mp4",
+		"Drive":"C:",
+		"MimeType":"video/mp4",
+		"MediaType":4,
+		"FileDate":"Wednesday, 08 April, 2009 5:04:18 pm",
+		"FileSize":9090900
+	}];
+	
+	var streaming_data = [{}]; 	
+		
+    /**
+     * register data!
+     */
+    device.implementation.loadData('Service.MediaManagement', 'Music', music_data);
+    device.implementation.loadData('Service.MediaManagement', 'Sound', sound_data);
+    device.implementation.loadData('Service.MediaManagement', 'Image', image_data);
+    device.implementation.loadData('Service.MediaManagement', 'Video', video_data);
+    device.implementation.loadData('Service.MediaManagement', 'StreamingURL', streaming_data);
+
+})()
+	
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/preview/data/messaging_data.js	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,193 @@
+/**
+ * SAPI Sample Data - Messaging
+ */
+
+(function(){
+
+
+var data_messaging = [{
+	 	"MessageType": "SMS",
+		"Sender": "0435445454",
+		"Subject": "Reproduction, transfer, distribu",
+		"Time": "Wednesday, 01 April, 2009 6:11:32 pm",
+		"Priority": "Medium",
+		"Attachment": false,
+		"Unread": false,
+		"MessageId": 1048980,
+		"BodyText": "Reproduction, transfer, distribution or storage of"
+	},{ 
+		"MessageType": "SMS",
+		"Sender": "+35854553456",
+		"Subject": "If you place an order for a prod",
+		"Time": "Wednesday, 01 April, 2009 6:11:32 pm",
+		"Priority": "Medium",
+		"Attachment": false,
+		"Unread": false,
+		"MessageId": 1048981,
+		"BodyText": "If you place an order for a product, request a ser"
+	},{
+		"MessageType": "SMS",
+		"Sender": "+4465655656",
+		"Subject": "You also agree that we have no c",
+		"Time": "Wednesday, 01 April, 2009 6:11:33 pm",
+		"Priority": "Medium",
+		"Attachment": false,
+		"Unread": false,
+		"MessageId": 1048982,
+		"BodyText": "You also agree that we have no control over the co"
+	
+	},{ 
+		"MessageType": "SMS",
+		"Sender": "+4443433434",
+		"Subject": "We may use this information to r",
+		"Time": "Wednesday, 01 April, 2009 6:11:33 pm",
+		"Priority": "Medium",
+		"Attachment": false,
+		"Unread": false,
+		"MessageId": 1048983,
+		"BodyText": "We may use this information to respond to your req"
+	},{ 
+		"MessageType": "SMS",
+		"Sender": "0565645455",
+		"Subject": "In order to respond to your ques",
+		"Time": "Wednesday, 01 April, 2009 6:11:33 pm",
+		"Priority": "Medium",
+		"Attachment": false,
+		"Unread": false,
+		"MessageId": 1048984,
+		"BodyText": "In order to respond to your questions or manage in"
+	},{ 
+		"MessageType": "SMS",
+		"Sender": "0231343243",
+		"Subject": "We consents to you browsing the ",
+		"Time": "Wednesday, 01 April, 2009 6:11:59 pm",
+		"Priority": "Medium",
+		"Attachment": false,
+		"Unread": true,
+		"MessageId": 1048985,
+		"BodyText": "We consents to you browsing the pages on your computer or printing copies of extracts from these pag"
+	},{
+		"MessageType": "SMS",
+		"Sender": "0545545454",
+		"Subject": "If you place an order for a prod",
+		"Time": "Wednesday, 01 April, 2009 6:11:59 pm",
+		"Priority": "Medium",
+		"Attachment": false,
+		"Unread": true,
+		"MessageId": 1048986,
+		"BodyText": "If you place an order for a product, request a service or submit content to this site, we may need t"
+	},{
+		"MessageType": "unknown",
+		"Sender": "Edith",
+		"Subject": "You will win the battle, GUARANT",
+		"Time": "Wednesday, 01 April, 2009 6:12:22 pm",
+		"Priority": "Medium",
+		"Attachment": false,
+		"Unread": true,
+		"MessageId": 1048987
+	},{
+		"MessageType": "unknown",
+		"Sender": "Edith",
+		"Subject": "You will win the battle, GUARANT",
+		"Time": "Wednesday, 01 April, 2009 6:12:23 pm",
+		"Priority": "Medium",
+		"Attachment": false,
+		"Unread": true,
+		"MessageId": 1048989
+	},{
+		"MessageType": "unknown",
+		"Sender": "+4443433434",
+		"Subject": "Join us at the OSGi 2003 World C",
+		"Time": "Wednesday, 01 April, 2009 6:14:10 pm",
+		"Priority": "Medium",
+		"Attachment": false,
+		"Unread": true,
+		"MessageId": 1049013
+	},{
+		"MessageType": "unknown",
+		"Sender": "0231343243",
+		"Subject": "Put your subject line here",
+		"Time": "Wednesday, 01 April, 2009 6:14:10 pm",
+		"Priority": "Medium",
+		"Attachment": false,
+		"Unread": true,
+		"MessageId": 1049014
+	},{
+		"MessageType": "MMS",
+		"Sender": "0455454454",
+		"Subject": "A very funny game",
+		"Time": "Wednesday, 01 April, 2009 6:16:01 pm",
+		"Priority": "Medium",
+		"Attachment": true,
+		"Unread": true,
+		"MessageId": 1049043,
+		"BodyText": ""
+	},{
+		"MessageType": "MMS",
+		"Sender": "0542303286",
+		"Subject": "Weedmon say: call, we be open 7 ",
+		"Time": "Wednesday, 01 April, 2009 6:16:03 pm",
+		"Priority": "Medium",
+		"Attachment": true,
+		"Unread": true,
+		"MessageId": 1049044,
+		"BodyText": ""
+	},{
+		"MessageType": "SMS",
+		"Sender": "+4465656565",
+		"Subject": "In addition, a link to a such si",
+		"Time": "Wednesday, 01 April, 2009 6:16:59 pm",
+		"Priority": "Medium",
+		"Attachment": false,
+		"Unread": false,
+		"MessageId": 1049045,
+		"BodyText": "In addition, a link to a such site does not imply that we endorses the site or the products or servi"
+	},{ 
+		"MessageType": "SMS",
+		"Sender": "0433032865",
+		"Subject": "The contents of these pages are ",
+		"Time": "Wednesday, 01 April, 2009 6:16:59 pm",
+		"Priority": "Medium",
+		"Attachment": false,
+		"Unread": false,
+		"MessageId": 1049046,
+		"BodyText": "The contents of these pages are copyrighted. Any rights not expressly granted herein are reserved. T"
+	},{ 
+		"MessageType": "SMS",
+		"Sender": "+4465655656",
+		"Subject": "We may use this information to r",
+		"Time": "Wednesday, 01 April, 2009 6:16:59 pm",
+		"Priority": "Medium",
+		"Attachment": false,
+		"Unread": false,
+		"MessageId": 1049047,
+		"BodyText": "We may use this information to respond to your requests, or to contact you via mail, e-mail or phone"
+	},{ 
+		"MessageType": "SMS",
+		"Sender": "+35876653456",
+		"Subject": "The use of press releases and ot",
+		"Time": "Wednesday, 01 April, 2009 6:16:59 pm",
+		"Priority": "Medium",
+		"Attachment": false,
+		"Unread": false,
+		"MessageId": 1049048,
+		"BodyText": "The use of press releases and other documents classified as public is permitted in public communicat"
+	},{
+		"MessageType": "SMS",
+		"Sender": "0530328732",
+		"Subject": "The use of press releases and ot",
+		"Time": "Wednesday, 01 April, 2009 6:17:00 pm",
+		"Priority": "Medium",
+		"Attachment": false,
+		"Unread": false,
+		"MessageId": 1049054,
+		"BodyText": "The use of press releases and other documents classified as public is permitted in public communicat"
+	}];
+
+    /**
+     * register data!
+     */
+    device.implementation.loadData('Service.Messaging', 'Inbox', data_messaging);
+
+})()
+	
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/preview/data/sensor_data.js	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,469 @@
+/**
+ * SAPI Sample Data - Sensor
+ */
+
+(function(){
+
+var property = {
+	"AccelerometerAxis":{
+		"Availability":{
+			"PropertyId":"Availability",
+			"PropertyDataType":0,
+			"ItemIndex":-1,
+			"ReadOnly":true,
+			"PropertyValue":1
+			},
+		"ChannelAccuracy":{
+			"PropertyId":"ChannelAccuracy",
+			"PropertyDataType":1,
+			"ItemIndex":-1,
+			"ReadOnly":true,
+			"PropertyValue":10
+			},
+		"ChannelDataFormat":
+		{
+			"PropertyId":"ChannelDataFormat",
+			"PropertyDataType":0,
+			"ItemIndex":-1,
+			"ReadOnly":true,
+			"PropertyValue":2
+		},
+		"ChannelScale":
+		{
+			"PropertyId":"ChannelScale",
+			"PropertyDataType":0,
+			"ItemIndex":-1,
+			"ReadOnly":true,
+			"PropertyValue":0
+		},
+		"ChannelUnit":
+		{
+			"PropertyId":"ChannelUnit",
+			"PropertyDataType":0,
+			"ItemIndex":-1,
+			"ReadOnly":true,
+			"PropertyValue":10
+		},
+		"ConnectionType":
+		{
+			"PropertyId":"ConnectionType",
+			"PropertyDataType":0,
+			"ItemIndex":-1,
+			"ReadOnly":true,
+			"PropertyValue":1
+		},
+		"DataRate":
+		{
+			"PropertyId":"DataRate",
+			"PropertyDataType":0,
+			"ItemIndex":-1,
+			"ReadOnly":true,
+			"PropertyValue":0
+		},
+		"Description":
+		{
+			"PropertyId":"Description",
+			"PropertyDataType":2,
+			"ItemIndex":-1,
+			"ReadOnly":true,
+			"PropertyValue":"Accelerometer"
+		},
+		"MeasureRange":
+		{
+			"PropertyId":"MeasureRange",
+			"PropertyDataType":1,
+			"ItemIndex":-1,
+			"ReadOnly":true,
+			"PropertyValue":0
+		},
+		"ScaledRange":
+		{
+			"PropertyId":"ScaledRange",
+			"PropertyDataType":0,
+			"ItemIndex":-1,
+			"ReadOnly":true,
+			"PropertyValue":8
+		}
+	},
+	"AccelerometerDoubleTapping":
+	{
+		"Availability":
+		{
+			"PropertyId":"Availability",
+			"PropertyDataType":0,
+			"ItemIndex":-1,
+			"ReadOnly":true,
+			"PropertyValue":1
+		},
+		"ChannelAccuracy":
+		{
+			"PropertyId":"ChannelAccuracy",
+			"PropertyDataType":1,
+			"ItemIndex":-1,
+			"ReadOnly":true,
+			"PropertyValue":10
+		},
+		"ChannelDataFormat":
+		{
+			"PropertyId":"ChannelDataFormat",
+			"PropertyDataType":0,
+			"ItemIndex":-1,
+			"ReadOnly":true,
+			"PropertyValue":2
+		},
+		"ChannelScale":
+		{
+			"PropertyId":"ChannelScale",
+			"PropertyDataType":0,
+			"ItemIndex":-1,
+			"ReadOnly":true,
+			"PropertyValue":0
+		},
+		"ChannelUnit":
+		{
+			"PropertyId":"ChannelUnit",
+			"PropertyDataType":0,
+			"ItemIndex":-1,
+			"ReadOnly":true,
+			"PropertyValue":10
+		},
+		"ConnectionType":
+		{
+			"PropertyId":"ConnectionType",
+			"PropertyDataType":0,
+			"ItemIndex":-1,
+			"ReadOnly":true,
+			"PropertyValue":1
+		},
+		"Description":
+		{
+			"PropertyId":"Description",
+			"PropertyDataType":2,
+			"ItemIndex":-1,
+			"ReadOnly":true,
+			"PropertyValue":"Accelerometer"
+		},
+		"MeasureRange":
+		{
+			"PropertyId":"MeasureRange",
+			"PropertyDataType":1,
+			"ItemIndex":-1,
+			"ReadOnly":true,
+			"PropertyValue":0
+		},
+		"ScaledRange":
+		{
+			"PropertyId":"ScaledRange",
+			"PropertyDataType":0,
+			"ItemIndex":-1,
+			"ReadOnly":true,
+			"PropertyValue":8
+		}
+	},
+	"Orientation":
+	{
+		"Availability":
+		{
+			"PropertyId":"Availability",
+			"PropertyDataType":0,
+			"ItemIndex":-1,
+			"ReadOnly":true,
+			"PropertyValue":1
+		},
+		"DataRate":
+		{
+			"PropertyId":"DataRate",
+			"PropertyDataType":0,
+			"ItemIndex":-1,
+			"ReadOnly":true,
+			"PropertyValue":0
+		},
+		"MeasureRange":
+		{
+			"PropertyId":"MeasureRange",
+			"PropertyDataType":0,
+			"ItemIndex":-1,
+			"ReadOnly":true,
+			"PropertyValue":0
+		}
+	},
+	"Rotation":
+	{
+		"Availability":
+		{
+			"PropertyId":"Availability",
+			"PropertyDataType":0,
+			"ItemIndex":-1,
+			"ReadOnly":true,
+			"PropertyValue":1
+		},
+		"ChannelAccuracy":
+		{
+			"PropertyId":"ChannelAccuracy",
+			"PropertyDataType":1,
+			"ItemIndex":-1,
+			"ReadOnly":true,
+			"PropertyValue":0.041666666666666664
+		},
+		"DataRate":
+		{
+			"PropertyId":"DataRate",
+			"PropertyDataType":0,
+			"ItemIndex":-1,
+			"ReadOnly":true,
+			"PropertyValue":0
+		},
+		"MeasureRange":
+		{
+			"PropertyId":"MeasureRange",
+			"PropertyDataType":1,
+			"ItemIndex":-1,
+			"ReadOnly":true,
+			"PropertyValue":359
+		}
+	}
+};
+var data_all =[{
+		"ChannelId":7,
+		"ContextType":2,
+		"Quantity":10,
+		"ChannelType":270553214,
+		"Location":"NoLoc",
+		"VendorId":"Nokia",
+		"DataItemSize":24,
+		"ChannelDataTypeId":270553214
+		},
+		{
+		"ChannelId":8,
+		"ContextType":2,
+		"Quantity":11,
+		"ChannelType":270553217,
+		"Location":"NoLoc",
+		"VendorId":"Nokia",
+		"DataItemSize":16,
+		"ChannelDataTypeId":270553215
+		},
+		{
+		"ChannelId":10,
+		"ContextType":3,
+		"Quantity":12,
+		"ChannelType":270553224,
+		"Location":"NoLoc",
+		"VendorId":"Nokia",
+		"DataItemSize":16,
+		"ChannelDataTypeId":270553224
+		},
+		{
+		"ChannelId":11,
+		"ContextType":3,
+		"Quantity":13,
+		"ChannelType":270553225,
+		"Location":"NoLoc",
+		"VendorId":"Nokia",
+		"DataItemSize":24,
+		"ChannelDataTypeId":270553225
+		}];
+		
+var data_accelerometerAxis = [{
+		"ChannelId":7,
+		"ContextType":2,
+		"Quantity":10,
+		"ChannelType":270553214,
+		"Location":"NoLoc",
+		"VendorId":"Nokia",
+		"DataItemSize":24,
+		"ChannelDataTypeId":270553214
+		}];
+		
+var data_accelerometerDoubleTapping = [{
+		"ChannelId":8,
+		"ContextType":2,
+		"Quantity":11,
+		"ChannelType":270553217,
+		"Location":"NoLoc",
+		"VendorId":"Nokia",
+		"DataItemSize":16,
+		"ChannelDataTypeId":270553215
+		}];
+		
+var data_orientation = [{
+		"ChannelId":10,
+		"ContextType":3,
+		"Quantity":12,
+		"ChannelType":270553224,
+		"Location":"NoLoc",
+		"VendorId":"Nokia",
+		"DataItemSize":16,
+		"ChannelDataTypeId":270553224
+		}];
+		
+var data_rotation = [{
+		"ChannelId":11,
+		"ContextType":3,
+		"Quantity":13,
+		"ChannelType":270553225,
+		"Location":"NoLoc",
+		"VendorId":"Nokia",
+		"DataItemSize":24,
+		"ChannelDataTypeId":270553225
+		}];
+
+
+var dataRet_accelerometerAxis = [{
+		"DataType":"AxisData",
+		"TimeStamp":"Wednesday, 15 April, 2009 12:00:00 am",
+		"XAxisData":30,
+		"YAxisData":30,
+		"ZAxisData":30
+		},{
+		"DataType":"AxisData",
+		"TimeStamp":"Wednesday, 15 April, 2009 12:00:00 am",
+		"XAxisData":35,
+		"YAxisData":30,
+		"ZAxisData":30
+		},{
+		"DataType":"AxisData",
+		"TimeStamp":"Wednesday, 15 April, 2009 12:00:00 am",
+		"XAxisData":30,
+		"YAxisData":35,
+		"ZAxisData":30
+		},{
+		"DataType":"AxisData",
+		"TimeStamp":"Wednesday, 15 April, 2009 12:00:00 am",
+		"XAxisData":30,
+		"YAxisData":30,
+		"ZAxisData":35
+		},{
+		"DataType":"AxisData",
+		"TimeStamp":"Wednesday, 15 April, 2009 12:00:00 am",
+		"XAxisData":40,
+		"YAxisData":30,
+		"ZAxisData":30
+		},{
+		"DataType":"AxisData",
+		"TimeStamp":"Wednesday, 15 April, 2009 12:00:00 am",
+		"XAxisData":30,
+		"YAxisData":40,
+		"ZAxisData":30
+		}];
+		
+var dataRet_accelerometerDoubleTapping = [{
+		"DataType":"DoubleTappingData",
+		"TimeStamp":"Wednesday, 15 April, 2009 12:00:00 am",		
+		"DeviceDirection":30
+		},{
+		"DataType":"DoubleTappingData",
+		"TimeStamp":"Wednesday, 15 April, 2009 12:00:00 am",		
+		"DeviceDirection":40
+		},{
+		"DataType":"DoubleTappingData",
+		"TimeStamp":"Wednesday, 15 April, 2009 12:00:00 am",		
+		"DeviceDirection":50
+		},{
+		"DataType":"DoubleTappingData",
+		"TimeStamp":"Wednesday, 15 April, 2009 12:00:00 am",		
+		"DeviceDirection":60
+		},{
+		"DataType":"DoubleTappingData",
+		"TimeStamp":"Wednesday, 15 April, 2009 12:00:00 am",		
+		"DeviceDirection":70
+		},{
+		"DataType":"DoubleTappingData",
+		"TimeStamp":"Wednesday, 15 April, 2009 12:00:00 am",		
+		"DeviceDirection":80
+		},{
+		"DataType":"DoubleTappingData",
+		"TimeStamp":"Wednesday, 15 April, 2009 12:00:00 am",		
+		"DeviceDirection":90
+		}];
+		
+var dataRet_orientation = [{
+		"DataType":"OrientationData",
+		"TimeStamp":"Wednesday, 15 April, 2009 12:00:00 am",
+		"DeviceOrientation":"DisplayUp"		
+		},{
+		"DataType":"OrientationData",
+		"TimeStamp":"Wednesday, 15 April, 2009 12:00:00 am",
+		"DeviceOrientation":"DisplayDown"		
+		},{
+		"DataType":"OrientationData",
+		"TimeStamp":"Wednesday, 15 April, 2009 12:00:00 am",
+		"DeviceOrientation":"DisplayLeftUp"		
+		},{
+		"DataType":"OrientationData",
+		"TimeStamp":"Wednesday, 15 April, 2009 12:00:00 am",
+		"DeviceOrientation":"DisplayRightUp"		
+		},{
+		"DataType":"OrientationData",
+		"TimeStamp":"Wednesday, 15 April, 2009 12:00:00 am",
+		"DeviceOrientation":"DisplayUpwards"		
+		},{
+		"DataType":"OrientationData",
+		"TimeStamp":"Wednesday, 15 April, 2009 12:00:00 am",
+		"DeviceOrientation":"DisplayDownwards"		
+		},{
+		"DataType":"OrientationData",
+		"TimeStamp":"Wednesday, 15 April, 2009 12:00:00 am",
+		"DeviceOrientation":"Undefined"		
+		}];
+		
+var dataRet_rotation = [{
+		"DataType":"RotationData",
+		"TimeStamp":"Wednesday, 15 April, 2009 12:00:00 am",
+		"XRotation":30,
+		"YRotation":35,
+		"ZRotation":30
+		},{
+		"DataType":"RotationData",
+		"TimeStamp":"Wednesday, 15 April, 2009 12:00:00 am",
+		"XRotation":35,
+		"YRotation":30,
+		"ZRotation":30
+		},{
+		"DataType":"RotationData",
+		"TimeStamp":"Wednesday, 15 April, 2009 12:00:00 am",
+		"XRotation":30,
+		"YRotation":30,
+		"ZRotation":35
+		},{
+		"DataType":"RotationData",
+		"TimeStamp":"Wednesday, 15 April, 2009 12:00:00 am",
+		"XRotation":40,
+		"YRotation":30,
+		"ZRotation":30
+		},{
+		"DataType":"RotationData",
+		"TimeStamp":"Wednesday, 15 April, 2009 12:00:00 am",
+		"XRotation":30,
+		"YRotation":40,
+		"ZRotation":30
+		},{
+		"DataType":"RotationData",
+		"TimeStamp":"Wednesday, 15 April, 2009 12:00:00 am",
+		"XRotation":30,
+		"YRotation":30,
+		"ZRotation":40
+		},{
+		"DataType":"RotationData",
+		"TimeStamp":"Wednesday, 15 April, 2009 12:00:00 am",
+		"XRotation":50,
+		"YRotation":50,
+		"ZRotation":50
+		}];
+
+    /**
+     * register data!
+     */
+	device.implementation.loadData('Service.Sensor','SensorProperty',property);
+    device.implementation.loadData('Service.Sensor', 'All', data_all);
+    device.implementation.loadData('Service.Sensor', 'AccelerometerAxis', data_accelerometerAxis);
+    device.implementation.loadData('Service.Sensor', 'AccelerometerDoubleTapping', data_accelerometerDoubleTapping);
+    device.implementation.loadData('Service.Sensor', 'Orientation', data_orientation);
+    device.implementation.loadData('Service.Sensor', 'Rotation', data_rotation);
+/*    device.implementation.loadData('Service.Sensor', 'AccelerometerAxisRet', dataRet_accelerometerAxis);
+    device.implementation.loadData('Service.Sensor', 'AccelerometerDoubleTappingRet', dataRet_accelerometerDoubleTapping);
+    device.implementation.loadData('Service.Sensor', 'OrientationRet', dataRet_orientation);
+    device.implementation.loadData('Service.Sensor', 'RotationRet', dataRet_rotation);*/
+
+})()
+	
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/preview/data/sysInfo_data.js	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,345 @@
+/**
+ * SAPI Sample Data - SysInfo
+ */
+
+
+(function(){  
+
+var data_5800 = {
+			"battery":{
+				"batterystrength":{
+					"Status":85,
+					"Entity":"Battery",
+					"Key":"BatteryStrength"
+					},
+				"chargingstatus":{
+					"Status":0,
+					"Entity":"Battery",
+					"Key":"ChargingStatus"
+					}
+			},
+			"connectivity":{
+				"bluetooth":{
+					"Status":1,
+					"Entity":"Connectivity",
+					"Key":"BlueTooth"
+					},
+				"infrared":{
+					"Status":-1,
+					"Entity":"Connectivity",
+					"Key":"InfraRed"
+					},
+				"activeconnections":{
+					"ConnectionList":[{
+								"IAPID":5,
+								"IAPName":"Browser",
+								"IAPConnectionName":"",
+								"NetworkName":"Browser",
+								"ConnectionType":7,
+								"ConnectionStatus":1
+								},{
+								"IAPID":1,
+								"IAPName":"airtelgprs.com",
+								"IAPConnectionName":"Mobile Office",
+								"NetworkName":"GPRS",
+								"ConnectionType":6,
+								"ConnectionStatus":1
+								}],
+					"Entity":"Connectivity",
+					"Key":"ActiveConnections"
+				},					
+				"wlanmacaddress":{
+					"StringData":"00:21:fe:97:c5:27",
+					"Entity":"Connectivity",
+					"Key":"WLanMacAddress"
+					}
+			},
+			"device":{
+				"firmwareversion":{
+					"StringData":"V 20.0.012 RnD\n04-03-09\nRM-356\n(c)NMP",
+					"Entity":"Device",
+					"Key":"FirmwareVersion"},
+				"platformversion":{
+					"MajorVersion":"5",
+					"MinorVersion":"0",
+					"Entity":"Device",
+					"Key":"PlatformVersion"
+					},
+				"producttype":{
+					"StringData":"RM-356",
+					"Entity":"Device",
+					"Key":"ProductType"
+					},
+				"manufacturer":{
+					"StringData":"Nokia",
+					"Entity":"Device",
+					"Key":"Manufacturer"
+					},
+				"machineid":{
+					"Status":536926806,
+					"Entity":"Device",
+					"Key":"MachineId"
+					},
+				"phonemodel":{
+					"StringData":"5800 XpressMusic",
+					"Entity":"Device",
+					"Key":"PhoneModel"
+					},
+				"imei":{
+					"StringData":"004401102480155",
+					"Entity":"Device",
+					"Key":"IMEI"
+					}
+			},
+			"display":{
+				"brightness":{
+					"Status":50,
+					"Entity":"Display",
+					"Key":"Brightness"
+					},
+				"screensavertimeout":{
+					"Status":15,
+					"Entity":"Display",
+					"Key":"ScreenSaverTimeout"
+					},
+				"keyguardtime":{
+					"Status":60,
+					"Entity":"Display",
+					"Key":"KeyGuardTime"
+					},
+				"keyguardtime":{
+					"Status":60,
+					"Entity":"Display",
+					"Key":"KeyGuardTime"
+					},
+				"autolocktime":{
+					"Status":0,
+					"Entity":"Display",
+					"Key":"AutoLockTime"
+					},
+				"autolockstatus":{
+					"Status":0,
+					"Entity":"Display",
+					"Key":"AutoLockStatus"
+					},
+				"lighttimeout":{
+					"Status":45,
+					"Entity":"Display",
+					"Key":"LightTimeout"
+					},
+				"displayresolution":{
+					"XPixels":640,
+					"YPixels":360,
+					"Entity":"Display",
+					"Key":"DisplayResolution"
+					},
+				"displayorientation":{
+					"Status":3,
+					"Entity":"Display",
+					"Key":"DisplayOrientation"
+					},
+				"wallpaper":{
+					"StringData":"C://Data//Others//wallpaper.jpeg",
+					"Entity":"Display",
+					"Key":"Wallpaper"
+					}
+				
+			},
+			"features":{
+				"bluetooth":{
+					"Status":1,
+					"Entity":"Features",
+					"Key":"BlueTooth"
+					},
+				"infrared":{
+					"Status":0,
+					"Entity":"Features",
+					"Key":"InfraRed"
+					},
+				"camera":{
+					"Status":1,
+					"Entity":"Features",
+					"Key":"CAMERA"
+					},
+				"memorycard":{
+					"Status":1,
+					"Entity":"Features",
+					"Key":"MemoryCard"
+					},
+				"fmradio":{
+					"Status":1,
+					"Entity":"Features",
+					"Key":"FMRADIO"
+					},
+				"qwerty":{
+					"Status":1,
+					"Entity":"Features",
+					"Key":"QWERTY"
+					},
+				"wlan":{
+					"Status":1,
+					"Entity":"Features",
+					"Key":"WLAN"
+					},
+				"usb":{
+					"Status":1,
+					"Entity":"Features",
+					"Key":"USB"
+					},
+				"pen":{
+					"Status":1,
+					"Entity":"Features",
+					"Key":"Pen"
+					},
+				"led":{
+					"Status":0,
+					"Entity":"Features",
+					"Key":"LED"
+					},
+				"coverui":{
+					"Status":0,
+					"Entity":"Features",
+					"Key":"CoverUI"
+					},
+				"sidevolumekeys":{
+					"Status":1,
+					"Entity":"Features",
+					"Key":"SideVolumeKeys"
+					},
+				"vibra":{
+					"Status":1,
+					"Entity":"Features",
+					"Key":"Vibra"
+					}
+			},
+			"general":{
+				"connectedaccessories":{
+					"AccessoryList":[{"AccessoryType":0,"AccessoryState":1}],
+					"Entity":"General",
+					"Key":"ConnectedAccessories"
+					},
+				"accessorystatus":{
+					"AccessoryInfo":{"AccessoryType":0,"AccessoryState":0},
+					"Entity":"General",
+					"Key":"AccessoryStatus"
+					},
+				"inputlanguage":{
+					"Status":1,
+					"Entity":"General",
+					"Key":"InputLanguage"
+					},
+				"supportedlanguages":{
+					"LanguageList":[1,2,3,5,13,4],
+					"Entity":"General",
+					"Key":"SupportedLanguages"
+					},
+				"predictivetext":{
+					"Status":0,
+					"Entity":"General",
+					"Key":"PredictiveText"
+					},
+				"vibraactive":{
+					"Status":1,
+					"Entity":"General",
+					"Key":"VibraActive"
+					},
+				"availableusbmodes":{
+					"StringList":["PC Suite","Mass storage","Image transfer","Media transfer"],
+					"Entity":"General",
+					"Key":"AvailableUSBModes"
+					},
+				"activeusbmode":{
+					"StringData":"Mass storage",
+					"Entity":"General",
+					"Key":"ActiveUSBMode"
+					},
+				"flipstatus":{
+					"Status":-1,
+					"Entity":"General",
+					"Key":"FlipStatus"
+					},
+				"gripstatus":{
+					"Status":1,
+					"Entity":"General",
+					"Key":"GripStatus"
+					}
+			},
+			"memory":{
+				"listdrives":{
+					"DriveList":["C:\\","D:\\","E:\\","Z:\\"],
+					"Entity":"Memory",
+					"Key":"ListDrives"
+					},
+				"memorycard":{
+					"Status":1,
+					"Entity":"Memory",
+					"Key":"MemoryCard"
+					},
+				"driveinfo":{
+					"Drive": {
+							"C:\\": {
+								"Drive": "C:\\",
+								"CriticalSpace": 131072,
+								"MediaType": 9,
+								"TotalSpace": 90210304,
+								"FreeSpace": 79319040,
+								"DriveName": "",
+								"BatterState": 0
+								},
+							"D:\\": {
+								"Drive": "D:\\",
+								"CriticalSpace": 2700000,
+								"MediaType": 5,
+								"TotalSpace": 52469760,
+								"FreeSpace": 52457472,
+								"DriveName": "",
+								"BatterState": 0
+								},
+							"Z:\\": {
+								"Drive": "Z:\\",
+								"CriticalSpace": 131072,
+								"MediaType": 7,
+								"TotalSpace": 0,
+								"FreeSpace": 0,
+								"DriveName": "RomDrive",
+								"BatterState": 0
+								}
+							},
+					"Entity":"Memory",
+					"Key":"DriveInfo"
+					}
+			},
+			"network":{
+				"registrationstatus":{
+					"Status":4,
+					"Entity":"Network",
+					"Key":"RegistrationStatus"
+					},
+				"networkmode":{
+					"Status":0,
+					"Entity":"Network",
+					"Key":"NetworkMode"
+					},
+				"signalstrength":{
+					"Status":61,
+					"Entity":"Network",
+					"Key":"SignalStrength"
+					},
+				"currentnetwork":{
+					"NetworkName":"Airtel",
+					"NetworkStatus":1,
+					"NetworkMode":1,
+					"CountryCode":"404",
+					"NetworkCode":"45",
+					"LocationStatus":false,
+					"Entity":"Network",
+					"Key":"CurrentNetwork"
+					}
+			}
+	}; 
+	/**
+	 * register data!
+	 */
+	device.implementation.loadData('Service.SysInfo', '', data_5800);
+
+})()
Binary file org.symbian.tools.wrttools.previewer/preview/images/BrowserNotificationBar-Toogle.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/Gradient0Background.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/IconArea-hover.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/Thumbs.db has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/TransperantImage.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/active-orientation-icon.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/battery-icon.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/console-clear-button.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/console-close-icon.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/console-icon.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/console-open-icon.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/default-Icon.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/device/240x320/Landscape.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/device/240x320/Portrait.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/device/240x320/Thumbs.db has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/device/320x240/Landscape.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/device/320x240/Portrait.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/device/320x240/Thumbs.db has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/device/360x640/Landscape.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/device/360x640/Portrait.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/device/360x640/Thumbs.db has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/device/360x640/hs-landscape.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/device/360x640/hs-portrait.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/device/800x352/Landscape.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/device/800x352/Thumbs.db has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/device/MenuItem-keys-Bg2.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/device/Thumbs.db has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/device/device.7z has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/device/menuKeys-bg.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/errorIcon.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/gradient-bg.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/hs-iframeMask.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/infoIcon.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/memory-icon.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/messaging-icon.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/normal-orientation-icon.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/settings-icon.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/statusBar_240x320.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/statusBar_320x240.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/statusBar_360x640.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/statusBar_640x360.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/statusBar_800x352.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/sub-menu-arrow.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/th-bg-gradient.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/warningIcon.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/images/wrt-help-icon.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/preview/nopreview.html	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,44 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<style type="text/css">
+body {
+	background-image: url(images/Gradient0Background.png);
+	background-repeat: repeat-x;
+	font-family: "Nokia Sans", "Nokia Sans SemiBold", "Arial Narrow";
+	overflow: hidden;
+	color: #FFFFFF;
+}
+div {
+	text-align: center;
+	padding: 20px;
+	margin-top: 50px;
+	margin-right: auto;
+	margin-left: auto;
+	width: 500px;
+	font-size: x-large;
+	font-weight: normal;
+	background-color: #CC3300;
+	border-top-width: 2px;
+	border-right-width: 2px;
+	border-bottom-width: 2px;
+	border-left-width: 2px;
+	border-top-style: solid;
+	border-right-style: solid;
+	border-bottom-style: solid;
+	border-left-style: solid;
+	border-top-color: #FF3300;
+	border-right-color: #710000;
+	border-bottom-color: #710000;
+	border-left-color: #FF3300;
+}
+strong {
+	color: #FFCC00;
+}
+</style>
+</head>
+<body>
+<div> Widget preview is not available for this file, it is not the <strong>MainHtml</strong> file for the widget.
+</div>
+</body>
+</html>
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/000000_40x100_textures_05_inset_soft_25.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/0078a3_40x100_textures_02_glass_40.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/222222_11x11_icon_arrows_leftright.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/222222_11x11_icon_arrows_updown.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/222222_11x11_icon_close.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/222222_11x11_icon_doc.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/222222_11x11_icon_folder_closed.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/222222_11x11_icon_folder_open.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/222222_11x11_icon_minus.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/222222_11x11_icon_plus.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/222222_7x7_arrow_down.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/222222_7x7_arrow_left.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/222222_7x7_arrow_right.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/222222_7x7_arrow_up.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/555555_40x100_textures_02_glass_20.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/cccccc_11x11_icon_arrows_leftright.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/cccccc_11x11_icon_arrows_updown.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/cccccc_11x11_icon_close.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/cccccc_11x11_icon_doc.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/cccccc_11x11_icon_folder_closed.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/cccccc_11x11_icon_folder_open.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/cccccc_11x11_icon_minus.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/cccccc_11x11_icon_plus.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/cccccc_11x11_icon_resize_se.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/cccccc_7x7_arrow_down.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/cccccc_7x7_arrow_left.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/cccccc_7x7_arrow_right.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/cccccc_7x7_arrow_up.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/f58400_40x100_textures_05_inset_soft_30.png has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/ffffff_11x11_icon_arrows_leftright.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/ffffff_11x11_icon_arrows_updown.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/ffffff_11x11_icon_close.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/ffffff_11x11_icon_doc.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/ffffff_11x11_icon_folder_closed.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/ffffff_11x11_icon_folder_open.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/ffffff_11x11_icon_minus.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/ffffff_11x11_icon_plus.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/ffffff_7x7_arrow_down.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/ffffff_7x7_arrow_left.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/ffffff_7x7_arrow_right.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/ffffff_7x7_arrow_up.gif has changed
Binary file org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/images/slider-handle.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/css/ui-darkness/ui.all.css	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,630 @@
+/*
+ * jQuery UI screen structure and presentation
+ * This CSS file was generated by ThemeRoller, a Filament Group Project for jQuery UI
+ * Author: Scott Jehl, scott@filamentgroup.com, http://www.filamentgroup.com
+ * Visit ThemeRoller.com
+*/
+
+/*
+ * Note: If your ThemeRoller settings have a font size set in ems, your components will scale according to their parent element's font size.
+ * As a rule of thumb, set your body's font size to 62.5% to make 1em = 10px.
+ * body {font-size: 62.5%;}
+*/
+
+
+
+/*UI accordion*/
+.ui-accordion {
+	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none;
+	font-family: Segoe UI, Arial, sans-serif;
+	font-size: 0.8em;
+	border-bottom: 1px solid #666666;
+}
+.ui-accordion-group {
+	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none;
+	border: 1px solid #666666;
+	border-bottom: none;
+}
+.ui-accordion-header {
+	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none;
+	cursor: pointer;
+	background: #555555 url(images/555555_40x100_textures_02_glass_20.png) 0 50% repeat-x;
+}
+.ui-accordion-header a {
+	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none;
+	display: block;
+	font-size: 0.8em;
+	font-weight: bold;
+	text-decoration: none;
+	padding: .5em .5em .5em 1.7em;
+	color: #eeeeee;
+	background: url(images/cccccc_7x7_arrow_right.gif) .5em 50% no-repeat;
+}
+.ui-accordion-header a:hover {
+	background: url(images/ffffff_7x7_arrow_right.gif) .5em 50% no-repeat;
+	color: #ffffff;
+}
+.ui-accordion-header:hover {
+	background: #0078a3 url(images/0078a3_40x100_textures_02_glass_40.png) 0 50% repeat-x;
+	color: #ffffff;
+}
+.selected .ui-accordion-header, .selected .ui-accordion-header:hover {
+	background: #f58400 url(images/f58400_40x100_textures_05_inset_soft_30.png) 0 50% repeat-x;
+}
+.selected .ui-accordion-header a, .selected .ui-accordion-header a:hover {
+	color: #ffffff;
+	background: url(images/222222_7x7_arrow_down.gif) .5em 50% no-repeat;
+}
+.ui-accordion-content {
+	background: #000000 url(images/000000_40x100_textures_05_inset_soft_25.png) 0 bottom repeat-x;
+	color: #ffffff;
+	font-size: 0.8em;
+}
+.ui-accordion-content p {
+	padding: 0.8em 1.7em 0.6em;
+}
+
+
+
+
+
+
+/*UI tabs*/
+.ui-tabs-nav {
+	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none;
+	font-family: Segoe UI, Arial, sans-serif;
+	font-size: 1.0.8em;
+/*
+	float: left;
+
+*/	position: relative;
+	z-index: 1;
+/*
+	border-right: 1px solid #666666;
+*/
+	bottom: -1px;
+}
+.ui-tabs-nav ul {
+	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none;
+}
+.ui-tabs-nav li {
+	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none;
+	float: left;
+	border: 1px solid #666666;
+	border-right: none;
+}
+.ui-tabs-nav li a {
+	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none;
+	float: left;
+	font-size: 0.8em;
+	font-weight: bold;
+	text-decoration: none;
+	padding: .5em 1.7em;
+	color: #eeeeee;
+	background: #555555 url(images/555555_40x100_textures_02_glass_20.png) 0 50% repeat-x;
+}
+.ui-tabs-nav li a:hover {
+	background: #0078a3 url(images/0078a3_40x100_textures_02_glass_40.png) 0 50% repeat-x;
+	color: #ffffff;
+}
+.ui-tabs-nav li.ui-tabs-selected {
+	border-bottom-color: #f58400;
+}
+.ui-tabs-nav li.ui-tabs-selected a, .ui-tabs-nav li.ui-tabs-selected a:hover {
+	background: #f58400 url(images/f58400_40x100_textures_05_inset_soft_30.png) 0 50% repeat-x;
+	color: #ffffff;
+}
+.ui-tabs-panel {
+	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none;
+	font-family: Segoe UI, Arial, sans-serif;
+	clear:left;
+	border-top: 1px solid #666666;
+/*
+	background: #000000 url(images/000000_40x100_textures_05_inset_soft_25.png) 0 bottom repeat-x;
+
+*/	color: #ffffff;
+	padding: 15px;	
+	font-size: 1.0.8em;
+}
+.ui-tabs-hide {
+	display: none;/* for accessible hiding: position: absolute; left: -99999999px*/;
+}
+
+
+
+
+
+/*slider*/
+.ui-slider {
+	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none;
+	font-family: Segoe UI, Arial, sans-serif;
+	font-size: 1.0.8em;
+	background: #000000 url(images/000000_40x100_textures_05_inset_soft_25.png) 0 bottom repeat-x;
+	border: 1px solid #666666;
+	height: .8em;
+	position: relative;
+}
+.ui-slider-handle {
+	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none;
+	position: absolute;
+	z-index: 2;
+	top: -7px;
+/*	width: 1.2em;
+	height: 1.2em;
+	background: #555555 url(images/555555_40x100_textures_02_glass_20.png) 0 50% repeat-x;
+	border: 1px solid #666666;
+*/
+	background-image: url(images/slider-handle.png);
+	background-repeat: no-repeat;
+	background-position: 0px 0px;
+	height: 19px;
+	width: 17px;
+}
+.ui-slider-handle:hover {
+	background-position: 0px -19px;
+}
+.ui-slider-handle-active, .ui-slider-handle-active:hover {
+	background-position: 0px -38px;
+}
+.ui-slider-range {
+	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none;
+	height: .8em;
+	background: #0078a3 url(images/0078a3_40x100_textures_02_glass_40.png) 0 50% repeat-x;
+	position: absolute;
+	border: 1px solid #666666;
+	border-left: 0;
+	border-right: 0;
+	top: -1px;
+	z-index: 1;
+	opacity:.7;
+/*
+	filter:Alpha(Opacity=70);
+
+*/}
+
+
+
+
+
+
+/*dialog*/
+.ui-dialog {
+	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none;
+	font-family: Segoe UI, Arial, sans-serif;
+	font-size: 0.9em;
+	background: #000000 url(images/000000_40x100_textures_05_inset_soft_25.png) 0 bottom repeat-x;
+	color: #ffffff;
+	border: 4px solid #666666;
+	position: relative;
+}
+.ui-resizable-handle {
+	position: absolute;
+	font-size: 0.1px;
+	z-index: 99999;
+}
+.ui-resizable .ui-resizable-handle {
+	display: block; 
+}
+body .ui-resizable-disabled .ui-resizable-handle { display: none; } /* use 'body' to make it more specific (css order) */
+body .ui-resizable-autohide .ui-resizable-handle { display: none; } /* use 'body' to make it more specific (css order) */
+.ui-resizable-n { 
+	cursor: n-resize; 
+	height: 7px; 
+	width: 100%; 
+	top: -5px; 
+	left: 0px;  
+}
+.ui-resizable-s { 
+	cursor: s-resize; 
+	height: 7px; 
+	width: 100%; 
+	bottom: -5px; 
+	left: 0px; 
+}
+.ui-resizable-e { 
+	cursor: e-resize; 
+	width: 7px; 
+	right: -5px; 
+	top: 0px; 
+	height: 100%; 
+}
+.ui-resizable-w { 
+	cursor: w-resize; 
+	width: 7px; 
+	left: -5px; 
+	top: 0px; 
+	height: 100%;
+}
+.ui-resizable-se { 
+	cursor: se-resize; 
+	width: 13px; 
+	height: 13px; 
+	right: 0px; 
+	bottom: 0px; 
+	background: url(images/cccccc_11x11_icon_resize_se.gif) no-repeat 0 0;
+}
+.ui-resizable-sw { 
+	cursor: sw-resize; 
+	width: 9px; 
+	height: 9px; 
+	left: 0px; 
+	bottom: 0px;  
+}
+.ui-resizable-nw { 
+	cursor: nw-resize; 
+	width: 9px; 
+	height: 9px; 
+	left: 0px; 
+	top: 0px; 
+}
+.ui-resizable-ne { 
+	cursor: ne-resize; 
+	width: 9px; 
+	height: 9px; 
+	right: 0px; 
+	top: 0px; 
+}
+.ui-dialog-titlebar {
+	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none;
+	padding: .5em 1.5em .5em 0.8em;
+	color: #eeeeee;
+	background: #555555 url(images/555555_40x100_textures_02_glass_20.png) 0 50% repeat-x;
+	border-bottom: 1px solid #666666;
+	font-size: 0.8em;
+	font-weight: bold;
+	position: relative;
+}
+.ui-dialog-title {}
+.ui-dialog-titlebar-close {
+	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none;
+	background: url(images/cccccc_11x11_icon_close.gif) 0 0 no-repeat;
+	position: absolute;
+	right: 8px;
+	top: .7em;
+	width: 11px;
+	height: 11px;
+	z-index: 100;
+	cursor: pointer !important;
+}
+.ui-dialog-titlebar-close-hover, .ui-dialog-titlebar-close:hover {
+	background: url(images/ffffff_11x11_icon_close.gif) 0 0 no-repeat;
+}
+.ui-dialog-titlebar-close:active {
+	background: url(images/222222_11x11_icon_close.gif) 0 0 no-repeat;
+}
+.ui-dialog-titlebar-close span {
+	display: none;
+}
+.ui-dialog-content {
+	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none;
+	color: #ffffff;
+/*
+	padding: 1.5em 1.7em;	
+*/
+	padding-left: 1px;
+}
+.ui-dialog-buttonpane {
+	position: absolute;
+	bottom: 0;
+	width: 100%;
+	text-align: left;
+	border-top: 1px solid #666666;
+	background: #000000;
+}
+.ui-dialog-buttonpane button {
+	margin: .5em 8px .5em 0;
+	color: #eeeeee;
+	background: #555555 url(images/555555_40x100_textures_02_glass_20.png) 0 50% repeat-x;
+	font-size: 0.8em;
+	font-weight: bolder;
+	border: 1px solid #666666;
+	cursor: pointer;
+	padding: .2em .6em .3em .6em;
+	line-height: 1.4em;
+	float: right;
+}
+.ui-dialog-buttonpane button:hover {
+	color: #ffffff;
+	background: #0078a3 url(images/0078a3_40x100_textures_02_glass_40.png) 0 50% repeat-x;
+	border: 1px solid #4bd94b;
+}
+.ui-dialog-buttonpane button:active {
+	color: #ffffff;
+	background: #f58400 url(images/f58400_40x100_textures_05_inset_soft_30.png) 0 50% repeat-x;
+	border: 1px solid #ffaf0f;
+}
+/* This file skins dialog */
+.ui-dialog.ui-draggable .ui-dialog-titlebar,
+.ui-dialog.ui-draggable .ui-dialog-titlebar {
+	cursor: move;
+}
+
+
+
+
+
+
+
+/*datepicker*/
+/* Main Style Sheet for jQuery UI date picker */
+.ui-datepicker-div, .ui-datepicker-inline, #ui-datepicker-div {
+	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none;
+	font-family: Segoe UI, Arial, sans-serif;
+	background: #000000 url(images/000000_40x100_textures_05_inset_soft_25.png) 0 bottom repeat-x;
+	font-size: 1.0.8em;
+	border: 4px solid #666666;
+	width: 15.5em;
+	padding: 2.5em .5em .5em .5em;
+	position: relative;
+}
+.ui-datepicker-div, #ui-datepicker-div {
+	z-index: 9999; /*must have*/
+	display: none;
+}
+.ui-datepicker-inline {
+	float: left;
+	display: block;
+}
+.ui-datepicker-control {
+	display: none;
+}
+.ui-datepicker-current {
+	display: none;
+}
+.ui-datepicker-next, .ui-datepicker-prev {
+	position: absolute;
+	left: .5em;
+	top: .5em;
+	background: #555555 url(images/555555_40x100_textures_02_glass_20.png) 0 50% repeat-x;
+}
+.ui-datepicker-next {
+	left: 14.6em;
+}
+.ui-datepicker-next:hover, .ui-datepicker-prev:hover {
+	background: #0078a3 url(images/0078a3_40x100_textures_02_glass_40.png) 0 50% repeat-x;
+}
+.ui-datepicker-next a, .ui-datepicker-prev a {
+	text-indent: -999999px;
+	width: 1.3em;
+	height: 1.4em;
+	display: block;
+	font-size: 0.8em;
+	background: url(images/cccccc_7x7_arrow_left.gif) 50% 50% no-repeat;
+	border: 1px solid #666666;
+	cursor: pointer;
+}
+.ui-datepicker-next a {
+	background: url(images/cccccc_7x7_arrow_right.gif) 50% 50% no-repeat;
+}
+.ui-datepicker-prev a:hover {
+	background: url(images/ffffff_7x7_arrow_left.gif) 50% 50% no-repeat;
+}
+.ui-datepicker-next a:hover {
+	background: url(images/ffffff_7x7_arrow_right.gif) 50% 50% no-repeat;
+}
+.ui-datepicker-prev a:active {
+	background: url(images/222222_7x7_arrow_left.gif) 50% 50% no-repeat;
+}
+.ui-datepicker-next a:active {
+	background: url(images/222222_7x7_arrow_right.gif) 50% 50% no-repeat;
+}
+.ui-datepicker-header select {
+	border: 1px solid #666666;
+	color: #eeeeee;
+	background: #555555;
+	font-size: 0.8em;
+	line-height: 1.4em;
+	position: absolute;
+	top: .5em;
+	margin: 0 !important;
+}
+.ui-datepicker-header option:focus, .ui-datepicker-header option:hover {
+	background: #0078a3;
+}
+.ui-datepicker-header select.ui-datepicker-new-month {
+	width: 7em;
+	left: 2.2em;
+}
+.ui-datepicker-header select.ui-datepicker-new-year {
+	width: 5em;
+	left: 9.4em;
+}
+table.ui-datepicker {
+	width: 15.5em;
+	text-align: right;
+}
+table.ui-datepicker td a {
+	padding: .0.8em .3em .0.8em 0;
+	display: block;
+	color: #eeeeee;
+	background: #555555 url(images/555555_40x100_textures_02_glass_20.png) 0 50% repeat-x;
+	cursor: pointer;
+	border: 1px solid #000000;
+}
+table.ui-datepicker td a:hover {
+	border: 1px solid #4bd94b;
+	color: #ffffff;
+	background: #0078a3 url(images/0078a3_40x100_textures_02_glass_40.png) 0 50% repeat-x;
+}
+table.ui-datepicker td a:active {
+	border: 1px solid #ffaf0f;
+	color: #ffffff;
+	background: #f58400 url(images/f58400_40x100_textures_05_inset_soft_30.png) 0 50% repeat-x;
+}
+table.ui-datepicker .ui-datepicker-title-row td {
+	padding: .3em 0;
+	text-align: center;
+	font-size: .9em;
+	color: #ffffff;
+	text-transform: uppercase;
+}
+table.ui-datepicker .ui-datepicker-title-row td a {
+	color: #ffffff;
+}
+.ui-datepicker-cover {
+	display: none;
+	display: block;
+	position: absolute;
+	z-index: -1;
+/*
+	filter: mask();
+
+*/	top: -4px;
+	left: -4px;
+	width: 193px;
+	height: 200px;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/*
+Generic ThemeRoller Classes
+>> Make your jQuery Components ThemeRoller-Compatible!
+*/
+
+/*component global class*/
+.ui-component {
+	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none;
+	font-family: Segoe UI, Arial, sans-serif;
+	font-size: 1.0.8em;
+}
+/*component content styles*/
+.ui-component-content {
+	border: 1px solid #666666;
+	background: #000000 url(images/000000_40x100_textures_05_inset_soft_25.png) 0 bottom repeat-x;
+	color: #ffffff;
+}
+.ui-component-content a {
+	color: #ffffff;
+	text-decoration: underline;
+}
+/*component states*/
+.ui-default-state {
+	border: 1px solid #666666;
+	background: #555555 url(images/555555_40x100_textures_02_glass_20.png) 0 50% repeat-x;
+	font-weight: bold;
+	color: #eeeeee !important;
+}
+.ui-default-state a {
+	color: #eeeeee;
+}
+.ui-default-state:hover, .ui-hover-state {
+	border: 1px solid #4bd94b;
+	background: #0078a3 url(images/0078a3_40x100_textures_02_glass_40.png) 0 50% repeat-x;
+	font-weight: bold;
+	color: #ffffff !important;
+}
+.ui-hover-state a {
+	color: #ffffff;
+}
+.ui-default-state:active, .ui-active-state {
+	border: 1px solid #ffaf0f;
+	background: #f58400 url(images/f58400_40x100_textures_05_inset_soft_30.png) 0 50% repeat-x;
+	font-weight: bold;
+	color: #ffffff !important;
+	outline: none;
+}
+.ui-active-state a {
+	color: #ffffff;
+	outline: none;
+}
+/*icons*/
+.ui-arrow-right-default {background: url(images/cccccc_7x7_arrow_right.gif) no-repeat 50% 50%;}
+.ui-arrow-right-default:hover, .ui-arrow-right-hover {background: url(images/ffffff_7x7_arrow_right.gif) no-repeat 50% 50%;}
+.ui-arrow-right-default:active, .ui-arrow-right-active {background: url(images/222222_7x7_arrow_right.gif) no-repeat 50% 50%;}
+.ui-arrow-right-content {background: url(images/cccccc_7x7_arrow_right.gif) no-repeat 50% 50%;}
+
+.ui-arrow-left-default {background: url(images/cccccc_7x7_arrow_left.gif) no-repeat 50% 50%;}
+.ui-arrow-left-default:hover, .ui-arrow-left-hover {background: url(images/ffffff_7x7_arrow_left.gif) no-repeat 50% 50%;}
+.ui-arrow-left-default:active, .ui-arrow-left-active {background: url(images/222222_7x7_arrow_left.gif) no-repeat 50% 50%;}
+.ui-arrow-left-content {background: url(images/cccccc_7x7_arrow_left.gif) no-repeat 50% 50%;}
+
+.ui-arrow-down-default {background: url(images/cccccc_7x7_arrow_down.gif) no-repeat 50% 50%;}
+.ui-arrow-down-default:hover, .ui-arrow-down-hover {background: url(images/ffffff_7x7_arrow_down.gif) no-repeat 50% 50%;}
+.ui-arrow-down-default:active, .ui-arrow-down-active {background: url(images/222222_7x7_arrow_down.gif) no-repeat 50% 50%;}
+.ui-arrow-down-content {background: url(images/cccccc_7x7_arrow_down.gif) no-repeat 50% 50%;}
+
+.ui-arrow-up-default {background: url(images/cccccc_7x7_arrow_up.gif) no-repeat 50% 50%;}
+.ui-arrow-up-default:hover, .ui-arrow-up-hover {background: url(images/ffffff_7x7_arrow_up.gif) no-repeat 50% 50%;}
+.ui-arrow-up-default:active, .ui-arrow-up-active {background: url(images/222222_7x7_arrow_up.gif) no-repeat 50% 50%;}
+.ui-arrow-up-content {background: url(images/cccccc_7x7_arrow_up.gif) no-repeat 50% 50%;}
+
+.ui-close-default {background: url(images/cccccc_11x11_icon_close.gif) no-repeat 50% 50%;}
+.ui-close-default:hover, .ui-close-hover {background: url(images/ffffff_11x11_icon_close.gif) no-repeat 50% 50%;}
+.ui-close-default:active, .ui-close-active {background: url(images/222222_11x11_icon_close.gif) no-repeat 50% 50%;}
+.ui-close-content {background: url(images/222222_11x11_icon_close.gif) no-repeat 50% 50%;}
+
+.ui-folder-closed-default {background: url(images/cccccc_11x11_icon_folder_closed.gif) no-repeat 50% 50%;}
+.ui-folder-closed-default:hover, .ui-folder-closed-hover {background: url(images/ffffff_11x11_icon_folder_closed.gif) no-repeat 50% 50%;}
+.ui-folder-closed-default:active, .ui-folder-closed-active {background: url(images/222222_11x11_icon_folder_closed.gif) no-repeat 50% 50%;}
+.ui-folder-closed-content {background: url(images/cccccc_11x11_icon_folder_closed.gif) no-repeat 50% 50%;}
+
+.ui-folder-open-default {background: url(images/cccccc_11x11_icon_folder_open.gif) no-repeat 50% 50%;}
+.ui-folder-open-default:hover, .ui-folder-open-hover {background: url(images/ffffff_11x11_icon_folder_open.gif) no-repeat 50% 50%;}
+.ui-folder-open-default:active, .ui-folder-open-active {background: url(images/222222_11x11_icon_folder_open.gif) no-repeat 50% 50%;}
+.ui-folder-open-content {background: url(images/222222_11x11_icon_folder_open.gif) no-repeat 50% 50%;}
+
+.ui-doc-default {background: url(images/cccccc_11x11_icon_doc.gif) no-repeat 50% 50%;}
+.ui-doc-default:hover, .ui-doc-hover {background: url(images/ffffff_11x11_icon_doc.gif) no-repeat 50% 50%;}
+.ui-doc-default:active, .ui-doc-active {background: url(images/222222_11x11_icon_doc.gif) no-repeat 50% 50%;}
+.ui-doc-content {background: url(images/cccccc_11x11_icon_doc.gif) no-repeat 50% 50%;}
+
+.ui-arrows-leftright-default {background: url(images/cccccc_11x11_icon_arrows_leftright.gif) no-repeat 50% 50%;}
+.ui-arrows-leftright-default:hover, .ui-arrows-leftright-hover {background: url(images/ffffff_11x11_icon_arrows_leftright.gif) no-repeat 50% 50%;}
+.ui-arrows-leftright-default:active, .ui-arrows-leftright-active {background: url(images/222222_11x11_icon_arrows_leftright.gif) no-repeat 50% 50%;}
+.ui-arrows-leftright-content {background: url(images/cccccc_11x11_icon_arrows_leftright.gif) no-repeat 50% 50%;}
+
+.ui-arrows-updown-default {background: url(images/cccccc_11x11_icon_arrows_updown.gif) no-repeat 50% 50%;}
+.ui-arrows-updown-default:hover, .ui-arrows-updown-hover {background: url(images/ffffff_11x11_icon_arrows_updown.gif) no-repeat 50% 50%;}
+.ui-arrows-updown-default:active, .ui-arrows-updown-active {background: url(images/222222_11x11_icon_arrows_updown.gif) no-repeat 50% 50%;}
+.ui-arrows-updown-content {background: url(images/cccccc_11x11_icon_arrows_updown.gif) no-repeat 50% 50%;}
+
+.ui-minus-default {background: url(images/cccccc_11x11_icon_minus.gif) no-repeat 50% 50%;}
+.ui-minus-default:hover, .ui-minus-hover {background: url(images/ffffff_11x11_icon_minus.gif) no-repeat 50% 50%;}
+.ui-minus-default:active, .ui-minus-active {background: url(images/222222_11x11_icon_minus.gif) no-repeat 50% 50%;}
+.ui-minus-content {background: url(images/cccccc_11x11_icon_minus.gif) no-repeat 50% 50%;}
+
+.ui-plus-default {background: url(images/cccccc_11x11_icon_plus.gif) no-repeat 50% 50%;}
+.ui-plus-default:hover, .ui-plus-hover {background: url(images/ffffff_11x11_icon_plus.gif) no-repeat 50% 50%;}
+.ui-plus-default:active, .ui-plus-active {background: url(images/222222_11x11_icon_plus.gif) no-repeat 50% 50%;}
+.ui-plus-content {background: url(images/cccccc_11x11_icon_plus.gif) no-repeat 50% 50%;}
+
+/*hidden elements*/
+.ui-hidden {
+	display: none;/* for accessible hiding: position: absolute; left: -99999999px*/;
+}
+.ui-accessible-hidden {
+	 position: absolute; left: -99999999px;
+}
+/*reset styles*/
+.ui-reset {
+	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none;
+}
+/*clearfix class*/
+.ui-clearfix:after {
+    content: "."; 
+    display: block; 
+    height: 0; 
+    clear: both; 
+    visibility: hidden;
+}
+.ui-clearfix {display: block;}
+/* Hides from IE-mac \*/
+* html .ui-clearfix {height: 1%;}
+.ui-clearfix {display: block;}
+/* End hide from IE-mac */
+
+/* Note: for resizable styles, use the styles listed above in the dialog section */
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/js/jquery-1.2.6.min.js	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,32 @@
+/*
+ * jQuery 1.2.6 - New Wave Javascript
+ *
+ * Copyright (c) 2008 John Resig (jquery.com)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * $Date: 2008-05-24 14:22:17 -0400 (Sat, 24 May 2008) $
+ * $Rev: 5685 $
+ */
+(function(){var _jQuery=window.jQuery,_$=window.$;var jQuery=window.jQuery=window.$=function(selector,context){return new jQuery.fn.init(selector,context);};var quickExpr=/^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/,isSimple=/^.[^:#\[\.]*$/,undefined;jQuery.fn=jQuery.prototype={init:function(selector,context){selector=selector||document;if(selector.nodeType){this[0]=selector;this.length=1;return this;}if(typeof selector=="string"){var match=quickExpr.exec(selector);if(match&&(match[1]||!context)){if(match[1])selector=jQuery.clean([match[1]],context);else{var elem=document.getElementById(match[3]);if(elem){if(elem.id!=match[3])return jQuery().find(selector);return jQuery(elem);}selector=[];}}else
+return jQuery(context).find(selector);}else if(jQuery.isFunction(selector))return jQuery(document)[jQuery.fn.ready?"ready":"load"](selector);return this.setArray(jQuery.makeArray(selector));},jquery:"1.2.6",size:function(){return this.length;},length:0,get:function(num){return num==undefined?jQuery.makeArray(this):this[num];},pushStack:function(elems){var ret=jQuery(elems);ret.prevObject=this;return ret;},setArray:function(elems){this.length=0;Array.prototype.push.apply(this,elems);return this;},each:function(callback,args){return jQuery.each(this,callback,args);},index:function(elem){var ret=-1;return jQuery.inArray(elem&&elem.jquery?elem[0]:elem,this);},attr:function(name,value,type){var options=name;if(name.constructor==String)if(value===undefined)return this[0]&&jQuery[type||"attr"](this[0],name);else{options={};options[name]=value;}return this.each(function(i){for(name in options)jQuery.attr(type?this.style:this,name,jQuery.prop(this,options[name],type,i,name));});},css:function(key,value){if((key=='width'||key=='height')&&parseFloat(value)<0)value=undefined;return this.attr(key,value,"curCSS");},text:function(text){if(typeof text!="object"&&text!=null)return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(text));var ret="";jQuery.each(text||this,function(){jQuery.each(this.childNodes,function(){if(this.nodeType!=8)ret+=this.nodeType!=1?this.nodeValue:jQuery.fn.text([this]);});});return ret;},wrapAll:function(html){if(this[0])jQuery(html,this[0].ownerDocument).clone().insertBefore(this[0]).map(function(){var elem=this;while(elem.firstChild)elem=elem.firstChild;return elem;}).append(this);return this;},wrapInner:function(html){return this.each(function(){jQuery(this).contents().wrapAll(html);});},wrap:function(html){return this.each(function(){jQuery(this).wrapAll(html);});},append:function(){return this.domManip(arguments,true,false,function(elem){if(this.nodeType==1)this.appendChild(elem);});},prepend:function(){return this.domManip(arguments,true,true,function(elem){if(this.nodeType==1)this.insertBefore(elem,this.firstChild);});},before:function(){return this.domManip(arguments,false,false,function(elem){this.parentNode.insertBefore(elem,this);});},after:function(){return this.domManip(arguments,false,true,function(elem){this.parentNode.insertBefore(elem,this.nextSibling);});},end:function(){return this.prevObject||jQuery([]);},find:function(selector){var elems=jQuery.map(this,function(elem){return jQuery.find(selector,elem);});return this.pushStack(/[^+>] [^+>]/.test(selector)||selector.indexOf("..")>-1?jQuery.unique(elems):elems);},clone:function(events){var ret=this.map(function(){if(jQuery.browser.msie&&!jQuery.isXMLDoc(this)){var clone=this.cloneNode(true),container=document.createElement("div");container.appendChild(clone);return jQuery.clean([container.innerHTML])[0];}else
+return this.cloneNode(true);});var clone=ret.find("*").andSelf().each(function(){if(this[expando]!=undefined)this[expando]=null;});if(events===true)this.find("*").andSelf().each(function(i){if(this.nodeType==3)return;var events=jQuery.data(this,"events");for(var type in events)for(var handler in events[type])jQuery.event.add(clone[i],type,events[type][handler],events[type][handler].data);});return ret;},filter:function(selector){return this.pushStack(jQuery.isFunction(selector)&&jQuery.grep(this,function(elem,i){return selector.call(elem,i);})||jQuery.multiFilter(selector,this));},not:function(selector){if(selector.constructor==String)if(isSimple.test(selector))return this.pushStack(jQuery.multiFilter(selector,this,true));else
+selector=jQuery.multiFilter(selector,this);var isArrayLike=selector.length&&selector[selector.length-1]!==undefined&&!selector.nodeType;return this.filter(function(){return isArrayLike?jQuery.inArray(this,selector)<0:this!=selector;});},add:function(selector){return this.pushStack(jQuery.unique(jQuery.merge(this.get(),typeof selector=='string'?jQuery(selector):jQuery.makeArray(selector))));},is:function(selector){return!!selector&&jQuery.multiFilter(selector,this).length>0;},hasClass:function(selector){return this.is("."+selector);},val:function(value){if(value==undefined){if(this.length){var elem=this[0];if(jQuery.nodeName(elem,"select")){var index=elem.selectedIndex,values=[],options=elem.options,one=elem.type=="select-one";if(index<0)return null;for(var i=one?index:0,max=one?index+1:options.length;i<max;i++){var option=options[i];if(option.selected){value=jQuery.browser.msie&&!option.attributes.value.specified?option.text:option.value;if(one)return value;values.push(value);}}return values;}else
+return(this[0].value||"").replace(/\r/g,"");}return undefined;}if(value.constructor==Number)value+='';return this.each(function(){if(this.nodeType!=1)return;if(value.constructor==Array&&/radio|checkbox/.test(this.type))this.checked=(jQuery.inArray(this.value,value)>=0||jQuery.inArray(this.name,value)>=0);else if(jQuery.nodeName(this,"select")){var values=jQuery.makeArray(value);jQuery("option",this).each(function(){this.selected=(jQuery.inArray(this.value,values)>=0||jQuery.inArray(this.text,values)>=0);});if(!values.length)this.selectedIndex=-1;}else
+this.value=value;});},html:function(value){return value==undefined?(this[0]?this[0].innerHTML:null):this.empty().append(value);},replaceWith:function(value){return this.after(value).remove();},eq:function(i){return this.slice(i,i+1);},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments));},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);}));},andSelf:function(){return this.add(this.prevObject);},data:function(key,value){var parts=key.split(".");parts[1]=parts[1]?"."+parts[1]:"";if(value===undefined){var data=this.triggerHandler("getData"+parts[1]+"!",[parts[0]]);if(data===undefined&&this.length)data=jQuery.data(this[0],key);return data===undefined&&parts[1]?this.data(parts[0]):data;}else
+return this.trigger("setData"+parts[1]+"!",[parts[0],value]).each(function(){jQuery.data(this,key,value);});},removeData:function(key){return this.each(function(){jQuery.removeData(this,key);});},domManip:function(args,table,reverse,callback){var clone=this.length>1,elems;return this.each(function(){if(!elems){elems=jQuery.clean(args,this.ownerDocument);if(reverse)elems.reverse();}var obj=this;if(table&&jQuery.nodeName(this,"table")&&jQuery.nodeName(elems[0],"tr"))obj=this.getElementsByTagName("tbody")[0]||this.appendChild(this.ownerDocument.createElement("tbody"));var scripts=jQuery([]);jQuery.each(elems,function(){var elem=clone?jQuery(this).clone(true)[0]:this;if(jQuery.nodeName(elem,"script"))scripts=scripts.add(elem);else{if(elem.nodeType==1)scripts=scripts.add(jQuery("script",elem).remove());callback.call(obj,elem);}});scripts.each(evalScript);});}};jQuery.fn.init.prototype=jQuery.fn;function evalScript(i,elem){if(elem.src)jQuery.ajax({url:elem.src,async:false,dataType:"script"});else
+jQuery.globalEval(elem.text||elem.textContent||elem.innerHTML||"");if(elem.parentNode)elem.parentNode.removeChild(elem);}function now(){return+new Date;}jQuery.extend=jQuery.fn.extend=function(){var target=arguments[0]||{},i=1,length=arguments.length,deep=false,options;if(target.constructor==Boolean){deep=target;target=arguments[1]||{};i=2;}if(typeof target!="object"&&typeof target!="function")target={};if(length==i){target=this;--i;}for(;i<length;i++)if((options=arguments[i])!=null)for(var name in options){var src=target[name],copy=options[name];if(target===copy)continue;if(deep&&copy&&typeof copy=="object"&&!copy.nodeType)target[name]=jQuery.extend(deep,src||(copy.length!=null?[]:{}),copy);else if(copy!==undefined)target[name]=copy;}return target;};var expando="jQuery"+now(),uuid=0,windowData={},exclude=/z-?index|font-?weight|opacity|zoom|line-?height/i,defaultView=document.defaultView||{};jQuery.extend({noConflict:function(deep){window.$=_$;if(deep)window.jQuery=_jQuery;return jQuery;},isFunction:function(fn){return!!fn&&typeof fn!="string"&&!fn.nodeName&&fn.constructor!=Array&&/^[\s[]?function/.test(fn+"");},isXMLDoc:function(elem){return elem.documentElement&&!elem.body||elem.tagName&&elem.ownerDocument&&!elem.ownerDocument.body;},globalEval:function(data){data=jQuery.trim(data);if(data){var head=document.getElementsByTagName("head")[0]||document.documentElement,script=document.createElement("script");script.type="text/javascript";if(jQuery.browser.msie)script.text=data;else
+script.appendChild(document.createTextNode(data));head.insertBefore(script,head.firstChild);head.removeChild(script);}},nodeName:function(elem,name){return elem.nodeName&&elem.nodeName.toUpperCase()==name.toUpperCase();},cache:{},data:function(elem,name,data){elem=elem==window?windowData:elem;var id=elem[expando];if(!id)id=elem[expando]=++uuid;if(name&&!jQuery.cache[id])jQuery.cache[id]={};if(data!==undefined)jQuery.cache[id][name]=data;return name?jQuery.cache[id][name]:id;},removeData:function(elem,name){elem=elem==window?windowData:elem;var id=elem[expando];if(name){if(jQuery.cache[id]){delete jQuery.cache[id][name];name="";for(name in jQuery.cache[id])break;if(!name)jQuery.removeData(elem);}}else{try{delete elem[expando];}catch(e){if(elem.removeAttribute)elem.removeAttribute(expando);}delete jQuery.cache[id];}},each:function(object,callback,args){var name,i=0,length=object.length;if(args){if(length==undefined){for(name in object)if(callback.apply(object[name],args)===false)break;}else
+for(;i<length;)if(callback.apply(object[i++],args)===false)break;}else{if(length==undefined){for(name in object)if(callback.call(object[name],name,object[name])===false)break;}else
+for(var value=object[0];i<length&&callback.call(value,i,value)!==false;value=object[++i]){}}return object;},prop:function(elem,value,type,i,name){if(jQuery.isFunction(value))value=value.call(elem,i);return value&&value.constructor==Number&&type=="curCSS"&&!exclude.test(name)?value+"px":value;},className:{add:function(elem,classNames){jQuery.each((classNames||"").split(/\s+/),function(i,className){if(elem.nodeType==1&&!jQuery.className.has(elem.className,className))elem.className+=(elem.className?" ":"")+className;});},remove:function(elem,classNames){if(elem.nodeType==1)elem.className=classNames!=undefined?jQuery.grep(elem.className.split(/\s+/),function(className){return!jQuery.className.has(classNames,className);}).join(" "):"";},has:function(elem,className){return jQuery.inArray(className,(elem.className||elem).toString().split(/\s+/))>-1;}},swap:function(elem,options,callback){var old={};for(var name in options){old[name]=elem.style[name];elem.style[name]=options[name];}callback.call(elem);for(var name in options)elem.style[name]=old[name];},css:function(elem,name,force){if(name=="width"||name=="height"){var val,props={position:"absolute",visibility:"hidden",display:"block"},which=name=="width"?["Left","Right"]:["Top","Bottom"];function getWH(){val=name=="width"?elem.offsetWidth:elem.offsetHeight;var padding=0,border=0;jQuery.each(which,function(){padding+=parseFloat(jQuery.curCSS(elem,"padding"+this,true))||0;border+=parseFloat(jQuery.curCSS(elem,"border"+this+"Width",true))||0;});val-=Math.round(padding+border);}if(jQuery(elem).is(":visible"))getWH();else
+jQuery.swap(elem,props,getWH);return Math.max(0,val);}return jQuery.curCSS(elem,name,force);},curCSS:function(elem,name,force){var ret,style=elem.style;function color(elem){if(!jQuery.browser.safari)return false;var ret=defaultView.getComputedStyle(elem,null);return!ret||ret.getPropertyValue("color")=="";}if(name=="opacity"&&jQuery.browser.msie){ret=jQuery.attr(style,"opacity");return ret==""?"1":ret;}if(jQuery.browser.opera&&name=="display"){var save=style.outline;style.outline="0 solid black";style.outline=save;}if(name.match(/float/i))name=styleFloat;if(!force&&style&&style[name])ret=style[name];else if(defaultView.getComputedStyle){if(name.match(/float/i))name="float";name=name.replace(/([A-Z])/g,"-$1").toLowerCase();var computedStyle=defaultView.getComputedStyle(elem,null);if(computedStyle&&!color(elem))ret=computedStyle.getPropertyValue(name);else{var swap=[],stack=[],a=elem,i=0;for(;a&&color(a);a=a.parentNode)stack.unshift(a);for(;i<stack.length;i++)if(color(stack[i])){swap[i]=stack[i].style.display;stack[i].style.display="block";}ret=name=="display"&&swap[stack.length-1]!=null?"none":(computedStyle&&computedStyle.getPropertyValue(name))||"";for(i=0;i<swap.length;i++)if(swap[i]!=null)stack[i].style.display=swap[i];}if(name=="opacity"&&ret=="")ret="1";}else if(elem.currentStyle){var camelCase=name.replace(/\-(\w)/g,function(all,letter){return letter.toUpperCase();});ret=elem.currentStyle[name]||elem.currentStyle[camelCase];if(!/^\d+(px)?$/i.test(ret)&&/^\d/.test(ret)){var left=style.left,rsLeft=elem.runtimeStyle.left;elem.runtimeStyle.left=elem.currentStyle.left;style.left=ret||0;ret=style.pixelLeft+"px";style.left=left;elem.runtimeStyle.left=rsLeft;}}return ret;},clean:function(elems,context){var ret=[];context=context||document;if(typeof context.createElement=='undefined')context=context.ownerDocument||context[0]&&context[0].ownerDocument||document;jQuery.each(elems,function(i,elem){if(!elem)return;if(elem.constructor==Number)elem+='';if(typeof elem=="string"){elem=elem.replace(/(<(\w+)[^>]*?)\/>/g,function(all,front,tag){return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?all:front+"></"+tag+">";});var tags=jQuery.trim(elem).toLowerCase(),div=context.createElement("div");var wrap=!tags.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!tags.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||tags.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!tags.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!tags.indexOf("<td")||!tags.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!tags.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||jQuery.browser.msie&&[1,"div<div>","</div>"]||[0,"",""];div.innerHTML=wrap[1]+elem+wrap[2];while(wrap[0]--)div=div.lastChild;if(jQuery.browser.msie){var tbody=!tags.indexOf("<table")&&tags.indexOf("<tbody")<0?div.firstChild&&div.firstChild.childNodes:wrap[1]=="<table>"&&tags.indexOf("<tbody")<0?div.childNodes:[];for(var j=tbody.length-1;j>=0;--j)if(jQuery.nodeName(tbody[j],"tbody")&&!tbody[j].childNodes.length)tbody[j].parentNode.removeChild(tbody[j]);if(/^\s/.test(elem))div.insertBefore(context.createTextNode(elem.match(/^\s*/)[0]),div.firstChild);}elem=jQuery.makeArray(div.childNodes);}if(elem.length===0&&(!jQuery.nodeName(elem,"form")&&!jQuery.nodeName(elem,"select")))return;if(elem[0]==undefined||jQuery.nodeName(elem,"form")||elem.options)ret.push(elem);else
+ret=jQuery.merge(ret,elem);});return ret;},attr:function(elem,name,value){if(!elem||elem.nodeType==3||elem.nodeType==8)return undefined;var notxml=!jQuery.isXMLDoc(elem),set=value!==undefined,msie=jQuery.browser.msie;name=notxml&&jQuery.props[name]||name;if(elem.tagName){var special=/href|src|style/.test(name);if(name=="selected"&&jQuery.browser.safari)elem.parentNode.selectedIndex;if(name in elem&&notxml&&!special){if(set){if(name=="type"&&jQuery.nodeName(elem,"input")&&elem.parentNode)throw"type property can't be changed";elem[name]=value;}if(jQuery.nodeName(elem,"form")&&elem.getAttributeNode(name))return elem.getAttributeNode(name).nodeValue;return elem[name];}if(msie&&notxml&&name=="style")return jQuery.attr(elem.style,"cssText",value);if(set)elem.setAttribute(name,""+value);var attr=msie&&notxml&&special?elem.getAttribute(name,2):elem.getAttribute(name);return attr===null?undefined:attr;}if(msie&&name=="opacity"){if(set){elem.zoom=1;elem.filter=(elem.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(value)+''=="NaN"?"":"alpha(opacity="+value*100+")");}return elem.filter&&elem.filter.indexOf("opacity=")>=0?(parseFloat(elem.filter.match(/opacity=([^)]*)/)[1])/100)+'':"";}name=name.replace(/-([a-z])/ig,function(all,letter){return letter.toUpperCase();});if(set)elem[name]=value;return elem[name];},trim:function(text){return(text||"").replace(/^\s+|\s+$/g,"");},makeArray:function(array){var ret=[];if(array!=null){var i=array.length;if(i==null||array.split||array.setInterval||array.call)ret[0]=array;else
+while(i)ret[--i]=array[i];}return ret;},inArray:function(elem,array){for(var i=0,length=array.length;i<length;i++)if(array[i]===elem)return i;return-1;},merge:function(first,second){var i=0,elem,pos=first.length;if(jQuery.browser.msie){while(elem=second[i++])if(elem.nodeType!=8)first[pos++]=elem;}else
+while(elem=second[i++])first[pos++]=elem;return first;},unique:function(array){var ret=[],done={};try{for(var i=0,length=array.length;i<length;i++){var id=jQuery.data(array[i]);if(!done[id]){done[id]=true;ret.push(array[i]);}}}catch(e){ret=array;}return ret;},grep:function(elems,callback,inv){var ret=[];for(var i=0,length=elems.length;i<length;i++)if(!inv!=!callback(elems[i],i))ret.push(elems[i]);return ret;},map:function(elems,callback){var ret=[];for(var i=0,length=elems.length;i<length;i++){var value=callback(elems[i],i);if(value!=null)ret[ret.length]=value;}return ret.concat.apply([],ret);}});var userAgent=navigator.userAgent.toLowerCase();jQuery.browser={version:(userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[])[1],safari:/webkit/.test(userAgent),opera:/opera/.test(userAgent),msie:/msie/.test(userAgent)&&!/opera/.test(userAgent),mozilla:/mozilla/.test(userAgent)&&!/(compatible|webkit)/.test(userAgent)};var styleFloat=jQuery.browser.msie?"styleFloat":"cssFloat";jQuery.extend({boxModel:!jQuery.browser.msie||document.compatMode=="CSS1Compat",props:{"for":"htmlFor","class":"className","float":styleFloat,cssFloat:styleFloat,styleFloat:styleFloat,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing"}});jQuery.each({parent:function(elem){return elem.parentNode;},parents:function(elem){return jQuery.dir(elem,"parentNode");},next:function(elem){return jQuery.nth(elem,2,"nextSibling");},prev:function(elem){return jQuery.nth(elem,2,"previousSibling");},nextAll:function(elem){return jQuery.dir(elem,"nextSibling");},prevAll:function(elem){return jQuery.dir(elem,"previousSibling");},siblings:function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},children:function(elem){return jQuery.sibling(elem.firstChild);},contents:function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}},function(name,fn){jQuery.fn[name]=function(selector){var ret=jQuery.map(this,fn);if(selector&&typeof selector=="string")ret=jQuery.multiFilter(selector,ret);return this.pushStack(jQuery.unique(ret));};});jQuery.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(name,original){jQuery.fn[name]=function(){var args=arguments;return this.each(function(){for(var i=0,length=args.length;i<length;i++)jQuery(args[i])[original](this);});};});jQuery.each({removeAttr:function(name){jQuery.attr(this,name,"");if(this.nodeType==1)this.removeAttribute(name);},addClass:function(classNames){jQuery.className.add(this,classNames);},removeClass:function(classNames){jQuery.className.remove(this,classNames);},toggleClass:function(classNames){jQuery.className[jQuery.className.has(this,classNames)?"remove":"add"](this,classNames);},remove:function(selector){if(!selector||jQuery.filter(selector,[this]).r.length){jQuery("*",this).add(this).each(function(){jQuery.event.remove(this);jQuery.removeData(this);});if(this.parentNode)this.parentNode.removeChild(this);}},empty:function(){jQuery(">*",this).remove();while(this.firstChild)this.removeChild(this.firstChild);}},function(name,fn){jQuery.fn[name]=function(){return this.each(fn,arguments);};});jQuery.each(["Height","Width"],function(i,name){var type=name.toLowerCase();jQuery.fn[type]=function(size){return this[0]==window?jQuery.browser.opera&&document.body["client"+name]||jQuery.browser.safari&&window["inner"+name]||document.compatMode=="CSS1Compat"&&document.documentElement["client"+name]||document.body["client"+name]:this[0]==document?Math.max(Math.max(document.body["scroll"+name],document.documentElement["scroll"+name]),Math.max(document.body["offset"+name],document.documentElement["offset"+name])):size==undefined?(this.length?jQuery.css(this[0],type):null):this.css(type,size.constructor==String?size:size+"px");};});function num(elem,prop){return elem[0]&&parseInt(jQuery.curCSS(elem[0],prop,true),10)||0;}var chars=jQuery.browser.safari&&parseInt(jQuery.browser.version)<417?"(?:[\\w*_-]|\\\\.)":"(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",quickChild=new RegExp("^>\\s*("+chars+"+)"),quickID=new RegExp("^("+chars+"+)(#)("+chars+"+)"),quickClass=new RegExp("^([#.]?)("+chars+"*)");jQuery.extend({expr:{"":function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},"#":function(a,i,m){return a.getAttribute("id")==m[2];},":":{lt:function(a,i,m){return i<m[3]-0;},gt:function(a,i,m){return i>m[3]-0;},nth:function(a,i,m){return m[3]-0==i;},eq:function(a,i,m){return m[3]-0==i;},first:function(a,i){return i==0;},last:function(a,i,m,r){return i==r.length-1;},even:function(a,i){return i%2==0;},odd:function(a,i){return i%2;},"first-child":function(a){return a.parentNode.getElementsByTagName("*")[0]==a;},"last-child":function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;},"only-child":function(a){return!jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},parent:function(a){return a.firstChild;},empty:function(a){return!a.firstChild;},contains:function(a,i,m){return(a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])>=0;},visible:function(a){return"hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden";},hidden:function(a){return"hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden";},enabled:function(a){return!a.disabled;},disabled:function(a){return a.disabled;},checked:function(a){return a.checked;},selected:function(a){return a.selected||jQuery.attr(a,"selected");},text:function(a){return"text"==a.type;},radio:function(a){return"radio"==a.type;},checkbox:function(a){return"checkbox"==a.type;},file:function(a){return"file"==a.type;},password:function(a){return"password"==a.type;},submit:function(a){return"submit"==a.type;},image:function(a){return"image"==a.type;},reset:function(a){return"reset"==a.type;},button:function(a){return"button"==a.type||jQuery.nodeName(a,"button");},input:function(a){return/input|select|textarea|button/i.test(a.nodeName);},has:function(a,i,m){return jQuery.find(m[3],a).length;},header:function(a){return/h\d/i.test(a.nodeName);},animated:function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;}}},parse:[/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,new RegExp("^([:.#]*)("+chars+"+)")],multiFilter:function(expr,elems,not){var old,cur=[];while(expr&&expr!=old){old=expr;var f=jQuery.filter(expr,elems,not);expr=f.t.replace(/^\s*,\s*/,"");cur=not?elems=f.r:jQuery.merge(cur,f.r);}return cur;},find:function(t,context){if(typeof t!="string")return[t];if(context&&context.nodeType!=1&&context.nodeType!=9)return[];context=context||document;var ret=[context],done=[],last,nodeName;while(t&&last!=t){var r=[];last=t;t=jQuery.trim(t);var foundToken=false,re=quickChild,m=re.exec(t);if(m){nodeName=m[1].toUpperCase();for(var i=0;ret[i];i++)for(var c=ret[i].firstChild;c;c=c.nextSibling)if(c.nodeType==1&&(nodeName=="*"||c.nodeName.toUpperCase()==nodeName))r.push(c);ret=r;t=t.replace(re,"");if(t.indexOf(" ")==0)continue;foundToken=true;}else{re=/^([>+~])\s*(\w*)/i;if((m=re.exec(t))!=null){r=[];var merge={};nodeName=m[2].toUpperCase();m=m[1];for(var j=0,rl=ret.length;j<rl;j++){var n=m=="~"||m=="+"?ret[j].nextSibling:ret[j].firstChild;for(;n;n=n.nextSibling)if(n.nodeType==1){var id=jQuery.data(n);if(m=="~"&&merge[id])break;if(!nodeName||n.nodeName.toUpperCase()==nodeName){if(m=="~")merge[id]=true;r.push(n);}if(m=="+")break;}}ret=r;t=jQuery.trim(t.replace(re,""));foundToken=true;}}if(t&&!foundToken){if(!t.indexOf(",")){if(context==ret[0])ret.shift();done=jQuery.merge(done,ret);r=ret=[context];t=" "+t.substr(1,t.length);}else{var re2=quickID;var m=re2.exec(t);if(m){m=[0,m[2],m[3],m[1]];}else{re2=quickClass;m=re2.exec(t);}m[2]=m[2].replace(/\\/g,"");var elem=ret[ret.length-1];if(m[1]=="#"&&elem&&elem.getElementById&&!jQuery.isXMLDoc(elem)){var oid=elem.getElementById(m[2]);if((jQuery.browser.msie||jQuery.browser.opera)&&oid&&typeof oid.id=="string"&&oid.id!=m[2])oid=jQuery('[@id="'+m[2]+'"]',elem)[0];ret=r=oid&&(!m[3]||jQuery.nodeName(oid,m[3]))?[oid]:[];}else{for(var i=0;ret[i];i++){var tag=m[1]=="#"&&m[3]?m[3]:m[1]!=""||m[0]==""?"*":m[2];if(tag=="*"&&ret[i].nodeName.toLowerCase()=="object")tag="param";r=jQuery.merge(r,ret[i].getElementsByTagName(tag));}if(m[1]==".")r=jQuery.classFilter(r,m[2]);if(m[1]=="#"){var tmp=[];for(var i=0;r[i];i++)if(r[i].getAttribute("id")==m[2]){tmp=[r[i]];break;}r=tmp;}ret=r;}t=t.replace(re2,"");}}if(t){var val=jQuery.filter(t,r);ret=r=val.r;t=jQuery.trim(val.t);}}if(t)ret=[];if(ret&&context==ret[0])ret.shift();done=jQuery.merge(done,ret);return done;},classFilter:function(r,m,not){m=" "+m+" ";var tmp=[];for(var i=0;r[i];i++){var pass=(" "+r[i].className+" ").indexOf(m)>=0;if(!not&&pass||not&&!pass)tmp.push(r[i]);}return tmp;},filter:function(t,r,not){var last;while(t&&t!=last){last=t;var p=jQuery.parse,m;for(var i=0;p[i];i++){m=p[i].exec(t);if(m){t=t.substring(m[0].length);m[2]=m[2].replace(/\\/g,"");break;}}if(!m)break;if(m[1]==":"&&m[2]=="not")r=isSimple.test(m[3])?jQuery.filter(m[3],r,true).r:jQuery(r).not(m[3]);else if(m[1]==".")r=jQuery.classFilter(r,m[2],not);else if(m[1]=="["){var tmp=[],type=m[3];for(var i=0,rl=r.length;i<rl;i++){var a=r[i],z=a[jQuery.props[m[2]]||m[2]];if(z==null||/href|src|selected/.test(m[2]))z=jQuery.attr(a,m[2])||'';if((type==""&&!!z||type=="="&&z==m[5]||type=="!="&&z!=m[5]||type=="^="&&z&&!z.indexOf(m[5])||type=="$="&&z.substr(z.length-m[5].length)==m[5]||(type=="*="||type=="~=")&&z.indexOf(m[5])>=0)^not)tmp.push(a);}r=tmp;}else if(m[1]==":"&&m[2]=="nth-child"){var merge={},tmp=[],test=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(m[3]=="even"&&"2n"||m[3]=="odd"&&"2n+1"||!/\D/.test(m[3])&&"0n+"+m[3]||m[3]),first=(test[1]+(test[2]||1))-0,last=test[3]-0;for(var i=0,rl=r.length;i<rl;i++){var node=r[i],parentNode=node.parentNode,id=jQuery.data(parentNode);if(!merge[id]){var c=1;for(var n=parentNode.firstChild;n;n=n.nextSibling)if(n.nodeType==1)n.nodeIndex=c++;merge[id]=true;}var add=false;if(first==0){if(node.nodeIndex==last)add=true;}else if((node.nodeIndex-last)%first==0&&(node.nodeIndex-last)/first>=0)add=true;if(add^not)tmp.push(node);}r=tmp;}else{var fn=jQuery.expr[m[1]];if(typeof fn=="object")fn=fn[m[2]];if(typeof fn=="string")fn=eval("false||function(a,i){return "+fn+";}");r=jQuery.grep(r,function(elem,i){return fn(elem,i,m,r);},not);}}return{r:r,t:t};},dir:function(elem,dir){var matched=[],cur=elem[dir];while(cur&&cur!=document){if(cur.nodeType==1)matched.push(cur);cur=cur[dir];}return matched;},nth:function(cur,result,dir,elem){result=result||1;var num=0;for(;cur;cur=cur[dir])if(cur.nodeType==1&&++num==result)break;return cur;},sibling:function(n,elem){var r=[];for(;n;n=n.nextSibling){if(n.nodeType==1&&n!=elem)r.push(n);}return r;}});jQuery.event={add:function(elem,types,handler,data){if(elem.nodeType==3||elem.nodeType==8)return;if(jQuery.browser.msie&&elem.setInterval)elem=window;if(!handler.guid)handler.guid=this.guid++;if(data!=undefined){var fn=handler;handler=this.proxy(fn,function(){return fn.apply(this,arguments);});handler.data=data;}var events=jQuery.data(elem,"events")||jQuery.data(elem,"events",{}),handle=jQuery.data(elem,"handle")||jQuery.data(elem,"handle",function(){if(typeof jQuery!="undefined"&&!jQuery.event.triggered)return jQuery.event.handle.apply(arguments.callee.elem,arguments);});handle.elem=elem;jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];handler.type=parts[1];var handlers=events[type];if(!handlers){handlers=events[type]={};if(!jQuery.event.special[type]||jQuery.event.special[type].setup.call(elem)===false){if(elem.addEventListener)elem.addEventListener(type,handle,false);else if(elem.attachEvent)elem.attachEvent("on"+type,handle);}}handlers[handler.guid]=handler;jQuery.event.global[type]=true;});elem=null;},guid:1,global:{},remove:function(elem,types,handler){if(elem.nodeType==3||elem.nodeType==8)return;var events=jQuery.data(elem,"events"),ret,index;if(events){if(types==undefined||(typeof types=="string"&&types.charAt(0)=="."))for(var type in events)this.remove(elem,type+(types||""));else{if(types.type){handler=types.handler;types=types.type;}jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];if(events[type]){if(handler)delete events[type][handler.guid];else
+for(handler in events[type])if(!parts[1]||events[type][handler].type==parts[1])delete events[type][handler];for(ret in events[type])break;if(!ret){if(!jQuery.event.special[type]||jQuery.event.special[type].teardown.call(elem)===false){if(elem.removeEventListener)elem.removeEventListener(type,jQuery.data(elem,"handle"),false);else if(elem.detachEvent)elem.detachEvent("on"+type,jQuery.data(elem,"handle"));}ret=null;delete events[type];}}});}for(ret in events)break;if(!ret){var handle=jQuery.data(elem,"handle");if(handle)handle.elem=null;jQuery.removeData(elem,"events");jQuery.removeData(elem,"handle");}}},trigger:function(type,data,elem,donative,extra){data=jQuery.makeArray(data);if(type.indexOf("!")>=0){type=type.slice(0,-1);var exclusive=true;}if(!elem){if(this.global[type])jQuery("*").add([window,document]).trigger(type,data);}else{if(elem.nodeType==3||elem.nodeType==8)return undefined;var val,ret,fn=jQuery.isFunction(elem[type]||null),event=!data[0]||!data[0].preventDefault;if(event){data.unshift({type:type,target:elem,preventDefault:function(){},stopPropagation:function(){},timeStamp:now()});data[0][expando]=true;}data[0].type=type;if(exclusive)data[0].exclusive=true;var handle=jQuery.data(elem,"handle");if(handle)val=handle.apply(elem,data);if((!fn||(jQuery.nodeName(elem,'a')&&type=="click"))&&elem["on"+type]&&elem["on"+type].apply(elem,data)===false)val=false;if(event)data.shift();if(extra&&jQuery.isFunction(extra)){ret=extra.apply(elem,val==null?data:data.concat(val));if(ret!==undefined)val=ret;}if(fn&&donative!==false&&val!==false&&!(jQuery.nodeName(elem,'a')&&type=="click")){this.triggered=true;try{elem[type]();}catch(e){}}this.triggered=false;}return val;},handle:function(event){var val,ret,namespace,all,handlers;event=arguments[0]=jQuery.event.fix(event||window.event);namespace=event.type.split(".");event.type=namespace[0];namespace=namespace[1];all=!namespace&&!event.exclusive;handlers=(jQuery.data(this,"events")||{})[event.type];for(var j in handlers){var handler=handlers[j];if(all||handler.type==namespace){event.handler=handler;event.data=handler.data;ret=handler.apply(this,arguments);if(val!==false)val=ret;if(ret===false){event.preventDefault();event.stopPropagation();}}}return val;},fix:function(event){if(event[expando]==true)return event;var originalEvent=event;event={originalEvent:originalEvent};var props="altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target timeStamp toElement type view wheelDelta which".split(" ");for(var i=props.length;i;i--)event[props[i]]=originalEvent[props[i]];event[expando]=true;event.preventDefault=function(){if(originalEvent.preventDefault)originalEvent.preventDefault();originalEvent.returnValue=false;};event.stopPropagation=function(){if(originalEvent.stopPropagation)originalEvent.stopPropagation();originalEvent.cancelBubble=true;};event.timeStamp=event.timeStamp||now();if(!event.target)event.target=event.srcElement||document;if(event.target.nodeType==3)event.target=event.target.parentNode;if(!event.relatedTarget&&event.fromElement)event.relatedTarget=event.fromElement==event.target?event.toElement:event.fromElement;if(event.pageX==null&&event.clientX!=null){var doc=document.documentElement,body=document.body;event.pageX=event.clientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc.clientLeft||0);event.pageY=event.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||0)-(doc.clientTop||0);}if(!event.which&&((event.charCode||event.charCode===0)?event.charCode:event.keyCode))event.which=event.charCode||event.keyCode;if(!event.metaKey&&event.ctrlKey)event.metaKey=event.ctrlKey;if(!event.which&&event.button)event.which=(event.button&1?1:(event.button&2?3:(event.button&4?2:0)));return event;},proxy:function(fn,proxy){proxy.guid=fn.guid=fn.guid||proxy.guid||this.guid++;return proxy;},special:{ready:{setup:function(){bindReady();return;},teardown:function(){return;}},mouseenter:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseover",jQuery.event.special.mouseenter.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseover",jQuery.event.special.mouseenter.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseenter";return jQuery.event.handle.apply(this,arguments);}},mouseleave:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseout",jQuery.event.special.mouseleave.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseout",jQuery.event.special.mouseleave.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseleave";return jQuery.event.handle.apply(this,arguments);}}}};jQuery.fn.extend({bind:function(type,data,fn){return type=="unload"?this.one(type,data,fn):this.each(function(){jQuery.event.add(this,type,fn||data,fn&&data);});},one:function(type,data,fn){var one=jQuery.event.proxy(fn||data,function(event){jQuery(this).unbind(event,one);return(fn||data).apply(this,arguments);});return this.each(function(){jQuery.event.add(this,type,one,fn&&data);});},unbind:function(type,fn){return this.each(function(){jQuery.event.remove(this,type,fn);});},trigger:function(type,data,fn){return this.each(function(){jQuery.event.trigger(type,data,this,true,fn);});},triggerHandler:function(type,data,fn){return this[0]&&jQuery.event.trigger(type,data,this[0],false,fn);},toggle:function(fn){var args=arguments,i=1;while(i<args.length)jQuery.event.proxy(fn,args[i++]);return this.click(jQuery.event.proxy(fn,function(event){this.lastToggle=(this.lastToggle||0)%i;event.preventDefault();return args[this.lastToggle++].apply(this,arguments)||false;}));},hover:function(fnOver,fnOut){return this.bind('mouseenter',fnOver).bind('mouseleave',fnOut);},ready:function(fn){bindReady();if(jQuery.isReady)fn.call(document,jQuery);else
+jQuery.readyList.push(function(){return fn.call(this,jQuery);});return this;}});jQuery.extend({isReady:false,readyList:[],ready:function(){if(!jQuery.isReady){jQuery.isReady=true;if(jQuery.readyList){jQuery.each(jQuery.readyList,function(){this.call(document);});jQuery.readyList=null;}jQuery(document).triggerHandler("ready");}}});var readyBound=false;function bindReady(){if(readyBound)return;readyBound=true;if(document.addEventListener&&!jQuery.browser.opera)document.addEventListener("DOMContentLoaded",jQuery.ready,false);if(jQuery.browser.msie&&window==top)(function(){if(jQuery.isReady)return;try{document.documentElement.doScroll("left");}catch(error){setTimeout(arguments.callee,0);return;}jQuery.ready();})();if(jQuery.browser.opera)document.addEventListener("DOMContentLoaded",function(){if(jQuery.isReady)return;for(var i=0;i<document.styleSheets.length;i++)if(document.styleSheets[i].disabled){setTimeout(arguments.callee,0);return;}jQuery.ready();},false);if(jQuery.browser.safari){var numStyles;(function(){if(jQuery.isReady)return;if(document.readyState!="loaded"&&document.readyState!="complete"){setTimeout(arguments.callee,0);return;}if(numStyles===undefined)numStyles=jQuery("style, link[rel=stylesheet]").length;if(document.styleSheets.length!=numStyles){setTimeout(arguments.callee,0);return;}jQuery.ready();})();}jQuery.event.add(window,"load",jQuery.ready);}jQuery.each(("blur,focus,load,resize,scroll,unload,click,dblclick,"+"mousedown,mouseup,mousemove,mouseover,mouseout,change,select,"+"submit,keydown,keypress,keyup,error").split(","),function(i,name){jQuery.fn[name]=function(fn){return fn?this.bind(name,fn):this.trigger(name);};});var withinElement=function(event,elem){var parent=event.relatedTarget;while(parent&&parent!=elem)try{parent=parent.parentNode;}catch(error){parent=elem;}return parent==elem;};jQuery(window).bind("unload",function(){jQuery("*").add(document).unbind();});jQuery.fn.extend({_load:jQuery.fn.load,load:function(url,params,callback){if(typeof url!='string')return this._load(url);var off=url.indexOf(" ");if(off>=0){var selector=url.slice(off,url.length);url=url.slice(0,off);}callback=callback||function(){};var type="GET";if(params)if(jQuery.isFunction(params)){callback=params;params=null;}else{params=jQuery.param(params);type="POST";}var self=this;jQuery.ajax({url:url,type:type,dataType:"html",data:params,complete:function(res,status){if(status=="success"||status=="notmodified")self.html(selector?jQuery("<div/>").append(res.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(selector):res.responseText);self.each(callback,[res.responseText,status,res]);}});return this;},serialize:function(){return jQuery.param(this.serializeArray());},serializeArray:function(){return this.map(function(){return jQuery.nodeName(this,"form")?jQuery.makeArray(this.elements):this;}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type));}).map(function(i,elem){var val=jQuery(this).val();return val==null?null:val.constructor==Array?jQuery.map(val,function(val,i){return{name:elem.name,value:val};}):{name:elem.name,value:val};}).get();}});jQuery.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(i,o){jQuery.fn[o]=function(f){return this.bind(o,f);};});var jsc=now();jQuery.extend({get:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data=null;}return jQuery.ajax({type:"GET",url:url,data:data,success:callback,dataType:type});},getScript:function(url,callback){return jQuery.get(url,null,callback,"script");},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json");},post:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data={};}return jQuery.ajax({type:"POST",url:url,data:data,success:callback,dataType:type});},ajaxSetup:function(settings){jQuery.extend(jQuery.ajaxSettings,settings);},ajaxSettings:{url:location.href,global:true,type:"GET",timeout:0,contentType:"application/x-www-form-urlencoded",processData:true,async:true,data:null,username:null,password:null,accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(s){s=jQuery.extend(true,s,jQuery.extend(true,{},jQuery.ajaxSettings,s));var jsonp,jsre=/=\?(&|$)/g,status,data,type=s.type.toUpperCase();if(s.data&&s.processData&&typeof s.data!="string")s.data=jQuery.param(s.data);if(s.dataType=="jsonp"){if(type=="GET"){if(!s.url.match(jsre))s.url+=(s.url.match(/\?/)?"&":"?")+(s.jsonp||"callback")+"=?";}else if(!s.data||!s.data.match(jsre))s.data=(s.data?s.data+"&":"")+(s.jsonp||"callback")+"=?";s.dataType="json";}if(s.dataType=="json"&&(s.data&&s.data.match(jsre)||s.url.match(jsre))){jsonp="jsonp"+jsc++;if(s.data)s.data=(s.data+"").replace(jsre,"="+jsonp+"$1");s.url=s.url.replace(jsre,"="+jsonp+"$1");s.dataType="script";window[jsonp]=function(tmp){data=tmp;success();complete();window[jsonp]=undefined;try{delete window[jsonp];}catch(e){}if(head)head.removeChild(script);};}if(s.dataType=="script"&&s.cache==null)s.cache=false;if(s.cache===false&&type=="GET"){var ts=now();var ret=s.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+ts+"$2");s.url=ret+((ret==s.url)?(s.url.match(/\?/)?"&":"?")+"_="+ts:"");}if(s.data&&type=="GET"){s.url+=(s.url.match(/\?/)?"&":"?")+s.data;s.data=null;}if(s.global&&!jQuery.active++)jQuery.event.trigger("ajaxStart");var remote=/^(?:\w+:)?\/\/([^\/?#]+)/;if(s.dataType=="script"&&type=="GET"&&remote.test(s.url)&&remote.exec(s.url)[1]!=location.host){var head=document.getElementsByTagName("head")[0];var script=document.createElement("script");script.src=s.url;if(s.scriptCharset)script.charset=s.scriptCharset;if(!jsonp){var done=false;script.onload=script.onreadystatechange=function(){if(!done&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){done=true;success();complete();head.removeChild(script);}};}head.appendChild(script);return undefined;}var requestDone=false;var xhr=window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest();if(s.username)xhr.open(type,s.url,s.async,s.username,s.password);else
+xhr.open(type,s.url,s.async);try{if(s.data)xhr.setRequestHeader("Content-Type",s.contentType);if(s.ifModified)xhr.setRequestHeader("If-Modified-Since",jQuery.lastModified[s.url]||"Thu, 01 Jan 1970 00:00:00 GMT");xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");xhr.setRequestHeader("Accept",s.dataType&&s.accepts[s.dataType]?s.accepts[s.dataType]+", */*":s.accepts._default);}catch(e){}if(s.beforeSend&&s.beforeSend(xhr,s)===false){s.global&&jQuery.active--;xhr.abort();return false;}if(s.global)jQuery.event.trigger("ajaxSend",[xhr,s]);var onreadystatechange=function(isTimeout){if(!requestDone&&xhr&&(xhr.readyState==4||isTimeout=="timeout")){requestDone=true;if(ival){clearInterval(ival);ival=null;}status=isTimeout=="timeout"&&"timeout"||!jQuery.httpSuccess(xhr)&&"error"||s.ifModified&&jQuery.httpNotModified(xhr,s.url)&&"notmodified"||"success";if(status=="success"){try{data=jQuery.httpData(xhr,s.dataType,s.dataFilter);}catch(e){status="parsererror";}}if(status=="success"){var modRes;try{modRes=xhr.getResponseHeader("Last-Modified");}catch(e){}if(s.ifModified&&modRes)jQuery.lastModified[s.url]=modRes;if(!jsonp)success();}else
+jQuery.handleError(s,xhr,status);complete();if(s.async)xhr=null;}};if(s.async){var ival=setInterval(onreadystatechange,13);if(s.timeout>0)setTimeout(function(){if(xhr){xhr.abort();if(!requestDone)onreadystatechange("timeout");}},s.timeout);}try{xhr.send(s.data);}catch(e){jQuery.handleError(s,xhr,null,e);}if(!s.async)onreadystatechange();function success(){if(s.success)s.success(data,status);if(s.global)jQuery.event.trigger("ajaxSuccess",[xhr,s]);}function complete(){if(s.complete)s.complete(xhr,status);if(s.global)jQuery.event.trigger("ajaxComplete",[xhr,s]);if(s.global&&!--jQuery.active)jQuery.event.trigger("ajaxStop");}return xhr;},handleError:function(s,xhr,status,e){if(s.error)s.error(xhr,status,e);if(s.global)jQuery.event.trigger("ajaxError",[xhr,s,e]);},active:0,httpSuccess:function(xhr){try{return!xhr.status&&location.protocol=="file:"||(xhr.status>=200&&xhr.status<300)||xhr.status==304||xhr.status==1223||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpNotModified:function(xhr,url){try{var xhrRes=xhr.getResponseHeader("Last-Modified");return xhr.status==304||xhrRes==jQuery.lastModified[url]||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpData:function(xhr,type,filter){var ct=xhr.getResponseHeader("content-type"),xml=type=="xml"||!type&&ct&&ct.indexOf("xml")>=0,data=xml?xhr.responseXML:xhr.responseText;if(xml&&data.documentElement.tagName=="parsererror")throw"parsererror";if(filter)data=filter(data,type);if(type=="script")jQuery.globalEval(data);if(type=="json")data=eval("("+data+")");return data;},param:function(a){var s=[];if(a.constructor==Array||a.jquery)jQuery.each(a,function(){s.push(encodeURIComponent(this.name)+"="+encodeURIComponent(this.value));});else
+for(var j in a)if(a[j]&&a[j].constructor==Array)jQuery.each(a[j],function(){s.push(encodeURIComponent(j)+"="+encodeURIComponent(this));});else
+s.push(encodeURIComponent(j)+"="+encodeURIComponent(jQuery.isFunction(a[j])?a[j]():a[j]));return s.join("&").replace(/%20/g,"+");}});jQuery.fn.extend({show:function(speed,callback){return speed?this.animate({height:"show",width:"show",opacity:"show"},speed,callback):this.filter(":hidden").each(function(){this.style.display=this.oldblock||"";if(jQuery.css(this,"display")=="none"){var elem=jQuery("<"+this.tagName+" />").appendTo("body");this.style.display=elem.css("display");if(this.style.display=="none")this.style.display="block";elem.remove();}}).end();},hide:function(speed,callback){return speed?this.animate({height:"hide",width:"hide",opacity:"hide"},speed,callback):this.filter(":visible").each(function(){this.oldblock=this.oldblock||jQuery.css(this,"display");this.style.display="none";}).end();},_toggle:jQuery.fn.toggle,toggle:function(fn,fn2){return jQuery.isFunction(fn)&&jQuery.isFunction(fn2)?this._toggle.apply(this,arguments):fn?this.animate({height:"toggle",width:"toggle",opacity:"toggle"},fn,fn2):this.each(function(){jQuery(this)[jQuery(this).is(":hidden")?"show":"hide"]();});},slideDown:function(speed,callback){return this.animate({height:"show"},speed,callback);},slideUp:function(speed,callback){return this.animate({height:"hide"},speed,callback);},slideToggle:function(speed,callback){return this.animate({height:"toggle"},speed,callback);},fadeIn:function(speed,callback){return this.animate({opacity:"show"},speed,callback);},fadeOut:function(speed,callback){return this.animate({opacity:"hide"},speed,callback);},fadeTo:function(speed,to,callback){return this.animate({opacity:to},speed,callback);},animate:function(prop,speed,easing,callback){var optall=jQuery.speed(speed,easing,callback);return this[optall.queue===false?"each":"queue"](function(){if(this.nodeType!=1)return false;var opt=jQuery.extend({},optall),p,hidden=jQuery(this).is(":hidden"),self=this;for(p in prop){if(prop[p]=="hide"&&hidden||prop[p]=="show"&&!hidden)return opt.complete.call(this);if(p=="height"||p=="width"){opt.display=jQuery.css(this,"display");opt.overflow=this.style.overflow;}}if(opt.overflow!=null)this.style.overflow="hidden";opt.curAnim=jQuery.extend({},prop);jQuery.each(prop,function(name,val){var e=new jQuery.fx(self,opt,name);if(/toggle|show|hide/.test(val))e[val=="toggle"?hidden?"show":"hide":val](prop);else{var parts=val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),start=e.cur(true)||0;if(parts){var end=parseFloat(parts[2]),unit=parts[3]||"px";if(unit!="px"){self.style[name]=(end||1)+unit;start=((end||1)/e.cur(true))*start;self.style[name]=start+unit;}if(parts[1])end=((parts[1]=="-="?-1:1)*end)+start;e.custom(start,end,unit);}else
+e.custom(start,val,"");}});return true;});},queue:function(type,fn){if(jQuery.isFunction(type)||(type&&type.constructor==Array)){fn=type;type="fx";}if(!type||(typeof type=="string"&&!fn))return queue(this[0],type);return this.each(function(){if(fn.constructor==Array)queue(this,type,fn);else{queue(this,type).push(fn);if(queue(this,type).length==1)fn.call(this);}});},stop:function(clearQueue,gotoEnd){var timers=jQuery.timers;if(clearQueue)this.queue([]);this.each(function(){for(var i=timers.length-1;i>=0;i--)if(timers[i].elem==this){if(gotoEnd)timers[i](true);timers.splice(i,1);}});if(!gotoEnd)this.dequeue();return this;}});var queue=function(elem,type,array){if(elem){type=type||"fx";var q=jQuery.data(elem,type+"queue");if(!q||array)q=jQuery.data(elem,type+"queue",jQuery.makeArray(array));}return q;};jQuery.fn.dequeue=function(type){type=type||"fx";return this.each(function(){var q=queue(this,type);q.shift();if(q.length)q[0].call(this);});};jQuery.extend({speed:function(speed,easing,fn){var opt=speed&&speed.constructor==Object?speed:{complete:fn||!fn&&easing||jQuery.isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&easing.constructor!=Function&&easing};opt.duration=(opt.duration&&opt.duration.constructor==Number?opt.duration:jQuery.fx.speeds[opt.duration])||jQuery.fx.speeds.def;opt.old=opt.complete;opt.complete=function(){if(opt.queue!==false)jQuery(this).dequeue();if(jQuery.isFunction(opt.old))opt.old.call(this);};return opt;},easing:{linear:function(p,n,firstNum,diff){return firstNum+diff*p;},swing:function(p,n,firstNum,diff){return((-Math.cos(p*Math.PI)/2)+0.5)*diff+firstNum;}},timers:[],timerId:null,fx:function(elem,options,prop){this.options=options;this.elem=elem;this.prop=prop;if(!options.orig)options.orig={};}});jQuery.fx.prototype={update:function(){if(this.options.step)this.options.step.call(this.elem,this.now,this);(jQuery.fx.step[this.prop]||jQuery.fx.step._default)(this);if(this.prop=="height"||this.prop=="width")this.elem.style.display="block";},cur:function(force){if(this.elem[this.prop]!=null&&this.elem.style[this.prop]==null)return this.elem[this.prop];var r=parseFloat(jQuery.css(this.elem,this.prop,force));return r&&r>-10000?r:parseFloat(jQuery.curCSS(this.elem,this.prop))||0;},custom:function(from,to,unit){this.startTime=now();this.start=from;this.end=to;this.unit=unit||this.unit||"px";this.now=this.start;this.pos=this.state=0;this.update();var self=this;function t(gotoEnd){return self.step(gotoEnd);}t.elem=this.elem;jQuery.timers.push(t);if(jQuery.timerId==null){jQuery.timerId=setInterval(function(){var timers=jQuery.timers;for(var i=0;i<timers.length;i++)if(!timers[i]())timers.splice(i--,1);if(!timers.length){clearInterval(jQuery.timerId);jQuery.timerId=null;}},13);}},show:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.show=true;this.custom(0,this.cur());if(this.prop=="width"||this.prop=="height")this.elem.style[this.prop]="1px";jQuery(this.elem).show();},hide:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0);},step:function(gotoEnd){var t=now();if(gotoEnd||t>this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var done=true;for(var i in this.options.curAnim)if(this.options.curAnim[i]!==true)done=false;if(done){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(jQuery.css(this.elem,"display")=="none")this.elem.style.display="block";}if(this.options.hide)this.elem.style.display="none";if(this.options.hide||this.options.show)for(var p in this.options.curAnim)jQuery.attr(this.elem.style,p,this.options.orig[p]);}if(done)this.options.complete.call(this.elem);return false;}else{var n=t-this.startTime;this.state=n/this.options.duration;this.pos=jQuery.easing[this.options.easing||(jQuery.easing.swing?"swing":"linear")](this.state,n,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update();}return true;}};jQuery.extend(jQuery.fx,{speeds:{slow:600,fast:200,def:400},step:{scrollLeft:function(fx){fx.elem.scrollLeft=fx.now;},scrollTop:function(fx){fx.elem.scrollTop=fx.now;},opacity:function(fx){jQuery.attr(fx.elem.style,"opacity",fx.now);},_default:function(fx){fx.elem.style[fx.prop]=fx.now+fx.unit;}}});jQuery.fn.offset=function(){var left=0,top=0,elem=this[0],results;if(elem)with(jQuery.browser){var parent=elem.parentNode,offsetChild=elem,offsetParent=elem.offsetParent,doc=elem.ownerDocument,safari2=safari&&parseInt(version)<522&&!/adobeair/i.test(userAgent),css=jQuery.curCSS,fixed=css(elem,"position")=="fixed";if(elem.getBoundingClientRect){var box=elem.getBoundingClientRect();add(box.left+Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),box.top+Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));add(-doc.documentElement.clientLeft,-doc.documentElement.clientTop);}else{add(elem.offsetLeft,elem.offsetTop);while(offsetParent){add(offsetParent.offsetLeft,offsetParent.offsetTop);if(mozilla&&!/^t(able|d|h)$/i.test(offsetParent.tagName)||safari&&!safari2)border(offsetParent);if(!fixed&&css(offsetParent,"position")=="fixed")fixed=true;offsetChild=/^body$/i.test(offsetParent.tagName)?offsetChild:offsetParent;offsetParent=offsetParent.offsetParent;}while(parent&&parent.tagName&&!/^body|html$/i.test(parent.tagName)){if(!/^inline|table.*$/i.test(css(parent,"display")))add(-parent.scrollLeft,-parent.scrollTop);if(mozilla&&css(parent,"overflow")!="visible")border(parent);parent=parent.parentNode;}if((safari2&&(fixed||css(offsetChild,"position")=="absolute"))||(mozilla&&css(offsetChild,"position")!="absolute"))add(-doc.body.offsetLeft,-doc.body.offsetTop);if(fixed)add(Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));}results={top:top,left:left};}function border(elem){add(jQuery.curCSS(elem,"borderLeftWidth",true),jQuery.curCSS(elem,"borderTopWidth",true));}function add(l,t){left+=parseInt(l,10)||0;top+=parseInt(t,10)||0;}return results;};jQuery.fn.extend({position:function(){var left=0,top=0,results;if(this[0]){var offsetParent=this.offsetParent(),offset=this.offset(),parentOffset=/^body|html$/i.test(offsetParent[0].tagName)?{top:0,left:0}:offsetParent.offset();offset.top-=num(this,'marginTop');offset.left-=num(this,'marginLeft');parentOffset.top+=num(offsetParent,'borderTopWidth');parentOffset.left+=num(offsetParent,'borderLeftWidth');results={top:offset.top-parentOffset.top,left:offset.left-parentOffset.left};}return results;},offsetParent:function(){var offsetParent=this[0].offsetParent;while(offsetParent&&(!/^body|html$/i.test(offsetParent.tagName)&&jQuery.css(offsetParent,'position')=='static'))offsetParent=offsetParent.offsetParent;return jQuery(offsetParent);}});jQuery.each(['Left','Top'],function(i,name){var method='scroll'+name;jQuery.fn[method]=function(val){if(!this[0])return;return val!=undefined?this.each(function(){this==window||this==document?window.scrollTo(!i?val:jQuery(window).scrollLeft(),i?val:jQuery(window).scrollTop()):this[method]=val;}):this[0]==window||this[0]==document?self[i?'pageYOffset':'pageXOffset']||jQuery.boxModel&&document.documentElement[method]||document.body[method]:this[0][method];};});jQuery.each(["Height","Width"],function(i,name){var tl=i?"Left":"Top",br=i?"Right":"Bottom";jQuery.fn["inner"+name]=function(){return this[name.toLowerCase()]()+num(this,"padding"+tl)+num(this,"padding"+br);};jQuery.fn["outer"+name]=function(margin){return this["inner"+name]()+num(this,"border"+tl+"Width")+num(this,"border"+br+"Width")+(margin?num(this,"margin"+tl)+num(this,"margin"+br):0);};});})();
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/preview/script/jquery-ui/js/jquery-ui-1.6.custom.min.js	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,78 @@
+/*
+ * jQuery UI 1.6
+ *
+ * Copyright (c) 2008 AUTHORS.txt (http://ui.jquery.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI
+ */
(function(C){var I=C.fn.remove,D=C.browser.mozilla&&(parseFloat(C.browser.version)<1.9);C.ui={version:"1.6",plugin:{add:function(K,L,N){var M=C.ui[K].prototype;for(var J in N){M.plugins[J]=M.plugins[J]||[];M.plugins[J].push([L,N[J]])}},call:function(J,L,K){var N=J.plugins[L];if(!N){return }for(var M=0;M<N.length;M++){if(J.options[N[M][0]]){N[M][1].apply(J.element,K)}}}},contains:function(L,K){var J=C.browser.safari&&C.browser.version<522;if(L.contains&&!J){return L.contains(K)}if(L.compareDocumentPosition){return !!(L.compareDocumentPosition(K)&16)}while(K=K.parentNode){if(K==L){return true}}return false},cssCache:{},css:function(J){if(C.ui.cssCache[J]){return C.ui.cssCache[J]}var K=C('<div class="ui-gen">').addClass(J).css({position:"absolute",top:"-5000px",left:"-5000px",display:"block"}).appendTo("body");C.ui.cssCache[J]=!!((!(/auto|default/).test(K.css("cursor"))||(/^[1-9]/).test(K.css("height"))||(/^[1-9]/).test(K.css("width"))||!(/none/).test(K.css("backgroundImage"))||!(/transparent|rgba\(0, 0, 0, 0\)/).test(K.css("backgroundColor"))));try{C("body").get(0).removeChild(K.get(0))}catch(L){}return C.ui.cssCache[J]},hasScroll:function(M,K){if(C(M).css("overflow")=="hidden"){return false}var J=(K&&K=="left")?"scrollLeft":"scrollTop",L=false;if(M[J]>0){return true}M[J]=1;L=(M[J]>0);M[J]=0;return L},isOverAxis:function(K,J,L){return(K>J)&&(K<(J+L))},isOver:function(O,K,N,M,J,L){return C.ui.isOverAxis(O,N,J)&&C.ui.isOverAxis(K,M,L)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};if(D){var F=C.attr,E=C.fn.removeAttr,H="http://www.w3.org/2005/07/aaa",A=/^aria-/,B=/^wairole:/;C.attr=function(K,J,L){var M=L!==undefined;return(J=="role"?(M?F.call(this,K,J,"wairole:"+L):(F.apply(this,arguments)||"").replace(B,"")):(A.test(J)?(M?K.setAttributeNS(H,J.replace(A,"aaa:"),L):F.call(this,K,J.replace(A,"aaa:"))):F.apply(this,arguments)))};C.fn.removeAttr=function(J){return(A.test(J)?this.each(function(){this.removeAttributeNS(H,J.replace(A,""))}):E.call(this,J))}}C.fn.extend({remove:function(){C("*",this).add(this).each(function(){C(this).triggerHandler("remove")});return I.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","").unbind("selectstart.ui")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})},scrollParent:function(){var J;if((C.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){J=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(C.curCSS(this,"position",1))&&(/(auto|scroll)/).test(C.curCSS(this,"overflow",1)+C.curCSS(this,"overflow-y",1)+C.curCSS(this,"overflow-x",1))}).eq(0)}else{J=this.parents().filter(function(){return(/(auto|scroll)/).test(C.curCSS(this,"overflow",1)+C.curCSS(this,"overflow-y",1)+C.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!J.length?C(document):J}});C.extend(C.expr[":"],{data:function(K,L,J){return C.data(K,J[3])},tabbable:function(L,M,K){var N=L.nodeName.toLowerCase();function J(O){return !(C(O).is(":hidden")||C(O).parents(":hidden").length)}return(L.tabIndex>=0&&(("a"==N&&L.href)||(/input|select|textarea|button/.test(N)&&"hidden"!=L.type&&!L.disabled))&&J(L))}});function G(M,N,O,L){function K(Q){var P=C[M][N][Q]||[];return(typeof P=="string"?P.split(/,?\s+/):P)}var J=K("getter");if(L.length==1&&typeof L[0]=="string"){J=J.concat(K("getterSetter"))}return(C.inArray(O,J)!=-1)}C.widget=function(K,J){var L=K.split(".")[0];K=K.split(".")[1];C.fn[K]=function(P){var N=(typeof P=="string"),O=Array.prototype.slice.call(arguments,1);if(N&&P.substring(0,1)=="_"){return this}if(N&&G(L,K,P,O)){var M=C.data(this[0],K);return(M?M[P].apply(M,O):undefined)}return this.each(function(){var Q=C.data(this,K);(!Q&&!N&&C.data(this,K,new C[L][K](this,P)));(Q&&N&&C.isFunction(Q[P])&&Q[P].apply(Q,O))})};C[L]=C[L]||{};C[L][K]=function(O,N){var M=this;this.widgetName=K;this.widgetEventPrefix=C[L][K].eventPrefix||K;this.widgetBaseClass=L+"-"+K;this.options=C.extend({},C.widget.defaults,C[L][K].defaults,C.metadata&&C.metadata.get(O)[K],N);this.element=C(O).bind("setData."+K,function(Q,P,R){return M._setData(P,R)}).bind("getData."+K,function(Q,P){return M._getData(P)}).bind("remove",function(){return M.destroy()});this._init()};C[L][K].prototype=C.extend({},C.widget.prototype,J);C[L][K].getterSetter="option"};C.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName)},option:function(L,M){var K=L,J=this;if(typeof L=="string"){if(M===undefined){return this._getData(L)}K={};K[L]=M}C.each(K,function(N,O){J._setData(N,O)})},_getData:function(J){return this.options[J]},_setData:function(J,K){this.options[J]=K;if(J=="disabled"){this.element[K?"addClass":"removeClass"](this.widgetBaseClass+"-disabled")}},enable:function(){this._setData("disabled",false)},disable:function(){this._setData("disabled",true)},_trigger:function(K,L,M){var J=(K==this.widgetEventPrefix?K:this.widgetEventPrefix+K);L=L||C.event.fix({type:J,target:this.element[0]});return this.element.triggerHandler(J,[L,M],this.options[K])}};C.widget.defaults={disabled:false};C.ui.mouse={_mouseInit:function(){var J=this;this.element.bind("mousedown."+this.widgetName,function(K){return J._mouseDown(K)}).bind("click."+this.widgetName,function(K){if(J._preventClickEvent){J._preventClickEvent=false;return false}});if(C.browser.msie){this._mouseUnselectable=this.element.attr("unselectable");this.element.attr("unselectable","on")}this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName);(C.browser.msie&&this.element.attr("unselectable",this._mouseUnselectable))},_mouseDown:function(L){(this._mouseStarted&&this._mouseUp(L));this._mouseDownEvent=L;var K=this,M=(L.which==1),J=(typeof this.options.cancel=="string"?C(L.target).parents().add(L.target).filter(this.options.cancel).length:false);if(!M||J||!this._mouseCapture(L)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){K.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(L)&&this._mouseDelayMet(L)){this._mouseStarted=(this._mouseStart(L)!==false);if(!this._mouseStarted){L.preventDefault();return true}}this._mouseMoveDelegate=function(N){return K._mouseMove(N)};this._mouseUpDelegate=function(N){return K._mouseUp(N)};C(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);if(!C.browser.safari){L.preventDefault()}return true},_mouseMove:function(J){if(C.browser.msie&&!J.button){return this._mouseUp(J)}if(this._mouseStarted){this._mouseDrag(J);return J.preventDefault()}if(this._mouseDistanceMet(J)&&this._mouseDelayMet(J)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,J)!==false);(this._mouseStarted?this._mouseDrag(J):this._mouseUp(J))}return !this._mouseStarted},_mouseUp:function(J){C(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=true;this._mouseStop(J)}return false},_mouseDistanceMet:function(J){return(Math.max(Math.abs(this._mouseDownEvent.pageX-J.pageX),Math.abs(this._mouseDownEvent.pageY-J.pageY))>=this.options.distance)},_mouseDelayMet:function(J){return this.mouseDelayMet},_mouseStart:function(J){},_mouseDrag:function(J){},_mouseStop:function(J){},_mouseCapture:function(J){return true}};C.ui.mouse.defaults={cancel:null,distance:1,delay:0}})(jQuery);/*
+ * jQuery UI Draggable 1.6
+ *
+ * Copyright (c) 2008 AUTHORS.txt (http://ui.jquery.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Draggables
+ *
+ * Depends:
+ *	ui.core.js
+ */
(function(A){A.widget("ui.draggable",A.extend({},A.ui.mouse,{_init:function(){if(this.options.helper=="original"&&!(/^(?:r|a|f)/).test(this.element.css("position"))){this.element[0].style.position="relative"}(this.options.cssNamespace&&this.element.addClass(this.options.cssNamespace+"-draggable"));(this.options.disabled&&this.element.addClass("ui-draggable-disabled"));this._mouseInit()},destroy:function(){if(!this.element.data("draggable")){return }this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy()},_mouseCapture:function(B){var C=this.options;if(this.helper||C.disabled||A(B.target).is(".ui-resizable-handle")){return false}this.handle=this._getHandle(B);if(!this.handle){return false}return true},_mouseStart:function(B){var C=this.options;this.helper=this._createHelper(B);this._cacheHelperProportions();if(A.ui.ddmanager){A.ui.ddmanager.current=this}this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};A.extend(this.offset,{click:{left:B.pageX-this.offset.left,top:B.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});if(C.cursorAt){this._adjustOffsetFromHelper(C.cursorAt)}this.originalPosition=this._generatePosition(B);if(C.containment){this._setContainment()}this._propagate("start",B);this._cacheHelperProportions();if(A.ui.ddmanager&&!C.dropBehaviour){A.ui.ddmanager.prepareOffsets(this,B)}this.helper.addClass("ui-draggable-dragging");this._mouseDrag(B,true);return true},_mouseDrag:function(B,C){this.position=this._generatePosition(B);this.positionAbs=this._convertPositionTo("absolute");if(!C){this.position=this._propagate("drag",B)||this.position}if(!this.options.axis||this.options.axis!="y"){this.helper[0].style.left=this.position.left+"px"}if(!this.options.axis||this.options.axis!="x"){this.helper[0].style.top=this.position.top+"px"}if(A.ui.ddmanager){A.ui.ddmanager.drag(this,B)}return false},_mouseStop:function(C){var D=false;if(A.ui.ddmanager&&!this.options.dropBehaviour){var D=A.ui.ddmanager.drop(this,C)}if((this.options.revert=="invalid"&&!D)||(this.options.revert=="valid"&&D)||this.options.revert===true||(A.isFunction(this.options.revert)&&this.options.revert.call(this.element,D))){var B=this;A(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){B._propagate("stop",C);B._clear()})}else{this._propagate("stop",C);this._clear()}return false},_getHandle:function(B){var C=!this.options.handle||!A(this.options.handle,this.element).length?true:false;A(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==B.target){C=true}});return C},_createHelper:function(C){var D=this.options;var B=A.isFunction(D.helper)?A(D.helper.apply(this.element[0],[C])):(D.helper=="clone"?this.element.clone():this.element);if(!B.parents("body").length){B.appendTo((D.appendTo=="parent"?this.element[0].parentNode:D.appendTo))}if(B[0]!=this.element[0]&&!(/(fixed|absolute)/).test(B.css("position"))){B.css("position","absolute")}return B},_adjustOffsetFromHelper:function(B){if(B.left!=undefined){this.offset.click.left=B.left+this.margins.left}if(B.right!=undefined){this.offset.click.left=this.helperProportions.width-B.right+this.margins.left}if(B.top!=undefined){this.offset.click.top=B.top+this.margins.top}if(B.bottom!=undefined){this.offset.click.top=this.helperProportions.height-B.bottom+this.margins.top}},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var B=this.offsetParent.offset();if((this.offsetParent[0]==document.body&&A.browser.mozilla)||(this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&A.browser.msie)){B={top:0,left:0}}return{top:B.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:B.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var B=this.element.position();return{top:B.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:B.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else{return{top:0,left:0}}},_cacheMargins:function(){this.margins={left:(parseInt(this.element.css("marginLeft"),10)||0),top:(parseInt(this.element.css("marginTop"),10)||0)}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var E=this.options;if(E.containment=="parent"){E.containment=this.helper[0].parentNode}if(E.containment=="document"||E.containment=="window"){this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,A(E.containment=="document"?document:window).width()-this.offset.relative.left-this.offset.parent.left-this.helperProportions.width-this.margins.left-(parseInt(this.element.css("marginRight"),10)||0),(A(E.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.offset.relative.top-this.offset.parent.top-this.helperProportions.height-this.margins.top-(parseInt(this.element.css("marginBottom"),10)||0)]}if(!(/^(document|window|parent)$/).test(E.containment)){var C=A(E.containment)[0];var D=A(E.containment).offset();var B=(A(C).css("overflow")!="hidden");this.containment=[D.left+(parseInt(A(C).css("borderLeftWidth"),10)||0)-this.offset.relative.left-this.offset.parent.left-this.margins.left,D.top+(parseInt(A(C).css("borderTopWidth"),10)||0)-this.offset.relative.top-this.offset.parent.top-this.margins.top,D.left+(B?Math.max(C.scrollWidth,C.offsetWidth):C.offsetWidth)-(parseInt(A(C).css("borderLeftWidth"),10)||0)-this.offset.relative.left-this.offset.parent.left-this.helperProportions.width-this.margins.left,D.top+(B?Math.max(C.scrollHeight,C.offsetHeight):C.offsetHeight)-(parseInt(A(C).css("borderTopWidth"),10)||0)-this.offset.relative.top-this.offset.parent.top-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(D,F){if(!F){F=this.position}var C=D=="absolute"?1:-1;var B=this[(this.cssPosition=="absolute"?"offset":"scroll")+"Parent"],E=(/(html|body)/i).test(B[0].tagName);return{top:(F.top+this.offset.relative.top*C+this.offset.parent.top*C+(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(E?0:B.scrollTop()))*C+this.margins.top*C),left:(F.left+this.offset.relative.left*C+this.offset.parent.left*C+(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():(E?0:B.scrollLeft()))*C+this.margins.left*C)}},_generatePosition:function(D){var G=this.options,C=this[(this.cssPosition=="absolute"?"offset":"scroll")+"Parent"],H=(/(html|body)/i).test(C[0].tagName);var B={top:(D.pageY-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(H?0:C.scrollTop()))),left:(D.pageX-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():H?0:C.scrollLeft()))};if(!this.originalPosition){return B}if(this.containment){if(B.left<this.containment[0]){B.left=this.containment[0]}if(B.top<this.containment[1]){B.top=this.containment[1]}if(B.left>this.containment[2]){B.left=this.containment[2]}if(B.top>this.containment[3]){B.top=this.containment[3]}}if(G.grid){var F=this.originalPosition.top+Math.round((B.top-this.originalPosition.top)/G.grid[1])*G.grid[1];B.top=this.containment?(!(F<this.containment[1]||F>this.containment[3])?F:(!(F<this.containment[1])?F-G.grid[1]:F+G.grid[1])):F;var E=this.originalPosition.left+Math.round((B.left-this.originalPosition.left)/G.grid[0])*G.grid[0];B.left=this.containment?(!(E<this.containment[0]||E>this.containment[2])?E:(!(E<this.containment[0])?E-G.grid[0]:E+G.grid[0])):E}return B},_clear:function(){this.helper.removeClass("ui-draggable-dragging");if(this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval){this.helper.remove()}this.helper=null;this.cancelHelperRemoval=false},_propagate:function(C,B){A.ui.plugin.call(this,C,[B,this._uiHash()]);if(C=="drag"){this.positionAbs=this._convertPositionTo("absolute")}return this.element.triggerHandler(C=="drag"?C:"drag"+C,[B,this._uiHash()],this.options[C])},plugins:{},_uiHash:function(B){return{helper:this.helper,position:this.position,absolutePosition:this.positionAbs,options:this.options}}}));A.extend(A.ui.draggable,{version:"1.6",defaults:{appendTo:"parent",axis:false,cancel:":input",connectToSortable:false,containment:false,cssNamespace:"ui",cursor:"default",cursorAt:null,delay:0,distance:1,grid:false,handle:false,helper:"original",iframeFix:false,opacity:1,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:null}});A.ui.plugin.add("draggable","connectToSortable",{start:function(B,D){var C=A(this).data("draggable");C.sortables=[];A(D.options.connectToSortable).each(function(){A(this+"").each(function(){if(A.data(this,"sortable")){var E=A.data(this,"sortable");C.sortables.push({instance:E,shouldRevert:E.options.revert});E._refreshItems();E._propagate("activate",B,C)}})})},stop:function(B,D){var C=A(this).data("draggable");A.each(C.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;C.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert){this.instance.options.revert=true}this.instance._mouseStop(B);this.instance.element.triggerHandler("sortreceive",[B,A.extend(this.instance._ui(),{sender:C.element})],this.instance.options["receive"]);this.instance.options.helper=this.instance.options._helper;if(C.options.helper=="original"){this.instance.currentItem.css({top:"auto",left:"auto"})}}else{this.instance.cancelHelperRemoval=false;this.instance._propagate("deactivate",B,C)}})},drag:function(C,F){var E=A(this).data("draggable"),B=this;var D=function(I){var N=this.offset.click.top,M=this.offset.click.left;var G=this.positionAbs.top,K=this.positionAbs.left;var J=I.height,L=I.width;var O=I.top,H=I.left;return A.ui.isOver(G+N,K+M,O,H,J,L)};A.each(E.sortables,function(G){if(D.call(E,this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=A(B).clone().appendTo(this.instance.element).data("sortable-item",true);this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return F.helper[0]};C.target=this.instance.currentItem[0];this.instance._mouseCapture(C,true);this.instance._mouseStart(C,true,true);this.instance.offset.click.top=E.offset.click.top;this.instance.offset.click.left=E.offset.click.left;this.instance.offset.parent.left-=E.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=E.offset.parent.top-this.instance.offset.parent.top;E._propagate("toSortable",C)}if(this.instance.currentItem){this.instance._mouseDrag(C)}}else{if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._mouseStop(C,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();if(this.instance.placeholder){this.instance.placeholder.remove()}E._propagate("fromSortable",C)}}})}});A.ui.plugin.add("draggable","cursor",{start:function(C,D){var B=A("body");if(B.css("cursor")){D.options._cursor=B.css("cursor")}B.css("cursor",D.options.cursor)},stop:function(B,C){if(C.options._cursor){A("body").css("cursor",C.options._cursor)}}});A.ui.plugin.add("draggable","iframeFix",{start:function(B,C){A(C.options.iframeFix===true?"iframe":C.options.iframeFix).each(function(){A('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1000}).css(A(this).offset()).appendTo("body")})},stop:function(B,C){A("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)})}});A.ui.plugin.add("draggable","opacity",{start:function(C,D){var B=A(D.helper);if(B.css("opacity")){D.options._opacity=B.css("opacity")}B.css("opacity",D.options.opacity)},stop:function(B,C){if(C.options._opacity){A(C.helper).css("opacity",C.options._opacity)}}});A.ui.plugin.add("draggable","scroll",{start:function(C,D){var E=D.options;var B=A(this).data("draggable");if(B.scrollParent[0]!=document&&B.scrollParent[0].tagName!="HTML"){B.overflowOffset=B.scrollParent.offset()}},drag:function(D,E){var F=E.options,B=false;var C=A(this).data("draggable");if(C.scrollParent[0]!=document&&C.scrollParent[0].tagName!="HTML"){if((C.overflowOffset.top+C.scrollParent[0].offsetHeight)-D.pageY<F.scrollSensitivity){C.scrollParent[0].scrollTop=B=C.scrollParent[0].scrollTop+F.scrollSpeed}else{if(D.pageY-C.overflowOffset.top<F.scrollSensitivity){C.scrollParent[0].scrollTop=B=C.scrollParent[0].scrollTop-F.scrollSpeed}}if((C.overflowOffset.left+C.scrollParent[0].offsetWidth)-D.pageX<F.scrollSensitivity){C.scrollParent[0].scrollLeft=B=C.scrollParent[0].scrollLeft+F.scrollSpeed}else{if(D.pageX-C.overflowOffset.left<F.scrollSensitivity){C.scrollParent[0].scrollLeft=B=C.scrollParent[0].scrollLeft-F.scrollSpeed}}}else{if(D.pageY-A(document).scrollTop()<F.scrollSensitivity){B=A(document).scrollTop(A(document).scrollTop()-F.scrollSpeed)}else{if(A(window).height()-(D.pageY-A(document).scrollTop())<F.scrollSensitivity){B=A(document).scrollTop(A(document).scrollTop()+F.scrollSpeed)}}if(D.pageX-A(document).scrollLeft()<F.scrollSensitivity){B=A(document).scrollLeft(A(document).scrollLeft()-F.scrollSpeed)}else{if(A(window).width()-(D.pageX-A(document).scrollLeft())<F.scrollSensitivity){B=A(document).scrollLeft(A(document).scrollLeft()+F.scrollSpeed)}}}if(B!==false&&A.ui.ddmanager&&!F.dropBehaviour){A.ui.ddmanager.prepareOffsets(C,D)}if(B!==false&&C.cssPosition=="absolute"&&C.scrollParent[0]!=document&&A.ui.contains(C.scrollParent[0],C.offsetParent[0])){C.offset.parent=C._getParentOffset()}if(B!==false&&C.cssPosition=="relative"&&!(C.scrollParent[0]!=document&&C.scrollParent[0]!=C.offsetParent[0])){C.offset.relative=C._getRelativeOffset()}}});A.ui.plugin.add("draggable","snap",{start:function(B,D){var C=A(this).data("draggable");C.snapElements=[];A(D.options.snap.constructor!=String?(D.options.snap.items||":data(draggable)"):D.options.snap).each(function(){var F=A(this);var E=F.offset();if(this!=C.element[0]){C.snapElements.push({item:this,width:F.outerWidth(),height:F.outerHeight(),top:E.top,left:E.left})}})},drag:function(M,K){var E=A(this).data("draggable");var Q=K.options.snapTolerance;var P=K.absolutePosition.left,O=P+E.helperProportions.width,D=K.absolutePosition.top,C=D+E.helperProportions.height;for(var N=E.snapElements.length-1;N>=0;N--){var L=E.snapElements[N].left,J=L+E.snapElements[N].width,I=E.snapElements[N].top,S=I+E.snapElements[N].height;if(!((L-Q<P&&P<J+Q&&I-Q<D&&D<S+Q)||(L-Q<P&&P<J+Q&&I-Q<C&&C<S+Q)||(L-Q<O&&O<J+Q&&I-Q<D&&D<S+Q)||(L-Q<O&&O<J+Q&&I-Q<C&&C<S+Q))){if(E.snapElements[N].snapping){(E.options.snap.release&&E.options.snap.release.call(E.element,M,A.extend(E._uiHash(),{snapItem:E.snapElements[N].item})))}E.snapElements[N].snapping=false;continue}if(K.options.snapMode!="inner"){var B=Math.abs(I-C)<=Q;var R=Math.abs(S-D)<=Q;var G=Math.abs(L-O)<=Q;var H=Math.abs(J-P)<=Q;if(B){K.position.top=E._convertPositionTo("relative",{top:I-E.helperProportions.height,left:0}).top}if(R){K.position.top=E._convertPositionTo("relative",{top:S,left:0}).top}if(G){K.position.left=E._convertPositionTo("relative",{top:0,left:L-E.helperProportions.width}).left}if(H){K.position.left=E._convertPositionTo("relative",{top:0,left:J}).left}}var F=(B||R||G||H);if(K.options.snapMode!="outer"){var B=Math.abs(I-D)<=Q;var R=Math.abs(S-C)<=Q;var G=Math.abs(L-P)<=Q;var H=Math.abs(J-O)<=Q;if(B){K.position.top=E._convertPositionTo("relative",{top:I,left:0}).top}if(R){K.position.top=E._convertPositionTo("relative",{top:S-E.helperProportions.height,left:0}).top}if(G){K.position.left=E._convertPositionTo("relative",{top:0,left:L}).left}if(H){K.position.left=E._convertPositionTo("relative",{top:0,left:J-E.helperProportions.width}).left}}if(!E.snapElements[N].snapping&&(B||R||G||H||F)){(E.options.snap.snap&&E.options.snap.snap.call(E.element,M,A.extend(E._uiHash(),{snapItem:E.snapElements[N].item})))}E.snapElements[N].snapping=(B||R||G||H||F)}}});A.ui.plugin.add("draggable","stack",{start:function(B,C){var D=A.makeArray(A(C.options.stack.group)).sort(function(F,E){return(parseInt(A(F).css("zIndex"),10)||C.options.stack.min)-(parseInt(A(E).css("zIndex"),10)||C.options.stack.min)});A(D).each(function(E){this.style.zIndex=C.options.stack.min+E});this[0].style.zIndex=C.options.stack.min+D.length}});A.ui.plugin.add("draggable","zIndex",{start:function(C,D){var B=A(D.helper);if(B.css("zIndex")){D.options._zIndex=B.css("zIndex")}B.css("zIndex",D.options.zIndex)},stop:function(B,C){if(C.options._zIndex){A(C.helper).css("zIndex",C.options._zIndex)}}})})(jQuery);/*
+ * jQuery UI Droppable 1.6
+ *
+ * Copyright (c) 2008 AUTHORS.txt (http://ui.jquery.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Droppables
+ *
+ * Depends:
+ *	ui.core.js
+ *	ui.draggable.js
+ */
(function(A){A.widget("ui.droppable",{_init:function(){var C=this.options,B=C.accept;this.isover=0;this.isout=1;this.options.accept=this.options.accept&&A.isFunction(this.options.accept)?this.options.accept:function(D){return D.is(B)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};A.ui.ddmanager.droppables[this.options.scope]=A.ui.ddmanager.droppables[this.options.scope]||[];A.ui.ddmanager.droppables[this.options.scope].push(this);(this.options.cssNamespace&&this.element.addClass(this.options.cssNamespace+"-droppable"))},destroy:function(){var B=A.ui.ddmanager.droppables[this.options.scope];for(var C=0;C<B.length;C++){if(B[C]==this){B.splice(C,1)}}this.element.removeClass("ui-droppable-disabled").removeData("droppable").unbind(".droppable")},_setData:function(B,C){if(B=="accept"){this.options.accept=C&&A.isFunction(C)?C:function(D){return D.is(accept)}}else{A.widget.prototype._setData.apply(this,arguments)}},_activate:function(C){var B=A.ui.ddmanager.current;A.ui.plugin.call(this,"activate",[C,this.ui(B)]);if(B){this.element.triggerHandler("dropactivate",[C,this.ui(B)],this.options.activate)}},_deactivate:function(C){var B=A.ui.ddmanager.current;A.ui.plugin.call(this,"deactivate",[C,this.ui(B)]);if(B){this.element.triggerHandler("dropdeactivate",[C,this.ui(B)],this.options.deactivate)}},_over:function(C){var B=A.ui.ddmanager.current;if(!B||(B.currentItem||B.element)[0]==this.element[0]){return }if(this.options.accept.call(this.element,(B.currentItem||B.element))){A.ui.plugin.call(this,"over",[C,this.ui(B)]);this.element.triggerHandler("dropover",[C,this.ui(B)],this.options.over)}},_out:function(C){var B=A.ui.ddmanager.current;if(!B||(B.currentItem||B.element)[0]==this.element[0]){return }if(this.options.accept.call(this.element,(B.currentItem||B.element))){A.ui.plugin.call(this,"out",[C,this.ui(B)]);this.element.triggerHandler("dropout",[C,this.ui(B)],this.options.out)}},_drop:function(C,D){var B=D||A.ui.ddmanager.current;if(!B||(B.currentItem||B.element)[0]==this.element[0]){return false}var E=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var F=A.data(this,"droppable");if(F.options.greedy&&A.ui.intersect(B,A.extend(F,{offset:F.element.offset()}),F.options.tolerance)){E=true;return false}});if(E){return false}if(this.options.accept.call(this.element,(B.currentItem||B.element))){A.ui.plugin.call(this,"drop",[C,this.ui(B)]);this.element.triggerHandler("drop",[C,this.ui(B)],this.options.drop);return this.element}return false},plugins:{},ui:function(B){return{draggable:(B.currentItem||B.element),helper:B.helper,position:B.position,absolutePosition:B.positionAbs,options:this.options,element:this.element}}});A.extend(A.ui.droppable,{version:"1.6",defaults:{accept:"*",activeClass:null,cssNamespace:"ui",greedy:false,hoverClass:null,scope:"default",tolerance:"intersect"}});A.ui.intersect=function(O,I,M){if(!I.offset){return false}var D=(O.positionAbs||O.position.absolute).left,C=D+O.helperProportions.width,L=(O.positionAbs||O.position.absolute).top,K=L+O.helperProportions.height;var F=I.offset.left,B=F+I.proportions.width,N=I.offset.top,J=N+I.proportions.height;switch(M){case"fit":return(F<D&&C<B&&N<L&&K<J);break;case"intersect":return(F<D+(O.helperProportions.width/2)&&C-(O.helperProportions.width/2)<B&&N<L+(O.helperProportions.height/2)&&K-(O.helperProportions.height/2)<J);break;case"pointer":var G=((O.positionAbs||O.position.absolute).left+(O.clickOffset||O.offset.click).left),H=((O.positionAbs||O.position.absolute).top+(O.clickOffset||O.offset.click).top),E=A.ui.isOver(H,G,N,F,I.proportions.height,I.proportions.width);return E;break;case"touch":return((L>=N&&L<=J)||(K>=N&&K<=J)||(L<N&&K>J))&&((D>=F&&D<=B)||(C>=F&&C<=B)||(D<F&&C>B));break;default:return false;break}};A.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(E,G){var B=A.ui.ddmanager.droppables[E.options.scope];var F=G?G.type:null;var H=(E.currentItem||E.element).find(":data(droppable)").andSelf();droppablesLoop:for(var D=0;D<B.length;D++){if(B[D].options.disabled||(E&&!B[D].options.accept.call(B[D].element,(E.currentItem||E.element)))){continue}for(var C=0;C<H.length;C++){if(H[C]==B[D].element[0]){B[D].proportions.height=0;continue droppablesLoop}}B[D].visible=B[D].element.css("display")!="none";if(!B[D].visible){continue}B[D].offset=B[D].element.offset();B[D].proportions={width:B[D].element[0].offsetWidth,height:B[D].element[0].offsetHeight};if(F=="dragstart"||F=="sortactivate"){B[D]._activate.call(B[D],G)}}},drop:function(B,C){var D=false;A.each(A.ui.ddmanager.droppables[B.options.scope],function(){if(!this.options){return }if(!this.options.disabled&&this.visible&&A.ui.intersect(B,this,this.options.tolerance)){D=this._drop.call(this,C)}if(!this.options.disabled&&this.visible&&this.options.accept.call(this.element,(B.currentItem||B.element))){this.isout=1;this.isover=0;this._deactivate.call(this,C)}});return D},drag:function(B,C){if(B.options.refreshPositions){A.ui.ddmanager.prepareOffsets(B,C)}A.each(A.ui.ddmanager.droppables[B.options.scope],function(){if(this.options.disabled||this.greedyChild||!this.visible){return }var E=A.ui.intersect(B,this,this.options.tolerance);var G=!E&&this.isover==1?"isout":(E&&this.isover==0?"isover":null);if(!G){return }var F;if(this.options.greedy){var D=this.element.parents(":data(droppable):eq(0)");if(D.length){F=A.data(D[0],"droppable");F.greedyChild=(G=="isover"?1:0)}}if(F&&G=="isover"){F["isover"]=0;F["isout"]=1;F._out.call(F,C)}this[G]=1;this[G=="isout"?"isover":"isout"]=0;this[G=="isover"?"_over":"_out"].call(this,C);if(F&&G=="isout"){F["isout"]=0;F["isover"]=1;F._over.call(F,C)}})}};A.ui.plugin.add("droppable","activeClass",{activate:function(B,C){A(this).addClass(C.options.activeClass)},deactivate:function(B,C){A(this).removeClass(C.options.activeClass)},drop:function(B,C){A(this).removeClass(C.options.activeClass)}});A.ui.plugin.add("droppable","hoverClass",{over:function(B,C){A(this).addClass(C.options.hoverClass)},out:function(B,C){A(this).removeClass(C.options.hoverClass)},drop:function(B,C){A(this).removeClass(C.options.hoverClass)}})})(jQuery);/*
+ * jQuery UI Accordion 1.6
+ *
+ * Copyright (c) 2008 AUTHORS.txt (http://ui.jquery.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Accordion
+ *
+ * Depends:
+ *	ui.core.js
+ */
(function(E){E.widget("ui.accordion",{_init:function(){var H=this.options;if(H.navigation){var K=this.element.find("a").filter(H.navigationFilter);if(K.length){if(K.filter(H.header).length){H.active=K}else{H.active=K.parent().parent().prev();K.addClass("current")}}}H.headers=this.element.find(H.header);H.active=C(H.headers,H.active);if(E.browser.msie){this.element.find("a").css("zoom","1")}if(!this.element.hasClass("ui-accordion")){this.element.addClass("ui-accordion");E('<span class="ui-accordion-left"></span>').insertBefore(H.headers);E('<span class="ui-accordion-right"></span>').appendTo(H.headers);H.headers.addClass("ui-accordion-header")}var J;if(H.fillSpace){J=this.element.parent().height();H.headers.each(function(){J-=E(this).outerHeight()});var I=0;H.headers.next().each(function(){I=Math.max(I,E(this).innerHeight()-E(this).height())}).height(J-I)}else{if(H.autoHeight){J=0;H.headers.next().each(function(){J=Math.max(J,E(this).outerHeight())}).height(J)}}this.element.attr("role","tablist");var G=this;H.headers.attr("role","tab").bind("keydown",function(L){return G._keydown(L)}).next().attr("role","tabpanel");H.headers.not(H.active||"").attr("aria-expanded","false").attr("tabIndex","-1").next().hide();if(!H.active.length){H.headers.eq(0).attr("tabIndex","0")}else{H.active.attr("aria-expanded","true").attr("tabIndex","0").parent().andSelf().addClass(H.selectedClass)}if(!E.browser.safari){H.headers.find("a").attr("tabIndex","-1")}if(H.event){this.element.bind((H.event)+".accordion",F)}},destroy:function(){this.options.headers.parent().andSelf().removeClass(this.options.selectedClass);this.options.headers.prev(".ui-accordion-left").remove();this.options.headers.children(".ui-accordion-right").remove();this.options.headers.next().css("display","");if(this.options.fillSpace||this.options.autoHeight){this.options.headers.next().css("height","")}E.removeData(this.element[0],"accordion");this.element.removeClass("ui-accordion").unbind(".accordion")},_keydown:function(J){if(this.options.disabled||J.altKey||J.ctrlKey){return }var K=E.ui.keyCode;var I=this.options.headers.length;var G=this.options.headers.index(J.target);var H=false;switch(J.keyCode){case K.RIGHT:case K.DOWN:H=this.options.headers[(G+1)%I];break;case K.LEFT:case K.UP:H=this.options.headers[(G-1+I)%I];break;case K.SPACE:case K.ENTER:return F.call(this.element[0],{target:J.target})}if(H){E(J.target).attr("tabIndex","-1");E(H).attr("tabIndex","0");H.focus();return false}return true},activate:function(G){F.call(this.element[0],{target:C(this.options.headers,G)[0]})}});function B(H,G){return function(){return H.apply(G,arguments)}}function D(I){if(!E.data(this,"accordion")){return }var G=E.data(this,"accordion");var H=G.options;H.running=I?0:--H.running;if(H.running){return }if(H.clearStyle){H.toShow.add(H.toHide).css({height:"",overflow:""})}G._trigger("change",null,H.data)}function A(G,N,K,L,O){var Q=E.data(this,"accordion").options;Q.toShow=G;Q.toHide=N;Q.data=K;var H=B(D,this);E.data(this,"accordion")._trigger("changestart",null,Q.data);Q.running=N.size()===0?G.size():N.size();if(Q.animated){var J={};if(!Q.alwaysOpen&&L){J={toShow:E([]),toHide:N,complete:H,down:O,autoHeight:Q.autoHeight}}else{J={toShow:G,toHide:N,complete:H,down:O,autoHeight:Q.autoHeight}}if(!Q.proxied){Q.proxied=Q.animated}if(!Q.proxiedDuration){Q.proxiedDuration=Q.duration}Q.animated=E.isFunction(Q.proxied)?Q.proxied(J):Q.proxied;Q.duration=E.isFunction(Q.proxiedDuration)?Q.proxiedDuration(J):Q.proxiedDuration;var P=E.ui.accordion.animations,I=Q.duration,M=Q.animated;if(!P[M]){P[M]=function(R){this.slide(R,{easing:M,duration:I||700})}}P[M](J)}else{if(!Q.alwaysOpen&&L){G.toggle()}else{N.hide();G.show()}H(true)}N.prev().attr("aria-expanded","false").attr("tabIndex","-1");G.prev().attr("aria-expanded","true").attr("tabIndex","0").focus()}function F(L){var J=E.data(this,"accordion").options;if(J.disabled){return false}if(!L.target&&!J.alwaysOpen){J.active.parent().andSelf().toggleClass(J.selectedClass);var I=J.active.next(),M={options:J,newHeader:E([]),oldHeader:J.active,newContent:E([]),oldContent:I},G=(J.active=E([]));A.call(this,G,I,M);return false}var K=E(L.target);K=E(K.parents(J.header)[0]||K);var H=K[0]==J.active[0];if(J.running||(J.alwaysOpen&&H)){return false}if(!K.is(J.header)){return }J.active.parent().andSelf().toggleClass(J.selectedClass);if(!H){K.parent().andSelf().addClass(J.selectedClass)}var G=K.next(),I=J.active.next(),M={options:J,newHeader:H&&!J.alwaysOpen?E([]):K,oldHeader:J.active,newContent:H&&!J.alwaysOpen?E([]):G,oldContent:I},N=J.headers.index(J.active[0])>J.headers.index(K[0]);J.active=H?E([]):K;A.call(this,G,I,M,H,N);return false}function C(H,G){return G?typeof G=="number"?H.filter(":eq("+G+")"):H.not(H.not(G)):G===false?E([]):H.filter(":eq(0)")}E.extend(E.ui.accordion,{version:"1.6",defaults:{autoHeight:true,alwaysOpen:true,animated:"slide",event:"click",header:"a",navigationFilter:function(){return this.href.toLowerCase()==location.href.toLowerCase()},running:0,selectedClass:"selected"},animations:{slide:function(G,J){G=E.extend({easing:"swing",duration:300},G,J);if(!G.toHide.size()){G.toShow.animate({height:"show"},G);return }var I=G.toHide.height(),L=G.toShow.height(),N=L/I,K=G.toShow.outerHeight()-G.toShow.height(),H=G.toShow.css("marginBottom"),M=G.toShow.css("overflow");tmargin=G.toShow.css("marginTop");G.toShow.css({height:0,overflow:"hidden",marginTop:0,marginBottom:-K}).show();G.toHide.filter(":hidden").each(G.complete).end().filter(":visible").animate({height:"hide"},{step:function(O){var P=(I-O)*N;if(E.browser.msie||E.browser.opera){P=Math.ceil(P)}G.toShow.height(P)},duration:G.duration,easing:G.easing,complete:function(){if(!G.autoHeight){G.toShow.css("height","auto")}G.toShow.css({marginTop:tmargin,marginBottom:H,overflow:M});G.complete()}})},bounceslide:function(G){this.slide(G,{easing:G.down?"easeOutBounce":"swing",duration:G.down?1000:200})},easeslide:function(G){this.slide(G,{easing:"easeinout",duration:700})}}})})(jQuery);/*
+ * jQuery UI Dialog 1.6
+ *
+ * Copyright (c) 2008 AUTHORS.txt (http://ui.jquery.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Dialog
+ *
+ * Depends:
+ *	ui.core.js
+ *	ui.draggable.js
+ *	ui.resizable.js
+ */
(function(B){var A={dragStart:"start.draggable",drag:"drag.draggable",dragStop:"stop.draggable",maxHeight:"maxHeight.resizable",minHeight:"minHeight.resizable",maxWidth:"maxWidth.resizable",minWidth:"minWidth.resizable",resizeStart:"start.resizable",resize:"drag.resizable",resizeStop:"stop.resizable"};B.widget("ui.dialog",{_init:function(){this.originalTitle=this.element.attr("title");this.options.title=this.options.title||this.originalTitle;var M=this,N=this.options,F=this.element.removeAttr("title").addClass("ui-dialog-content").wrap("<div></div>").wrap("<div></div>"),I=(this.uiDialogContainer=F.parent()).addClass("ui-dialog-container").css({position:"relative",width:"100%",height:"100%"}),E=(this.uiDialogTitlebar=B("<div></div>")).addClass("ui-dialog-titlebar").mousedown(function(){M.moveToTop()}).prependTo(I),J=B('<a href="#"/>').addClass("ui-dialog-titlebar-close").attr("role","button").appendTo(E),G=(this.uiDialogTitlebarCloseText=B("<span/>")).text(N.closeText).appendTo(J),L=N.title||"&nbsp;",D=B.ui.dialog.getTitleId(this.element),C=B("<span/>").addClass("ui-dialog-title").attr("id",D).html(L).prependTo(E),K=(this.uiDialog=I.parent()).appendTo(document.body).hide().addClass("ui-dialog").addClass(N.dialogClass).css({position:"absolute",width:N.width,height:N.height,overflow:"hidden",zIndex:N.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(O){(N.closeOnEscape&&O.keyCode&&O.keyCode==B.ui.keyCode.ESCAPE&&M.close())}).attr({role:"dialog","aria-labelledby":D}).mouseup(function(){M.moveToTop()}),H=(this.uiDialogButtonPane=B("<div></div>")).addClass("ui-dialog-buttonpane").css({position:"absolute",bottom:0}).appendTo(K),J=B(".ui-dialog-titlebar-close",E).hover(function(){B(this).addClass("ui-dialog-titlebar-close-hover")},function(){B(this).removeClass("ui-dialog-titlebar-close-hover")}).mousedown(function(O){O.stopPropagation()}).click(function(){M.close();return false});E.find("*").add(E).disableSelection();(N.draggable&&B.fn.draggable&&this._makeDraggable());(N.resizable&&B.fn.resizable&&this._makeResizable());this._createButtons(N.buttons);this._isOpen=false;(N.bgiframe&&B.fn.bgiframe&&K.bgiframe());(N.autoOpen&&this.open())},destroy:function(){(this.overlay&&this.overlay.destroy());this.uiDialog.hide();this.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content").hide().appendTo("body");this.uiDialog.remove();(this.originalTitle&&this.element.attr("title",this.originalTitle))},close:function(){if(false===this._trigger("beforeclose",null,{options:this.options})){return }(this.overlay&&this.overlay.destroy());this.uiDialog.hide(this.options.hide).unbind("keypress.ui-dialog");this._trigger("close",null,{options:this.options});B.ui.dialog.overlay.resize();this._isOpen=false},isOpen:function(){return this._isOpen},moveToTop:function(F){if((this.options.modal&&!F)||(!this.options.stack&&!this.options.modal)){return this._trigger("focus",null,{options:this.options})}var E=this.options.zIndex,D=this.options;B(".ui-dialog:visible").each(function(){E=Math.max(E,parseInt(B(this).css("z-index"),10)||D.zIndex)});(this.overlay&&this.overlay.$el.css("z-index",++E));var C={scrollTop:this.element.attr("scrollTop"),scrollLeft:this.element.attr("scrollLeft")};this.uiDialog.css("z-index",++E);this.element.attr(C);this._trigger("focus",null,{options:this.options})},open:function(){if(this._isOpen){return }this.overlay=this.options.modal?new B.ui.dialog.overlay(this):null;(this.uiDialog.next().length&&this.uiDialog.appendTo("body"));this._position(this.options.position);this.uiDialog.show(this.options.show);(this.options.autoResize&&this._size());this.moveToTop(true);(this.options.modal&&this.uiDialog.bind("keypress.ui-dialog",function(E){if(E.keyCode!=B.ui.keyCode.TAB){return }var D=B(":tabbable",this),F=D.filter(":first")[0],C=D.filter(":last")[0];if(E.target==C&&!E.shiftKey){setTimeout(function(){F.focus()},1)}else{if(E.target==F&&E.shiftKey){setTimeout(function(){C.focus()},1)}}}));this.uiDialog.find(":tabbable:first").focus();this._trigger("open",null,{options:this.options});this._isOpen=true},_createButtons:function(F){var E=this,C=false,D=this.uiDialogButtonPane;D.empty().hide();B.each(F,function(){return !(C=true)});if(C){D.show();B.each(F,function(G,H){B('<button type="button"></button>').text(G).click(function(){H.apply(E.element[0],arguments)}).appendTo(D)})}},_makeDraggable:function(){var C=this,D=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content",helper:D.dragHelper,handle:".ui-dialog-titlebar",start:function(){C.moveToTop();(D.dragStart&&D.dragStart.apply(C.element[0],arguments))},drag:function(){(D.drag&&D.drag.apply(C.element[0],arguments))},stop:function(){(D.dragStop&&D.dragStop.apply(C.element[0],arguments));B.ui.dialog.overlay.resize()}})},_makeResizable:function(F){F=(F===undefined?this.options.resizable:F);var C=this,E=this.options,D=typeof F=="string"?F:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",helper:E.resizeHelper,maxWidth:E.maxWidth,maxHeight:E.maxHeight,minWidth:E.minWidth,minHeight:E.minHeight,start:function(){(E.resizeStart&&E.resizeStart.apply(C.element[0],arguments))},resize:function(){(E.autoResize&&C._size.apply(C));(E.resize&&E.resize.apply(C.element[0],arguments))},handles:D,stop:function(){(E.autoResize&&C._size.apply(C));(E.resizeStop&&E.resizeStop.apply(C.element[0],arguments));B.ui.dialog.overlay.resize()}})},_position:function(H){var D=B(window),E=B(document),F=E.scrollTop(),C=E.scrollLeft(),G=F;if(B.inArray(H,["center","top","right","bottom","left"])>=0){H=[H=="right"||H=="left"?H:"center",H=="top"||H=="bottom"?H:"middle"]}if(H.constructor!=Array){H=["center","middle"]}if(H[0].constructor==Number){C+=H[0]}else{switch(H[0]){case"left":C+=0;break;case"right":C+=D.width()-this.uiDialog.outerWidth();break;default:case"center":C+=(D.width()-this.uiDialog.outerWidth())/2}}if(H[1].constructor==Number){F+=H[1]}else{switch(H[1]){case"top":F+=0;break;case"bottom":F+=(B.browser.opera?window.innerHeight:D.height())-this.uiDialog.outerHeight();break;default:case"middle":F+=((B.browser.opera?window.innerHeight:D.height())-this.uiDialog.outerHeight())/2}}F=Math.max(F,G);this.uiDialog.css({top:F,left:C})},_setData:function(D,E){(A[D]&&this.uiDialog.data(A[D],E));switch(D){case"buttons":this._createButtons(E);break;case"closeText":this.uiDialogTitlebarCloseText.text(E);break;case"draggable":(E?this._makeDraggable():this.uiDialog.draggable("destroy"));break;case"height":this.uiDialog.height(E);break;case"position":this._position(E);break;case"resizable":var C=this.uiDialog,F=this.uiDialog.is(":data(resizable)");(F&&!E&&C.resizable("destroy"));(F&&typeof E=="string"&&C.resizable("option","handles",E));(F||this._makeResizable(E));break;case"title":B(".ui-dialog-title",this.uiDialogTitlebar).html(E||"&nbsp;");break;case"width":this.uiDialog.width(E);break}B.widget.prototype._setData.apply(this,arguments)},_size:function(){var D=this.uiDialogContainer,G=this.uiDialogTitlebar,E=this.element,F=(parseInt(E.css("margin-top"),10)||0)+(parseInt(E.css("margin-bottom"),10)||0),C=(parseInt(E.css("margin-left"),10)||0)+(parseInt(E.css("margin-right"),10)||0);E.height(D.height()-G.outerHeight()-F);E.width(D.width()-C)}});B.extend(B.ui.dialog,{version:"1.6",defaults:{autoOpen:true,autoResize:true,bgiframe:false,buttons:{},closeOnEscape:true,closeText:"close",draggable:true,height:200,minHeight:100,minWidth:150,modal:false,overlay:{},position:"center",resizable:true,stack:true,width:300,zIndex:1000},getter:"isOpen",uuid:0,getTitleId:function(C){return"ui-dialog-title-"+(C.attr("id")||++this.uuid)},overlay:function(C){this.$el=B.ui.dialog.overlay.create(C)}});B.extend(B.ui.dialog.overlay,{instances:[],events:B.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(C){return C+".dialog-overlay"}).join(" "),create:function(D){if(this.instances.length===0){setTimeout(function(){B("a, :input").bind(B.ui.dialog.overlay.events,function(){var F=false;var H=B(this).parents(".ui-dialog");if(H.length){var E=B(".ui-dialog-overlay");if(E.length){var G=parseInt(E.css("z-index"),10);E.each(function(){G=Math.max(G,parseInt(B(this).css("z-index"),10))});F=parseInt(H.css("z-index"),10)>G}else{F=true}}return F})},1);B(document).bind("keydown.dialog-overlay",function(E){(D.options.closeOnEscape&&E.keyCode&&E.keyCode==B.ui.keyCode.ESCAPE&&D.close())});B(window).bind("resize.dialog-overlay",B.ui.dialog.overlay.resize)}var C=B("<div></div>").appendTo(document.body).addClass("ui-dialog-overlay").css(B.extend({borderWidth:0,margin:0,padding:0,position:"absolute",top:0,left:0,width:this.width(),height:this.height()},D.options.overlay));(D.options.bgiframe&&B.fn.bgiframe&&C.bgiframe());this.instances.push(C);return C},destroy:function(C){this.instances.splice(B.inArray(this.instances,C),1);if(this.instances.length===0){B("a, :input").add([document,window]).unbind(".dialog-overlay")}C.remove()},height:function(){if(B.browser.msie&&B.browser.version<7){var D=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);var C=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);if(D<C){return B(window).height()+"px"}else{return D+"px"}}else{if(B.browser.opera){return Math.max(window.innerHeight,B(document).height())+"px"}else{return B(document).height()+"px"}}},width:function(){if(B.browser.msie&&B.browser.version<7){var C=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);var D=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);if(C<D){return B(window).width()+"px"}else{return C+"px"}}else{if(B.browser.opera){return Math.max(window.innerWidth,B(document).width())+"px"}else{return B(document).width()+"px"}}},resize:function(){var C=B([]);B.each(B.ui.dialog.overlay.instances,function(){C=C.add(this)});C.css({width:0,height:0}).css({width:B.ui.dialog.overlay.width(),height:B.ui.dialog.overlay.height()})}});B.extend(B.ui.dialog.overlay.prototype,{destroy:function(){B.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);/*
+ * jQuery UI Slider 1.6
+ *
+ * Copyright (c) 2008 AUTHORS.txt (http://ui.jquery.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Slider
+ *
+ * Depends:
+ *	ui.core.js
+ */
(function(A){A.fn.unwrap=A.fn.unwrap||function(B){return this.each(function(){A(this).parents(B).eq(0).after(this).remove()})};A.widget("ui.slider",{_init:function(){var B=this;this.element.addClass("ui-slider");this._initBoundaries();this.handle=A(this.options.handle,this.element);if(!this.handle.length){B.handle=B.generated=A(B.options.handles||[0]).map(function(){var D=A("<div/>").addClass("ui-slider-handle").appendTo(B.element);if(this.id){D.attr("id",this.id)}return D[0]})}var C=function(D){this.element=A(D);this.element.data("mouse",this);this.options=B.options;this.element.bind("mousedown",function(){if(B.currentHandle){this.blur(B.currentHandle)}B._focus(this,true)});this._mouseInit()};A.extend(C.prototype,A.ui.mouse,{_mouseCapture:function(){return true},_mouseStart:function(D){return B._start.call(B,D,this.element[0])},_mouseDrag:function(D){return B._drag.call(B,D,this.element[0])},_mouseStop:function(D){return B._stop.call(B,D,this.element[0])},trigger:function(D){this._mouseDown(D)}});A(this.handle).each(function(){new C(this)}).wrap('<a href="#" style="outline:none;border:none;"></a>').parent().bind("click",function(){return false}).bind("focus",function(D){B._focus(this.firstChild)}).bind("blur",function(D){B._blur(this.firstChild)}).bind("keydown",function(D){if(!B.options.noKeyboard){return B._keydown(D.keyCode,this.firstChild)}});this.element.bind("mousedown.slider",function(D){if(A(D.target).is(".ui-slider-handle")){return }B._click.apply(B,[D]);B.currentHandle.data("mouse").trigger(D);B.firstValue=B.firstValue+1});A.each(this.options.handles||[],function(D,E){B.moveTo(E.start,D,true)});if(!isNaN(this.options.startValue)){this.moveTo(this.options.startValue,0,true)}this.previousHandle=A(this.handle[0]);if(this.handle.length==2&&this.options.range){this._createRange()}},destroy:function(){this.element.removeClass("ui-slider ui-slider-disabled").removeData("slider").unbind(".slider");if(this.handle&&this.handle.length){this.handle.unwrap("a");this.handle.each(function(){var B=A(this).data("mouse");B&&B._mouseDestroy()})}this.generated&&this.generated.remove()},_start:function(B,C){var D=this.options;if(D.disabled){return false}this.actualSize={width:this.element.outerWidth(),height:this.element.outerHeight()};if(!this.currentHandle){this._focus(this.previousHandle,true)}this.offset=this.element.offset();this.handleOffset=this.currentHandle.offset();this.clickOffset={top:B.pageY-this.handleOffset.top,left:B.pageX-this.handleOffset.left};this.firstValue=this.value();this._propagate("start",B);this._drag(B,C);return true},_drag:function(C,E){var F=this.options;var B={top:C.pageY-this.offset.top-this.clickOffset.top,left:C.pageX-this.offset.left-this.clickOffset.left};if(!this.currentHandle){this._focus(this.previousHandle,true)}B.left=this._translateLimits(B.left,"x");B.top=this._translateLimits(B.top,"y");if(F.stepping.x){var D=this._convertValue(B.left,"x");D=this._round(D/F.stepping.x)*F.stepping.x;B.left=this._translateValue(D,"x")}if(F.stepping.y){var D=this._convertValue(B.top,"y");D=this._round(D/F.stepping.y)*F.stepping.y;B.top=this._translateValue(D,"y")}B.left=this._translateRange(B.left,"x");B.top=this._translateRange(B.top,"y");if(F.axis!="vertical"){this.currentHandle.css({left:B.left})}if(F.axis!="horizontal"){this.currentHandle.css({top:B.top})}this.currentHandle.data("mouse").sliderValue={x:this._round(this._convertValue(B.left,"x"))||0,y:this._round(this._convertValue(B.top,"y"))||0};if(this.rangeElement){this._updateRange()}this._propagate("slide",C);return false},_stop:function(B){this._propagate("stop",B);if(this.firstValue!=this.value()){this._propagate("change",B)}this._focus(this.currentHandle,true);return false},_round:function(B){return this.options.round?parseInt(B,10):parseFloat(B)},_setData:function(B,C){A.widget.prototype._setData.apply(this,arguments);if(/min|max|steps/.test(B)){this._initBoundaries()}if(B=="range"){C?this.handle.length==2&&this._createRange():this._removeRange()}},_initBoundaries:function(){var B=this.element[0],C=this.options;this.actualSize={width:this.element.outerWidth(),height:this.element.outerHeight()};A.extend(C,{axis:C.axis||(B.offsetWidth<B.offsetHeight?"vertical":"horizontal"),max:!isNaN(parseInt(C.max,10))?{x:parseInt(C.max,10),y:parseInt(C.max,10)}:({x:C.max&&C.max.x||100,y:C.max&&C.max.y||100}),min:!isNaN(parseInt(C.min,10))?{x:parseInt(C.min,10),y:parseInt(C.min,10)}:({x:C.min&&C.min.x||0,y:C.min&&C.min.y||0})});C.realMax={x:C.max.x-C.min.x,y:C.max.y-C.min.y};C.stepping={x:C.stepping&&C.stepping.x||parseInt(C.stepping,10)||(C.steps?C.realMax.x/(C.steps.x||parseInt(C.steps,10)||C.realMax.x):0),y:C.stepping&&C.stepping.y||parseInt(C.stepping,10)||(C.steps?C.realMax.y/(C.steps.y||parseInt(C.steps,10)||C.realMax.y):0)}},_keydown:function(F,E){if(this.options.disabled){return }var C=F;if(/(33|34|35|36|37|38|39|40)/.test(C)){var G=this.options,B,I;if(/(35|36)/.test(C)){B=(C==35)?G.max.x:G.min.x;I=(C==35)?G.max.y:G.min.y}else{var H=/(34|37|40)/.test(C)?"-=":"+=";var D=/(37|38|39|40)/.test(C)?"_oneStep":"_pageStep";B=H+this[D]("x");I=H+this[D]("y")}this.moveTo({x:B,y:I},E);return false}return true},_focus:function(B,C){this.currentHandle=A(B).addClass("ui-slider-handle-active");if(C){this.currentHandle.parent()[0].focus()}},_blur:function(B){A(B).removeClass("ui-slider-handle-active");if(this.currentHandle&&this.currentHandle[0]==B){this.previousHandle=this.currentHandle;this.currentHandle=null}},_click:function(C){var D=[C.pageX,C.pageY];var B=false;this.handle.each(function(){if(this==C.target){B=true}});if(B||this.options.disabled||!(this.currentHandle||this.previousHandle)){return }if(!this.currentHandle&&this.previousHandle){this._focus(this.previousHandle,true)}this.offset=this.element.offset();this.moveTo({y:this._convertValue(C.pageY-this.offset.top-this.currentHandle[0].offsetHeight/2,"y"),x:this._convertValue(C.pageX-this.offset.left-this.currentHandle[0].offsetWidth/2,"x")},null,!this.options.distance)},_createRange:function(){if(this.rangeElement){return }this.rangeElement=A("<div></div>").addClass("ui-slider-range").css({position:"absolute"}).appendTo(this.element);this._updateRange()},_removeRange:function(){this.rangeElement.remove();this.rangeElement=null},_updateRange:function(){var C=this.options.axis=="vertical"?"top":"left";var B=this.options.axis=="vertical"?"height":"width";this.rangeElement.css(C,(this._round(A(this.handle[0]).css(C))||0)+this._handleSize(0,this.options.axis=="vertical"?"y":"x")/2);this.rangeElement.css(B,(this._round(A(this.handle[1]).css(C))||0)-(this._round(A(this.handle[0]).css(C))||0))},_getRange:function(){return this.rangeElement?this._convertValue(this._round(this.rangeElement.css(this.options.axis=="vertical"?"height":"width")),this.options.axis=="vertical"?"y":"x"):null},_handleIndex:function(){return this.handle.index(this.currentHandle[0])},value:function(D,B){if(this.handle.length==1){this.currentHandle=this.handle}if(!B){B=this.options.axis=="vertical"?"y":"x"}var C=A(D!=undefined&&D!==null?this.handle[D]||D:this.currentHandle);if(C.data("mouse").sliderValue){return this._round(C.data("mouse").sliderValue[B])}else{return this._round(((this._round(C.css(B=="x"?"left":"top"))/(this.actualSize[B=="x"?"width":"height"]-this._handleSize(D,B)))*this.options.realMax[B])+this.options.min[B])}},_convertValue:function(C,B){return this.options.min[B]+(C/(this.actualSize[B=="x"?"width":"height"]-this._handleSize(null,B)))*this.options.realMax[B]},_translateValue:function(C,B){return((C-this.options.min[B])/this.options.realMax[B])*(this.actualSize[B=="x"?"width":"height"]-this._handleSize(null,B))},_translateRange:function(D,B){if(this.rangeElement){if(this.currentHandle[0]==this.handle[0]&&D>=this._translateValue(this.value(1),B)){D=this._translateValue(this.value(1,B)-this._oneStep(B),B)}if(this.currentHandle[0]==this.handle[1]&&D<=this._translateValue(this.value(0),B)){D=this._translateValue(this.value(0,B)+this._oneStep(B),B)}}if(this.options.handles){var C=this.options.handles[this._handleIndex()];if(D<this._translateValue(C.min,B)){D=this._translateValue(C.min,B)}else{if(D>this._translateValue(C.max,B)){D=this._translateValue(C.max,B)}}}return D},_translateLimits:function(C,B){if(C>=this.actualSize[B=="x"?"width":"height"]-this._handleSize(null,B)){C=this.actualSize[B=="x"?"width":"height"]-this._handleSize(null,B)}if(C<=0){C=0}return C},_handleSize:function(C,B){return A(C!=undefined&&C!==null?this.handle[C]:this.currentHandle)[0]["offset"+(B=="x"?"Width":"Height")]},_oneStep:function(B){return this.options.stepping[B]||1},_pageStep:function(B){return 10},moveTo:function(F,E,G){var H=this.options;this.actualSize={width:this.element.outerWidth(),height:this.element.outerHeight()};if(E==undefined&&!this.currentHandle&&this.handle.length!=1){return false}if(E==undefined&&!this.currentHandle){E=0}if(E!=undefined){this.currentHandle=this.previousHandle=A(this.handle[E]||E)}if(F.x!==undefined&&F.y!==undefined){var B=F.x,I=F.y}else{var B=F,I=F}if(B!==undefined&&B.constructor!=Number){var D=/^\-\=/.test(B),C=/^\+\=/.test(B);if(D||C){B=this.value(null,"x")+this._round(B.replace(D?"=":"+=",""))}else{B=isNaN(this._round(B))?undefined:this._round(B)}}if(I!==undefined&&I.constructor!=Number){var D=/^\-\=/.test(I),C=/^\+\=/.test(I);if(D||C){I=this.value(null,"y")+this._round(I.replace(D?"=":"+=",""))}else{I=isNaN(this._round(I))?undefined:this._round(I)}}if(H.axis!="vertical"&&B!==undefined){if(H.stepping.x){B=this._round(B/H.stepping.x)*H.stepping.x}B=this._translateValue(B,"x");B=this._translateLimits(B,"x");B=this._translateRange(B,"x");H.animate?this.currentHandle.stop().animate({left:B},(Math.abs(parseInt(this.currentHandle.css("left"),10)-B))*(!isNaN(parseInt(H.animate,10))?H.animate:5)):this.currentHandle.css({left:B})}if(H.axis!="horizontal"&&I!==undefined){if(H.stepping.y){I=this._round(I/H.stepping.y)*H.stepping.y}I=this._translateValue(I,"y");I=this._translateLimits(I,"y");I=this._translateRange(I,"y");H.animate?this.currentHandle.stop().animate({top:I},(Math.abs(parseInt(this.currentHandle.css("top"),10)-I))*(!isNaN(parseInt(H.animate,10))?H.animate:5)):this.currentHandle.css({top:I})}if(this.rangeElement){this._updateRange()}this.currentHandle.data("mouse").sliderValue={x:this._round(this._convertValue(B,"x"))||0,y:this._round(this._convertValue(I,"y"))||0};if(!G){this._propagate("start",null);this._propagate("slide",null);this._propagate("stop",null);this._propagate("change",null)}},_propagate:function(C,B){A.ui.plugin.call(this,C,[B,this.ui()]);this.element.triggerHandler(C=="slide"?C:"slide"+C,[B,this.ui()],this.options[C])},plugins:{},ui:function(B){return{options:this.options,handle:this.currentHandle,value:this.options.axis!="both"||!this.options.axis?this._round(this.value(null,this.options.axis=="vertical"?"y":"x")):{x:this._round(this.value(null,"x")),y:this._round(this.value(null,"y"))},range:this._getRange()}}});A.extend(A.ui.slider,{getter:"value",version:"1.6",defaults:{animate:false,distance:1,handle:".ui-slider-handle",round:true}})})(jQuery);/*
+ * jQuery UI Tabs 1.6
+ *
+ * Copyright (c) 2008 AUTHORS.txt (http://ui.jquery.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Tabs
+ *
+ * Depends:
+ *	ui.core.js
+ */
(function(A){A.widget("ui.tabs",{_init:function(){this._tabify(true)},destroy:function(){var B=this.options;this.element.unbind(".tabs").removeClass(B.navClass).removeData("tabs");this.$tabs.each(function(){var C=A.data(this,"href.tabs");if(C){this.href=C}var D=A(this).unbind(".tabs");A.each(["href","load","cache"],function(E,F){D.removeData(F+".tabs")})});this.$lis.add(this.$panels).each(function(){if(A.data(this,"destroy.tabs")){A(this).remove()}else{A(this).removeClass([B.selectedClass,B.deselectableClass,B.disabledClass,B.panelClass,B.hideClass].join(" "))}});if(B.cookie){this._cookie(null,B.cookie)}},_setData:function(B,C){if((/^selected/).test(B)){this.select(C)}else{this.options[B]=C;this._tabify()}},length:function(){return this.$tabs.length},_tabId:function(B){return B.title&&B.title.replace(/\s/g,"_").replace(/[^A-Za-z0-9\-_:\.]/g,"")||this.options.idPrefix+A.data(B)},_sanitizeSelector:function(B){return B.replace(/:/g,"\\:")},_cookie:function(){var B=this.cookie||(this.cookie="ui-tabs-"+A.data(this.element[0]));return A.cookie.apply(null,[B].concat(A.makeArray(arguments)))},_tabify:function(N){this.$lis=A("li:has(a[href])",this.element);this.$tabs=this.$lis.map(function(){return A("a",this)[0]});this.$panels=A([]);var O=this,C=this.options;this.$tabs.each(function(Q,P){if(P.hash&&P.hash.replace("#","")){O.$panels=O.$panels.add(O._sanitizeSelector(P.hash))}else{if(A(P).attr("href")!="#"){A.data(P,"href.tabs",P.href);A.data(P,"load.tabs",P.href);var S=O._tabId(P);P.href="#"+S;var R=A("#"+S);if(!R.length){R=A(C.panelTemplate).attr("id",S).addClass(C.panelClass).insertAfter(O.$panels[Q-1]||O.element);R.data("destroy.tabs",true)}O.$panels=O.$panels.add(R)}else{C.disabled.push(Q+1)}}});if(N){this.element.addClass(C.navClass);this.$panels.addClass(C.panelClass);if(C.selected===undefined){if(location.hash){this.$tabs.each(function(Q,P){if(P.hash==location.hash){C.selected=Q;return false}})}else{if(C.cookie){var I=parseInt(O._cookie(),10);if(I&&O.$tabs[I]){C.selected=I}}else{if(O.$lis.filter("."+C.selectedClass).length){C.selected=O.$lis.index(O.$lis.filter("."+C.selectedClass)[0])}}}}C.selected=C.selected===null||C.selected!==undefined?C.selected:0;C.disabled=A.unique(C.disabled.concat(A.map(this.$lis.filter("."+C.disabledClass),function(Q,P){return O.$lis.index(Q)}))).sort();if(A.inArray(C.selected,C.disabled)!=-1){C.disabled.splice(A.inArray(C.selected,C.disabled),1)}this.$panels.addClass(C.hideClass);this.$lis.removeClass(C.selectedClass);if(C.selected!==null){this.$panels.eq(C.selected).removeClass(C.hideClass);var E=[C.selectedClass];if(C.deselectable){E.push(C.deselectableClass)}this.$lis.eq(C.selected).addClass(E.join(" "));var J=function(){O._trigger("show",null,O.ui(O.$tabs[C.selected],O.$panels[C.selected]))};if(A.data(this.$tabs[C.selected],"load.tabs")){this.load(C.selected,J)}else{J()}}A(window).bind("unload",function(){O.$tabs.unbind(".tabs");O.$lis=O.$tabs=O.$panels=null})}else{C.selected=this.$lis.index(this.$lis.filter("."+C.selectedClass)[0])}if(C.cookie){this._cookie(C.selected,C.cookie)}for(var G=0,M;M=this.$lis[G];G++){A(M)[A.inArray(G,C.disabled)!=-1&&!A(M).hasClass(C.selectedClass)?"addClass":"removeClass"](C.disabledClass)}if(C.cache===false){this.$tabs.removeData("cache.tabs")}var B,H;if(C.fx){if(C.fx.constructor==Array){B=C.fx[0];H=C.fx[1]}else{B=H=C.fx}}function D(P,Q){P.css({display:""});if(A.browser.msie&&Q.opacity){P[0].style.removeAttribute("filter")}}var K=H?function(P,Q){Q.animate(H,H.duration||"normal",function(){Q.removeClass(C.hideClass);D(Q,H);O._trigger("show",null,O.ui(P,Q[0]))})}:function(P,Q){Q.removeClass(C.hideClass);O._trigger("show",null,O.ui(P,Q[0]))};var L=B?function(Q,P,R){P.animate(B,B.duration||"normal",function(){P.addClass(C.hideClass);D(P,B);if(R){K(Q,R,P)}})}:function(Q,P,R){P.addClass(C.hideClass);if(R){K(Q,R)}};function F(R,T,P,S){var Q=[C.selectedClass];if(C.deselectable){Q.push(C.deselectableClass)}T.addClass(Q.join(" ")).siblings().removeClass(Q.join(" "));L(R,P,S)}this.$tabs.unbind(".tabs").bind(C.event+".tabs",function(){var S=A(this).parents("li:eq(0)"),P=O.$panels.filter(":visible"),R=A(O._sanitizeSelector(this.hash));if((S.hasClass(C.selectedClass)&&!C.deselectable)||S.hasClass(C.disabledClass)||A(this).hasClass(C.loadingClass)||O._trigger("select",null,O.ui(this,R[0]))===false){this.blur();return false}C.selected=O.$tabs.index(this);if(C.deselectable){if(S.hasClass(C.selectedClass)){O.options.selected=null;S.removeClass([C.selectedClass,C.deselectableClass].join(" "));O.$panels.stop();L(this,P);this.blur();return false}else{if(!P.length){O.$panels.stop();var Q=this;O.load(O.$tabs.index(this),function(){S.addClass([C.selectedClass,C.deselectableClass].join(" "));K(Q,R)});this.blur();return false}}}if(C.cookie){O._cookie(C.selected,C.cookie)}O.$panels.stop();if(R.length){var Q=this;O.load(O.$tabs.index(this),P.length?function(){F(Q,S,P,R)}:function(){S.addClass(C.selectedClass);K(Q,R)})}else{throw"jQuery UI Tabs: Mismatching fragment identifier."}if(A.browser.msie){this.blur()}return false});if(C.event!="click"){this.$tabs.bind("click.tabs",function(){return false})}},add:function(E,D,C){if(C==undefined){C=this.$tabs.length}var G=this.options;var I=A(G.tabTemplate.replace(/#\{href\}/g,E).replace(/#\{label\}/g,D));I.data("destroy.tabs",true);var H=E.indexOf("#")==0?E.replace("#",""):this._tabId(A("a:first-child",I)[0]);var F=A("#"+H);if(!F.length){F=A(G.panelTemplate).attr("id",H).addClass(G.hideClass).data("destroy.tabs",true)}F.addClass(G.panelClass);if(C>=this.$lis.length){I.appendTo(this.element);F.appendTo(this.element[0].parentNode)}else{I.insertBefore(this.$lis[C]);F.insertBefore(this.$panels[C])}G.disabled=A.map(G.disabled,function(K,J){return K>=C?++K:K});this._tabify();if(this.$tabs.length==1){I.addClass(G.selectedClass);F.removeClass(G.hideClass);var B=A.data(this.$tabs[0],"load.tabs");if(B){this.load(C,B)}}this._trigger("add",null,this.ui(this.$tabs[C],this.$panels[C]))},remove:function(B){var D=this.options,E=this.$lis.eq(B).remove(),C=this.$panels.eq(B).remove();if(E.hasClass(D.selectedClass)&&this.$tabs.length>1){this.select(B+(B+1<this.$tabs.length?1:-1))}D.disabled=A.map(A.grep(D.disabled,function(G,F){return G!=B}),function(G,F){return G>=B?--G:G});this._tabify();this._trigger("remove",null,this.ui(E.find("a")[0],C[0]))},enable:function(B){var C=this.options;if(A.inArray(B,C.disabled)==-1){return }var D=this.$lis.eq(B).removeClass(C.disabledClass);if(A.browser.safari){D.css("display","inline-block");setTimeout(function(){D.css("display","block")},0)}C.disabled=A.grep(C.disabled,function(F,E){return F!=B});this._trigger("enable",null,this.ui(this.$tabs[B],this.$panels[B]))},disable:function(C){var B=this,D=this.options;if(C!=D.selected){this.$lis.eq(C).addClass(D.disabledClass);D.disabled.push(C);D.disabled.sort();this._trigger("disable",null,this.ui(this.$tabs[C],this.$panels[C]))}},select:function(B){if(typeof B=="string"){B=this.$tabs.index(this.$tabs.filter("[href$="+B+"]")[0])}this.$tabs.eq(B).trigger(this.options.event+".tabs")},load:function(G,K){var L=this,D=this.options,E=this.$tabs.eq(G),J=E[0],H=K==undefined||K===false,B=E.data("load.tabs");K=K||function(){};if(!B||!H&&A.data(J,"cache.tabs")){K();return }var M=function(N){var O=A(N),P=O.find("*:last");return P.length&&P.is(":not(img)")&&P||O};var C=function(){L.$tabs.filter("."+D.loadingClass).removeClass(D.loadingClass).each(function(){if(D.spinner){M(this).parent().html(M(this).data("label.tabs"))}});L.xhr=null};if(D.spinner){var I=M(J).html();M(J).wrapInner("<em></em>").find("em").data("label.tabs",I).html(D.spinner)}var F=A.extend({},D.ajaxOptions,{url:B,success:function(P,N){A(L._sanitizeSelector(J.hash)).html(P);C();if(D.cache){A.data(J,"cache.tabs",true)}L._trigger("load",null,L.ui(L.$tabs[G],L.$panels[G]));try{D.ajaxOptions.success(P,N)}catch(O){}K()}});if(this.xhr){this.xhr.abort();C()}E.addClass(D.loadingClass);L.xhr=A.ajax(F)},url:function(C,B){this.$tabs.eq(C).removeData("cache.tabs").data("load.tabs",B)},ui:function(C,B){return{options:this.options,tab:C,panel:B,index:this.$tabs.index(C)}}});A.extend(A.ui.tabs,{version:"1.6",getter:"length",defaults:{ajaxOptions:null,cache:false,cookie:null,deselectable:false,deselectableClass:"ui-tabs-deselectable",disabled:[],disabledClass:"ui-tabs-disabled",event:"click",fx:null,hideClass:"ui-tabs-hide",idPrefix:"ui-tabs-",loadingClass:"ui-tabs-loading",navClass:"ui-tabs-nav",panelClass:"ui-tabs-panel",panelTemplate:"<div></div>",selectedClass:"ui-tabs-selected",spinner:"Loading&#8230;",tabTemplate:'<li><a href="#{href}"><span>#{label}</span></a></li>'}});A.extend(A.ui.tabs.prototype,{rotation:null,rotate:function(C,F){F=F||false;var B=this,E=this.options.selected;function G(){B.rotation=setInterval(function(){E=++E<B.$tabs.length?E:0;B.select(E)},C)}function D(H){if(!H||H.clientX){clearInterval(B.rotation)}}if(C){G();if(!F){this.$tabs.bind(this.options.event+".tabs",D)}else{this.$tabs.bind(this.options.event+".tabs",function(){D();E=B.options.selected;G()})}}else{D();this.$tabs.unbind(this.options.event+".tabs",D)}}})})(jQuery);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/preview/script/lib/console.js	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,121 @@
+//	for console support
+if ((typeof window.parent.console == 'undefined') || ( (/AppleWebKit/i.test(navigator.userAgent)) && !(/Version/i.test(navigator.userAgent))) ){
+	window.console = {
+	
+			sprintf: function(args){
+				if (typeof args == 'undefined') {
+					return null;
+				}
+				
+				if (args.length < 1) {
+					return null;
+				};
+				
+				if (typeof args[0] != 'string') {
+					return null;
+				}
+				
+				if (typeof RegExp == 'undefined') {
+					return null;
+				}
+				
+				if (args.length == 1) {
+					return args[0];
+				}
+				
+				
+				var str = args[0];
+				var newString = args[0];
+				var arr = new Array();
+				var exp = new RegExp(/[^%](%)([a-zA-Z])/g);
+				var match = null;
+				var lastMatch = 0;
+				var argPos = 1;
+				while (match = exp.exec(str) && argPos < args.length) {
+					if (str[exp.lastIndex - 1] == "%") {
+						
+					}
+					else 
+						if (str[exp.lastIndex - 1] == "d") {
+							arr.push(str.substring(lastMatch, exp.lastIndex - 2));
+							arr.push(args[argPos++]);
+						}
+						else 
+							if (str[exp.lastIndex - 1] == "i") {
+								arr.push(str.substring(lastMatch, exp.lastIndex - 2));
+								arr.push(args[argPos++]);
+							}
+							else 
+								if (str[exp.lastIndex - 1] == "f") {
+									arr.push(str.substring(lastMatch, exp.lastIndex - 2));
+									arr.push(args[argPos++]);
+								}
+								else 
+									if (str[exp.lastIndex - 1] == "s") {
+										arr.push(str.substring(lastMatch, exp.lastIndex - 2));
+										arr.push(args[argPos++]);
+									}
+									else 
+										if (str[exp.lastIndex - 1] != "%") {
+											arr.push(str.substring(lastMatch, exp.lastIndex - 2));
+											arr.push("\"");
+											arr.push(args[argPos++]);
+											arr.push("\"");
+										}
+					lastMatch = exp.lastIndex;
+				}
+				if (lastMatch < str.length) {
+					arr.push(str.substring(lastMatch, str.length));
+				}
+				while (argPos < args.length) {
+					arr.push(" ");
+					arr.push(args[argPos++]);
+				}
+				return arr.join("").replace(/\%\%/g,"%");
+			},
+		error: function(){
+			var errorStr = console.sprintf(arguments);
+			if (errorStr) {
+				_BRIDGE_REF.nokia.layout.log('error', errorStr);
+			}
+		},
+		info: function(){
+			var errorStr = console.sprintf(arguments);
+			if (errorStr) {
+				_BRIDGE_REF.nokia.layout.log('info', errorStr);
+			}
+		},
+		warn: function(){
+			var errorStr = console.sprintf(arguments);
+			if (errorStr) {
+				_BRIDGE_REF.nokia.layout.log('warn', errorStr);
+			}
+		},
+		log: function(){
+			var errorStr = console.sprintf(arguments);
+			if (errorStr) {
+				_BRIDGE_REF.nokia.layout.log('log', errorStr);
+			}
+		},
+		debug: function(){
+			var errorStr = console.sprintf(arguments);
+			if (errorStr) {
+				_BRIDGE_REF.nokia.layout.log('debug', errorStr);
+			}
+		},
+		assert: function(){
+			var errorStr = console.sprintf(arguments);
+			if (errorStr) {
+				//	@todo
+			}
+		}
+	}
+	
+	//	enable the Console.
+	_BRIDGE_REF.nokia.layout._console_enabled = true;
+	_BRIDGE_REF.nokia.layout.render();
+
+}
+
+//	make TRUE console.js script loaded
+window.parent.NOKIA.scriptsLoaded.console = true;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/preview/script/lib/device.js	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,544 @@
+/**
+ * device.js
+ * 
+ * Nokia Web Runtime Service API emulation 
+ * WRT v1.1
+ * 
+ * Copyright 2009 Nokia Corporation. All rights reserved.
+*/
+
+
+/**
+ * device object. entry point to device service API (SAPI)
+ */
+var device = {
+	/**
+	 * device API public method
+	 * 
+	 * @method
+	 * @param {string} provider Name of service provider, eg, "Service.Calendar"
+	 * @param {string} Interface Name of interface, eg, "IDataSource"
+	 * @return {Object} service object  
+	 */
+	getServiceObject: function(provider, Interface){
+
+		if (!device.implementation.context)
+			throw 'device implementation object not instantiated!'
+
+		if (device.implementation.options.enabled) 
+			return device.implementation.getInterface(provider, Interface);
+		else {
+			device.implementation.context.notify('device SAPI is disabled.');
+			throw 'device not defined!';
+		}
+	}
+};
+
+
+
+/**
+ * implementation of device emulation mode
+ * 
+ * @param {String} 		version - version number (default: current version)
+ * @return {Object} 	returns new implementation context object 
+ * @constructor 		
+ */
+device.implementation = function(version){
+
+	this.version = version || '';
+	
+	// set context to current object
+	device.implementation.context = this;	
+
+	var libpath = 'preview/script/lib/',
+		datapath = 'preview/data/';
+	
+	// load implementation files
+	// this is done async by the browser engine, so be aware of sync conditions!!
+	if (version == '1')
+		loadSAPI(libpath + 'sapi1/');
+	else if (!version)
+		loadSAPI();
+	else
+		throw 'unsuppported SAPI version!';
+	
+	function loadSAPI(path){
+		var path = path || (libpath + "sapi/");
+		
+		// load API
+		loadScript(path + "AppManager.js");
+		loadScript(path + "Calendar.js");
+		loadScript(path + "Contact.js");
+		loadScript(path + "Landmarks.js");
+		loadScript(path + "Location.js");
+		loadScript(path + "Logging.js");
+		loadScript(path + "MediaManagement.js");
+		loadScript(path + "Messaging.js");
+		loadScript(path + "Sensor.js");
+		loadScript(path + "SysInfo.js");
+		
+		// load sample data
+		loadScript(datapath + "appManager_data.js");
+		loadScript(datapath + "calendar_data.js");
+		loadScript(datapath + "contact_data.js");
+		loadScript(datapath + "landmarks_data.js");
+		loadScript(datapath + "location_data.js");
+		loadScript(datapath + "logging_data.js");
+		loadScript(datapath + "mediaManagement_data.js");
+		loadScript(datapath + "messaging_data.js");
+		loadScript(datapath + "sensor_data.js");
+		loadScript(datapath + "sysInfo_data.js");
+	}
+	
+	function loadScript(src){
+		var head = document.getElementsByTagName("head")[0] || document.documentElement, 
+			script = document.createElement("script");
+		
+		script.type = "text/javascript";
+		script.src = src;
+		head.appendChild(script);
+	}
+};
+
+(function(){
+device.implementation.prototype = {
+	
+	/**
+	 * Result object
+	 * 
+	 * object returned by API calls
+	 * 
+	 * @param {Object} value
+	 * @param {Integer} code
+	 * @param {String} msg
+	 */
+	Result : function(value, code, msg){
+		return {
+			ReturnValue	: value,
+			ErrorCode	: code || 0,
+			ErrorMessage: msg || undefined
+		};
+	},
+	
+	/**
+	 * AsyncResult object
+	 * 
+	 * object returned by API calls with callbacks
+	 * 
+	 * @param {Integer} transaction id
+	 * @param {Integer} code
+	 * @param {String} msg
+	 */
+	AsyncResult : function(id, code, msg){
+		return {
+			TransactionID	: id,
+			ErrorCode		: code || 0,
+			ErrorMessage	: msg || undefined
+		};
+	},
+	/**
+	 * ErrorResult object
+	 * 
+	 * object returned by API calls when error
+	 * 
+	 * @param {Integer} code
+	 * @param {String} msg
+	 */
+	ErrorResult : function(code, msg){
+		device.implementation.context.debug(code, msg);		
+		return {
+			ErrorCode	: code || 0,
+			ErrorMessage: msg || undefined
+		};
+	},
+	
+	/**
+	 * Iterator object
+	 * 
+	 * object returned as ReturnValue by some API
+	 * 
+	 * @param {Array} data
+	 */
+	Iterator : function(data){
+		var index = 0,
+			data = data || [];
+		return {
+			/**
+			 * reset
+			 */
+			reset : function(){
+				index = 0;
+			},
+			
+			/**
+	 		* getNext
+	 		*/
+			getNext : function(){
+				return index < data.length ? data[index++] : undefined;
+			}
+		}
+	},
+	
+	
+	/**
+	 * internal __methods__
+	 */
+	
+	$break: 	{}, // 'not implemented',
+	
+	debug: function() {
+		if (device.implementation.options.debug && window.console && console.log) 
+			console.log(arguments);
+	},
+	
+	// notify developer of api action
+	notify: function(msg){
+		if (window.console && console.warn)
+			console.warn('API Notice -- ' + msg);
+	},
+	
+	getData : function(provider){
+		if (!device.implementation.data[provider])
+			throw "no data defined for provider '"+provider+"'";
+		
+		if (device.implementation.data[provider]['default'])
+			return device.implementation.data[provider]['default'];
+		else 
+			return device.implementation.data[provider]; 
+	},	
+	
+	getUniqueID : function(){
+		return Number(''+Number(new Date())+ Math.floor(1000*Math.random()));
+	},
+	
+	callAsync : function(object, method, criteria, callback, flag){
+		flag = flag || false;
+		var tid = setTimeout(function(){
+			var result,
+				eventCode = {completed:2, error:4, progress:9},
+				code = eventCode.completed;
+			try{
+				// call method in object's context
+				// flag is passed to trigger the method in case of mandatory callback arg
+				if (flag)
+					result = method.call(object, criteria, null, flag);
+				else
+					result = method.call(object, criteria);
+			} 
+			catch(e){
+				code = eventCode.error;
+			}
+			callback(tid, code, result);
+			
+		}, device.implementation.options.callbackDelay);
+		
+		return this.AsyncResult(tid);
+	},
+		
+	addListener : function(provider, eventType, criteria, callback, handler){
+		if (!device.implementation.listeners[provider])
+			device.implementation.listeners[provider] = {};
+			
+		var tid = this.getUniqueID();
+		device.implementation.listeners[provider][eventType] = {
+			'criteria': criteria,
+			'callback': callback,
+			'handler': handler,
+			'transactionID' : tid
+		};
+		return this.AsyncResult(tid);
+	},
+
+	/*
+	 * specify either eventType or transactionID
+	 * return true if found and removed
+	 */
+	removeListener: function(provider, eventType, transactionID){
+		transactionID = transactionID || null;
+		if (transactionID) {
+			var allEvents = device.implementation.listeners[provider];
+			for (var i in allEvents) {
+				var event = allEvents[i];
+				if (event.transactionID == transactionID) {
+					device.implementation.listeners[provider][i] = null;
+					delete device.implementation.listeners[provider][i];
+					return true;
+				}
+			}
+		}
+		else 
+			if (eventType &&
+			this.hasListener(provider, eventType)) {
+				device.implementation.listeners[provider][eventType] = null;
+				delete device.implementation.listeners[provider][eventType];
+				return true;
+			}
+		return false;
+	},
+
+	hasListener: function(provider, eventType) {	
+		if (!device.implementation.listeners[provider]
+			|| !device.implementation.listeners[provider][eventType])
+			return false;
+				
+		return true;
+	},
+
+	// pluck object properties as array	
+	keys: function(obj) {
+		var keys = [];
+		for (var p in obj)
+			keys.push(p);
+		return keys;
+	},
+	
+	// extend object properties 
+	extend: function(root, ext) {
+		for (var p in ext)
+			root[p] = ext[p];
+		return root;
+	},
+	
+	// extended text string functionality 
+	_t: function(str){
+		
+		str = typeof str != 'undefined' ? String(str) : '';
+		return new StringEx(str);
+	}		
+};
+
+	/**
+	 * extended String object (available only within device.implementation.context through _t() method)
+	 */ 
+	var StringEx = function(str){
+		// define base String non-transferrable methods!
+		this.toString = function(){return str;};
+		this.valueOf = function(){return str.valueOf();};
+	};
+	StringEx.prototype = new String();
+
+	
+	/**
+	 * simple sprintf-type functionality
+	 * 
+	 * "string {title} %s and %s and {here} ".arg({title:'T', here:'H'}, 1, 'there')"
+	 * ==> string T 1 and there and H
+	 * hash (if present) must be first argument
+	 *
+	 * @param {Object} [hash] optional hash to replace {tags}
+	 * @param {String,Number} data for %s tags
+	 * @return {String} original string with tags replaced   
+	 */
+	StringEx.prototype.arg = function(){
+	    var pattern = /\%s|\{\w+\}/g;
+	    var args = arguments, 
+			len = arguments.length, 
+			hash = arguments[0],
+			i = typeof hash == 'object' && !(hash instanceof String) ? 1 : 0;
+			
+	    return this.replace(pattern, function(capture){
+			var key = capture != '%s' && capture.match(/\w+/);
+			if (key)
+				return hash && hash[key] ? hash[key] : capture;
+			else		
+				return i < len ? args[i++] : capture;
+		});
+	}
+	
+	/**
+	 * trim whitespace from beginning and end of string
+	 * @return {String} trimmed string
+	 */
+	StringEx.prototype.trim = function(){
+		return this.replace(/^\s+/, '').replace(/\s+$/, '');
+	}
+	
+	/**
+	 * capitalize string
+	 * @return {String} capitalized string
+	 */
+	StringEx.prototype.capitalize = function(){
+    	return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
+	}
+	
+})();
+
+
+/*
+ * device.implementation static (class) properties
+ */
+
+
+/**
+ * pointer to current instantiated device.implementation object.
+ * use to access device.implemenation namespace.
+ * 
+ * @see device.implementation 
+ */
+device.implementation.context = null;	
+
+
+/**
+ * emulation settings options
+ */
+device.implementation.options = {
+	
+	/**
+	 * callback delay (msec)
+	 * @property {Number} 
+	 */
+	callbackDelay	: 1200,
+	
+	/**
+	 * debug flag
+	 * @property {Boolean} 
+	 */
+	debug			: false,
+	
+	/**
+	 * enabled flag
+	 * @property {Boolean} 
+	 */
+	enabled			: true
+};
+
+
+/**
+ * store of interfaces (objects) in the current device implementation.
+ * format: [provider][interface]
+ * 
+ * @property {Object} 
+ */
+device.implementation.interfaces = {};
+
+
+/**
+ * store of data objects defined for current implementation.
+ * data is added useing the loadData method. 
+ * 
+ * @property {Object} format depends on data
+ */
+device.implementation.data = {};
+
+
+/**
+ * store of event listeners
+ * format: [provider][eventType]
+ */
+device.implementation.listeners = {}; 
+
+
+/*
+ * device.implementation static (class) methods
+ */
+
+
+/**
+ * Add a service provider to device implementation
+ * 
+ * @param {string} provider Name of service provider, eg, "Service.Calendar"
+ * @param {string} Interface Name of interface, eg, "IDataService"
+ * @param {Object} serviceProvider Service object
+ * @return  none
+ */
+device.implementation.extend = function(provider, Interface, serviceProvider){
+
+	if (!device.implementation.interfaces[provider])
+		device.implementation.interfaces[provider] = {}; 
+	
+	device.implementation.interfaces[provider][Interface] = serviceProvider;
+};
+
+
+/**
+ * Internal implementation to return a service provider interface object
+ * 
+ * @param {String} provider  Service provider name 
+ * @param {String} Interface	Provider interface name
+ * @exception {String} exception thrown if provider or interface is not implemented 
+ * @return {Object} the service provider interface object or 'undefined'
+ */	
+device.implementation.getInterface = function(provider, Interface){
+		
+	if (device.implementation.interfaces[provider] 
+		&& typeof device.implementation.interfaces[provider][Interface] == 'object') 
+	{
+		var service = new Object();
+		service[Interface] = device.implementation.interfaces[provider][Interface];
+		return service;
+	}
+	else
+		throw 'Error: unknown error'; 
+};
+
+
+/**
+ * Loads data to the data store
+ * 
+ * @param {String} provider  Service provider name 
+ * @param {String} type Data name/label
+ * @param {Function,Object,Array} dataFactory Function to generate the data object, or array/object
+ * @return none
+ */
+device.implementation.loadData = function(provider, type, dataFactory){
+
+	type = type || 'default';
+	if (!device.implementation.data[provider]) 
+		device.implementation.data[provider] = {};
+		
+	device.implementation.data[provider][type] = 
+		typeof dataFactory == 'function' 
+			? dataFactory()
+			: dataFactory;
+};
+
+
+/**
+ * trigger an event listener
+ * 
+ * @param {String} provider Service provider name
+ * @param {String} eventType event type 
+ * @param {Variant} data ReturnValue for callback function 
+ */
+device.implementation.triggerListener = function(provider, eventType, data){
+
+	if (!device.implementation.context.hasListener(provider, eventType)) {
+		device.implementation.context.notify('no listener defined for provider=' + provider + ', eventType=' + eventType);
+		return;
+	}
+	var listener = device.implementation.listeners[provider][eventType];
+
+	// call the provider's handler
+	listener.handler(listener.transactionID, listener.criteria, listener.callback, data);
+}
+
+
+
+/*
+ * ERROR CODES
+ */
+device.implementation.ERR_SUCCESS			 		= 0;
+device.implementation.ERR_INVALID_SERVICE_ARGUMENT	= 1000;
+device.implementation.ERR_UNKNOWN_ARGUMENT_NAME		= 1001;
+device.implementation.ERR_BAD_ARGUMENT_TYPE			= 1002;
+device.implementation.ERR_MISSING_ARGUMENT 			= 1003;
+device.implementation.ERR_SERVICE_NOT_SUPPORTED		= 1004;
+device.implementation.ERR_SERVICE_IN_USE 			= 1005;
+device.implementation.ERR_SERVICE_NOT_READY 		= 1006;
+device.implementation.ERR_NO_MEMORY		 			= 1007;
+device.implementation.ERR_HARDWARE_NOT_AVAILABLE	= 1008;
+device.implementation.ERR_SEVER_BUSY				= 1009;
+device.implementation.ERR_ENTRY_EXISTS				= 1010;
+device.implementation.ERR_ACCESS_DENIED				= 1011;
+device.implementation.ERR_NOT_FOUND					= 1012;
+device.implementation.ERR_UNKNOWN_FORMAT			= 1013;
+device.implementation.ERR_GENERAL_ERROR				= 1014;
+device.implementation.ERR_CANCEL_SUCCESS			= 1015;
+device.implementation.ERR_SERVICE_TIMEDOUT			= 1016;
+device.implementation.ERR_PATH_NOT_FOUND			= 1017;
+
+
+
+// instantiate device imlementation
+new device.implementation();
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/preview/script/lib/loader.js	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,121 @@
+/*
+ * Emulator, which manages the device interacations
+ */
+if (typeof _BRIDGE_REF == "undefined" || !_BRIDGE_REF) {
+
+	var _BRIDGE_REF = {
+		parent: window.parent || false,
+		nokia: window.parent.NOKIA || false,
+		sysInfoObject : null
+	};
+
+	_BRIDGE_REF.namespace = function(name){
+		var parts = name.split('.');
+		var current = _BRIDGE_REF;
+		for (var key in parts) {
+			if (!current[parts[key]]) {
+				current[parts[key]] = {};
+			}
+			current = current[parts[key]];
+		}
+	};
+	
+	/*
+	 * _BRIDGE_REF.helper functions
+	 */
+	_BRIDGE_REF.namespace('helper.loadScript');
+	_BRIDGE_REF.helper = {
+		path: document.location.pathname,
+		loadScript: function(path){
+			var head = document.getElementsByTagName("head")[0] || document.documentElement;
+			var script = document.createElement("script");
+			
+			script.type = "text/javascript";
+			script.src = path;
+			head.appendChild(script);
+		},
+		
+		addEvent: function(obj, type, fn){
+			if (obj.addEventListener) {
+				obj.addEventListener(type, fn, false);
+			}
+			else 
+				if (obj.attachEvent) {
+					obj["e" + type + fn] = fn;
+					obj[type + fn] = function(){
+						obj["e" + type + fn](window.event);
+					}
+					obj.attachEvent("on" + type, obj[type + fn]);
+				}
+		},
+		
+		getElementsLengthInObject : function(items){
+			var count = 0;
+			for (var i in items) 
+				count++;
+			
+			return count;
+		},
+		
+		getBatteryStrength : function(){
+			
+		},
+		
+		console : function(){
+			if (!typeof window.console) {
+				_BRIDGE_REF.helper.loadScript("preview/script/lib/console.js");
+			}			
+		}
+		
+	};
+	
+	
+	/*
+	 Load Scripts
+	 */
+	_BRIDGE_REF.helper.loadScript("preview/script/lib/widget.js");
+	_BRIDGE_REF.helper.loadScript("preview/script/lib/systeminfo.js");
+	_BRIDGE_REF.helper.loadScript("preview/script/lib/menu.js");
+	_BRIDGE_REF.helper.loadScript("preview/script/lib/menuItem.js");
+	_BRIDGE_REF.helper.loadScript("preview/script/lib/console.js");
+
+	//	Inject SAPI scripts	
+	if (_BRIDGE_REF.nokia) {
+		var wrtVersion = _BRIDGE_REF.nokia.helper.readCookie('_WRT_VERSION');
+		if ((typeof wrtVersion == 'undefined') || (wrtVersion == 'WRT 1.1')) {
+			_BRIDGE_REF.nokia.version = 'WRT 1.1';
+			_BRIDGE_REF.nokia.helper.createCookie('_WRT_VERSION', 'WRT 1.1');
+			_BRIDGE_REF.helper.loadScript("preview/script/lib/device.js");
+		}
+		else {
+			_BRIDGE_REF.nokia.version = 'WRT 1.0';
+		}
+	}
+	else {
+		_BRIDGE_REF.helper.loadScript("preview/script/lib/device.js");
+	}
+
+	/*
+	 window native functions over-riding
+	 */
+	if ( (typeof window.frameElement != 'undefined') && (typeof _BRIDGE_REF.nokia  != 'undefined') && window !== window.parent) {
+		//	alert
+		window.alert = function(msg){
+			return window.parent.alert(msg);
+		};
+		
+		//	confirm
+		window.confirm = function(msg){
+			return window.parent.confirm(msg);
+		};
+		
+		//	prompt
+		window.prompt = function(msg, str){
+			return window.parent.prompt(msg, str)
+		};
+	}
+
+	//	make TRUE loader.js script loaded
+	window.parent.NOKIA.scriptsLoaded.loader = true;
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/preview/script/lib/menu.js	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,497 @@
+/**
+ * widget object constructor
+ * @param {void}
+ *     widget()
+ * @return {void}
+ */ 
+
+if (typeof window.menu == "undefined" || !window.menu) 
+{
+	window.menu = 
+	{
+		author : 'Nokia WRT Emulation Library',
+		items : [],
+		index : null,
+		isDimmed : false,	
+			
+		//	Event triggers
+		onShow : null,
+		onRightSoftKeySelect : null,
+	};
+	
+	
+	/*
+		Function 	:	menu.append()
+		Argument	:	MenuItem Object
+		Returns		:	Void
+		Description	:	Function appends MenuItem to a Menu Object
+	*/
+	menu.append = function(MenuItem)
+	{
+		if(this.allowedTypeOf(MenuItem))
+		{
+			var i;
+			var flag = true;
+			try{
+			for(var key in this.items)
+			{
+				if(this.items[key].id == MenuItem.id)
+				{	
+					flag = false; 
+					break; 
+				}
+			}} catch(e){ }
+			if(flag)
+			{
+				//	MenuItem.parent = this;
+				this.items[MenuItem.id] = MenuItem;
+			}
+		}
+	}
+	
+	
+	/*
+		Function 	:	menu.remove()
+		Argument	:	MenuItem Object
+		Returns		:	Void
+		Description	:	Function Remove the menuItem and its children from the container options menu.
+	*/
+	menu.remove = function(MenuItem)
+	{
+		if(!this.allowedTypeOf(MenuItem))
+			return false;
+	
+		var flag = false;
+		if (this.items.length) {
+			for (var key in this.items) {
+				if (this.items[key].id == MenuItem.id) {
+					flag = true;
+					break;
+				}
+			}
+		}
+		if(flag)
+		{
+			this.items.splice(key, 1);
+		}
+	}
+	
+	/*
+		Function 	:	menu.clear()
+		Argument	:	Void
+		Returns		:	Void
+		Description	:	Clears (deletes) all the menu items in the menupane.
+	*/
+	menu.clear = function()
+	{
+		try
+		{
+			this.items.splice(0, this.items.length);
+		}catch(e){}
+	}
+	
+	
+	/*
+		Function 	:	Menu.getMenuItemById(id)
+		Argument	:	Integer
+		Returns		:	MenuItem Object
+		Description	:	Function get the MenuItem Object with the reference of id
+	*/
+	menu.getMenuItemById = function(id)
+	{
+		var menuItemRef = menu.menuItemExhistsById(this, id, 0);
+		if(this.allowedTypeOf(menuItemRef))
+			return menuItemRef;
+		else
+			return undefined;
+	}
+	
+	
+	/*
+		Function 	:	Menu.getMenuItemByName(name)
+		Argument	:	String
+		Returns		:	MenuItem Object
+		Description	:	Function get the MenuItem Object with the reference of String name
+	*/
+	menu.getMenuItemByName = function(name)
+	{
+		var menuItemRef = menu.menuItemExhistsById(this, name, 1);
+	
+	//	if(menuItemRef !=null)
+		if(this.allowedTypeOf(menuItemRef))
+			return menuItemRef;
+		else
+			return undefined;
+	}
+	
+	/*
+		Function 	:	Menu.setRightSoftkeyLabel()
+		Argument	:	String, Function
+		Returns		:	Void
+		Description	:	Set the label of the right soft key to str. This enables the default text 
+						to be changed from exit and a new function assigned by setting a callbackfunction
+	*/
+
+	menu.setRightSoftkeyLabel = function(label, callback)
+	{
+		window.menu = this;
+		try
+		{
+			if(typeof label != '' && !label)
+				this.setExitToRsk();			
+
+			else if(typeof callback != 'function' && !callback)
+				this.setExitToRsk();			
+			
+			else if (_BRIDGE_REF.nokia.menu.setRsk(callback)) {
+				_BRIDGE_REF.parent.$("#RskLabel > a")[0].innerHTML = label;
+				_BRIDGE_REF.nokia.menu.rsk_label = label;
+				_BRIDGE_REF.nokia.menu.rsk_event = callback;
+				_BRIDGE_REF.nokia.menu.is_rsk_overridden = true;
+			}
+			else 
+				this.setExitToRsk();
+
+		}catch(e){ 
+			// alert(e);
+		 }
+	}
+
+
+	menu.setExitToRsk = function()
+	{
+		this.onRightSoftKeySelect = null;
+
+		_BRIDGE_REF.nokia.menu.is_rsk_overridden = false;
+		_BRIDGE_REF.nokia.menu.rsk_label = '';
+		_BRIDGE_REF.nokia.menu.rsk_event = null;
+		_BRIDGE_REF.parent.$("#RskLabel > a")[0].innerHTML = 'Exit';
+
+		_BRIDGE_REF.nokia.menu.setRsk(function(){
+			_BRIDGE_REF.nokia.menu.exit();
+		});
+	}
+	
+	/*
+		Function 	:	Menu.showSoftkeys()
+		Argument	:	Void
+		Returns		:	Void
+		Description	:	Makes the softkeys visible. By default the softkeys are not visible
+	
+	*/
+	menu.showSoftkeys = function()
+	{
+		/*
+		 *  Shows showSoftkeys
+		 */
+		_BRIDGE_REF.nokia.menu.softkeys_visibility = true;
+		_BRIDGE_REF.nokia.menu.showSoftKeys();
+	}
+	
+	/*
+		Function 	:	Menu.hideSoftkeys()
+		Argument	:	Void
+		Returns		:	Void
+		Description	:	Makes the softkeys invisible. By default the softkeys are not visible. 
+	
+	*/
+	menu.hideSoftkeys = function()
+	{
+		/*
+		 *  Hide showSoftkeys
+		 */
+		_BRIDGE_REF.nokia.menu.softkeys_visibility = false;
+		_BRIDGE_REF.nokia.menu.hideSoftKeys();
+	}
+	
+	
+	/*	
+	 *  
+	 * ----------------------------------------------------------------
+	 * Exta Functionalities which helps to make main functions to work
+	 * ----------------------------------------------------------------
+	 *  
+	*/
+	
+	menu.cancel = function()
+	{
+		_BRIDGE_REF.nokia.menu.cancel();
+	}
+	
+	menu.exit = function()
+	{
+		_BRIDGE_REF.nokia.menu.exit();
+	}
+	
+	
+	menu.triggeLSKEvent = function()
+	{
+		if(typeof(window.menu.onShow) == 'function')
+		{
+				window.menu.onShow();
+		}
+		_BRIDGE_REF.parent.$('#softKeysPane').show();
+		this.show();
+	}
+	
+	menu.triggerEvent = function(MenuItemId)
+	{
+		try{
+			var menuItemRef = this.menuItemExhistsById(this, MenuItemId, 0);
+			if(menuItemRef != null)
+			{
+				if(typeof menuItemRef.onSelect == 'function')
+					menuItemRef.onSelect(MenuItemId);
+		
+				if(_BRIDGE_REF.helper.getElementsLengthInObject(menuItemRef.items))
+					this.show(MenuItemId);
+				else
+					this.cancel();
+
+			}else
+			{
+				this.show();
+			}
+		}
+		catch(e)
+		{
+			alert('triggeEvent: '+MenuItemId+' >> '+e);
+		}
+	}
+	
+	menu.hasChild = function(parentId)
+	{
+		for(var i in this.items)
+		{
+			if(this.items[i].parentId == parentId)
+			{	
+				 return true;
+			}
+		}
+		return false;
+	}
+	
+	
+	menu.allowedTypeOf = function(MenuItem)
+	{
+		try
+		{
+			if( (typeof(MenuItem) == 'object') && (MenuItem.type == 'MenuItem'))
+				return true;			
+		}
+		catch(e)
+		{
+			return false;
+		}
+	}
+	
+	menu.show = function(parentId)
+	{
+		try
+		{
+			var menuItemsPane = _BRIDGE_REF.parent.$('#MenuItemsArea')
+			menuItemsPane = menuItemsPane[0];
+			
+			menuItemsPane.innerHTML = '';
+			
+			var ul = document.createElement('ul');
+			var ele = window.menu;
+
+			if(typeof parentId != 'undefined' && typeof parentId == 'object')
+			{
+				if (typeof window.menu.onShow != null && typeof window.menu.onShow == 'function') {
+					window.menu.onShow();
+				}
+			}
+
+			if(typeof parentId == 'number')
+			{
+				var tempRef = menu.menuItemExhistsById(ele, parentId, 0);
+	
+				if(typeof parentId != 'undefined' && typeof tempRef != 'undefined')
+					ele = tempRef;
+			}
+
+			if(_BRIDGE_REF.helper.getElementsLengthInObject(ele.items))
+			{
+				for(var key in ele.items)
+				{
+					if(!ele.items[key].isDimmed){
+						
+						try{
+							ul.appendChild(menu.create_menuElement(ele.items[key]));
+						}catch(e){  }
+					}
+				}
+				if(typeof parentId == 'number' && _BRIDGE_REF.helper.getElementsLengthInObject(ele.items))
+				{
+					if(ele.parent)
+						ul.appendChild(menu.create_normalMenuItem('Back', ele.parent.id));	
+					else
+						ul.appendChild(menu.create_normalMenuItem('Back', null));	
+				}
+				else
+				{
+					ul.appendChild(menu.create_exitMenuItem());	
+				}
+
+
+				if(_BRIDGE_REF.helper.getElementsLengthInObject(ele.items) > 5)
+					menuItemsPane.style.overflowY = 'scroll';
+				else
+					menuItemsPane.style.overflowY = 'hidden';
+
+			}
+			else
+			{
+				menuItemsPane.style.overflowY = 'hidden';
+				ul.appendChild(menu.create_exitMenuItem());	
+			}
+			menuItemsPane.innerHTML = '<ul>'+ul.innerHTML+'</ul>';
+			
+			_BRIDGE_REF.nokia.menu.show();
+		}
+		catch(e)
+		{
+			alert('menu.show: '+e);
+		}
+	}
+
+
+
+/*
+*
+*	HELPER FUNCTIONS
+*
+*/
+
+	menu.menuItemExhistsById = function(menuReference, value, argumentType)
+	{
+		var flag = null;
+		
+		for(var key in menuReference.items)
+		{
+			if(!argumentType)
+			{
+				if(menuReference.items[key].id == value)
+				{	
+					flag = true; 
+					break; 
+				}
+			}
+			else
+			{
+				if(menuReference.items[key].name == value)
+				{	
+					flag = true; 
+					break; 
+				}
+			}
+			
+			if(menuReference.items[key].items != undefined && menuReference.items[key].items.length)
+			{
+				var temp = this.menuItemExhistsById(menuReference.items[key], value, argumentType);
+				if(temp)
+					return temp;
+			}
+		}
+		if(flag)
+		{
+			// crate a package and send it
+			menuReference.items[key].index = key;
+			return menuReference.items[key];
+		}
+		else
+			return null;
+	}
+	
+	menu.create_menuElement = function(MenuItem) 
+	{
+		var listitem = document.createElement('li');
+		listitem.id = MenuItem.id;
+		listitem.setAttribute('onClick', 'javascript:NOKIA.emulator.child.menu.triggerEvent('+MenuItem.id+');');
+	
+	    var anchor = document.createElement('a');
+		anchor.id = 'subMenuItem_'+MenuItem.id;
+		anchor.innerHTML = MenuItem.name;
+		if(_BRIDGE_REF.helper.getElementsLengthInObject(MenuItem.items))
+	 	{  
+			anchor.className = 'subMenuItem';
+			anchor.setAttribute('href', 'javascript:NOKIA.emulator.child.menu.show('+MenuItem.id+');');
+		}
+	    listitem.appendChild(anchor);
+		return (listitem);
+	}
+	
+	menu.create_normalMenuItem = function(MenuTitle, index) 
+	{
+	    var listitem = document.createElement('li');
+	
+	    var anchor = document.createElement('a');
+		anchor.id = 'subMenuItem_BACK';
+		anchor.innerHTML = MenuTitle;
+	
+		if (MenuTitle == 'Back') {
+			listitem.className = 'exitOrBackBtn';
+			anchor.setAttribute('href', 'javascript:NOKIA.emulator.child.menu.triggerEvent(' + index + ');');
+		}
+		else 
+			anchor.setAttribute('href', 'javascript:NOKIA.emulator.child.menu.triggerEvent(' + index + ');');
+	    
+		listitem.appendChild(anchor);
+		return (listitem);
+	}
+	
+	menu.create_exitMenuItem = function() 
+	{
+	    var listitem = document.createElement('li');
+		listitem.className = 'exitOrBackBtn';
+	    var anchor = document.createElement('a');
+		anchor.id = 'subMenuItem_EXIT';
+		anchor.innerHTML = 'Exit';
+		anchor.setAttribute('href', 'javascript:NOKIA.emulator.child.menu.exit();');
+		listitem.setAttribute('onClick', 'javascript:NOKIA.emulator.child.menu.exit();');
+		
+	    listitem.appendChild(anchor);
+		return (listitem);
+	}
+	
+	menu.triggeRSK = function()
+	{
+		try {
+			if (window.menu) {
+				if (childToParent_Reference.$('softKeysPane').style.display != 'none') {
+					if (window.menu.onRightSoftKeySelect != null) {
+						window.menu.onRightSoftKeySelect();
+						window.menu.cancel();
+					}
+					else {
+						window.menu.cancel();
+					}
+				}
+			}
+		}catch(e)
+		{
+			alert(e);
+		}
+	}
+	
+	menu.triggeLSK = function()
+	{
+		if(window.menu)
+		{
+			window.menu.show();
+			if(typeof(window.menu.onShow) == 'function')
+			{
+				if(window.menu.onShow)
+				{
+					window.menu.onShow();
+				}
+			}
+		}
+	}
+
+
+	//	make TRUE menu.js script loaded
+	window.parent.NOKIA.scriptsLoaded.menu = true;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/preview/script/lib/menuItem.js	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,93 @@
+/*
+	Function 	:	MenuItem()
+	Argument	:	Void
+	Returns		:	Void
+	Description	:	Constructor Function creates a Menu object to the WINDOW
+*/
+
+function MenuItem(name, id)
+{
+	this.id = id;
+	this.name = name;
+	this.isDimmed = false;
+	
+	this.items = [];
+	this.index = null;
+	this.parent = null;
+	this.type = 'MenuItem';
+	
+	
+	//	Event triggers
+	this.onSelect = null;
+}
+
+
+/*
+	Function 	:	MenuItem.append(MenuItem)
+	Argument	:	Menu Object
+	Returns		:	Void
+	Description	:	Function appends childMenuItem to a MenuItem
+*/
+MenuItem.prototype.append = function(childMenuItem)
+{
+	if( (childMenuItem != null) && (childMenuItem.type == 'MenuItem'))
+	{
+		childMenuItem.parent = this;
+		this.items[childMenuItem.id] = childMenuItem;
+	}
+}
+
+
+/*
+	Function 	:	MenuItem.remove()
+	Argument	:	Menu Object
+	Returns		:	Void
+	Description	:	Function Removes childMenuItem and its children from the parent menu item.
+*/
+MenuItem.prototype.remove = function(childMenuItem)
+{
+	if((childMenuItem != null) && (childMenuItem.type == 'MenuItem'))
+	{
+		var i = this.search(childMenuItem);
+		if(i > -1)
+			this.items.splice(i, 1);
+	}
+}
+
+/*
+	Function 	:	MenuItem.remove()
+	Argument	:	Menu Object
+	Returns		:	Void
+	Description	:	If flag is true the MenuItem is hidden and if flag is false the item is shown.
+*/
+MenuItem.prototype.setDimmed = function(flag)
+{
+	this.isDimmed = flag;
+}
+
+
+/*
+	Function 	:	MenuItem.search()
+	Argument	:	MenuItem Object
+	Returns		:	Integer
+	Description	:	Function Replace oldMenuItem with newMenuItem
+*/
+MenuItem.prototype.search = function(MenuItem)
+{
+		var flag = false;
+		for(var i in this.items)
+		{
+			if(this.items[i].id == MenuItem.id)
+			{	
+				flag = true; 
+				break; 
+			}
+		}
+		if(flag)
+			return i;
+		else
+			return -1;		
+}
+
+//	make TRUE menuItem.js script loaded
+window.parent.NOKIA.scriptsLoaded.menuItem = true;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/preview/script/lib/sapi/AppManager.js	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,223 @@
+/**
+ * AppManager.js
+ * 
+ * Nokia Web Runtime Service API emulation 
+ * WRT v1.1
+ * 
+ * Copyright 2009 Nokia Corporation. All rights reserved.
+*/
+
+ 
+(function(){
+	
+	var provider = 'Service.AppManager',
+		Interface = 'IAppManager';
+
+	/**
+	 * AppManager service
+	 */
+	var AppManagerService = function(){
+		this.GetList 	= __GetList;
+		this.LaunchApp	= __LaunchApp;
+		this.LaunchDoc	= __LaunchDoc;
+		this.Cancel 	= __Cancel;
+	}
+
+	device.implementation.extend(provider, Interface, new AppManagerService() );
+
+
+	/******************************************************/	
+	/******************************************************/	
+	/******************************************************/	
+
+	var	context = device.implementation.context,
+		_t = context._t,
+		method = '',
+		result = false,
+		DBase = null;
+	
+	/**
+	 * AppManager: GetList
+	 * @param {Object} criteria
+	 */
+	function __GetList(criteria){
+		if ((result = validator.apply('GetList', arguments)) !== false)
+			return result; 
+
+		if (typeof criteria.Type == 'undefined') 
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingType);
+
+		if (!/^(Application|UserInstalledPackage)$/i.test(criteria.Type)) 
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE);
+		
+		// check if a callback was provided
+		if (arguments.length > 1)
+			return error(device.implementation.ERR_SERVICE_NOT_SUPPORTED, msg.badAsync);
+		
+		var returnValue,
+			filter = criteria.Filter || null;
+ 
+		DBase = context.getData(provider);
+
+		if (criteria.Filter)
+			context.notify(_t('%s:: GetList : filter not implemented in preview').arg(provider));
+
+		// Type = UserInstalledPackage
+		if (!/UserInstalledPackage/i.test(criteria.Type)){
+
+			returnValue = context.Iterator( DBase[criteria.Type] || [] );
+
+		} else {
+		// Type = Application
+			// @todo: apply filter criteria
+			
+			returnValue = context.Iterator( DBase[criteria.Type] || [] );
+		}
+
+		return context.Result(returnValue);
+	}
+			
+	/**
+	 * AppManager: LaunchApp
+	 * @param {Object} criteria
+	 * @param {function} callback function for async call (optional)
+	 */
+	function __LaunchApp(criteria, callback){
+
+		if ((result = validator.apply('LaunchApp', arguments)) !== false)
+			return result; 
+		
+		if (typeof criteria.ApplicationID == 'undefined')
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingAppID);
+
+		// app id must be in the form "s60uid://<appid>" where <appid> is 
+		// what is returned by GetList.
+		var appId = criteria.ApplicationID;
+		
+		if (!/^s60uid:\/\/0x/i.test(appId))
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE);
+	
+		if (criteria.CmdLind)
+			context.notify(_t('%s:: LaunchApp : CmdLine not implemented in preview').arg(provider));
+
+		if (criteria.Options)
+			context.notify(_t('%s:: LaunchApp : Options not implemented in preview').arg(provider));
+
+
+		if (typeof callback == 'function') {
+			return context.callAsync(this, arguments.callee, criteria, callback);
+		}
+
+		appId = appId.replace(/^s60uid:\/\//i, '');	
+		DBase = context.getData(provider);
+
+		for(var type in DBase){
+			for(var i in DBase[type]) {
+				var item = DBase[type][i];
+				if (item.Uid == appId) {
+					// found!
+					context.notify(_t('%s:: LaunchApp : application found & launched : id=%s').arg(provider, appId));
+					return context.ErrorResult(device.implementation.ERR_SUCCESS);
+				}
+			}
+		}
+		// if not found
+		return error(device.implementation.ERR_BAD_ARGUMENT_TYPE);
+	}
+			
+	/**
+	 * AppManager: LaunchDoc
+	 * @param {Object} criteria
+	 * @param {function} callback function for async call (optional)
+	 */
+	function __LaunchDoc(criteria, callback){
+
+		if ((result = validator.apply('LaunchDoc', arguments)) !== false)
+			return result; 
+
+		if (typeof criteria.Document == 'undefined' && typeof criteria.MimeType == 'undefined')
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingDoc);
+
+		if (typeof criteria.Document != 'undefined' && !criteria.Document.DocumentPath)
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE);
+
+		if (criteria.Options)
+			context.notify(_t('%s:: LaunchDoc : Options not implemented in preview').arg(provider));
+
+		if (typeof callback == 'function') {
+			return context.callAsync(this, arguments.callee, criteria, callback);
+		}
+
+		// nothing to launch in emulation, just notify user
+		context.notify(_t('%s:: LaunchDoc : document launched').arg(provider));
+		
+		if (criteria.Document)
+			// return success
+			return context.ErrorResult(device.implementation.ERR_SUCCESS);
+		else
+			// for mimetype, return value name of document
+			return context.Result('', device.implementation.ERR_SUCCESS);
+	}
+
+	
+
+	/**
+	 * AppManager: Cancel
+	 * @param {Object} criteria
+	 */
+	function __Cancel(criteria){
+		method = 'Cancel';
+		if (!criteria || !criteria.TransactionID)
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingTID);
+		
+		clearTimeout(criteria.TransactionID);
+		return context.ErrorResult(device.implementation.ERR_SUCCESS);
+	}
+
+
+	
+	/*******************************
+	 * helper functions
+	 *******************************/
+	
+	function error(code, msg /*, args...*/){
+
+		var args = ['AppManager',method].concat([].slice.call(arguments,2));
+		msg = msg ? _t().arg.apply(msg,args) : undefined;
+		return context.ErrorResult(code, msg);
+	}
+
+	/**
+	 * validate common input arguments
+	 * 'this' is string (object) name of calling function
+	 * 
+	 * @param {arguments} arguments of calling function
+	 * @return {Result} Result object if error, false if no error.
+	 */
+	function validator() {
+		method = ''+this;
+		var	failed = false,
+			criteria = arguments[0] || false;
+			
+		if (!criteria || typeof criteria != 'object')
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingType);
+
+		return failed;
+	}
+
+	/** 
+	 * error messages
+	 * order of %s args: Service name, method name, parameter name 
+	 */
+	var msg = {
+		missingType		: '%s:%s:Content Type Missing',
+		badAsync		: 'AppManger:GetList:Asynchronous version of API is not supported',	// typo on device!
+		missingAppID	: '%s:%s:Application ID  Missing',	// double space between ID & missing!!
+		missingDoc		: '%s:%s:Document/MimeType Missing/value more than expected length ',
+		missingTID		: '%s:Incorrect TransactionID',
+		is_invalid		: '%s:%s:%s is invalid'
+	};
+		
+
+}) ()
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/preview/script/lib/sapi/Calendar.js	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,410 @@
+/**
+ * Calendar.js
+ * 
+ * Nokia Web Runtime Service API emulation 
+ * WRT v1.1
+ * 
+ * Copyright 2009 Nokia Corporation. All rights reserved.
+*/
+
+ 
+(function(){
+	
+	var provider = 'Service.Calendar' ,
+		Interface = 'IDataSource';
+
+	/**
+	 * Calendar service
+	 */
+	var CalendarService = function(){
+		this.GetList 	= __GetList;
+		this.Add 		= __Add;
+		this.Delete 	= __Delete;
+		this.Import 	= __Import;
+		this.Export 	= __Export;
+		this.Cancel 	= __Cancel;
+		this.RequestNotification = __RequestNotification;
+	}
+
+	device.implementation.extend(provider, Interface, new CalendarService() );
+
+
+	/******************************************************/	
+	/******************************************************/	
+	/******************************************************/	
+
+	var	context = device.implementation.context,
+		_t = context._t,
+		method = '',
+		result = false,
+		DBase = null,
+		default_calendar = 'C:Calendar';
+	
+	/**
+	 * Calendar: GetList
+	 * @param {Object} criteria
+	 */
+	function __GetList(criteria){
+		if ((result = validator.apply('GetList', arguments)) !== false)
+			return result; 
+
+		var returnValue = [], 
+			match = null,
+			filter = criteria.Filter || null;
+ 
+		DBase = context.getData(provider);
+
+		// Type = Calendar
+		if (!/CalendarEntry/i.test(criteria.Type)){
+			var cals = [default_calendar];
+			if (filter && filter.DefaultCalendar === false)
+				cals = context.keys(DBase)
+
+			returnValue = cals;
+
+		} else {
+		// Type = CalendarEntry
+			var cal = default_calendar;
+			if (filter && filter.CalendarName)
+				cal = filter.CalendarName;
+			
+			if (!(cal in DBase))
+				return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.badCalendar);
+
+			// filter by id or LocalId
+			if (filter && (filter.id || filter.LocalId)) {
+				var which = filter.id ? 'id' : 'LocalId', 
+					id = filter[which];
+					
+				for (var i in DBase[cal]) {
+					if (id == DBase[cal][i][which]) {
+						returnValue.push(DBase[cal][i]);
+					}
+				}
+			}
+			// filter by type 
+			else if (filter && filter.Type && !/IncludeAll/i.test(filter.Type)) {
+				for (var i in DBase[cal]) {
+					// match on type is case insensitive
+					if (filter.Type.toLowerCase() == DBase[cal][i].Type.toLowerCase()) {
+						returnValue.push(DBase[cal][i]);
+					}
+				}
+			}
+			// unsupported filters 
+			else if (filter 
+				&& (match = context.keys(filter).join().match(/StartRange|EndRange|SearchText/ig)) ) {
+				context.notify(_t('%s:: GetList : filter %s not implemented in preview').arg(provider, match.join()));
+			}
+			// return everything 
+			else {
+				returnValue = DBase[cal];
+			}
+		}
+
+		return context.Result(context.Iterator(returnValue));
+	}
+			
+	/**
+	 * Calendar: Add
+	 * @param {Object} criteria
+	 */
+	function __Add(criteria){
+		if ((result = validator.apply('Add', arguments)) !== false)
+			return result; 
+		
+		var Item = criteria.Item || false; 
+		
+		DBase = context.getData(provider);
+
+		// Type = Calendar
+		if (!/CalendarEntry/i.test(criteria.Type)){
+
+			if (!Item || !Item.CalendarName)
+				return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.missingCalendar);
+				
+			var cal = Item.CalendarName;
+			if (cal in DBase) {
+				return error(device.implementation.ERR_ENTRY_EXISTS);
+			}
+
+			// @todo: validate calendar name <drive>:<name>
+			// return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.badCalendar);
+			
+			// create new calendar
+			device.implementation.loadData(provider, cal, []);
+			return error(device.implementation.ERR_SUCCESS);
+
+		} else {
+		// Type = CalendarEntry
+
+			if (!Item)
+				return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.is_missing, 'Item');
+				
+			var cal = Item.CalendarName || default_calendar;
+
+			// if calendar doesn't exist and it's the default, create it
+			if (!(cal in DBase) && cal == default_calendar)
+				device.implementation.loadData(provider, cal, []);
+			
+			if (!(cal in DBase))
+				return error(device.implementation.ERR_NOT_FOUND);
+
+			// update existing item?
+			if ('LocalId' in Item) {
+				
+				if (!Item.LocalId && Item.LocalId !== 0)
+					return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.is_invalid, 'LocalId');
+				
+				if ('InstanceStartTime' in Item)
+					context.notify(_t('%s:: Add : InstanceStartTime not implemented in preview.').arg(provider));
+
+				// can't update id
+				delete Item.id;
+				
+				//  search for and update item
+				var found = false;
+				for (var i in DBase[cal]) {
+					var entry = DBase[cal][i];
+					if (entry.LocalId == Item.LocalId) {
+						context.extend(entry, Item);
+						Item.id = entry.id;
+						found = true;
+						break;
+					}
+				}
+				if (!found)
+					return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.is_invalid, 'LocalId');
+
+			} else {
+			// add new item
+				// generate new id and localId 
+				// -- in calendar id's are string!
+				Item.id = String(context.getUniqueID());
+				Item.LocalId = String(context.getUniqueID());
+				DBase[cal].push(Item);
+			} 
+		} 
+		// return success
+		return context.Result(Item.id, device.implementation.ERR_SUCCESS);
+	}
+			
+
+	/**
+	 * Calendar: Delete
+	 * @param {Object} criteria
+	 * @param {function} callback function for async call (optional - valid only for CalendarEntry)
+	 */
+	function __Delete(criteria, callback){
+		
+		if ((result = validator.apply('Delete', arguments)) !== false)
+			return result; 
+
+		var Data = criteria.Data || false; 
+		if (!Data || typeof Data != 'object')
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.is_invalid, 'Data');
+		
+		// only sync call supported for Calendar
+		if (!/CalendarEntry/i.test(criteria.Type) && typeof callback == 'function')
+			return error(device.implementation.ERR_SERVICE_NOT_SUPPORTED, msg.noAsync);
+
+		DBase = context.getData(provider);
+		var cal = Data.CalendarName || default_calendar;			
+		if (!(cal in DBase))
+			return error(device.implementation.ERR_NOT_FOUND);
+		
+		// Type = Calendar
+		if (!/CalendarEntry/i.test(criteria.Type)) {
+			// CalendarName is mandatory
+			if (!Data.CalendarName)
+				return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.is_missing, 'CalendarName');
+						
+			DBase[cal] = null;
+			delete DBase[cal];
+		}
+		else {
+		// Type = CalendarEntry
+
+			if (!context.keys(Data).join().match(/IdList|LocalIdList|DeleteAll|StartRange|EndRange/ig))
+				return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.is_missing, 'Data');
+
+			if (typeof callback == 'function') {
+				return context.callAsync(this, arguments.callee, criteria, callback);
+			}
+
+			var which = Data.IdList ? 'IdList' : 'LocalIdList',
+				idList = Data[which] || false;
+				
+			if (idList) {
+				//  search for and delete items
+				for (var id in idList) {
+					id = idList[id];
+					for (var i in DBase[cal]) {
+						if (id == DBase[cal][i][which]) {
+							DBase[cal].splice(i, 1);
+						}
+					}
+				}
+			}
+			else if (Data.DeleteAll && Data.DeleteAll === true){
+				delete DBase[cal];
+				DBase[cal] = [];
+			}
+
+			if (Data.StartRange || Data.EndRange) {
+				context.notify(_t('%s:: Delete : StartRange / EndRange not implemented in preview.').arg(provider));
+			}
+		}
+		// return success
+		return context.ErrorResult(device.implementation.ERR_SUCCESS);				
+	}
+			
+
+	/**
+	 * Calendar: Import
+	 * @param {Object} criteria
+	 * @param {function} callback function for async call (optional)
+	 */
+	function __Import(criteria, callback){
+
+		if ((result = validator.apply('Import', arguments)) !== false)
+			return result; 
+
+		var Data = criteria.Data || false; 
+		if (!Data)
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.is_invalid, 'Data');
+		
+		if (!Data.FileName)
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.is_invalid, 'FileName');
+
+		if (!Data.Format)
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.is_invalid, 'Format');
+
+		if (typeof callback == 'function') {
+			return context.callAsync(this, arguments.callee, criteria, callback);
+		}
+
+		context.notify(_t('%s:: Import : not implemented in preview.').arg(provider));
+		var returnValue = context.Iterator([]);
+		return context.Result(returnValue, device.implementation.ERR_SUCCESS);		
+	}
+			
+
+	/**
+	 * Calendar: Export
+	 * @param {Object} criteria
+	 * @param {function} callback function for async call (optional)
+	 */
+	function __Export(criteria, callback){
+
+		if ((result = validator.apply('Export', arguments)) !== false)
+			return result; 
+
+		var Data = criteria.Data || false; 
+		if (!Data)
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.is_invalid, 'Data');
+
+		if (!Data.Format)
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.is_invalid, 'Format');
+
+		if (typeof callback == 'function') {
+			return context.callAsync(this, arguments.callee, criteria, callback);
+		}
+		context.notify(_t('%s:: Export : not implemented in preview.').arg(provider));
+		var returnValue = '';
+		return context.Result(returnValue, device.implementation.ERR_SUCCESS);		
+	}
+			
+
+	/**
+	 * Calendar: RequestNotification
+	 * @param {Object} criteria
+	 * @param {function} callback function for async call 
+	 */
+	function __RequestNotification(criteria, callback){
+
+		if ((result = validator.apply('RequestNotification', arguments)) !== false)
+			return result; 
+
+		if (typeof callback != 'function')
+			return error(device.implementation.ERR_SERVICE_NOT_SUPPORTED, msg.badAsync);
+
+		context.notify(_t('%s:: RequestNotification : not implemented in preview.').arg(provider));
+		var result = context.ErrorResult(device.implementation.ERR_SUCCESS);
+		result.TransactionID = 0;
+		return result;		
+	}
+			
+
+	/**
+	 * Calendar: Cancel
+	 * @param {Object} criteria
+	 */
+	function __Cancel(criteria){
+		method = 'Cancel';
+		if (!criteria || !criteria.TransactionID)
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.missingTID);
+		
+		clearTimeout(criteria.TransactionID);
+		return context.ErrorResult(device.implementation.ERR_SUCCESS);
+	}
+
+
+	
+	/*******************************
+	 * helper functions
+	 *******************************/
+	
+	function error(code, msg /*, args...*/){
+
+		var args = ['Calendar',method].concat([].slice.call(arguments,2));
+		msg = msg ? _t().arg.apply(msg,args) : undefined;
+		return context.ErrorResult(code, msg);
+	}
+
+	/**
+	 * validate common input arguments
+	 * 'this' is string (object) name of calling function
+	 * 
+	 * @param {arguments} arguments of calling function
+	 * @return {Result} Result object if error, false if no error.
+	 */
+	function validator() {
+		method = ''+this;
+		var	failed = false,
+			criteria = arguments[0] || false;
+			
+		if (!criteria)
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.badType);
+			
+		if (typeof criteria != 'object' || typeof criteria.Type == 'undefined')
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.badType);
+		
+		var TypeRE = /Import|Export|RequestNotification/i.test(method)
+			? /^CalendarEntry$/i
+			: /^(Calendar|CalendarEntry)$/i;
+		 
+		if (!TypeRE.test(criteria.Type)) 
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.badType);
+		
+		return failed;
+	}
+
+	/** 
+	 * error messages
+	 * order of %s args: Service name, method name, parameter name 
+	 */
+	var msg = {
+		badType			: '%s : %s : Type is invalid',
+		badCalendar		: '%s : %s : CalendarName is invalid',
+		missingCalendar	: '%s : %s : CalendarName is missing',
+		missingTID 		: '%s : %s : TransactionID is missing',
+		badAsync		: '%s : %s : Invalid async parameters',
+		noAsync			: '%s : %s : Async not supported',
+		is_missing		: '%s : %s : %s is missing',
+		is_invalid		: '%s : %s : %s is invalid'
+	};
+		
+
+}) ();
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/preview/script/lib/sapi/Contact.js	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,407 @@
+/**
+ * Contact.js
+ * 
+ * Nokia Web Runtime Service API emulation 
+ * WRT v1.1
+ * 
+ * Copyright 2009 Nokia Corporation. All rights reserved.
+*/
+
+ 
+(function(){
+	
+	var provider = 'Service.Contact' ,
+		Interface = 'IDataSource';
+
+	/**
+	 * Contact service
+	 */
+	var ContactService = function(){
+		this.GetList 	= __GetList;
+		this.Add 		= __Add;
+		this.Delete 	= __Delete;
+		this.Import 	= __Import;
+		this.Export 	= __Export;
+		this.Organise	= __Organise;
+		this.Cancel 	= __Cancel;
+	}
+
+	device.implementation.extend(provider, Interface, new ContactService() );
+
+
+	/******************************************************/	
+	/******************************************************/	
+	/******************************************************/	
+
+	var	context = device.implementation.context,
+		_t = context._t,
+		method = '',
+		result = false,
+		DBase = null;
+	
+	/**
+	 * Contact: GetList
+	 * @param {Object} criteria
+	 * @param {Function} [callback] function for async call (optional)
+	 */
+	function __GetList(criteria, callback){
+
+		if ((result = validator.apply('GetList', arguments)) !== false)
+			return result; 
+	
+		if (!/^(Contact|Group|Database)$/i.test(criteria.Type))
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.badType);
+	
+		if (typeof callback == 'function') {
+			return context.callAsync(this, arguments.callee, criteria, callback);
+		}
+
+		var returnValue = [], 
+			match = null,
+			filter = criteria.Filter || null;
+ 
+		DBase = context.getData(provider);
+
+		// Type = Database
+		if (/Database/i.test(criteria.Type)){
+			returnValue = DBase.Database;
+		} 
+		// Type = Group
+		else if (/Group/i.test(criteria.Type)){
+			// filter by id
+			if (filter && filter.id) {
+				returnValue = findById(DBase.Group, filter.id);
+				if (returnValue.length == 0)
+					return error(device.implementation.ERR_NOT_FOUND);
+			}
+			// return all groups 
+			else {
+				returnValue = DBase.Group;
+			}
+		}				
+		// Type = Contact
+		else if (/Contact/i.test(criteria.Type)){
+
+			// filter by id
+			if (filter && filter.id) {
+				returnValue = findById(DBase.Contact, filter.id); 
+				if (returnValue.length == 0)
+					return error(device.implementation.ERR_NOT_FOUND);
+			}
+			// return all contacts 
+			else {
+				returnValue = DBase.Contact;
+			}
+
+			// unsupported filters 
+			if (filter 
+				&& (match = context.keys(filter).join().match(/SearchVal|DBUri/ig)) ) {
+				context.notify(_t('%s:: GetList : filter %s not implemented in preview').arg(provider, match.join()));
+			}
+			// unsupported sort			
+			if (criteria.Sort) { 
+				context.notify(_t('%s:: GetList : sort not implemented in preview').arg(provider));
+			}
+		}
+		return context.Result(context.Iterator(returnValue));
+	}
+			
+	/**
+	 * Contact: Add
+	 * @param {Object} criteria
+	 * @param {Function} [callback] function for async call (optional)
+	 */
+	function __Add(criteria, callback){
+
+		if ((result = validator.apply('Add', arguments)) !== false)
+			return result; 
+		
+		if (!/^(Contact|Group)$/i.test(criteria.Type))
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.badType2);
+
+		if (typeof callback == 'function') {
+			return context.callAsync(this, arguments.callee, criteria, callback);
+		}
+
+		DBase = context.getData(provider);
+		var Data = criteria.Data,
+			item;
+
+		// unsupported!			
+		if (Data.DBUri) {
+			context.notify(_t('%s:: Add : Data.DBUri not implemented in preview').arg(provider));
+		}
+
+		// Type = Group
+		if (/Group/i.test(criteria.Type)){
+
+			if (!Data.GroupLabel)
+				return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.missingGroupLabel);
+
+			// update
+			if (Data.id) {
+				returnValue = findById(DBase.Group, Data.id); 
+				if (returnValue.length == 0)
+					return error(device.implementation.ERR_BAD_ARGUMENT_TYPE);
+				
+				returnValue[0].GroupLabel = Data.GroupLabel;
+				//@todo: group contents!?
+			}
+			// new
+			else {
+				item = context.extend({}, Data); 
+				item.id = String(context.getUniqueID());
+				DBase.Group.push(item);
+			}
+		} 
+		// Type = Contact
+		else {
+			// update
+			if (Data.id) {
+				returnValue = findById(DBase.Contact, Data.id); 
+				if (returnValue.length == 0)
+					return error(device.implementation.ERR_BAD_ARGUMENT_TYPE);
+				
+				context.extend(returnValue[0], Data); 
+			}
+			// new
+			else {
+				item = context.extend({}, Data); 
+				item.id = String(context.getUniqueID());
+				DBase.Contact.push(item);
+			}
+		} 
+		// return success
+		return error(device.implementation.ERR_SUCCESS);
+	}
+			
+
+	/**
+	 * Contact: Delete
+	 * @param {Object} criteria
+	 * @param {Function} [callback] function for async call (optional)
+	 */
+	function __Delete(criteria, callback){
+		
+		if ((result = validator.apply('Delete', arguments)) !== false)
+			return result; 
+
+		if (!/^(Contact|Group)$/i.test(criteria.Type))
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.badType2);
+
+		var Data = criteria.Data;
+		if (!Data.IdList)
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingIdList);
+		if (typeof Data.IdList != 'object')
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.badIdList);
+		
+		DBase = context.getData(provider);
+		var type = criteria.Type;
+
+		// unsupported!			
+		if (Data.DBUri) {
+			context.notify(_t('%s:: Delete : Data.DBUri not implemented in preview').arg(provider));
+		}
+
+		if (typeof callback == 'function') {
+			return context.callAsync(this, arguments.callee, criteria, callback);
+		}
+
+		// for both Group & Contact:
+		var i,j,id,item;
+		for (j in Data.IdList) {
+			id = Data.IdList[j];
+			for (i in DBase[type]) {
+				item = DBase[type][i];
+				if (id == item.id) {
+					DBase[type].splice(i, 1);
+				}
+			}
+		}
+		// return success
+		return error(device.implementation.ERR_SUCCESS);				
+	}
+			
+
+	/**
+	 * Contact: Import
+	 * @param {Object} criteria
+	 * @param {Function} [callback] function for async call (optional)
+	 */
+	function __Import(criteria, callback){
+
+		if ((result = validator.apply('Import', arguments)) !== false)
+			return result; 
+
+		if (!/^(Contact)$/i.test(criteria.Type))
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.badType3);
+
+		var Data = criteria.Data;
+		if (!Data.SourceFile)
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingSourceFile);
+
+		if (typeof callback == 'function') {
+			return context.callAsync(this, arguments.callee, criteria, callback);
+		}
+
+		context.notify(_t('%s:: Import : not implemented in preview.').arg(provider));
+		return error(device.implementation.ERR_SUCCESS);		
+	}
+			
+
+	/**
+	 * Contact: Export
+	 * @param {Object} criteria
+	 * @param {Function} [callback] function for async call (optional)
+	 */
+	function __Export(criteria, callback){
+
+		if ((result = validator.apply('Export', arguments)) !== false)
+			return result; 
+
+		if (!/^(Contact)$/i.test(criteria.Type))
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.badType4);
+
+		var Data = criteria.Data;
+		if (!Data.DestinationFile)
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingDestinationFile);
+
+		if (!Data.id)
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingId);
+
+		if (typeof callback == 'function') {
+			return context.callAsync(this, arguments.callee, criteria, callback);
+		}
+
+		context.notify(_t('%s:: Export : not implemented in preview.').arg(provider));
+		return error(device.implementation.ERR_SUCCESS);		
+	}
+			
+
+	/**
+	 * Contact: Organise
+	 * @param {Object} criteria
+	 * @param {Function} [callback] function for async call (optional)
+	 */
+	function __Organise(criteria, callback){
+
+		if ((result = validator.apply('Organise', arguments)) !== false)
+			return result; 
+
+		if (!/^(Group)$/i.test(criteria.Type))
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.badType5);
+
+		var Data = criteria.Data;
+		if (!Data.id)
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingId2);
+
+		if (!Data.IdList)
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingIdList);
+
+		if (typeof Data.IdList != 'object')
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.badIdList);
+
+		if (!/^(Associate|Disassociate)$/i.test(criteria.OperationType))
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.badOperationType);
+
+		if (typeof callback == 'function') {
+			return context.callAsync(this, arguments.callee, criteria, callback);
+		}
+
+		context.notify(_t('%s:: Organise : not implemented in preview.').arg(provider));
+		return error(device.implementation.ERR_SUCCESS);		
+	}
+			
+
+	/**
+	 * Contact: Cancel
+	 * @param {Object} criteria
+	 */
+	function __Cancel(criteria){
+		method = 'Cancel';
+		if (!criteria || !criteria.TransactionID)
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.missingTID);
+		
+		clearTimeout(criteria.TransactionID);
+		return context.ErrorResult(device.implementation.ERR_SUCCESS);
+	}
+
+	
+	/*******************************
+	 * helper functions
+	 *******************************/
+	
+	function error(code, msg /*, args...*/){
+
+		var args = ['Contacts',method].concat([].slice.call(arguments,2));
+		msg = msg ? _t().arg.apply(msg,args) : undefined;
+		return context.ErrorResult(code, msg);
+	}
+
+	/**
+	 * validate common input arguments
+	 * 'this' is string (object) name of calling function
+	 * 
+	 * @param {arguments} arguments of calling function
+	 * @return {Result} Result object if error, false if no error.
+	 */
+	function validator() {
+		method = ''+this;
+		var	failed = false,
+			criteria = arguments[0] || false;
+			
+		if (!criteria || typeof criteria != 'object' || typeof criteria.Type == 'undefined')
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingType, method);
+
+		if (method == 'GetList') return failed;
+
+		var Data = criteria.Data || false; 
+		if (!Data)
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingData, method);
+		if (typeof Data != 'object')
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.badData);
+		 
+		return failed;
+	}
+
+
+	function findById(dbase, id){
+		var result = [];
+		for (var i in dbase) {
+			if (id == dbase[i]['id']) {
+				result.push(dbase[i]);
+			}
+		}
+		return result;
+	}
+
+	/** 
+	 * error messages
+	 * order of %s args: Service name, method name, parameter name 
+	 */
+	var msg = {
+		missingType		: '%s : %s : Type is Missing',
+		badType			: '%s: %s : Invalid value for Type, Must be Contact/Group/Database',
+		badType2		: '%s : %s : Invalid Type, must be Contact/Group',
+		badType3		: '%s : %s : Invalid Type,it must be Contact',
+		badType4		: '%s : %s : Invalid Type, it must be Contact',
+		badType5		: '%s : %s : Invalid Content Type, It must be Group',
+		badOperationType: '%s : %s : Invalid Operation Type',
+		missingGroupLabel: '%s : %s : Group Label is Missing',
+		missingTID 		: 'Contact : Cancel : TransactionID is missing',	// not 'Contacts'!!
+		badAsync		: '%s : %s : Invalid async parameters',
+		missingData		: '%s : %s : %s data Missing',
+		badData			: '%s : %s : Invalid Type of Data , Map is required',
+		missingIdList	: '%s : %s : List of Ids is missing',
+		badIdList		: '%s : %s : Type of IdList is wrong, List is required',
+		missingSourceFile: '%s : %s : Import Source Filename is Missing',
+		missingDestinationFile: '%s : %s : Export Destination Filename is Missing',
+		missingId		: '%s : %s : Contact Id to be exported is missing',
+		missingId2		: '%s : %s : GroupId is missing',
+		is_missing		: '%s : %s : %s is missing',
+		is_invalid		: '%s : %s : %s is invalid'
+	};
+		
+
+}) ()
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/preview/script/lib/sapi/Landmarks.js	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,556 @@
+/**
+ * Landmarks.js
+ * 
+ * Nokia Web Runtime Service API emulation 
+ * WRT v1.1
+ * 
+ * Copyright 2009 Nokia Corporation. All rights reserved.
+*/
+
+ 
+(function(){
+	
+	var provider = 'Service.Landmarks',
+		Interface = 'IDataSource';
+
+	/**
+	 * Landmark service
+	 */
+	var LandmarkService = function(){
+		this.New 		= __New;
+		this.GetList 	= __GetList;
+		this.Add		= __Add;
+		this.Delete		= __Delete;		
+		this.Import 	= __Import;
+		this.Export		= __Export;
+		this.Organise	= __Organise;
+		this.Cancel		= __Cancel;				
+	}
+
+	device.implementation.extend(provider, Interface, new LandmarkService() );
+
+
+	/******************************************************/	
+	/******************************************************/	
+	/******************************************************/	
+
+	var	context = device.implementation.context,
+		_t = context._t,
+		method = '',
+		result = false,
+		DBase = null;
+
+	/**
+	 * Landmarks: New
+	 * @param {Object} criteria
+	 */
+	function __New(criteria){
+		if ((result = validator.apply('New', arguments)) !== false)
+			return result; 
+
+		if (typeof criteria.Type == 'undefined') 
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingType);
+
+		if (!/^(Landmark|Category)$/i.test(criteria.Type)) 
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.badType);		
+		
+		var returnValue;
+		
+		if(criteria.Type == 'Landmark')
+		{
+			returnValue = {
+				'LandmarkName'		: '',
+				'id' 				: '',
+				'CategoryInfo'		: '',
+				'LandmarkDesc'		: '',
+				'LandmarkPosition'	: {
+										'Latitude'	: '',
+										'Longitude' : '',
+										'Altitude' 	: '',
+										'HAccuracy' : '',
+										'VAccuracy' : '',
+										'VAccuracy' : ''
+									  },
+				'CoverageRadius'	: '',
+				'IconFile'			: '',
+				'IconIndex'			: '',
+				'IconMaskIndex'		: '',
+				'LandmarkFields'	: {
+										'Street'		: '',
+										'BuildingName'	: '',
+										'District'		: '',
+										'City'			: '',
+										'AreaCode'		: '',
+										'Telephone'		: '',
+										'Country'		: ''
+									  }
+			};
+		}
+		else //Category
+		{
+			returnValue = {
+				'CategoryName'	: '',
+				'id' 			: '',
+				'GlobalId'		: '',
+				'IconFile'		: '',
+				'IconIndex'		: '',
+				'IconMaskIndex'	: ''
+			};
+		}
+
+		return context.Result(returnValue);
+	}
+	
+	/**
+	 * Landmarks: GetList
+	 * @param {Object} criteria
+	 * @param {Function} [callback] function for async call (optional)
+	 */
+	function __GetList(criteria, callback){
+		
+		if ((result = validator.apply('GetList', arguments)) !== false)
+			return result; 
+
+		if (typeof criteria.Type == 'undefined') 
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingType);
+
+		if (!/^(Landmark|Category|Database)$/i.test(criteria.Type)) 
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.badType);
+
+		if (criteria.Filter)
+			context.notify(_t('%s:: GetList : filter not implemented in preview').arg(provider));
+
+ 		if(criteria.Sort)
+			context.notify(_t('%s:: GetList : Sort is not implemented in preview').arg(provider));
+
+		if (typeof callback == 'function') {
+			return context.callAsync(this, arguments.callee, criteria, callback);
+		}
+		
+		var returnValue = [], 
+			match = null,
+			filter = criteria.Filter || null;
+ 
+		DBase = context.getData(provider);
+
+
+		if (/Database/i.test(criteria.Type)) {				// Type = Database
+			
+			returnValue = context.Iterator( DBase.Database || [] );
+			
+		} else if (/Landmark/i.test(criteria.Type)){ 		// Type = Landmark
+			
+			returnValue = context.Iterator( DBase[criteria.Type] || [] );
+			
+		} else {											// Type = Category
+		
+			// @todo: apply filter criteria
+			returnValue = context.Iterator( DBase[criteria.Type] || [] );
+		}
+		return context.Result(returnValue);
+	}
+
+	/**
+	 * Landmarks: Add
+	 * @param {Object} criteria
+	 */
+	function __Add(criteria){
+		
+		if ((result = validator.apply('Add', arguments)) !== false)
+			return result; 
+
+		if (!/^(Landmark|Category)$/i.test(criteria.Type))
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.badType);
+
+
+		var Data = criteria.Data || false; 
+		if(!Data){
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingData);
+		}
+
+		DBase = context.getData(provider);
+		
+		// unsupported!			
+		if (Data.DatabaseURI) {
+			context.notify(_t('%s:: Add : Data.DatabaseURI not implemented in preview').arg(provider));
+		}
+		
+		var item;
+		
+		// Type = Landmark
+		if (/Landmark/i.test(criteria.Type)){
+
+			 if (!Data.LandmarkName)
+				Data.LandmarkName="";
+			
+			var landmarkPos = Data.LandmarkPosition;
+			if (typeof landmarkPos != 'undefined') {
+				if ((typeof landmarkPos.Latitude == 'undefined' || typeof landmarkPos.Latitude != 'number') &&
+					(typeof landmarkPos.Longitude == 'undefined' || typeof landmarkPos.Longitude != 'number') &&
+					(typeof landmarkPos.Altitude == 'undefined' || typeof landmarkPos.Altitude != 'number') &&
+					(typeof landmarkPos.HAccuracy == 'undefined' || typeof landmarkPos.HAccuracy != 'number') &&
+					(typeof landmarkPos.VAccuracy == 'undefined' || typeof landmarkPos.VAccuracy != 'number')) {
+						
+						return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.badType);
+				}
+			}
+			// update
+			if (typeof Data.id != 'undefined') {
+				if(typeof Data.id != 'string')
+						return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.invalidId);
+				
+				var retIndex = findById(DBase.Landmark, Data.id); 
+				if (retIndex == -1)
+					return error(device.implementation.ERR_NOT_FOUND);
+				DBase.Landmark[retIndex] = Data;
+				item = Data;
+			}
+			// new
+			else {
+				item = context.extend({}, Data); 
+				item.id = String(context.getUniqueID());
+				DBase.Landmark.push(item);
+			}
+		} else { // Type = Category
+//			alert(typeof Data.CategoryName);
+
+			//alert("Data.id : "+Data.id);
+			// update
+			if (typeof Data.id != 'undefined') {
+				if(typeof Data.id != 'string')
+						return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.invalidId);
+	
+				var retIndex = findById(DBase.Category, Data.id); 
+				if (retIndex == -1)
+					return error(device.implementation.ERR_NOT_FOUND);
+
+				DBase.Category[retIndex] = Data;					
+				item = Data;
+			}
+			// new
+			else {
+				if (typeof Data.CategoryName == 'undefined')
+					return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingCategoryName);	
+	
+				if(typeof Data.CategoryName != 'string' || Data.CategoryName.length <= 0)
+					return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.badType);
+
+				var retIndex = findByName(DBase.Category, Data.CategoryName); 
+				if (retIndex !=  -1)
+					return error(device.implementation.ERR_ENTRY_EXISTS);
+					
+				item = context.extend({}, Data); 
+				item.id = String(context.getUniqueID());
+				DBase.Category.push(item);
+			}
+		} 
+		// return success
+		return context.Result(item.id, device.implementation.ERR_SUCCESS);
+	}
+			
+	/**
+	 * Landmarks: Delete
+	 * @param {Object} criteria
+	 */
+	function __Delete(criteria){
+
+		if ((result = validator.apply('Delete', arguments)) !== false)
+			return result; 
+
+		if (!/^(Landmark|Category)$/i.test(criteria.Type))
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.badType);
+
+		var Data = criteria.Data || false; 
+		if(!Data){
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.missingData);
+		}
+
+		if (typeof Data.id == 'undefined') {
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingId);
+			}
+
+		if (typeof Data.id != 'undefined' && typeof Data.id != 'string') {
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.invalidId);
+		}
+		if(Data.id.length <= 0 )
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.invalidId);
+			
+		DBase = context.getData(provider);
+		
+		var type = criteria.Type;
+
+		// unsupported!			
+		if (Data.DBUri) {
+			context.notify(_t('%s:: Delete : Data.DBUri not implemented in preview').arg(provider));
+		}
+
+		// for both Landmark & Category:
+		var i,item;
+
+		for (i in DBase[type]) {
+			item = DBase[type][i];
+			if (Data.id == item.id) {
+				DBase[type].splice(i, 1);
+			}
+		}
+
+		// return success
+		return error(device.implementation.ERR_SUCCESS);				
+	}
+		
+	/**
+	 * Landmarks: Import
+	 * @param {Object} criteria
+	 */
+	function __Import(criteria){
+		
+		if ((result = validator.apply('Import', arguments)) !== false)
+			return result; 
+
+		if (!/^(Landmark)$/i.test(criteria.Type))
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.badType);
+
+		context.notify(_t('%s:: Import : not implemented in preview.').arg(provider));
+
+		var Data = criteria.Data || false; 
+		if(!Data)
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.missingData);
+
+		if (!Data.SourceFile)
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingSourceFile);
+
+		if (!Data.MimeType)
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingMimeType);
+
+		if (!/^(application\/vnd.nokia.landmarkcollection\+xml|application\/vnd.nokia.landmark\+wbxml)$/i.test(Data.MimeType))
+			return error(device.implementation.ERR_SERVICE_NOT_SUPPORTED, msg.invalidMime);
+
+		return error(device.implementation.ERR_SUCCESS);		
+	}
+			
+
+	/**
+	 * Landmarks: Export
+	 * @param {Object} criteria
+	 */
+	function __Export(criteria){
+
+		if ((result = validator.apply('Export', arguments)) !== false)
+			return result; 
+
+		context.notify(_t('%s:: Export : not implemented in preview.').arg(provider));
+		if (!/^(Landmark)$/i.test(criteria.Type))
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.badType);
+
+		var Data = criteria.Data || false; 
+		if(!Data){
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.missingData);
+		}
+
+		if (!Data.DestinationFile)
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingDestFile);
+			
+		if (!Data.MimeType)
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingMimeType);
+
+		if (!Data.IdList)
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingIdList);
+
+		return error(device.implementation.ERR_SUCCESS);		
+	}
+			
+
+	/**
+	 * Landmarks: Organise
+	 * @param {Object} criteria
+	 */
+	function __Organise(criteria){
+
+		if ((result = validator.apply('Organise', arguments)) !== false)
+			return result; 
+
+		if (!/^(Landmark)$/i.test(criteria.Type))
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.badType);
+
+		var Data = criteria.Data || false; 
+		if(!Data){
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.missingData);
+		}
+
+		if (!Data.id || Data.id == "")
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.invalidId);
+		
+		DBase = context.getData(provider);
+		var categories = DBase['Category'];
+		var landmarks  = DBase['Landmark'];
+		var found = false;
+		
+		
+		for(var i=0;i<categories.length;i++)
+		{
+			var category = categories[i];
+			if (category.id == Data.id) {
+				found = true;
+				break;
+			}
+		}
+		if(!found)
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.invalidId);
+
+		try{
+			if(!Data.IdList || Data.IdList.length <=0)
+			{
+				return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.invalidId);
+			}
+		}catch(e){
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.invalidId);
+		}
+		
+		if (!/^(Associate|Disassociate)$/i.test(criteria.OperationType))
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.invalidOpType);
+		
+		context.notify(_t('%s:: Organise : not implemented in preview.').arg(provider));
+		if(/^Associate$/i.test(criteria.OperationType))
+		{
+			for(var i=0;i<landmarks.length;i++)
+			{
+				for(var j=0;j<Data.IdList.length;j++)
+				{
+					if(landmarks[i] == Data.IdList[j])
+					{
+						if(!landmarks[i].CategoryInfo)
+						{
+							landmarks[i].CategoryInfo = new Array();
+							landmarks[i].CategoryInfo.push(Data.id);					
+						}
+						else{
+							var landmark = landmarks[i];
+							var found = false;
+							for(var k=0;k<landmark.CategoryInfo.length;k++)
+							{
+								if(landmark.CategoryInfo[k] == Data.id)
+									found = true;
+							}
+							if(!found)
+								landmark.CategoryInfo.push(Data.id);
+						}
+						
+					}
+				}
+			}
+		}
+		else
+		{
+			for(var i=0;i<landmarks.length;i++)
+			{
+				for(var j=0;j<Data.IdList.length;j++)
+				{
+					if(landmarks[i] == Data.IdList[j] && landmarks[i].CategoryInfo != undefined)
+					{
+						var landmark = landmarks[i];
+						for(var k=0;k<landmark.CategoryInfo.length;k++)
+						{
+							if(landmark.CategoryInfo[k] == Data.id)
+								landmark.CategoryInfo.splice(k,1);
+						}
+					}
+				}
+			}
+		}
+		
+		return error(device.implementation.ERR_SUCCESS);		
+	}
+		
+
+	/**
+	 * Landmarks: Cancel
+	 * @param {Object} criteria
+	 */
+	function __Cancel(criteria){
+		method = 'Cancel';
+		
+		if ((result = validator.apply('Cancel', arguments)) !== false)
+			return result;		
+			
+		if (!criteria.TransactionID)
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingTID);
+		
+		clearTimeout(criteria.TransactionID);
+		return context.ErrorResult(device.implementation.ERR_SUCCESS);
+	}
+
+
+	
+	/*******************************
+	 * helper functions
+	 *******************************/
+	function error(code, msg /*, args...*/){
+
+		var args = ['Landmarks',method].concat([].slice.call(arguments,2));
+		msg = msg ? _t().arg.apply(msg,args) : undefined;
+		return context.ErrorResult(code, msg);
+	}
+
+	/**
+	 * validate common input arguments
+	 * 'this' is string (object) name of calling function
+	 * 
+	 * @param {arguments} arguments of calling function
+	 * @return {Result} Result object if error, false if no error.
+	 */
+	function validator() {
+		method = ''+this;
+		var	failed = false,
+			criteria = arguments[0] || false;
+			
+		if (!criteria || typeof criteria != 'object')
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingType);
+
+		return failed;
+	}
+	
+	function findById(dbase, id){
+		for (var i in dbase) {
+			if (id == dbase[i]['id']) {
+				return i;
+			}
+		}
+		return -1;
+	}	
+
+	function findByName(dbase, name){
+		for (var i in dbase) {
+			if (name == dbase[i]['CategoryName']) {
+				return i;
+			}
+		}
+		return -1;
+	}	
+
+
+	/** 
+	 * error messages
+	 * order of %s args: Service name, method name, parameter name 
+	 */
+	var msg = {
+		missingType			: '%s%s : Type is missing',
+		badType				: '%s%s : Type is invalid',		
+		missingData			: '%s%s : Type or Data is missing',
+		missingId			: '%s%s : Id is missing',
+		invalidId			: '%s%s : id is invalid',
+		missingLandmarkName	: '%s%s : Landmrak name Missing',
+		missingCategoryName	: '%s%s : CategoryName is missing',
+		missingSourceFile	: '%s%s : Import Source Filename is Missing',
+		missingMimeType		: '%s%s : MIME type for source file is Missing',
+		missingDestFile		: '%s%s : DestinationFile is missing',
+		invalidOpType		: '%s%s : OperationType is invalid',
+		missingIdList		: '%s%s : Id list is Missing',
+		missingTID 			: '%s%s : TransactionID is missing',
+		invalidMime			: '%s%s : MimeType is missing',
+		msgNoMsg			: '',
+		
+	};
+		
+
+}) ()
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/preview/script/lib/sapi/Location.js	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,523 @@
+/**
+ * Location.js
+ * 
+ * Nokia Web Runtime Service API emulation 
+ * WRT v1.1
+ * 
+ * Copyright 2009 Nokia Corporation. All rights reserved.
+*/
+
+ 
+(function(){
+	
+	var provider = 'Service.Location',
+		Interface = 'ILocation';
+
+	/**
+	 * Landmark service
+	 */
+	var LocationService = function(){
+		this.GetLocation 			= __GetLocation;
+		this.Trace 					= __Trace;
+		this.Calculate				= __Calculate;
+		this.CancelNotification		= __CancelNotification;		
+	}
+
+	device.implementation.extend(provider, Interface, new LocationService() );
+
+
+	/******************************************************/	
+	/******************************************************/	
+	/******************************************************/	
+
+	var	context = device.implementation.context,
+		_t = context._t,
+		method = '',
+		result = false,
+		DBase = null;
+
+
+	var transactionIds = new Array();
+	var tTransactionId = -1;
+	var isTraceInProgress = false;
+	var criteriaTrace;
+	var callbackTrace;
+
+	/**
+	 * Landmarks: GetLocation
+	 * @param {Object} criteria
+	 */
+	function __GetLocation(criteria, callback, flag){	
+		method = "GetLocation";
+		//	Async call
+		flag = flag || false;
+
+		if (!criteria) {
+			criteria = new Object();
+		}	
+		
+		if(typeof criteria.LocationInformationClass == "undefined")
+			criteria.LocationInformationClass = "BasicLocationInformation"; // Default value of LocationInformationClass is "BasicLocationInformation" if not provided
+
+		var result = validateArgument('GetLocation',criteria);
+		if(result.ErrorCode != 0)
+			return result;
+		
+		if (typeof callback == 'function') {
+			
+			var retVal = context.callAsync(this, arguments.callee, criteria, callback,true);
+			transactionIds.push(retVal.TransactionID);  // all transaction ids are pushed on this variable, because CancelNotification function of SAPI doesn't take TransactioID as input
+			return retVal;
+		}
+		
+		if(flag)
+		{
+			transactionIds.shift();  // Remove oldest TransactionID(FIFO) (Async call)
+		}
+		
+		DBase = context.getData(provider);
+		var returnValue = DBase[criteria.LocationInformationClass];
+		locationNotify(criteria.Updateoptions);
+		return context.Result(returnValue);
+	}
+	
+	/**
+	 * Location: Trace
+	 * @param {Object} criteria
+	 * @param {Function} callback function for async call
+	 */
+	function __Trace(criteria, callback){
+		method = "Trace";
+
+		if (!criteria) {
+			criteria = new Object();
+		}	
+		
+		if(typeof criteria.LocationInformationClass == "undefined")
+			criteria.LocationInformationClass = "BasicLocationInformation"; // Default value of LocationInformationClass is "BasicLocationInformation" if not provided
+
+		if (typeof callback != 'function') { // callback should be valid function
+			return error(device.implementation.ERR_SERVICE_NOT_SUPPORTED,msg.msgCommandNotFound); 
+		}
+		
+		var result = validateArgument('Trace',criteria);
+		if(result.ErrorCode != 0)
+			return result;
+		
+		criteriaTrace = criteria;
+		callbackTrace = callback;
+		isTraceInProgress = true;
+		locationNotify(criteria.Updateoptions);
+
+		return traceCall(criteria,callback);
+	}
+
+	/**
+	 * Location: Calculate
+	 * @param {Object} criteria
+	 */
+	function __Calculate(criteria){
+		method = "Calculate";
+		if(!criteria || !criteria.MathRequest)
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgCalcMissingMathReq);
+			
+		if(typeof criteria.MathRequest != "string" || (criteria.MathRequest != "FindDistance" && criteria.MathRequest != "FindBearingTo" && criteria.MathRequest != "MoveCoordinates")) // Error check for wrong MathRequest criteria
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgCalcWrongTypeMathReq);
+			
+		if(typeof criteria.DistanceParamSource != "object" || (typeof criteria.DistanceParamSource.Latitude != "number" || typeof criteria.DistanceParamSource.Longitude != "number" || typeof criteria.DistanceParamSource.Altitude != "number"))
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgCalcMissingArgLocCord);
+
+		if(criteria.MathRequest == "FindDistance" || criteria.MathRequest == "FindBearingTo")
+		{
+			if(typeof criteria.DistanceParamSource != "object" || (typeof criteria.DistanceParamDestination.Latitude != "number" || typeof criteria.DistanceParamDestination.Longitude != "number" || typeof criteria.DistanceParamDestination.Altitude != "number"))
+				return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgCalcMissingArgLocCord);
+			if (criteria.MathRequest == "FindDistance") {
+				var dist = LatLon.distHaversine(criteria.DistanceParamDestination.Latitude, criteria.DistanceParamDestination.Longitude, criteria.DistanceParamSource.Latitude, criteria.DistanceParamSource.Longitude)*1000;
+				if (typeof criteria.DistanceParamDestination.Altitude == "number" && typeof criteria.DistanceParamSource.Altitude == "number") {
+					var delta = criteria.DistanceParamDestination.Altitude - criteria.DistanceParamSource.Altitude
+					dist = Math.sqrt(dist * dist + delta * delta);
+				}
+				return context.Result(dist);
+			}
+			else if (criteria.MathRequest == "FindBearingTo"){
+				var bearing = LatLon.bearing( criteria.DistanceParamSource.Latitude, criteria.DistanceParamSource.Longitude,criteria.DistanceParamDestination.Latitude, criteria.DistanceParamDestination.Longitude);
+				return context.Result(bearing);				
+			}
+		}
+		else if(criteria.MathRequest == "MoveCoordinates"){
+
+			if(typeof criteria.MoveByThisDistance == "undefined")
+				return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgCalcMissingArgMoveDist);
+			
+			if(typeof criteria.MoveByThisBearing == "undefined")
+				return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgCalcMissingArgMoveBear);
+			
+
+			if(typeof criteria.MoveByThisDistance != "number")
+				return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgCalcWrongTypeMoveDist);
+			
+			if(typeof criteria.MoveByThisBearing != "number")
+				return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgCalcWrongTypeMoveBear);
+			
+			var latLon = new LatLon(criteria.DistanceParamSource.Latitude, criteria.DistanceParamSource.Longitude);
+			var dlatLon = latLon.destPoint(criteria.MoveByThisBearing, criteria.MoveByThisDistance/1000);
+			var retVal = new Object();
+			retVal.Longitude = dlatLon.lon;
+			retVal.Latitude = dlatLon.lat;
+			retVal.Altitude = criteria.DistanceParamSource.Altitude;
+			return context.Result(retVal);
+		}
+	}
+			
+	/**
+	 * Location: CancelNotification
+	 * @param {Object} criteria
+	 */
+	function __CancelNotification(criteria){
+		method = "Cancel";
+		if(!criteria)
+				return error(device.implementation.ERR_MISSING_ARGUMENT,msg.msgCancelMissingType);
+		
+		var arr = new Array();
+		var i = 0;
+		var key
+		for(key in criteria);
+			arr[i++] = key;
+
+		if(!criteria.CancelRequestType && arr.length)
+				return error(device.implementation.ERR_NOT_FOUND,msg.msgCancelMissingType);
+		
+		if(criteria.CancelRequestType != "GetLocCancel" && criteria.CancelRequestType != "TraceCancel")
+				return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgCancelWrongType);
+		
+		if (criteria.CancelRequestType == "GetLocCancel") {
+			for (var i = 0; i < transactionIds.length; i++) {
+				clearTimeout(transactionIds[i])
+			}
+		}
+		
+		if (criteria.CancelRequestType == "TraceCancel")
+		{
+			isTraceInProgress = false;
+			tTransactionId = -1;
+		}
+		return context.ErrorResult(device.implementation.ERR_SUCCESS);
+	}
+		
+
+
+	
+	/*******************************
+	 * helper functions
+	 *******************************/
+
+	/**
+	 * Location: traceCall
+	 * @param {} 
+	 * This function emulates repetitive trace calls,It calls specified callback function after every UpdateInterval untill 
+	 * CancelNotification is called
+	 */
+	function traceCall(){
+		var tid = setTimeout(function(){
+		if(!isTraceInProgress)
+			return;
+			
+		DBase = context.getData(provider);
+		var returnValue = DBase[criteriaTrace.LocationInformationClass];
+		var result,
+			eventCode = {completed:2, error:4, progress:9},
+		code = eventCode.completed;
+
+		callbackTrace(tTransactionId,code,context.Result(returnValue,0));
+		traceCall();
+		}, criteriaTrace.Updateoptions.UpdateInterval/1000);
+		if(tTransactionId == -1)
+			tTransactionId = tid;
+		return context.AsyncResult(tTransactionId);
+	}
+
+	/**
+	 * Location: validateArgument
+	 * @param {string,object} callingMethod and criteria
+	 * Validates arguments
+	 */
+	function validateArgument(fun,criteria)
+	{
+		method = fun;
+		if(typeof criteria.Updateoptions != "undefined")
+		{
+			if(typeof criteria.Updateoptions != "object") // Checking for error in UpdateOptions criteria
+				return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgGetLocationBadArg);
+			
+			if(typeof criteria.Updateoptions.UpdateInterval != "undefined" && typeof criteria.Updateoptions.UpdateInterval != "number")
+				return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgGetLocationWrongType);
+			
+			if(typeof criteria.Updateoptions.UpdateTimeOut != "undefined" && typeof criteria.Updateoptions.UpdateTimeOut != "number")	
+				return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgGetLocationWrongType);
+
+			if(typeof criteria.Updateoptions.UpdateMaxAge != "undefined" && typeof criteria.Updateoptions.UpdateMaxAge != "number")	
+				return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgGetLocationWrongType);
+
+			if(typeof criteria.Updateoptions.PartialUpdates != "undefined" && typeof criteria.Updateoptions.PartialUpdates != "boolean")	
+				return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgGetLocationWrongType);
+
+			if((typeof criteria.Updateoptions.UpdateInterval != "undefined" && criteria.Updateoptions.UpdateInterval  < 0) || 
+					(typeof criteria.Updateoptions.UpdateTimeOut != "undefined" && criteria.Updateoptions.UpdateTimeOut  < 0) ||
+					(typeof criteria.Updateoptions.UpdateMaxAge != "undefined" && criteria.Updateoptions.UpdateMaxAge  < 0))
+				return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgGetLocationNegInt);
+
+			if(typeof criteria.Updateoptions.UpdateTimeOut != "undefined" && typeof criteria.Updateoptions.UpdateInterval != "undefined" && criteria.Updateoptions.UpdateInterval > criteria.Updateoptions.UpdateTimeOut)
+			{
+				return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgNone);
+			}
+
+			/*if((typeof criteria.Updateoptions.UpdateTimeOut != "undefined" && criteria.Updateoptions.UpdateTimeOut <= 1000000))// || (typeof criteria.Updateoptions.UpdateInterval != "undefined" && criteria.Updateoptions.UpdateInterval <= 1000000))
+			{
+				return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgNone);
+			}*/				
+		}
+
+		if(typeof criteria.LocationInformationClass != "undefined" && criteria.LocationInformationClass != "BasicLocationInformation" && criteria.LocationInformationClass != "GenericLocationInfo") // checking for errors in LocationInformationClass criteria
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgGetLocationWrongCat);
+		
+		if (/^Trace$/i.test(fun)&&(!criteria.Updateoptions || typeof criteria.Updateoptions.UpdateInterval == "undefined")) {
+			if(!criteria.Updateoptions)
+			{
+				criteria.Updateoptions = new Object();
+			}
+			criteria.Updateoptions.UpdateInterval = 1000000;  // Emulation only!! for convenience UpdateInterval is set to 1 second is not specified or if it less than 1 second
+			context.notify("Using default UpdateInterval(1000000 micro seconds)"); 
+		}
+		
+		return context.ErrorResult(device.implementation.ERR_SUCCESS, "");
+		
+	}
+
+	/**
+	 * Location: error
+	 * @param {number,string} ErrorCode and ErrorString
+	 * Replaces Error String with method name
+	 */
+	function error(code, msg /*, args...*/){
+
+		var args = ['location',method].concat([].slice.call(arguments,2));
+		msg = msg ? _t().arg.apply(msg,args) : undefined;
+		return context.ErrorResult(code, msg);
+	}
+	
+	function locationNotify(updateoptions) {
+		if(!updateoptions)
+			return;
+		if(typeof updateoptions.UpdateTimeOut != "undefined")
+			context.notify(_t("%s:: %s : Updateoptions.UpdateTimeOut not implemented in preview").arg(provider, method));
+
+		if(typeof updateoptions.UpdateMaxAge != "undefined")
+			context.notify(_t("%s:: %s : Updateoptions.UpdateMaxAge not implemented in preview").arg(provider, method));
+
+		if(typeof updateoptions.PartialUpdates != "undefined")
+			context.notify(_t("%s:: %s : Updateoptions.PartialUpdates not implemented in preview").arg(provider, method));
+	}
+
+	/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */
+	/*  Latitude/longitude spherical geodesy formulae & scripts (c) Chris Veness 2002-2009            */
+	/*	http://www.movable-type.co.uk/scripts/latlong.html											  */  
+	/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */
+	
+	/*
+	 * Use Haversine formula to Calculate distance (in km) between two points specified by 
+	 * latitude/longitude (in numeric degrees)
+	 *
+	 * example usage from form:
+	 *   result.value = LatLon.distHaversine(lat1.value.parseDeg(), long1.value.parseDeg(), 
+	 *                                       lat2.value.parseDeg(), long2.value.parseDeg());
+	 * where lat1, long1, lat2, long2, and result are form fields
+	 */
+	
+	
+	LatLon.distHaversine = function(lat1, lon1, lat2, lon2) {
+	  var R = 6371; // earth's mean radius in km
+	  var dLat = toRad(lat2-lat1);
+	  var dLon = toRad(lon2-lon1);
+	  lat1 = toRad(lat1), lat2 = toRad(lat2);
+	
+	  var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
+	          Math.cos(lat1) * Math.cos(lat2) * 
+	          Math.sin(dLon/2) * Math.sin(dLon/2);
+	  var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
+	  var d = R * c;
+	  return d;
+	}
+	
+	
+	/*
+	 * ditto using Law of Cosines
+	 */
+	LatLon.distCosineLaw = function(lat1, lon1, lat2, lon2) {
+	  var R = 6371; // earth's mean radius in km
+	  var d = Math.acos(Math.sin(toRad(lat1))*Math.sin(toRad(lat2)) +
+	                    Math.cos(toRad(lat1))*Math.cos(toRad(lat2))*Math.cos(toRad(lon2-lon1))) * R;
+	  return d;
+	}
+	
+	
+	/*
+	 * calculate (initial) bearing between two points
+	 *   see http://williams.best.vwh.net/avform.htm#Crs
+	 */
+	LatLon.bearing = function(lat1, lon1, lat2, lon2) {
+	  lat1 = toRad(lat1); lat2 = toRad(lat2);
+	  var dLon = toRad(lon2-lon1);
+
+	  var y = Math.sin(dLon) * Math.cos(lat2);
+	  var x = Math.cos(lat1)*Math.sin(lat2) -
+	          Math.sin(lat1)*Math.cos(lat2)*Math.cos(dLon);
+	  return toBrng(Math.atan2(y, x));
+	}
+	
+	
+	/*
+	 * calculate destination point given start point, initial bearing (deg) and distance (km)
+	 *   see http://williams.best.vwh.net/avform.htm#LL
+	 */
+	LatLon.prototype.destPoint = function(brng, d) {
+	  var R = 6371; // earth's mean radius in km
+	  var lat1 = toRad(this.lat), lon1 = toRad(this.lon);
+	  brng = toRad(brng);
+	
+	  var lat2 = Math.asin( Math.sin(lat1)*Math.cos(d/R) + 
+	                        Math.cos(lat1)*Math.sin(d/R)*Math.cos(brng) );
+	  var lon2 = lon1 + Math.atan2(Math.sin(brng)*Math.sin(d/R)*Math.cos(lat1), 
+	                               Math.cos(d/R)-Math.sin(lat1)*Math.sin(lat2));
+	  lon2 = (lon2+Math.PI)%(2*Math.PI) - Math.PI;  // normalise to -180...+180
+	
+	  if (isNaN(lat2) || isNaN(lon2)) return null;
+	  return new LatLon(toDeg(lat2), toDeg(lon2));
+	}
+	
+	
+	/*
+	 * construct a LatLon object: arguments in numeric degrees
+	 *
+	 * note all LatLong methods expect & return numeric degrees (for lat/long & for bearings)
+	 */
+	function LatLon(lat, lon) {
+	  this.lat = lat;
+	  this.lon = lon;
+	}
+	
+	
+	/*
+	 * represent point {lat, lon} in standard representation
+	 */
+	LatLon.prototype.toString = function() {
+	  return this.lat.toLat() + ', ' + this.lon.toLon();
+	}
+	
+	/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */
+	
+	// extend String object with method for parsing degrees or lat/long values to numeric degrees
+	//
+	// this is very flexible on formats, allowing signed decimal degrees, or deg-min-sec suffixed by 
+	// compass direction (NSEW). A variety of separators are accepted (eg 3º 37' 09"W) or fixed-width 
+	// format without separators (eg 0033709W). Seconds and minutes may be omitted. (Minimal validation 
+	// is done).
+	
+	function parseDeg (str) {
+	  if (!isNaN(str)) return Number(str);                 // signed decimal degrees without NSEW
+	
+	  var degLL = str.replace(/^-/,'').replace(/[NSEW]/i,'');  // strip off any sign or compass dir'n
+	  var dms = degLL.split(/[^0-9.]+/);                     // split out separate d/m/s
+	  for (var i in dms) if (dms[i]=='') dms.splice(i,1);    // remove empty elements (see note below)
+	  switch (dms.length) {                                  // convert to decimal degrees...
+	    case 3:                                              // interpret 3-part result as d/m/s
+	      var deg = dms[0]/1 + dms[1]/60 + dms[2]/3600; break;
+	    case 2:                                              // interpret 2-part result as d/m
+	      var deg = dms[0]/1 + dms[1]/60; break;
+	    case 1:                                              // decimal or non-separated dddmmss
+	      if (/[NS]/i.test(str)) degLL = '0' + degLL;       // - normalise N/S to 3-digit degrees
+	      var deg = dms[0].slice(0,3)/1 + dms[0].slice(3,5)/60 + dms[0].slice(5)/3600; break;
+	    default: return NaN;
+	  }
+	  if (/^-/.test(str) || /[WS]/i.test(str)) deg = -deg; // take '-', west and south as -ve
+	  return deg;
+	}
+	// note: whitespace at start/end will split() into empty elements (except in IE)
+	
+	
+	/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */
+	
+	// extend Number object with methods for converting degrees/radians
+	
+	function toRad (deg) {  // convert degrees to radians
+	  return deg * Math.PI / 180;
+	}
+	
+	function toDeg (rad) {  // convert radians to degrees (signed)
+	  return rad * 180 / Math.PI;
+	}
+	
+	function toBrng (rad) {  // convert radians to degrees (as bearing: 0...360)
+	  return (toDeg(rad)+360) % 360;
+	}
+	
+	
+	/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */
+	
+	// extend Number object with methods for presenting bearings & lat/longs
+	
+	function toDMS (num) {  // convert numeric degrees to deg/min/sec
+	  var d = Math.abs(num);  // (unsigned result ready for appending compass dir'n)
+	  d += 1/7200;  // add ½ second for rounding
+	  var deg = Math.floor(d);
+	  var min = Math.floor((d-deg)*60);
+	  var sec = Math.floor((d-deg-min/60)*3600);
+	  // add leading zeros if required
+	  if (deg<100) deg = '0' + deg; if (deg<10) deg = '0' + deg;
+	  if (min<10) min = '0' + min;
+	  if (sec<10) sec = '0' + sec;
+	  return deg + '\u00B0' + min + '\u2032' + sec + '\u2033';
+	}
+	
+	function toLat (deg) {  // convert numeric degrees to deg/min/sec latitude
+	  return toDMS(deg).slice(1) + (deg<0 ? 'S' : 'N');  // knock off initial '0' for lat!
+	}
+	
+	function toLon (deg) {  // convert numeric degrees to deg/min/sec longitude
+	  return toDMS(deg) + (deg>0 ? 'E' : 'W');
+	}
+	
+	function toPrecision (num,fig) {  // override toPrecision method with one which displays 
+	  if (num == 0) return 0;                      // trailing zeros in place of exponential notation
+	  var scale = Math.ceil(Math.log(num)*Math.LOG10E);
+	  var mult = Math.pow(10, fig-scale);
+	  return Math.round(num*mult)/mult;
+	}
+
+
+	/** 
+	 * error messages
+	 * order of %s args: Service name, method name, parameter name 
+	 */
+	var msg = {
+		msgCommandNotFound			: '%s : Command Not found',
+		msgGetLocationWrongCat		: '%s : %s : wrong category info should be BasicLocationInformation/GenericLocationInfo ',
+		msgGetLocationBadArg		: '%s : %s : BadArgument - Updateoptions',
+		msgGetLocationNegInt		: '%s : %s : Negative Time Interval',
+		msgGetLocationWrongType 	: '%s : %s : UpdateOptions Type mismatch',
+		msgTraceWrongCat			: '%s : %s : Invalid LocationInformationClass',
+		msgCalcMissingMathReq 		: '%s : %s : Missing argument - MathRequest',
+		msgCalcWrongTypeMathReq 	: '%s : %s : Wrong argument - MathRequest',
+		msgCalcMissingArgLocCord 	: '%s : %s : Missing argument - locationcoordinate',
+		msgCalcMissingArgMoveDist 	: '%s : %s : Missing argument - MoveByThisDistance',
+		msgCalcMissingArgMoveBear 	: '%s : %s : Missing argument - MoveByThisBearing',
+		msgCalcWrongTypeMoveDist  	: '%s : %s : TypeMismatch - MoveByThisDistance',
+		msgCalcWrongTypeMoveBear 	: '%s : %s : TypeMismatch - MoveByThisBearing',
+		msgCancelBadArg 			: '%s : %s : BadArgument – cancel type',
+		msgCancelMissingType 		: '%s : %s : Missing cancel type',
+		msgCancelWrongType 			: '%s : %s : Wrong cancel type'	,
+		msgNone						: ''	
+	};
+		
+
+}) ()
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/preview/script/lib/sapi/Logging.js	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,535 @@
+/**
+ * Logging.js
+ * 
+ * Nokia Web Runtime Service API emulation 
+ * WRT v1.1
+ * 
+ * Copyright 2009 Nokia Corporation. All rights reserved.
+*/
+
+ 
+(function(){
+	
+	var provider = 'Service.Logging',
+		Interface = 'IDataSource';
+
+	/**
+	 * Landmark service
+	 */
+	var LoggingService = function(){
+		this.Add 					= __Add;
+		this.GetList 				= __GetList;
+		this.Delete					= __Delete;
+		this.RequestNotification	= __RequestNotification;		
+		this.Cancel					= __Cancel;		
+
+	}
+
+	device.implementation.extend(provider, Interface, new LoggingService() );
+
+
+	/******************************************************/	
+	/******************************************************/	
+	/******************************************************/	
+
+	var	context = device.implementation.context,
+		_t = context._t,
+		method = '',
+		result = false,
+		DBase = null;
+
+	var transactionIds = new Array();
+	var tTransactionId = -1;
+	var isTraceInProgress = false;
+	var criteriaReq;
+	var callbackReq;
+
+	/**
+	 * Logging: Add
+	 * @param {Object} criteria
+	 * @param (function) callback
+	 */
+	function __Add(criteria, callback, flag){
+		method = "Add";
+		//	Async call
+		flag = flag || false;
+
+		if (!flag) {
+			var result = ValidateAdd(criteria, callback);
+			if (result.ErrorCode != 0) 
+				return result;
+		}			
+		
+		
+		if(typeof callback == 'function')
+		{
+			return context.callAsync(this, arguments.callee, criteria, callback);
+		}
+		DBase = context.getData(provider);
+		var returnValue = DBase[criteria.Type];
+		criteria.Item.id = 	GenerateRandomNumber()+'';
+		criteria.Item["EventTime"] = GetCurrDate();
+		returnValue.push(criteria.Item);
+		return context.Result(criteria.Item.id,0);
+	}
+
+	/**
+	 * Logging: GetList
+	 * @param {Object} criteria
+	 * @param (function) callback
+	 */
+	function __GetList(criteria, callback, flag){	
+		method = "GetList";
+		//	Async call
+		flag = flag || false;
+
+		if (!flag) {
+			var result = ValidateGetList(criteria, callback);
+			if (result.ErrorCode != 0) 
+				return result;
+		}			
+		
+		
+		if(typeof callback == 'function')
+		{
+			return context.callAsync(this, arguments.callee, criteria, callback);
+		}
+		if(criteria.Filter){
+			context.notify(_t('%s:: GetList : filter not implemented in preview').arg(provider));
+		}
+				
+		DBase = context.getData(provider);
+		var returnValue;
+		// @todo: apply filter criteria
+		returnValue = context.Iterator( DBase[criteria.Type] || [] );
+		
+		return context.Result(returnValue,0);
+	}
+
+	/**
+	 * Logging: Delete
+	 * @param {Object} criteria
+	 * @param (function) callback
+	 */
+	function __Delete(criteria, callback, flag){
+		method = "Delete";
+		//	Async call
+		flag = flag || false;		
+		if (!flag) {
+			if (!criteria || !criteria.Type) 
+				return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgTypeMissing);
+
+			if (typeof criteria.Type != 'string') 
+				return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgTypeInvalid);
+			
+			if (criteria.Type != 'Log') 
+				return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgTypeInvalid);
+			
+			if (!criteria.Data) 
+				return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgDataMissing);
+			
+			if(typeof criteria.Data != 'object')
+				return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgDataInvalid);
+
+			if(typeof criteria.Data.id == 'undefined')
+				return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgid);
+			
+			if (typeof criteria.Data.id != "string") 
+				return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgidInvalid);
+				
+			if(criteria.Data.id == '')
+				return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgidInvalid);
+		}
+		DBase = context.getData(provider);
+		var returnValue,found = false;
+		returnValue = DBase[criteria.Type];
+		for(var i=0; i<returnValue.length; i++){
+			if(returnValue[i].id == criteria.Data.id)
+			{
+				found = true;
+				returnValue.splice(i,1);
+			}			
+		}
+		if(!found)
+			return error(device.implementation.ERR_NOT_FOUND, msg.msgidInvalid);
+		
+		return context.Result(undefined,0);
+	}
+
+	/**
+	 * Logging: RequestNotification
+	 * @param {Object} criteria
+	 * @param (function) callback
+	 */
+	function __RequestNotification(criteria, callback, flag){
+		method = "RequestNotification";
+		
+		//	Async call
+		flag = flag || false;		
+		if (!flag) {
+			if (!criteria || !criteria.Type) 
+				return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgTypeMissing);
+
+			if (typeof criteria.Type != 'string') 
+				return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgTypeInvalid);
+			
+			if (criteria.Type != 'Log') 
+				return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgTypeInvalid);
+			
+			if (!criteria.Filter)
+				return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgFilterMissing);
+
+			if(typeof criteria.Filter != 'object') 
+				return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgFilterInvalid);
+			
+			if(typeof criteria.Filter.DelayTime == 'undefined') 
+				return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgDelayTimeMissing);
+			
+			if(typeof criteria.Filter.DelayTime != 'number')
+				return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgDelayTimeInvalid);
+			if(criteria.Filter.DelayTime <= 0)
+				return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgDelayTimeInvalid);
+			
+			if(criteria.Filter.DelayTime < 1000000 )
+			{
+				criteria.Filter.DelayTime = 1000000;
+				context.notify(_t('%s:: RequestNotification : Using DelayTime = 1000000').arg(provider));
+			}
+		}
+		if(typeof callback != 'function')
+				return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgMissingCallback);
+
+		criteriaReq = criteria;
+		callbackReq = callback;
+		isTraceInProgress = true;
+
+		return notificationCall(criteria,callback);
+	}
+
+	/**
+	 * Logging: Cancel
+	 * @param {Object} criteria
+	 * @param (function) callback
+	 */
+	function __Cancel(criteria){
+			method = "Cancel";
+			if (!criteria || typeof criteria.TransactionID == 'undefined') 
+				return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgTransactionIdMissing);
+			
+			if (typeof criteria.TransactionID != 'number') 
+				return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgTransactionIdInvalid);
+			
+			clearTimeout(criteria.TransactionID);
+			if (criteria.TransactionID == tTransactionId) {
+				isTraceInProgress = false;
+				tTransactionId = -1;
+			}
+		return context.ErrorResult(device.implementation.ERR_SUCCESS);
+
+	}
+	
+
+	/**
+	 * Location: error
+	 * @param {number,string} ErrorCode and ErrorString
+	 * Replaces Error String with method name
+	 */
+	function error(code, msg /*, args...*/){
+
+		var args = ['Logging',method].concat([].slice.call(arguments,2));
+		msg = msg ? _t().arg.apply(msg,args) : undefined;
+		return context.ErrorResult(code, msg);
+	}
+	
+	/**
+	 * Logging: notificationCall
+	 * @param {} 
+	 * This function Calls callback function after given delay
+	 */
+	function notificationCall(){
+		var tid = setTimeout(function(){
+		if(!isTraceInProgress)
+			return;
+			
+		DBase = context.getData(provider);
+		var returnValue;
+		returnValue = context.Iterator( DBase[criteriaReq.Type] || [] );
+
+		var result,
+			eventCode = {completed:2, error:4, progress:9},
+		code = eventCode.completed;
+
+		callbackReq(tTransactionId,code,context.Result(returnValue,0));
+		//notificationCall();
+		}, criteriaReq.Filter.DelayTime/1000);
+		if(tTransactionId == -1)
+			tTransactionId = tid;
+		return context.AsyncResult(tTransactionId);
+	}
+	
+	/**
+	 * Helper functions
+	 */
+
+	/**
+	 * GenerateRandomNumber
+	 * @param {}array of log data for getting unique ID 
+	 * 
+	 */
+	function GenerateRandomNumber(arr)
+	{
+		var randomnumber = Math.floor(Math.random() * 10001);
+		randomnumber +=200;
+		return randomnumber;
+	}
+
+	/**
+	 * GetCurrDate
+	 * @param {}Gets date in internet format
+	 * 
+	 */
+	function GetCurrDate()
+	{
+		var d_names = new Array("Sunday", "Monday", "Tuesday",
+		"Wednesday", "Thursday", "Friday", "Saturday");
+		
+		var m_names = new Array("January", "February", "March", 
+		"April", "May", "June", "July", "August", "September", 
+		"October", "November", "December");
+		
+		var ampm = "am";
+		
+		var d = new Date();
+		var curr_day = d.getDay();
+		var curr_date = d.getDate();
+		if(curr_date <10)
+			curr_date = "0"+curr_date;
+		var curr_month = d.getMonth();
+		var curr_year = d.getFullYear();
+		var curr_hour = d.getHours();
+		if(curr_hour > 11)
+		{
+			ampm = "pm";
+		}
+		else if(curr_hour <10)
+		{
+			curr_hour = "0"+curr_hour;
+		}	
+		var curr_min = d.getMinutes();
+		if(curr_min <10)
+			curr_min = "0"+curr_min;
+	
+		var curr_sec = d.getSeconds();
+		if(curr_sec <10)
+			curr_sec = "0"+curr_sec;
+		
+		var strDate = d_names[curr_day]+', '+curr_date+' '+m_names[curr_month]+', '+curr_year+' '+curr_hour+':'+curr_min+':'+curr_sec+' '+ampm;
+		return strDate;
+	}	
+
+	/**
+	 * ValidateAdd
+	 * @param {object,function}
+	 * Validates ADD arguments
+	 */	
+	function ValidateAdd(criteria,callback)
+	{
+		var type;
+		if(!criteria || !criteria.Type)
+			return error(device.implementation.ERR_MISSING_ARGUMENT,msg.msgTypeMissing);
+
+		if (typeof criteria.Type != 'string') 
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgTypeInvalid);
+		
+		if(criteria.Type != 'Log')
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT,msg.msgTypeInvalid);
+		
+		if (!criteria.Item)
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgItemMissing);
+
+		if(typeof criteria.Item != 'object') 
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgItemInvalid);
+		
+		
+		if(typeof criteria.Item.EventType == "undefined")
+			return error(device.implementation.ERR_MISSING_ARGUMENT,msg.msgEventTypeMissing);
+
+		if(typeof criteria.Item.EventType != "number" )
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgEventTypeInvalid);
+		
+		if(typeof criteria.Item.EventType == "number" && !(criteria.Item.EventType >=0 && criteria.Item.EventType <=4))
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT,msg.msgEventTypeInvalid);
+		
+		type = typeof criteria.Item.RemoteParty;
+		if(type != 'undefined' &&  type != "string")
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgRemotePartyInvalid);
+		
+		type = typeof criteria.Item.Direction;
+		if (type != 'undefined') {
+			if (type != "number") 
+				return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgDirectionInvalid);
+			
+			if (type == "number" && (criteria.Item.Direction < 0 || criteria.Item.Direction > 6)) 
+				return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgDirectionInvalid);
+		}
+
+		type = typeof criteria.Item.EventDuration;
+		if(type != 'undefined' &&  type != "number")
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgEventDurationInvalid);
+			
+		type = typeof criteria.Item.DeliveryStatus;
+		if (type != 'undefined') {
+			if (type != "number") 
+				return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgDeliveryStatusInvalid);
+			
+			if (type == "number" && (criteria.Item.DeliveryStatus < 0 || criteria.Item.DeliveryStatus > 6)) 
+				return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgDeliveryStatusInvalid);
+		}
+		
+		type = typeof criteria.Item.Subject;
+		if(type != 'undefined' &&  type != "string")
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgSubjectInvalid);
+
+		type = typeof criteria.Item.PhoneNumber;
+		if(type != 'undefined' &&  type != "string")
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgPhoneNumberInvalid);
+
+		type = typeof criteria.Item.Link;
+		if(type != 'undefined' &&  type != "number")
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgLinkInvalid);
+
+		type = typeof criteria.Item.LogFlags;
+		if(type != 'undefined' && (type != "number" || (criteria.Item.LogFlags != 1 && criteria.Item.LogFlags != 0)))
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgLogFlagsInvalid);
+
+		return context.ErrorResult(device.implementation.ERR_SUCCESS, "");
+	}	
+
+	/**
+	 * ValidateGetList
+	 * @param {object,function}
+	 * Validates GetList function
+	 */	
+	function ValidateGetList(criteria,callback)
+	{
+		var type;
+		if(!criteria || !criteria.Type)
+			return error(device.implementation.ERR_MISSING_ARGUMENT,msg.msgTypeMissing);
+
+		if (typeof criteria.Type != 'string') 
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgTypeInvalid);
+		
+		if(criteria.Type != 'Log')
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT,msg.msgTypeInvalid);
+
+		type = typeof criteria.Filter;
+		if(type != 'undefined' &&  type != "object")
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgFilterInvalid);
+		
+		if(type == 'undefined')
+			return context.ErrorResult(device.implementation.ERR_SUCCESS, "");		
+		
+		type = typeof criteria.Filter.id;
+		if(type != 'undefined' &&  type != "string")
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgid);
+		
+		if(type != 'undefined')
+			return context.ErrorResult(device.implementation.ERR_SUCCESS, "");  // if id is given all other filters will be ignored
+
+		type = typeof criteria.Filter.EventType;
+		if (type != 'undefined') {
+			if (type != "number") 
+				return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgEventTypeInvalid);
+		
+			if (type != "number" || !(criteria.Filter.EventType >= 0 && criteria.Filter.EventType <= 4)) 
+				return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgEventTypeInvalid);
+		}		
+		type = typeof criteria.Filter.RecentList;
+		if (type != 'undefined') {
+			if (type != "number") 
+				return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgRecentListInvalid);
+			if (type == "number" && (criteria.Filter.RecentList < -1 || criteria.Filter.RecentList > 3)) 
+				return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgRecentListInvalid);
+		}
+		
+		type = typeof criteria.Filter.RemoteParty;
+		if(type != 'undefined' &&  type != "string")
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgRemotePartyInvalid);
+		
+		type = typeof criteria.Filter.Direction;
+		if (type != 'undefined') {
+			if (type != "number") 
+				return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgDirectionInvalid);
+			if (type == "number" && (criteria.Filter.Direction < 0 || criteria.Filter.Direction > 6)) 
+				return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgDirectionInvalid);
+		}
+		
+		type = typeof criteria.Filter.DeliveryStatus;
+		if (type != 'undefined') {
+			if (type != "number") 
+				return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgDeliveryStatusInvalid);
+			if (type == "number" && (criteria.Filter.DeliveryStatus < 0 || criteria.Filter.DeliveryStatus > 6)) 
+				return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgDeliveryStatusInvalid);
+		}
+
+		type = typeof criteria.Filter.EndTime;
+		if(type != 'undefined' && (type != "object" ||  typeof criteria.Filter.EndTime.getTime != "function"))
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgEndTimeInvalid);
+
+		type = typeof criteria.Filter.PhoneNumber;
+		if(type != 'undefined' &&  type != "string")
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE,msg.msgPhoneNumberInvalid);
+
+
+		type = typeof criteria.Filter.LogFlags;
+		if (type != 'undefined') {
+			if (type != "number") 
+				return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgLogFlagsInvalid);
+			if (type == "number" && (criteria.Filter.LogFlags != 1 && criteria.Filter.LogFlags != 0)) 
+				return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgLogFlagsInvalid);
+		}
+		return context.ErrorResult(device.implementation.ERR_SUCCESS, "");
+	}	
+
+
+	/** 
+	 * error messages
+	 * order of %s args: Service name, method name, parameter name 
+	 */
+	var msg = {
+		msgTypeInvalid 				: '%s:%s:TypeInvalid',
+		msgTypeMissing				: '%s:%s:Type Missing',
+		msgFilterInvalid			: '%s:%s:FilterInvalid',
+		msgidInvalid				: '%s:%s:idInvalid',
+		msgRecentListInvalid		: '%s:%s:RecentListInvalid',
+		msgPhoneNumberInvalid		: '%s:%s:PhoneNumberInvalid',
+		msgDirectionInvalid			: '%s:%s:DirectionInvalid',
+		msgDeliveryStatusInvalid	: '%s:%s:DeliveryStatusInvalid',
+		msgLogFlagsInvalid			: '%s:%s:LogFlagsInvalid',
+		msgEndTimeInvalid			: '%s:%s:EndTimeInvalid',
+		msgRemotePartyInvalid		: '%s:%s:RemotePartyInvalid',
+		msgEventTypeInvalid			: '%s:%s:EventTypeInvalid',
+		msgItemInvalid				: '%s:%s:ItemInvalid',
+		msgItemMissing				: '%s:%s:ItemMissing',
+		msgEventTypeInvalid			: '%s:%s:EventTypeInvalid',
+		msgEventTypeMissing			: '%s:%s:EventType Missing',
+		msgEventDurationInvalid		: '%s:%s:EventDurationInvalid',
+		msgSubjectInvalid			: '%s:%s:SubjectInvalid',
+		msgEventDataInvalid			: '%s:%s:EventDataInvalid',
+		msgLinkInvalid				: '%s:%s:LinkInvalid',
+		msgDataInvalid				: '%s:%s:DataInvalid',
+		msgDataMissing				: '%s:%s:Data Missing',
+		msgid						: '%s:%s:id',
+		msgFilterInvalid			: '%s:%s:FilterInvalid',
+		msgFilterMissing			: '%s:%s:Filter Missing',
+		msgDelayTimeInvalid			: '%s:%s:DelayTimeInvalid',
+		msgDelayTimerMissing		: '%s:%s:DelayTimerMissing',
+		msgTransactionIdInvalid		: '%s:%s:TransactionIdInvalid',
+		msgTransactionIdMissing		: '%s:%s:TransactionID Missing',
+		msgMissingCallback			: '%s:%s:Missing Callback',
+		msgNoMsg					: '%s:%s:'
+	};
+		
+
+}) ()
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/preview/script/lib/sapi/MediaManagement.js	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,157 @@
+/**
+ * MediaManagement.js
+ * 
+ * Nokia Web Runtime Service API emulation 
+ * WRT v1.1
+ * 
+ * Copyright 2009 Nokia Corporation. All rights reserved.
+*/
+
+ 
+(function(){
+	
+	var provider = 'Service.MediaManagement' ,
+		Interface = 'IDataSource';
+
+	/**
+	 * MediaManagement service
+	 */
+	var MediaManagementService = function(){
+		this.GetList 	= __GetList;
+		this.Cancel 	= __Cancel;
+	}
+
+	device.implementation.extend(provider, Interface, new MediaManagementService() );
+
+
+	/******************************************************/	
+	/******************************************************/	
+	/******************************************************/	
+
+	var	context = device.implementation.context,
+		_t = context._t,
+		method = '',
+		result = false,
+		DBase = null;
+	
+	/**
+	 * MediaManagement: GetList
+	 * @param {Object} criteria
+	 * @param {Function} callback function for async call (mandatory)
+	 */
+	function __GetList(criteria, callback, _flag){
+
+		if ((result = validator.apply('GetList', arguments)) !== false)
+			return result; 
+
+		// _flag=true indicates re-called state
+		_flag = _flag || false;
+		if (!_flag) {
+
+			// callback is mandatory
+			if (typeof callback != 'function')
+				return error(device.implementation.ERR_MISSING_ARGUMENT, msg.badAsync);
+			
+			// continue validation after callback check		
+			if (!criteria.Filter) 
+				return error(device.implementation.ERR_MISSING_ARGUMENT, msg.is_missing, 'Filter');
+			
+			if (!criteria.Filter.FileType) 
+				return error(device.implementation.ERR_MISSING_ARGUMENT, msg.is_missing, 'FileType');
+			
+			if (!/^(Music|Sound|Image|Video|StreamingURL)$/i.test(criteria.Filter.FileType)) 
+				return error(device.implementation.ERR_BAD_ARGUMENT_TYPE);
+			
+			// process callback
+			_flag = true;
+			return context.callAsync(this, arguments.callee, criteria, callback, _flag);
+		}
+		
+		var returnValue = [], 
+			match = null,
+			fileType = criteria.Filter.FileType,
+			filter = criteria.Filter;
+ 
+ 		// normalize filetype
+		fileType = fileType[0].toUpperCase() + fileType.substr(1).toLowerCase();
+		fileType = fileType.replace(/url/i, 'URL');
+		
+		DBase = context.getData(provider);
+
+		// unsupported filters 
+		if (filter 
+			&& (match = context.keys(filter).join().match(/Key|StartRange|EndRange/ig)) ) {
+			context.notify(_t('%s:: GetList : filter %s not implemented in preview').arg(provider, match.join()));
+		}
+		// unsupported sort			
+		if (criteria.Sort) { 
+			context.notify(_t('%s:: GetList : sort not implemented in preview').arg(provider));
+		}
+
+		returnValue = DBase[fileType];
+		return context.Result(context.Iterator(returnValue));
+	}
+			
+			
+	/**
+	 * MediaManagement: Cancel
+	 * @param {Object} criteria
+	 */
+	function __Cancel(criteria){
+		method = 'Cancel';
+		if (!criteria || !criteria.TransactionID)
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingTID);
+		
+		clearTimeout(criteria.TransactionID);
+		return context.ErrorResult(device.implementation.ERR_SUCCESS);
+	}
+
+
+	
+	/*******************************
+	 * helper functions
+	 *******************************/
+	
+	function error(code, msg /*, args...*/){
+
+		var args = ['MediaMgmt',method].concat([].slice.call(arguments,2));
+		msg = msg ? _t().arg.apply(msg,args) : undefined;
+		return context.ErrorResult(code, msg);
+	}
+
+	/**
+	 * validate common input arguments
+	 * 'this' is string (object) name of calling function
+	 * 
+	 * @param {arguments} arguments of calling function
+	 * @return {Result} Result object if error, false if no error.
+	 */
+	function validator() {
+		method = ''+this;
+		var	failed = false,
+			criteria = arguments[0] || false;
+			
+		if (!criteria || typeof criteria != 'object' || typeof criteria.Type == 'undefined')
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.is_missing, 'Type');
+		
+		if (!/^FileInfo$/i.test(criteria.Type)) 
+			return error(device.implementation.ERR_SERVICE_NOT_SUPPORTED, msg.badType);
+
+		return failed;
+	}
+
+	/** 
+	 * error messages
+	 * order of %s args: Service name, method name, parameter name 
+	 */
+	var msg = {
+		badType			: '%s : %s : Type not supported',
+		missingTID 		: '%s : %s : TransactionID is missing',
+		badAsync		: '%s : %s : Insufficient arguments for async request',
+		is_missing		: '%s : %s : %s is missing',
+		is_invalid		: '%s : %s : %s is invalid'
+	};
+		
+
+}) ()
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/preview/script/lib/sapi/Messaging.js	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,366 @@
+/**
+ * Messaging.js
+ * 
+ * Nokia Web Runtime Service API emulation 
+ * WRT v1.1
+ * 
+ * Copyright 2009 Nokia Corporation. All rights reserved.
+*/
+  
+(function(){
+	
+	var provider = 'Service.Messaging' ,
+		Interface = 'IMessaging';
+		
+	/**
+	 * Messaging service
+	 */
+	var MessagingService = function(){
+		this.GetList			 	= __GetList;
+		this.Send 					= __Send;
+		this.RegisterNotification	= __RegisterNotification;
+		this.CancelNotification 	= __CancelNotification;
+		this.ChangeStatus 			= __ChangeStatus;
+		this.Delete					= __Delete;
+		this.Cancel 				= __Cancel;
+	}
+
+	device.implementation.extend(provider, Interface, new MessagingService() );
+
+
+	/******************************************************/	
+	/******************************************************/	
+	/******************************************************/	
+
+	var	context = device.implementation.context,
+		_t = context._t,
+		method = '',
+		result = false,
+		DBase = null;
+	
+	/**
+	 * Messaging: GetList
+	 * @param {Object} criteria
+	 */
+	function __GetList(criteria){
+
+		if ((result = validator.apply('GetList', arguments)) !== false)
+			return result; 
+	
+		if (!criteria.Type)
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingType);
+
+		if (!/^Inbox$/i.test(criteria.Type))
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.badType);
+	
+		var returnValue = [], 
+			match = null,
+			filter = criteria.Filter || null;
+ 
+		DBase = context.getData(provider);
+
+		// filter by MessageId
+		if (filter && filter.MessageId) {
+			returnValue = findByKey(DBase.Inbox, filter.MessageId, 'MessageId'); 
+			if (returnValue.length == 0)
+				return error(device.implementation.ERR_NOT_FOUND);
+		}
+		// return all messages
+		else {
+			returnValue = DBase.Inbox;
+		}
+
+		// unsupported filters 
+		if (filter 
+			&& (match = context.keys(filter).join().match(/MessageTypeList|SenderList|Subject|StartDate|EndDate/ig)) ) {
+			context.notify(_t('%s:: GetList : filter %s not implemented in preview').arg(provider, match.join()));
+		}
+		// unsupported sort			
+		if (criteria.Sort) { 
+			context.notify(_t('%s:: GetList : sort not implemented in preview').arg(provider));
+		}
+		return context.Result(context.Iterator(returnValue));
+	}
+			
+	/**
+	 * Messaging: Send
+	 * @param {Object} criteria
+	 * @param {Function} [callback] function for async call (optional)
+	 */
+	function __Send(criteria, callback){
+
+		if ((result = validator.apply('Send', arguments)) !== false)
+			return result; 
+
+		if (!criteria.MessageType)
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.missingMessageType);
+			
+		if (!/^(SMS|MMS)$/i.test(criteria.MessageType))
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.badMessageType);
+
+		if (!criteria.To)
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingTo);
+		
+		// async call?
+		if (typeof callback == 'function') {
+			return context.callAsync(this, arguments.callee, criteria, callback);
+		}
+
+		context.notify(_t('%s:: Send : message sent!').arg(provider));
+
+		// return success
+		return error(device.implementation.ERR_SUCCESS);
+	}
+			
+
+	/**
+	 * Messaging: RegisterNotification
+	 * @param {Object} criteria
+	 * @param {function} callback function for async call (mandatory)
+	 */
+	function __RegisterNotification(criteria, callback){
+
+		if ((result = validator.apply('RegisterNotification', arguments)) !== false)
+			return result; 
+
+		// callback is mandatory
+		if (typeof callback != 'function')
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.badAsync);
+		
+		// continue validation after callback check		
+		if (typeof criteria.Type == 'undefined') 
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingType);
+		
+		if (!/^NewMessage$/i.test(criteria.Type)) 
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.badType);
+
+		var eventType =  'NewMessage';
+
+		// check for multiple registration
+		if (context.hasListener(provider, eventType))
+			return error(device.implementation.ERR_ENTRY_EXISTS);
+				
+		// process notify
+		return context.addListener(provider, eventType, criteria, callback, notifyHandler);
+	}
+			
+	function notifyHandler(transactionID, criteria, callback, data){
+		
+		var result,
+			eventCode = {completed:2, error:4, progress:9},
+			code = eventCode.progress;
+		try{
+			DBase = context.getData(provider);
+			
+			// make new message
+			var now = new Date();
+			var message = {
+			 	"MessageType": "SMS",
+				"Sender": "0435445454",
+				"Subject": "new message",
+				"Time": _t("%s, %s").arg(now.toString().substr(0,3), now.toLocaleString()),
+				"Priority": "Medium",
+				"Attachment": false,
+				"Unread": true,
+				"MessageId": context.getUniqueID(),
+				"BodyText": "My hovercraft is full of eels!"
+			};
+			
+			// extend with optional data
+			data = typeof data=='object' && !(data instanceof Array) ? data : {};
+			var returnValue = context.extend(message, data);
+
+			result = context.Result(returnValue);
+			
+			/// add to top of inbox
+			DBase.Inbox.unshift(message);
+		} 
+		catch(e){
+			code = eventCode.error;
+		}
+		callback(transactionID, code, result);
+	}
+	
+	/**
+	 * Messaging: CancelNotification
+	 * @param {Object} criteria
+	 */
+	function __CancelNotification(criteria){
+
+		if ((result = validator.apply('CancelNotification', arguments)) !== false)
+			return result; 
+
+		if (typeof criteria.Type == 'undefined') 
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingType);
+
+		if (!/^NewMessage$/i.test(criteria.Type)) 
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.badType);
+
+		var eventType = 'NewMessage';
+		context.removeListener(provider, eventType);
+		return context.ErrorResult(device.implementation.ERR_SUCCESS);
+	}
+			
+			
+	/**
+	 * Messaging: ChangeStatus
+	 * @param {Object} criteria
+	 */
+	function __ChangeStatus(criteria){
+
+		if ((result = validator.apply('ChangeStatus', arguments)) !== false)
+			return result; 
+
+		if (!criteria.MessageId)
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.is_missing ,'MessageId');
+			
+		if (typeof criteria.MessageId != 'number')
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.badMessageIdType);
+			
+		if (!criteria.Status)
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.is_missing ,'Status');
+
+		if (!/^(Read|Unread|Replied|Forwarded)$/i.test(criteria.Status))
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.badStatus);
+	
+		// check if a callback was provided
+		if (arguments.length > 1)
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.badAsync2);
+			
+		DBase = context.getData(provider);
+
+		var i,item, found = false;
+		for (i in DBase.Inbox) {
+			item = DBase.Inbox[i];
+			if (criteria.MessageId == item.MessageId) {
+				item.Unread = /Unread/i.test(criteria.Status);
+				found = true;
+			}
+		}
+		if (!found)
+			return error(device.implementation.ERR_NOT_FOUND);
+
+		// return success
+		return error(device.implementation.ERR_SUCCESS);				
+	}
+						
+	/**
+	 * Messaging: Delete
+	 * @param {Object} criteria
+	 */
+	function __Delete(criteria){
+		
+		if ((result = validator.apply('Delete', arguments)) !== false)
+			return result; 
+
+		if (typeof criteria.MessageId == 'undefined')
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingMessageId);
+
+		if (typeof criteria.MessageId != 'number')
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.badMessageIdType);
+					
+		if (criteria.MessageId < 0)
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.badMessageId);
+			
+		DBase = context.getData(provider);
+
+		var i,item, found = false;
+		for (i in DBase.Inbox) {
+			item = DBase.Inbox[i];
+			if (criteria.MessageId == item.MessageId) {
+				DBase.Inbox.splice(i, 1);
+				found = true;
+			}
+		}
+		if (!found)
+			return error(device.implementation.ERR_NOT_FOUND);
+			
+		// return success
+		return error(device.implementation.ERR_SUCCESS);				
+	}
+			
+
+	/**
+	 * Messaging: Cancel
+	 * @param {Object} criteria
+	 */
+	function __Cancel(criteria){
+		method = 'Cancel';
+		if (!criteria || !criteria.TransactionID)
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.is_missing, 'TransactionID');
+		
+		clearTimeout(criteria.TransactionID);
+		return context.ErrorResult(device.implementation.ERR_SUCCESS);
+	}
+
+	
+	/*******************************
+	 * helper functions
+	 *******************************/
+	
+	function error(code, msg /*, args...*/){
+
+		var args = ['Messaging',method].concat([].slice.call(arguments,2));
+		msg = msg ? _t().arg.apply(msg,args) : undefined;
+		return context.ErrorResult(code, msg);
+	}
+
+	/**
+	 * validate common input arguments
+	 * 'this' is string (object) name of calling function
+	 * 
+	 * @param {arguments} arguments of calling function
+	 * @return {Result} Result object if error, false if no error.
+	 */
+	function validator() {
+		method = ''+this;
+		var	failed = false,
+			criteria = arguments[0] || false;
+
+		if (!criteria || typeof criteria != 'object')
+			return error(device.implementation.ERR_MISSING_ARGUMENT, 
+				method == 'Send' 
+				? msg.missingMessageType 
+				: (/ChangeStatus|Delete/.test(method) 
+					? msg.missingMessageId 
+					: msg.missingType) );
+			
+		return failed;
+	}
+
+
+	function findByKey(dbase, value, key){
+		var result = [];
+		for (var i in dbase) {
+			if (value == dbase[i][key]) {
+				result.push(dbase[i]);
+			}
+		}
+		return result;
+	}
+
+	/** 
+	 * error messages
+	 * order of %s args: Service name, method name, parameter name 
+	 */
+	var msg = {
+		missingType		: '%s:%s:Type Missing',
+		badType			: '%s:%s:Type Value Incorrect',
+		missingTo		: '%s:%s:To Missing',
+		badTo			: '%s:%s:To Value Incorrect',
+		missingMessageType	: '%s:%s:MessageType Missing',
+		badMessageType	: '%s:%s:MessageType Value Incorrect',
+		badAsync		: '%s:%s:Synchronous Operation not supported',
+		badAsync2		: '%s:%s:Asynchronous Operation not supported',
+		missingMessageId	: '%s:%s:MessageId Missing',
+		badMessageIdType: '%s:%s:MessageId Type Invalid',
+		badMessageId	: '%s:%s:MessageId Value Incorrect',
+		badStatus		: '%s:%s:Status Value Incorrect',
+
+		is_missing		: '%s:%s:%s Missing',
+		is_invalid		: '%s:%s:%s Value Incorrect'
+	};
+		
+
+}) ()
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/preview/script/lib/sapi/Sensor.js	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,250 @@
+/**
+ * Sensor.js
+ * 
+ * Nokia Web Runtime Service API emulation 
+ * WRT v1.1
+ * 
+ * Copyright 2009 Nokia Corporation. All rights reserved.
+*/
+
+(function(){
+
+	var provider = 'Service.Sensor',
+		Interface = 'ISensor';
+	var transID = new Array();
+	/**
+	 * Sensor service
+	 */
+	var SensorService = function(){
+		this.FindSensorChannel 			= __FindSensorChannel;
+		this.RegisterForNotification	= __RegisterForNotification;
+		this.Cancel						= __Cancel;
+		this.GetChannelProperty			= __GetChannelProperty;		
+	}
+
+	device.implementation.extend(provider, Interface, new SensorService() );
+
+	/******************************************************/	
+	/******************************************************/	
+	/******************************************************/	
+
+	var	context = device.implementation.context,
+		_t = context._t,
+		method = '',
+		result = false,
+		DBase = null;
+
+
+	/**
+	 * Sensor: FindSensorChannel
+	 * @param {Object} criteria
+	 */
+	function __FindSensorChannel(criteria){
+		method = 'FindSensorChannel';
+		if(!criteria)
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgCriteriaMissing);
+			
+		if(typeof criteria != 'object')
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgCriteriaMissing);
+						
+		if(typeof criteria.SearchCriterion == 'undefined')
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgDataMissing);
+
+		if(typeof criteria.SearchCriterion != 'string')
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgidInvalid);
+
+		if(!(criteria.SearchCriterion== "All" || criteria.SearchCriterion== "AccelerometerAxis" || criteria.SearchCriterion=="AccelerometerDoubleTapping" || criteria.SearchCriterion=="Orientation" || criteria.SearchCriterion=="Rotation"))
+		 	return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgSearchParamInvalid);
+
+		if(arguments.length > 1)
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgCriteriaMissing);			
+
+		DBase = context.getData(provider);
+		var returnValue;
+		returnValue = DBase[criteria.SearchCriterion] || [] ;
+		
+		return context.Result(returnValue,0);			
+	}
+
+
+
+	/**
+	 * Sensor: RegisterForNotification
+	 * @param {Object} criteria, callback
+	 */
+	function __RegisterForNotification(criteria, callback, flag){
+		flag = flag || false;
+		method = 'RegisterForNotification';
+		context.notify(_t('%s:: RegisterForNotification not implemented in preview').arg(provider));
+		
+		if(arguments.length >2 && (typeof flag != "undefined" && typeof flag != "boolean"))
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgCriteriaMissing);
+
+		if(typeof callback != 'function')
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgInsufficentArgument);
+		
+		
+		if(!criteria)
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgIncompleteInput);
+			
+		if(typeof criteria != 'object')
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgIncompleteInput);
+						
+		if(typeof criteria.ListeningType == 'undefined' || typeof criteria.ChannelInfoMap == 'undefined')
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgIncompleteInput);
+
+		if(typeof criteria.ListeningType != 'string')
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgListenTypeInvalid);
+			
+		if(typeof criteria.ChannelInfoMap != 'object')
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgChannelInfoMapInvalid);
+		
+		if(!(criteria.ListeningType== "ChannelData" ))
+		 	return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgOutofRange);
+
+		if(typeof callback == 'function')
+		{
+			var result = context.callAsync(this, arguments.callee, criteria, callback);
+			transID.push(result.TransactionID);
+			return result;
+		}
+		if(flag)
+			transID.shift();
+				
+		return context.ErrorResult();
+	}
+
+
+	/**
+	 * Sensor: Cancel
+	 * @param {Object} criteria
+	 */
+	function __Cancel(criteria){
+		method = 'Cancel';
+
+		if(arguments.length > 1 && typeof criteria != "object" && typeof criteria.TransactionID != "number" && arguments[1])
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgCriteriaMissing);
+
+		if (!criteria || typeof criteria.TransactionID == 'undefined') 
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgTransIDMissing);
+
+		if (criteria.TransactionID == Infinity || criteria.TransactionID == -Infinity) 
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgTransIDMissing);
+		
+		if (typeof criteria.TransactionID != 'number') 
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgIncorrectTransID);		
+
+		for (var i=0; i<transID.length; i++) {
+			if (criteria.TransactionID == transID[i]){
+				clearTimeout(criteria.TransactionID);
+				return context.ErrorResult();
+			}
+		};
+		
+		return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgInvalidTransID);
+
+	}
+
+
+	/**
+	 * Sensor: GetChannelProperty
+	 * @param {Object} criteria
+	 */
+	function __GetChannelProperty(criteria){
+		method = 'GetChannelProperty';
+
+		if(!criteria)
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgIncompleteInput);
+			
+		if(typeof criteria != 'object')
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgIncompleteInput);
+
+		if(typeof criteria.ChannelInfoMap == 'undefined' || typeof criteria.PropertyId == 'undefined')
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgIncompleteInput);
+		
+		if(typeof criteria.ChannelInfoMap != 'object')
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgChannelInfoMapInvalid);
+		
+		if(typeof criteria.PropertyId != 'string')
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgInvalidPropertyID);
+		
+		if(criteria.PropertyId != 'Availability' && criteria.PropertyId != "ChannelAccuracy" && criteria.PropertyId != "ChannelDataFormat" && criteria.PropertyId != "ChannelScale" && criteria.PropertyId != "ChannelUnit" && criteria.PropertyId != "ConnectionType" && criteria.PropertyId != "DataRate" && criteria.PropertyId != "Description" && criteria.PropertyId != "MeasureRange" && criteria.PropertyId != "ScaledRange" && criteria.PropertyId != "SensorModel")
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgInvalidPropertyID);
+
+		if(arguments.length > 1)
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgCriteriaMissing);			
+
+		DBase = context.getData(provider);
+		var property = DBase['SensorProperty'];
+		if(typeof criteria.ChannelInfoMap['ChannelId'] == 'undefined' || typeof criteria.ChannelInfoMap['ChannelId'] != 'number')
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgChannelInfoMapInvalid);
+
+		var channel = null;
+		if(criteria.ChannelInfoMap['ChannelId'] == 7)
+		{
+			channel = 'AccelerometerAxis';
+		}
+		else if(criteria.ChannelInfoMap['ChannelId'] == 8)
+		{
+			channel = 'AccelerometerDoubleTapping';
+		}
+		else if(criteria.ChannelInfoMap['ChannelId'] == 10)
+		{
+			channel = 'Orientation';
+		}
+		else if(criteria.ChannelInfoMap['ChannelId'] == 11)
+		{
+			channel = 'Rotation';
+		}
+	
+		if(channel == null)
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgChannelInfoMapInvalid);
+		
+		var returnValue = property[channel][criteria.PropertyId];
+		if(typeof returnValue == 'undefined')
+			return context.ErrorResult(device.implementation.ERR_NOT_FOUND);
+		return context.Result(returnValue,0)
+	}
+
+	/**
+	 * Sensor: error
+	 * @param {number,string} ErrorCode and ErrorString
+	 * Replaces Error String with method name
+	 */
+	function error(code, msg /*, args...*/){
+
+		var args = ['Sensors',method].concat([].slice.call(arguments,2));
+		msg = msg ? _t().arg.apply(msg,args) : undefined;
+		return context.ErrorResult(code, msg);
+	}
+
+
+	/** 
+	 * error messages
+	 * order of %s args: Service name, method name, parameter name 
+	 */
+	var msg = {	
+		msgInterfaceNotSupported 	: '%s:Requested interface not supported by the provider',
+		msgInterfaceMissing 		: '%s:Interface name missing',
+		msgInsufficentArgument 		: '%s:%s:Insufficent argument for asynchronous request',
+		msgListenTypeMissing 		: '%s:%s:Listening type missing',
+		msgListenTypeInvalid		: '%s:%s:Listening type is invalid',
+		msgChannelInfoMissing		: '%s:%s:ChannelInfoMap missing',
+		msgIncompleteInput			: '%s:%s:Incomplete input param list',
+		msgOutofRange				: '%s:%s:Listening type is out of allowed range',
+		msgCallbackMissing			: '%s:%s:Callback missing',
+		msgAlreadyRegistered		: '%s:%s:Notification is already registered on this channel',
+		msgCriteriaMissing			: '%s:%s:Search criterion is missing',
+		msgInvalidSearchCriteria	: '%s:%s:Invalid Search Criterion',
+		msgChannelSearchInvalid		: '%s:%s:Channel search param type invalid',
+		msgSearchParamInvalid		: '%s:%s:Invalid channel search param',
+		msgTransIDMissing			: '%s:%s:Transaction id is missing',
+		msgIncorrectTransID			: '%s:%s:Incorrect TransactionID',
+		msgInvalidTransID			: '%s:%s:Invalid TransactionID',
+		msgPropertyIDMissing		: '%s:%s:Property id missing',
+		msgInvalidPropertyID		: '%s:%s:Property id is invalid',
+		msgChannelNotSupported		: '%s:%s:Channel property not supported',
+		msgChannelInfoMapInvalid	: '%s:%s:ChannelInfoMap Type Invalid'
+	};
+
+}) ()
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/preview/script/lib/sapi/SysInfo.js	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,398 @@
+/**
+ * SysInfo.js
+ * 
+ * Nokia Web Runtime Service API emulation 
+ * WRT v1.1
+ * 
+ * Copyright 2009 Nokia Corporation. All rights reserved.
+*/
+
+ 
+(function(){
+	
+	var provider = 'Service.SysInfo' ,
+		Interface = 'ISysInfo';
+
+	var supportedEntitiesAndKeys = {
+		"battery":{
+			"batterystrength":{"GetInfo":true,"SetInfo":false,"GetNotification":true,"GetInfoModeSync":false},
+			"chargingstatus":{"GetInfo":true,"SetInfo":false,"GetNotification":true,"GetInfoModeSync":true}
+		},
+		"connectivity":{
+			"bluetooth":{"GetInfo":true,"SetInfo":false,"GetNotification":true,"GetInfoModeSync":true},
+			"infrared":{"GetInfo":true,"SetInfo":false,"GetNotification":true,"GetInfoModeSync":true},
+			"activeconnections":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":false},
+			"connectionstatus":{"GetInfo":false,"SetInfo":false,"GetNotification":true,"GetInfoModeSync":false},
+			"wlanmacaddress":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true}
+		},
+      	"device":{
+			"firmwareversion":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+			"platformversion":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+			"producttype":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+			"manufacturer":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+			"machineid":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+			"phonemodel":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+			"imei":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true}
+		},
+      	"display":{
+			"brightness":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+			"screensavertimeout":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+			"userinactivity":{"GetInfo":false,"SetInfo":false,"GetNotification":true,"GetInfoModeSync":false},
+			"keyguardtime":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+			"autolocktime":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+			"autolockstatus":{"GetInfo":true,"SetInfo":false,"GetNotification":true,"GetInfoModeSync":true},
+			"wallpaper":{"GetInfo":false,"SetInfo":true,"GetNotification":false,"GetInfoModeSync":false,"InputDataType":"string"},
+			"lighttimeout":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+			"displayresolution":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+			"displayorientation":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true}
+		},
+      	"features":{
+			"bluetooth":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+			"infrared":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+			"camera":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+			"memorycard":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+			"fmradio":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+			"qwerty":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+			"wlan":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+			"usb":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+			"pen":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+			"led":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+			"coverui":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+			"sidevolumekeys":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+			"vibra":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true}
+		},
+      	"general":{
+			"accessorystatus":{"GetInfo":false,"SetInfo":false,"GetNotification":true,"GetInfoModeSync":false},
+			"connectedaccessories":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+			"inputlanguage":{"GetInfo":true,"SetInfo":true,"GetNotification":true,"GetInfoModeSync":true},
+			"supportedlanguages":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+			"predictivetext":{"GetInfo":true,"SetInfo":true,"GetNotification":true,"GetInfoModeSync":true},
+			"vibraactive":{"GetInfo":true,"SetInfo":true,"GetNotification":true,"GetInfoModeSync":true},
+			"availableusbmodes":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+			"activeusbmode":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+			"flipstatus":{"GetInfo":true,"SetInfo":false,"GetNotification":true,"GetInfoModeSync":true},
+			"gripstatus":{"GetInfo":true,"SetInfo":false,"GetNotification":true,"GetInfoModeSync":true},
+			
+		},
+      	"memory":{
+			"driveinfo":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+			"listdrives":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+			"criticalmemory":{"GetInfo":false,"SetInfo":false,"GetNotification":true,"GetInfoModeSync":false},
+			"memorycard":{"GetInfo":true,"SetInfo":false,"GetNotification":true,"GetInfoModeSync":true}
+		},
+      	"network":{
+			"signalstrength":{"GetInfo":true,"SetInfo":false,"GetNotification":true,"GetInfoModeSync":false},
+			"registrationstatus":{"GetInfo":true,"SetInfo":false,"GetNotification":true,"GetInfoModeSync":true},
+			"networkmode":{"GetInfo":true,"SetInfo":false,"GetNotification":true,"GetInfoModeSync":true},
+			"currentnetwork":{"GetInfo":true,"SetInfo":false,"GetNotification":true,"GetInfoModeSync":false},
+			"locationarea":{"GetInfo":false,"SetInfo":false,"GetNotification":true,"GetInfoModeSync":false},
+			"cellid":{"GetInfo":false,"SetInfo":false,"GetNotification":true,"GetInfoModeSync":false}
+		}
+	  };
+	  
+	/**
+	 * SysInfo service
+	 */
+	var SysInfoService = function(){
+		this.GetInfo 			= __GetInfo;
+		this.SetInfo 			= __SetInfo;
+		this.GetNotification 	= __GetNotification;
+		this.Cancel 			= __Cancel;
+	}
+
+	device.implementation.extend(provider, Interface, new SysInfoService() );
+
+	var	context = device.implementation.context,
+		_t = context._t,
+		method = '',
+		result = false,
+		DBase = null,
+		default_device = 'default';
+		
+	/**
+	 * SysInfo: GetInfo
+	 * @param {Object} criteria
+	 * @param {function} callback function for async call (optional)
+	 */
+	function __GetInfo(criteria, callback){
+		var retVal = ValidateArguments("GetInfo",criteria,callback);
+		if(retVal.ErrorCode != 0)
+		{
+			return retVal;
+		}
+		//	Async call
+		if (typeof callback == 'function') {
+			return context.callAsync(this, arguments.callee, criteria, callback);
+		}
+
+		DBase = context.getData(provider);
+		var returnValue = DBase;
+		returnValue = returnValue[criteria.Entity.toLowerCase()][criteria.Key.toLowerCase()];
+		returnValue.Key = criteria.Key;
+		returnValue.Entity = criteria.Entity;
+
+		if(/^Connectivity$/i.test(criteria.Entity)&& /^ActiveConnections$/i.test(criteria.Key))
+		{
+			var temp = returnValue.ConnectionList;
+			returnValue.ConnectionList = context.Iterator(temp);
+		}
+		else if(/^General$/i.test(criteria.Entity)&& /^ConnectedAccessories$/i.test(criteria.Key))
+		{
+			var temp = returnValue.AccessoryList;
+			returnValue.AccessoryList = context.Iterator(temp);			
+		}
+		else if(/^Memory$/i.test(criteria.Entity)&& /^DriveInfo$/i.test(criteria.Key))
+		{
+			try {
+				var temp = criteria.SystemData.Drive;
+				if(temp.length > 3)
+				{
+					temp = temp.substring(0,3);
+				}
+				temp= returnValue.Drive[temp.toUpperCase()];
+				if (!temp) {
+					return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.no_msg);
+				}
+				var driveInfo = new Object();
+				driveInfo.Key = returnValue.Key;
+				driveInfo.Entity = returnValue.Entity;
+				driveInfo.DriveInfo = temp;
+				return context.Result(driveInfo);
+			}
+			catch(err)
+			{
+				return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.no_msg);
+			}
+			
+		}
+		return context.Result(returnValue);
+	}
+			
+
+	/**
+	 * SysInfo: SetInfo
+	 * @param {Object} criteria
+	 * @param {function} callback function for async call (optional)
+	 */
+	function __SetInfo(criteria, callback){
+		var retVal = ValidateArguments("SetInfo",criteria,callback);
+		if(retVal.ErrorCode != 0)
+		{
+			return retVal;
+		}
+
+		//	Current implementation support only for 'General' -> 'InputLanguage' || 'PredictiveText'
+		if (/^General$/i.test(criteria.Entity) && ( /^InputLanguage$/i.test(criteria.Key) || /^PredictiveText/i.test(criteria.Key) || /^VibraActive/i.test(criteria.Key))) {
+			//	get the DBase data
+			DBase = context.getData(provider);
+			var returnValue = DBase;
+			
+			//	Check the 'SupportedLanguages' entries for Setting the new Status
+			if (/^InputLanguage$/i.test(criteria.Key)) {
+				var found = false;
+				var languageList = returnValue['general']['supportedlanguages']['LanguageList'];
+				for (var key in languageList) {
+					if (languageList[key] == criteria.SystemData.Status) {
+						found = true;
+					}
+				}
+				//	Update the 'InputLanguage' if the value value found in the ['SupportedLanguages']
+				if (found) 
+					returnValue[criteria.Entity.toLowerCase()][criteria.Key.toLowerCase()]['Status'] = criteria.SystemData.Status;
+				else 
+					return error(device.implementation.ERR_SERVICE_NOT_SUPPORTED, msg.not_supported);
+			}
+			else if (/^PredictiveText$/i.test(criteria.Key)) {
+				if (criteria.SystemData.Status == 0 || criteria.SystemData.Status == 1) 
+					returnValue[criteria.Entity.toLowerCase()][criteria.Key.toLowerCase()]['Status'] = criteria.SystemData.Status;
+				else 
+					return error(device.implementation.ERR_NOT_FOUND, msg.badType);
+			}
+			else if (/^VibraActive$/i.test(criteria.Key)) {
+				if (criteria.SystemData.Status == 0 || criteria.SystemData.Status == 1) 
+					returnValue[criteria.Entity.toLowerCase()][criteria.Key.toLowerCase()]['Status'] = criteria.SystemData.Status;
+			}
+			else {
+				return error(device.implementation.ERR_SERVICE_NOT_SUPPORTED, msg.not_supported);
+			}
+		}
+		else if(/^Display/i.test(criteria.Entity) && /^Wallpaper/i.test(criteria.Key)) {
+			if(typeof criteria.SystemData.StringData == 'undefined')
+				return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingArgs);
+			returnValue[criteria.Entity.toLowerCase()][criteria.Key.toLowerCase()]['StringData'] = criteria.SystemData.StringData;
+			return context.ErrorResult(device.implementation.ERR_SUCCESS);
+		}
+		return context.Result(result);
+	}
+			
+
+	/**
+	 * SysInfo: GetNotification
+	 * @param {Object} criteria
+	 * @param {function} callback function for async call
+	 */
+	function __GetNotification(criteria, callback){
+		var retVal = ValidateArguments("GetNotification",criteria,callback);
+		if(retVal.ErrorCode != 0)
+		{
+			return retVal;
+		}
+		
+		// unsupported
+		if (!/^(Battery|Memory)$/i.test(criteria.Entity) ||
+			!/^(BatteryStrength|ChargingStatus|MemoryCard)$/i.test(criteria.Key)) {
+			context.notify(_t('%s:: GetNotification : entity %s, key %s not implemented in preview.').arg(provider, criteria.Entity, criteria.Key));
+			// register callback anyway so Cancel works. 
+		}
+
+		// evenType = 'entity.key'
+		var eventType = criteria.Entity+'.'+criteria.Key;
+						
+		// process notify
+		return context.addListener(provider, eventType, criteria, callback, notifyHandler);
+	}
+			
+	function notifyHandler(transactionID, criteria, callback, data){
+		
+		var result,
+			eventCode = {completed:2, error:4, progress:9},
+			code = eventCode.progress;
+		try{
+			DBase = context.getData(provider);
+			var entity = criteria.Entity.toLowerCase(),
+				key = criteria.Key.toLowerCase();
+						
+			// make a copy of return value
+			var returnValue = context.extend({},DBase[entity][key]);
+			
+			// augment with data
+			context.extend(returnValue, data);
+
+			result = context.Result(returnValue);
+		} 
+		catch(e){
+			code = eventCode.error;
+		}
+		callback(transactionID, code, result);
+	}
+		
+			
+
+	/**
+	 * SysInfo: Cancel
+	 * @param {Object} criteria
+	 */
+	function __Cancel(criteria){
+		method = 'Cancel';
+
+		if (!criteria || !criteria.TransactionID)
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingTID);
+
+		var found = context.removeListener(provider, null, criteria.TransactionID);
+		if (!found)
+			return error(device.implementation.ERR_NOT_FOUND);
+		else
+			return context.ErrorResult(device.implementation.ERR_SUCCESS);
+	}
+
+
+	
+	/*******************************
+	 * helper functions
+	 *******************************/
+	
+	function error(code, msg /*, args...*/){
+
+		var args = ['SysInfo',method].concat([].slice.call(arguments,2));
+		msg = msg ? _t().arg.apply(msg,args) : undefined;
+		return context.ErrorResult(code, msg);
+	}
+
+	function cancelRegisteredNotify(result)
+	{
+		__Cancel({'TransactionID':result.TransactionID});
+		method = 'GetNotification';
+	}
+
+	/** 
+	 * error messages
+	 * order of %s args: Service name, method name, parameter name 
+	 */
+	var msg = {
+		badType				: '%s: %s: Type is invalid',
+		badSysInfo			: '%s: %s: SysInfoName is invalid',
+		missingSysInfo		: '%s: %s: SysInfoName is missing',
+		missingTID 			: '%s: %s: Transaction ID missing',
+		not_supported 		: '%s: %s: Not Supported',
+		is_invalid			: '%s: %s: Is invalid',
+		missingArgs			: '%s: %s: SystemData Argument Missing',
+		inSufficientArgs	: '%s: %s: Insufficient Arguments to process',
+		missingInputParam	: '%s: %s: Input Parameter Missing',
+		not_supportedSyncVer: '%s: %s: Sync Version Not Supported',
+		noEntity			: '%s: %s: Entity: Input Parameter Missing',
+		noKey				: '%s: %s: Key: Input Parameter Missing',
+		IncorrectSytemData	: '%s: %s: Incorrect SystemData Type, SystemData Must be a Map',
+		callbackNotFound	: '%s: %s: Callback object not found',
+		commandNotFound		: '%s: %s: Command Not Supported',
+		unsupInterface		: 'SysInfo:Requested interface not supported by the provider',
+		no_msg				: '%s: %s: '
+	};
+
+	/**
+	 * Common validator for all functions
+	 * 	 
+	 *  
+	 * @param {arguments} function name and arguments of calling function
+	 * @return {Result} Error object
+	 */		
+	  function ValidateArguments(funName,criteria,callback)
+	  {
+	  	method = funName;
+
+		try {
+			if (/^GetNotification$/i.test(funName) && typeof callback != "function") {
+				return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.not_supportedSyncVer);
+			}
+			
+			if (typeof criteria == "undefined" || typeof criteria.Entity == "undefined" || typeof criteria.Key == "undefined") {
+				return error(device.implementation.ERR_MISSING_ARGUMENT, msg.inSufficientArgs);
+			}
+			
+			if (criteria.Entity == "") {
+				return error(device.implementation.ERR_MISSING_ARGUMENT, msg.noEntity);
+			}
+			
+			if (criteria.Key == "") {
+				return error(device.implementation.ERR_MISSING_ARGUMENT, msg.noKey);
+			}
+			
+			if (/^SetInfo$/i.test(funName)) {
+				if (typeof criteria.SystemData == "undefined" || criteria.SystemData == '') {
+					return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingArgs);
+				}
+				if (typeof criteria.SystemData.StringData == "undefined" && typeof criteria.SystemData.Status == "undefined") {
+					return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingArgs);
+				}
+			}
+			
+			if (typeof supportedEntitiesAndKeys[criteria.Entity.toLowerCase()] == 'undefined' || typeof supportedEntitiesAndKeys[criteria.Entity.toLowerCase()][criteria.Key.toLowerCase()] == 'undefined') {
+				return error(device.implementation.ERR_NOT_FOUND, msg.no_msg);
+			}
+			
+			if (!supportedEntitiesAndKeys[criteria.Entity.toLowerCase()][criteria.Key.toLowerCase()][funName]) {
+				return error(device.implementation.ERR_NOT_FOUND, msg.no_msg);
+			}
+			
+			if (funName == "GetInfo" && !supportedEntitiesAndKeys[criteria.Entity.toLowerCase()][criteria.Key.toLowerCase()]["GetInfoModeSync"] && typeof callback != "function") {
+				return error(device.implementation.ERR_MISSING_ARGUMENT, msg.not_supportedSyncVer);
+			}
+			
+			return context.ErrorResult(device.implementation.ERR_SUCCESS, "");
+		}
+		catch(err){
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.badType);
+		}
+		
+	  }
+
+}) ()
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/preview/script/lib/systeminfo.js	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,107 @@
+/**
+	This API is used to provide system related data.
+	It takes the sysObject as an argument that is the embeded API in the main HTML file.
+	While using this API outside mobile environment, User or developer need not to take any extara action in oprder to support SYSAPI.
+*/
+
+function systemAPI(sysObject)
+{
+	/*
+	 * 	System Language information services
+	 */
+	sysObject.language = 'EN';
+
+
+
+
+	/*
+	 * 	Power information services
+	 */
+	
+	//	Properties
+	sysObject.chargelevel = 5;
+	sysObject.chargerconnected = 0;
+
+	//	Event triggers
+	sysObject.onchargelevel = null;
+	sysObject.onchargerconnected = null;
+
+
+
+	/*
+	 * 	Beep tone control services
+	 */	
+	sysObject.beep = function(frequency, duration){	}
+
+
+
+	/*
+	 * 	Network Information services
+	 */
+	
+	//	value range between: {0-7}
+	sysObject.signalbars = 7;
+
+	sysObject.networkname = 'No network';
+
+	//	value range between: {0-7}
+	sysObject.networkregistrationstatus = 0;
+	
+
+
+	/*
+	 * 	Display and keypad illumination information and control services
+	 */
+
+	//	Properties
+	sysObject.lightminintensity = 1;
+	sysObject.lightmaxintensity = 100;
+	sysObject.lightdefaultintensity = 0;
+	
+	sysObject.lightinfiniteduration = 0;
+	sysObject.lightmaxduration = 1;
+	sysObject.lightdefaultcycletime = 0;
+
+	sysObject.lighttargetprimarydisplayandkeyboard = 0x3;
+	sysObject.lighttargetsystem = 1;
+
+	//	functions
+	sysObject.lighton	= function(lighttarget, duration, intensity, fadein){ 	}
+	sysObject.lightblink	= function(lighttarget, duration, onduration, offduration, intensity){ 	}
+	sysObject.lightoff	= function(lighttarget, duration, fadeout){ 	}
+
+
+
+	/*
+	 * 	Vibration information and control services
+	 */
+	sysObject.vibraminintensity = 1;
+	sysObject.vibramaxintensity = 10;
+	sysObject.vibramaxduration = 100;
+	
+	//	Vibration setting in the user profile is off.
+	sysObject.vibrasettings = 2; 
+
+	sysObject.startvibra	= function(duration, intensity){	}
+
+	sysObject.stopvibra	= function(){	}
+
+
+
+
+	/*
+	 * 	Memory and file system information services
+	 */
+	sysObject.totalram = 32;	
+	sysObject.freeram = 10;	
+	sysObject.drivelist = 'C';	
+
+	sysObject.drivesize	= function(drive){	return 64;	}
+	
+	sysObject.drivefree	= function(drive){	return 32;	}
+
+}
+
+
+//	make TRUE systeminfo.js script loaded
+window.parent.NOKIA.scriptsLoaded.systeminfo = true;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/preview/script/lib/widget.js	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,286 @@
+/**
+ * widget object constructor
+ * @param {void}
+ *     widget()
+ * @return {void}
+ */ 
+
+if (typeof window.widget == "undefined" || !window.widget) {
+	window.widget = {
+		author : 'Nokia WRT Emulation Library',
+		//	widget identifier, dummy value
+		identifier: 14021981,
+		isrotationsupported: true,
+		
+		//	widget event triggers
+		onshow: null,
+		onhide: null,
+		
+		sysInfo: [],
+		onload: null,
+		opacity: 50,
+		interval: 20,
+		isFront: false,
+		preferenceArray: [],
+		preferenceKey: 0
+	};
+	
+	
+	/**
+	 * Launches the browser with the specified url
+	 * @param {String} url
+	 *     openURL()
+	 * @return {Void}
+	 */
+	widget.openURL = function(url){
+		if (url) {
+			window.open(url, "New Widget Window", 'height=200 width=250');
+		}
+	}
+	
+	
+	/**
+	 * Returns previously stored preference associated with the specified key
+	 * @param {String} Key preference value to be fetch
+	 *     preferenceForKey()
+	 * @return {String} Value
+	 */
+	widget.preferenceForKey = function(name){
+		return _BRIDGE_REF.nokia.helper.readCookie(name);
+	}
+	
+	
+	/**
+	 * Stores the key associated with the specified preference
+	 * @param {String} Preference value to be stored
+	 * @param {String} Key Preference value associated to
+	 *     setPreferenceForKey()
+	 * @return {Void}
+	 */
+	widget.setPreferenceForKey = function(preference, key){
+		_BRIDGE_REF.nokia.helper.createCookie(key, preference);
+	}
+	
+	
+	
+	/**
+	 * Toggle between Tabbed navigation mode or Cursor mode
+	 * @param {Boolean} Value
+	 *     setNavigationEnabled()
+	 * @return {Void}
+	 */
+	widget.setNavigationEnabled = function(bool){
+		//This function can not be used on preview browser
+	}
+	
+	
+	
+	/**
+	 * Open S0-Application identified by UID along with the specified params
+	 * @param {Integer} Uid hexadecimal value to a specified application
+	 * @param {String} Value
+	 *     openApplication()
+	 * @return {Void}
+	 */
+	widget.openApplication = function(Uid, param){
+		alert("openApplication function won't be simulated in this application");
+	}
+	
+	
+	
+	/**
+	 * Prepares the Widget.to do transition to specified transitionState
+	 * @param {String} Value Transition state
+	 *     prepareForTransition()
+	 * @return {Void}
+	 */
+	widget.prepareForTransition = function(transitionState){
+		this.isFront = ("" + transitionState).toLowerCase() != "toback";
+		window.document.getElementsByTagName("body")[0].style.opacity = "0.3";
+	}
+	
+	
+	
+	
+	/**
+	 * Does the animation to make the transition between the specified transitionState
+	 * @param {Void}
+	 *     performTransition()
+	 * @return {Void}
+	 */
+	widget.performTransition = function(){
+		var _self = this;
+		this.opacity = 0;
+		this.interval = window.setInterval(function(){
+			_self.opacity += 0.2;
+			if (_self.opacity > 1) {
+				_self.opacity = 1;
+			}
+			window.document.getElementsByTagName("body")[0].style.opacity = _self.opacity + "";
+			if (_self.opacity >= 1) {
+				window.clearInterval(_self.interval);
+				window.document.getElementsByTagName("body")[0].style.opacity = "1";
+			}
+			//do nothing
+		}, 50);
+		//do nothing
+	}
+	
+	
+	
+	
+	
+	/**
+	 * Set the preferred screen orientation to landscape.
+	 * The display will flip if the phone display orientation
+	 * is portrait and the phone supports landscape mode.
+	 * @param {Void}
+	 *     setDisplayLandscape()
+	 * @return {Void}
+	 */
+	widget.setDisplayLandscape = function(){
+		try {
+			if (this.isrotationsupported && _BRIDGE_REF.nokia.emulator.orientationSupports()) {
+				_BRIDGE_REF.nokia.emulator.setMode('landscape');
+			}
+		} 
+		catch (e) {
+		}
+	}
+	
+	
+	
+	
+	/**
+	 * Set the preferred screen orientation to portrait.
+	 * The display will flip if the phone display orientation
+	 * is landscape and the phone supports portrait mode.
+	 * @param {Void}
+	 *     setDisplayPortrait()
+	 * @return {Void}
+	 */
+	widget.setDisplayPortrait = function(){
+		try {
+			if (this.isrotationsupported && _BRIDGE_REF.nokia.emulator.orientationSupports()) {
+				_BRIDGE_REF.nokia.emulator.setMode('portrait');
+			}
+		} 
+		catch (e) {
+		}
+	}
+	
+	/**
+	 * Allows the definition of a function to be called
+	 * when a Widget.is displayed
+	 * @param {Void}
+	 *     onshow()
+	 * @return {Void}
+	 */
+	widget.onshow = function(){
+		// to be implemented
+	}
+	
+	
+	
+	
+	/**
+	 * Allows the definition of a function to be called
+	 * when a Widget.sent into the background (hidden)
+	 * @param {Void}
+	 *     onhide()
+	 * @return {Void}
+	 */
+	widget.onhide = function(){
+		// to be implemented
+	}
+	
+	
+	
+	/**
+	 * This function returns the System API if sysinfo is included in document embed
+	 */
+	widget.enableSystemApi = function(){
+	
+		//	Identify, and Attach System-Info-Object properties
+		try {
+			var parentIframeRef = window.parent.frames[0];
+			if (typeof parentIframeRef == 'object') {
+				if (parentIframeRef.document.embeds.length > 0) {
+					for (var i = 0; i < parentIframeRef.document.embeds.length; i++) {
+						//match the system Info API embed tag
+						if (parentIframeRef.document.embeds[i].type == 'application/x-systeminfo-widget') {
+							new systemAPI(parentIframeRef.document.embeds[i]);
+//							widget.sysInfo = parentIframeRef.document.embeds[i];
+							
+							// hide the <embed> object
+							parentIframeRef.document.embeds[i].style.display='none';
+							
+							// push the reference object into widget
+							widget.sysInfo.push(parentIframeRef.document.embeds[i]);
+						}
+					}
+				}
+			}
+		} 
+		catch (e) {
+			alert('Error in attachSysInfo: ' + e);
+		}
+	}
+	
+	/**
+	 * 
+	 */
+	
+	widget.triggerListener = function(provider, eventType, data){
+		if(widget.sysInfo.length){
+			for(var i=0; i<widget.sysInfo.length; i++){
+				if(provider == "power"){
+					switch(eventType){
+						case "chargerconnected" : 
+												  widget.sysInfo[i].chargerconnected = data;
+												  if(widget.sysInfo[i].onchargerconnected != null){
+													setTimeout(widget.sysInfo[i].onchargerconnected, 0);
+												  }else{
+														console.info("System API-1.0 Notice -- no listeners defined for eventType:"+eventType);
+												  }
+												  break;
+
+						case "chargelevel" 		:
+												  widget.sysInfo[i].chargelevel = data;
+												  if(widget.sysInfo[i].onchargelevel != null){
+													setTimeout(widget.sysInfo[i].onchargelevel, 0);
+												  }else{
+														console.info("System API-1.0 Notice -- no listeners defined for eventType:"+eventType);
+												  }
+												 break;
+					}
+				}
+			}
+		}else{
+			console.info("System API-1.0 Notice -- no listeners defined for eventType:"+eventType);
+		}
+	}
+	
+	//	make TRUE widget.js script loaded
+	window.parent.NOKIA.scriptsLoaded.widget = true;
+}
+
+(function(){
+
+	//	attach the System-Info api specific functionality
+	_BRIDGE_REF.helper.addEvent(window, 'load', function(){
+		widget.enableSystemApi();
+		
+	});
+
+	if (_BRIDGE_REF.nokia) {
+		_BRIDGE_REF.nokia.menu.lsk_event = function(){
+			_BRIDGE_REF.nokia.emulator.child.menu.show();
+		};
+		
+		//	Add THIS window Reference on FRAME WINDOW
+		//	NOKIA.emulator.child object reference
+		_BRIDGE_REF.nokia.emulator.child = window;
+		_BRIDGE_REF.nokia.menu.init();
+	}	
+})()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/preview/script/nokia.js	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,1495 @@
+/*
+	@chinnapp
+*/
+
+if(typeof NOKIA == "undefined" || !NOKIA) 
+{
+	var NOKIA = {
+		version : 'WRT 1.1',
+		currentDevice : '240x320',
+		mode : 'portrait',
+		resolution : ['240x320', '320x240', '360x640', '800x352'],
+		scriptsLoaded : {
+			loader : false,
+			widget : false,
+			systeminfo : false,
+			menu   : false,
+			menuItem : false,
+			console : false
+		}
+	};
+	NOKIA.namespace = function(name)
+	{
+		var parts = name.split('.');
+		var current = NOKIA;
+		for(var key in parts){
+			if(!current[parts[key]]){
+				current[parts[key]] = {};
+			}
+			current = current[parts[key]];
+		}  
+	};
+	
+	NOKIA.init = function()
+	{
+		// Not-Supported Browser check
+		NOKIA.emulator.is_browserReady = (/MSIE/i.test(navigator.userAgent));
+		if(NOKIA.emulator.is_browserReady)
+		{
+			var notSupportedBrowser = NOKIA.helper.readCookie('NOKIA_NOT_SUPPORTED_BROWSER');
+			if (notSupportedBrowser != 1) {
+				$("#NotificationDiv")[0].className = 'show';
+				$("#NotificationDiv").dialog({
+					width: 550,
+					minWidth: 550,
+					minHeight: 350,
+					height: 150,
+					autoOpen: true,
+					position: top,
+					title: 'Notification window',
+					buttons: {
+						Cancel: function(){
+							$("#NotificationDiv").dialog('close');
+						},
+						Continue: function(){
+							$("#NotificationDiv").dialog('close');
+							NOKIA.helper.createCookie('NOKIA_NOT_SUPPORTED_BROWSER', 1);
+							NOKIA.init();
+						}
+					}
+				});
+				return false;
+			}else{
+				$("#BrowserNotificationBar").css({display:'block'});
+				$("#BrowserNotificationBar > p > a").click(function(){ $("#BrowserNotificationBar").hide(); });
+			}
+		}
+	
+		$('iframe')[0].src = "wrt_preview_main.html";
+
+		NOKIA.data.load(deviceResolutionList);
+		
+		var url = window.location.toString();			
+		url = url.split('/');
+		
+		var pointer = 3;
+		if(url[0] == 'http:')
+			pointer = 2;
+
+		var t = ''; 
+		for(var i=pointer; i<url.length-1; i++){ 	t = t + url[i] + '/'; 	}
+		if(url[0] == 'file:')
+			NOKIA.emulator.url = 'file:///' + t;
+		else
+			NOKIA.emulator.url = 'http://' + t;
+
+		//	Common Error/Notification Dialog
+		NOKIA.helper.errorDailog = $("#Dialog").dialog({
+			bgiframe: true, minHeight: 150, width: 450, modal: true, autoOpen: false,
+			buttons: {	
+					Cancel: function(){ $(this).dialog('close');	},			
+					Reload: function(){ 
+						$(this).dialog('close');
+						$("#loaderDiv").html("Widget is reloading. Please wait...");
+						$("#loaderDiv")[0].className = 'green';
+						$("#loaderDiv").show();
+						window.setTimeout(function(){
+							document.location = document.location;
+						}, 3000);
+					}			
+				}
+		});
+
+		//	validating Info.plist
+		this.helper.getInfo('Info.plist', NOKIA.helper.getInfoCallback);	
+
+		//	For getting Icon.png
+		this.helper.getInfo('Icon.png', NOKIA.helper.getIconCallback);	
+	};
+
+	/*
+	 * NOKIA.data
+	 */
+	NOKIA.namespace('data.load');
+
+	NOKIA.data.load = function(data){
+		NOKIA.deviceList = data;
+	}
+
+
+
+	/*
+	 * NOKIA.emulator
+	 */
+	NOKIA.namespace('menu');
+	NOKIA.menu = {
+		is_menu_visible : false,		// true/false
+		is_softkeys_visible : false,	// true : only when MenuItem's are displayed
+		softkeys_visibility : true,		// true/false : for hide/show SFK's
+		is_dimmed : false,
+		is_rsk_overridden : false,
+		log_counter : 1,
+		enable_log : false,
+		rsk_label : '',
+		rsk_event : false,
+		highlighted_item : null,
+		
+		hide : function()
+		{
+			$("#MenuItemsArea").fadeIn("slow");
+
+			//	Hide the SFK's If user hidden them from his code
+			if(NOKIA.menu.softkeys_visibility)
+				$("#SoftKeysArea").fadeIn("slow");
+			
+			NOKIA.menu.is_softkeys_visible = false;
+		},
+
+		log : function(str)
+		{
+			if(!this.enable_log)
+				return false;
+			NOKIA.layout.log("log", NOKIA.menu.log_counter + ' ' +str);
+			NOKIA.layout.log("log", 'is_rsk_overridden: '+NOKIA.menu.is_rsk_overridden);
+			NOKIA.layout.log("log", 'rsk_label: '+NOKIA.menu.rsk_label);
+			NOKIA.layout.log("log", 'rsk_event: '+NOKIA.menu.rsk_event);
+			
+			NOKIA.menu.log_counter++;
+		},
+
+		show : function()
+		{
+			if(NOKIA.menu.is_dimmed)
+				return false;
+				
+			NOKIA.menu.showSoftKeys();
+			
+			NOKIA.menu.is_menu_visible = true;
+			$("#MenuItemsArea").show();
+			
+			NOKIA.menu.highlighted_item = $("#MenuItemsArea > ul > li")[0];
+			NOKIA.menu.highlighted_item.className = 'active';
+
+
+			$("#MenuItemsArea > ul > li").mouseover(function(){
+				if(NOKIA.menu.highlighted_item != null)
+				{
+					NOKIA.menu.highlighted_item.className = '';
+					NOKIA.menu.highlighted_item = null;
+				}
+
+				NOKIA.menu.highlighted_item = this;
+				NOKIA.menu.highlighted_item.className = 'active';
+			});
+
+			$("#SoftKeysArea").mouseout(function(){
+				if (!NOKIA.menu.is_menu_visible) {
+					return false;
+				}
+				
+				if (NOKIA.helper.intervalId) {
+					clearInterval(NOKIA.helper.intervalId);
+				}
+				NOKIA.helper.intervalId = setTimeout(function(){
+					NOKIA.menu.cancel()
+				}, 500);
+			});
+
+
+			//	Change the label "Options" to "Select" to LSK
+			$("#LskLabel > a")[0].innerHTML = "Select";
+			NOKIA.menu.setLsk(NOKIA.menu.selectMenu);
+			
+			//	Change the label "Exit" to "Cancel" to RSK
+			$("#RskLabel > a")[0].innerHTML = 'Cancel';
+			NOKIA.menu.setRsk(NOKIA.menu.cancel);
+			
+
+			NOKIA.emulator.setMenuItemsStyle();
+			
+		},
+		
+		selectMenu : function(){
+			try {
+				if(typeof NOKIA.menu.highlighted_item.onclick != 'undefined'){
+					eval(NOKIA.menu.highlighted_item.onclick)();
+				}
+			} catch (e) {
+				
+			}
+//			NOKIA.menu.cancel();
+		},
+
+		
+		cancel : function()
+		{
+			if(NOKIA.menu.is_dimmed)
+				return false;
+				
+			NOKIA.menu.hideSoftKeys();
+
+			NOKIA.menu.is_menu_visible = false;
+			$("#MenuItemsArea").hide();
+
+			//	Reset the "OPTION" label to LSK
+			$("#LskLabel > a")[0].innerHTML = 'Options';
+			NOKIA.menu.setLsk(NOKIA.emulator.child.menu.show);
+
+			//	Change the label "CANCEL" to "EXIT" to RSK
+			if(!NOKIA.menu.is_rsk_overridden)
+			{
+				$("#RskLabel > a")[0].innerHTML = 'Exit';
+				NOKIA.menu.setRsk(NOKIA.menu.exit);	
+			}
+			else
+			{
+				$("#RskLabel > a")[0].innerHTML = NOKIA.menu.rsk_label;
+				NOKIA.menu.setRsk(NOKIA.menu.rsk_event);	
+			}
+			
+		},
+
+		exit : function()
+		{
+			if(NOKIA.menu.is_dimmed)
+				return false;
+				
+			if(NOKIA.helper.setHomeScreen())
+				return false;
+
+			//	clear the Menu Settings
+			NOKIA.menu.cancel();
+			NOKIA.emulator.child.menu.setRightSoftkeyLabel('', null);
+			NOKIA.emulator.child.menu.items = [];
+			NOKIA.menu.softkeys_visibility = false;
+			
+			// Hide Widget DIV
+			NOKIA.menu.hideSoftKeys();
+			NOKIA.menu.setLsk(function(){});
+			NOKIA.menu.setRsk(function(){});
+			
+			$("#WidgetArea").hide();
+
+			//	Show Icon
+			var style = NOKIA.deviceList[NOKIA.currentDevice][NOKIA.mode]['style'];
+			$('#IconArea').css({
+				'width' 	:	'100%',
+				'height'	:	style['widget']['height']+'px',
+				'float' 	:	style['widget']['float']
+			});
+			
+			$('#IconArea')[0].className = NOKIA.mode+NOKIA.currentDevice;
+			
+			var img = document.createElement('img');
+			img.src = NOKIA.emulator.iconFile;
+			img.border = 0;
+			
+			var div = document.createElement('div');
+			var p = document.createElement('p');
+			
+			if(NOKIA.emulator.plist.DisplayName.length <= 12)
+				p.innerHTML = NOKIA.emulator.plist.DisplayName; 
+			else
+				p.innerHTML = NOKIA.emulator.plist.DisplayName.substr(0, 11) + '...' 
+
+			div.className = 'IconFile';
+			div.style.marginTop = parseInt(parseInt(style['widget']['height']/2)-80) + 'px';
+			div.appendChild(img);
+			img.onclick = function(){
+				
+				//	close the console DIV
+				NOKIA.layout._console_enabled = false;
+				NOKIA.layout.render();
+				
+				$("#loaderDiv").html("Widget is loading. Please wait...");
+				$("#loaderDiv")[0].className = 'green';
+				$("#loaderDiv").show();
+				window.setTimeout(function(){
+					document.location = document.location;
+				}, 3000);
+				
+			};
+			
+			div.appendChild(p);
+
+			$("#loaderDiv").html("Click on Icon to Launch Widget");
+			$("#loaderDiv").show();
+			$("#loaderDiv")[0].className = 'yellow';
+
+			$('#IconArea').append(div);
+			$('#IconArea').show();
+
+			NOKIA.menu.is_dimmed = true;
+			
+			$("#PreferencesBtn").hide();
+			$("#PreferencesTab").dialog('close');
+			
+		},
+		
+		setLsk : function(func)
+		{
+			//	for RSK
+			$('#LskArea')[0].onclick = function(){
+				if(!NOKIA.menu.is_dimmed)
+					func();
+			};
+		
+			$('#LskLabel > a')[0].onclick = function(){
+				if(!NOKIA.menu.is_dimmed)
+					func();
+			};
+
+			return true;
+		},
+		
+		setRsk : function(func)
+		{
+			//	for RSK
+			$('#RskArea')[0].onclick = function(){
+				if(!NOKIA.menu.is_dimmed)
+					func();
+			};
+			
+			$('#RskLabel > a')[0].onclick = function(){
+				if(!NOKIA.menu.is_dimmed)
+					func();
+			};
+			
+			return true;
+		},
+
+
+		triggerLsk : function(event)
+		{
+			var callback;
+			if(NOKIA.mode == 'portrait')
+				callback = NOKIA.menu.lsk_event;
+			else if( (NOKIA.mode == 'landscape') && (event.id =='LskLabel') )
+				callback = NOKIA.menu.lsk_event;
+			else
+				callback = NOKIA.menu.rsk_event;
+			
+			if(typeof callback == 'function' && !NOKIA.menu.is_dimmed)
+			{
+				callback();
+			}
+		},
+
+		triggerRsk : function(event)
+		{
+			var callback;
+			if(NOKIA.mode == 'portrait')
+				callback = NOKIA.menu.rsk_event;
+			else if( (NOKIA.mode == 'landscape') && (event.id =='RskLabel') )
+				callback = NOKIA.menu.rsk_event;
+			else
+				callback = NOKIA.menu.lsk_event;
+			
+			if(typeof callback == 'function')
+			{
+				if(!NOKIA.menu.is_dimmed)
+				{
+					callback();
+					NOKIA.menu.cancel();
+				}
+			}
+		},
+		
+		render : function()
+		{
+			if(!NOKIA.menu.softkeys_visibility)
+				NOKIA.menu.hideSoftKeys();
+			else
+				NOKIA.menu.showSoftKeys();
+			
+			NOKIA.emulator.setWidgetStyle();
+		},
+		
+
+		init : function()
+		{
+			NOKIA.menu.render();
+		},
+		
+		createSFKArea : function()
+		{
+			var a = $('#SoftKeys > a');
+			a.html('');
+			
+			var preferences = NOKIA.deviceList[NOKIA.currentDevice][NOKIA.mode];
+			
+			var lsk = document.createElement('img');
+			lsk.border="0";
+			lsk.id = "LskArea";
+			lsk.name ="LskArea";
+			lsk.src = "preview/images/TransperantImage.png";
+			lsk.style.width = preferences.style.softkeysImg.width; 
+			lsk.style.height = preferences.style.softkeysImg.height;
+			
+			var rsk = document.createElement('img');
+			rsk.border = 0;
+			rsk.id = "RskArea";
+			rsk.name = "RskArea";
+			rsk.src = "preview/images/TransperantImage.png";
+			rsk.style.width = preferences.style.softkeysImg.width; 
+			rsk.style.height = preferences.style.softkeysImg.height;
+
+			if(NOKIA.mode == 'portrait')
+			{	
+				lsk.onclick = function(){
+					$("#LskLabel > a").trigger('click');
+				}
+				a[0].appendChild(lsk);
+
+				rsk.onclick = function(){
+					$("#RskLabel > a").trigger('click');
+				}
+				a[1].appendChild(rsk);
+
+			}else{
+
+				rsk.onclick = function(){
+					$("#RskLabel > a").trigger('click');
+				}
+				a[0].appendChild(rsk);
+
+				lsk.onclick = function(){
+					$("#LskLabel > a").trigger('click');
+				}
+				a[1].appendChild(lsk);
+			}
+			
+			
+		},
+
+		showSoftKeys : function()
+		{
+			NOKIA.menu.is_softkeys_visible = true;
+
+			NOKIA.emulator.setWidgetStyle();
+			$("#SoftKeysArea").show();
+		},
+		
+		hideSoftKeys : function()
+		{
+			//	Hide the SFK's If user hidden them from his code
+			if(!NOKIA.menu.softkeys_visibility)
+				$("#SoftKeysArea").hide();
+			
+			NOKIA.menu.is_softkeys_visible = false;
+
+			NOKIA.emulator.setWidgetStyle();
+		}
+	};
+
+
+
+	/*
+	 * NOKIA.emulator
+	 */
+	NOKIA.namespace('emulator');
+	NOKIA.emulator = {
+		child : false,
+		iconFile : 'preview/images/default-Icon.png',
+		loaded : false,
+		plist : {
+			DisplayName	:	'',
+			Identifier	:	'',
+			MainHTML	:	'',
+			AllowNetworkAccess	:	"false",
+			Version		:	'',
+			MiniViewEnabled		:	"false",
+			is_browserReady : false
+		},
+		
+		load : function()
+		{
+			if(this.loaded)
+				return false;
+				
+			//	load the saved device Info
+			var device = NOKIA.helper.readCookie('NOKIA_EMULATOR_DEVICE');
+			NOKIA.currentDevice = device || NOKIA.currentDevice;
+
+
+			//	load the saved device mode
+			var mode = NOKIA.helper.readCookie('NOKIA_EMULATOR_DEVICE_MODE');
+			if(mode != null)
+				NOKIA.mode = mode;
+
+			//	SAVE the device DATA
+			NOKIA.helper.createCookie('NOKIA_EMULATOR_DEVICE', NOKIA.currentDevice);
+			NOKIA.helper.createCookie('NOKIA_EMULATOR_DEVICE_MODE', NOKIA.mode);
+			
+			this.loaded = true;
+			
+		},
+	
+		render : function()
+		{
+			this.load();
+			
+			if(!NOKIA.emulator.orientationSupports())
+				NOKIA.mode = NOKIA.deviceList[NOKIA.currentDevice]['default'];
+			
+			if(typeof NOKIA.deviceList == 'undefined' || typeof NOKIA.deviceList[NOKIA.currentDevice] == 'undefined' || typeof NOKIA.deviceList[NOKIA.currentDevice][NOKIA.mode] == 'undefined')
+			{
+				alert('Deive resolution: '+NOKIA.currentDevice+' or the mode: '+NOKIA.mode+' not found');
+				return false;
+			}
+			
+			this.setStyle();
+		},
+		
+		setMode : function(mode)
+		{
+			NOKIA.mode = mode;
+
+			//	SAVE the device DATA
+			NOKIA.helper.createCookie('NOKIA_EMULATOR_DEVICE_MODE', NOKIA.mode);
+
+			NOKIA.emulator.render();
+		},
+		
+		orientationSupports : function()
+		{
+			return NOKIA.deviceList[NOKIA.currentDevice]['orientation'];
+		},
+		
+		setStyle:function()
+		{
+			if(!NOKIA.helper.checkDependencies())
+			{
+				setTimeout(NOKIA.emulator.setStyle, 1000);
+			}
+			
+			var deviceProperties = NOKIA.deviceList[NOKIA.currentDevice][NOKIA.mode];
+			var style = deviceProperties['style'];
+
+			//	Apply Style and propertis to Device layers
+			$("#DeviceDisplayLayout").css(style['layout']);
+			$('#DisplayArea').css(style['display']);
+			
+			NOKIA.emulator.setWidgetStyle();
+			
+			$('#SoftKeysArea').css({
+				'width'	:	style['menu']['width']+'px',
+				'height'	:	style['menu']['height']+'px',
+				'float' 	:	style['menu']['float']
+			});
+			
+			$('#SoftKeysArea > ul > li').css('width', parseInt(style['menu']['width']/2)-10);
+
+			
+			NOKIA.emulator.setMenuItemsStyle();
+			
+			$('#SoftKeys').css(style['softkeys']);
+//			$('#SoftKeys > a > img').css(style['softkeysImg']);
+
+			NOKIA.menu.createSFKArea();
+			
+			$("#DeviceDisplayLayout").show();
+			$("#PreferencesTab").show();
+			
+			if(!NOKIA.menu.is_dimmed)
+				$("#PreferencesBtn").show();
+		},
+		
+		setWidgetStyle : function()
+		{
+			var style = NOKIA.deviceList[NOKIA.currentDevice][NOKIA.mode]['style'];
+			var height;
+			if(NOKIA.menu.softkeys_visibility || NOKIA.menu.is_softkeys_visible)
+				height = parseInt(style['widget']['height'] - style['menu']['height']);
+			else
+				height = style['widget']['height'];
+
+			$('#WidgetArea').css({
+				'width' 	:	style['widget']['width']+'px',
+				'height'	:	height+'px',
+				'float' 	:	style['widget']['float']
+			});
+		},
+		
+		setMenuItemsStyle : function()
+		{
+			var style 	= NOKIA.deviceList[NOKIA.currentDevice][NOKIA.mode]['style'];
+			var count = 1;
+			try {
+				if (NOKIA.emulator.child.menu) {
+					count = parseInt(NOKIA.helper.getElementsLengthInObject(NOKIA.emulator.child.menu.items)) + 1;
+				}
+			} catch (e) {
+				count = 1;
+			}
+			var height 	= parseInt(count*style['menu']['optionKeysheight']) + 10;
+			var top 	= parseInt(style['widget']['height'] - height); 
+
+			$('#MenuItemsArea').css({
+				'width'		:	style['widget']['width']+'px',
+				'height'	:	height+'px',
+				'marginTop'	:	'-2px',
+				'top'		:	(style['widget']['height']-height-style['menu']['height']+2)+'px',
+				'position'	: 	'relative'
+			});
+		}
+	};
+
+	/*
+	 * NOKIA.helper functions
+	 */
+	NOKIA.namespace('helper.loadScript');
+	NOKIA.helper = {
+		path : document.location.pathname,
+		errorDailog	: null,
+		prefDailog : null,
+		intervalId : null,
+		infoPlistCounter : false,
+		IconFileCounter  : false,
+		loadScript : function(path)
+		{
+			var head = document.getElementsByTagName("head")[0] || document.documentElement;
+			var script = document.createElement("script");
+	
+			script.type = "text/javascript";
+			script.src = src;
+			head.appendChild( script );
+		},
+
+		loadPreferences : function()
+		{
+			if(/dreamweaver/i.test(navigator.userAgent))
+			{
+				$("#dwDeviceHelp")[0].className = '';
+				$("#resSupportLink")[0].className = 'hide';
+			}
+			//	Selecting Resoltion
+			var resOptions = $("#resOptions")[0];
+			for(var i=0; i<NOKIA.resolution.length; i++)
+			{
+				if(NOKIA.resolution[i] == NOKIA.currentDevice)
+				{
+					resOptions.options[i].selected = true;
+					$("#resSupportLink")[0].href = resOptions.options[i].value;
+					break;
+				}				
+			}
+			
+			//	Selecting Orientation
+			if(NOKIA.mode == 'portrait')
+				$('#input_portrait')[0].checked = true;
+			else
+				$('#input_landscape')[0].checked = true;
+
+			if (!NOKIA.emulator.orientationSupports()) {
+				if (NOKIA.mode == 'portrait') 
+					$("#input_landscape")[0].disabled = true;
+				else 
+					$("#input_portrait")[0].disabled = true;
+					
+				$("#Orientation_Info").html("Not supported");
+				$("#Orientation_Info").show();
+				$("#Orientation_Controls").hide();
+			}
+			else {
+				$("#input_landscape")[0].disabled = false;
+				$("#input_portrait")[0].disabled = false;
+
+				$("#Orientation_Info").hide();
+				$("#Orientation_Controls").show();
+			}
+			
+			//	Selecting Version
+			if(NOKIA.version == 'WRT 1.0')
+				$('#wrt_version_1_0')[0].checked = true;
+			else
+				$('#wrt_version_1_1')[0].checked = true;
+				
+			//	HomeScreen Support
+			if(NOKIA.deviceList[NOKIA.currentDevice].homeScreenSupport)
+			{
+				if (typeof NOKIA.emulator.plist.MiniViewEnabled != 'undefined') {
+					if (NOKIA.emulator.plist.MiniViewEnabled == 'false') 
+						$('#HS_Control_Info').html("<span id='wrt-help' onclick='javascipt:NOKIA.helper.showMiniviewHelp();'></span><strong>Not Enabled</strong><br/><small>Click on help to read more about enabling Mini view support</small>");
+					else 
+						$('#HS_Control_Info').html("Supported");
+				}
+				else
+					$('#HS_Control_Info').html("<span id='wrt-help'></span>Not Supported");
+
+				$('#HS_Control_Info').show();
+
+			}
+			else
+			{
+				$('#HS_Control_Info').html("Not Supported for the selected Device resolution");
+				$('#HS_Control_Info').show();
+			}
+		},
+
+		getInfo : function(url, callback)
+		{
+			try {
+				var xhr = this.ajax();
+				
+				if ((/AppleWebKit/i.test(navigator.userAgent)))
+					xhr.open("GET", url, false);
+				else
+					xhr.open("GET", url, true);
+				
+				
+				xhr.onreadystatechange = function() 
+				{
+						// readyState = 4 ; "complete"
+						if (xhr.readyState==4)
+						{
+							// status = 200 ; "ok"
+							if( (xhr.status == 200) || (!xhr.status) )
+							{
+								callback(true, xhr);
+							}
+							else
+							{ 
+								callback(false, xhr);
+							}
+						}
+	
+				}
+				xhr.send(null);
+			} catch (e) {
+				if (e.name == 'NS_ERROR_FILE_NOT_FOUND') {
+					callback(false, xhr);
+				}			
+			}
+		},
+
+		getInfoCallback : function(flag, xhr)
+		{
+			//	If Info.plis NOT FOUND / FAILED LOAD
+			//	an ERROR!, unable to proceed further
+			// 	STOP there
+			if(!flag)
+			{
+				if(!NOKIA.helper.infoPlistCounter)
+				{
+					NOKIA.helper.infoPlistCounter = true;
+					NOKIA.helper.getInfo('info.plist', NOKIA.helper.getInfoCallback);
+					return false;
+				}
+
+				NOKIA.helper.error('Unable to intialize the widget, failed to process Info.plist file. <br/>Please ensure <strong style="color:#efe352;">Info.plist</strong> file exists on the widget root folder <br/>or check the filename of <strong style="color:#efe352;">Info.plist</strong> It is case-sensitive');
+				return false;
+			}
+			else{
+				
+				var xmlString = xhr.responseText;
+				
+				// do some cheating here
+				xmlString = xmlString.replace(/<\s*true\s*\/>/gi, "<string>true</string>");
+				xmlString = xmlString.replace(/<\s*false\s*\/>/gi, "<string>false</string>");
+	
+			/*
+			 * 	DomParser Logic
+				var appXml = new DOMParser();
+				var xmlobject = appXml.parseFromString(xmlString, "text/xml");
+			 */
+			
+				//	return the JSON Object
+				NOKIA.helper.validate(xml2json.parser(xmlString));
+			}
+			
+		},
+		
+		getIconCallback : function(flag, xhr)
+		{
+			
+			if(!flag)
+			{
+				if(!NOKIA.helper.IconFileCounter)
+				{
+					NOKIA.helper.IconFileCounter = true;
+					NOKIA.helper.getInfo('icon.png', NOKIA.helper.getIconCallback);
+					return false;	
+				}
+			}
+			else
+				NOKIA.emulator.iconFile =  (NOKIA.helper.IconFileCounter) ? "icon.png" : "Icon.png";
+		},
+		
+
+		validate : function(xmlObject)
+		{
+			window.xmlObject = xmlObject;
+			
+			//	<plist>
+			if(typeof xmlObject.plist != 'object' || xmlObject.plist == 'undefined')
+			{
+				NOKIA.helper.error('Corrupted Info.plist file');
+				return false;
+			}
+			//	<dict>
+			xmlObject = xmlObject.plist;
+			if(typeof xmlObject.dict != 'object' || xmlObject.dict == 'undefined')
+			{
+				NOKIA.helper.error('Corrupted Info.plist file');
+				return false;
+			}
+
+			//	<key>
+			xmlObject = xmlObject.dict;
+			if(typeof xmlObject.key != 'object' || xmlObject.key == 'undefined')
+			{
+				NOKIA.helper.error('Corrupted Info.plist file');
+				return false;
+			}
+
+			//	<string>
+			if(typeof xmlObject.string != 'object' || xmlObject.string == 'undefined')
+			{
+				NOKIA.helper.error('Corrupted Info.plist file');
+				return false;
+			}
+
+			//	num of <key> = num of <string>
+			if(xmlObject.key.length != xmlObject.string.length)
+			{
+				NOKIA.helper.error('Corrupted Info.plist file');
+				return false;
+			}
+
+			for(var val in xmlObject.key)
+			{
+				if(NOKIA.emulator.plist[xmlObject.key[val]] != 'undefined'){
+					NOKIA.emulator.plist[xmlObject.key[val]] = xmlObject.string[val].toString(); 
+				}
+			}
+
+			try {
+				if(typeof NOKIA.emulator.plist.DisplayName != 'undefined'){
+					document.title = NOKIA.emulator.plist.DisplayName + ' - ' + document.title;
+				}
+			} catch (e) {}
+
+			//	Add UI-Event listeners
+			NOKIA.helper.addListeners();
+			NOKIA.layout.init();
+			NOKIA.emulator.render();
+		},
+
+
+		ajax : function() 
+		{
+			//	xmlHttpRequest object	
+			var request = null;
+		
+		    // branch for native XMLHttpRequest object
+		    if(window.XMLHttpRequest && !(window.ActiveXObject)) {
+		    	try 
+				{
+					request = new XMLHttpRequest();
+					try
+					{
+						//	attach the Bypass code, if the browser is firefox
+						if(netscape.security.PrivilegeManager.enablePrivilege)
+						{
+							//	duplicate the function
+							request._open = request.open;
+							
+							//	redefine the function definition
+							request.open = function(method, url, flag)
+							{
+								try
+								{
+									// Enable Universal Browser Read
+									netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
+		
+									//	call the native XmlHttpRequest.open method
+									this._open(method, url, flag);
+								}catch(e)
+								{
+									//	call the native XmlHttpRequest.open method
+									this._open(method, url, flag);
+								}
+							}
+						}
+					}
+					catch(e)
+					{
+						//	eatup all exceptions
+					}
+				} 
+				catch(e) {
+					request = null;
+		        }
+		    // branch for IE/Windows ActiveX version
+		    } else if(window.ActiveXObject) {
+		       	try {
+		        	request = new ActiveXObject("Msxml2.XMLHTTP");
+		      	} catch(e) {
+		        	try {
+		          		request = new ActiveXObject("Microsoft.XMLHTTP");
+		        	} catch(e) {
+		          		alert('Failed to create XmlHttprequest');
+						return null;
+		        	}
+				}
+		    }
+			
+			return (request);
+		},
+
+		error : function(msg)
+		{
+			if(NOKIA.menu.enable_log)
+				NOKIA.layout.log("log", msg);
+			
+			$("#Dialog").html(msg);
+			$("#Dialog").dialog('open');
+		},
+
+		createCookie : function(name,value) 
+		{
+			var days = 240000;
+		    if (days) {
+				var date = new Date();
+				date.setTime(date.getTime()+(days*24*60*60*1000));
+				var expires = "; expires="+date.toGMTString();
+			}
+			else var expires = "";
+			document.cookie = "Nokia_WRT#" + NOKIA.helper.path + "#" + name + "=" + value + expires + "; path=/";
+		},
+		
+		readCookie : function(name) 
+		{
+			var nameEQ = "Nokia_WRT#" + NOKIA.helper.path + "#" + name + "=";
+			var ca = document.cookie.split(';');
+			for(var i=0;i < ca.length;i++) {
+				var c = ca[i];
+				while (c.charAt(0)==' ') c = c.substring(1,c.length);
+				if (c.indexOf(nameEQ) == 0) {
+					return c.substring(nameEQ.length,c.length);
+				}
+			}
+			return undefined;
+		},
+
+		toggle : function(ele)
+		{
+			if (NOKIA.emulator.orientationSupports()) {
+//				var mode = (NOKIA.mode == 'portrait') ? 'landscape' : 'portrait';
+				NOKIA.emulator.setMode(ele.value);
+			}
+			else
+			{	
+				ele.checked = false;
+				if(ele.value == 'portrait')
+					$("#input_landscape")[0].checked = true;
+				else
+					$("#input_portrait")[0].checked = true;
+			}
+		},
+
+		version : function(ele)
+		{
+			if (confirm('Would you like to reload the widget to apply the changes on the Version settings?')) 
+			{
+				NOKIA.helper.createCookie('_WRT_VERSION', ele.value);
+				$("#loaderDiv").html("Applying the " + ele.value + ", please wait...");
+				$("#loaderDiv").show();
+				$("#loaderDiv")[0].className = 'green';
+				
+				$("#PreferencesTab").dialog('close');
+				
+				window.setTimeout(function(){
+					document.location = document.location;
+				}, 3000);
+			}
+			else
+			{
+				ele.checked = false;
+				if(ele.value != 'WRT 1.0')
+					$("#wrt_version_1_0")[0].checked = true;
+				else
+					$("#wrt_version_1_1")[0].checked = true;
+			}
+		},
+
+		addListeners : function()
+		{
+			/*
+			 * Render Emulator for Interaction
+			 */
+			NOKIA.helper.prefDailog = $("#PreferencesTab").dialog({
+					width: 550,	minWidth: 550, minHeight: 350, height: 350, autoOpen: false, position : top, title : '&nbsp;',
+					buttons : {
+						Close : function(){
+							$("#PreferencesTab").dialog('close');
+
+							//	Hack for Mac firefox
+							if(/Mac/i.test(navigator.userAgent))
+							{
+								$("#WidgetArea iframe").css({overflow:'auto'});
+							}
+							
+							//	select index : 0 tab selected
+							$('#tabs').tabs( 'select' , 0);
+						}
+					}
+				});
+				
+			$('#PreferencesBtn').click(function(){
+				//	Load preferences
+				NOKIA.helper.loadPreferences();
+				$('#PreferencesTab').dialog('open');
+
+				//	Hack for Mac firefox
+				if(/Mac/i.test(navigator.userAgent))
+				{
+					$("#WidgetArea iframe").css({overflow:'hidden'});
+				}
+			});
+			
+			$('#input_portrait').change(function(){
+				NOKIA.helper.toggle(this);
+			});
+
+			$('#input_landscape').change(function(){
+				NOKIA.helper.toggle(this);
+			});
+
+			$('#resOptions').change(function(ele){
+				ele = ele.target || this;
+				
+				NOKIA.currentDevice = ele.options[ele.selectedIndex].text;
+				$("#resSupportLink")[0].href = ele.value;
+		
+				//	SAVE the device DATA
+				NOKIA.helper.createCookie('NOKIA_EMULATOR_DEVICE', NOKIA.currentDevice);
+		
+				NOKIA.emulator.render();
+				NOKIA.helper.loadPreferences();
+			});
+
+			//	Hack for Mac firefox
+			if (/Mac/i.test(navigator.userAgent)) {
+				if (!(/AppleWebKit/i.test(navigator.userAgent))) {
+					$("#resOptions")[0].size = '4';
+				}
+			}
+
+
+			//	WRT Version controls
+			$('#wrt_version_1_0').change(function(){
+				NOKIA.helper.version(this);
+			});
+			
+			$('#wrt_version_1_1').change(function(){
+				NOKIA.helper.version(this);
+			});
+
+
+			$("#orientationIcon").click(function(){
+				var mode = (NOKIA.mode == 'portrait') ? 'landscape' : 'portrait';
+				NOKIA.emulator.setMode(mode);
+				$("#WidgetArea")[0].className = 'hs_'+NOKIA.mode;
+			});
+
+
+			$("#iframeMask").click(function(){
+
+				$("#PreferencesBtn").show();
+				$("#orientationIcon").hide();
+				$("#iframeMask").hide();
+				$("#loaderDiv").hide();
+
+				NOKIA.menu.is_dimmed = false;
+				
+				$("#WidgetArea")[0].className = '';
+				
+				NOKIA.menu.softkeys_visibility = true;
+				NOKIA.menu.showSoftKeys();
+
+			});
+
+
+			//	MenuItems DIV events
+			$("#MenuItemsArea").mouseover(function(){
+				if(NOKIA.helper.intervalId)
+					clearInterval(NOKIA.helper.intervalId);
+
+				$("#MenuItemsArea").show();
+			});
+
+			$("#MenuItemsArea").mouseout(function(){
+				if(NOKIA.helper.intervalId)
+					clearInterval(NOKIA.helper.intervalId);
+
+				NOKIA.helper.intervalId = setTimeout(function(){
+					NOKIA.menu.cancel()
+				}, 500);
+			});
+
+
+			// Tabs
+			$('#tabs').tabs({
+				select : function(event, ui){
+					if(parseInt(ui.index) == 1)
+					{
+						$("#event-icons").show();
+						$("#event-battery-info").hide();
+						$("#event-messaging-info").hide();
+						$("#event-memory-info").hide();
+						
+						//	WRT versionn check
+						if(NOKIA.version == 'WRT 1.1')
+						{
+							$("#event-messaging")[0].className = 'active';
+							$("#event-memory")[0].className = 'active';
+						}else
+						{
+							$("#event-messaging")[0].className = 'inactive';
+							$("#event-memory")[0].className = 'inactive';
+						}
+						$("#event-battery")[0].className = 'active';
+					}else if(parseInt(ui.index) == 0)
+					{
+						$("#settings-view").show();
+						$("#mini-view-info").hide();
+					}
+				}
+			});
+
+			
+			/*	
+			 * 	Event triggering
+			 */
+			
+			//	for battery
+			$("#event-battery").click(function(event){
+				if(event.target.className == 'active')
+				{
+					$("#event-icons").hide();
+					$("#event-battery-info").show();
+
+/*
+				$('#slider').slider('option', 'value', NOKIA.emulator.child._BRIDGE_REF.helper.getBatteryStrength());
+				NOKIA.emulator.child._BRIDGE_REF.helper.getBatteryStrength()
+				$('#slider').slider('option', 'value', 10);
+				$('#slider').slider();
+*/
+				}
+			});
+
+			$("#event-battery-back").click(function(event){
+				$("#event-icons").show();
+				$("#event-battery-info").hide();
+			});
+
+
+			//	for messaging
+			$("#event-messaging").click(function(event){
+				if(event.target.className == 'active')
+				{
+					$("#event-icons").hide();
+					$("#event-messaging-info").show();
+				}
+			});
+
+			$("#event-messaging-back").click(function(event){
+				$("#event-icons").show();
+				$("#event-messaging-info").hide();
+			});
+
+
+			//	for memory
+			$("#event-memory").click(function(event){
+				if(event.target.className == 'active')
+				{
+					$("#event-icons").hide();
+					$("#event-memory-info").show();
+				}
+			});
+
+			$("#event-memory-back").click(function(event){
+				$("#event-icons").show();
+				$("#event-memory-info").hide();
+			});
+
+
+			//	for minView more info
+			$("#mini-view-back").click(function(event){
+				$("#settings-view").show();
+				$("#mini-view-info").hide();
+			});
+
+
+			// Slider
+			$('#slider').slider({
+				range: true,
+				min : 0,
+				max : 100,
+				step : 1,
+				value : 10,
+				animate: true,
+				slide: function(event, ui) {
+					$("#slider-value-panel > span").html(ui.value.toString());
+				}
+				});
+
+			//	Bind Buttons to trigger values to WRT 1.0 / 1.1 bindings
+			
+			$("#connect-charger").click(NOKIA.helper.triggerEvents);
+			$("#disconnect-charger").click(NOKIA.helper.triggerEvents);
+			$("#update-batter-strength").click(NOKIA.helper.triggerEvents);
+
+			$("#send-sms").click(NOKIA.helper.triggerEvents);
+			$("#send-mms").click(NOKIA.helper.triggerEvents);
+
+			$("#connect-memory-card").click(NOKIA.helper.triggerEvents);
+			$("#disconnect-memory-card").click(NOKIA.helper.triggerEvents);
+			
+		},
+		
+		setHomeScreen : function()
+		{
+			//	HomeScreen Support
+			if (NOKIA.deviceList[NOKIA.currentDevice].homeScreenSupport) {
+
+				if (typeof NOKIA.emulator.plist.MiniViewEnabled != 'undefined') {
+					if (NOKIA.emulator.plist.MiniViewEnabled != 'false') 
+					{
+						$("#WidgetArea")[0].className = 'hs_' + NOKIA.mode;
+						
+						//	menu handlining
+						NOKIA.menu.softkeys_visibility = false;
+						NOKIA.menu.cancel();
+						NOKIA.menu.is_dimmed = true;
+						
+
+						$("#loaderDiv").html("Click on widget for Return to Full view");
+						$("#loaderDiv")[0].className = 'green';
+						$("#loaderDiv").show();
+
+						$("#iframeMask").show();
+						$("#orientationIcon").show();
+						$("#PreferencesBtn").hide();
+
+						$("#PreferencesTab").dialog('close');
+						return true;
+					}
+				}
+			}
+			return false;			
+		},
+		
+		getElementsLengthInObject : function(items){
+			var count = 0;
+			for (var i in items) 
+			{
+				if(!items[i].isDimmed)
+					count++;
+			}
+			
+			return count;
+		},
+		
+		triggerEvents : function(event)
+		{
+			if(typeof event.target.id == 'undefined')
+			return false;
+			
+			switch(event.target.id)
+			{
+				//	for battery
+				case 'connect-charger': 
+										NOKIA.helper.trigger("power", "chargerconnected", 1);
+										if(NOKIA.version == 'WRT 1.1')
+											NOKIA.helper.triggerSapi("Service.SysInfo", "Battery.ChargingStatus", {Status: 1});
+										break;
+
+				case 'disconnect-charger': 
+										NOKIA.helper.trigger("power", "chargerconnected", 0);
+										if(NOKIA.version == 'WRT 1.1')
+											NOKIA.helper.triggerSapi("Service.SysInfo", "Battery.ChargingStatus", {Status: 0});
+										break;
+
+				case 'update-batter-strength': 
+										var chargeValue = parseInt($('#slider').slider('value'));
+										NOKIA.helper.trigger("power", "chargelevel", chargeValue);
+										if(NOKIA.version == 'WRT 1.1')
+											NOKIA.helper.triggerSapi("Service.SysInfo", "Battery.BatteryStrength", {Status: chargeValue});
+										break;
+
+				//	for messaging
+				case 'send-sms': 
+										if(NOKIA.version == 'WRT 1.1')
+											NOKIA.helper.triggerSapi("Service.Messaging", "NewMessage", {MessageType: 'SMS'});
+										break;
+				case 'send-mms': 
+										if(NOKIA.version == 'WRT 1.1')
+											NOKIA.helper.triggerSapi("Service.Messaging", "NewMessage", {MessageType: 'MMS'});
+										break;
+
+				//	for memory
+				case 'connect-memory-card': 
+										if(NOKIA.version == 'WRT 1.1')
+											NOKIA.helper.triggerSapi("Service.SysInfo", "Memory.MemoryCard", {Status: 1});
+										break;
+				case 'disconnect-memory-card': 
+										if(NOKIA.version == 'WRT 1.1')
+											NOKIA.helper.triggerSapi("Service.SysInfo", "Memory.MemoryCard", {Status: 0});
+										break;
+			}
+		},	
+
+		triggerSapi : function(provider, eventType, data){
+			NOKIA.emulator.child.device.implementation.triggerListener(provider, eventType, data);
+		},	
+
+		trigger : function(provider, eventType, data){
+			NOKIA.emulator.child.widget.triggerListener(provider, eventType, data);
+		},
+		
+		showMiniviewHelp : function(){
+			$("#settings-view").hide();
+			$("#mini-view-info").show();
+		},
+		
+		checkDependencies : function(){
+			
+			for(var key in NOKIA.scriptsLoaded)
+			{
+				if(!NOKIA.scriptsLoaded[key])
+					return false;
+			}
+
+			//	for LSK
+			NOKIA.menu.setLsk(NOKIA.emulator.child.menu.show);
+		
+			//	for RSK
+			NOKIA.menu.setRsk(NOKIA.menu.exit);
+
+			return true;
+		}
+	};
+	
+
+	/*
+	 * NOKIA.layout functions
+	 */
+	NOKIA.namespace('layout');
+	NOKIA.layout = {
+		_console_minimized : true,
+		_console_enabled : false,
+		_consoleWindowHeight : 200,
+		_consoleHeaderHeight : 31,
+
+		init : function(){
+			
+			//	Toggle console window
+			$('#Console-Toggle-Button').click(function(){
+				
+				NOKIA.layout._console_minimized = (NOKIA.layout._console_minimized) ? false : true;
+				NOKIA.layout.render();
+			});
+			
+			// clear Log
+			$("#Console-Clear-Button").click(function(){
+				$("#preview-ui-bottom-body")[0].innerHTML = '';
+			});
+
+
+			$('#preview-ui-bottom').show();
+			NOKIA.layout.render();
+		},
+		
+		log : function(type, msg){
+			var p = document.createElement('p');
+			p.className = type;
+			p.innerHTML = msg;
+			var divBody = $('#preview-ui-bottom-body')
+			divBody.append(p);
+			divBody[0].scrollTop = divBody[0].scrollHeight;
+		},
+		
+		
+		render : function(){
+			var _width = parseInt(window.innerWidth);
+			var _height = parseInt(window.innerHeight);
+			
+			if(!NOKIA.layout._console_enabled)
+			{
+				$('#preview-ui-bottom').css({
+					display: 'none'
+				});
+				
+				$('#preview-ui-top').css({
+					height: _height+'px'
+				});
+
+				return false;
+			}
+			
+			
+			if(!NOKIA.layout._console_minimized)
+			{
+				$('#Console-Toggle-Button')[0].className = 'open';
+				
+				//	set STYLE details for TOP window
+				$('#preview-ui-top').css({
+					height: parseInt(_height - NOKIA.layout._consoleWindowHeight) + 'px'
+				});
+				
+				//	set STYLE details for Bottom window
+				$('#preview-ui-bottom').css({
+					height: NOKIA.layout._consoleWindowHeight + 'px',
+					display : 'block'
+				});
+
+				$('#preview-ui-bottom-header').css({
+					height: NOKIA.layout._consoleHeaderHeight + 'px'
+				});
+
+				$('#preview-ui-bottom-body').css({
+					height: parseInt(NOKIA.layout._consoleWindowHeight - NOKIA.layout._consoleHeaderHeight) + 'px',
+					display : 'block'
+				});
+				
+				// Auto scroll when console window opened from MINIMIZED => MAXIMIZED state
+				window.setTimeout(function(){
+					$('#preview-ui-bottom-body')[0].scrollTop = $('#preview-ui-bottom-body')[0].scrollHeight;
+				}, 100);
+				
+			}else{
+				$('#Console-Toggle-Button')[0].className = 'close';
+
+				//	set STYLE details for TOP window
+				$('#preview-ui-top').css({
+					height: parseInt(_height - NOKIA.layout._consoleHeaderHeight) + 'px'
+				});
+				
+				//	set STYLE details for Bottom window
+				$('#preview-ui-bottom').css({
+					height: NOKIA.layout._consoleHeaderHeight + 'px',
+					display : 'block'
+				});
+
+				$('#preview-ui-bottom-header').css({
+					height: NOKIA.layout._consoleHeaderHeight + 'px',
+					display : 'block'
+				});
+
+				$('#preview-ui-bottom-body').css({
+					display : 'none'
+				});
+			}
+		}
+		
+	};
+}
+
+$(document).ready(function () {
+	NOKIA.init();	
+});
+
+window.onresize = NOKIA.layout.render;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/preview/script/resolution.js	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,303 @@
+/*
+ * Device Resolution details
+ */
+var deviceResolutionList = {
+	'240x320'	: 	{
+		'default'			:	'portrait',
+		'orientation'		:	true,
+		'homeScreenSupport'	:	false,
+		'fontSize'			:	'12px',
+		'portrait'	:	{
+			'style'	:	{
+				'layout'	:	{
+					'backgroundImage'	: 'url(preview/images/device/240x320/Portrait.png)',
+					'width'				: '600px',
+					'height'			: '536px'
+					},
+				'display':	{
+					'width'		:	'240px',
+					'height'	:	'320px',
+					'paddingTop':	'108px',
+					'marginLeft': 	'auto'				
+					},
+				'widget':	{
+					'width'		:	240,
+					'height'	:	320,
+					'float'		: 	'left'
+					},
+				'menu'	:	{
+					'width'		:	240,
+					'height'	:	30,
+					'float'		: 	'right',
+					'optionKeysheight'	:	24
+					},
+				'softkeys'	:	{
+					'width'	:	'240px',
+					'height':	'50px',
+					'left'	:	'0px',
+					'top'	:	'0px',
+					'position':	'relative'
+				},
+				'softkeysImg' : {
+					'width'	:	"50%",
+					'height':	"100%"
+				}
+			}
+		},
+		'landscape'	:	{
+			'style'	:	{
+				'layout'	:	{
+					'backgroundImage'	: 'url(preview/images/device/240x320/Landscape.png)',
+					'width'				: '848px',
+					'height'			: '408px'
+					},
+				'display':	{
+					'width'		:	'320px',
+					'height'	:	'240px',
+					'paddingTop':	'84px',
+					'marginLeft': 	'auto'				
+					},
+				'widget':	{
+					'width'		:	320,
+					'height'	:	240,
+					'float'		: 	'left'
+					},
+				'menu'	:	{
+					'width'		:	320,
+					'height'	:	30,
+					'float'		: 	'right',
+					'optionKeysheight'	:	24
+					},
+				'softkeys'	:	{
+					'width'	:	'50px',
+					'height':	'240px',
+					'left'	:	'200px',
+					'top'	:	'-250px',
+					'position':	'relative'
+				},	
+				'softkeysImg' : {
+					'width'	:	"100%",
+					'height':	"50%"
+				}
+			}
+		}
+	},
+
+	'320x240'	: 	{
+		'default'			:	'portrait',
+		'orientation'		:	true,
+		'homeScreenSupport'	:	false,
+		'fontSize'			:	'12px',
+		'portrait'	:	{
+			'style'	:	{
+				'layout'	:	{
+					'backgroundImage'	: 'url(preview/images/device/320x240/Portrait.png)',
+					'width'				: '640px',
+					'height'			: '472px'
+					},
+				'display':	{
+					'width'		:	'320px',
+					'height'	:	'240px',
+					'paddingTop':	'113px',
+					'marginLeft': 	'163px'				
+					},
+				'widget':	{
+					'width'		:	320,
+					'height'	:	240,
+					'float'		: 	'left'
+					},
+				'menu'	:	{
+					'width'		:	320,
+					'height'	:	30,
+					'float'		: 	'right',
+					'optionKeysheight'	:	24
+					},
+				'softkeys'	:	{
+					'width'	:	'320px',
+					'height':	'38px',
+					'left'	:	'0px',
+					'top'	:	'0px',
+					'position':	'relative'
+				},
+				'softkeysImg' : {
+					'width'	:	"50%",
+					'height':	"100%"
+				}
+			}
+		},
+		'landscape'	:	{
+			'style'	:	{
+				'layout'	:	{
+					'backgroundImage'	: 'url(preview/images/device/320x240/Landscape.png)',
+					'width'				: '680px',
+					'height'			: '472px'
+					},
+				'display':	{
+					'width'		:	'240px',
+					'height'	:	'320px',
+					'paddingTop':	'76px',
+					'marginLeft': 	'223px'				
+					},
+				'widget':	{
+					'width'		:	240,
+					'height'	:	320,
+					'float'		: 	'left'
+					},
+				'menu'	:	{
+					'width'		:	240,
+					'height'	:	30,
+					'float'		: 	'right',
+					'optionKeysheight'	:	24
+					},
+				'softkeys'	:	{
+					'width'	:	'30px',
+					'height':	'320px',
+					'left'	:	'150px',
+					'top'	:	'-330px',
+					'position':	'relative'
+				},	
+				'softkeysImg' : {
+					'width'	:	"100%",
+					'height':	"50%"
+				}
+			}
+		}
+	},
+
+	'360x640'	: 	{
+		'default'			:	'portrait',
+		'orientation'		:	true,
+		'homeScreenSupport'	:	true,
+		'fontSize'			:	'12px',
+		'portrait'	:	{
+			'style'	:	{
+				'layout'	:	{
+					'backgroundImage'	: 'url(preview/images/device/360x640/Portrait.png)',
+					'width'				: '678px',
+					'height'			: '838px'
+					},
+				'display':	{
+					'width'		:	'360px',
+					'height'	:	'640px',
+					'paddingTop':	'89px',
+					'marginLeft': 	'158px'				
+					},
+				'widget':	{
+					'width'		:	360,
+					'height'	:	640,
+					'float'		: 	'left'
+					},
+				'menu'	:	{
+					'width'		:	360,
+					'height'	:	30,
+					'float'		: 	'right',
+					'optionKeysheight'	:	24
+					},
+				'softkeys'	:	{
+					'width'	:	'360px',
+					'height':	'50px',
+					'left'	:	'0px',
+					'top'	:	'0px',
+					'position':	'relative',
+					'marginLeft' : '159px'
+				},
+				'softkeysImg' : {
+					'width'	:	"50%",
+					'height':	"100%"
+				},
+				'homeScreenDisplay':	{
+					'width'		:	'306px',
+					'height'	:	'76px'
+				}
+			}
+		},
+		'landscape'	:	{
+			'style'	:	{
+				'layout'	:	{
+					'backgroundImage'	: 'url(preview/images/device/360x640/Landscape.png)',
+					'width'				: '1054px',
+					'height'			: '572px'
+					},
+				'display':	{
+					'width'		:	'640px',
+					'height'	:	'360px',
+					'paddingTop':	'104px',
+					'marginLeft': 	'206px'				
+					},
+				'widget':	{
+					'width'		:	640,
+					'height'	:	360,
+					'float'		: 	'left'
+					},
+				'menu'	:	{
+					'width'		:	640,
+					'height'	:	30,
+					'float'		: 	'right',
+					'optionKeysheight'	:	24
+					},
+				'softkeys'	:	{
+					'width'	:	'50px',
+					'height':	'360px',
+					'left'	:	'350px',
+					'top'	:	'-370px',
+					'position':	'relative',
+					'marginLeft': 	'auto'	
+				},	
+				'softkeysImg' : {
+					'width'	:	"100%",
+					'height':	"50%"
+				},
+				'homeScreenDisplay':	{
+					'width'		:	'306px',
+					'height'	:	'76px'
+				}
+			}
+		}
+	},
+
+	'800x352'	: 	{
+		'default'			:	'landscape',
+		'orientation'		:	false,
+		'homeScreenSupport'	:	false,
+		'fontSize'			:	'12px',
+		'landscape'	:	{
+			'style'	:	{
+				'layout'	:	{
+					'backgroundImage'	: 'url(preview/images/device/800x352/Landscape.png)',
+					'width'				: '1180px',
+					'height'			: '572px'
+					},
+				'display':	{
+					'width'		:	'800px',
+					'height'	:	'352px',
+					'paddingTop':	'108px',
+					'marginLeft': 	'190px'				
+					},
+				'widget':	{
+					'width'		:	800,
+					'height'	:	352,
+					'float'		: 	'left'
+					},
+				'menu'	:	{
+					'width'		:	800,
+					'height'	:	30,
+					'float'		: 	'right',
+					'optionKeysheight'	:	24
+					},
+				'softkeys'	:	{
+					'width'	:	'50px',
+					'height':	'352px',
+					'left'	:	'432px',
+					'top'	:	'-364px',
+					'position':	'relative',
+					'marginLeft': 	'auto'	
+				},	
+				'softkeysImg' : {
+					'width'	:	"100%",
+					'height':	"50%"
+				}
+			}
+		}
+	}
+
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/preview/script/xml2json.js	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,172 @@
+/*
+xml2json v 1.1
+copyright 2005-2007 Thomas Frank
+
+This program is free software under the terms of the 
+GNU General Public License version 2 as published by the Free 
+Software Foundation. It is distributed without any warranty.
+*/
+
+var xml2json={ 
+	parser:function(xmlcode,ignoretags,debug){
+		if(!ignoretags){ignoretags=""};
+		xmlcode=xmlcode.replace(/\s*\/>/g,'/>');
+		xmlcode=xmlcode.replace(/<\?[^>]*>/g,"").replace(/<\![^>]*>/g,"");
+		if (!ignoretags.sort){ignoretags=ignoretags.split(",")};
+		var x=this.no_fast_endings(xmlcode);
+		x=this.attris_to_tags(x);
+		x=escape(x);
+		x=x.split("%3C").join("<").split("%3E").join(">").split("%3D").join("=").split("%22").join("\"");
+		for (var i=0;i<ignoretags.length;i++){
+			x=x.replace(new RegExp("<"+ignoretags[i]+">","g"),"*$**"+ignoretags[i]+"**$*");
+			x=x.replace(new RegExp("</"+ignoretags[i]+">","g"),"*$***"+ignoretags[i]+"**$*")
+		};
+		x='<JSONTAGWRAPPER>'+x+'</JSONTAGWRAPPER>';
+		this.xmlobject={};
+		var y=this.xml_to_object(x).jsontagwrapper;
+		if(debug){y=this.show_json_structure(y,debug)};
+		return y
+	},
+	xml_to_object:function(xmlcode){
+		var x=xmlcode.replace(/<\//g,"§");
+		x=x.split("<");
+		var y=[];
+		var level=0;
+		var opentags=[];
+		for (var i=1;i<x.length;i++){
+			var tagname=x[i].split(">")[0];
+			opentags.push(tagname);
+			level++
+			y.push(level+"<"+x[i].split("§")[0]);
+			while(x[i].indexOf("§"+opentags[opentags.length-1]+">")>=0){level--;opentags.pop()}
+		};
+		var oldniva=-1;
+		var objname="this.xmlobject";
+		for (var i=0;i<y.length;i++){
+			var preeval="";
+			var niva=y[i].split("<")[0];
+			var tagnamn=y[i].split("<")[1].split(">")[0];
+			tagnamn=tagnamn.toLowerCase();
+			var rest=y[i].split(">")[1];
+			if(niva<=oldniva){
+				var tabort=oldniva-niva+1;
+				for (var j=0;j<tabort;j++){objname=objname.substring(0,objname.lastIndexOf("."))}
+			};
+			objname+="."+tagnamn;
+			var pobject=objname.substring(0,objname.lastIndexOf("."));
+			if (eval("typeof "+pobject) != "object"){preeval+=pobject+"={value:"+pobject+"};\n"};
+			var objlast=objname.substring(objname.lastIndexOf(".")+1);
+			var already=false;
+			for (k in eval(pobject)){if(k==objlast){already=true}};
+			var onlywhites=true;
+			for(var s=0;s<rest.length;s+=3){
+				if(rest.charAt(s)!="%"){onlywhites=false}
+			};
+			if (rest!="" && !onlywhites){
+				if(rest/1!=rest){
+					rest="'"+rest.replace(/\'/g,"\\'")+"'";
+					rest=rest.replace(/\*\$\*\*\*/g,"</");
+					rest=rest.replace(/\*\$\*\*/g,"<");
+					rest=rest.replace(/\*\*\$\*/g,">")
+				}
+			} 
+			else {rest="{}"};
+			if(rest.charAt(0)=="'"){rest='unescape('+rest+')'};
+			if (already && !eval(objname+".sort")){preeval+=objname+"=["+objname+"];\n"};
+			var before="=";after="";
+			if (already){before=".push(";after=")"};
+			var toeval=preeval+objname+before+rest+after;
+			eval(toeval);
+			if(eval(objname+".sort")){objname+="["+eval(objname+".length-1")+"]"};
+			oldniva=niva
+		};
+		return this.xmlobject
+	},
+	show_json_structure:function(obj,debug,l){
+		var x='';
+		if (obj.sort){x+="[\n"} else {x+="{\n"};
+		for (var i in obj){
+			if (!obj.sort){x+=i+":"};
+			if (typeof obj[i] == "object"){
+				x+=this.show_json_structure(obj[i],false,1)
+			}
+			else {
+				if(typeof obj[i]=="function"){
+					var v=obj[i]+"";
+					//v=v.replace(/\t/g,"");
+					x+=v
+				}
+				else if(typeof obj[i]!="string"){x+=obj[i]+",\n"}
+				else {x+="'"+obj[i].replace(/\'/g,"\\'").replace(/\n/g,"\\n").replace(/\t/g,"\\t").replace(/\r/g,"\\r")+"',\n"}
+			}
+		};
+		if (obj.sort){x+="],\n"} else {x+="},\n"};
+		if (!l){
+			x=x.substring(0,x.lastIndexOf(","));
+			x=x.replace(new RegExp(",\n}","g"),"\n}");
+			x=x.replace(new RegExp(",\n]","g"),"\n]");
+			var y=x.split("\n");x="";
+			var lvl=0;
+			for (var i=0;i<y.length;i++){
+				if(y[i].indexOf("}")>=0 || y[i].indexOf("]")>=0){lvl--};
+				tabs="";for(var j=0;j<lvl;j++){tabs+="\t"};
+				x+=tabs+y[i]+"\n";
+				if(y[i].indexOf("{")>=0 || y[i].indexOf("[")>=0){lvl++}
+			};
+			if(debug=="html"){
+				x=x.replace(/</g,"&lt;").replace(/>/g,"&gt;");
+				x=x.replace(/\n/g,"<BR>").replace(/\t/g,"&nbsp;&nbsp;&nbsp;&nbsp;")
+			};
+			if (debug=="compact"){x=x.replace(/\n/g,"").replace(/\t/g,"")}
+		};
+		return x
+	},
+	no_fast_endings:function(x){
+		x=x.split("/>");
+		for (var i=1;i<x.length;i++){
+			var t=x[i-1].substring(x[i-1].lastIndexOf("<")+1).split(" ")[0];
+			x[i]="></"+t+">"+x[i]
+		}	;
+		x=x.join("");
+		return x
+	},
+	attris_to_tags: function(x){
+		var d=' ="\''.split("");
+		x=x.split(">");
+		for (var i=0;i<x.length;i++){
+			var temp=x[i].split("<");
+			for (var r=0;r<4;r++){temp[0]=temp[0].replace(new RegExp(d[r],"g"),"_jsonconvtemp"+r+"_")};
+			if(temp[1]){
+				temp[1]=temp[1].replace(/'/g,'"');
+				temp[1]=temp[1].split('"');
+				for (var j=1;j<temp[1].length;j+=2){
+					for (var r=0;r<4;r++){temp[1][j]=temp[1][j].replace(new RegExp(d[r],"g"),"_jsonconvtemp"+r+"_")}
+				};
+				temp[1]=temp[1].join('"')
+			};
+			x[i]=temp.join("<")
+		};
+		x=x.join(">");
+		x=x.replace(/ ([^=]*)=([^ |>]*)/g,"><$1>$2</$1");
+		x=x.replace(/>"/g,">").replace(/"</g,"<");
+		for (var r=0;r<4;r++){x=x.replace(new RegExp("_jsonconvtemp"+r+"_","g"),d[r])}	;
+		return x
+	}
+};
+
+
+if(!Array.prototype.push){
+	Array.prototype.push=function(x){
+		this[this.length]=x;
+		return true
+	}
+};
+
+if (!Array.prototype.pop){
+	Array.prototype.pop=function(){
+  		var response = this[this.length-1];
+  		this.length--;
+  		return response
+	}
+};
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/preview/wrt_preview.html	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,218 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<title>Nokia WRT Preview</title>
+	<!-- jQuery-ui Begins -->
+		<link type="text/css" rel="stylesheet"  href="preview/script/jquery-ui/css/ui-darkness/ui.all.css"/>	
+		<script type="text/javascript" src="preview/script/jquery-ui/js/jquery-1.2.6.min.js"></script>
+		<script type="text/javascript" src="preview/script/jquery-ui/js/jquery-ui-1.6.custom.min.js"></script>
+	<!-- jQuery-ui Ends -->	
+	<script type="text/javascript" language="JavaScript" src="preview/script/xml2json.js"></script>
+	<script type="text/javascript" language="JavaScript" src="preview/script/nokia.js"></script>
+	<script type="text/javascript" language="JavaScript" src="preview/script/resolution.js"></script>
+	<link type="text/css" rel="stylesheet"  href="preview/css/style.css"/>
+</head>
+<body>
+	<div id="preview-ui-top">
+		<div id="DeviceDisplayLayout" class="hide">
+			<div id="DisplaySFKWrapper">
+				<div id="DisplayArea">
+					<div id="IconArea"></div>
+					<div id="WidgetArea">
+						<div id="iframeMask" class="hide"></div>
+						<iframe src=""></iframe>
+					</div>
+					<div id="MenuItemsArea" class="scroll-pane">
+						<ul>
+							<li><a href="javascript:void(0);">Exit</a></li>
+						</ul>
+					</div>
+					<div id="SoftKeysArea">
+						<ul>
+							<li id="LskLabel"><a href="javascript:void(0);">Options</a></li>
+							<li id="RskLabel"><a href="javascript:void(0);">Exit</a></li>
+						</ul>
+					</div>
+				</div>
+				<div id="SoftKeys">
+					<a href="javascript:void(0);"><img src="preview/images/TransperantImage.png" name="LskArea" border="0" id="LskArea"/></a><a href="javascript:void(0);"><img src="preview/images/TransperantImage.png" name="RskArea" border="0" id="RskArea"/></a> </div>
+				</div>
+			</div>
+		<div id="Dialog" title="Notification window"></div>
+<div id="PreferencesTab" class="hide">
+	<div id="tabs">
+		<ul>
+			<li><a href="#tabs-1">Preferences</a></li>
+			<li><a href="#tabs-2">Event Triggers</a></li>
+		</ul>
+		<div id="tabs-1">
+			<div id="settings-view">
+		<table width="100%" cellpadding="0" cellspacing="0">
+			<tr>
+				<th>
+					Resolution
+				</th>
+				<td>
+					<select id="resOptions">
+						<option selected="true" value="http://www.forum.nokia.com/devices/matrix_240x320_1.html">240x320</option>
+						<option value="http://www.forum.nokia.com/devices/matrix_320x240_1.html">320x240</option>
+						<option value="http://www.forum.nokia.com/devices/matrix_360x640_1.html">360x640</option>
+						<option value="http://www.forum.nokia.com/devices/E90_Communicator">800x352</option>
+					</select>&nbsp; 
+					<a class="link" target="_blank" href="http://www.forum.nokia.com/devices/matrix_240x320_1.html" id="resSupportLink">Device matrix featuring this resolution</a>
+					<span id="dwDeviceHelp" class="hide" >See WRT Help for device specifications</span>
+				</td>
+			</tr>
+			<tr>
+				<th>
+					Orientation					
+				</th>
+				<td>
+					<div id="Orientation_Controls" class="hide">
+						<label><input type="radio" name="input_orientation" id="input_portrait" value="portrait"/> Portrait</label>	
+						<label><input type="radio" name="input_orientation" id="input_landscape" value="landscape"/> Landscape</label>	
+					</div>
+					<div id="Orientation_Info" class="hide">
+					</div>
+				</td>
+			</tr>
+			<tr>
+				<th>
+					WRT Version
+				</th>
+				<td>
+					<label><input type="radio" name="wrt_version" id="wrt_version_1_0" value="WRT 1.0"/> WRT 1.0</label>	
+					<label><input type="radio" name="wrt_version" id="wrt_version_1_1" value="WRT 1.1"/> WRT 1.1</label>	
+				</td>
+			</tr>
+			<tr>
+				<th>
+					Home Screen view
+				</th>
+				<td>
+					<div id="HS_Control_Info">
+						Hello
+					</div>
+				</td>
+			</tr>
+		</table>
+		</div>
+		
+			<div id="mini-view-info" class="hide">
+				<div class="ui-panel">
+					<a class="ui-button" id="mini-view-back">Back</a>
+				</div>
+				<table cellpadding='0' cellspacing='0' width="100%">
+					<tr>
+						<th>To enable Mini view support for HomeScreen widget </th>
+					</tr>
+					<tr>
+						<td>
+							Add this line in Info.plist file
+							<code>&lt;key&gt;MiniViewEnabled&lt;/key&gt;<br/>&lt;true/&gt;</code>
+							and optionally add the following to the MainHTML file
+							<code>&lt;div id="miniView"&gt; &lt;--  Define your Home Screen view here  --&gt; &lt;/div&gt;</code><br/>
+							See Web Developer's Library for <a class="link" href="http://library.forum.nokia.com/index.jsp?topic=/Web_Developers_Library/GUID-63F4E17E-8895-4054-82AD-762B90610B30.html" target="_blank">more details</a>
+						</td>
+					</tr>
+				</table>
+			</div>
+		
+		
+		</div>
+		<div id="tabs-2">
+			
+			<div id="event-icons">
+				<div id="event-battery"></div>
+				<div id="event-messaging"></div>
+				<div id="event-memory"></div>
+			</div>
+
+			<div id="event-battery-info" class="hide">
+				<div class="ui-panel">
+					<a class="ui-button" id="event-battery-back">Back</a>
+				</div>
+				<table cellpadding='0' cellspacing='0' width="100%">
+					<tr>
+						<th colspan="2">Battery Triggers</th>
+					</tr>
+					<tr>
+						<td>Charging status</td>
+						<td>
+							<a class="ui-button-fixed" id="connect-charger">Connect charger</a>
+							<a class="ui-button-fixed" id="disconnect-charger">Disconnect charger</a>
+						</td>
+					</tr>
+					<tr>
+						<td>Battery Strength</td>
+						<td>
+							<div id="slider"></div>
+							<div id="slider-value-panel"><span>0</span></div>
+							<div><a class="ui-button-fixed" id="update-batter-strength">Update</a></div>
+						</td>
+					</tr>
+				</table>
+			</div>
+
+			<div id="event-messaging-info" class="hide">
+				<div class="ui-panel">
+					<a class="ui-button" id="event-messaging-back">Back</a>
+				</div>
+				<table cellpadding='0' cellspacing='0' width="100%">
+					<tr>
+						<th colspan="2">Message Triggers</th>
+					</tr>
+					<tr>
+						<td>New message</td>
+						<td>
+							<a class="ui-button-fixed" id="send-sms">Trigger new SMS</a>
+							<a class="ui-button-fixed" id="send-mms">Trigger new MMS</a>
+						</td>
+					</tr>
+				</table>
+			</div>
+
+			<div id="event-memory-info" class="hide">
+				<div class="ui-panel">
+					<a class="ui-button" id="event-memory-back">Back</a>
+				</div>
+				<table cellpadding='0' cellspacing='0' width="100%">
+					<tr>
+						<th colspan="2">Memory Triggers</th>
+					</tr>
+					<tr>
+						<td>Memory Card</td>
+						<td>
+							<a class="ui-button-fixed" id="connect-memory-card">Connect</a>
+							<a class="ui-button-fixed" id="disconnect-memory-card">Disconnect</a>
+						</td>
+					</tr>
+				</table>
+			</div>
+			
+		</div>
+	</div>
+</div>
+	</div>
+	<div id="preview-ui-bottom">
+		<div id="preview-ui-bottom-header">
+			<div>Console window</div>
+			<span class="open" id="Console-Toggle-Button"></span>
+			<span id="Console-Clear-Button"></span>
+		</div>
+		<div style="clear:left;"></div>
+		<div id="preview-ui-bottom-body">
+		</div>
+	</div>
+	<div id="PreferencesBtn" class="hide"></div>
+	<div id="orientationIcon"></div>
+	<div id="loaderDiv"></div>
+	<div id="NotificationDiv" class="hide">
+		<p>NOKIA WRT Simulation may not work properly on this browser, <br/>Firefox is recommended for widget preview and debugging.  <br/><br/><strong>Continue?</strong></p>
+	</div>
+	<div id="BrowserNotificationBar" class="hide">
+		<p><a></a>NOKIA WRT Simulation may not work properly on this browser, Firefox is recommended for widget preview and debugging</p>
+	</div>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/src/org/symbian/tools/wrttools/previewer/Activator.java	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,103 @@
+/**
+ * Copyright (c) 2009 Symbian Foundation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the License "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Symbian Foundation - initial contribution.
+ * Contributors:
+ * Description:
+ * Overview:
+ * Details:
+ * Platforms/Drives/Compatibility:
+ * Assumptions/Requirement/Pre-requisites:
+ * Failures and causes:
+ */
+package org.symbian.tools.wrttools.previewer;
+
+import org.eclipse.core.net.proxy.IProxyService;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "org.symbian.tools.wrttools.previewer";
+
+	// The shared instance
+	private static Activator plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	@Override
+	protected void initializeImageRegistry(ImageRegistry reg) {
+		addImage(reg, Images.GREEN_SYNC);
+		addImage(reg, Images.RED_SYNC);
+		addImage(reg, Images.YELLOW_SYNC);
+	}
+	
+	private void addImage(ImageRegistry reg, String path) {
+		ImageDescriptor imageDescriptor = imageDescriptorFromPlugin(PLUGIN_ID, path);
+		reg.put(path, imageDescriptor);
+	}
+	
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+	
+	public static void log(Exception e) {
+		log(null, e);
+	}
+
+	public static void log(String message, Exception e) {
+		IStatus status = new Status(IStatus.ERROR, PLUGIN_ID, message, e);
+		getDefault().getLog().log(status);
+	}
+
+	public static ImageDescriptor getImageDescriptor(String key) {
+		return getDefault().getImageRegistry().getDescriptor(key);
+	}
+
+	public static IProxyService getProxyService() {
+        IProxyService service = (IProxyService) getDefault().getBundle().getBundleContext().getServiceReference(IProxyService.class.getName());
+		return service;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/src/org/symbian/tools/wrttools/previewer/IWrtEditingPreferences.java	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,5 @@
+package org.symbian.tools.wrttools.previewer;
+
+public interface IWrtEditingPreferences {
+	String PREF_AUTO_REFRESH = "preview.autorefresh";
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/src/org/symbian/tools/wrttools/previewer/Images.java	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,7 @@
+package org.symbian.tools.wrttools.previewer;
+
+public interface Images {
+	String RED_SYNC = "/icons/obj16/refresh_red.gif";
+	String YELLOW_SYNC = "/icons/obj16/refresh.gif";
+	String GREEN_SYNC = "/icons/obj16/refresh_green.gif";
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/src/org/symbian/tools/wrttools/previewer/WrtRootPreferences.java	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,40 @@
+/**
+ * Copyright (c) 2009 Symbian Foundation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the License "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Symbian Foundation - initial contribution.
+ * Contributors:
+ * Description:
+ * Overview:
+ * Details:
+ * Platforms/Drives/Compatibility:
+ * Assumptions/Requirement/Pre-requisites:
+ * Failures and causes:
+ */
+
+package org.symbian.tools.wrttools.previewer;
+
+import org.eclipse.jface.preference.FieldEditorPreferencePage;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+public class WrtRootPreferences
+	extends FieldEditorPreferencePage
+	implements IWorkbenchPreferencePage {
+
+	public WrtRootPreferences() {
+		super(GRID);
+	}
+	
+	public void createFieldEditors() {
+	
+	}
+
+	public void init(IWorkbench workbench) {
+	}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/src/org/symbian/tools/wrttools/previewer/preferences/WrtEditingPreferencePage.java	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,81 @@
+package org.symbian.tools.wrttools.previewer.preferences;
+
+import org.eclipse.jface.dialogs.MessageDialogWithToggle;
+import org.eclipse.jface.preference.FieldEditorPreferencePage;
+import org.eclipse.jface.preference.RadioGroupFieldEditor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+import org.symbian.tools.wrttools.previewer.Activator;
+import org.symbian.tools.wrttools.previewer.IWrtEditingPreferences;
+
+/**
+ * This class represents a preference page that
+ * is contributed to the Preferences dialog. By 
+ * subclassing <samp>FieldEditorPreferencePage</samp>, we
+ * can use the field support built into JFace that allows
+ * us to create a page that is small and knows how to 
+ * save, restore and apply itself.
+ * <p>
+ * This page is used to modify preferences only. They
+ * are stored in the preference store that belongs to
+ * the main plug-in class. That way, preferences can
+ * be accessed directly via the preference store.
+ */
+
+public class WrtEditingPreferencePage
+	extends FieldEditorPreferencePage
+	implements IWorkbenchPreferencePage {
+
+	private RadioGroupFieldEditor enableAutorefresh;
+
+	public WrtEditingPreferencePage() {
+		super(GRID);
+		setPreferenceStore(Activator.getDefault().getPreferenceStore());
+	}
+	
+	/**
+	 * Creates the field editors. Field editors are abstractions of
+	 * the common GUI blocks needed to manipulate various types
+	 * of preferences. Each field editor knows how to save and
+	 * restore itself.
+	 */
+	public void createFieldEditors() {
+        Composite projectComposite = new Composite(getFieldEditorParent(), SWT.NONE);
+        projectComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+        projectComposite.setFont(getFieldEditorParent().getFont());
+
+		String[][] namesAndValues = {
+				{ "Enable", MessageDialogWithToggle.ALWAYS },
+				{ "Disable", MessageDialogWithToggle.NEVER },
+				{ "Prompt", MessageDialogWithToggle.PROMPT } };
+		enableAutorefresh = new RadioGroupFieldEditor(
+				IWrtEditingPreferences.PREF_AUTO_REFRESH,
+				"Preview autorefresh for new WRT projects",
+				namesAndValues.length, namesAndValues, projectComposite, true);
+		enableAutorefresh.setPreferenceStore(getPreferenceStore());
+		enableAutorefresh.setPage(this);
+		enableAutorefresh.load();
+        addField(enableAutorefresh);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
+	 */
+	public void init(IWorkbench workbench) {
+	}
+
+//	@Override
+//	protected void performDefaults() {
+//		enableAutorefresh.loadDefault();
+//		super.performDefaults();
+//	}
+//	
+//	@Override
+//	public boolean performOk() {
+//		enableAutorefresh.store();
+//		return super.performOk();
+//	}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/src/org/symbian/tools/wrttools/previewer/preview/PreviewPage.java	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,297 @@
+package org.symbian.tools.wrttools.previewer.preview;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.Collection;
+
+import org.eclipse.core.net.proxy.IProxyData;
+import org.eclipse.core.net.proxy.IProxyService;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.browser.Browser;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.ui.actions.ActionFactory;
+import org.eclipse.ui.part.IPageBookViewPage;
+import org.eclipse.ui.part.IPageSite;
+import org.eclipse.ui.part.Page;
+import org.mozilla.interfaces.nsIPrefBranch;
+import org.mozilla.interfaces.nsIServiceManager;
+import org.mozilla.xpcom.Mozilla;
+import org.osgi.framework.Bundle;
+import org.symbian.tools.wrttools.previewer.Activator;
+import org.symbian.tools.wrttools.previewer.Images;
+
+public class PreviewPage extends Page implements IPageBookViewPage, ISelectionProvider {
+	private static final String XUL_RUNNER_PATH_PARAMETER = "org.eclipse.swt.browser.XULRunnerPath";
+	private nsIPrefBranch mozillaPrefs;
+
+	private final IAction refreshAction = new Action("Refresh") {
+		public void run() {
+			refresh();
+		};
+	};
+	private final IAction toggleRefresh = new Action("Toggle Refresh", IAction.AS_RADIO_BUTTON) {
+		public void run() {
+			toggleRefresh();
+		};
+	};
+
+	private final IProject project;
+	private Browser browser;
+	private boolean toggleState = true;
+	private final PreviewView previewView;
+	private boolean needsRefresh = false;
+
+	public PreviewPage(IProject project, PreviewView previewView) {
+		this.project = project;
+		this.previewView = previewView;
+	}
+
+	protected void toggleRefresh() {
+		toggleState = !toggleState;
+		toggleRefresh.setChecked(toggleState);
+		previewView.setProjectAutorefresh(project, toggleState);
+		toggleRefresh.setToolTipText(getToggleActionTooltip());
+		if (toggleState && needsRefresh) {
+			refresh();
+		}
+	}
+
+	private synchronized void initMozilla() {
+		if (System.getProperty(XUL_RUNNER_PATH_PARAMETER) == null) {
+			Bundle bundle = Platform.getBundle("org.mozilla.xulrunner"); //$NON-NLS-1$
+			if (bundle != null) {
+				URL resourceUrl = bundle.getResource("xulrunner"); //$NON-NLS-1$
+				if (resourceUrl != null) {
+					try {
+						URL fileUrl = FileLocator.toFileURL(resourceUrl);
+						File file = new File(fileUrl.toURI());
+						System.setProperty(XUL_RUNNER_PATH_PARAMETER, file
+								.getAbsolutePath()); //$NON-NLS-1$
+					} catch (IOException e) {
+						// log the exception
+					} catch (URISyntaxException e) {
+						// log the exception
+					}
+				}
+			}
+		}
+	}
+
+	
+	@Override
+	public void createControl(Composite parent) {
+		initMozilla();
+		browser = new Browser(parent, SWT.MOZILLA);
+		bypassSameOriginPolicy();
+		applyProxySettings();
+		browser.setUrl(getURL());
+	}
+
+	private String getURL() {
+		return project.getFile("wrt_preview_frame.html").getLocationURI().toASCIIString();
+	}
+
+
+	@Override
+	public Control getControl() {
+		return browser;
+	}
+
+	@Override
+	public void setFocus() {
+		browser.setFocus();
+	}
+	
+	private boolean refreshScheduled = false;
+
+	public synchronized void process(Collection<IFile> files) {
+		if (!refreshScheduled && needsRefresh(files)) {
+			asyncExec(new Runnable() {
+				@Override
+				public void run() {
+					if (toggleState) {
+						refresh();
+					} else {
+						needsRefresh = true;
+						refreshAction.setImageDescriptor(Activator.getImageDescriptor(Images.RED_SYNC));
+						refreshAction.setToolTipText("Refresh the preview browser (there are updated files)");
+					}
+				}
+			});
+			refreshScheduled = true;
+		}
+	}
+
+	private void asyncExec(Runnable runnable) {
+		getControl().getDisplay().asyncExec(runnable);
+	}
+
+	private boolean needsRefresh(Collection<IFile> files) {
+		for (IFile iFile : files) {
+			if (iFile.getProject().equals(project)) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	protected synchronized void refresh() {
+		try {
+			final Control focusControl = browser.getDisplay().getFocusControl();
+			browser.refresh();
+			refreshAction.setImageDescriptor(Activator
+					.getImageDescriptor(Images.GREEN_SYNC));
+			asyncExec(new Runnable() {
+				@Override
+				public void run() {
+					focusControl.setFocus();
+				}
+			});
+			refreshAction.setToolTipText("Refresh the preview browser");
+			needsRefresh = false;
+		} finally {
+			refreshScheduled = false;
+		}
+	}
+
+	@Override
+	public void init(IPageSite pageSite) {
+		super.init(pageSite);
+		IToolBarManager toolBar = pageSite.getActionBars().getToolBarManager();
+		refreshAction.setImageDescriptor(Activator.getImageDescriptor(Images.GREEN_SYNC));
+		refreshAction.setToolTipText("Refresh the preview browser");
+		toolBar.add(refreshAction);
+		
+		toggleState = previewView.getProjectAutorefresh(project);
+		
+		toggleRefresh.setImageDescriptor(Activator.getImageDescriptor(Images.YELLOW_SYNC));
+		toggleRefresh.setToolTipText(getToggleActionTooltip());
+		toggleRefresh.setChecked(toggleState);
+		toolBar.add(toggleRefresh);
+		
+		pageSite.getActionBars().setGlobalActionHandler(ActionFactory.REFRESH.getId(), refreshAction);
+		getSite().setSelectionProvider(this);
+	}
+
+	private String getToggleActionTooltip() {
+		return toggleState ? "Disable preview autorefresh" : "Enable preview autorefresh";
+	}
+
+	@Override
+	public void addSelectionChangedListener(ISelectionChangedListener listener) {
+		// Do nothing
+	}
+
+	@Override
+	public ISelection getSelection() {
+		return new StructuredSelection(project);
+	}
+
+	@Override
+	public void removeSelectionChangedListener(
+			ISelectionChangedListener listener) {
+		// Do nothing
+	}
+
+	@Override
+	public void setSelection(ISelection selection) {
+		// Do nothing
+	}
+	
+	private void applyProxySettings() {
+		
+		IProxyService px = Activator.getProxyService();
+		if(px != null){			 
+			boolean proxyEnabled = px.isProxiesEnabled();
+
+			boolean systemProxy = px.isSystemProxiesEnabled();
+			if( proxyEnabled && !systemProxy){
+				IProxyData pd = px.getProxyData(IProxyData.HTTP_PROXY_TYPE);
+				if (pd !=null &&mozillaPrefs != null) {				
+					String host= pd.getHost();
+					int port = pd.getPort();
+					if(host !=null && port != -1){
+						mozillaPrefs.setIntPref("network.proxy.type", 1);
+						mozillaPrefs.setCharPref("network.proxy.http", host);
+						mozillaPrefs.setIntPref("network.proxy.http_port", port);
+					}
+				}
+			 }
+		}
+		else{
+			 Exception e= new Exception();
+			 Activator.log("Proxy service returned null", e);
+		 }
+	}
+	
+	private void bypassSameOriginPolicy() {
+
+		try{
+			nsIServiceManager servMgr = null;
+			try {
+				servMgr = Mozilla.getInstance().getServiceManager();
+				if (servMgr == null) return;
+			} catch (Exception x) {
+				// known to throw NullPointException on Mac OS when you're not using 
+				// Mozilla. We don't want to pollute the error log with this
+				return;
+			}
+			
+			mozillaPrefs = (nsIPrefBranch) servMgr.getServiceByContractID(
+											"@mozilla.org/preferences-service;1", 
+											nsIPrefBranch.NS_IPREFBRANCH_IID );		
+
+			mozillaPrefs.setBoolPref("signed.applets.codebase_principal_support", 1);
+
+			mozillaPrefs.setCharPref("capability.policy.default.XMLDocument.getElementsByTagName", "allAccess");
+			mozillaPrefs.setCharPref("capability.policy.default.CDATASection.nodeValue", "allAccess");
+
+			mozillaPrefs.setCharPref("capability.policy.default.HTMLCollection.length", "allAccess");
+			mozillaPrefs.setCharPref("capability.policy.default.HTMLCollection.item", "allAccess");
+
+			mozillaPrefs.setCharPref("capability.policy.default.*.nodeValue", "allAccess");
+			mozillaPrefs.setCharPref("capability.policy.default.*.nodeType", "allAccess");
+			mozillaPrefs.setCharPref("capability.policy.default.*.nodeName", "allAccess");
+			mozillaPrefs.setCharPref("capability.policy.default.*.nextSibling", "allAccess");
+			mozillaPrefs.setCharPref("capability.policy.default.*.previousSibling", "allAccess");
+			mozillaPrefs.setCharPref("capability.policy.default.*.attributes", "allAccess");
+			mozillaPrefs.setCharPref("capability.policy.default.*.childNodes", "allAccess");
+			mozillaPrefs.setCharPref("capability.policy.default.*.firstChild", "allAccess");
+			mozillaPrefs.setCharPref("capability.policy.default.*.getAttribute", "allAccess");
+			mozillaPrefs.setCharPref("capability.policy.default.*.getElementsByTagName", "allAccess");
+			mozillaPrefs.setCharPref("capability.policy.default.*.lastChild", "allAccess");
+			mozillaPrefs.setCharPref("capability.policy.default.*.parentNode", "allAccess");
+			mozillaPrefs.setCharPref("capability.policy.default.*.tagName", "allAccess");
+
+			mozillaPrefs.setCharPref("capability.policy.default.XMLDocument.documentElement", "allAccess");
+			mozillaPrefs.setCharPref("capability.policy.default.XMLDocument.getElementsByTagName", "allAccess");
+			mozillaPrefs.setCharPref("capability.policy.default.XMLHttpRequest.channel", "allAccess");
+			mozillaPrefs.setCharPref("capability.policy.default.XMLHttpRequest.open", "allAccess");
+			mozillaPrefs.setCharPref("capability.policy.default.XMLHttpRequest.responseText", "allAccess");
+			mozillaPrefs.setCharPref("capability.policy.default.XMLHttpRequest.responseXML", "allAccess");
+			mozillaPrefs.setCharPref("capability.policy.default.XMLHttpRequest.send", "allAccess");
+			mozillaPrefs.setCharPref("capability.policy.default.XMLHttpRequest.setRequestHeader", "allAccess");
+			/* to over-ride the internet security dialog when preview browser tries to access local hard drive */
+			mozillaPrefs.setCharPref("capability.principal.codebase.p0.granted", "UniversalXPConnect  UniversalBrowserRead");
+			mozillaPrefs.setCharPref("capability.principal.codebase.p0.id", "file://");
+			mozillaPrefs.setBoolPref("security.fileuri.strict_origin_policy", 0);
+		} catch (Exception e) {
+			Activator.log("Error getting preferences", e);
+		}
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/src/org/symbian/tools/wrttools/previewer/preview/PreviewView.java	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,261 @@
+package org.symbian.tools.wrttools.previewer.preview;
+
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Map.Entry;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.MessageDialogWithToggle;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.part.IPage;
+import org.eclipse.ui.part.MessagePage;
+import org.eclipse.ui.part.PageBook;
+import org.eclipse.ui.part.PageBookView;
+import org.symbian.tools.wrttools.previewer.Activator;
+import org.symbian.tools.wrttools.previewer.IWrtEditingPreferences;
+
+public class PreviewView extends PageBookView {
+	private static final class ChangedResourcesCollector implements
+			IResourceDeltaVisitor {
+		public final Collection<IFile> files = new HashSet<IFile>();
+
+		@Override
+		public boolean visit(IResourceDelta delta) throws CoreException {
+			if (isRelevantResource(delta.getResource())) {
+				files.add((IFile) delta.getResource());
+			}
+			return true;
+		}
+	}
+
+	public static boolean isRelevantResource(IResource resource) {
+		return resource.getType() == IResource.FILE
+				&& !resource.getFullPath().segment(1).equalsIgnoreCase(
+						"preview");
+	}
+
+	private final IResourceChangeListener resourceListener = new IResourceChangeListener() {
+		@Override
+		public void resourceChanged(IResourceChangeEvent event) {
+			ChangedResourcesCollector visitor = new ChangedResourcesCollector();
+			try {
+				event.getDelta().accept(visitor);
+			} catch (CoreException e) {
+				Activator.log(e);
+			}
+			refreshPages(visitor.files);
+		}
+	};
+
+	private Map<IProject, PreviewPage> projectToPage = new HashMap<IProject, PreviewPage>();
+	private boolean preferencesLoaded = false;
+	private final Map<IProject, Boolean> autorefresh = new HashMap<IProject, Boolean>();
+
+	@Override
+	protected IPage createDefaultPage(PageBook book) {
+		MessagePage messagePage = new MessagePage();
+		messagePage.setMessage("Open an editor to preview WRT widget");
+		initPage(messagePage);
+		messagePage.createControl(book);
+		return messagePage;
+	}
+
+	@Override
+	public void createPartControl(Composite parent) {
+		super.createPartControl(parent);
+		ResourcesPlugin.getWorkspace().addResourceChangeListener(
+				resourceListener);
+	}
+
+	@Override
+	public void dispose() {
+		ResourcesPlugin.getWorkspace().removeResourceChangeListener(
+				resourceListener);
+		super.dispose();
+	}
+
+	@Override
+	protected PageRec doCreatePage(IWorkbenchPart part) {
+		// All checks we need were done in isImportant method
+		IResource resource = (IResource) ((IEditorPart) part).getEditorInput()
+				.getAdapter(IResource.class);
+
+		IProject project = resource.getProject();
+		PreviewPage page = projectToPage.get(project);
+
+		if (page == null) {
+			page = new PreviewPage(project, this);
+			initPage(page);
+			page.createControl(getPageBook());
+			projectToPage.put(project, page);
+		}
+
+		return new PageRec(part, page);
+	}
+
+	@Override
+	protected void doDestroyPage(IWorkbenchPart part, PageRec pageRecord) {
+		// We do not need to delete the page
+	}
+
+	@Override
+	protected IWorkbenchPart getBootstrapPart() {
+		IEditorPart activeEditor = getSite().getPage().getActiveEditor();
+		if (activeEditor != null) {
+			if (isImportant(activeEditor)) {
+				return activeEditor;
+			}
+		}
+		return null;
+	}
+
+	private boolean getDefaultAutorefresh(IProject project) {
+		IPreferenceStore preferenceStore = Activator.getDefault()
+				.getPreferenceStore();
+		String value = preferenceStore
+				.getString(IWrtEditingPreferences.PREF_AUTO_REFRESH);
+		if (value == null || value.trim().length() == 0 || MessageDialogWithToggle.PROMPT.equals(value)) {
+			return MessageDialogWithToggle
+					.openYesNoQuestion(
+							getSite().getShell(),
+							"WRT Preview",
+							"WRT IDE can refresh preview whenever any changes are made to project files. Refresh will always return the widget to initial page. Do you want to enable automatic refresh for your project?\nNote: you can toggle this setting for particular project on the preview toolbar.",
+							"Keep this setting for all new projects", false,
+							preferenceStore,
+							IWrtEditingPreferences.PREF_AUTO_REFRESH)
+					.getReturnCode() == IDialogConstants.YES_ID;
+		} else {
+			return MessageDialogWithToggle.ALWAYS.equals(value);
+		}
+	}
+
+	private File getPreferencesFile() {
+		return Activator.getDefault().getStateLocation().append(
+				"autorefreshState.xml").toFile();
+	}
+
+	public boolean getProjectAutorefresh(IProject project) {
+		synchronized (autorefresh) {
+			loadPreferences();
+			if (autorefresh.containsKey(project)) {
+				return autorefresh.get(project);
+			} else {
+				boolean value = getDefaultAutorefresh(project);
+				setProjectAutorefresh(project, value);
+				return value;
+			}
+		}
+	}
+
+	@Override
+	protected boolean isImportant(IWorkbenchPart part) {
+		if (part instanceof IEditorPart) {
+			IResource resource = (IResource) ((IEditorPart) part)
+					.getEditorInput().getAdapter(IResource.class);
+			if (resource != null) {
+				return isWrtProject(resource.getProject());
+			}
+		}
+		return false;
+	}
+
+	private boolean isWrtProject(IProject project) {
+		return project.getFile("wrt_preview_frame.html").exists();
+	}
+
+	private void loadPreferences() {
+		synchronized (autorefresh) {
+			if (preferencesLoaded) {
+				return;
+			}
+			preferencesLoaded = true;
+			File preferencesFile = getPreferencesFile();
+			Properties properties = new Properties();
+			if (preferencesFile.exists()) {
+				InputStream inputStream = null;
+				try {
+					inputStream = new FileInputStream(preferencesFile);
+					properties.loadFromXML(inputStream);
+				} catch (IOException e) {
+					Activator.log(e);
+				} finally {
+					if (inputStream != null) {
+						try {
+							inputStream.close();
+						} catch (IOException e) {
+							Activator.log(e);
+						}
+					}
+				}
+				IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+				for (Entry<Object, Object> entry : properties.entrySet()) {
+					String projectName = entry.getKey().toString();
+					String value = entry.getValue().toString();
+					IProject project = root.getProject(projectName);
+					if (project.exists()) {
+						autorefresh.put(project, Boolean.valueOf(value));
+					}
+				}
+			}
+		}
+	}
+
+	protected void refreshPages(Collection<IFile> files) {
+		Collection<PreviewPage> values = projectToPage.values();
+		for (PreviewPage page : values) {
+			page.process(files);
+		}
+	}
+
+	public void setProjectAutorefresh(IProject project, boolean refresh) {
+		synchronized (autorefresh) {
+			autorefresh.put(project, refresh);
+			Properties properties = new Properties();
+			for (Entry<IProject, Boolean> entry : autorefresh.entrySet()) {
+				properties.setProperty(entry.getKey().getName(), entry
+						.getValue().toString());
+			}
+			File path = getPreferencesFile();
+			OutputStream outputStream = null;
+			try {
+				outputStream = new BufferedOutputStream(new FileOutputStream(
+						path));
+				properties.storeToXML(outputStream, null);
+			} catch (IOException e) {
+				Activator.log(e);
+			} finally {
+				if (outputStream != null) {
+					try {
+						outputStream.close();
+					} catch (IOException e) {
+						Activator.log(e);
+					}
+				}
+			}
+		}
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.previewer/wrt.xml	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,2847 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?mso-infoPathSolution PIVersion="1.0.0.0" href="http://www.aptana.com/forms/types.xsn" language="en-us" name="urn:schemas-microsoft-com:office:infopath:types:" productVersion="11.0.6357" solutionVersion="1.0.0.46" ?><?mso-application progid="InfoPath.Document"?>
+<javascript xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xd="http://schemas.microsoft.com/office/infopath/2003">
+
+  <class type="widget" superclass="Object" visibility="basic">
+	<description>The widget engine provides a set of system information (SystemInfo) API services. The SystemInfo Service API allows a widget to access a device's properties and to control certain device features. The API is implemented in a plug-in module and it is integrated into the WRT environment.
+					To use the SystemInfo APIs, each widget must load the plug-in module explicitly by defining the following HTML code in its main HTML document</description>
+	<browsers>
+			<browser platform="Nokia WRT" version="1.0+"/>
+	</browsers>
+	<constructors>
+		<constructor scope="instance">
+			<description>The widget object is a built-in JavaScript object in the widget engine. 
+			</description>
+			<browsers>
+				<browser platform="Nokia WRT" version="1.0+"/>
+			</browsers>
+				<parameters/>
+				<return-types>
+	          <return-type type="widget"/>
+	        </return-types>
+			</constructor>
+		</constructors>
+		 
+			<properties>
+				<property name="identifier" type="String" scope="" access="read" visibility="basic">
+				<description>This is a read-only property that returns an integer indicating the current battery level.
+							 The returned value is in the range of 0 to 100 as a percentage of the maximum battery level.
+				</description>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+"/>
+				</browsers>
+			</property>
+			
+			<property name="onshow" type="void" scope="" access="read-write" visibility="basic">
+				<description>The onshow property is an event handler for the event of when a widget is switching from the background to the foreground. In other words, when an opened widget gains focus, the assigned callback function will be called.
+              </description>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+"/>
+				</browsers>
+				<availability>
+					<specification name="Nokia WRT" version="1.0+"/>
+				</availability>
+			</property>
+			<property name="onhide" type="void" scope="" access="read-write" visibility="basic">
+				<description>The onhide property is an event handler for the event of when a widget is switching from the foreground to the background. In other words, when a running widget loses focus, the assigned callback function will be called.
+			</description>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+"/>
+				</browsers>
+				<availability>
+					<specification name="Nokia WRT" version="1.0+"/>
+				</availability>
+			</property>
+			
+			<property name="isrotationsupported" type="Boolean" scope="" access="read-write" visibility="basic">
+				<description>isrotationsupported is a read-only property that returns a Boolean value determining if the device supports landscape and portrait screen orientations.
+					If the value is true, the device supports both landscape and portrait screen orientations.
+				</description>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+"/>
+				</browsers>
+				<availability>
+					<specification name="Nokia WRT" version="ert 1.0+"/>
+				</availability>
+			</property>
+		</properties>
+		
+		<methods>
+		
+		<method name="openURL" scope="" visibility="basic">
+				<return-types>
+					<return-type type="void"/>
+				</return-types>
+				<description>The openURL method opens a specified link in the Web Browser for S60 in the stand-alone mode. The widget remains open but is sent to the background. </description>
+				<parameters>
+					<parameter name="url" type="String" usage="required">
+						<description>A compact string specifying a link to a resource to be opened. The URL string format is compliant with the RFC-1738 specification and must be encoded if it contains non-ASCII characters.</description>
+				</parameter>
+				</parameters>
+				<browsers>
+					<browser platform="Nokia WRT Webruntime" version="1.0+" />
+				</browsers>
+			</method>
+				<method name="setPreferenceForKey" scope="" visibility="basic">
+				<return-types>
+					<return-type type="void"/>
+				</return-types>
+				<description>The setPreferenceForKey method allows a key to be stored along with its associated preference. The arguments are like name and value pairs. The preference value for the key is stored persistently, so if the widget or device is restarted, the value is retained. However, the values stored by a widget are removed when a widget is uninstalled from the device. This includes the case when a widget is reinstalled; where the old widget is uninstalled, the new widget is installed.
+							An existing preference can be overwritten with a new value by simply calling the method with the same key and new value.
+				 </description>
+				 		 <parameters>
+					<parameter name="preference" type="String" usage="required">
+						<description>A short text string defined as the name of the preference to be stored.</description>
+					</parameter>
+					<parameter name="key" type="String" usage="required">
+						<description>A compact string specifying a link to a resource to be opened. The URL string format is compliant with the RFC-1738 specification and must be encoded if it contains non-ASCII characters.</description>
+					</parameter>
+				</parameters>
+				<browsers>
+					<browser platform="Nokia WRT Webruntime" version="1.0+" />
+				</browsers>
+			</method>
+			
+			<method name="preferenceForKey" scope="" visibility="basic">
+			<return-types>
+					<return-type type="String"/>
+				</return-types>
+				<description>The preferenceForKey method allows a previously stored preference to be restored.
+				 </description>
+				<parameters>
+					<parameter name="key" type="String" usage="required">
+						<description>A text string specifying the name that represents the preference to be restored.
+						</description>
+					</parameter>
+				</parameters>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+" />
+				</browsers>
+			</method>
+			
+			<method name="prepareForTransition" scope="" visibility="basic">
+				<return-types>
+					<return-type type="void"/>
+				</return-types>
+				<description>The widget's view is composed by HTML elements such as text display area, buttons, edit fields, and so on. The appearance of these HTML elements can be dynamically changed. For example, they can be shown or hidden dynamically using the HTML DOM style object to set the display property to "block" or "none" respectively. </description>
+				<parameters>
+					<parameter name="transitionMode" type="String" usage="required">
+						<description>A text string defining a desired transition mode. Currently the only supported transition mode is "fade", which causes the widget's view changing in fading mode.
+						</description>
+					</parameter>
+				</parameters>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+" />
+				</browsers>
+			</method>
+			
+				<method name="performTransition" scope="" visibility="basic">
+				<return-types>
+					<return-type type="void"/>
+				</return-types>
+				<description>The performTransition method operates as a screen update command, which tells the widget UI framework to update the widget screen. It performs the animation while the widget's view is being changed. Currently, only fading animation mode is supported. </description>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+" />
+				</browsers>
+			</method>
+			
+			<method name="setNavigationEnabled" scope="" visibility="basic">
+				<return-types>
+					<return-type type="void"/>
+				</return-types>
+				<description>The navigation mode in a widget can be toggled between a cursor and a tabbed navigation mode. By default, the browsing mode of a widget is set to use a cursor (pointer). The setNavigationEnabled method is used for changing the widget's navigation mode.
+							The argument navigationType is of Boolean type and can be set to true or false to toggle the navigation mode between the cursor mode and the tab mode respectively.
+				 </description>
+				 <parameters>
+					<parameter name="navigationMode" type="Boolean" usage="required">
+						<description>Set to true to enable the cursor navigation mode, and set to false to enable the tabbed navigation mode.
+						</description>
+					</parameter>
+				</parameters>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+" />
+				</browsers>
+			</method>
+			
+			<method name="setDisplayLandscape" scope="" visibility="basic">
+				<return-types>
+					<return-type type="void"/>
+				</return-types>
+				<description>The setDisplayLandscape method changes the orientation of a widget's screen to the landscape mode.
+				 </description>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+" />
+				</browsers>
+			</method>
+			
+			<method name="openApplication" scope="" visibility="basic">
+				<description>The openApplication method enables a widget to launch an S60 mobile application in the stand-alone mode.
+				 </description>
+				 <parameters>
+				 
+					<parameter name="Uid" type="Number" usage="required">
+						<description>A hexadecimal number that specifies the UID of the S60 application to be activated. See the table below for example application UIDs.</description>
+					</parameter> 
+				
+					<parameter name="param" type="String" usage="required">
+						<description>A text string defining a possible argument string that is accepted by the S60 application to be activated.</description>
+					</parameter>
+					
+				</parameters>
+
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+" />
+				</browsers>
+			</method>
+		
+			<method name="setDisplayPortrait" scope="" visibility="basic">
+				<return-types>
+					<return-type type="void"/>
+				</return-types>
+				<description>The setDisplayPortrait method changes the orientation of a widget's screen to the portrait mode.
+				 </description>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+" />
+				</browsers>
+			</method>
+		</methods>
+	</class>
+	
+	<class type="menu" superclass="Object" visibility="basic">
+		<description>
+					The menu object is supported since WRT version 1.0.
+		</description>
+		
+		<browsers>
+				<browser platform="Nokia WRT" version="1.0+" />
+		</browsers>
+		
+	      <constructors>
+	      <constructor scope="instance">
+	       		 <description>The menu object is a built-in object in the widget engine. It is extended from the window object to 
+					provide widget-specific APIs for manipulating widget's options menu and softkeys.
+					The menu object can be accessed via the window object window.menu or just simply menu. Thus, in the 
+					WRT environment, the term menu is a reserved keyword and should not be used as a user-defined global 
+					variable name for other type of objects.
+					A widget's options menu can be constructed using the menu object. The options menu is automatically 
+					associated with the device's left softkey and it cannot be reassigned to associate with another 
+					softkey (for example, the right softkey). The label of the options menu (the left softkey) is the 
+					system-defined term in the current used system language (for example, Options for English). 
+					Thus, the left softkey label cannot be changed.</description>
+			<browsers>
+				<browser platform="Nokia WRT" version="1.0+"/>
+			</browsers>		
+	        <parameters/>
+	        <exceptions/>
+	      </constructor>
+	    </constructors>  
+	    
+	     <properties>
+			<property name="onShow" type="Void" scope="" access="read-write" visibility="basic">
+				<description> The onShow property of the menu object is an event handler for the event of when the options menu is open. In other words, when the end user presses the left softkey, the system will fire an event and a widget can catch the event by providing a callback function.
+				</description>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+"/>
+				</browsers>
+				
+			</property>
+	    
+	    </properties>
+	    <methods>
+	       
+	    		<method name="append" scope="" visibility="basic">
+				<return-types>
+					<return-type type="void"/>
+				</return-types>
+				<description>Call the append method to add a menu item to the top level of the options menu list.
+				Menu items are shown on the options menu list in the order in which they are appended.
+				For more general information on constructing an options menu.
+				 </description>
+				 <parameters>
+					<parameter name="MenuItem" type="menuItem" usage="required">
+						<description>This is an instance of the MenuItem object which is being added to the top level of the options menu
+						</description>
+					</parameter>
+				</parameters>
+			<browsers>
+					<browser platform="Nokia WRT" version="1.0+" />
+				</browsers>
+			</method>
+			
+			
+				<method name="remove" scope="" visibility="basic">
+				<return-types>
+					<return-type type="void"/>
+				</return-types>
+				<description>Call the remove method to remove a menu item from the top level of the options menu list. If the removed menu item has a cascading submenu in it, the submenu will also be removed.
+				 </description>
+				  <parameters>
+					<parameter name="MenuItem" type="menuItem" usage="required">
+						<description>This is an instance of the MenuItem object which is being removed from the top level of the options menu list.
+						</description>
+					</parameter>
+				</parameters>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+" />
+				</browsers>
+			</method>
+			
+			<method name="getMenuItemById" scope="" visibility="basic">
+				<return-types>
+					<return-type type="MenuItem"/>
+				</return-types>
+				<description>Call the getMenuItemById method with a specified menu item's identifier to retrieve the handle of the menu item instance.
+				 </description>
+				 <parameters>
+					<parameter name="id" type="Number" usage="required">
+						<description>This is the identifier of an existing menu item whose handle is being retrieved.
+						</description>
+					</parameter>
+				</parameters>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+" />
+				</browsers>
+			</method>
+			
+				<method name="getMenuItemByName" scope="" visibility="basic">
+				<return-types>
+					<return-type type="MenuItem"/>
+				</return-types>
+				<description>Call the getMenuItemByName method with a specified menu item's label to retrieve the handle of the menu item instance.
+				 </description>
+				  <parameters>
+					<parameter name="menuItemLabel" type="String" usage="required">
+						<description>This is the identifier of an existing menu item whose handle is being retrieved.
+						</description>
+					</parameter>
+				</parameters>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+" />
+				</browsers>
+			</method>
+			
+				<method name="setRightSoftkeyLabel" scope="" visibility="basic">
+				<return-types>
+					<return-type type="void"/>
+				</return-types>
+				<description>Call the setRightSoftkeyLabel method to customize the label and the operation associated with the right softkey.
+					By default, the right softkey of a device is assigned to the "Exit" function, which terminates a running widget. The default label depends on the current used system language (Exit for English).
+				 </description>
+				 <parameters>
+					<parameter name="label" type="String" usage="required">
+						<description>A text string specifies the label to be shown on the right softkey.
+						</description>
+					</parameter>
+					<parameter name="callbackfunc" type="Function" usage="required">
+						<description>A reference to the callback function, which will be called by the system when the right softkey is pressed.
+						</description>
+					</parameter>
+				</parameters>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+" />
+				</browsers>
+			</method>
+		
+				<method name="showSoftkeys" scope="" visibility="basic">
+				<return-types>
+					<return-type type="void"/>
+				</return-types>
+				<description>Call the showSoftkeys method to display the softkey pane at all times.
+				By default, the device's softkey pane is hidden. The softkey pane is shown either by programmatically calling the showSoftkeys method or when the end user presses one of the softkeys.
+				 </description>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+" />
+				</browsers>
+			</method>
+
+				<method name="hideSoftkeys" scope="" visibility="basic">
+				<return-types>
+					<return-type type="void"/>
+				</return-types>
+				<description>Call the hideSoftkeys method to hide the softkey pane.
+						By default, the device's softkey pane is hidden. The softkey pane is shown automatically when the end user presses one of the softkeys.
+				 </description>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+" />
+				</browsers>
+			</method>
+			
+				<method name="clear" scope="" visibility="basic">
+				<return-types>
+					<return-type type="void"/>
+				</return-types>
+				<description>Call the clear method to delete all the menu items in the options menu pane. This operation will also clear all submenus if such exist
+				 </description>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+" />
+				</browsers>
+			</method>
+	    </methods>	
+	   </class>  
+	   
+  <!-- MenuItem Object -->
+  <class type="MenuItem" superclass="Object" visibility="basic">
+		<description>
+					The MenuItem object is supported since WRT version 1.0.
+		</description>
+		
+		<browsers>
+				<browser platform="Nokia WRT" version="1.0+" />
+		</browsers>
+		
+	  <constructors>
+		<constructor scope="instance">
+			<description>Creates a new instance of an Enumerator object.</description>
+			<browsers>
+				<browser platform="Nokia WRT" version="1.0+"/>
+			</browsers>
+			
+				<parameters>
+					<parameter name="label" type="String" usage="required">
+						<description>A text string that defines the label for the menu item.</description>
+					</parameter>
+					<parameter name="id" type="Integer" usage="required">
+						<description>A unique integer that identifies the menu item.</description>
+					</parameter>
+				</parameters>
+
+				<return-types>
+					<return-type type="MenuItem"/>
+				</return-types>
+			</constructor>
+		</constructors>
+	    
+	    <properties>
+			<property name="onSelect" type="void" scope="instance" access="read-write" visibility="basic">
+				<description> The onSelect property of the MenuItem object is an event handler for the event of when the menu item is selected. In other words, when the end user opens the options menu and selects a menu item either from the top-level menu list or from a submenu list, the system will fire an event and a widget can catch the event by providing a callback function.
+				</description>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+"/>
+				</browsers>
+			</property>
+	    </properties>
+
+	     <methods>
+	       <method name="append" scope="instance" visibility="basic">
+				<return-types>
+					<return-type type="void"/>
+				</return-types>
+				<description>Call the append method to add a child menu item to the parent menu item in the options menu list. This results in the creation of a submenu list in the menu tree. Use this method to create a cascading submenu when needed.
+							Menu items are shown on the options menu list in the order in which they are appended.
+				 </description>
+				 <parameters>
+					<parameter name="childMenuItem" type="MenuItem" usage="required">
+						<description>This is an instance of the MenuItem object which is being added to the parent menu item. See also the menu.append method description for instructions on how to append a menu item to the top level of the options menu list.
+						</description>
+					</parameter>
+				</parameters>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+" />
+				</browsers>
+			</method>
+			
+				<method name="remove" scope="instance" visibility="basic">
+				<return-types>
+					<return-type type="void"/>
+				</return-types>
+				<description>Call the remove method to remove a child menu item and its children (if any) from the parent menu item.
+				 </description>
+				  <parameters>
+					<parameter name="childMenuItem" type="MenuItem" usage="required">
+						<description>This is an instance of the MenuItem object which is being removed from the parent menu item. See also the menu.remove method description for instructions on how to remove a menu item from the top level of the options menu list.
+						</description>
+					</parameter>
+				</parameters>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+" />
+				</browsers>
+			</method>
+			
+				<method name="setDimmed" scope="instance" visibility="basic">
+				<return-types>
+					<return-type type="void"/>
+				</return-types>
+				<description>Call the setDimmed method to show or hide an existing menu item. By default, a menu item is shown when it is appended to the options menu.
+				 </description>
+				 <parameters>
+					<parameter name="flag" type="Boolean" usage="required">
+						<description>true to show the menu item, and false to hide the menu item.
+						</description>
+					</parameter>
+				</parameters>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+" />
+				</browsers>
+			</method>
+			<!-- End Menu  Item object functions -->
+	    </methods>	
+	   </class>  
+  <!-- end of MenuItem Object -->
+  
+  <!-- System API document.embeds[0]; -->
+	 	  
+  <!-- <class type="SystemInfo" superclass="Object" visibility="basic"> -->
+
+  <!--
+  
+<class type="systemInfo" superclass="Object" visibility="basic">
+	<description>The widget engine provides a set of system information (SystemInfo) API services. The SystemInfo Service API allows a widget to access a device's properties and to control certain device features. The API is implemented in a plug-in module and it is integrated into the WRT environment.
+					To use the SystemInfo APIs, each widget must load the plug-in module explicitly by defining the following HTML code in its main HTML document:
+	</description>
+	<browsers>
+		<browser platform="Nokia WRT" version="1.0+"/>
+	</browsers>
+	
+	<constructors>
+		<constructor scope="instance">
+			<description>Creates a new instance of an Enumerator object.</description>
+				<parameters>
+					<parameter name="group" type="Object" usage="required">
+						<description>Group of items to be iterated over.</description>
+					</parameter>
+				</parameters>
+				<return-types>
+					<return-type type="Enumerator"/>
+				</return-types>
+			</constructor>
+		</constructors>
+
+		<properties>
+			<property name="chargelevel" type="Integer" scope="instance" access="read" visibility="basic">
+				<description>This is a read-only property that returns an integer indicating the current battery level.
+							 The returned value is in the range of 0 to 100 as a percentage of the maximum battery level.
+				</description>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+"/>
+				</browsers>
+			</property>
+
+			<property name="onchargelevel" type="" scope="instance" access="read-write" visibility="basic">
+				<description>The onchargelevel property is an event handler for the event of when the battery level is changed. The callback function is assigned by providing the function's name wrapped in a string.</description>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+"/>
+				</browsers>
+			</property>
+			
+			<property name="chargerconnected" type="Boolean" scope="instance" access="read" visibility="basic">
+				<description>This is a read-only property that returns a Boolean value indicating the status of the changer.
+							 If the charger is connected, the returned value is 1; otherwise it is 0. </description>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+"/>
+				</browsers>
+			</property>
+			<property name="onchargerconnected" type="void" scope="instance" access="read-write" visibility="basic">
+				<description>The onchargerconnected property is an event handler for the event of when the charger is plugged to or unplugged from the device.
+							Since the event is fired off much faster than the value is updated, it is recommended to read the value after a small delay.</description>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+"/>
+				</browsers>
+			</property>
+			
+			
+			<property name="signalbars" type="Integer" scope="instance" access="read" visibility="basic">
+				<description>This is a read-only property that returns an integer indicating the network signal strength.
+							 The returned value is in the range of 0 to 7, where 0 represents no signal and 7 represents the maximum signal strength.
+							 For more information on network connection related aspects that you should take into account in your widget.
+				</description>
+				
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+"/>
+				</browsers>
+			</property>
+			<property name="networkname" type="String" scope="instance" access="read" visibility="basic">
+				<description>This is a read-only property that returns a string containing the current registered mobile network name defined by the network provider.
+							 This information is only available on GSM/WCDMA networks.
+							For more information on network connection related aspects that you should take into account in your widget.</description>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+"/>
+				</browsers>
+			</property>
+			<property name="lightminintensity" type="void" scope="instance" access="read" visibility="basic">
+				<description>This is a read-only property that returns a constant value determining the minimum light intensity (lowest brightness) supported by a device.
+				</description>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+"/>
+				</browsers>
+			</property>
+			
+			
+			<property name="networkregistrationstatus" type="Integer" scope="" access="read-write" visibility="basic">
+				<description>The networkregistrationstatus property is an integer indicating the current network registration status.
+				</description>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+"/>
+				</browsers>
+			</property>
+			<property name="lightdefaultintensity" type="" scope="instance" access="read" visibility="basic">
+				<description>This is a read-only property that returns a constant value determining the default light intensity (default brightness) preset for a device.
+				</description>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+"/>
+				</browsers>
+			</property>
+			
+			<property name="lightinfiniteduration" type="Integer" scope="instance" access="read" visibility="basic">
+				<description>This is a read-only property that returns a constant value determining the infinite time duration.
+				</description>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+"/>
+				</browsers>
+			</property>
+			
+			<property name="lightmaxduration" type="Integer" scope="instance" access="read-write" visibility="basic">
+				<description>This is a read-only property that returns an integer value determining the maximum allowed time duration that a device supports. The time duration unit is measured in milliseconds.
+				</description>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+"/>
+				</browsers>
+			</property>
+			
+			
+			<property name="lightdefaultcycletime" type="Integer" scope="instance" access="read" visibility="basic">
+				<description>This is a read-only property that returns a constant value indicating the default cycle time of when the light is blinking.
+				</description>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+"/>
+				</browsers>
+			</property>
+			
+			<property name="lighttargetprimarydisplayandkeyboard" type="Integer" scope="instance" access="read-write" visibility="basic">
+				<description>This is a read-only property that returns a constant value defining the target light to be both the primary display and the keyboard illuminator.
+				</description>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+"/>
+				</browsers>
+			</property>
+			<property name="lighttargetsystem" type="Integer" scope="instance" access="read" visibility="basic">
+				<description>This is a read-only property that returns a constant value defining the target light to be all displays (primary and secondary if exists) and the keyboard illuminator.
+				</description>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+"/>
+				</browsers>
+			</property>
+			
+			
+			<property name="vibraminintensity" type="Integer" scope="instance" access="read" visibility="basic">
+				<description>This is a read-only property that returns a constant value determining the minimum vibration intensity (lowest vibration frequency).
+				</description>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+"/>
+				</browsers>
+			</property>
+			
+			<property name="vibramaxintensity" type="Integer" scope="instance" access="read" visibility="basic">
+				<description>This is a read-only property that returns a constant value determining the maximum vibration intensity (highest vibration frequency).
+				</description>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+"/>
+				</browsers>
+			</property>
+			<property name="vibramaxduration" type="Integer" scope="instance" access="read" visibility="basic">
+				<description>This is a read-only property that returns a constant value determining the maximum allowed time duration of vibration.
+				</description>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+"/>
+				</browsers>
+			</property>
+			<property name="vibrasettings" type="Integer" scope="instance" access="read" visibility="basic">
+				<description>This is a read-only property that returns the current settings of the vibration mode set in the active user profile.
+				</description>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+"/>
+				</browsers>
+			</property>
+			
+			
+			<property name="totalram" type="Integer" scope="instance" access="read" visibility="basic">
+				<description>This is a read-only property that returns an integer value indicating the total amount of RAM of a device, measured in bytes.
+				</description>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+"/>
+				</browsers>
+			</property>
+			<property name="freeram" type="Integer" scope="instance" access="read" visibility="basic">
+				<description>This is a read-only property that returns an integer value indicating the amount of free RAM of a device, measured in bytes.
+				</description>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+"/>
+				</browsers>
+			</property>
+			<property name="drivelist" type="Integer" scope="instance" access="read" visibility="basic">
+				<description>This is a read-only property that returns a text string containing all the user's existing drive names separated by a space.
+				</description>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+"/>
+				</browsers>
+			</property>
+				<property name="language" type="Integer" scope="instance" access="read" visibility="basic">
+				<description>This is a read-only property that returns a text string containing the two-letter ISO 639-1 code that represents an international language. For a list of ISO 639-1 language codes, see the Language code table in the Symbian OS Library.
+				</description>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+"/>
+				</browsers>
+			</property>
+		</properties>
+		
+		
+		<methods>
+		
+		<method name="lighton" scope="instance" visibility="basic">
+				<return-types>
+					<return-type type="void"/>
+				</return-types>
+				<description>The lighton method switches the specified target light on for a specified duration with the brightness defined by a specified light intensity.
+				 </description>
+				  <parameters>
+					<parameter name="lighttarget" type="Integer" usage="required">
+						<description>Defines which target light should be turned on. Use one of the supported target light properties to specify a target light.
+						</description>
+					</parameter>
+					<parameter name="duration" type="Integer" usage="required">
+						<description>Defines the period during which the target light is switched on. The period is measured in milliseconds.
+						</description>
+					</parameter>
+					<parameter name="intensity" type="Integer" usage="required">
+						<description>Defines the intensity (brightness) of the light. If intensity is lightdefaultintensity, the device default intensity will be used. 
+						</description>
+					</parameter>
+					<parameter name="fadein" type="Boolean" usage="required">
+						<description>If true, target lights will not turn on instantly but fade-in smoothly instead. if false, target lights will be turned on without the fading effect.
+						</description>
+					</parameter>
+				</parameters>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+" />
+				</browsers>
+			</method>
+
+
+<method name="lightoff" scope="instance" visibility="basic">
+				<return-types>
+					<return-type type="void"/>
+				</return-types>
+				<description>The lightoff method switches the specified target light off for the specified duration.
+				 </description>
+				  <parameters>
+					<parameter name="lighttarget" type="String" usage="required">
+						<description>Defines which target light should be turned on. Use one of the supported target light properties to specify a target light.
+						</description>
+					</parameter>
+					<parameter name="duration" type="Integer" usage="required">
+						<description>Defines the period during which the target light is switched on. The period is measured in milliseconds.
+						</description>
+					</parameter>
+					<parameter name="fadeout" type="Integer" usage="required">
+						<description>If true, target lights will not turn on instantly but fade-in smoothly instead. if false, target lights will be turned on without the fading effect.
+						</description>
+					</parameter>
+				</parameters>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+" />
+				</browsers>
+			</method>			
+		
+		
+		<method name="lightblink" scope="instance" visibility="basic">
+				<return-types>
+					<return-type type="void"/>
+				</return-types>
+				<description>The lightblink method switches the specified target light on and off (blinking) for the specified duration with the brightness defined by a specified light intensity.
+
+				 </description>
+				  <parameters>
+					<parameter name="lighttarget" type="String" usage="required">
+						<description>Defines which target light should be turned on. Use one of the supported target light properties to specify a target light.
+						</description>
+					</parameter>
+					<parameter name="duration" type="Integer" usage="required">
+						<description>Defines the period during which the target light is switched on. The period is measured in milliseconds.
+						</description>
+					</parameter>
+						<parameter name="onduration" type="Integer" usage="required">
+						<description>Defines the period during which the target light is switched on. The period is measured in milliseconds.
+						</description>
+					</parameter>
+						<parameter name="offduration" type="Integer" usage="required">
+						<description>Defines the period during which the target light is switched on. The period is measured in milliseconds.
+						</description>
+					</parameter>
+					<parameter name="intensity" type="Integer" usage="required">
+						<description>If true, target lights will not turn on instantly but fade-in smoothly instead. if false, target lights will be turned on without the fading effect.
+						</description>
+					</parameter>
+				</parameters>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+" />
+				</browsers>
+			</method>			
+		
+		
+			<method name="startvibra" scope="instance" visibility="basic">
+				<return-types>
+					<return-type type="void"/>
+				</return-types>
+				<description>The startvibra method turns the device vibration on for the specified duration with the specified intensity (frequency).
+				 </description>
+				  <parameters>
+					<parameter name="duration" type="Integer" usage="required">
+						<description>Defines the period during which the target light is switched on. The period is measured in milliseconds.
+						</description>
+					</parameter>
+					<parameter name="intensity" type="Integer" usage="required">
+						<description>Defines the intensity (brightness) of the light. If intensity is lightdefaultintensity, the device default intensity will be used. 
+						</description>
+					</parameter>
+					
+				</parameters>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+" />
+				</browsers>
+			</method>
+			
+			
+			<method name="stopvibra" scope="instance" visibility="basic">
+				<return-types>
+					<return-type type="void"/>
+				</return-types>
+				<description>The stopvibra method immediately interrupts the device vibration.
+				 </description>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+" />
+				</browsers>
+			</method>
+			
+			<method name="beep" scope="instance" visibility="basic">
+				<return-types>
+					<return-type type="void"/>
+				</return-types>
+				<description>The beep method produces a beep tone in a specified frequency for a specified duration.
+				 </description>
+				  <parameters>
+					<parameter name="frequency" type="Integer" usage="required">
+						<description>Defines the period during which the target light is switched on. The period is measured in milliseconds.
+						</description>
+					</parameter>
+					<parameter name="duration" type="Integer" usage="required">
+						<description>Defines the intensity (brightness) of the light. If intensity is lightdefaultintensity, the device default intensity will be used. 
+						</description>
+					</parameter>
+					
+				</parameters>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+" />
+				</browsers>
+			</method>
+		
+		<method name="drivesize" scope="instance" visibility="basic">
+				<return-types>
+					<return-type type="void"/>
+				</return-types>
+				<description>The drivesize method can be used to detect the total size of an existing memory storage in a device.
+				 </description>
+				  <parameters>
+					<parameter name="drivename" type="String" usage="required">
+						<description>Defines the period during which the target light is switched on. The period is measured in milliseconds.
+						</description>
+					</parameter>
+				</parameters>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+" />
+				</browsers>
+			</method>
+			
+			<method name="drivefree" scope="instance" visibility="basic">
+				<return-types>
+					<return-type type="void"/>
+				</return-types>
+				<description>The drivesize method can be used to detect the total size of an existing memory storage in a device.
+				 </description>
+				  <parameters>
+					<parameter name="drivename" type="String" usage="required">
+						<description>Defines the period during which the target light is switched on. The period is measured in milliseconds.
+						</description>
+					</parameter>
+				</parameters>
+				<browsers>
+					<browser platform="Nokia WRT" version="1.0+" />
+				</browsers>
+			</method>
+	
+		
+		
+		</methods>
+
+
+	</class>
+-->
+
+
+  <!-- key -->
+  <class type="key" >
+    <description>
+      Each key represents one piece of contact information, such as first name, last name, home phone number, or email address. For each contact, GetList returns as many keys as has been defined for that contact.
+    </description>
+
+    <browsers>
+      <browser platform="Nokia WRT" version="1.1+" />
+    </browsers>
+<!--
+    <constructors>
+      <constructor scope="instance">
+        <description></description>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+"/>
+        </browsers>
+        <parameters/>
+        <return-types>
+          <return-type type="key"/>
+        </return-types>
+      </constructor>
+    </constructors>
+-->
+    <properties>
+
+      <property name="Label" type="String" scope="instance" access="read-write" visibility="basic">
+        <description>
+          Label
+        </description>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+"/>
+        </browsers>
+      </property>
+
+      <property name="Value" type="String" scope="instance" access="read-write" visibility="basic">
+        <description>
+          Value
+        </description>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+"/>
+        </browsers>
+      </property>
+
+      <property name="FirstName" type="String" scope="instance" access="read-write" visibility="basic">
+        <description>
+          FirstName
+        </description>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+"/>
+        </browsers>
+      </property>
+
+      <property name="LastName" type="String" scope="instance" access="read-write" visibility="basic">
+        <description>
+          LastName
+        </description>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+"/>
+        </browsers>
+      </property>
+
+
+    </properties>
+
+  </class>
+  <!-- end of key -->
+  
+  <!-- Item -->
+  <class type="Item" >
+    <description>
+      Item
+    </description>
+
+    <browsers>
+      <browser platform="Nokia WRT" version="1.1+" />
+    </browsers>
+<!--
+    <constructors>
+      <constructor scope="instance">
+        <description></description>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+"/>
+        </browsers>
+        <parameters/>
+        <return-types>
+          <return-type type="Item"/>
+        </return-types>
+      </constructor>
+    </constructors>
+-->
+    <properties>
+      
+      <property name="CalendarName" type="String" scope="instance" access="read-write" visibility="basic">
+        <description>
+          CalendarName
+        </description>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+"/>
+        </browsers>
+      </property>
+      
+      <property name="LocalId" type="String" scope="instance" access="read-write" visibility="basic">
+        <description>
+          LocalId
+        </description>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+"/>
+        </browsers>
+      </property>
+
+      <property name="InstanceStartTime" type="Date" scope="instance" access="read-write" visibility="basic">
+        <description>
+          InstanceStartTime
+        </description>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+"/>
+        </browsers>
+      </property>
+
+      <!-- Contacts specific -->
+
+      <property name="id" type="Staring" scope="instance" access="read-write" visibility="basic">
+        <description>
+          Unique identifier of the contact.
+        </description>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+"/>
+        </browsers>
+      </property>
+
+      <property name="key" type="key" scope="instance" access="read-write" visibility="basic">
+        <description>
+          Each key represents one piece of contact information, such as first name, last name, home phone number, or email address. For each contact, GetList returns as many keys as has been defined for that contact.
+        </description>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+"/>
+        </browsers>
+      </property>
+
+      <property name="GroupLabel" type="String" scope="instance" access="read-write" visibility="basic">
+        <description>
+          Name of the group.
+        </description>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+"/>
+        </browsers>
+      </property>
+
+      <property name="Contents" type="Array" scope="instance" access="read-write" visibility="basic">
+        <description>
+          Contains the IDs of the contacts that belong to the group.
+        </description>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+"/>
+        </browsers>
+      </property>
+
+      <property name="DBUri" type="String" scope="instance" access="read-write" visibility="basic">
+        <description>
+          URI of the database.
+        </description>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+"/>
+        </browsers>
+      </property>
+
+	 <!-- AppManager specific -->
+		
+      <property name="Uid" type="String" scope="instance" access="read" visibility="basic">
+        <description>
+        	AppManager:
+        	Contains a unique ID for the application binary (EXE or DLL).
+        </description>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+"/>
+        </browsers>
+      </property>
+
+      <property name="Path" type="String" scope="instance" access="read" visibility="basic">
+        <description>
+        	AppManager:
+          	Contains the path of the application. For example, c:\sys\bin\calculator.exe.
+        </description>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+"/>
+        </browsers>
+      </property>
+
+      <property name="Caption" type="String" scope="instance" access="read" visibility="basic">
+        <description>
+          AppManager:
+          Contains the title of the application.
+        </description>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+"/>
+        </browsers>
+      </property>
+
+      <property name="ShortCaption" type="String" scope="instance" access="read" visibility="basic">
+        <description>
+          AppManager:
+          Contains the short title of the application. For example, the short caption may be displayed beneath an icon on the mobile device.
+        </description>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+"/>
+        </browsers>
+      </property>
+
+      <property name="PackageName" type="String" scope="instance" access="read" visibility="basic">
+        <description>
+          AppManager:
+          Contains the name of the application. For example, the package name may be displayed in a menu on the mobile device.
+        </description>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+"/>
+        </browsers>
+      </property>
+
+      <property name="Version" type="String" scope="instance" access="read" visibility="basic">
+        <description>
+        	AppManager:
+			Contains the version of the application. The version consists of two parts: Major, Minor.
+			For example, 1.01, where 1 is the major part and .02 is the minor part.
+        </description>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+"/>
+        </browsers>
+      </property>
+
+      <property name="Vendor" type="String" scope="instance" access="read" visibility="basic">
+        <description>
+          AppManager:
+          Contains the vendor of the application.
+        </description>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+"/>
+        </browsers>
+      </property>
+
+      <property name="Drive" type="String" scope="instance" access="read" visibility="basic">
+        <description>
+        	AppManager:
+          Contains the drive where the application is installed.
+        </description>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+"/>
+        </browsers>
+      </property>
+	  		
+    </properties>
+
+  </class>
+  <!-- end of Item -->
+  
+  <!-- Iterator -->
+  <class type="Iterator" >
+    <description>
+      Iterator
+    </description>
+
+    <browsers>
+      <browser platform="Nokia WRT" version="1.1+" />
+    </browsers>
+<!--
+    <constructors>
+      <constructor scope="instance">
+        <description></description>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+"/>
+        </browsers>
+        <parameters/>
+        <return-types>
+          <return-type type="Iterator"/>
+        </return-types>
+      </constructor>
+    </constructors>
+-->
+    <methods>
+
+      <method name="reset" scope="instance" visibility="basic">
+
+        <return-types>
+          <return-type type="void"/>
+        </return-types>
+
+        <description>
+          reset
+        </description>
+
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+"/>
+        </browsers>
+
+      </method>
+
+      <method name="getNext" scope="instance" visibility="basic">
+
+        <return-types>
+          <return-type type="Item"/>
+        </return-types>
+
+        <description>
+          getNext
+        </description>
+
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+"/>
+        </browsers>
+
+      </method>
+    </methods>
+
+  </class>
+  <!-- end of Iterator -->
+    
+  <!-- result -->
+  <class type="result" >
+    <description>
+      result
+    </description>
+
+    <browsers>
+      <browser platform="Nokia WRT" version="1.1+" />
+    </browsers>
+
+    <properties>
+      <!--
+		<property name="ReturnValue" type="Iterator" scope="instance" access="read" visibility="basic">
+			<description>
+        	AppManager
+			
+				GetList:
+					This is an iterator that contains the requested application information.
+					
+				LaunchApp/LaunchDoc:
+					This is a string that contains the name of the newly created document, if any.
+					This property is optional. 
+					
+					A new document is created only when both of the following are true:
+						criteria.MIMEType is specified as input.
+						The launched application creates a new document. 
+					A document name is never returned when criteria.Document is specified as input.
+					
+			Calendar
+				GetList:
+					This is an iterator that contains the requested calendar information.
+					
+				Add:
+					This is a text string that contains the id of the entry that was added or updated.
+					If a new calendar was created, this property is not included in the result object.
+
+				Import:
+					This is an iterator that contains an ordered list of objects. The objects contain the ids (strings) of the entries that were successfully imported to the calendar. The same id may be repeated multiple times in case of child entries.
+					
+				Export:
+					This is a text string that contains the exported entries in the specified format.
+					This property is only included if Data.FileName was not specified in the input. This property serves as a buffer that contains the same data as the target file would have had it been specified.
+
+			Contact:
+				GetList:
+					This is an iterator that contains the requested contact information
+			</description>
+			<browsers>
+				<browser platform="Nokia WRT" version="1.1+"/>
+			</browsers>
+		</property>
+		-->
+
+      <property name="ReturnValue" type="Object" scope="instance" access="read" visibility="basic">
+        <description>
+        	Return value
+        </description>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+"/>
+        </browsers>
+      </property>
+		
+      <property name="ErrorCode" type="Integer" scope="instance" access="read" visibility="basic">
+        <description>
+        	This is a number that specifies a predefined error code.
+        </description>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+"/>
+        </browsers>
+      </property>
+
+      <property name="ErrorMessage" type="String" scope="instance" access="read" visibility="basic">
+        <description>
+        	This is a text string that describes the error.
+        </description>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+"/>
+        </browsers>
+      </property>
+
+      <property name="TransactionID" type="Integer" scope="instance" access="read" visibility="basic">
+        <description>
+        	This is a number used as an identification to match transactions started with an asynchronous call to one or more calls it generates to callback. This is only valid for Asynchronous invocations.
+        </description>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+"/>
+        </browsers>
+      </property>
+
+    </properties>
+
+  </class>
+  <!-- end of result -->
+
+  <!-- IDataSource -->
+  <class type="IDataSource">
+
+    <description>
+    	This Service API allows widgets to:
+		&lt;p&gt;
+		&lt;ul&gt;
+		 	&lt;li&gt;access, create, and manage calendars/calendar entries,&lt;/li&gt;
+			&lt;li&gt;access and manage information about contacts,&lt;/li&gt;
+			&lt;li&gt;access and manage information about landmarks and landmark categories,&lt;/li&gt;
+			&lt;li&gt;add, read, and delete logging events such as call logs, messaging logs, and so forth,&lt;/li&gt;
+			&lt;li&gt;retrieve information (metadata) about the media files stored in the Media Gallery of a device.&lt;/li&gt;
+		&lt;/ul&gt;
+		&lt;/p&gt;
+		&lt;p&gt;
+		To use the &lt;code&gt;IDataSource&lt;/code&gt; Service API, your widget must first create a service object for it using the &lt;code&gt;device.getServiceObject()&lt;/code&gt; method.
+		&lt;/p&gt;
+		&lt;p&gt; 
+		Use &lt;code&gt;Service.Calendar&lt;/code&gt; or &lt;code&gt;Service.Contact&lt;/code&gt; or &lt;code&gt;Service.Landmarks&lt;/code&gt; or &lt;code&gt;Service.Logging&lt;/code&gt; or &lt;code&gt;Service.MediaManagement&lt;/code&gt; to identify the service provider and &lt;code&gt;IDataSource&lt;/code&gt; to identify the supported interface:
+		&lt;/p&gt;
+		
+		&lt;pre&gt;var so = device.getServiceObject("Service.Calendar", "IDataSource");&lt;/pre&gt;		
+	</description>
+
+    <browsers>
+      <browser platform="Nokia WRT" version="1.1+" />
+    </browsers>
+
+    <methods>
+      
+      <!-- GetList(criteria) -->
+      <method name="GetList" scope="instance" visibility="basic">
+        <return-types>
+          <return-type type="result"/>
+        </return-types>
+        
+        <description>
+        	&lt;p&gt;&lt;b&gt;Calendar:&lt;/b&gt;
+				The &lt;code&gt;GetList&lt;/code&gt; method retrieves a list of available calendars or calendar entries. Calendar entries are retrieved from the specified calendar or, if no calendar is specified, from the default one.
+				This is a synchronous method.&lt;/p&gt;
+				
+			&lt;p&gt;&lt;b&gt;Contacts:&lt;/b&gt;				
+				The &lt;code&gt;GetList&lt;/code&gt; method retrieves a list of contacts, contact groups, or contacts databases. Contacts and contact groups are retrieved from the specified contacts database or, if no database is specified, from the default one.
+				This method can be called both synchronously and asynchronously.&lt;/p&gt;
+
+				&lt;p&gt;Note: Calls that retrieve a list of databases must always be synchronous.&lt;/p&gt;
+				
+			&lt;p&gt;&lt;b&gt;Landmarks:&lt;/b&gt;				
+				The &lt;code&gt;GetList&lt;/code&gt; method retrieves information about landmarks, landmark categories, or landmark databases. Landmarks and landmark categories are retrieved from the specified landmark database or, if no database is specified, from the default one.
+				This method can be called both synchronously and asynchronously.&lt;/p&gt;
+
+				&lt;p&gt;Note: For retrieving information about databases, only synchronous GetList is supported.&lt;p/&gt;
+				
+			&lt;p&gt;&lt;b&gt;Logging:&lt;/b&gt;				
+				The &lt;code&gt;GetList&lt;/code&gt; method retrieves an iterable list of entries from the log event database. The database contains two types of entries, log entries (all entries) and recent log entries (a subset of all log entries).
+				This method can be called both synchronously and asynchronously.&lt;/p&gt;
+				
+			&lt;p&gt;&lt;b&gt;Media Management:&lt;/b&gt;				
+				The &lt;code&gt;GetList&lt;/code&gt; method retrieves a list of media information objects from the Media Gallery of the S60 device. Each object contains information about a single media file.
+				This is an asynchronous method.&lt;/p&gt;
+        </description>
+
+        <parameters>
+          <parameter name="criteria" type="Object" usage="required">
+            <description>
+            	This is an object that specifies what type of calendar/location/landmark/log event information is returned and how the returned information is sorted.
+            </description>
+          </parameter>
+		  
+          <parameter name="callback" type="Function" usage="optional">
+            <description>
+            	The callback argument is the name of the method that is executed when an asynchronous GetList call has results or status information to return. You must define this method separately. 
+            </description>
+          </parameter>
+
+        </parameters>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+" />
+        </browsers>
+      </method>
+
+      <!-- Add(criteria) -->
+      <method name="Add" scope="instance" visibility="basic">
+        <return-types>
+          <return-type type="result"/>
+        </return-types>
+
+        <description>
+        	&lt;p&gt;&lt;b&gt;Calendar:&lt;/b&gt;
+				The &lt;code&gt;Add&lt;/code&gt; method creates a new calendar on the device or adds an entry to a calendar. In the latter case, if an entry with the same LocalId already exists in the calendar, it is modified accordingly. You can thus use this method to both add and update calendar entries. The entry is added to the specified calendar or, if no calendar is specified, to the default one. If the default calendar does not exist, it is created.
+				This is a synchronous method.&lt;/p&gt;
+
+			&lt;p&gt;&lt;b&gt;Contact:&lt;/b&gt;
+				The &lt;code&gt;Add&lt;/code&gt; method adds a contact or contact group to a contacts database. If the contact or contact group already exists in the database, it is replaced with the new entry. You can thus use this method to both add and edit contacts and contact groups. The information is added to the specified database or, if no database is specified, to the default one. If the default database does not exist, it is created.
+				This method can be called both synchronously and asynchronously.&lt;/p&gt;
+
+			&lt;p&gt;&lt;b&gt;Landmarks:&lt;/b&gt;
+				The &lt;code&gt;Add&lt;/code&gt; method adds a new landmark or landmark category to a landmark database. You can also use this method to edit an existing landmark or landmark category.
+				This is a synchronous method.&lt;/p&gt;
+
+			&lt;p&gt;&lt;b&gt;Logging:&lt;/b&gt;
+				The &lt;code&gt;Add&lt;/code&gt; method adds an event (entry) to the event log database.
+				This method can be called both synchronously and asynchronously.&lt;/p&gt;
+        </description>
+
+        <parameters>
+          <parameter name="criteria" type="criteria" usage="required">
+            <description>
+            	This is an object that specifies the calendar/contact/landmark/log to create or to add or update.
+            </description>
+          </parameter>
+		  
+          <parameter name="callback" type="Function" usage="optional">
+            <description>
+            	The callback argument is the name of the method that is executed when an asynchronous Add call has results or status information to return. You must define this method separately. 
+            </description>
+          </parameter>
+		  
+        </parameters>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+" />
+        </browsers>
+      </method>
+
+      <!-- Delete(criteria) -->
+      <method name="Delete" scope="instance" visibility="basic">
+        <return-types>
+          <return-type type="result"/>
+        </return-types>
+
+        <description>
+        	&lt;p&gt;&lt;b&gt;Calendar:&lt;/b&gt;
+				The &lt;code&gt;Delete&lt;/code&gt; method deletes a calendar from the device or one or more entries from a calendar. Entries are deleted from the specified calendar or, if no calendar is specified, from the default one.
+				For deleting a calendar, this method is called synchronously. For deleting calendar entries, this method can be called both synchronously and asynchronously.&lt;/p&gt;
+				
+        	&lt;p&gt;&lt;b&gt;Contacts:&lt;/b&gt;
+				The &lt;code&gt;Delete&lt;/code&gt; method deletes one or more contacts or contact groups from a contacts database. The information is deleted from the specified database or, if no database is specified, from the default one.
+				This method can be called both synchronously and asynchronously&lt;/p&gt;
+				
+        	&lt;p&gt;&lt;b&gt;Landmark:&lt;/b&gt;
+				The &lt;code&gt;Delete&lt;/code&gt; method deletes a landmark or landmark category from a landmark database.
+				Note: You cannot delete landmark databases.
+				This is a synchronous method.&lt;/p&gt;
+				
+        	&lt;p&gt;&lt;b&gt;Logging:&lt;/b&gt;
+				The &lt;code&gt;Delete&lt;/code&gt; method deletes an event (entry) from the event log database. 
+				This method can be called both synchronously and asynchronously.&lt;/p&gt;
+        </description>
+
+        <parameters>
+          <parameter name="criteria" type="criteria" usage="required">
+            <description>
+            	This is an object that specifies which calendar/calendar entries/contacts/contact groups/landmark/landmark category/event to delete from the database.
+            </description>
+          </parameter>
+		  
+          <parameter name="callback" type="Function" usage="optional">
+            <description>
+            	The callback argument is the name of the method that is executed when an asynchronous Delete call has results or status information to return. You must define this method separately.
+            </description>
+          </parameter>
+        </parameters>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+" />
+        </browsers>
+      </method>
+
+      <!-- Import(criteria) -->
+      <method name="Import" scope="instance" visibility="basic">
+        <return-types>
+          <return-type type="result"/>
+        </return-types>
+
+        <description>
+			&lt;p&gt;&lt;b&gt;Calendar:&lt;/b&gt;
+        		The &lt;code&gt;Import&lt;/code&gt; method imports entries into a calendar. The information must be imported from an iCal or vCal file. For more information about these two formats, see the Calendar Service overview page.
+				This method can be called both synchronously and asynchronously.&lt;/p&gt;
+				
+			&lt;p&gt;&lt;b&gt;Contact:&lt;/b&gt;
+				The &lt;code&gt;Import&lt;/code&gt; method imports a contact to a contacts database. The information must be imported from a vCard file.
+				This method can be called both synchronously and asynchronously.&lt;/p&gt;
+			
+			&lt;p&gt;&lt;b&gt;Landmark:&lt;/b&gt;
+				The &lt;code&gt;Import&lt;/code&gt; method imports a set of landmarks to a landmark database.
+				This is a synchronous method.&lt;/p&gt;
+
+        </description>
+
+        <parameters>
+          <parameter name="criteria" type="criteria" usage="required">
+            <description>
+				This is an object that specifies the calendar entries/contacts/landmarks to import.			 
+            </description>
+          </parameter>
+		  
+          <parameter name="callback" type="Function" usage="optional">
+            <description>
+            	The callback argument is the name of the method that is executed when an asynchronous Import call has results or status information to return. You must define this method separately.
+            </description>
+          </parameter>
+		  
+        </parameters>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+" />
+        </browsers>
+      </method>
+
+	    <!-- Export(criteria) -->
+      <method name="Export" scope="instance" visibility="basic">
+        <return-types>
+          <return-type type="result"/>
+        </return-types>
+
+        <description>
+        	&lt;p&gt;&lt;b&gt;Calendar:&lt;/b&gt;
+				The &lt;code&gt;Export&lt;/code&gt; method exports entries from a calendar. The information is exported to an iCal or vCal file. For more information about these two formats, see the Calendar Service overview page.
+				This method can be called both synchronously and asynchronously.&lt;/p&gt;
+
+			&lt;p&gt;&lt;b&gt;Contact:&lt;/b&gt;
+				The &lt;code&gt;Export&lt;/code&gt; method exports a contact from a contacts database. The information is exported to a vCard file.
+				This method can be called both synchronously and asynchronously&lt;/p&gt;
+			
+			&lt;p&gt;&lt;b&gt;Landmark:&lt;/b&gt;
+				The &lt;code&gt;Export&lt;/code&gt; method exports a set of landmarks from a landmark database.
+				This is a synchronous method.&lt;/p&gt;
+        </description>
+
+        <parameters>
+          <parameter name="criteria" type="criteria" usage="required">
+            <description>
+            	This is an object that specifies the calendar/contacts/landmarks entries to export.
+            </description>
+          </parameter>
+		  
+          <parameter name="callback" type="Function" usage="optional">
+            <description>
+            	The callback argument is the name of the method that is executed when an asynchronous Export call has results or status information to return. You must define this method separately.
+            </description>
+          </parameter>
+		  
+        </parameters>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+" />
+        </browsers>
+      </method>
+
+	    <!-- RequestNotification(criteria, callback); -->
+      <method name="RequestNotification" scope="instance" visibility="basic">
+        <return-types>
+          <return-type type="result"/>
+        </return-types>
+
+        <description>
+        	&lt;p&gt;&lt;b&gt;Calendar:&lt;/b&gt;
+				The &lt;code&gt;RequestNotification&lt;/code&gt; method notifies the client when entries are created, updated, or deleted in the specified calendar. If no calendar is specified, the default calendar is used.
+				This is an asynchronous method.&lt;/p&gt;
+
+			&lt;p&gt;&lt;b&gt;Logging:&lt;/b&gt;
+				The &lt;code&gt;RequestNotification&lt;/code&gt; method registers the widget to receive notifications of changes to the event log.
+				This is an asynchronous method.&lt;/p&gt;
+        </description>
+
+        <parameters>
+          <parameter name="criteria" type="criteria" usage="required">
+            <description>
+            	This is an object that specifies which calendar, calendar entries and event log to monitor for changes and when.
+            </description>
+          </parameter>
+		  
+          <parameter name="Callback" type="Function" usage="required">
+            <description>
+				The callback argument is the name of the method that is executed when an asynchronous 'RequestNotification' call has results or status information to return. You must define this method separately.            	
+            </description>
+          </parameter>
+		  
+        </parameters>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+" />
+        </browsers>
+      </method>
+	  
+	    <!-- Cancel(criteria); -->
+      <method name="Cancel" scope="instance" visibility="basic">
+        <return-types>
+          <return-type type="result"/>
+        </return-types>
+
+        <description>
+        	&lt;p&gt;&lt;b&gt;Calendar:&lt;/b&gt;
+				The &lt;code&gt;Cancel&lt;/code&gt; method cancels an ongoing asynchronous call made with a Calendar Service API method.
+				This is a synchronous method.&lt;/p&gt;
+				
+			&lt;p&gt;&lt;b&gt;Contact:&lt;/b&gt;
+				The &lt;code&gt;Cancel&lt;/code&gt; method cancels an outstanding asynchronous call made with a Contacts Service API method.
+				This is a synchronous method.&lt;/p&gt;
+				
+			&lt;p&gt;&lt;b&gt;LandMark:&lt;/b&gt;
+				The &lt;code&gt;Cancel&lt;/code&gt; method cancels an ongoing asynchronous call made with a Landmarks Service API method.
+				This is a synchronous method.&lt;/p&gt;
+	
+			&lt;p&gt;&lt;b&gt;Logging:&lt;/b&gt;
+				The &lt;code&gt;Cancel&lt;/code&gt; method cancels an ongoing asynchronous call made with a Landmarks Service API method.
+				This is a synchronous method.&lt;/p&gt;
+        </description>
+
+        <parameters>
+          <parameter name="criteria" type="criteria" usage="required">
+            <description>
+            	This is an object with the TransactionID property (number). criteria.TransactionID specifies the transaction ID of the asynchronous call to cancel. The transaction ID is the result.TransactionID value that was returned as part of the result of the initial call.
+            </description>
+          </parameter>
+		  		  
+        </parameters>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+" />
+        </browsers>
+      </method>		
+      
+      <!-- Organise(criteria); -->
+      <method name="Organise" scope="instance" visibility="basic">
+        <return-types>
+          <return-type type="result"/>
+        </return-types>
+
+        <description>
+        	&lt;p&gt;&lt;b&gt;Calendar:&lt;/b&gt;
+				The &lt;code&gt;Organise&lt;/code&gt; method adds contacts to a contact group (association) or removes contacts from a contact group (disassociation). The operation is performed on the specified database or, if no database is specified, on the default one.
+				This method can be called both synchronously and asynchronously.&lt;/p&gt;
+
+        	&lt;p&gt;&lt;b&gt;Landmark:&lt;/b&gt;
+				The &lt;code&gt;Organise&lt;/code&gt; method adds landmarks to a landmark category (association) or removes landmarks from a landmark category (disassociation). The same landmark can belong to multiple categories or to no category.
+				This is a synchronous method.&lt;/p&gt;
+        </description>
+
+        <parameters>
+          <parameter name="criteria" type="criteria" usage="required">
+            <description>
+            	This is an object that specifies which contact group/landmarks to organize and how. 
+            </description>
+          </parameter>
+		  
+          <parameter name="Callback" type="Function" usage="optional">
+            <description>
+				The callback argument is the name of the method that is executed when an asynchronous Organise call has results or status information to return. You must define this method separately.            	
+            </description>
+          </parameter>
+		  
+        </parameters>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+" />
+        </browsers>
+      </method>
+
+      <!-- New(criteria); -->
+      <method name="New" scope="instance" visibility="basic">
+        <return-types>
+          <return-type type="result"/>
+        </return-types>
+
+        <description>
+			The &lt;code&gt;New&lt;/code&gt; method creates an empty landmark or landmark category item. You can use the new item as a template.
+			This is a synchronous method.
+        </description>
+
+        <parameters>
+          <parameter name="criteria" type="criteria" usage="required">
+            <description>
+            	This is an object that specifies the type of item to create
+            </description>
+          </parameter>
+        </parameters>
+        
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+" />
+        </browsers>
+        
+      </method>
+      
+    </methods>        
+
+  </class>  
+  <!-- end of IDataSoure -->
+
+  <!-- IAppManager -->
+  <class type="IAppManager">
+
+    <description>
+    	&lt;p&gt;The AppManager Service API allows widgets to access and launch applications on a mobile device.&lt;/p&gt;
+		&lt;p&gt;The API is integrated with WRT through the &lt;code&gt;device&lt;/code&gt; object.&lt;/p&gt;
+		&lt;p&gt;To use the AppManager Service API, your widget must first create a service object for it using the &lt;code&gt;device.getServiceObject()&lt;/code&gt; method.&lt;/p&gt; 
+		&lt;p&gt;Use &lt;code&gt;Service.AppManager&lt;/code&gt; to identify the service provider and &lt;code&gt;IAppManager&lt;/code&gt; to identify the supported interface:&lt;/p&gt;
+
+		&lt;pre&gt;var so = device.getServiceObject("Service.AppManager", "IAppManager");&lt;/pre&gt;
+	</description>
+
+    <browsers>
+      <browser platform="Nokia WRT" version="1.1+" />
+    </browsers>
+
+    <methods>
+
+      <!-- GetList(criteria) -->
+      <method name="GetList" scope="instance" visibility="basic">
+        <return-types>
+          <return-type type="result"/>
+        </return-types>
+
+        <description>
+			The &lt;code&gt;GetList&lt;/code&gt; method retrieves an iterable list of either user-installed applications or all applications on the mobile device, regardless of whether they were preinstalled or installed by the user. 
+			This is a synchronous method.
+        </description>
+
+        <parameters>
+          <parameter name="criteria" type="criteria" usage="required">
+            <description>
+				This is an object that specifies what information is returned about the applications on the device.
+            </description>
+          </parameter>
+        </parameters>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+" />
+        </browsers>
+      </method>
+
+      <!-- Cancel(criteria); -->
+      <method name="Cancel" scope="instance" visibility="basic">
+        <return-types>
+          <return-type type="result"/>
+        </return-types>
+
+        <description>
+			The &lt;code&gt;Cancel&lt;/code&gt; method cancels an outstanding asynchronous call. 
+			If a cancel is sent, but the asynchronous call has already been completed, then &lt;code&gt;result.Errorcode&lt;/code&gt; is set to 0 (success).
+			This is a synchronous method.
+        </description>
+
+        <parameters>
+          <parameter name="criteria" type="criteria" usage="required">
+            <description>
+				This is an object with the &lt;code&gt;TransactionID&lt;/code&gt; property (number). 
+				&lt;code&gt;criteria.TransactionID&lt;/code&gt; specifies the transaction ID of the asynchronous call to cancel. 
+				The transaction ID is the result.TransactionID value that was returned as part of the result of the initial call. 
+            </description>
+          </parameter>
+
+        </parameters>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+" />
+        </browsers>
+      </method>
+
+      <!-- LaunchApp(criteria); -->
+      <method name="LaunchApp" scope="instance" visibility="basic">
+        <return-types>
+          <return-type type="result"/>
+        </return-types>
+
+        <description>
+			The &lt;code&gt;LaunchApp&lt;/code&gt; method launches an application based on a unique ID for the application (UID). 
+			It also provides a way to open a specific document (by specifying a document path), even if it is not the default file type for the application being launched. 
+			For example, you can specify a path to a document with a .txt extension to open in WordPad, even though Notepad is the default application for .txt files.
+			The application can be launched as chained (embedded) or stand-alone. 
+
+			This method can be called both synchronously and asynchronously.
+        </description>
+
+        <parameters>
+        	
+          <parameter name="criteria" type="criteria" usage="required">
+            <description>
+				The criteria object specifies the application to launch.
+				The criteria object has three main properties: ApplicationID, CmdLine, and Options
+            </description>
+          </parameter>
+
+		  <parameter name="callback" type="Function" usage="optional">
+            <description>
+				The callback argument is the name of the method that is executed when an asynchronous LaunchApp call has status information to return. You must define this method separately. 
+				This argument is used only with an asynchronous LaunchApp call.
+            </description>
+		  </parameter>
+
+
+        </parameters>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+" />
+        </browsers>
+      </method>
+      
+      <!-- LaunchDoc(criteria);-->
+      <method name="LaunchDoc" scope="instance" visibility="basic">
+        <return-types>
+          <return-type type="result"/>
+        </return-types>
+
+        <description>
+			The &lt;code&gt;LaunchDoc&lt;/code&gt; method launches an application based on a given document. 
+			This method automatically determines which application to launch for the specified document. 
+			The application can be launched as chained (embedded) or stand-alone.
+			
+			This method can be called both synchronously and asynchronously.
+        </description>
+
+        <parameters>
+        	
+          <parameter name="criteria" type="criteria" usage="required">
+            <description>
+            	This is an object that specifies which application to launch. 
+            </description>
+          </parameter>
+
+		  <parameter name="callback" type="Function" usage="optional">
+            <description>
+			The callback argument is the name of the method that is executed when an asynchronous LaunchDoc call has status information to return. You must define this method separately.				
+			This argument is used only with an asynchronous LaunchDoc call.
+            </description>
+		  </parameter>
+
+        </parameters>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+" />
+        </browsers>
+      </method>
+      
+    </methods>
+
+  </class>
+  <!-- end of IAppManager -->
+  
+	<!-- IMessaging interface  -->
+	<class type="IMessaging">
+
+    	<description>
+	&lt;p&gt;The Messaging Service API allows widgets to send, retrieve, and manage messages using the Messaging Center of a device.&lt;/p&gt; 
+	&lt;p&gt;The API is integrated into WRT through the &lt;code&gt;device&lt;/code&gt; object.&lt;/p&gt;
+
+	&lt;p&gt;To use the Messaging Service API, your widget must first createa service object for it using the &lt;code&gt;device.getServiceObject()&lt;/code&gt; method.&lt;/p&gt; 
+	&lt;p&gt;Use &lt;code&gt;Service.Messaging&lt;/code&gt; to identify the service provider and &lt;code&gt;IMessaging&lt;/code&gt; to identify the supported interface:&lt;/p&gt;
+
+		&lt;pre&gt;var so = device.getServiceObject("Service.Messaging", "IMessaging");&lt;/pre&gt;
+		</description>
+
+    	<browsers>
+      		<browser platform="Nokia WRT" version="1.1+" />
+    	</browsers>
+
+    	<constructors/>
+
+		<methods>
+			<!-- GetList(criteria)-->
+			<method name="GetList" scope="instance" visibility="basic">
+				<return-types>
+					<return-type type="result"/>
+				</return-types>
+				
+				<description>
+					The &lt;code&gt;GetList&lt;/code&gt; method retrieves a list of messaging objects from the Messaging Center of the S60 device. 
+					Each object contains messaging information, that is, header and content data for a single message. 
+					This is a synchronous method. 
+					The criteria object specifies what messaging information is returned and how the returned information is sorted. 
+					The GetList method returns an object that contains the requested messaging information, an error code, and an error message. 
+					To access information about individual messages, iterate through the list of objects contained in ReturnValue attribute of the returned object.
+				</description>
+
+				<parameters>
+					<parameter name="criteria" type="object" usage="required">
+						<description>
+							This is an object that specifies the search criteria. 
+						</description>
+          			</parameter>
+        		</parameters>
+        		<browsers>
+          			<browser platform="Nokia WRT" version="1.1+" />
+        		</browsers>
+      		</method>
+
+	  		<!-- RegisterNotification(criteria, callback)-->
+      		<method name="RegisterNotification" scope="instance" visibility="basic">
+        		<return-types>
+          			<return-type type="result"/>
+        		</return-types>
+        
+        		<description>
+					&lt;p&gt;
+					The &lt;code&gt;RegisterNotification&lt;/code&gt; method registers the widget to receive notifications of new incoming messages. 
+					For each new message, the method returns the header information of that message. 
+					This is an asynchronous method.
+					&lt;/p&gt;
+					
+					&lt;pre&gt;result = so.IMessaging.RegisterNotification(criteria, callback);&lt;/pre&gt;
+			
+					&lt;p&gt;
+					Criteria object that specifies the request for notification of new messages. 
+					The object must contain the Type property (string), and this property must contain the value &lt;code&gt;NewMessage&lt;/code&gt;. 
+					The callback argument is the name of the method that is executed when &lt;code&gt;RegisterNotification&lt;/code&gt; has results or status information to return. 
+					You must define this method separately. 
+					The &lt;code&gt;RegisterNotification&lt;/code&gt; method returns an object that contains the initial return value for the asynchronous call it started. 
+					The actual notification information is returned by the callback method in the ReturnValue property of its result object.
+					&lt;code&gt;RegisterNotification&lt;/code&gt; retrieves new message updates until cancelled with &lt;code&gt;CancelNotification&lt;/code&gt; (or &lt;code&gt;Cancel&lt;/code&gt;). 
+					You can therefore have only one &lt;code&gt;RegisterNotification&lt;/code&gt; call (one instance) pending or in use at any given time.
+					&lt;/p&gt;
+        		</description>
+
+        		<parameters>
+          			<parameter name="criteria" type="object" usage="required">
+            			<description>
+							Criteria object specifies the type and details of the message to send. 
+						</description>
+          			</parameter>
+          			<parameter name="callback" type="function" usage="required">
+            			<description>
+							The callback argument is the name of the method that is executed when an asynchronous Send call has status information to return. You must define this method separately.
+            			</description>
+          			</parameter>
+        		</parameters>
+        		<browsers>
+          			<browser platform="Nokia WRT" version="1.1+" />
+        		</browsers>
+      		</method>
+			
+	  		<!-- CancelNotification(criteria) -->
+      		<method name="CancelNotification" scope="instance" visibility="basic">
+        		<return-types>
+          			<return-type type="result"/>
+        		</return-types>
+
+        		<description>
+					&lt;p&gt;
+					The &lt;code&gt;CancelNotification&lt;/code&gt; method cancels notification of new incoming messages. 
+					This is a synchronous method.
+					&lt;/p&gt;
+					
+					&lt;pre&gt;result = so.IMessaging.CancelNotification(criteria);&lt;/pre&gt;
+
+					&lt;p&gt;
+					The criteria object specifies the request for cancelling notification of new messages. 
+					The object must contain the Type property (string), and this property must contain the value &lt;code&gt;NewMessage&lt;/code&gt;. 
+					The &lt;code&gt;CancelNotification&lt;/code&gt; method returns an object that contains an error code and an error message.
+					&lt;/p&gt;
+        		</description>
+
+        		<parameters>
+          			<parameter name="criteria" type="object" usage="required">
+            			<description>
+			The criteria object specifies the request for cancelling notification of new messages. The object must contain the Type property (string), and this property must contain the value "NewMessage". 
+            			</description>
+          			</parameter>
+        		</parameters>
+        		<browsers>
+          			<browser platform="Nokia WRT" version="1.1+" />
+        		</browsers>
+      		</method>
+
+	  		<!-- Send(criteria, callback)-->
+      		<method name="Send" scope="instance" visibility="basic">
+        		<return-types>
+          			<return-type type="result"/>
+        		</return-types>
+        
+        		<description>
+		&lt;p&gt;
+		The &lt;code&gt;Send&lt;/code&gt; method sends an SMS or MMS message. 
+		This method can be called both synchronously and asynchronously. 
+		&lt;/p&gt;
+		
+		&lt;p&gt;
+		For synchronous calls: 
+		&lt;/p&gt;
+		
+		&lt;pre&gt;result = so.IMessaging.Send(criteria);&lt;/pre&gt;
+		
+		&lt;p&gt;	
+		For asynchronous calls:
+		&lt;/p&gt;
+		
+		&lt;pre&gt;result = so.IMessaging.Send(criteria, callback);&lt;/pre&gt;
+		
+		&lt;p&gt;	
+		Criteria object specifies the type and details of the message to send. 
+		The callback argument is the name of the method that is executed when an asynchronous &lt;code&gt;Send&lt;/code&gt; call has status information to return. 
+		You must define this method separately.
+		If synchronous, the method returns an object that contains an error code and an error message. 
+		If asynchronous, the method returns an object that contains a transaction ID for the callback instance, an error code, and an error message. 
+		When the asynchronous call has completed, callback returns an object that contains an error code and an error message.
+		&lt;/p&gt;
+        		</description>
+
+        		<parameters>
+          			<parameter name="criteria" type="object" usage="required">
+            			<description>
+							Criteria object specifies the type and details of the message to send. 
+						</description>
+          			</parameter>
+          			<parameter name="callback" type="function" usage="optional">
+            			<description>
+							The callback argument is the name of the method that is executed when an asynchronous Send call has status information to return. You must define this method separately.
+            			</description>
+          			</parameter>
+        		</parameters>
+        		<browsers>
+          			<browser platform="Nokia WRT" version="1.1+" />
+        		</browsers>
+      		</method>
+
+      		<!-- Cancel(criteria) -->
+      		<method name="Cancel" scope="instance" visibility="basic">
+        <return-types>
+          <return-type type="result"/>
+        </return-types>
+
+        <description>
+		The &lt;code&gt;Cancel&lt;/code&gt; method cancels an outstanding asynchronous &lt;code&gt;Send&lt;/code&gt; or &lt;code&gt;RegisterNotification&lt;/code&gt; call. 
+		To cancel a &lt;code&gt;RegisterNotification&lt;/code&gt; call, use &lt;code&gt;CancelNotification&lt;/code&gt; instead, as it provides a more convenient way of doing this. 
+		This is a synchronous method. 
+		The criteria object has &lt;code&gt;TransactionID&lt;/code&gt; property which specifies the transaction ID of the &lt;code&gt;Send&lt;/code&gt; or &lt;code&gt;RegisterNotification&lt;/code&gt; call to cancel. 
+		The transaction ID is the same &lt;code&gt;TransactionID&lt;/code&gt; value that was returned as part of the result of the initial call. 
+		The &lt;code&gt;Cancel&lt;/code&gt; method returns an object that contains an error code and an error message.
+        </description>
+
+        <parameters>
+          <parameter name="criteria" type="object" usage="required">
+            <description>
+			The criteria object has TransactionID property which specifies the transaction ID of the Send or RegisterNotification call to cancel. The transaction ID is the same TransactionID value that was returned as part of the result of the initial call.
+            </description>
+          </parameter>
+        </parameters>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+" />
+        </browsers>
+      </method>
+
+		<!-- ChangeStatus(criteria) -->
+		<method name="ChangeStatus" scope="instance" visibility="basic">
+		
+			<return-types>
+				<return-type type="result"/>
+			</return-types>
+
+    	    <description>
+		&lt;p&gt;
+			The &lt;code&gt;ChangeStatus&lt;/code&gt; method changes the read status of a message. 
+			The status can be "Read", "Unread", "Replied", or "Forwarded".
+			This is a synchronous method.
+		&lt;/p&gt;
+		
+		&lt;pre&gt;result = so.IMessaging.ChangeStatus(criteria);&lt;/pre&gt;
+		
+		&lt;p&gt;	
+		Criteria object specifies the message whose status to change and the new status. 
+		The &lt;code&gt;ChangeStatus&lt;/code&gt; method returns an object that contains an error code and an error message.
+		&lt;/p&gt;
+        	</description>
+
+				<parameters>
+					<parameter name="criteria" type="object" usage="required">
+						<description>
+						Criteria object specifies the message whose status to change and the new status. The ChangeStatus method returns an object that contains an error code and an error message.
+						</description>
+					</parameter>
+				</parameters>
+		
+				<browsers>
+					<browser platform="Nokia WRT" version="1.1+" />
+				</browsers>
+		
+			</method>
+
+			<!-- Delete (criteria)-->
+			<method name="Delete" scope="instance" visibility="basic">
+
+				<return-types>
+					<return-type type="result"/>
+				</return-types>
+        
+				<description>
+		&lt;p&gt;
+			The &lt;code&gt;Delete&lt;/code&gt; method deletes a message.
+			This is a synchronous method.
+		&lt;/p&gt;	
+		
+		&lt;pre&gt;result = so.IMessaging.Delete(criteria);&lt;/pre&gt;
+		
+		&lt;p&gt;
+			The criteria object has &lt;code&gt;messageId&lt;/code&gt; attribute that specifies the message to delete. 
+			The &lt;code&gt;Delete&lt;/code&gt; method returns an object that contains an error code and an error message.
+		&lt;/p&gt;
+				</description>
+
+				<parameters>
+					<parameter name="criteria" type="object" usage="required">
+						<description>
+						The criteria object has messageId attribute that specifies the message to delete.  
+						</description>
+					</parameter>
+				</parameters>
+				
+				<browsers>
+					<browser platform="Nokia WRT" version="1.1+" />
+				</browsers>
+			</method>
+		</methods>        
+
+	</class>  
+	<!-- end of IMessaging -->
+
+	<!-- ISysInfo interface  -->
+	<class type="ISysInfo">
+
+    	<description>
+			&lt;p&gt;The SystemInfo Service API allows widgets to access and modify system information on a device.&lt;/p&gt; 
+			&lt;p&gt;The API is integrated into WRT through the &lt;code&gt;device&lt;/code&gt; object.&lt;/p&gt;
+			&lt;p&gt;To use the SystemInfo Service API, your widget must first create a service object for it using the &lt;code&gt;device.getServiceObject()&lt;/code&gt; method.&lt;/p&gt; 
+			&lt;p&gt;Use &lt;code&gt;Service.SysInfo&lt;/code&gt; to identify the service provider and &lt;code&gt;ISysInfo&lt;/code&gt; to identify the supported interface:&lt;/p&gt;
+			&lt;pre&gt;var so = device.getServiceObject("Service.SysInfo", "ISysInfo");&lt;/pre&gt;
+		</description>
+
+    	<browsers>
+      		<browser platform="Nokia WRT" version="1.1+" />
+    	</browsers>
+
+    	<constructors/>
+
+		<methods>
+			<!-- GetInfo(criteria, callback); -->
+			<method name="GetInfo" scope="instance" visibility="basic">
+				<return-types>
+					<return-type type="result"/>
+				</return-types>
+
+				<description>
+					The &lt;code&gt;GetInfo&lt;/code&gt; method retrieves information about a system attribute.
+					This method can be called both synchronously and asynchronously.
+				</description>
+
+				<parameters>
+					<parameter name="criteria" type="object" usage="required">
+						<description>
+							This is an object that specifies the search criteria. 
+						</description>
+          			</parameter>
+					
+          			<parameter name="callback" type="function" usage="optional">
+            			<description>
+							The callback argument is the name of the method that is executed when an asynchronous Send call has status information to return. You must define this method separately.
+            			</description>
+          			</parameter>
+
+        		</parameters>
+        		<browsers>
+          			<browser platform="Nokia WRT" version="1.1+" />
+        		</browsers>
+      		</method>
+
+	  		<!-- SetInfo(criteria); -->
+      		<method name="SetInfo" scope="instance" visibility="basic">
+        		<return-types>
+          			<return-type type="result"/>
+        		</return-types>
+        
+        		<description>
+					The &lt;code&gt;SetInfo&lt;/code&gt; method modifies the value of a system attribute.
+					This is a synchronous method.
+        		</description>
+
+        		<parameters>
+          			<parameter name="criteria" type="object" usage="required">
+            			<description>
+							This is an object that specifies the new value for the system attribute. 
+						</description>
+          			</parameter>
+        		</parameters>
+        		<browsers>
+          			<browser platform="Nokia WRT" version="1.1+" />
+        		</browsers>
+      		</method>
+			
+	  		<!-- GetNotification(criteria, callback); -->
+      		<method name="GetNotification" scope="instance" visibility="basic">
+        		<return-types>
+          			<return-type type="result"/>
+        		</return-types>
+
+        		<description>
+					The &lt;code&gt;GetNotification&lt;/code&gt; method notifies the client when the value of a system attribute is changed.
+					This is an asynchronous method.
+        		</description>
+
+        		<parameters>
+          			<parameter name="criteria" type="object" usage="required">
+            			<description>
+							This is an object that specifies the system attribute to monitor for changes.  
+            			</description>
+          			</parameter>
+					
+          			<parameter name="callback" type="function" usage="required">
+            			<description>
+							The callback argument is the name of the method that is executed when a GetNotification call has results or status information to return.
+            			</description>
+          			</parameter>
+        		</parameters>
+        		<browsers>
+          			<browser platform="Nokia WRT" version="1.1+" />
+        		</browsers>
+      		</method>
+
+      		<!-- Cancel(criteria) -->
+			<method name="Cancel" scope="instance" visibility="basic">
+				
+				<return-types>
+					<return-type type="result"/>
+				</return-types>
+
+				<description>
+					The &lt;code&gt;Cancel&lt;/code&gt; method cancels an ongoing asynchronous call made with a SystemInfo Service API method.
+					This is a synchronous method.
+		        </description>
+
+				<parameters>
+					<parameter name="criteria" type="object" usage="required">
+						<description>
+							This is an object with the TransactionID property (number). criteria.TransactionID specifies the transaction ID of the asynchronous call to cancel. The transaction ID is the result.TransactionID value that was returned as part of the result of the initial call.
+						</description>
+					</parameter>
+				</parameters>
+        		<browsers>
+          			<browser platform="Nokia WRT" version="1.1+" />
+        		</browsers>
+      		</method>
+		</methods>        
+	</class>  
+	<!-- end of ISysInfo -->
+
+	<!-- ILocation API -->
+	<class type="ILocation">
+	
+	    <description>
+	&lt;p&gt;The Location Service API allows widgets to retrieve information about the physical location of a device and to perform calculations based on location information.&lt;/p&gt; 
+	&lt;p&gt;The API is integrated into WRT through the &lt;code&gt;device&lt;/code&gt; object.&lt;/p&gt;
+
+	&lt;p&gt;To use the Location Service API, your widget must first create a service object for it using the &lt;code&gt;device.getServiceObject()&lt;/code&gt; method.&lt;/p&gt; 
+	&lt;p&gt;Use &lt;code&gt;Service.Location&lt;/code&gt; to identify the service provider and &lt;code&gt;ILocation&lt;/code&gt; to identify the supported interface:&lt;/p&gt;
+
+		&lt;pre&gt;var so = device.getServiceObject("Service.Location", "ILocation");&lt;/pre&gt;
+		</description>
+	
+	    <browsers>
+	      <browser platform="Nokia WRT" version="1.1+" />
+	    </browsers>
+	
+	    <constructors/>
+	
+	    <methods>
+	      
+	      <!--  GetLocation(criteria, callback) -->
+	      <method name="GetLocation" scope="instance" visibility="basic">
+	        <return-types>
+	          <return-type type="result"/>
+	        </return-types>
+	        
+	        <description>
+			&lt;p&gt;
+			The &lt;code&gt;GetLocation&lt;/code&gt; method retrieves the current location of the device. 
+			This method can be called both synchronously and asynchronously. 
+			&lt;/p&gt;
+			
+			&lt;p&gt;
+			For synchronous calls:
+			&lt;/p&gt;
+			&lt;pre&gt;result = so.ILocation.GetLocation(criteria);&lt;/pre&gt;
+			
+			&lt;p&gt;	
+			For asynchronous calls:
+			&lt;/p&gt;
+			&lt;pre&gt;result = so.ILocation.GetLocation(criteria, callback);&lt;/pre&gt;
+	
+			&lt;p&gt;
+			If synchronous, the &lt;code&gt;GetLocation&lt;/code&gt; method returns an object that contains the requested location information, an error code, and an error message. 
+			If asynchronous, the &lt;code&gt;GetLocation&lt;/code&gt; method returns an object that contains the initial return value for the asynchronous call it started. 
+			The actual location information is returned by the callback method in the ReturnValue property of its result object. 
+			The availability of specific location information depends on the underlying GPS technology. 
+			Other factors, such as the number of satellites available for a location fix, also affect what information can be returned. 
+			You can change the positioning system used by an S60 device from the Settings > General > Positioning > Positioning methods menu. 
+			It takes time to retrieve the initial position fix. Subsequent requests are faster.
+			This criteria object specifies what type of device location information is returned and how.
+			The callback argument is the name of the method that is executed when an asynchronous GetLocation call has results or status information to return. 
+			You must define this method separately. 
+			This argument is used only with an asynchronous &lt;code&gt;GetLocation&lt;/code&gt; call. 
+			For more information about the criteria and returned object properties and how to define them refer to WDL Help documentation.
+			&lt;/p&gt;
+	        </description>
+	
+	        <parameters>
+	          <parameter name="criteria" type="object" usage="required">
+	            <description>
+				This is an object that specifies what type of device location information is returned and how.
+	            </description>
+	          </parameter>
+	          <parameter name="callback" type="function" usage="optional">
+	            <description>
+				The callback argument is the name of the method that is executed when an asynchronous GetLocation call has results or status information to return. You must define this method separately. This argument is used only with an asynchronous GetLocation call.
+	            </description>
+	          </parameter>
+	        </parameters>
+	        <browsers>
+	          <browser platform="Nokia WRT" version="1.1+" />
+	        </browsers>
+	      </method>
+	
+		  <!--Trace(criteria, callback)-->
+	      <method name="Trace" scope="instance" visibility="basic">
+	        <return-types>
+	          <return-type type="result"/>
+	        </return-types>
+	        
+	        <description>
+			&lt;p&gt;
+			The &lt;code&gt;Trace&lt;/code&gt; method retrieves periodic updates about the current location of the device based on a predefined update interval. 
+			This is an asynchronous method. 
+			&lt;/p&gt;
+			
+			&lt;pre&gt;result = so.ILocation.Trace(criteria, callback);&lt;/pre&gt;
+			
+			&lt;p&gt;
+			The &lt;code&gt;Trace&lt;/code&gt; method returns an object that contains the initial return value for the asynchronous call it started. 
+			The actual location information is returned by the callback method in the ReturnValue property of its result object.
+			&lt;/p&gt;
+			
+			&lt;p&gt;
+			&lt;code&gt;Trace&lt;/code&gt; retrieves location updates until cancelled with &lt;code&gt;CancelNotification&lt;/code&gt;. 
+			You can therefore have only one &lt;code&gt;Trace&lt;/code&gt; call (one instance) pending or in use at any given time. 
+			The availability of specific location information depends on the underlying GPS technology. 
+			Other factors, such as the number of satellites available for a location fix, also affect what information can be returned. 
+			You can change the positioning system used by an S60 device from the Settings > General > Positioning > Positioning methods menu. 
+			It takes time to retrieve the initial position fix. Subsequent requests are faster.
+			The criteria object specifies what type of device location information is returned and how. Note that these input properties are similar to what the GetLocation method uses. 
+			The callback argument is the name of the method that is executed when Trace has results or status information to return. You must define this method separately.
+			For more information about the criteria and returned object properties and how to define them refer to WDL Help documentation.
+			&lt;/p&gt;
+	        </description>
+	
+	        <parameters>
+	          <parameter name="criteria" type="object" usage="required">
+	            <description>
+				This is an object that specifies what type of device location information is returned and how. Note that these input properties are similar to what the GetLocation method uses.</description>
+	          </parameter>
+	          <parameter name="callback" type="function" usage="required">
+	            <description>
+				The callback argument is the name of the method that is executed when Trace has results or status information to return. You must define this method separately.
+	            </description>
+	          </parameter>
+	        </parameters>
+	        <browsers>
+	          <browser platform="Nokia WRT" version="1.1+" />
+	        </browsers>
+	      </method>
+	
+	      <!-- Calculate(criteria) -->
+	      <method name="Calculate" scope="instance" visibility="basic">
+	        <return-types>
+	          <return-type type="result"/>
+	        </return-types>
+	
+	        <description>
+			&lt;p&gt;
+			The &lt;code&gt;Calculate&lt;/code&gt; method performs mathematical calculations based on a source location and a target location. 
+			This is a synchronous method.
+			&lt;/p&gt;
+			
+			&lt;pre&gt;result = so.ILocation.Calculate(criteria);&lt;/pre&gt;
+			
+			&lt;p&gt;
+			The &lt;code&gt;Calculate&lt;/code&gt; method returns an object that contains the calculation results, an error code, and an error message. 
+			The criteria object specifies the mathematical operation to perform and the input values to use in the operation. 
+			For more information about the criteria and returned object properties and how to define them refer to WDL Help documentation.
+			&lt;/p&gt;
+	        </description>
+	
+	        <parameters>
+	          <parameter name="criteria" type="Object" usage="required">
+	            <description>
+				This is an object that specifies the mathematical operation to perform and the input values to use in the operation.
+				</description>
+	          </parameter>
+	        </parameters>
+	        <browsers>
+	          <browser platform="Nokia WRT" version="1.1+" />
+	        </browsers>
+	      </method>
+	
+	      <!-- CancelNotification(criteria) -->
+	      <method name="CancelNotification" scope="instance" visibility="basic">
+	        <return-types>
+	          <return-type type="result"/>
+	        </return-types>
+	
+	        <description>
+			&lt;p&gt;
+			The &lt;code&gt;CancelNotification&lt;/code&gt; method cancels an outstanding asynchronous call. 
+			This is a synchronous method.
+			&lt;/p&gt; 
+			
+			&lt;pre&gt;result = so.ILocation.CancelNotification(criteria);&lt;/pre&gt;
+			
+			&lt;p&gt;
+			The criteria object specifies whether to cancel a GetLocation call or a Trace call. 
+			The object must contain the &lt;code&gt;CancelRequestType&lt;/code&gt; property (string) that is used to specify the type of call to cancel.
+			&lt;/p&gt;
+			
+			&lt;p&gt; 
+			The possible values for &lt;code&gt;criteria.CancelRequestType&lt;/code&gt; are:
+			&lt;ul&gt; 
+				&lt;li&gt;&lt;code&gt;GetLocCancel&lt;/code&gt; cancels an asynchronous &lt;code&gt;GetLocation&lt;/code&gt; call.&lt;/li&gt; 
+				&lt;li&gt;&lt;code&gt;TraceCancel&lt;/code&gt; cancels a &lt;code&gt;Trace&lt;/code&gt; call.&lt;/li&gt; 
+			&lt;/ul&gt;
+			&lt;/p&gt;
+			
+			&lt;p&gt;	
+			The &lt;code&gt;CancelNotification&lt;/code&gt; method returns an object that contains an error code and an error message. 
+			For more information about the criteria and returned object properties and how to define them refer to WDL Help documentation.
+			&lt;/p&gt; 
+	        </description>
+	
+	        <parameters>
+	          <parameter name="criteria" type="object" usage="required">
+	            <description>
+				This is an object that specifies whether to cancel a GetLocation call or a Trace call. The object must contain the CancelRequestType property (string) that is used to specify the type of call to cancel. The possible values for criteria.CancelRequestType are: "GetLocCancel" cancels an asynchronous GetLocation call. "TraceCancel" cancels a Trace call.
+	            </description>
+	          </parameter>
+	        </parameters>
+	        <browsers>
+	          <browser platform="Nokia WRT" version="1.1+" />
+	        </browsers>
+	      </method>
+	
+	    </methods>        
+	
+	  </class>  
+	<!-- end of ILocation API -->
+
+	<!-- ISensor interface  -->
+	<class type="ISensor">
+
+    	<description>
+	&lt;p&gt;
+	The Sensor Service API allows widgets to access data provided by the physical sensors of a device.
+	&lt;/p&gt; 
+	&lt;p&gt;
+	The data from a given sensor is mapped to one or more sensor channels, which the API can listen to. 
+	The available sensors depend on the device.
+	&lt;/p&gt; 
+	&lt;p&gt;
+	The API is integrated into WRT through the &lt;code&gt;device&lt;/code&gt; object.
+	&lt;/p&gt; 
+	&lt;p&gt;
+	To use the Sensor Service API, your widget must first create a service object for it using the &lt;code&gt;device.getServiceObject()&lt;/code&gt; method.
+	&lt;/p&gt; 
+	&lt;p&gt;
+	Use &lt;code&gt;Service.Sensor&lt;/code&gt; to identify the service provider and &lt;code&gt;ISensor&lt;/code&gt; to identify the supported interface:
+	&lt;/p&gt;
+	 
+	&lt;pre&gt;so = device.getServiceObject("Service.Sensor", "ISensor");&lt;/pre&gt;	
+		</description>
+
+    	<browsers>
+      		<browser platform="Nokia WRT" version="1.1+" />
+    	</browsers>
+
+    	<constructors/>
+
+    	<methods>
+      
+	  	<!-- FindSensorChannel (criteria)-->
+      	<method name="FindSensorChannel" scope="instance" visibility="basic">
+        	<return-types>
+          		<return-type type="result"/>
+        	</return-types>
+        
+        	<description>
+		&lt;p&gt;
+		The &lt;code&gt;FindSensorChannel&lt;/code&gt; method searches for sensor channels available on the device. 
+		This is a synchronous method.
+		&lt;/p&gt;
+		 
+		&lt;pre&gt;result = so.ISensor.FindSensorChannel(criteria);&lt;/pre&gt;
+		
+		&lt;p&gt;
+		The criteria object specifies the search criteria. 
+		The &lt;code&gt;FindSensorChannel&lt;/code&gt; method returns an object that contains the requested sensor channel information, an error code, and an error message.
+		&lt;/p&gt;
+        	</description>
+
+        	<parameters>
+          		<parameter name="criteria" type="object" usage="required">
+            		<description>
+						This is an object that specifies the search criteria. 
+					</description>
+          		</parameter>
+        	</parameters>
+			
+        	<browsers>
+          		<browser platform="Nokia WRT" version="1.1+" />
+        	</browsers>
+			
+      	</method>
+
+	  	<!-- RegisterForNotification(criteria, callback)-->
+      	<method name="RegisterForNotification" scope="instance" visibility="basic">
+        	<return-types>
+          		<return-type type="result"/>
+        	</return-types>
+        
+        	<description>
+		&lt;p&gt;
+		The &lt;code&gt;RegisterForNotification&lt;/code&gt; method registers the client to receive data from one sensor channel. 
+		This is an asynchronous method.
+		&lt;/p&gt;
+		
+		&lt;pre&gt;result = so.ISensor.RegisterForNotification(criteria, callback);&lt;/pre&gt;
+		
+		&lt;p&gt;
+		The &lt;code&gt;RegisterForNotification&lt;/code&gt; method returns an object that contains the initial return value for the asynchronous call it started. 
+		The actual sensor data is returned by the callback method in the ReturnValue property of its result object.
+		&lt;/p&gt;
+        	</description>
+
+        	<parameters>
+          		<parameter name="criteria" type="object" usage="required">
+            		<description>
+			This is an object that specifies the sensor channel to listen for data. 
+					</description>
+          		</parameter>
+          		<parameter name="callback" type="function" usage="required">
+            		<description>
+						The callback argument is the name of the method that is executed when a RegisterForNotification call has results or status information to return. You must define this method separately.
+            		</description>
+          		</parameter>
+        	</parameters>
+        	<browsers>
+          		<browser platform="Nokia WRT" version="1.1+" />
+        	</browsers>
+      </method>
+
+	      <!-- Cancel(criteria) -->
+	      <method name="Cancel" scope="instance" visibility="basic">
+	        <return-types>
+	          <return-type type="result"/>
+	        </return-types>
+	
+	        <description>
+			&lt;p&gt;
+			The &lt;code&gt;Cancel&lt;/code&gt; method stops an ongoing &lt;code&gt;RegisterForNotification&lt;/code&gt; call. 
+			This is a synchronous method.
+			&lt;/p&gt;
+			
+			&lt;pre&gt;result = so.ISensor.Cancel(criteria);&lt;/pre&gt;
+			
+			&lt;p&gt;
+			The criteria object has the &lt;code&gt;TransactionID&lt;/code&gt; property which specifies the transaction ID of the &lt;code&gt;RegisterForNotification&lt;/code&gt; call to cancel. 
+			The transaction ID is the value that was returned as part of the result of the initial call. 
+			The &lt;code&gt;Cancel&lt;/code&gt; method returns an object that contains an error code and an error message.
+			&lt;/p&gt;
+	        </description>
+	
+	        <parameters>
+	          <parameter name="criteria" type="object" usage="required">
+	            <description>
+				This is an object with the TransactionID property (number). criteria.TransactionID specifies the transaction ID of the RegisterForNotification call to cancel. The transaction ID is the result.TransactionID value that was returned as part of the result of the initial call.
+	            </description>
+	          </parameter>
+	        </parameters>
+	        <browsers>
+	          <browser platform="Nokia WRT" version="1.1+" />
+	        </browsers>
+	      </method>
+	
+		  <!-- GetChannelProperty (criteria)-->
+	      <method name="GetChannelProperty" scope="instance" visibility="basic">
+	        <return-types>
+	          <return-type type="result"/>
+	        </return-types>
+	        
+	        <description>
+			&lt;p&gt;
+			The &lt;code&gt;GetChannelProperty&lt;/code&gt; method retrieves information about a sensor channel property. 
+			This is a synchronous method.
+			&lt;/p&gt;
+			 
+			&lt;pre&gt;result = so.ISensor.GetChannelProperty(criteria);&lt;/pre&gt;
+			
+			&lt;p&gt;
+			This is an object that specifies which sensor channel property to retrieve information about. 
+			The &lt;code&gt;GetChannelProperty&lt;/code&gt; method returns an object that contains the requested channel property information, an error code, and an error message.
+			&lt;/p&gt;
+			
+	        </description>
+	
+	        <parameters>
+	          <parameter name="criteria" type="object" usage="required">
+	            <description>
+				This is an object that specifies which sensor channel property to retrieve information about. 
+				</description>
+	          </parameter>
+	        </parameters>
+	        <browsers>
+	          <browser platform="Nokia WRT" version="1.1+" />
+	        </browsers>
+	      </method>
+		  
+		</methods>        
+
+ 	</class>  
+	<!-- end of ISensor  -->
+
+  <!-- serviceObject  -->
+  <class type="serviceObject">
+    <description>
+      Service Object
+    </description>
+
+    <browsers>
+      <browser platform="Nokia WRT" version="1.1+" />
+    </browsers>
+
+    <constructors>
+      <constructor scope="instance">
+        <description>Service Object</description>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+"/>
+        </browsers>
+        <parameters/>
+        <return-types>
+          <return-type type="serviceObject"/>
+        </return-types>
+      </constructor>
+    </constructors>
+
+    <properties>
+
+      <property name="IDataSource" type="IDataSource" scope="instance" access="read-write" visibility="basic">
+        <description>
+    	This Service API allows widgets to:
+		&lt;p&gt;
+		&lt;ul&gt;
+		 	&lt;li&gt;access, create, and manage calendars/calendar entries,&lt;/li&gt;
+			&lt;li&gt;access and manage information about contacts,&lt;/li&gt;
+			&lt;li&gt;access and manage information about landmarks and landmark categories,&lt;/li&gt;
+			&lt;li&gt;add, read, and delete logging events such as call logs, messaging logs, and so forth,&lt;/li&gt;
+			&lt;li&gt;retrieve information (metadata) about the media files stored in the Media Gallery of a device.&lt;/li&gt;
+		&lt;/ul&gt;
+		&lt;/p&gt;
+		&lt;p&gt;
+		To use the &lt;code&gt;IDataSource&lt;/code&gt; Service API, your widget must first create a service object for it using the &lt;code&gt;device.getServiceObject()&lt;/code&gt; method.
+		&lt;/p&gt;
+		&lt;p&gt; 
+		Use &lt;code&gt;Service.Calendar&lt;/code&gt; or &lt;code&gt;Service.Contact&lt;/code&gt; or &lt;code&gt;Service.Landmarks&lt;/code&gt; or &lt;code&gt;Service.Logging&lt;/code&gt; or &lt;code&gt;Service.MediaManagement&lt;/code&gt; to identify the service provider and &lt;code&gt;IDataSource&lt;/code&gt; to identify the supported interface:
+		&lt;/p&gt;
+		
+		&lt;pre&gt;var so = device.getServiceObject("Service.Calendar", "IDataSource");&lt;/pre&gt;		
+        </description>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+"/>
+        </browsers>
+      </property>
+
+      <property name="IAppManager" type="IAppManager" scope="instance" access="read-write" visibility="basic">
+        <description>
+    	&lt;p&gt;The AppManager Service API allows widgets to access and launch applications on a mobile device.&lt;/p&gt;
+		&lt;p&gt;The API is integrated with WRT through the &lt;code&gt;device&lt;/code&gt; object.&lt;/p&gt;
+		&lt;p&gt;To use the AppManager Service API, your widget must first create a service object for it using the &lt;code&gt;device.getServiceObject()&lt;/code&gt; method.&lt;/p&gt; 
+		&lt;p&gt;Use &lt;code&gt;Service.AppManager&lt;/code&gt; to identify the service provider and &lt;code&gt;IAppManager&lt;/code&gt; to identify the supported interface:&lt;/p&gt;
+
+		&lt;pre&gt;var so = device.getServiceObject("Service.AppManager", "IAppManager");&lt;/pre&gt;
+        </description>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+"/>
+        </browsers>
+      </property>
+
+      <property name="IMessaging" type="IMessaging" scope="instance" access="read-write" visibility="basic">
+        <description>
+	&lt;p&gt;The Messaging Service API allows widgets to send, retrieve, and manage messages using the Messaging Center of a device.&lt;/p&gt; 
+	&lt;p&gt;The API is integrated into WRT through the &lt;code&gt;device&lt;/code&gt; object.&lt;/p&gt;
+
+	&lt;p&gt;To use the Messaging Service API, your widget must first createa service object for it using the &lt;code&gt;device.getServiceObject()&lt;/code&gt; method.&lt;/p&gt; 
+	&lt;p&gt;Use &lt;code&gt;Service.Messaging&lt;/code&gt; to identify the service provider and &lt;code&gt;IMessaging&lt;/code&gt; to identify the supported interface:&lt;/p&gt;
+
+		&lt;pre&gt;var so = device.getServiceObject("Service.Messaging", "IMessaging");&lt;/pre&gt;
+
+        </description>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+"/>
+        </browsers>
+      </property>
+
+      <property name="ISysInfo" type="ISysInfo" scope="instance" access="read-write" visibility="basic">
+        <description>
+			&lt;p&gt;The SystemInfo Service API allows widgets to access and modify system information on a device.&lt;/p&gt; 
+			&lt;p&gt;The API is integrated into WRT through the &lt;code&gt;device&lt;/code&gt; object.&lt;/p&gt;
+			&lt;p&gt;To use the SystemInfo Service API, your widget must first create a service object for it using the &lt;code&gt;device.getServiceObject()&lt;/code&gt; method.&lt;/p&gt; 
+			&lt;p&gt;Use &lt;code&gt;Service.SysInfo&lt;/code&gt; to identify the service provider and &lt;code&gt;ISysInfo&lt;/code&gt; to identify the supported interface:&lt;/p&gt;
+			&lt;pre&gt;var so = device.getServiceObject("Service.SysInfo", "ISysInfo");&lt;/pre&gt;
+        </description>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+"/>
+        </browsers>
+      </property>
+
+      <property name="ILocation" type="ILocation" scope="instance" access="read-write" visibility="basic">
+        <description>
+	&lt;p&gt;The Location Service API allows widgets to retrieve information about the physical location of a device and to perform calculations based on location information.&lt;/p&gt; 
+	&lt;p&gt;The API is integrated into WRT through the &lt;code&gt;device&lt;/code&gt; object.&lt;/p&gt;
+
+	&lt;p&gt;To use the Location Service API, your widget must first create a service object for it using the &lt;code&gt;device.getServiceObject()&lt;/code&gt; method.&lt;/p&gt; 
+	&lt;p&gt;Use &lt;code&gt;Service.Location&lt;/code&gt; to identify the service provider and &lt;code&gt;ILocation&lt;/code&gt; to identify the supported interface:&lt;/p&gt;
+
+		&lt;pre&gt;var so = device.getServiceObject("Service.Location", "ILocation");&lt;/pre&gt;
+ 
+        </description>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+"/>
+        </browsers>
+      </property>
+	  
+	  <property name="ISensor" type="ISensor" scope="instance" access="read-write" visibility="basic">
+        <description>
+	&lt;p&gt;The Sensor Service API allows widgets to access data provided by the physical sensors of a device.&lt;/p&gt; 
+	&lt;p&gt;The data from a given sensor is mapped to one or more sensor channels, which the API can listen to. 
+	The available sensors depend on the device.&lt;/p&gt; 
+	&lt;p&gt;The API is integrated into WRT through the &lt;code&gt;device&lt;/code&gt; object.&lt;/p&gt; 
+	&lt;p&gt;To use the Sensor Service API, your widget must first create a service object for it using the &lt;code&gt;device.getServiceObject()&lt;/code&gt; method.&lt;/p&gt; 
+	&lt;p&gt;Use &lt;code&gt;Service.Sensor&lt;/code&gt; to identify the service provider and &lt;code&gt;ISensor&lt;/code&gt; to identify the supported interface:&lt;/p&gt;
+	 
+	&lt;pre&gt;so = device.getServiceObject("Service.Sensor", "ISensor");&lt;/pre&gt;	  
+        </description>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+"/>
+        </browsers>
+      </property>
+
+    </properties>
+  </class>
+  <!-- end of serviceObject  -->
+  
+  <!-- Device -->
+  <class type="device">
+
+    <description>
+		The &lt;code&gt;device&lt;/code&gt; object is a built-in JavaScript object in the widget engine. 
+		It was introduced in WRT 1.1 to allow widgets access to S60 Platform Services through Service APIs. 
+		The &lt;code&gt;device&lt;/code&gt; object is used to create service objects for specific Service APIs. 
+		These service objects can then be used to access the services made available through the Service APIs.	
+	</description>
+
+    <browsers>
+      <browser platform="Nokia WRT" version="1.1+" />
+    </browsers>
+
+
+    <constructors>
+      <constructor scope="instance">
+		<description>
+			The &lt;code&gt;device&lt;/code&gt; object is a built-in JavaScript object in the widget engine. 
+			It was introduced in WRT 1.1 to allow widgets access to S60 Platform Services through Service APIs. 
+			The &lt;code&gt;device&lt;/code&gt; object is used to create service objects for specific Service APIs. 
+			These service objects can then be used to access the services made available through the Service APIs.
+		</description>
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+"/>
+        </browsers>
+        <parameters/>
+        <return-types>
+          <return-type type="device"/>
+        </return-types>
+      </constructor>
+    </constructors>
+
+    <methods>
+
+      <method name="getServiceObject" scope="" visibility="basic">
+
+        <return-types>
+          <return-type type="serviceObject"/>
+        </return-types>
+
+        <description>
+          The &lt;code&gt;getServiceObject&lt;/code&gt; method creates an object that is used to access the services made available through a Service API. 
+		  This object is referred to as a &lt;b&gt;service object&lt;/b&gt;.
+        </description>
+
+        <parameters>
+
+          <parameter name="provider" type="String" usage="required">
+
+            <values>
+              <value name="Service.AppManager" description="Application Manager." />
+              <value name="Service.SysInfo" description="System Information." />
+              <value name="Service.Sensor" description="Sensor." />
+              <value name="Service.Messaging" description="Messaging." />
+              <value name="Service.MediaManagement" description="Media Management." />
+              <value name="Service.Logging" description="Logging." />
+              <value name="Service.Location" description="Location." />
+              <value name="Service.Calendar" description="Calendar." />
+              <value name="Service.Contact" description="Contact." />
+            </values>
+			
+            <description>
+              This is a text string that defines the service provider name, that is, the name of the type of service object to create.
+			  Possible values : "Service.AppManager", 
+			  					"Service.SysInfo", 
+								"Service.Sensor",
+								"Service.Messaging",
+								"Service.MediaManagement",
+								"Service.Logging",
+								"Service.Location",
+								"Service.Calendar",
+								"Service.Contact"
+            </description>
+
+          </parameter>
+
+          <parameter name="interface" type="String" usage="required">
+            <description>
+              This is a text string that defines the supported interface for the specified service provider.
+			  Possible values : "IAppManager",
+			  					"ISysInfo",
+								"ISensor",
+								"IMessaging",
+								"IDataSource",
+								"ILocation"
+            </description>
+            <values>
+              <value name = "IAppManager" description = "Application Manager."/>
+              <value name = "ISysInfo" description = "System Information."/>
+              <value name = "ISensor" description = "Sensor."/>
+              <value name = "IMessaging" description = "Messaging."/>
+              <value name = "IDataSource" description = "Media Management, Logging, Calendar, Contact"/>
+              <value name = "ILocation" description = "Location."/>
+            </values>
+          </parameter>
+        </parameters>
+
+        <browsers>
+          <browser platform="Nokia WRT" version="1.1+" />
+        </browsers>
+
+		<example>
+			&lt;p&gt;
+				The following example creates a service object for the Media Management Service API:
+			&lt;/p&gt;
+
+			&lt;pre&gt;var so = device.getServiceObject("Service.MediaManagement", "IDataSource");&lt;/pre&gt;
+		</example>
+		
+      </method>
+    </methods>
+
+  </class>
+  <!-- end of Device  -->
+
+</javascript>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.product/.classpath	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.product/.project	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.symbian.tools.wrttools.product</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.product/.settings/org.eclipse.jdt.core.prefs	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,8 @@
+#Wed Jan 13 10:11:07 PST 2010
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.product/META-INF/MANIFEST.MF	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,19 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: WRT IDE Product
+Bundle-SymbolicName: org.symbian.tools.wrttools.product;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: org.symbian.tools.wrttools.product.Activator
+Bundle-Vendor: Symbian Foundation
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.wst.jsdt.ui;bundle-version="1.0.200",
+ org.eclipse.search;bundle-version="3.5.1",
+ org.eclipse.debug.ui;bundle-version="3.5.1",
+ org.eclipse.ui.console;bundle-version="3.4.0",
+ org.symbian.tools.wrttools;bundle-version="1.0.0",
+ org.eclipse.wst.css.ui;bundle-version="1.0.401",
+ org.eclipse.wst.html.ui;bundle-version="1.0.401",
+ org.eclipse.wst.xml.ui;bundle-version="1.1.1"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-ActivationPolicy: lazy
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.product/build.properties	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,7 @@
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               plugin_customization.ini,\
+               icons/
+source.. = src/
Binary file org.symbian.tools.wrttools.product/icons/main16.gif has changed
Binary file org.symbian.tools.wrttools.product/icons/new_xml.gif has changed
Binary file org.symbian.tools.wrttools.product/icons/newcss_wiz.gif has changed
Binary file org.symbian.tools.wrttools.product/icons/newhtml_wiz.gif has changed
Binary file org.symbian.tools.wrttools.product/icons/newjscript_wiz.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.product/launch/WRT IDE (Product).launch	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.RuntimeWorkbench">
+<booleanAttribute key="append.args" value="true"/>
+<booleanAttribute key="askclear" value="true"/>
+<booleanAttribute key="automaticAdd" value="false"/>
+<booleanAttribute key="automaticValidate" value="false"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="[NONE]"/>
+<booleanAttribute key="clearConfig" value="false"/>
+<booleanAttribute key="clearws" value="false"/>
+<booleanAttribute key="clearwslog" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/WRT IDE (Product)"/>
+<booleanAttribute key="default" value="false"/>
+<booleanAttribute key="includeOptional" value="true"/>
+<stringAttribute key="location" value="${workspace_loc}/../runtime-wrt-ide.product"/>
+<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl}"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms128m -Xmx768m -XX:MaxPermSize=192m"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<stringAttribute key="product" value="org.symbian.tools.wrttools.product.product"/>
+<stringAttribute key="productFile" value="\org.symbian.tools.wrttools.product\wrt-ide.product"/>
+<booleanAttribute key="restart" value="false"/>
+<stringAttribute key="selected_target_plugins" value="org.apache.xml.resolver@default:default,org.apache.jasper@default:default,org.eclipse.wst.css.ui@default:default,org.eclipse.equinox.concurrent@default:default,org.eclipse.update.core@default:default,javax.transaction@default:false,org.apache.commons.collections@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.equinox.http.registry@default:default,org.eclipse.ui.intro@default:default,javax.mail*1.4.0.v200905040518@default:default,org.eclipse.wst.internet.monitor.core@default:default,org.eclipse.wst.jsdt.support.firefox@default:default,org.eclipse.emf.ecore.change.edit@default:default,org.eclipse.ltk.core.refactoring@default:default,org.eclipse.core.expressions@default:default,org.eclipse.platform.doc.user@default:default,org.eclipse.wst.common.core@default:default,org.eclipse.equinox.security.win32.x86@default:false,org.eclipse.equinox.p2.repository@default:default,org.eclipse.wst.command.env.core@default:default,org.eclipse.equinox.jsp.jasper@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.eclipse.equinox.launcher@default:default,org.eclipse.equinox.p2.repository.tools@default:default,org.eclipse.ecf.provider.filetransfer.httpclient@default:default,org.eclipse.equinox.p2.directorywatcher@default:default,org.eclipse.equinox.frameworkadmin@default:default,org.eclipse.gef@default:default,org.eclipse.text@default:default,org.eclipse.rcp@default:default,org.eclipse.equinox.p2.ui.sdk@default:default,org.eclipse.core.net.win32.x86@default:false,org.eclipse.ui.ide.application@default:default,org.eclipse.emf.databinding.edit@default:default,org.eclipse.emf.databinding@default:default,org.eclipse.wst.xml.xpath.ui@default:default,org.apache.commons.net@default:default,org.apache.xerces@default:default,org.apache.axis@default:default,org.eclipse.wst.jsdt.doc@default:default,org.objectweb.asm@default:default,org.eclipse.team.cvs.ui@default:default,org.eclipse.core.resources.win32.x86@default:false,org.eclipse.ui.externaltools@default:default,org.mortbay.jetty.server@default:default,org.apache.xalan@default:default,org.eclipse.wst.sse.doc.user@default:default,org.jdom@default:default,org.eclipse.wst.validation.ui@default:default,javax.xml.bind*2.1.9.v200905050702@default:default,org.eclipse.equinox.p2.director.app@default:default,org.eclipse.compare.win32@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.ui.console@default:default,org.eclipse.wst.xml.xpath.core@default:default,org.eclipse.wst.common.environment@default:default,org.eclipse.servertools.doc.isv@default:default,org.eclipse.equinox.simpleconfigurator.manipulator@default:default,org.apache.commons.logging@default:default,org.eclipse.wst.command.env.infopop@default:default,org.eclipse.jface.text@default:default,org.eclipse.osgi.services@default:default,org.eclipse.equinox.app@default:default,org.eclipse.core.resources.compatibility@default:false,org.eclipse.debug.core@default:default,org.eclipse.core.filesystem.win32.x86@default:false,org.eclipse.ui.views@default:default,org.eclipse.wst.html.ui.infopop@default:default,org.eclipse.jface@default:default,org.eclipse.emf.common@default:default,org.eclipse.ecf.ssl@default:false,org.apache.commons.lang*2.3.0.v200803061910@default:default,javax.jws@default:default,org.apache.commons.codec@default:default,org.eclipse.equinox.p2.ui@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.core.boot@default:default,org.eclipse.platform.doc.isv@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.compare.core@default:default,org.eclipse.wst.jsdt.web.core@default:default,org.eclipse.equinox.p2.core@default:default,org.eclipse.team.ui@default:default,org.eclipse.wst.jsdt.ui@default:default,org.eclipse.equinox.simpleconfigurator@1:true,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.help.ui@default:default,org.eclipse.team.cvs.ssh@default:default,org.apache.commons.discovery@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.core.runtime@default:true,org.eclipse.ecf.provider.filetransfer.httpclient.ssl@default:false,org.eclipse.emf.mapping.ui@default:default,org.eclipse.wst.sse.ui.infopop@default:default,javax.xml.rpc@default:default,org.apache.lucene.analysis@default:default,org.eclipse.debug.ui@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.ui@default:default,org.eclipse.equinox.p2.updatechecker@default:default,org.apache.oro@default:default,org.apache.commons.jxpath@default:default,org.eclipse.equinox.p2.garbagecollector@default:default,org.eclipse.emf.ecore.edit@default:default,org.eclipse.wst.command.env.doc.user@default:default,org.eclipse.wst.jsdt.manipulation@default:default,org.eclipse.ui.forms@default:default,org.eclipse.wst.jsdt.core@default:default,org.eclipse.wst.common.emfworkbench.integration@default:default,org.eclipse.equinox.p2.publisher@default:default,org.eclipse.emf.mapping.ecore2xml@default:default,org.eclipse.wst.standard.schemas@default:default,org.eclipse.wst.common.infopop@default:default,org.eclipse.equinox.p2.touchpoint.natives@default:default,org.eclipse.equinox.security@default:default,org.eclipse.wst.html.ui@default:default,org.eclipse.wst.xml.ui@default:default,org.eclipse.compare@default:default,org.eclipse.dstore.core@default:default,org.apache.velocity@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.wst.xml.ui.infopop@default:default,org.eclipse.equinox.p2.extensionlocation@default:default,org.eclipse.core.filesystem@default:default,org.apache.commons.el@default:default,org.eclipse.platform@default:default,org.eclipse.team.core@default:default,org.mozilla.xulrunner@default:default,org.eclipse.equinox.p2.engine@default:default,org.eclipse.search@default:default,org.eclipse.wst.sse.ui@default:default,org.eclipse.ecf.provider.filetransfer.ssl@default:false,org.eclipse.wst.common.frameworks.ui@default:default,javax.xml.stream@default:default,org.eclipse.emf.edit@default:default,org.eclipse.ui.workbench.texteditor@default:default,org.apache.commons.httpclient@default:default,org.eclipse.core.filebuffers@default:default,org.eclipse.emf.common.ui@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.help.appserver@default:default,org.eclipse.core.jobs@default:default,java_cup.runtime@default:default,org.eclipse.ui.win32@default:false,commonj.sdo@default:default,javax.persistence@default:default,org.eclipse.wst.common.project.facet.core@default:default,org.eclipse.wst.css.core@default:default,org.eclipse.ui.ide@default:default,org.eclipse.equinox.p2.metadata.generator@default:default,javax.servlet@default:default,org.eclipse.equinox.util@default:default,org.eclipse.core.net@default:default,org.eclipse.jem.util@default:default,org.eclipse.wst.common.snippets@default:default,org.eclipse.ui.views.properties.tabbed@default:default,org.eclipse.ui.workbench.compatibility@default:false,org.eclipse.update.configurator@3:true,net.sourceforge.lpg.lpgjavaruntime@default:default,org.eclipse.update.ui@default:default,org.eclipse.team.cvs.core@default:default,org.eclipse.equinox.common@2:true,org.eclipse.ecf.provider.filetransfer@default:default,org.eclipse.equinox.p2.artifact.repository@default:default,com.ibm.icu@default:default,javax.xml.ws@default:default,org.eclipse.wst.common.frameworks@default:default,org.eclipse.ecf.filetransfer@default:default,org.eclipse.wst.sse.core@default:default,org.eclipse.core.resources@default:default,org.eclipse.core.databinding.beans@default:default,org.eclipse.emf.mapping.ecore@default:default,org.mortbay.jetty.util@default:default,org.eclipse.wtp.epp.package.jee.intro@default:default,org.eclipse.emf.mapping.ecore2ecore@default:default,org.eclipse.emf@default:default,org.eclipse.equinox.p2.jarprocessor@default:default,org.eclipse.swt.win32.win32.x86@default:false,javax.servlet.jsp@default:default,org.eclipse.equinox.p2.updatesite@default:default,org.eclipse.osgi@-1:true,org.eclipse.wst.validation@default:default,org.eclipse.wst.xml.xpath2.processor@default:default,org.eclipse.core.runtime.compatibility@default:default,org.eclipse.cvs@default:default,org.eclipse.dstore.extra@default:default,org.eclipse.equinox.security.ui@default:default,org.eclipse.wst.html.core@default:default,org.eclipse.equinox.preferences@default:default,com.jcraft.jsch@default:default,javax.xml.soap@default:default,org.eclipse.wst.doc.user@default:default,org.eclipse.equinox.p2.touchpoint.eclipse@default:default,org.apache.xml.serializer@default:default,org.sat4j.core@default:default,org.eclipse.wst.jsdt.web.ui@default:default,org.eclipse.wst.xmleditor.doc.user@default:default,org.eclipse.update.core.win32@default:false,org.eclipse.team.cvs.ssh2@default:default,org.eclipse.core.commands@default:default,org.eclipse.jem@default:default,org.eclipse.wst.common.emf@default:default,org.eclipse.ui.browser@default:default,org.apache.bcel@default:default,org.eclipse.update.scheduler@default:default,org.eclipse.help@default:default,org.eclipse.wst.internet.cache@default:default,org.eclipse.osgi.util@default:default,org.eclipse.equinox.p2.director@default:default,org.eclipse.emf.edit.ui@default:default,org.hamcrest.core@default:default,org.eclipse.equinox.http.jetty@default:default,org.eclipse.core.databinding@default:default,org.eclipse.equinox.launcher.win32.win32.x86@default:false,org.eclipse.ui.views.log@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.equinox.jsp.jasper.registry@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.p2.exemplarysetup@default:default,org.eclipse.equinox.p2.ui.sdk.scheduler@default:default,org.eclipse.wst.jsdt.support.ie@default:default,org.eclipse.core.variables@default:default,org.eclipse.swt@default:default,org.eclipse.ecf.identity@default:default,org.apache.lucene@default:default,org.eclipse.wst.common.modulecore@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.emf.mapping.ecore.editor@default:default,org.eclipse.draw2d@default:default,org.eclipse.equinox.p2.console@default:default,org.eclipse.equinox.p2.reconciler.dropins@default:default,org.eclipse.ui.net@default:default,org.eclipse.wst.common.uriresolver@default:default,org.eclipse.emf.mapping@default:default,org.eclipse.ltk.ui.refactoring@default:default,org.eclipse.wst.common.ui@default:default,org.eclipse.jsch.core@default:default,org.eclipse.wst.internet.monitor.ui@default:default,org.apache.log4j@default:default,org.eclipse.ecf@default:default,org.eclipse.jsch.ui@default:default,org.sat4j.pb@default:default,org.eclipse.ui.presentations.r21@default:default,org.eclipse.wst.xml.core@default:default,org.mozilla.xpcom@default:default,org.eclipse.epp.package.jee@default:default,org.eclipse.ui.editors@default:default,org.eclipse.help.webapp@default:default,org.eclipse.equinox.frameworkadmin.equinox@default:default,org.eclipse.wst.validation.infopop@default:default,org.eclipse.ui.navigator@default:default,org.eclipse.net4j.jms.api@default:default,org.eclipse.wst.command.env@default:default,org.eclipse.help.base@default:default,org.eclipse.wst.validation.doc.isv@default:default,javax.wsdl*1.6.2.v200806030405@default:default,javax.xml@default:default,org.eclipse.ui.intro.universal@default:default,org.mozilla.xulrunner.win32.win32.x86@default:false,javax.activation*1.1.0.v200906290531@default:default,org.eclipse.ui.navigator.resources@default:default,org.eclipse.ui.cheatsheets@default:default,org.eclipse.wst.common.api.doc@default:default"/>
+<stringAttribute key="selected_workspace_plugins" value="org.symbian.tools.wrttools.product@default:default,org.symbian.tools.wrttools.editors@default:default,org.chromium.debug.ui@default:default,org.symbian.tools.wrttools.previewer@default:default,org.symbian.tools.wrttools@default:default,org.chromium.debug.core@default:default,org.chromium.sdk@default:default,org.symbian.tools.wrttools.debug.core@default:default"/>
+<booleanAttribute key="show_selected_only" value="false"/>
+<booleanAttribute key="tracing" value="false"/>
+<booleanAttribute key="useDefaultConfig" value="true"/>
+<booleanAttribute key="useDefaultConfigArea" value="true"/>
+<booleanAttribute key="useProduct" value="true"/>
+<booleanAttribute key="usefeatures" value="false"/>
+</launchConfiguration>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.product/plugin.xml	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,178 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+   <extension
+         point="org.eclipse.ui.perspectives">
+      <perspective
+            class="org.symbian.tools.wrttools.product.perspective.WRTPerspective"
+            icon="icons/main16.gif"
+            id="org.symbian.tools.wrttools.mainPerspective"
+            name="WebRuntime">
+      </perspective>
+   </extension>
+   <extension
+         point="org.eclipse.ui.actionSets">
+      <actionSet
+            id="org.symbian.tools.wrttools.product.creationActionSet"
+            label="WRT Element Creation">
+         <action
+               class="org.symbian.tools.wrttools.product.actions.NewCSSFileAction"
+               icon="icons/newcss_wiz.gif"
+               id="org.symbian.tools.wrttools.product.newCssFileAction"
+               label="New CSS File..."
+               style="push"
+               toolbarPath="wrtwizards">
+         </action>
+         <action
+               class="org.symbian.tools.wrttools.product.actions.NewHTMLFileAction"
+               icon="icons/newhtml_wiz.gif"
+               id="org.symbian.tools.wrttools.product.newHtmlAction"
+               label="New HTML File..."
+               style="push"
+               toolbarPath="wrtwizards">
+         </action>
+         <action
+               class="org.symbian.tools.wrttools.product.actions.NewJSFileAction"
+               icon="icons/newjscript_wiz.gif"
+               id="org.symbian.tools.wrttools.product.newJSAction"
+               label="New JavaScript File..."
+               style="push"
+               toolbarPath="wrtwizards">
+         </action>
+         <action
+               class="org.symbian.tools.wrttools.product.actions.NewWRTProjectAction"
+               icon="icons/main16.gif"
+               id="org.symbian.tools.wrttools.product.newWRTProjectAction"
+               label="New WRT Application..."
+               style="push"
+               toolbarPath="wrtwizards">
+         </action>
+      </actionSet>
+   </extension>
+   <extension
+         point="org.eclipse.ui.newWizards">
+      <category
+            id="org.eclipse.wst.web.ui"
+            name="Web">
+      </category>
+      <primaryWizard
+            id="org.symbian.tools.wrttools.core.wrtwidgetwizard">
+      </primaryWizard>
+      <primaryWizard
+            id="org.eclipse.wst.html.ui.internal.wizard.NewHTMLWizard">
+      </primaryWizard>
+      <primaryWizard
+            id="org.eclipse.wst.css.ui.internal.wizard.NewCSSWizard">
+      </primaryWizard>
+      <primaryWizard
+            id="org.eclipse.wst.jsdt.ui.NewJSWizard">
+      </primaryWizard>
+   </extension>
+   <extension
+         point="org.eclipse.ui.activities">
+      <activity
+            description="WTP functionality not used in WRT IDE"
+            id="org.symbian.tools.wrttools.product.wtp"
+            name="Web Tools Platform (WTP)">
+      </activity>
+      <activityPatternBinding
+            activityId="org.symbian.tools.wrttools.product.wtp"
+            pattern="org\.eclipse\.wst\.xml\.ui/org\.eclipse\.wst\.xml\.ui\.XMLExampleProjectCreationWizard">
+      </activityPatternBinding>
+      <activityPatternBinding
+            activityId="org.symbian.tools.wrttools.product.wtp"
+            pattern="org\.eclipse\.wst\.xml\.ui/org\.eclipse\.wst\.xml\.ui\.perspective">
+      </activityPatternBinding>
+      <activityPatternBinding
+            activityId="org.symbian.tools.wrttools.product.wtp"
+            pattern="org\.eclipse\.wst\.jsdt\.ui/org\.eclipse\.wst\.jsdt\.ui\.wizards\.JavaProjectWizard">
+      </activityPatternBinding>
+      <activityPatternBinding
+            activityId="org.symbian.tools.wrttools.product.wtp"
+            pattern="org\.eclipse\.wst\.jsdt\.web\.ui/org\.eclipse\.wst\.jsdt\.internal\.web\.ui\.convertProjects">
+      </activityPatternBinding>
+      <category
+            description="WTP UI elements that are not compatible with WRT widget development"
+            id="org.symbian.tools.wrttools.product.wtp"
+            name="Web Tools Platform (WTP)">
+      </category>
+      <categoryActivityBinding
+            activityId="org.symbian.tools.wrttools.product.wtp"
+            categoryId="org.symbian.tools.wrttools.product.wtp">
+      </categoryActivityBinding>
+      <category
+            description="Chromium Developement Tools UI"
+            id="org.symbian.tools.wrttools.product.chdt"
+            name="Google Chrome Developer Tools">
+      </category>
+      <activity
+            description="Google Chrome Developer Tools UI elements"
+            id="org.symbian.tools.wrttools.product.chdtact"
+            name="Google Chrome Developer Tools">
+      </activity>
+      <categoryActivityBinding
+            activityId="org.symbian.tools.wrttools.product.chdtact"
+            categoryId="org.symbian.tools.wrttools.product.chdt">
+      </categoryActivityBinding>
+      <activityPatternBinding
+            activityId="org.symbian.tools.wrttools.product.chdtact"
+            pattern="org\.chromium\.debug\.ui/org\.chromium\.debug\.ui\.LaunchType.*">
+      </activityPatternBinding>
+   </extension>
+   <extension
+         id="product"
+         point="org.eclipse.core.runtime.products">
+      <product
+            application="org.eclipse.ui.ide.workbench"
+            name="WebRuntime Toolkit IDE">
+         <property
+               name="windowImages"
+               value="icons/main16.gif,eclipse32.gif,eclipse48.gif,eclipse.png,eclipse32.png">
+         </property>
+         <property
+               name="aboutText"
+               value="%productBlurb">
+         </property>
+         <property
+               name="aboutImage"
+               value="eclipse_lg.gif">
+         </property>
+         <property
+               name="startupForegroundColor"
+               value="C8D5EA">
+         </property>
+         <property
+               name="startupProgressRect"
+               value="0,280,455,15">
+         </property>
+         <property
+               name="startupMessageRect"
+               value="7,220,441,20">
+         </property>
+         <property
+               name="appName"
+               value="WebRuntime Toolkit IDE">
+         </property>
+         <property
+               name="preferenceCustomization"
+               value="plugin_customization.ini">
+         </property>
+      </product>
+   </extension>
+   <extension
+         point="org.eclipse.ui.preferencePages">
+      <page            
+            category="org.eclipse.ui.preferencePages.Workbench"
+            name="Capabilities"
+            id="org.eclipse.sdk.capabilities">
+            <class class="org.eclipse.ui.activities.ActivityCategoryPreferencePage">
+                <parameter name="allowAdvanced" value="true"/>
+                <parameter name="captionMessage" value="Capabilities allow you to enable or disable various product components.  These capabilities are grouped according to a set of predefined categories." />
+            	<parameter name="activityName" value="&amp;Capabilities" />
+                <parameter name="categoryName" value="&amp;Capabilities" />
+            	<parameter name="activityPromptButton" value="&amp;Prompt when enabling capabilities"/>
+            	<parameter name="activityPromptButtonTooltip" value="Prompt when a feature is first used that requires enablement of capabilities"/>
+            </class>
+      </page>
+   </extension>
+</plugin>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.product/plugin_customization.ini	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,37 @@
+# plugin_customization.ini 
+# sets default values for plug-in-specific preferences
+# keys are qualified by plug-in id
+# e.g., com.example.acmeplugin/myproperty=myvalue
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in plugin_customization.properties
+# This file does not need to be translated.
+
+# WARNING: This file defines the preference overrides for the Platform build 
+# (the one with no JDT or PDE), not the SDK build (aka the IDE).  
+# For the SDK build, use the plugin_customization.ini file in the 
+# org.eclipse.sdk plug-in instead.
+
+# Property "org.eclipse.ui/defaultPerspectiveId" controls the 
+# perspective that the workbench opens initially
+org.eclipse.ui/defaultPerspectiveId=org.symbian.tools.wrttools.mainPerspective
+
+# new-style tabs by default
+org.eclipse.ui/SHOW_TRADITIONAL_STYLE_TABS=false
+
+# put the perspective switcher on the top right
+org.eclipse.ui/DOCK_PERSPECTIVE_BAR=topRight
+
+# show progress on startup
+org.eclipse.ui/SHOW_PROGRESS_ON_STARTUP = true
+
+# Welcome theme to use
+#org.eclipse.ui.intro/INTRO_THEME = org.eclipse.wtp.epp.package.jee.intro
+
+# Root page links to show in the Universal Welcome
+#org.eclipse.ui.intro.universal/INTRO_ROOT_PAGES = overview,tutorials,samples,whatsnew
+
+# Initial page layout of the Universal Welcome
+#org.eclipse.ui.intro.universal/INTRO_DATA = product:introData.xml
+
+# Order help books in table of contents
+#org.eclipse.help/HELP_DATA = helpData.xml
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.product/src/org/symbian/tools/wrttools/product/Activator.java	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,50 @@
+package org.symbian.tools.wrttools.product;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "org.symbian.tools.wrttools.product";
+
+	// The shared instance
+	private static Activator plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.product/src/org/symbian/tools/wrttools/product/actions/NewCSSFileAction.java	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,44 @@
+package org.symbian.tools.wrttools.product.actions;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.ui.INewWizard;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.IWorkbenchWindowActionDelegate;
+import org.eclipse.wst.css.ui.internal.wizard.NewCSSWizard;
+import org.eclipse.wst.jsdt.ui.actions.AbstractOpenWizardAction;
+
+public class NewCSSFileAction extends AbstractOpenWizardAction implements
+		IWorkbenchWindowActionDelegate {
+
+	@SuppressWarnings("restriction")
+	@Override
+	protected INewWizard createWizard() throws CoreException {
+		return new NewCSSWizard();
+	}
+
+	@Override
+	public void dispose() {
+		// TODO Auto-generated method stub
+
+	}
+
+	@Override
+	public void init(IWorkbenchWindow window) {
+		// TODO Auto-generated method stub
+
+	}
+
+	@Override
+	public void run(IAction action) {
+		run();
+	}
+
+	@Override
+	public void selectionChanged(IAction action, ISelection selection) {
+		// TODO Auto-generated method stub
+
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.product/src/org/symbian/tools/wrttools/product/actions/NewHTMLFileAction.java	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,44 @@
+package org.symbian.tools.wrttools.product.actions;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.ui.INewWizard;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.IWorkbenchWindowActionDelegate;
+import org.eclipse.wst.html.ui.internal.wizard.NewHTMLWizard;
+import org.eclipse.wst.jsdt.ui.actions.AbstractOpenWizardAction;
+
+public class NewHTMLFileAction extends AbstractOpenWizardAction implements
+		IWorkbenchWindowActionDelegate {
+
+	@SuppressWarnings("restriction")
+	@Override
+	protected INewWizard createWizard() throws CoreException {
+		return new NewHTMLWizard();
+	}
+
+	@Override
+	public void dispose() {
+		// TODO Auto-generated method stub
+
+	}
+
+	@Override
+	public void init(IWorkbenchWindow window) {
+		// TODO Auto-generated method stub
+
+	}
+
+	@Override
+	public void run(IAction action) {
+		run();
+	}
+
+	@Override
+	public void selectionChanged(IAction action, ISelection selection) {
+		// TODO Auto-generated method stub
+
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.product/src/org/symbian/tools/wrttools/product/actions/NewJSFileAction.java	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,44 @@
+package org.symbian.tools.wrttools.product.actions;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.ui.INewWizard;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.IWorkbenchWindowActionDelegate;
+import org.eclipse.wst.jsdt.internal.ui.wizards.NewJSWizard;
+import org.eclipse.wst.jsdt.ui.actions.AbstractOpenWizardAction;
+
+public class NewJSFileAction extends AbstractOpenWizardAction implements
+		IWorkbenchWindowActionDelegate {
+
+	@SuppressWarnings("restriction")
+	@Override
+	protected INewWizard createWizard() throws CoreException {
+		return new NewJSWizard();
+	}
+
+	@Override
+	public void dispose() {
+		// TODO Auto-generated method stub
+
+	}
+
+	@Override
+	public void init(IWorkbenchWindow window) {
+		// TODO Auto-generated method stub
+
+	}
+
+	@Override
+	public void run(IAction action) {
+		run();
+	}
+
+	@Override
+	public void selectionChanged(IAction action, ISelection selection) {
+		// TODO Auto-generated method stub
+
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.product/src/org/symbian/tools/wrttools/product/actions/NewWRTProjectAction.java	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,48 @@
+package org.symbian.tools.wrttools.product.actions;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.INewWizard;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.IWorkbenchWindowActionDelegate;
+import org.eclipse.wst.jsdt.ui.actions.AbstractOpenWizardAction;
+import org.symbian.tools.wrttools.wizards.WrtWidgetWizard;
+
+public class NewWRTProjectAction extends AbstractOpenWizardAction implements
+		IWorkbenchWindowActionDelegate {
+
+	@Override
+	public void init(IWorkbenchWindow window) {
+		// TODO Auto-generated method stub
+
+	}
+
+	@Override
+	public void run(IAction action) {
+		run();
+	}
+
+	@Override
+	public void selectionChanged(IAction action, ISelection selection) {
+		// TODO Auto-generated method stub
+
+	}
+
+	@Override
+	protected INewWizard createWizard() throws CoreException {
+		return new WrtWidgetWizard();
+	}
+
+	@Override
+	public void dispose() {
+		// TODO Auto-generated method stub
+		
+	}
+
+	@Override
+	protected boolean doCreateProjectFirstOnEmptyWorkspace(Shell shell) {
+		return true;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.product/src/org/symbian/tools/wrttools/product/perspective/WRTPerspective.java	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,66 @@
+package org.symbian.tools.wrttools.product.perspective;
+
+import org.eclipse.debug.ui.IDebugUIConstants;
+import org.eclipse.search.ui.NewSearchUI;
+import org.eclipse.ui.IFolderLayout;
+import org.eclipse.ui.IPageLayout;
+import org.eclipse.ui.IPerspectiveFactory;
+import org.eclipse.ui.console.IConsoleConstants;
+import org.eclipse.ui.progress.IProgressConstants;
+import org.eclipse.wst.jsdt.ui.JavaScriptUI;
+
+public class WRTPerspective implements IPerspectiveFactory {
+
+	@Override
+	public void createInitialLayout(IPageLayout layout) {
+ 		String editorArea = layout.getEditorArea();
+		
+		IFolderLayout folder= layout.createFolder("left", IPageLayout.LEFT, (float)0.25, editorArea); //$NON-NLS-1$
+		folder.addView("org.symbian.tools.wrttools.wrtnavigator");
+		folder.addView(JavaScriptUI.ID_TYPE_HIERARCHY);
+		
+		IFolderLayout outputfolder= layout.createFolder("bottom", IPageLayout.BOTTOM, (float)0.75, editorArea); //$NON-NLS-1$
+		outputfolder.addView(IPageLayout.ID_PROBLEM_VIEW);
+		outputfolder.addView(JavaScriptUI.ID_JAVADOC_VIEW);
+		outputfolder.addView(JavaScriptUI.ID_SOURCE_VIEW);
+		outputfolder.addPlaceholder(NewSearchUI.SEARCH_VIEW_ID);
+		outputfolder.addPlaceholder(IConsoleConstants.ID_CONSOLE_VIEW);
+		outputfolder.addPlaceholder(IPageLayout.ID_BOOKMARKS);
+		outputfolder.addPlaceholder(IProgressConstants.PROGRESS_VIEW_ID);
+		
+		layout.addView(IPageLayout.ID_OUTLINE, IPageLayout.RIGHT, (float)0.75, editorArea);
+		
+		layout.addActionSet(IDebugUIConstants.LAUNCH_ACTION_SET);
+		layout.addActionSet(JavaScriptUI.ID_ACTION_SET);
+		layout.addActionSet(IPageLayout.ID_NAVIGATE_ACTION_SET);
+		layout.addActionSet("org.symbian.tools.wrttools.product.creationActionSet");
+		
+		// views - java
+		layout.addShowViewShortcut(JavaScriptUI.ID_TYPE_HIERARCHY);
+		layout.addShowViewShortcut(JavaScriptUI.ID_SOURCE_VIEW);
+		layout.addShowViewShortcut(JavaScriptUI.ID_JAVADOC_VIEW);
+		layout.addShowViewShortcut("org.symbian.tools.wrttools.wrtnavigator");
+
+		layout.addPerspectiveShortcut(IDebugUIConstants.ID_DEBUG_PERSPECTIVE);
+		
+		// views - search
+		layout.addShowViewShortcut(NewSearchUI.SEARCH_VIEW_ID);
+
+		// views - standard workbench
+		layout.addShowViewShortcut(IPageLayout.ID_OUTLINE);
+		layout.addShowViewShortcut(IPageLayout.ID_PROBLEM_VIEW);
+		layout.addShowViewShortcut(IPageLayout.ID_TASK_LIST);
+				
+		// new actions - Java project creation wizard
+		layout.addNewWizardShortcut("org.symbian.tools.wrttools.core.wrtwidgetwizard"); //$NON-NLS-1$
+		layout.addNewWizardShortcut("org.eclipse.wst.jsdt.ui.NewJSWizard"); //$NON-NLS-1$
+		layout.addNewWizardShortcut("org.eclipse.wst.html.ui.internal.wizard.NewHTMLWizard"); //$NON-NLS-1$
+		layout.addNewWizardShortcut("org.eclipse.wst.css.ui.internal.wizard.NewCSSWizard"); //$NON-NLS-1$
+		layout.addNewWizardShortcut("org.eclipse.wst.xml.ui.internal.wizards.NewXMLWizard"); //$NON-NLS-1$
+		layout.addNewWizardShortcut("org.eclipse.wst.jsdt.ui.wizards.NewSnippetFileCreationWizard"); //$NON-NLS-1$
+		layout.addNewWizardShortcut("org.eclipse.ui.wizards.new.folder");//$NON-NLS-1$
+		layout.addNewWizardShortcut("org.eclipse.ui.wizards.new.file");//$NON-NLS-1$
+		layout.addNewWizardShortcut("org.eclipse.ui.editors.wizards.UntitledTextFileWizard");//$NON-NLS-1$
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.product/wrt-ide.product	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,306 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?pde version="3.5"?>
+
+<product name="WebRuntime Toolkit IDE" uid="org.symbian.wrtide" id="org.symbian.tools.wrttools.product.product" application="org.eclipse.ui.ide.workbench" version="1.0.0.qualifier" useFeatures="false" includeLaunchers="true">
+
+   <aboutInfo>
+      <image path="eclipse_lg.gif"/>
+      <text>
+         %productBlurb
+      </text>
+   </aboutInfo>
+
+   <configIni use="default">
+   </configIni>
+
+   <launcherArgs>
+      <programArgs>-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl}</programArgs>
+      <vmArgs>-Xms128m -Xmx768m -XX:MaxPermSize=192m</vmArgs>
+      <vmArgsMac>-XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts</vmArgsMac>
+   </launcherArgs>
+
+   <windowImages i16="/org.symbian.tools.wrttools.product/icons/main16.gif" i32="eclipse32.gif" i48="eclipse48.gif" i64="eclipse.png" i128="eclipse32.png"/>
+
+   <splash
+      startupProgressRect="0,280,455,15"
+      startupMessageRect="7,220,441,20"
+      startupForegroundColor="C8D5EA" />
+   <launcher>
+      <solaris/>
+      <win useIco="false">
+         <bmp/>
+      </win>
+   </launcher>
+
+   <vm>
+      <windows>org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6</windows>
+   </vm>
+
+   <plugins>
+      <plugin id="com.ibm.icu"/>
+      <plugin id="com.jcraft.jsch"/>
+      <plugin id="java_cup.runtime"/>
+      <plugin id="javax.activation" version="1.1.0.v200906290531"/>
+      <plugin id="javax.servlet"/>
+      <plugin id="javax.servlet.jsp"/>
+      <plugin id="javax.transaction" fragment="true"/>
+      <plugin id="javax.xml"/>
+      <plugin id="javax.xml.stream"/>
+      <plugin id="javax.xml.ws"/>
+      <plugin id="org.apache.bcel"/>
+      <plugin id="org.apache.commons.codec"/>
+      <plugin id="org.apache.commons.collections"/>
+      <plugin id="org.apache.commons.discovery"/>
+      <plugin id="org.apache.commons.el"/>
+      <plugin id="org.apache.commons.httpclient"/>
+      <plugin id="org.apache.commons.jxpath"/>
+      <plugin id="org.apache.commons.lang" version="2.3.0.v200803061910"/>
+      <plugin id="org.apache.commons.logging"/>
+      <plugin id="org.apache.commons.net"/>
+      <plugin id="org.apache.jasper"/>
+      <plugin id="org.apache.log4j"/>
+      <plugin id="org.apache.lucene"/>
+      <plugin id="org.apache.lucene.analysis"/>
+      <plugin id="org.apache.oro"/>
+      <plugin id="org.apache.velocity"/>
+      <plugin id="org.apache.xalan"/>
+      <plugin id="org.apache.xerces"/>
+      <plugin id="org.apache.xml.resolver"/>
+      <plugin id="org.apache.xml.serializer"/>
+      <plugin id="org.chromium.debug.core"/>
+      <plugin id="org.chromium.debug.ui"/>
+      <plugin id="org.chromium.sdk"/>
+      <plugin id="org.eclipse.ant.core"/>
+      <plugin id="org.eclipse.compare"/>
+      <plugin id="org.eclipse.compare.core"/>
+      <plugin id="org.eclipse.compare.win32"/>
+      <plugin id="org.eclipse.core.boot"/>
+      <plugin id="org.eclipse.core.commands"/>
+      <plugin id="org.eclipse.core.contenttype"/>
+      <plugin id="org.eclipse.core.databinding"/>
+      <plugin id="org.eclipse.core.databinding.beans"/>
+      <plugin id="org.eclipse.core.databinding.observable"/>
+      <plugin id="org.eclipse.core.databinding.property"/>
+      <plugin id="org.eclipse.core.expressions"/>
+      <plugin id="org.eclipse.core.filebuffers"/>
+      <plugin id="org.eclipse.core.filesystem"/>
+      <plugin id="org.eclipse.core.filesystem.linux.x86" fragment="true"/>
+      <plugin id="org.eclipse.core.filesystem.linux.x86_64" fragment="true"/>
+      <plugin id="org.eclipse.core.filesystem.macosx" fragment="true"/>
+      <plugin id="org.eclipse.core.filesystem.win32.x86" fragment="true"/>
+      <plugin id="org.eclipse.core.jobs"/>
+      <plugin id="org.eclipse.core.net"/>
+      <plugin id="org.eclipse.core.net.linux.x86" fragment="true"/>
+      <plugin id="org.eclipse.core.net.win32.x86" fragment="true"/>
+      <plugin id="org.eclipse.core.resources"/>
+      <plugin id="org.eclipse.core.resources.win32.x86" fragment="true"/>
+      <plugin id="org.eclipse.core.runtime"/>
+      <plugin id="org.eclipse.core.runtime.compatibility"/>
+      <plugin id="org.eclipse.core.runtime.compatibility.auth"/>
+      <plugin id="org.eclipse.core.runtime.compatibility.registry" fragment="true"/>
+      <plugin id="org.eclipse.core.variables"/>
+      <plugin id="org.eclipse.cvs"/>
+      <plugin id="org.eclipse.datatools.oda.cshelp"/>
+      <plugin id="org.eclipse.debug.core"/>
+      <plugin id="org.eclipse.debug.ui"/>
+      <plugin id="org.eclipse.draw2d"/>
+      <plugin id="org.eclipse.ecf"/>
+      <plugin id="org.eclipse.ecf.filetransfer"/>
+      <plugin id="org.eclipse.ecf.identity"/>
+      <plugin id="org.eclipse.ecf.provider.filetransfer"/>
+      <plugin id="org.eclipse.ecf.provider.filetransfer.httpclient"/>
+      <plugin id="org.eclipse.ecf.provider.filetransfer.httpclient.ssl" fragment="true"/>
+      <plugin id="org.eclipse.ecf.provider.filetransfer.ssl" fragment="true"/>
+      <plugin id="org.eclipse.ecf.ssl" fragment="true"/>
+      <plugin id="org.eclipse.emf"/>
+      <plugin id="org.eclipse.emf.common"/>
+      <plugin id="org.eclipse.emf.common.ui"/>
+      <plugin id="org.eclipse.emf.databinding"/>
+      <plugin id="org.eclipse.emf.databinding.edit"/>
+      <plugin id="org.eclipse.emf.ecore"/>
+      <plugin id="org.eclipse.emf.ecore.change"/>
+      <plugin id="org.eclipse.emf.ecore.change.edit"/>
+      <plugin id="org.eclipse.emf.ecore.edit"/>
+      <plugin id="org.eclipse.emf.ecore.xmi"/>
+      <plugin id="org.eclipse.emf.edit"/>
+      <plugin id="org.eclipse.emf.edit.ui"/>
+      <plugin id="org.eclipse.emf.mapping"/>
+      <plugin id="org.eclipse.emf.mapping.ecore"/>
+      <plugin id="org.eclipse.emf.mapping.ecore.editor"/>
+      <plugin id="org.eclipse.emf.mapping.ui"/>
+      <plugin id="org.eclipse.equinox.app"/>
+      <plugin id="org.eclipse.equinox.common"/>
+      <plugin id="org.eclipse.equinox.concurrent"/>
+      <plugin id="org.eclipse.equinox.ds"/>
+      <plugin id="org.eclipse.equinox.frameworkadmin"/>
+      <plugin id="org.eclipse.equinox.frameworkadmin.equinox"/>
+      <plugin id="org.eclipse.equinox.http.jetty"/>
+      <plugin id="org.eclipse.equinox.http.registry"/>
+      <plugin id="org.eclipse.equinox.http.servlet"/>
+      <plugin id="org.eclipse.equinox.jsp.jasper"/>
+      <plugin id="org.eclipse.equinox.jsp.jasper.registry"/>
+      <plugin id="org.eclipse.equinox.launcher"/>
+      <plugin id="org.eclipse.equinox.launcher.cocoa.macosx.x86_64" fragment="true"/>
+      <plugin id="org.eclipse.equinox.launcher.gtk.linux.x86" fragment="true"/>
+      <plugin id="org.eclipse.equinox.launcher.gtk.linux.x86_64" fragment="true"/>
+      <plugin id="org.eclipse.equinox.launcher.win32.win32.x86" fragment="true"/>
+      <plugin id="org.eclipse.equinox.p2.artifact.repository"/>
+      <plugin id="org.eclipse.equinox.p2.console"/>
+      <plugin id="org.eclipse.equinox.p2.core"/>
+      <plugin id="org.eclipse.equinox.p2.director"/>
+      <plugin id="org.eclipse.equinox.p2.director.app"/>
+      <plugin id="org.eclipse.equinox.p2.directorywatcher"/>
+      <plugin id="org.eclipse.equinox.p2.engine"/>
+      <plugin id="org.eclipse.equinox.p2.exemplarysetup"/>
+      <plugin id="org.eclipse.equinox.p2.extensionlocation"/>
+      <plugin id="org.eclipse.equinox.p2.garbagecollector"/>
+      <plugin id="org.eclipse.equinox.p2.jarprocessor"/>
+      <plugin id="org.eclipse.equinox.p2.metadata"/>
+      <plugin id="org.eclipse.equinox.p2.metadata.generator"/>
+      <plugin id="org.eclipse.equinox.p2.metadata.repository"/>
+      <plugin id="org.eclipse.equinox.p2.publisher"/>
+      <plugin id="org.eclipse.equinox.p2.reconciler.dropins"/>
+      <plugin id="org.eclipse.equinox.p2.repository"/>
+      <plugin id="org.eclipse.equinox.p2.repository.tools"/>
+      <plugin id="org.eclipse.equinox.p2.touchpoint.eclipse"/>
+      <plugin id="org.eclipse.equinox.p2.touchpoint.natives"/>
+      <plugin id="org.eclipse.equinox.p2.ui"/>
+      <plugin id="org.eclipse.equinox.p2.ui.sdk"/>
+      <plugin id="org.eclipse.equinox.p2.ui.sdk.scheduler"/>
+      <plugin id="org.eclipse.equinox.p2.updatechecker"/>
+      <plugin id="org.eclipse.equinox.p2.updatesite"/>
+      <plugin id="org.eclipse.equinox.preferences"/>
+      <plugin id="org.eclipse.equinox.registry"/>
+      <plugin id="org.eclipse.equinox.security"/>
+      <plugin id="org.eclipse.equinox.security.macosx" fragment="true"/>
+      <plugin id="org.eclipse.equinox.security.ui"/>
+      <plugin id="org.eclipse.equinox.security.win32.x86" fragment="true"/>
+      <plugin id="org.eclipse.equinox.simpleconfigurator"/>
+      <plugin id="org.eclipse.equinox.simpleconfigurator.manipulator"/>
+      <plugin id="org.eclipse.equinox.util"/>
+      <plugin id="org.eclipse.gef"/>
+      <plugin id="org.eclipse.help"/>
+      <plugin id="org.eclipse.help.appserver"/>
+      <plugin id="org.eclipse.help.base"/>
+      <plugin id="org.eclipse.help.ui"/>
+      <plugin id="org.eclipse.help.webapp"/>
+      <plugin id="org.eclipse.jem"/>
+      <plugin id="org.eclipse.jem.util"/>
+      <plugin id="org.eclipse.jface"/>
+      <plugin id="org.eclipse.jface.databinding"/>
+      <plugin id="org.eclipse.jface.text"/>
+      <plugin id="org.eclipse.jsch.core"/>
+      <plugin id="org.eclipse.ltk.core.refactoring"/>
+      <plugin id="org.eclipse.ltk.ui.refactoring"/>
+      <plugin id="org.eclipse.osgi"/>
+      <plugin id="org.eclipse.osgi.services"/>
+      <plugin id="org.eclipse.osgi.util"/>
+      <plugin id="org.eclipse.platform"/>
+      <plugin id="org.eclipse.platform.doc.isv"/>
+      <plugin id="org.eclipse.platform.doc.user"/>
+      <plugin id="org.eclipse.rcp"/>
+      <plugin id="org.eclipse.search"/>
+      <plugin id="org.eclipse.servertools.doc.isv"/>
+      <plugin id="org.eclipse.swt"/>
+      <plugin id="org.eclipse.swt.cocoa.macosx.x86_64" fragment="true"/>
+      <plugin id="org.eclipse.swt.gtk.linux.x86" fragment="true"/>
+      <plugin id="org.eclipse.swt.gtk.linux.x86_64" fragment="true"/>
+      <plugin id="org.eclipse.swt.win32.win32.x86" fragment="true"/>
+      <plugin id="org.eclipse.team.core"/>
+      <plugin id="org.eclipse.team.cvs.core"/>
+      <plugin id="org.eclipse.team.cvs.ssh"/>
+      <plugin id="org.eclipse.team.cvs.ssh2"/>
+      <plugin id="org.eclipse.team.cvs.ui"/>
+      <plugin id="org.eclipse.team.ui"/>
+      <plugin id="org.eclipse.text"/>
+      <plugin id="org.eclipse.ui"/>
+      <plugin id="org.eclipse.ui.browser"/>
+      <plugin id="org.eclipse.ui.cheatsheets"/>
+      <plugin id="org.eclipse.ui.cocoa" fragment="true"/>
+      <plugin id="org.eclipse.ui.console"/>
+      <plugin id="org.eclipse.ui.editors"/>
+      <plugin id="org.eclipse.ui.externaltools"/>
+      <plugin id="org.eclipse.ui.forms"/>
+      <plugin id="org.eclipse.ui.ide"/>
+      <plugin id="org.eclipse.ui.ide.application"/>
+      <plugin id="org.eclipse.ui.intro"/>
+      <plugin id="org.eclipse.ui.intro.universal"/>
+      <plugin id="org.eclipse.ui.navigator"/>
+      <plugin id="org.eclipse.ui.navigator.resources"/>
+      <plugin id="org.eclipse.ui.net"/>
+      <plugin id="org.eclipse.ui.views"/>
+      <plugin id="org.eclipse.ui.views.log"/>
+      <plugin id="org.eclipse.ui.views.properties.tabbed"/>
+      <plugin id="org.eclipse.ui.win32" fragment="true"/>
+      <plugin id="org.eclipse.ui.workbench"/>
+      <plugin id="org.eclipse.ui.workbench.texteditor"/>
+      <plugin id="org.eclipse.update.configurator"/>
+      <plugin id="org.eclipse.update.core"/>
+      <plugin id="org.eclipse.update.core.linux" fragment="true"/>
+      <plugin id="org.eclipse.update.core.win32" fragment="true"/>
+      <plugin id="org.eclipse.update.scheduler"/>
+      <plugin id="org.eclipse.update.ui"/>
+      <plugin id="org.eclipse.wst.common.core"/>
+      <plugin id="org.eclipse.wst.common.emf"/>
+      <plugin id="org.eclipse.wst.common.emfworkbench.integration"/>
+      <plugin id="org.eclipse.wst.common.environment"/>
+      <plugin id="org.eclipse.wst.common.frameworks"/>
+      <plugin id="org.eclipse.wst.common.frameworks.ui"/>
+      <plugin id="org.eclipse.wst.common.infopop"/>
+      <plugin id="org.eclipse.wst.common.modulecore"/>
+      <plugin id="org.eclipse.wst.common.project.facet.core"/>
+      <plugin id="org.eclipse.wst.common.snippets"/>
+      <plugin id="org.eclipse.wst.common.ui"/>
+      <plugin id="org.eclipse.wst.common.uriresolver"/>
+      <plugin id="org.eclipse.wst.css.core"/>
+      <plugin id="org.eclipse.wst.css.ui"/>
+      <plugin id="org.eclipse.wst.doc.user"/>
+      <plugin id="org.eclipse.wst.html.core"/>
+      <plugin id="org.eclipse.wst.html.ui"/>
+      <plugin id="org.eclipse.wst.html.ui.infopop"/>
+      <plugin id="org.eclipse.wst.internet.cache"/>
+      <plugin id="org.eclipse.wst.internet.monitor.core"/>
+      <plugin id="org.eclipse.wst.internet.monitor.ui"/>
+      <plugin id="org.eclipse.wst.jsdt.core"/>
+      <plugin id="org.eclipse.wst.jsdt.doc"/>
+      <plugin id="org.eclipse.wst.jsdt.manipulation"/>
+      <plugin id="org.eclipse.wst.jsdt.support.firefox"/>
+      <plugin id="org.eclipse.wst.jsdt.support.ie"/>
+      <plugin id="org.eclipse.wst.jsdt.ui"/>
+      <plugin id="org.eclipse.wst.jsdt.web.core"/>
+      <plugin id="org.eclipse.wst.jsdt.web.ui"/>
+      <plugin id="org.eclipse.wst.sse.core"/>
+      <plugin id="org.eclipse.wst.sse.doc.user"/>
+      <plugin id="org.eclipse.wst.sse.ui"/>
+      <plugin id="org.eclipse.wst.sse.ui.infopop"/>
+      <plugin id="org.eclipse.wst.standard.schemas"/>
+      <plugin id="org.eclipse.wst.validation"/>
+      <plugin id="org.eclipse.wst.validation.doc.isv"/>
+      <plugin id="org.eclipse.wst.validation.infopop"/>
+      <plugin id="org.eclipse.wst.validation.ui"/>
+      <plugin id="org.eclipse.wst.xml.core"/>
+      <plugin id="org.eclipse.wst.xml.ui"/>
+      <plugin id="org.eclipse.wst.xml.ui.infopop"/>
+      <plugin id="org.eclipse.wst.xml.xpath.core"/>
+      <plugin id="org.eclipse.wst.xml.xpath.ui"/>
+      <plugin id="org.eclipse.wst.xml.xpath2.processor"/>
+      <plugin id="org.eclipse.wst.xmleditor.doc.user"/>
+      <plugin id="org.eclipse.wtp.epp.package.jee.intro"/>
+      <plugin id="org.jdom"/>
+      <plugin id="org.mortbay.jetty.server"/>
+      <plugin id="org.mortbay.jetty.util"/>
+      <plugin id="org.mozilla.xpcom"/>
+      <plugin id="org.mozilla.xulrunner"/>
+      <plugin id="org.mozilla.xulrunner.win32.win32.x86" fragment="true"/>
+      <plugin id="org.objectweb.asm"/>
+      <plugin id="org.sat4j.core"/>
+      <plugin id="org.sat4j.pb"/>
+      <plugin id="org.symbian.tools.wrttools"/>
+      <plugin id="org.symbian.tools.wrttools.debug.core"/>
+      <plugin id="org.symbian.tools.wrttools.editors"/>
+      <plugin id="org.symbian.tools.wrttools.previewer"/>
+      <plugin id="org.symbian.tools.wrttools.product"/>
+   </plugins>
+
+
+</product>
--- a/org.symbian.tools.wrttools/META-INF/MANIFEST.MF	Thu Jan 21 09:00:50 2010 -0800
+++ b/org.symbian.tools.wrttools/META-INF/MANIFEST.MF	Thu Jan 21 11:52:32 2010 -0800
@@ -20,7 +20,9 @@
  org.eclipse.ui.ide;bundle-version="3.5.0",
  org.eclipse.wst.validation;bundle-version="1.2.102",
  org.eclipse.wst.sse.core;bundle-version="1.1.400",
- org.eclipse.wst.xml.core;bundle-version="1.1.400"
+ org.eclipse.wst.xml.core;bundle-version="1.1.400",
+ org.eclipse.ui.navigator;bundle-version="3.4.0",
+ org.eclipse.ui.navigator.resources;bundle-version="3.4.0"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Bundle-ActivationPolicy: lazy
 Import-Package: org.apache.velocity;version="1.5.0",
@@ -44,7 +46,6 @@
  org.eclipse.emf.common.util,
  org.eclipse.emf.ecore,
  org.eclipse.emf.ecore.impl,
- org.eclipse.jdt.ui,
  org.eclipse.ui.console,
  org.eclipse.ui.dialogs,
  org.eclipse.ui.ide,
@@ -53,3 +54,4 @@
  org.eclipse.ui.wizards.newresource
 Bundle-ClassPath: lib/tagsoup-1.2.jar,
  .
+Export-Package: org.symbian.tools.wrttools.wizards
--- a/org.symbian.tools.wrttools/plugin.xml	Thu Jan 21 09:00:50 2010 -0800
+++ b/org.symbian.tools.wrttools/plugin.xml	Thu Jan 21 11:52:32 2010 -0800
@@ -1,160 +1,384 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?eclipse version="3.4"?>
 <plugin>
-   <extension-point id="org.eclipse.core.resources" name="Incremental Project Builders" schema="schema/org.eclipse.core.resources.exsd"/>
-   <extension-point id="org.eclipse.ui.javaScriptProjectNatureImage" name="JavaScript Nature Image" schema="schema/org.eclipse.ui.javaScriptProjectNatureImage.exsd"/>
 
-   <extension
-         id="PropertiesFileAuditor"
-         name="Properties File Auditor Project Builder"
-         point="org.eclipse.core.resources.builders">
-      <builder
-            hasNature="true">
-         <run
-               class="org.symbian.tools.wrttools.builder.PropertiesFileAuditor">
-         </run>
-      </builder>
-   </extension>
-   <extension
-         id="PropertiesAuditorNature"
-         name="Properties Auditor Nature"
-         point="org.eclipse.core.resources.natures">
-      <runtime>
-         <run
-               class="org.symbian.tools.wrttools.builder.PropertiesAuditorNature">
-         </run>
-      </runtime>
-      <requires-nature id="org.eclipse.wst.jsdt.core.jsNature"/>
-      <requires-nature id="org.eclipse.pde.PluginNature"/>
-      <builder
-            id="org.symbian.tools.wrttools.builder.PropertiesFileAuditor">
-      </builder>
-   </extension>
-   <extension-point id="projectTemplates" name="WRT application project templates" schema="schema/projectTemplates.exsd"/>
-    <extension
-         id="org.symbian.tools.wrttools.core.cssvalidator"
-         name="CSS Validator"
-         point="org.eclipse.wst.validation.validatorV2">
-      <validator
-            build="true"
-            class="org.symbian.tools.wrttools.core.internal.validation.CssBuildValidator"
-            manual="true"
-            markerId="org.symbian.tools.wrttools.core.cssValidationMarker"
-            version="0.0.1">
-         <include>
-            <rules>
-               <contentType
-                     exactMatch="false"
-                     id="org.eclipse.wst.css.core.csssource">
-               </contentType>
-            </rules>
-         </include>
-      </validator>
-   </extension>
-   <extension
-         point="org.eclipse.ui.newWizards">
-      <category
-            id="org.symbian.tools.wrttools.core.category"
-            name="Web Runtime(WRT)">
-      </category>
-      <wizard
-            category="org.symbian.tools.wrttools.core.category"
-            class="org.symbian.tools.wrttools.wizards.WrtWidgetWizard"
-            finalPerspective="org.eclipse.wst.jsdt.ui.JavaPerspective"
-            hasPages="true"
-            icon="icons/main16.gif"
-            id="org.symbian.tools.wrttools.core.wrtwidgetwizard"
-            name="Web Runtime Application"
-            project="true">
-         <description>
-            Creates a new Symbian WRT application project using one of the provided templates
+	<extension id="PropertiesFileAuditor" name="Properties File Auditor Project Builder"
+		point="org.eclipse.core.resources.builders">
+		<builder hasNature="true">
+			<run class="org.symbian.tools.wrttools.builder.PropertiesFileAuditor">
+			</run>
+		</builder>
+	</extension>
+	<extension id="PropertiesAuditorNature" name="Properties Auditor Nature"
+		point="org.eclipse.core.resources.natures">
+		<runtime>
+			<run class="org.symbian.tools.wrttools.builder.PropertiesAuditorNature">
+			</run>
+		</runtime>
+		<requires-nature id="org.eclipse.wst.jsdt.core.jsNature" />
+		<requires-nature id="org.eclipse.pde.PluginNature" />
+		<builder id="org.symbian.tools.wrttools.builder.PropertiesFileAuditor">
+		</builder>
+	</extension>
+	<extension-point id="projectTemplates" name="WRT application project templates" schema="schema/projectTemplates.exsd"/>
+	<extension id="org.symbian.tools.wrttools.core.cssvalidator"
+		name="CSS Validator" point="org.eclipse.wst.validation.validatorV2">
+		<validator build="true"
+			class="org.symbian.tools.wrttools.core.internal.validation.CssBuildValidator"
+			manual="true" markerId="org.symbian.tools.wrttools.core.cssValidationMarker"
+			version="0.0.1">
+			<include>
+				<rules>
+					<contentType exactMatch="false"
+						id="org.eclipse.wst.css.core.csssource">
+					</contentType>
+				</rules>
+			</include>
+		</validator>
+	</extension>
+	<extension point="org.eclipse.ui.newWizards">
+		<category id="org.symbian.tools.wrttools.core.category" name="Web Runtime(WRT)">
+		</category>
+		<wizard category="org.symbian.tools.wrttools.core.category"
+			class="org.symbian.tools.wrttools.wizards.WrtWidgetWizard"
+			finalPerspective="org.symbian.tools.wrttools.mainPerspective"
+			hasPages="true" icon="icons/main16.gif"
+			id="org.symbian.tools.wrttools.core.wrtwidgetwizard" name="Web Runtime Application"
+			project="true">
+			<description>
+				Creates a new Symbian WRT application project using one of the provided
+				templates
+         </description>
+		</wizard>
+		<wizard category="org.symbian.tools.wrttools.core.category"
+			class="org.symbian.tools.wrttools.wizards.AptanaProjectsImportWizard"
+			finalPerspective="org.symbian.tools.wrttools.mainPerspective"
+			hasPages="true" icon="icons/main16.gif"
+			id="org.symbian.tools.wrttools.newImportAptanaProject" name="Import Aptana IDE WRT Project"
+			project="true">
+		</wizard>
+	</extension>
+	<extension point="org.symbian.tools.wrttools.projectTemplates">
+		<projectTemplate
+		name="Basic Widget Project"
+        archive="projecttemplates/basic.zip"
+        default-css-name="basic"
+        default-html-name="index"
+        default-js-name="basic"
+        icon="icons/main16.gif"
+        id-pattern="com.{0}.basic.widget">
+			<description>
+				This wizard generates an empty widget project with a minimal Info.plist, html,css and js.
          </description>
-      </wizard>
-      <wizard
-            category="org.symbian.tools.wrttools.core.category"
-            class="org.symbian.tools.wrttools.wizards.AptanaProjectsImportWizard"
-            finalPerspective="org.eclipse.wst.jsdt.ui.JavaPerspective"
-            hasPages="true"
-            icon="icons/main16.gif"
-            id="org.symbian.tools.wrttools.newImportAptanaProject"
-            name="Import Aptana IDE WRT Project"
-            project="true">
-      </wizard>
-   </extension>
-   <extension
-         point="org.symbian.tools.wrttools.projectTemplates">
-      <projectTemplate
-            archive="projecttemplates/basic.zip"
-            default-css-name="basic"
-            default-html-name="index"
-            default-js-name="basic"
-            icon="icons/main16.gif"
-            id-pattern="com.{0}.basic.widget"
-            name="Basic Widget Project">
-         <description>
-            This wizard generates an empty widget project with a minimal Info.plist, html,css and js.
-         </description>
-      </projectTemplate>
-   </extension>
-   <extension
-         point="org.eclipse.ui.importWizards">
-      <category
-            id="org.symbian.tools.wrttools.import"
-            name="Web Runtime(WRT)">
-      </category>
-      <wizard
-            category="org.symbian.tools.wrttools.import"
-            class="org.symbian.tools.wrttools.wizards.AptanaProjectsImportWizard"
-            icon="icons/main16.gif"
-            id="org.symbian.tools.wrttools.import.aptanaImport"
-            name="Aptana IDE WRT Project">
-      </wizard>
-   </extension>
-      <extension
-         id="org.symbian.tools.wrt.xmlProblem"
-         name="XML Problem"
-         point="org.eclipse.core.resources.markers">
-      <super
-            type="org.eclipse.core.resources.problemmarker">
-      </super>
-      <persistent
-            value="true">
-      </persistent>
-   </extension>
-   <extension
-         id="org.symbian.tools.wrt.jsProblem"
-         name="JSProblem"
-         point="org.eclipse.core.resources.markers">
-      <super
-            type="org.eclipse.core.resources.problemmarker">
-      </super>
-      <persistent
-            value="true">
-      </persistent>
-   </extension>
-      <extension
-         point="org.eclipse.core.contenttype.contentTypes">
-      <content-type
-            base-type="org.eclipse.core.runtime.xml"
-            file-extensions="plist"
-            id="org.symbian.tools.wrttools.contenttype.plist"
-            name="WebRuntime Descriptor File"
-            priority="normal">
-      </content-type>
-   </extension>
-      <extension
-            point="org.eclipse.ui.perspectiveExtensions">
-         <perspectiveExtension
-               targetID="org.eclipse.wst.jsdt.ui.JavaPerspective">
-            <newWizardShortcut
-                  id="org.symbian.tools.wrttools.core.wrtwidgetwizard">
-            </newWizardShortcut>
-         </perspectiveExtension>
-         <perspectiveExtension
-               targetID="org.eclipse.debug.ui.DebugPerspective">
-            <newWizardShortcut
-                  id="org.symbian.tools.wrttools.core.wrtwidgetwizard">
-            </newWizardShortcut>
-         </perspectiveExtension>
-      </extension>
+		</projectTemplate>
+	</extension>
+	<extension point="org.eclipse.ui.importWizards">
+		<category id="org.symbian.tools.wrttools.import" name="Web Runtime(WRT)">
+		</category>
+		<wizard category="org.symbian.tools.wrttools.import"
+			class="org.symbian.tools.wrttools.wizards.AptanaProjectsImportWizard"
+			icon="icons/main16.gif" id="org.symbian.tools.wrttools.import.aptanaImport"
+			name="Aptana IDE WRT Project">
+		</wizard>
+	</extension>
+	<extension id="org.symbian.tools.wrt.xmlProblem" name="XML Problem"
+		point="org.eclipse.core.resources.markers">
+		<super type="org.eclipse.core.resources.problemmarker">
+		</super>
+		<persistent value="true">
+		</persistent>
+	</extension>
+	<extension id="org.symbian.tools.wrt.jsProblem" name="JSProblem"
+		point="org.eclipse.core.resources.markers">
+		<super type="org.eclipse.core.resources.problemmarker">
+		</super>
+		<persistent value="true">
+		</persistent>
+	</extension>
+	<extension point="org.eclipse.core.contenttype.contentTypes">
+		<content-type base-type="org.eclipse.core.runtime.xml"
+			file-extensions="plist" id="org.symbian.tools.wrttools.contenttype.plist"
+			name="WebRuntime Descriptor File" priority="normal">
+		</content-type>
+	</extension>
+	<extension point="org.eclipse.ui.perspectiveExtensions">
+		<perspectiveExtension targetID="org.eclipse.wst.jsdt.ui.JavaPerspective">
+			<newWizardShortcut id="org.symbian.tools.wrttools.core.wrtwidgetwizard">
+			</newWizardShortcut>
+		</perspectiveExtension>
+		<perspectiveExtension targetID="org.eclipse.debug.ui.DebugPerspective">
+			<newWizardShortcut id="org.symbian.tools.wrttools.core.wrtwidgetwizard">
+			</newWizardShortcut>
+		</perspectiveExtension>
+	</extension>
+	<extension point="org.eclipse.ui.views">
+		<view allowMultiple="false" category="org.symbian.tools.wrttools.views"
+			class="org.eclipse.ui.navigator.CommonNavigator" icon="icons/main16.gif"
+			id="org.symbian.tools.wrttools.wrtnavigator" name="WRT Navigator"
+			restorable="true">
+		</view>
+		<category id="org.symbian.tools.wrttools.views" name="WRT Tools">
+		</category>
+	</extension>
+	<extension point="org.eclipse.ui.navigator.viewer">
+		<viewer viewerId="org.symbian.tools.wrttools.wrtnavigator">
+			<popupMenu allowsPlatformContributions="true"
+				id="org.eclipse.ui.navigator.ProjectExplorer#PopupMenu">
+				<insertionPoint name="group.new" />
+				<insertionPoint name="group.open" separator="true" />
+				<insertionPoint name="group.openWith" />
+				<insertionPoint name="group.edit" separator="true" />
+				<insertionPoint name="group.reorganize" />
+				<insertionPoint name="group.port" separator="true" />
+				<insertionPoint name="group.build" separator="true" />
+				<insertionPoint name="group.generate" separator="true" />
+				<insertionPoint name="group.search" separator="true" />
+				<insertionPoint name="additions" separator="true" />
+				<insertionPoint name="group.properties" separator="true" />
+
+			</popupMenu>
+		</viewer>
+		<viewerContentBinding viewerId="org.symbian.tools.wrttools.wrtnavigator">
+			<includes>
+				<contentExtension pattern="org.eclipse.ui.navigator.resourceContent" />
+				<contentExtension
+          isRoot="true"
+          pattern="org.symbian.tools.wrttools.navigatorcontent"/>
+				<contentExtension pattern="org.eclipse.ui.navigator.resources.filters.*" />
+				<contentExtension pattern="org.eclipse.ui.navigator.resources.linkHelper" />
+				<contentExtension pattern="org.eclipse.ui.navigator.resources.workingSets" />
+			</includes>
+		</viewerContentBinding>
+		<viewerActionBinding viewerId="org.symbian.tools.wrttools.wrtnavigator">
+			<includes>
+				<actionExtension pattern="org.eclipse.ui.navigator.resources.*" />
+			</includes>
+		</viewerActionBinding>
+		<dragAssistant
+			class="org.eclipse.ui.navigator.resources.ResourceDragAdapterAssistant"
+			viewerId="org.symbian.tools.wrttools.wrtnavigator" />
+	</extension>
+	 <extension
+       point="org.eclipse.ui.navigator.navigatorContent">
+    <navigatorContent
+          activeByDefault="true"
+          contentProvider="org.symbian.tools.wrttools.navigator.WRTNavigatorContentProvider"
+          icon="icons/main16.gif"
+          id="org.symbian.tools.wrttools.navigatorcontent"
+          labelProvider="org.eclipse.wst.jsdt.internal.ui.navigator.JavaNavigatorLabelProvider"
+          name="WRT Elements"
+          priority="high"
+          providesSaveables="false">
+       <triggerPoints>
+          <or>
+             <and>
+                <instanceof
+                      value="org.eclipse.core.resources.IResource">
+                </instanceof>
+                <adapt
+                      type="org.eclipse.core.resources.IProject">
+                   <test
+                         property="org.eclipse.core.resources.projectNature"
+                         value="org.eclipse.wst.jsdt.core.jsNature">
+                   </test>
+                </adapt>
+             </and>
+             <instanceof
+                   value="org.eclipse.wst.jsdt.core.IJavaScriptElement">
+             </instanceof>
+             <instanceof
+                   value="org.eclipse.wst.jsdt.core.IJarEntryResource">
+             </instanceof>
+             <instanceof
+                   value="org.eclipse.wst.jsdt.internal.ui.packageview.PackageFragmentRootContainer">
+             </instanceof>
+             <instanceof
+                   value="org.eclipse.wst.jsdt.ui.ProjectLibraryRoot">
+             </instanceof>
+          </or>
+       </triggerPoints>
+       <possibleChildren>
+          <or>
+             <instanceof
+                   value="org.eclipse.core.resources.IResource">
+             </instanceof>
+             <instanceof
+                   value="org.eclipse.wst.jsdt.core.IJavaScriptElement">
+             </instanceof>
+             <instanceof
+                   value="org.eclipse.wst.jsdt.core.IJarEntryResource">
+             </instanceof>
+             <instanceof
+                   value="org.eclipse.wst.jsdt.ui.ProjectLibraryRoot">
+             </instanceof>
+          </or>
+       </possibleChildren>
+       <actionProvider
+             class="org.eclipse.wst.jsdt.internal.ui.navigator.JavaNavigatorViewActionProvider"
+             id="org.eclipse.wst.jsdt.ui.navigator.actions.ViewActions">
+          <enablement>
+             <or>
+                <instanceof
+                      value="org.eclipse.core.resources.IWorkspaceRoot">
+                </instanceof>
+                <adapt
+                      type="java.util.Collection">
+                   <count
+                         value="0">
+                   </count>
+                </adapt>
+             </or>
+          </enablement>
+       </actionProvider>
+       <actionProvider
+             class="org.eclipse.wst.jsdt.internal.ui.navigator.JavaNavigatorActionProvider"
+             id="org.eclipse.wst.jsdt.ui.navigator.actions.StandardActions"
+             overrides="org.eclipse.ui.navigator.resources.actions.EditActions">
+          <enablement>
+             <or>
+                <and>
+                   <instanceof
+                         value="org.eclipse.core.resources.IProject">
+                   </instanceof>
+                   <test
+                         property="org.eclipse.core.resources.projectNature"
+                         value="org.eclipse.wst.jsdt.core.jsNature">
+                   </test>
+                </and>
+                <instanceof
+                      value="org.eclipse.wst.jsdt.core.IJavaScriptElement">
+                </instanceof>
+                <instanceof
+                      value="org.eclipse.wst.jsdt.core.IJarEntryResource">
+                </instanceof>
+                <instanceof
+                      value="org.eclipse.wst.jsdt.internal.ui.packageview.PackageFragmentRootContainer">
+                </instanceof>
+                <adapt
+                      type="java.util.Collection">
+                   <count
+                         value="0">
+                   </count>
+                </adapt>
+             </or>
+          </enablement>
+       </actionProvider>
+       <actionProvider
+             class="org.eclipse.wst.jsdt.internal.ui.navigator.JavaNavigatorRefactorActionProvider"
+             id="org.eclipse.wst.jsdt.ui.navigator.actions.RefactorActions"
+             overrides="org.eclipse.ui.navigator.resources.actions.RefactorActions">
+          <enablement>
+             <or>
+                <and>
+                   <instanceof
+                         value="org.eclipse.core.resources.IProject">
+                   </instanceof>
+                   <test
+                         property="org.eclipse.core.resources.projectNature"
+                         value="org.eclipse.wst.jsdt.core.jsNature">
+                   </test>
+                </and>
+                <instanceof
+                      value="org.eclipse.wst.jsdt.core.IJavaScriptElement">
+                </instanceof>
+                <instanceof
+                      value="org.eclipse.wst.jsdt.core.IJarEntryResource">
+                </instanceof>
+                <instanceof
+                      value="org.eclipse.wst.jsdt.internal.ui.packageview.PackageFragmentRootContainer">
+                </instanceof>
+                <adapt
+                      type="java.util.Collection">
+                   <count
+                         value="0">
+                   </count>
+                </adapt>
+             </or>
+          </enablement>
+       </actionProvider>
+       <actionProvider
+             class="org.eclipse.wst.jsdt.internal.ui.navigator.PackageExplorerOpenActionProvider"
+             id="org.eclipse.wst.jsdt.ui.navigator.actions.OpenActions"
+             overrides="org.eclipse.ui.navigator.resources.OpenActions">
+       </actionProvider>
+       <override
+             policy="InvokeAlwaysRegardlessOfSuppressedExt"
+             suppressedExtensionId="org.eclipse.ui.navigator.resourceContent">
+       </override>
+       <commonWizard
+             menuGroupId="group.new"
+             type="new"
+             wizardId="org.symbian.tools.wrttools.core.wrtwidgetwizard">
+          <enablement>
+             <or>
+                <adapt
+                      type="org.eclipse.core.resources.IResource">
+                </adapt>
+                <count
+                      value="0">
+                </count>
+             </or>
+          </enablement>
+       </commonWizard>
+       <commonWizard
+             type="new"
+             wizardId="org.eclipse.wst.html.ui.internal.wizard.NewHTMLWizard">
+          <enablement>
+             <adapt
+                   type="org.eclipse.core.resources.IResource">
+             </adapt>
+          </enablement>
+       </commonWizard>
+       <commonWizard
+             type="new"
+             wizardId="org.eclipse.wst.css.ui.internal.wizard.NewCSSWizard">
+          <enablement>
+             <adapt
+                   type="org.eclipse.core.resources.IResource">
+             </adapt>
+          </enablement>
+       </commonWizard>
+       <commonWizard
+             type="new"
+             wizardId="org.eclipse.wst.jsdt.ui.NewJSWizard">
+          <enablement>
+             <adapt
+                   type="org.eclipse.core.resources.IResource">
+             </adapt>
+          </enablement>
+       </commonWizard>
+       <commonWizard
+             type="import"
+             wizardId="org.symbian.tools.wrttools.import.aptanaImport">
+          <enablement>
+             <or>
+                <adapt
+                      type="org.eclipse.core.resources.IResource">
+                </adapt>
+                <count
+                      value="0">
+                </count>
+             </or>
+          </enablement>
+       </commonWizard>
+       <dropAssistant
+             class="org.eclipse.wst.jsdt.internal.ui.navigator.JavaDropAdapterAssistant"
+             id="org.eclipse.wst.jsdt.ui.dropAssistant">
+          <possibleDropTargets>
+             <or>
+                <instanceof
+                      value="org.eclipse.core.resources.IResource">
+                </instanceof>
+                <instanceof
+                      value="org.eclipse.wst.jsdt.core.IJavaScriptElement">
+                </instanceof>
+             </or>
+          </possibleDropTargets>
+       </dropAssistant>
+       <commonSorter
+             class="org.symbian.tools.wrttools.navigator.NavigatorSorter"
+             id="org.symbian.tools.wrttools.sorter">
+       </commonSorter>
+    </navigatorContent>
+ </extension>
 </plugin>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/navigator/NavigatorSorter.java	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,67 @@
+package org.symbian.tools.wrttools.navigator;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.wst.jsdt.core.IJavaScriptElement;
+import org.eclipse.wst.jsdt.ui.JavaScriptElementComparator;
+
+public class NavigatorSorter extends ViewerSorter {
+	private final JavaScriptElementComparator jsComparator = new JavaScriptElementComparator();
+	
+	@Override
+	public int compare(Viewer viewer, Object e1, Object e2) {
+		if (e1 == e2) {
+			return 0;
+		} else if (e1 == null) { 
+			return 1;
+		} else if (e2 == null) {
+			return -1;
+		}
+		
+		if (e1 instanceof IJavaScriptElement && e2 instanceof IJavaScriptElement) {
+			return compareJavaScriptElements(viewer, (IJavaScriptElement) e1, (IJavaScriptElement) e2);
+		}
+		IResource res1 = getResource(e1);
+		IResource res2 = getResource(e2);
+		
+		if (res1 == res2) {
+			return 0;
+		} else if (res1 == null) {
+			return 1;
+		} else if (res2 == null) {
+			return -1;
+		} else {
+			int res1type = res1.getType();
+			int res2type = res2.getType();
+			if (res1type == res2type) {
+				// Note: Files cannot have same name in different case - enforced by Eclipse
+				return res1.getName().toLowerCase().compareTo(res2.getName().toLowerCase());
+			} else if (res1type == IResource.PROJECT) {
+				return -1;
+			} else if (res1type == IResource.PROJECT) {
+				return 1;
+			} else if (res1type == IResource.FOLDER) {
+				return -1;
+			} else {
+				return 1;
+			}
+		}
+	}
+
+	private IResource getResource(Object e1) {
+		if (e1 instanceof IResource) {
+			return (IResource) e1;
+		} else if (e1 instanceof IAdaptable) {
+			return (IResource) ((IAdaptable) e1).getAdapter(IResource.class);
+		} else {
+			return null;
+		}
+	}
+
+	private int compareJavaScriptElements(Viewer viewer, IJavaScriptElement e1, IJavaScriptElement e2) {
+		return jsComparator.compare(viewer, e1, e2);
+	}
+	
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/navigator/WRTNavigatorContentProvider.java	Thu Jan 21 11:52:32 2010 -0800
@@ -0,0 +1,137 @@
+package org.symbian.tools.wrttools.navigator;
+
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.TreeSet;
+
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.wst.jsdt.core.IJavaScriptElement;
+import org.eclipse.wst.jsdt.core.IJavaScriptModel;
+import org.eclipse.wst.jsdt.core.IJavaScriptProject;
+import org.eclipse.wst.jsdt.core.JavaScriptCore;
+import org.eclipse.wst.jsdt.core.JavaScriptModelException;
+import org.eclipse.wst.jsdt.internal.ui.navigator.JavaNavigatorContentProvider;
+import org.symbian.tools.wrttools.Activator;
+
+public class WRTNavigatorContentProvider extends JavaNavigatorContentProvider
+		implements ITreeContentProvider {
+
+	private static final class TreeElementsComparator implements Comparator<Object> {
+		@Override
+		public int compare(Object o1, Object o2) {
+			IResource res1 = getResource(o1);
+			IResource res2 = getResource(o2);
+			if (o1 == o2) {
+				return 0;
+			} else if (o1 == null) {
+				return -1;
+			} else if (o2 == null) {
+				return 1;
+			}
+			
+			boolean isFolder1 = isFolder(res1);
+			boolean isFolder2 = isFolder(res2);
+			
+			if (isFolder1 == isFolder2) {
+				return res1.getName().compareTo(res2.getName());
+			} else if (isFolder1) {
+				return 1;
+			} else {
+				return -1;
+			}
+		}
+
+		private boolean isFolder(IResource res1) {
+			return res1.getType() == IResource.FOLDER || res1.getType() == IResource.PROJECT;
+		}
+
+		private IResource getResource(Object o1) {
+			final IResource result;
+			if (o1 instanceof IResource) {
+				result = (IResource) o1;
+			} else if (o1 instanceof IAdaptable) {
+				result = (IResource) ((IAdaptable) o1).getAdapter(IResource.class);
+			} else {
+				result = null;
+			}
+			return result;
+		}
+	}
+	
+	
+	@Override
+	protected Object[] getPackageFragmentRoots(IJavaScriptProject project)
+			throws JavaScriptModelException {
+		try {
+			return filter(project.getProject().members());
+		} catch (CoreException e) {
+			Activator.log(e);
+		}
+		return new Object[0];
+	}
+	
+	private Object[] filter(IResource[] members) {
+		TreeSet<Object> output = new TreeSet<Object>(new TreeElementsComparator());
+		for (int i = 0; i < members.length; i++) {
+			IResource resource = members[i];
+			Object res = resource;
+			if (resource.getType() == IResource.FILE) {
+				IJavaScriptElement element = JavaScriptCore.create(resource);
+				if (element != null) {
+					res = element;
+				}
+			}
+			output.add(res);
+		}
+		return output.toArray();
+	}
+
+	@Override
+	protected Object[] getFolderContent(IFolder folder) throws CoreException {
+		return filter(folder.members());
+	}
+	
+	@Override
+	protected void postAdd(Object parent, Object element, Collection runnables) {
+		if (parent instanceof IWorkspace) {
+			super.postAdd(((IWorkspace) parent).getRoot(), element, runnables);
+		} else if (parent instanceof IJavaScriptModel) {
+			super.postAdd(((IJavaScriptModel) parent).getWorkspace().getRoot(),
+					element, runnables);
+		} else {
+			super.postAdd(parent, element, runnables);
+		}
+	}
+	
+//	@Override
+//	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+//		this.viewer = viewer;
+//		super.inputChanged(viewer, oldInput, newInput);
+//	}
+//	
+//	@SuppressWarnings("unchecked")
+//	@Override
+//	protected void postAdd(final Object parent, final Object element, Collection runnables) {
+//		final Object p;
+//		if (element instanceof IProject) {
+//			p = null;
+//		} else {
+//			p = parent;
+//		}
+//		runnables.add(new Runnable() {
+//			@Override
+//			public void run() {
+//				if (p != null) {
+//					((TreeViewer) viewer).refresh(p);
+//				} else {
+//					((TreeViewer) viewer).refresh();
+//				}
+//			}
+//		});
+//	}
+}
--- a/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/perspectives/RelEngPerspective.java	Thu Jan 21 09:00:50 2010 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,127 +0,0 @@
-/**
- * Copyright (c) 2009 Symbian Foundation and/or its subsidiary(-ies).
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the License "Eclipse Public License v1.0"
- * which accompanies this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html".
- *
- * Initial Contributors:
- * Symbian Foundation - initial contribution.
- * Contributors:
- * Description:
- * Overview:
- * Details:
- * Platforms/Drives/Compatibility:
- * Assumptions/Requirement/Pre-requisites:
- * Failures and causes:
- */
-package org.symbian.tools.wrttools.perspectives;
-/*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-import org.eclipse.ui.IFolderLayout;
-import org.eclipse.ui.IPageLayout;
-import org.eclipse.ui.IPerspectiveFactory;
-import org.eclipse.ui.console.IConsoleConstants;
-import org.eclipse.jdt.ui.JavaUI;
-
-
-/**
- *  This class is meant to serve as an example for how various contributions 
- *  are made to a perspective. Note that some of the extension point id's are
- *  referred to as API constants while others are hardcoded and may be subject 
- *  to change. 
- */
-public class RelEngPerspective implements IPerspectiveFactory {
-
-	private IPageLayout factory;
-
-	public RelEngPerspective() {
-		super();
-	}
-
-	public void createInitialLayout(IPageLayout factory) {
-		this.factory = factory;
-		addViews();
-		addActionSets();
-		addNewWizardShortcuts();
-		addPerspectiveShortcuts();
-		addViewShortcuts();
-	}
-
-	private void addViews() {
-		// Creates the overall folder layout. 
-		// Note that each new Folder uses a percentage of the remaining EditorArea.
-		
-		IFolderLayout bottom =
-			factory.createFolder(
-				"bottomRight", //NON-NLS-1
-				IPageLayout.BOTTOM,
-				0.75f,
-				factory.getEditorArea());
-		bottom.addView(IPageLayout.ID_PROBLEM_VIEW);
-		bottom.addView("org.eclipse.team.ui.GenericHistoryView"); //NON-NLS-1
-		bottom.addPlaceholder(IConsoleConstants.ID_CONSOLE_VIEW);
-
-		IFolderLayout topLeft =
-			factory.createFolder(
-				"topLeft", //NON-NLS-1
-				IPageLayout.LEFT,
-				0.25f,
-				factory.getEditorArea());
-		topLeft.addView(IPageLayout.ID_RES_NAV);
-		topLeft.addView("org.eclipse.jdt.junit.ResultView"); //NON-NLS-1
-		
-		factory.addFastView("org.eclipse.team.ccvs.ui.RepositoriesView",0.50f); //NON-NLS-1
-		factory.addFastView("org.eclipse.team.sync.views.SynchronizeView", 0.50f); //NON-NLS-1
-	}
-
-	private void addActionSets() {
-		factory.addActionSet("org.eclipse.debug.ui.launchActionSet"); //NON-NLS-1
-		factory.addActionSet("org.eclipse.debug.ui.debugActionSet"); //NON-NLS-1
-		factory.addActionSet("org.eclipse.debug.ui.profileActionSet"); //NON-NLS-1
-		factory.addActionSet("org.eclipse.jdt.debug.ui.JDTDebugActionSet"); //NON-NLS-1
-		factory.addActionSet("org.eclipse.jdt.junit.JUnitActionSet"); //NON-NLS-1
-		factory.addActionSet("org.eclipse.team.ui.actionSet"); //NON-NLS-1
-		factory.addActionSet("org.eclipse.team.cvs.ui.CVSActionSet"); //NON-NLS-1
-		factory.addActionSet("org.eclipse.ant.ui.actionSet.presentation"); //NON-NLS-1
-		factory.addActionSet(JavaUI.ID_ACTION_SET);
-		factory.addActionSet(JavaUI.ID_ELEMENT_CREATION_ACTION_SET);
-		factory.addActionSet(IPageLayout.ID_NAVIGATE_ACTION_SET); //NON-NLS-1
-	}
-
-	private void addPerspectiveShortcuts() {
-		factory.addPerspectiveShortcut("org.eclipse.team.ui.TeamSynchronizingPerspective"); //NON-NLS-1
-		factory.addPerspectiveShortcut("org.eclipse.team.cvs.ui.cvsPerspective"); //NON-NLS-1
-		factory.addPerspectiveShortcut("org.eclipse.ui.resourcePerspective"); //NON-NLS-1
-	}
-
-	private void addNewWizardShortcuts() {
-		factory.addNewWizardShortcut("org.eclipse.team.cvs.ui.newProjectCheckout");//NON-NLS-1
-		factory.addNewWizardShortcut("org.eclipse.ui.wizards.new.folder");//NON-NLS-1
-		factory.addNewWizardShortcut("org.eclipse.ui.wizards.new.file");//NON-NLS-1
-	}
-
-	private void addViewShortcuts() {
-		factory.addShowViewShortcut("org.eclipse.ant.ui.views.AntView"); //NON-NLS-1
-		factory.addShowViewShortcut("org.eclipse.team.ccvs.ui.AnnotateView"); //NON-NLS-1
-		factory.addShowViewShortcut("org.eclipse.pde.ui.DependenciesView"); //NON-NLS-1
-		factory.addShowViewShortcut("org.eclipse.jdt.junit.ResultView"); //NON-NLS-1
-		factory.addShowViewShortcut("org.eclipse.team.ui.GenericHistoryView"); //NON-NLS-1
-		factory.addShowViewShortcut(IConsoleConstants.ID_CONSOLE_VIEW);
-		factory.addShowViewShortcut(JavaUI.ID_PACKAGES);
-		factory.addShowViewShortcut(IPageLayout.ID_RES_NAV);
-		factory.addShowViewShortcut(IPageLayout.ID_PROBLEM_VIEW);
-		factory.addShowViewShortcut(IPageLayout.ID_OUTLINE);
-	}
-
-}
--- a/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/util/ProjectUtils.java	Thu Jan 21 09:00:50 2010 -0800
+++ b/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/util/ProjectUtils.java	Thu Jan 21 11:52:32 2010 -0800
@@ -61,6 +61,7 @@
 import org.w3c.dom.NodeList;
 
 public class ProjectUtils {
+	private static final String DEFAULT_APTANA_WORKSPACE = "Aptana Studio Workspace";
 	private static final String WRT_PREVIEW_MAIN_HTML = "wrt_preview_main.html";
 	public static final String PREVIEW_FOLDER = "preview";
 	public static final String PREVIEW_FRAME_FILE = "wrt_preview_frame.html";
@@ -250,8 +251,15 @@
 	public static String getDefaultAptanaLocation() {
 		File myDocuments = FileSystemView.getFileSystemView()
 				.getDefaultDirectory();
-		File file = new File(myDocuments, "Aptana Studio Workspace");
-		return file.exists() ? file.getAbsolutePath() : "";
+		File file = new File(myDocuments, DEFAULT_APTANA_WORKSPACE); // Windows
+		if (file.exists()) {
+			return file.getAbsolutePath();
+		}
+		file = new File(myDocuments, "Documents" + File.separator + DEFAULT_APTANA_WORKSPACE); // Mac OS X
+		if (file.exists()) {
+			return file.getAbsolutePath();
+		}
+		return "";
 	}
 
 	public static boolean isAptanaProject(File f) {
--- a/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/wizards/AptanaProjectsImportWizard.java	Thu Jan 21 09:00:50 2010 -0800
+++ b/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/wizards/AptanaProjectsImportWizard.java	Thu Jan 21 11:52:32 2010 -0800
@@ -24,11 +24,12 @@
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.wizard.Wizard;
 import org.eclipse.ui.IImportWizard;
+import org.eclipse.ui.INewWizard;
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.wizards.newresource.BasicNewProjectResourceWizard;
 
 public class AptanaProjectsImportWizard extends Wizard implements
-		IImportWizard, IExecutableExtension {
+		IImportWizard, INewWizard, IExecutableExtension {
 
 	private AptanaProjectLocationWizardPage mainPage;
 	private IConfigurationElement config;